diff --git a/.gitignore b/.gitignore index 01d1852af..d5f6e0f2a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,6 @@ app-settings.json www/js/control/collect-settings.js www/js/control/sync-settings.js www/js/control/transition-notify-settings.js +www/pro-manifest.json config.xml package.json diff --git a/GoogleService-Info.plist b/GoogleService-Info.plist new file mode 100644 index 000000000..ec3786b66 --- /dev/null +++ b/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 463780887765-etam5pe3elp6u2tfkoluiamebfqhj9o4.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.463780887765-etam5pe3elp6u2tfkoluiamebfqhj9o4 + API_KEY + AIzaSyD6YAnUtO7-9AO_K4Rj_kK0V36x86CJPYI + GCM_SENDER_ID + 463780887765 + PLIST_VERSION + 1 + BUNDLE_ID + com.fabmobqc.mamobiliteapp + PROJECT_ID + fabmobqc + STORAGE_BUCKET + fabmobqc.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:463780887765:ios:40fe635c5ee976bcbc365c + + \ No newline at end of file diff --git a/README.md b/README.md index c9b029ec0..d26697a40 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,8 @@ One advantage of using `skip` authentication in development mode is that any use Updating the e-mission-\* plugins or adding new plugins --- -[![osx-build-ios](https://github.com/e-mission/e-mission-phone/actions/workflows/ios-build.yml/badge.svg)](https://github.com/e-mission/e-mission-phone/actions/workflows/ios-build.yml) -[![osx-build-android](https://github.com/e-mission/e-mission-phone/actions/workflows/android-build.yml/badge.svg)](https://github.com/e-mission/e-mission-phone/actions/workflows/android-build.yml) +[![osx-build-ios](https://github.com/e-mission/e-mission-phone/workflows/osx-build-ios/badge.svg)](https://github.com/e-mission/e-mission-phone/actions?query=workflow%3Aosx-ubuntu-build-android) +[![osx-ubuntu-build-android](https://github.com/e-mission/e-mission-phone/workflows/osx-ubuntu-build-android/badge.svg)](https://github.com/e-mission/e-mission-phone/actions?query=workflow%3Aosx-build-ios) Pre-requisites --- @@ -94,32 +94,10 @@ Pre-requisites - or this [supposedly easier to use repo](https://github.com/xcpretty/xcode-install) - **NOTE**: the basic xcode install on Catalina was messed up for me due to a prior installation of command line tools. [These workarounds helped](https://github.com/nodejs/node-gyp/blob/master/macOS_Catalina.md). - git -- Java 11. Tested with [OpenJDK 11 (Temurin) using AdoptOpenJDK](https://adoptopenjdk.net/releases.html). -- android SDK; install manually or use setup script below. Note that you only need to run this once **per computer**. - ``` - $ bash setup/prereq_android_sdk_install.sh - ``` - -
Expected output - - ``` - Downloading the command line tools for mac - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 114M 100 114M 0 0 8092k 0 0:00:14 0:00:14 --:--:-- 8491k - Found downloaded file at /tmp/commandlinetools-mac-8092744_latest.zip - Installing the command line tools - Archive: /tmp/commandlinetools-mac-8092744_latest.zip - ... - Downloading the android SDK. This will take a LONG time and will require you to agree to lots of licenses. - Do you wish to continue? (Y/N)Y - ... - Accept? (y/N): Y - ... - [====== ] 17% Downloading x86_64-23_r33.zip... s - ``` - -
+- the most recent version of android studio + - **NOTE**: although Catalina has a `/usr/bin/java`, trying to run it gives the error `No Java runtime present, requesting install.`. Installed [OpenJDK 1.8 using AdoptOpenJDK](https://adoptopenjdk.net/releases.html) to be consistent with the CI. + - NOTE: The setup script below will modify this install to workaround + https://github.com/actions/virtual-environments/issues/3757 Important --- @@ -158,17 +136,9 @@ $ cp ..... www/json/connectionConfig.json $ source setup/activate_native.sh ``` -### Activation (after install, and in every new shell) - -If connecting to a development server over http, make sure to turn on http support on android -``` - - - -``` -### Run in the emulator +Run in the emulator ``` $ npx cordova emulate ios diff --git a/bin/sign_and_align_keys.sh b/bin/sign_and_align_keys.sh index 3a0bb0d76..034b8a63a 100644 --- a/bin/sign_and_align_keys.sh +++ b/bin/sign_and_align_keys.sh @@ -11,7 +11,6 @@ fi # Sign and release the L+ version # Make sure the highest supported version has the biggest version code npx cordova build android --release -- --minSdkVersion=22 -# cp platforms/android/app/build/outputs/apk/release/app-release-unsigned.aab platforms/android/app/build/outputs/apk/app-release-signed-unaligned.apk -jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore ../config_files/production.keystore ./platforms/android/app/build/outputs/bundle/release/app-release.aab androidproductionkey -cp platforms/android/app/build/outputs/bundle/release/app-release.aab $1-build-$2.aab -# ~/Library/Android/sdk/build-tools/30.0.1/zipalign -v 4 platforms/android/app/build/outputs/apk/app-release-signed-unaligned.apk $1-build-$2.apk +cp platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk platforms/android/app/build/outputs/apk/app-release-signed-unaligned.apk +jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../config_files/production.keystore ./platforms/android/app/build/outputs/apk/app-release-signed-unaligned.apk androidproductionkey +~/Library/Android/sdk/build-tools/30.0.1/zipalign -v 4 platforms/android/app/build/outputs/apk/app-release-signed-unaligned.apk $1-build-$2.apk diff --git a/bower.json b/bower.json index 57402ac63..eb1356332 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { - "name": "emission", + "name": "TraceMe", "private": "true", "devDependencies": { "ionic": "driftyco/ionic-bower#1.3.1", @@ -27,8 +27,8 @@ "angular-translate": "^2.18.1", "angular-translate-loader-static-files": "^2.18.1", "angular-translate-interpolation-messageformat": "^2.18.1", - "bottleneck": "^2.19.5", - "angular-qrcode": "https://github.com/sebastianbarry/angular-qrcode.git#v7.3.0", - "jquery-xml2json": "^0.0.8" + "angular-translate-storage-cookie": "^2.18.1", + "angular-translate-storage-local": "^2.18.1", + "bottleneck": "^2.19.5" } } diff --git a/config.cordovabuild.xml b/config.cordovabuild.xml index 5f5f4f2a3..489570e68 100644 --- a/config.cordovabuild.xml +++ b/config.cordovabuild.xml @@ -1,15 +1,15 @@ - - emission + + Ma Mobilité A commute pattern tracker and carbon footprint estimator. - - E-Mission Team - + + Fabrique des Mobilités Québec + - + diff --git a/config.serve.xml b/config.serve.xml index d596f0026..486237d2c 100644 --- a/config.serve.xml +++ b/config.serve.xml @@ -1,6 +1,6 @@ - emission + TraceMe A commute pattern tracker and carbon footprint estimator. diff --git a/google-services.json b/google-services.json new file mode 100644 index 000000000..5a3fc7b57 --- /dev/null +++ b/google-services.json @@ -0,0 +1,46 @@ +{ + "project_info": { + "project_number": "463780887765", + "project_id": "fabmobqc", + "storage_bucket": "fabmobqc.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:463780887765:android:598cde1db65f1cc9bc365c", + "android_client_info": { + "package_name": "com.fabmoqc.mamobilite" + } + }, + "oauth_client": [ + { + "client_id": "463780887765-6mguoskq0k2v0t2eaj6mes3hrtu9vn74.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDiQ7D5zf0hW0Xyl8v2JE5w4M5HhT1RGZ8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "463780887765-6mguoskq0k2v0t2eaj6mes3hrtu9vn74.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "463780887765-d48a77jepjhssklo5754tt1gfgqn3ikb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.fabmoqc.mamobilite" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..0cea82463 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5755 @@ +{ + "name": "com.fabmoqc.mamobilite", + "version": "3.0.5", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@havesource/cordova-plugin-push": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@havesource/cordova-plugin-push/-/cordova-plugin-push-2.0.0.tgz", + "integrity": "sha512-1FwXucwqpK3wk3VcbrxM1ybjKLpl7pIY8XQ4WF/ejxYgYIbvMwHLWk6UW8j8hR8G/Jo3qJZLnZR7EOxpSCjTxQ==" + }, + "@ionic/cli": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@ionic/cli/-/cli-6.12.0.tgz", + "integrity": "sha512-R4qvStVjSfg4pTLR0gtSfOQXSXV1hhGAV+pDorQ5gcUnhGEPtWxPxErNKlENlS3WPQ4MT6huKMGCkpDbQfq+hQ==", + "dev": true, + "requires": { + "@ionic/cli-framework": "5.0.6", + "@ionic/cli-framework-output": "2.2.2", + "@ionic/cli-framework-prompts": "2.1.8", + "@ionic/utils-array": "2.1.5", + "@ionic/utils-fs": "3.1.5", + "@ionic/utils-network": "2.1.5", + "@ionic/utils-process": "2.1.8", + "@ionic/utils-stream": "3.1.5", + "@ionic/utils-subprocess": "2.1.8", + "@ionic/utils-terminal": "2.3.1", + "chalk": "^4.0.0", + "debug": "^4.0.0", + "diff": "^4.0.1", + "elementtree": "^0.1.7", + "leek": "0.0.24", + "lodash": "^4.17.5", + "open": "^7.0.4", + "os-name": "^4.0.0", + "semver": "^7.1.1", + "split2": "^3.0.0", + "ssh-config": "^1.1.1", + "stream-combiner2": "^1.1.1", + "superagent": "^5.2.1", + "superagent-proxy": "^2.0.0", + "tar": "^6.0.1", + "tslib": "^2.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "@ionic/cli-framework": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.0.6.tgz", + "integrity": "sha512-CygkCCn+O3vMmt+l5y+evmcBHBI/HVr+QWQVca84ooM2lrLzIQDRC+iZ5RKOnF+eCcywGZ6a68FvXoWAvQzfmw==", + "dev": true, + "requires": { + "@ionic/cli-framework-output": "2.2.2", + "@ionic/utils-array": "2.1.5", + "@ionic/utils-fs": "3.1.5", + "@ionic/utils-object": "2.1.5", + "@ionic/utils-process": "2.1.8", + "@ionic/utils-stream": "3.1.5", + "@ionic/utils-subprocess": "2.1.8", + "@ionic/utils-terminal": "2.3.1", + "chalk": "^4.0.0", + "debug": "^4.0.0", + "lodash": "^4.17.5", + "minimist": "^1.2.0", + "rimraf": "^3.0.0", + "tslib": "^2.0.1", + "write-file-atomic": "^3.0.0" + } + }, + "@ionic/cli-framework-output": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.2.tgz", + "integrity": "sha512-eQYkqIW1/tCwSC6Bd0gjse96U11lDX/ikf3jvsjX7a8z/zwSmGzCHRizb7xogV65Ey+1/zyAZR71cpDRQuFLBQ==", + "dev": true, + "requires": { + "@ionic/utils-terminal": "2.3.1", + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/cli-framework-prompts": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-prompts/-/cli-framework-prompts-2.1.8.tgz", + "integrity": "sha512-DjO4lQsmvficsZbPmpGqSSx+F1BfgSTQBwRqL5bl9Dkh9rIZ/ckcJcKqCciVOw9kIY7WTeNFOTwj2vWrkFn7+Q==", + "dev": true, + "requires": { + "@ionic/utils-terminal": "2.3.1", + "debug": "^4.0.0", + "inquirer": "^7.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-array": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", + "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-fs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.5.tgz", + "integrity": "sha512-a41bY2dHqWSEQQ/80CpbXSs8McyiCFf2DnIWWLukrhYWf46h4qi6M/8dxcMKrofRiqI/3F+cL3S2mOm9Zz/o2Q==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "fs-extra": "^9.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-network": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-network/-/utils-network-2.1.5.tgz", + "integrity": "sha512-HUQ1Ec4Mh2MXzzKdbbbDS6xYKwpFJ2XRY7SYXbaZT8+jiNahfHbsOfe62/p8bk41Yil7E9EagzGC2JvIFJh01w==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-object": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", + "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-process": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.8.tgz", + "integrity": "sha512-VBBoyTzi+m6tgKAItl+jiTQneGwTOsctcrTG4CsEgmVOVOEhUYkPhddXqzD+oC54hPDU9ROsd3I014P5CWEuhQ==", + "dev": true, + "requires": { + "@ionic/utils-object": "2.1.5", + "@ionic/utils-terminal": "2.3.1", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "tree-kill": "^1.2.2", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-stream": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", + "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-subprocess": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.8.tgz", + "integrity": "sha512-pkmtf1LtXcEMPn6/cctREL2aZtZoy0+0Sl+nT0NIkOHIoBUcqrcfMWdctCSM4Mp6+2/hLWtgpHE3TOIibkWfIg==", + "dev": true, + "requires": { + "@ionic/utils-array": "2.1.5", + "@ionic/utils-fs": "3.1.5", + "@ionic/utils-process": "2.1.8", + "@ionic/utils-stream": "3.1.5", + "@ionic/utils-terminal": "2.3.1", + "cross-spawn": "^7.0.0", + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-terminal": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.1.tgz", + "integrity": "sha512-cglsSd2AckI3Ldtdfczeq64vIIDjtPspV5QJtky8f8uIdxkeOIGeRV7bCj1+BEf1hyo+ZuggQxLviHnbMZhiRw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "@netflix/nerror": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", + "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", + "requires": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "android-versions": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.7.0.tgz", + "integrity": "sha512-TCy4b8Dk8YS6A23ZPfhSKqK66JHFq0D8avGYiwvYpjno6HrrcI0DRgHx9+jtkvWYmrsE2vQWgbHJhvGGhhOb0g==", + "requires": { + "semver": "^5.7.1" + } + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bower": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "requires": { + "stream-buffers": "2.2.x" + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "conf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", + "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "cordova": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/cordova/-/cordova-10.0.0.tgz", + "integrity": "sha512-00wMcj3X9ILhKtvRG2iEwO2qly4B+vgXFhH4WhVepWg2UVbD1opl1q9jSZ+j2AaI/vsBWW8e6M2M5FAHasnuWw==", + "dev": true, + "requires": { + "configstore": "^5.0.1", + "cordova-common": "^4.0.2", + "cordova-create": "^3.0.0", + "cordova-lib": "^10.0.0", + "editor": "^1.0.0", + "execa": "^4.0.3", + "fs-extra": "^9.0.1", + "insight": "^0.10.3", + "loud-rejection": "^2.2.0", + "nopt": "^4.0.3", + "semver": "^7.3.2", + "systeminformation": "^4.26.10", + "update-notifier": "^4.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "cordova-android": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-10.1.0.tgz", + "integrity": "sha512-nkVh8VMDWoDmvWaQav/sF3Q7N9ZpRRNBJduDhjCOMwYUF/6q2526i/Jb/wJLdXmetBNh+THkGolcTBi9i+1UzA==", + "requires": { + "android-versions": "^1.7.0", + "cordova-common": "^4.0.2", + "execa": "^5.1.1", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "is-path-inside": "^3.0.3", + "nopt": "^5.0.0", + "properties-parser": "^0.3.1", + "semver": "^7.3.5", + "untildify": "^4.0.0", + "which": "^2.0.2" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "cordova-app-hello-world": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-5.0.0.tgz", + "integrity": "sha512-5My01wsYoeYwS0f/t5Ck52xPm0+2zYJ0SlvxG9vUsndDGtgiP6t/G8upPgWcyDRRz7Rs/50yZuOntmHqmJxccQ==", + "dev": true + }, + "cordova-clipboard": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cordova-clipboard/-/cordova-clipboard-1.3.0.tgz", + "integrity": "sha512-IGk4LZm/DJ0Xk/jgakHm4wa+A/lrRP3QfzMAHDG7oWLJS4ISOpfI32Wez4ndnENItRslGyBVyJyKD83CxELCAw==" + }, + "cordova-common": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.0.2.tgz", + "integrity": "sha512-od7aNShyuBajzPY83mUEO8tERwwWdFklXETHiXP5Ft87CWeo/tSuwNPFztyTy8XYc74yXdogXKPTJeUHuVzB8Q==", + "requires": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.2.0", + "cross-spawn": "^7.0.1", + "elementtree": "^0.1.7", + "endent": "^1.4.1", + "fast-glob": "^3.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "plist": "^3.0.1", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0", + "underscore": "^1.9.2" + } + }, + "cordova-create": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-3.0.0.tgz", + "integrity": "sha512-WxZRTnt5RHxSAB9urnHFUtVBcIe1YjR4sfwHLsxakNoKkFhcie3HrV5QmNBgRQ5DkxmanRN3VSx4OrPVsNmAaQ==", + "dev": true, + "requires": { + "cordova-app-hello-world": "^5.0.0", + "cordova-common": "^4.0.1", + "cordova-fetch": "^3.0.0", + "fs-extra": "^9.0.0", + "globby": "^11.0.0", + "import-fresh": "^3.2.1", + "isobject": "^4.0.0", + "npm-package-arg": "^8.0.1", + "path-is-inside": "^1.0.2", + "tmp": "^0.2.1", + "valid-identifier": "0.0.2" + }, + "dependencies": { + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, + "cordova-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.0.1.tgz", + "integrity": "sha512-bxXk6H3FtGXpCtlO+XyXM4pa72azQomdurNeHbZai9eYBzA5vjyPnsgxsYcylLUc1wQFeR+XWQVfgJitx6ghEw==", + "dev": true, + "requires": { + "cordova-common": "^4.0.0", + "fs-extra": "^9.0.0", + "npm-package-arg": "^8.0.1", + "pacote": "^11.1.11", + "pify": "^5.0.0", + "resolve": "^1.15.1", + "semver": "^7.1.3", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "cordova-ios": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.2.0.tgz", + "integrity": "sha512-sLjZg2QBI1SpQVwfe0MSn89YNVkBGLW9Q1vcFJBsqKBrhvoEOJ5Ytq0gwqdhgTOGzlwJUfxC6OHM3jcsRjtYrw==", + "requires": { + "cordova-common": "^4.0.2", + "fs-extra": "^9.1.0", + "ios-sim": "^8.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.1", + "semver": "^7.3.4", + "unorm": "^1.6.0", + "which": "^2.0.2", + "xcode": "^3.0.1", + "xml-escape": "^1.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "cordova-lib": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-10.1.0.tgz", + "integrity": "sha512-JY/r/5RKRjgrjJ1a8z0x/NEU33/97mTFB76PCCcvQOySnmZ0rygRBYmwl2+XwFuUR0LP+fnbieePv6LiPc9UkA==", + "dev": true, + "requires": { + "cordova-common": "^4.0.2", + "cordova-fetch": "^3.0.1", + "cordova-serve": "^4.0.0", + "dep-graph": "^1.1.0", + "detect-indent": "^6.1.0", + "detect-newline": "^3.1.0", + "elementtree": "^0.1.7", + "execa": "^4.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.4", + "init-package-json": "^1.10.3", + "md5-file": "^5.0.0", + "pify": "^5.0.0", + "semver": "^7.3.5", + "stringify-package": "^1.0.1", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "cordova-plugin-advanced-http": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.2.2.tgz", + "integrity": "sha512-9djtQuRwWMqCLTNRrtAIlGyRcs2D0AJXOzkedOQ6udlg3IVE58hhxjrFOdKz6WvoJ6w2MNVeRYafYvoWLHFuMA==" + }, + "cordova-plugin-androidx-adapter": { + "version": "git+https://github.com/dpa99c/cordova-plugin-androidx-adapter.git#2166b075d271103f84efc0d19b0f0ca1372cad2c", + "from": "git+https://github.com/dpa99c/cordova-plugin-androidx-adapter.git", + "requires": { + "q": "^1.5.1", + "recursive-readdir": "^2.2.2" + } + }, + "cordova-plugin-app-version": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.12.tgz", + "integrity": "sha512-P+0d9+h9HasanKuMd8tcEpuJJlsVmClie3Mbq16v3TV/VroDrgYB6Ea8Imkc/WjjMVSBCjWB+pji1LoupWlddA==" + }, + "cordova-plugin-customurlscheme": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-5.0.2.tgz", + "integrity": "sha512-g139Av7iYD3xcSsCd5S6a7B7dp4GTqGYtvdhh44g4OS38+aX6XkC1lsCRmROuhLIs4fkwJqkrvxacH9H4U9Gsg==" + }, + "cordova-plugin-device": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.3.tgz", + "integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw==" + }, + "cordova-plugin-em-datacollection": { + "version": "git+https://github.com/e-mission/e-mission-data-collection.git#8f7a40adf126483ba4861dae03dbde576567e7f8", + "from": "git+https://github.com/e-mission/e-mission-data-collection.git#v1.7.1" + }, + "cordova-plugin-em-jwt-auth": { + "version": "git+https://github.com/e-mission/cordova-jwt-auth.git#51c51da7e306b2dc52b6eb34a71e612a430c5553", + "from": "git+https://github.com/e-mission/cordova-jwt-auth.git#v1.6.5" + }, + "cordova-plugin-em-server-communication": { + "version": "git+https://github.com/e-mission/cordova-server-communication.git#95661c83db23bbcef7dad8ecfe857e1bbbc63c83", + "from": "git+https://github.com/e-mission/cordova-server-communication.git#v1.2.3" + }, + "cordova-plugin-em-serversync": { + "version": "git+https://github.com/e-mission/cordova-server-sync.git#7697415cfe2496e01ee71d78502fd1ff3bfb24d8", + "from": "git+https://github.com/e-mission/cordova-server-sync.git#v1.2.8" + }, + "cordova-plugin-em-settings": { + "version": "git+https://github.com/e-mission/cordova-connection-settings.git#b936f6fbad37405493b56fbd14cec3a1d8a75740", + "from": "git+https://github.com/e-mission/cordova-connection-settings.git#v1.2.2" + }, + "cordova-plugin-em-transition-notify": { + "version": "git+https://github.com/e-mission/e-mission-transition-notify.git#693ca0eedc71cde3ccf3e0a273bf8ce3cc54d4bd", + "from": "git+https://github.com/e-mission/e-mission-transition-notify.git#v1.2.6" + }, + "cordova-plugin-em-unifiedlogger": { + "version": "git+https://github.com/e-mission/cordova-unified-logger.git#d65e4f840e27c0b2dac4160b4a88ce6ca10d09f3", + "from": "git+https://github.com/e-mission/cordova-unified-logger.git#v1.3.5" + }, + "cordova-plugin-em-usercache": { + "version": "git+https://github.com/e-mission/cordova-usercache.git#3d67b446dccbcd4ca363d14826870d7ac8d51e34", + "from": "git+https://github.com/e-mission/cordova-usercache.git#v1.1.4" + }, + "cordova-plugin-email-composer": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-email-composer/-/cordova-plugin-email-composer-0.9.2.tgz", + "integrity": "sha512-w8eQZ6lbYWut13o/Cprixmacfyq5hds7DAjuTL34eQhyWWd/DA/o6ziiyY3So2ZOozeQ4DxQpyPN4BiqUKcyew==" + }, + "cordova-plugin-file": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz", + "integrity": "sha512-m7cughw327CjONN/qjzsTpSesLaeybksQh420/gRuSXJX5Zt9NfgsSbqqKDon6jnQ9Mm7h7imgyO2uJ34XMBtA==" + }, + "cordova-plugin-inappbrowser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-inappbrowser/-/cordova-plugin-inappbrowser-5.0.0.tgz", + "integrity": "sha512-MqnpmUQ/iy6hxtIGDdlIhy8aNi1pNanLATpbnkk7uCqW9YQ4rH/dGK9zESbZ50pUi2A2D2QMjBXNV175TJK5OQ==" + }, + "cordova-plugin-ionic": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/cordova-plugin-ionic/-/cordova-plugin-ionic-5.5.1.tgz", + "integrity": "sha512-M9nxMMKpPV69PjTgvBACl/MAZ41wBL3M8+8jACA0wgwX+v8yUZFbx+h51pT3hBHGfZk17/ipyzPZxfOldDJbyg==", + "requires": { + "typescript": "3.8.3" + } + }, + "cordova-plugin-ionic-keyboard": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-keyboard/-/cordova-plugin-ionic-keyboard-2.2.0.tgz", + "integrity": "sha512-yDUG+9ieKVRitq5mGlNxjaZh/MgEhFFIgTIPhqSbUaQ8UuZbawy5mhJAVClqY97q8/rcQtL6dCDa7x2sEtCLcA==" + }, + "cordova-plugin-ionic-webview": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-5.0.0.tgz", + "integrity": "sha512-Wq0kCanxubK/JroTW4Mp5soayScnRyiY1eCkbwiz1Dyt1xHOiOW/v+1miqtBHtnZhcXw25TulCKAVJzkNBdmyg==" + }, + "cordova-plugin-local-notification": { + "version": "git+https://github.com/timkellypa/cordova-plugin-local-notifications.git#083ccca0f4eee8fbec0cde1edd32207c286d2a04", + "from": "git+https://github.com/timkellypa/cordova-plugin-local-notifications.git#083ccca0f4eee8fbec0cde1edd32207c286d2a04" + }, + "cordova-plugin-whitelist": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.5.tgz", + "integrity": "sha512-+v/VzCYBdGsIxJTP2m+RWaq7l/NLu7b976w6XGJUFiN2TVOeaGrytaR4jRy0w9akRai8uKFeBmuGHmlS/sOeCA==" + }, + "cordova-plugin-x-socialsharing": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cordova-plugin-x-socialsharing/-/cordova-plugin-x-socialsharing-6.0.3.tgz", + "integrity": "sha512-pnrE2CXsz4G0n0WoFDAasLS1VT3nIsNpddvXgfpiqX3wyOlSjO2NdF+sjYaTvs1B+f7z8EWbYCHpCrgBQiMLIg==" + }, + "cordova-serve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz", + "integrity": "sha512-gzTLeBQzNP8aM/nG0/7sSfICfNazUgwvEU2kiDaybbYXmxwioo2v96h4tzE0XOyA64beyYwAyRYEEqWA4AMZjw==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "compression": "^1.7.4", + "express": "^4.17.1", + "open": "^7.0.3", + "which": "^2.0.2" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "degenerator": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", + "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "dev": true, + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "dep-graph": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", + "integrity": "sha1-+t6GqSeZqBPptCURzfPfpsyNvv4=", + "dev": true, + "requires": { + "underscore": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", + "integrity": "sha1-/FxrB2VnPZKi1KyLTcCqiHAuK9Q=", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", + "requires": { + "sax": "1.1.4" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", + "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.4" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + } + } + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "insight": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz", + "integrity": "sha512-YOncxSN6Omh+1Oqxt+OJAvJVMDKw7l6IEG0wT2cTMGxjsTcroOGW4IR926QDzxg/uZHcFZ2cZbckDWdZhc2pZw==", + "dev": true, + "requires": { + "async": "^2.6.2", + "chalk": "^2.4.2", + "conf": "^1.4.0", + "inquirer": "^6.3.1", + "lodash.debounce": "^4.0.8", + "os-name": "^3.1.0", + "request": "^2.88.0", + "tough-cookie": "^3.0.1", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "windows-release": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz", + "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==", + "dev": true, + "requires": { + "execa": "^1.0.0" + } + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "ios-sim": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-8.0.2.tgz", + "integrity": "sha512-P7nEG771bfd+JoMRjnis1gpZOkjTUUxu+4Ek1Z+eoaEEoT9byllU9pxfQ8Df7hL3gSkIQxNwTSLhos2I8tWUQA==", + "requires": { + "bplist-parser": "^0.0.6", + "nopt": "1.0.9", + "plist": "^3.0.1", + "simctl": "^2" + }, + "dependencies": { + "bplist-parser": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", + "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=" + }, + "nopt": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz", + "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=", + "requires": { + "abbrev": "1" + } + } + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + } + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leek": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/leek/-/leek-0.0.24.tgz", + "integrity": "sha1-5ADlfw5g2O8r1NBo3EKKVDRdvNo=", + "dev": true, + "requires": { + "debug": "^2.1.0", + "lodash.assign": "^3.2.0", + "rsvp": "^3.0.21" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "dev": true + }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", + "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "md5-file": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", + "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + } + } + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + }, + "dependencies": { + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", + "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^4.1.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + } + }, + "pac-resolver": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", + "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "dev": true, + "requires": { + "degenerator": "^2.2.0", + "ip": "^1.1.5", + "netmask": "^2.0.1" + } + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + }, + "properties-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", + "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=", + "requires": { + "string.prototype.codepointat": "^0.2.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", + "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "dev": true, + "requires": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^4.1.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-chunk": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", + "requires": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + } + }, + "read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simctl": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/simctl/-/simctl-2.0.3.tgz", + "integrity": "sha512-kKCak0yszxHae5eVWcmrjV3ouUGac3sjlhjdLWpyPu4eiQcWoHsCrqS34kkgzHN8Ystqkh/LFjzrldk/g3BYJg==", + "requires": { + "shelljs": "^0.8.5", + "tail": "^0.4.0" + } + }, + "simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "requires": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + }, + "dependencies": { + "bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "requires": { + "big-integer": "1.6.x" + } + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "ssh-config": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/ssh-config/-/ssh-config-1.1.6.tgz", + "integrity": "sha512-ZPO9rECxzs5JIQ6G/2EfL1I9ho/BVZkx9HRKn8+0af7QgwAmumQ7XBFP1ggMyPMo+/tUbmv0HFdv4qifdO/9JA==", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", + "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "superagent-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-2.1.0.tgz", + "integrity": "sha512-DnarpKN6Xn8e3pYlFV4Yvsj9yxLY4q5FIsUe5JvN7vjzP+YCfzXv03dTkZSD2yzrSadsNYHf0IgOUJwKjX457A==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "proxy-agent": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "systeminformation": { + "version": "4.34.23", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.34.23.tgz", + "integrity": "sha512-33+lQwlLxXoxy0o9WLOgw8OjbXeS3Jv+pSl+nxKc2AOClBI28HsdRPpH0u9Xa9OVjHLT9vonnOMw1ug7YXI0dA==", + "dev": true + }, + "tail": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz", + "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI=" + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" + }, + "underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unorm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", + "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + }, + "valid-identifier": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", + "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + } + }, + "with-open-file": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", + "requires": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xml-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", + "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=" + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } +} diff --git a/package.cordovabuild.json b/package.cordovabuild.json index 820dfd764..59fd91534 100644 --- a/package.cordovabuild.json +++ b/package.cordovabuild.json @@ -1,7 +1,7 @@ { - "name": "edu.berkeley.eecs.emission", - "version": "3.2.4", - "displayName": "emission", + "name": "com.fabmoqc.mamobilite", + "version": "3.0.5", + "displayName": "Ma Mobilité", "license": "BSD-3-Clause", "repository": { "type": "git", @@ -27,18 +27,18 @@ "cordova-plugin-app-version": {}, "cordova-plugin-file": {}, "cordova-plugin-device": {}, - "cordova-plugin-customurlscheme": { - "URL_SCHEME": "emission", - "ANDROID_SCHEME": " ", - "ANDROID_HOST": " ", - "ANDROID_PATHPREFIX": "/" + "cordova-plugin-customurlscheme": { + "URL_SCHEME": "emission", + "ANDROID_SCHEME": " ", + "ANDROID_HOST": " ", + "ANDROID_PATHPREFIX": "/" }, "cordova-plugin-email-composer": { "ANDROID_SUPPORT_V4_VERSION": "27.+" }, "cordova-plugin-x-socialsharing": { - "PHOTO_LIBRARY_ADD_USAGE_DESCRIPTION": "This app requires photo library access to share photos on social media.", - "PHOTO_LIBRARY_USAGE_DESCRIPTION": "This app requires photo library access to share photos on social media." + "PHOTO_LIBRARY_ADD_USAGE_DESCRIPTION": "This app requires photo library access to function properly.", + "PHOTO_LIBRARY_USAGE_DESCRIPTION": "This app requires photo library access to function properly." }, "cordova-plugin-inappbrowser": {}, "cordova-plugin-local-notification": {}, @@ -53,24 +53,25 @@ "cordova-plugin-ionic-webview": { "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+" }, - "cordova-plugin-em-jwt-auth": { - "AUTH_VERSION": "19.2.0" + "cordova-plugin-whitelist": {}, + "cordova-plugin-em-jwt-auth": { + "AUTH_VERSION": "19.2.0" }, "cordova-plugin-em-server-communication": {}, - "cordova-plugin-em-datacollection": { - "LOCATION_VERSION": "18.0.0", - "ANDROIDX_CORE_VERSION": "1.7.0" + "cordova-plugin-em-datacollection": { + "LOCATION_VERSION": "18.0.0", + "ANDROIDX_CORE_VERSION": "1.7.0" }, "cordova-plugin-em-serversync": {}, "cordova-plugin-em-settings": {}, "cordova-plugin-em-transition-notify": {}, "cordova-plugin-em-unifiedlogger": {}, "cordova-plugin-em-usercache": {}, - "cordova-plugin-androidx-adapter": {}, - "phonegap-plugin-barcodescanner": {} + "cordova-plugin-androidx-adapter": {} } }, "dependencies": { + "cordova-clipboard": "^1.3.0", "cordova-android": "10.1.0", "cordova-ios": "6.2.0", "cordova-plugin-advanced-http": "3.2.2", @@ -78,14 +79,14 @@ "cordova-plugin-app-version": "0.1.12", "cordova-plugin-customurlscheme": "5.0.2", "cordova-plugin-device": "2.0.3", - "cordova-plugin-em-datacollection": "git+https://github.com/e-mission/e-mission-data-collection.git#v1.7.3", + "cordova-plugin-em-datacollection": "git+https://github.com/e-mission/e-mission-data-collection.git#v1.7.1", "cordova-plugin-em-jwt-auth": "git+https://github.com/e-mission/cordova-jwt-auth.git#v1.6.5", - "cordova-plugin-em-server-communication": "git+https://github.com/e-mission/cordova-server-communication.git#v1.2.4", - "cordova-plugin-em-serversync": "git+https://github.com/e-mission/cordova-server-sync.git#v1.2.9", - "cordova-plugin-em-settings": "git+https://github.com/e-mission/cordova-connection-settings.git#v1.2.3", - "cordova-plugin-em-transition-notify": "git+https://github.com/e-mission/e-mission-transition-notify.git#v1.2.7", + "cordova-plugin-em-server-communication": "git+https://github.com/e-mission/cordova-server-communication.git#v1.2.3", + "cordova-plugin-em-serversync": "git+https://github.com/e-mission/cordova-server-sync.git#v1.2.8", + "cordova-plugin-em-settings": "git+https://github.com/e-mission/cordova-connection-settings.git#v1.2.2", + "cordova-plugin-em-transition-notify": "git+https://github.com/e-mission/e-mission-transition-notify.git#v1.2.6", "cordova-plugin-em-unifiedlogger": "git+https://github.com/e-mission/cordova-unified-logger.git#v1.3.5", - "cordova-plugin-em-usercache": "git+https://github.com/e-mission/cordova-usercache.git#v1.1.5", + "cordova-plugin-em-usercache": "git+https://github.com/e-mission/cordova-usercache.git#v1.1.4", "cordova-plugin-email-composer": "0.9.2", "cordova-plugin-file": "6.0.2", "cordova-plugin-inappbrowser": "5.0.0", @@ -93,10 +94,10 @@ "cordova-plugin-ionic-keyboard": "2.2.0", "cordova-plugin-ionic-webview": "5.0.0", "cordova-plugin-local-notification": "https://github.com/timkellypa/cordova-plugin-local-notifications.git#083ccca0f4eee8fbec0cde1edd32207c286d2a04", + "cordova-plugin-whitelist": "~1.3.3", "cordova-plugin-x-socialsharing": "6.0.3", "fs-extra": "^9.0.1", "klaw-sync": "^6.0.0", - "phonegap-plugin-barcodescanner": "git+https://github.com/phonegap/phonegap-plugin-barcodescanner#v8.1.0", "@havesource/cordova-plugin-push": "2.0.0" } } diff --git a/package.serve.json b/package.serve.json index 11b7977c7..ce17fe50d 100644 --- a/package.serve.json +++ b/package.serve.json @@ -1,7 +1,7 @@ { "name": "edu.berkeley.eecs.emission", "version": "2.5.0", - "displayName": "emission", + "displayName": "TraceMe", "license": "BSD-3-Clause", "repository": { "type": "git", diff --git a/resources/android/icon/drawable-hdpi-icon.png b/resources/android/icon/drawable-hdpi-icon.png new file mode 100644 index 000000000..35d781c8e Binary files /dev/null and b/resources/android/icon/drawable-hdpi-icon.png differ diff --git a/resources/android/icon/drawable-ldpi-icon.png b/resources/android/icon/drawable-ldpi-icon.png new file mode 100644 index 000000000..a52f6a30c Binary files /dev/null and b/resources/android/icon/drawable-ldpi-icon.png differ diff --git a/resources/android/icon/drawable-mdpi-icon.png b/resources/android/icon/drawable-mdpi-icon.png new file mode 100644 index 000000000..b5f8c4aa2 Binary files /dev/null and b/resources/android/icon/drawable-mdpi-icon.png differ diff --git a/resources/android/icon/drawable-xhdpi-icon.png b/resources/android/icon/drawable-xhdpi-icon.png new file mode 100644 index 000000000..71574bc8d Binary files /dev/null and b/resources/android/icon/drawable-xhdpi-icon.png differ diff --git a/resources/android/icon/drawable-xxhdpi-icon.png b/resources/android/icon/drawable-xxhdpi-icon.png new file mode 100644 index 000000000..00ed4047c Binary files /dev/null and b/resources/android/icon/drawable-xxhdpi-icon.png differ diff --git a/resources/android/icon/drawable-xxxhdpi-icon.png b/resources/android/icon/drawable-xxxhdpi-icon.png new file mode 100644 index 000000000..a0f90f2fe Binary files /dev/null and b/resources/android/icon/drawable-xxxhdpi-icon.png differ diff --git a/resources/android/splash/drawable-land-hdpi-screen.png b/resources/android/splash/drawable-land-hdpi-screen.png new file mode 100644 index 000000000..cc0090a3f Binary files /dev/null and b/resources/android/splash/drawable-land-hdpi-screen.png differ diff --git a/resources/android/splash/drawable-land-ldpi-screen.png b/resources/android/splash/drawable-land-ldpi-screen.png new file mode 100644 index 000000000..be3100678 Binary files /dev/null and b/resources/android/splash/drawable-land-ldpi-screen.png differ diff --git a/resources/android/splash/drawable-land-mdpi-screen.png b/resources/android/splash/drawable-land-mdpi-screen.png new file mode 100644 index 000000000..22e788e08 Binary files /dev/null and b/resources/android/splash/drawable-land-mdpi-screen.png differ diff --git a/resources/android/splash/drawable-land-xhdpi-screen.png b/resources/android/splash/drawable-land-xhdpi-screen.png new file mode 100644 index 000000000..83b882920 Binary files /dev/null and b/resources/android/splash/drawable-land-xhdpi-screen.png differ diff --git a/resources/android/splash/drawable-land-xxhdpi-screen.png b/resources/android/splash/drawable-land-xxhdpi-screen.png new file mode 100644 index 000000000..64a1bc5bd Binary files /dev/null and b/resources/android/splash/drawable-land-xxhdpi-screen.png differ diff --git a/resources/android/splash/drawable-land-xxxhdpi-screen.png b/resources/android/splash/drawable-land-xxxhdpi-screen.png new file mode 100644 index 000000000..6b98adbe0 Binary files /dev/null and b/resources/android/splash/drawable-land-xxxhdpi-screen.png differ diff --git a/resources/android/splash/drawable-port-hdpi-screen.png b/resources/android/splash/drawable-port-hdpi-screen.png new file mode 100644 index 000000000..373cb8f5f Binary files /dev/null and b/resources/android/splash/drawable-port-hdpi-screen.png differ diff --git a/resources/android/splash/drawable-port-ldpi-screen.png b/resources/android/splash/drawable-port-ldpi-screen.png new file mode 100644 index 000000000..67dd06522 Binary files /dev/null and b/resources/android/splash/drawable-port-ldpi-screen.png differ diff --git a/resources/android/splash/drawable-port-mdpi-screen.png b/resources/android/splash/drawable-port-mdpi-screen.png new file mode 100644 index 000000000..49a6f0f9c Binary files /dev/null and b/resources/android/splash/drawable-port-mdpi-screen.png differ diff --git a/resources/android/splash/drawable-port-xhdpi-screen.png b/resources/android/splash/drawable-port-xhdpi-screen.png new file mode 100644 index 000000000..ca286269f Binary files /dev/null and b/resources/android/splash/drawable-port-xhdpi-screen.png differ diff --git a/resources/android/splash/drawable-port-xxhdpi-screen.png b/resources/android/splash/drawable-port-xxhdpi-screen.png new file mode 100644 index 000000000..6f78b6844 Binary files /dev/null and b/resources/android/splash/drawable-port-xxhdpi-screen.png differ diff --git a/resources/android/splash/drawable-port-xxxhdpi-screen.png b/resources/android/splash/drawable-port-xxxhdpi-screen.png new file mode 100644 index 000000000..7135b23e7 Binary files /dev/null and b/resources/android/splash/drawable-port-xxxhdpi-screen.png differ diff --git a/resources/icon.png b/resources/icon.png index 81798f1b3..657dd1e1a 100644 Binary files a/resources/icon.png and b/resources/icon.png differ diff --git a/resources/ios/icon/icon-1024.png b/resources/ios/icon/icon-1024.png new file mode 100644 index 000000000..3d013d5e8 Binary files /dev/null and b/resources/ios/icon/icon-1024.png differ diff --git a/resources/ios/icon/icon-108@2x.png b/resources/ios/icon/icon-108@2x.png new file mode 100644 index 000000000..fb27877dc Binary files /dev/null and b/resources/ios/icon/icon-108@2x.png differ diff --git a/resources/ios/icon/icon-20.png b/resources/ios/icon/icon-20.png new file mode 100644 index 000000000..ba45c025f Binary files /dev/null and b/resources/ios/icon/icon-20.png differ diff --git a/resources/ios/icon/icon-20@2x.png b/resources/ios/icon/icon-20@2x.png new file mode 100644 index 000000000..621aea2fa Binary files /dev/null and b/resources/ios/icon/icon-20@2x.png differ diff --git a/resources/ios/icon/icon-20@3x.png b/resources/ios/icon/icon-20@3x.png new file mode 100644 index 000000000..73095e247 Binary files /dev/null and b/resources/ios/icon/icon-20@3x.png differ diff --git a/resources/ios/icon/icon-24@2x.png b/resources/ios/icon/icon-24@2x.png new file mode 100644 index 000000000..4bc78ec3d Binary files /dev/null and b/resources/ios/icon/icon-24@2x.png differ diff --git a/resources/ios/icon/icon-27.5@2x.png b/resources/ios/icon/icon-27.5@2x.png new file mode 100644 index 000000000..15f565f4d Binary files /dev/null and b/resources/ios/icon/icon-27.5@2x.png differ diff --git a/resources/ios/icon/icon-29.png b/resources/ios/icon/icon-29.png new file mode 100644 index 000000000..246f9af68 Binary files /dev/null and b/resources/ios/icon/icon-29.png differ diff --git a/resources/ios/icon/icon-29@2x.png b/resources/ios/icon/icon-29@2x.png new file mode 100644 index 000000000..2aeec48d4 Binary files /dev/null and b/resources/ios/icon/icon-29@2x.png differ diff --git a/resources/ios/icon/icon-29@3x.png b/resources/ios/icon/icon-29@3x.png new file mode 100644 index 000000000..e2f1bc70a Binary files /dev/null and b/resources/ios/icon/icon-29@3x.png differ diff --git a/resources/ios/icon/icon-40.png b/resources/ios/icon/icon-40.png new file mode 100644 index 000000000..621aea2fa Binary files /dev/null and b/resources/ios/icon/icon-40.png differ diff --git a/resources/ios/icon/icon-40@2x.png b/resources/ios/icon/icon-40@2x.png new file mode 100644 index 000000000..e94058616 Binary files /dev/null and b/resources/ios/icon/icon-40@2x.png differ diff --git a/resources/ios/icon/icon-40@3x.png b/resources/ios/icon/icon-40@3x.png new file mode 100644 index 000000000..912ec213c Binary files /dev/null and b/resources/ios/icon/icon-40@3x.png differ diff --git a/resources/ios/icon/icon-44@2x.png b/resources/ios/icon/icon-44@2x.png new file mode 100644 index 000000000..faad71a46 Binary files /dev/null and b/resources/ios/icon/icon-44@2x.png differ diff --git a/resources/ios/icon/icon-50.png b/resources/ios/icon/icon-50.png new file mode 100644 index 000000000..b837c8796 Binary files /dev/null and b/resources/ios/icon/icon-50.png differ diff --git a/resources/ios/icon/icon-50@2x.png b/resources/ios/icon/icon-50@2x.png new file mode 100644 index 000000000..408492605 Binary files /dev/null and b/resources/ios/icon/icon-50@2x.png differ diff --git a/resources/ios/icon/icon-60.png b/resources/ios/icon/icon-60.png new file mode 100644 index 000000000..73095e247 Binary files /dev/null and b/resources/ios/icon/icon-60.png differ diff --git a/resources/ios/icon/icon-60@2x.png b/resources/ios/icon/icon-60@2x.png new file mode 100644 index 000000000..912ec213c Binary files /dev/null and b/resources/ios/icon/icon-60@2x.png differ diff --git a/resources/ios/icon/icon-60@3x.png b/resources/ios/icon/icon-60@3x.png new file mode 100644 index 000000000..b8661b8a7 Binary files /dev/null and b/resources/ios/icon/icon-60@3x.png differ diff --git a/resources/ios/icon/icon-72.png b/resources/ios/icon/icon-72.png new file mode 100644 index 000000000..d1b4b5663 Binary files /dev/null and b/resources/ios/icon/icon-72.png differ diff --git a/resources/ios/icon/icon-72@2x.png b/resources/ios/icon/icon-72@2x.png new file mode 100644 index 000000000..c8124ed4a Binary files /dev/null and b/resources/ios/icon/icon-72@2x.png differ diff --git a/resources/ios/icon/icon-76.png b/resources/ios/icon/icon-76.png new file mode 100644 index 000000000..72a782971 Binary files /dev/null and b/resources/ios/icon/icon-76.png differ diff --git a/resources/ios/icon/icon-76@2x.png b/resources/ios/icon/icon-76@2x.png new file mode 100644 index 000000000..d3505a9b7 Binary files /dev/null and b/resources/ios/icon/icon-76@2x.png differ diff --git a/resources/ios/icon/icon-83.5@2x.png b/resources/ios/icon/icon-83.5@2x.png new file mode 100644 index 000000000..f938a5b21 Binary files /dev/null and b/resources/ios/icon/icon-83.5@2x.png differ diff --git a/resources/ios/icon/icon-86@2x.png b/resources/ios/icon/icon-86@2x.png new file mode 100644 index 000000000..79184089b Binary files /dev/null and b/resources/ios/icon/icon-86@2x.png differ diff --git a/resources/ios/icon/icon-98@2x.png b/resources/ios/icon/icon-98@2x.png new file mode 100644 index 000000000..a76c3a325 Binary files /dev/null and b/resources/ios/icon/icon-98@2x.png differ diff --git a/resources/ios/icon/icon.png b/resources/ios/icon/icon.png new file mode 100644 index 000000000..d3da6184c Binary files /dev/null and b/resources/ios/icon/icon.png differ diff --git a/resources/ios/icon/icon@2x.png b/resources/ios/icon/icon@2x.png new file mode 100644 index 000000000..6924a647e Binary files /dev/null and b/resources/ios/icon/icon@2x.png differ diff --git a/resources/ios/splash/Default-1792h~iphone.png b/resources/ios/splash/Default-1792h~iphone.png new file mode 100644 index 000000000..90219ce3d Binary files /dev/null and b/resources/ios/splash/Default-1792h~iphone.png differ diff --git a/resources/ios/splash/Default-2436h.png b/resources/ios/splash/Default-2436h.png new file mode 100644 index 000000000..3e271e254 Binary files /dev/null and b/resources/ios/splash/Default-2436h.png differ diff --git a/resources/ios/splash/Default-2688h~iphone.png b/resources/ios/splash/Default-2688h~iphone.png new file mode 100644 index 000000000..ff547f275 Binary files /dev/null and b/resources/ios/splash/Default-2688h~iphone.png differ diff --git a/resources/ios/splash/Default-568h@2x~iphone.png b/resources/ios/splash/Default-568h@2x~iphone.png new file mode 100644 index 000000000..0f7592453 Binary files /dev/null and b/resources/ios/splash/Default-568h@2x~iphone.png differ diff --git a/resources/ios/splash/Default-667h.png b/resources/ios/splash/Default-667h.png new file mode 100644 index 000000000..68e9a496f Binary files /dev/null and b/resources/ios/splash/Default-667h.png differ diff --git a/resources/ios/splash/Default-736h.png b/resources/ios/splash/Default-736h.png new file mode 100644 index 000000000..eeccf2925 Binary files /dev/null and b/resources/ios/splash/Default-736h.png differ diff --git a/resources/ios/splash/Default-Landscape-1792h~iphone.png b/resources/ios/splash/Default-Landscape-1792h~iphone.png new file mode 100644 index 000000000..135d78ef5 Binary files /dev/null and b/resources/ios/splash/Default-Landscape-1792h~iphone.png differ diff --git a/resources/ios/splash/Default-Landscape-2436h.png b/resources/ios/splash/Default-Landscape-2436h.png new file mode 100644 index 000000000..91c65a25a Binary files /dev/null and b/resources/ios/splash/Default-Landscape-2436h.png differ diff --git a/resources/ios/splash/Default-Landscape-2688h~iphone.png b/resources/ios/splash/Default-Landscape-2688h~iphone.png new file mode 100644 index 000000000..644f215c3 Binary files /dev/null and b/resources/ios/splash/Default-Landscape-2688h~iphone.png differ diff --git a/resources/ios/splash/Default-Landscape-736h.png b/resources/ios/splash/Default-Landscape-736h.png new file mode 100644 index 000000000..dad26da73 Binary files /dev/null and b/resources/ios/splash/Default-Landscape-736h.png differ diff --git a/resources/ios/splash/Default-Landscape@2x~ipad.png b/resources/ios/splash/Default-Landscape@2x~ipad.png new file mode 100644 index 000000000..5253aed56 Binary files /dev/null and b/resources/ios/splash/Default-Landscape@2x~ipad.png differ diff --git a/resources/ios/splash/Default-Landscape@~ipadpro.png b/resources/ios/splash/Default-Landscape@~ipadpro.png new file mode 100644 index 000000000..0e3e0aef0 Binary files /dev/null and b/resources/ios/splash/Default-Landscape@~ipadpro.png differ diff --git a/resources/ios/splash/Default-Landscape~ipad.png b/resources/ios/splash/Default-Landscape~ipad.png new file mode 100644 index 000000000..746b085a1 Binary files /dev/null and b/resources/ios/splash/Default-Landscape~ipad.png differ diff --git a/resources/ios/splash/Default-Portrait@2x~ipad.png b/resources/ios/splash/Default-Portrait@2x~ipad.png new file mode 100644 index 000000000..432dfe682 Binary files /dev/null and b/resources/ios/splash/Default-Portrait@2x~ipad.png differ diff --git a/resources/ios/splash/Default-Portrait@~ipadpro.png b/resources/ios/splash/Default-Portrait@~ipadpro.png new file mode 100644 index 000000000..342f2e625 Binary files /dev/null and b/resources/ios/splash/Default-Portrait@~ipadpro.png differ diff --git a/resources/ios/splash/Default-Portrait~ipad.png b/resources/ios/splash/Default-Portrait~ipad.png new file mode 100644 index 000000000..fcfca4692 Binary files /dev/null and b/resources/ios/splash/Default-Portrait~ipad.png differ diff --git a/resources/ios/splash/Default@2x~iphone.png b/resources/ios/splash/Default@2x~iphone.png new file mode 100644 index 000000000..76f43ef7e Binary files /dev/null and b/resources/ios/splash/Default@2x~iphone.png differ diff --git a/resources/ios/splash/Default@2x~universal~anyany.png b/resources/ios/splash/Default@2x~universal~anyany.png new file mode 100644 index 000000000..906fd7a2f Binary files /dev/null and b/resources/ios/splash/Default@2x~universal~anyany.png differ diff --git a/resources/ios/splash/Default~iphone.png b/resources/ios/splash/Default~iphone.png new file mode 100644 index 000000000..49a6f0f9c Binary files /dev/null and b/resources/ios/splash/Default~iphone.png differ diff --git a/resources/splash.png b/resources/splash.png index 30d57336a..260da13d1 100644 Binary files a/resources/splash.png and b/resources/splash.png differ diff --git a/setup/activate_native.sh b/setup/activate_native.sh index 27a2cd99d..91e7a9321 100644 --- a/setup/activate_native.sh +++ b/setup/activate_native.sh @@ -13,8 +13,5 @@ fi echo "Activating sdkman, and by default, gradle" source ~/.sdkman/bin/sdkman-init.sh -echo "Ensuring that we use the most recent version of the command line tools" -export PATH=$ANDROID_SDK_ROOT/sdk/cmdline-tools/bin:$ANDROID_SDK_ROOT/emulator:$PATH - echo "Configuring the repo for building native code" ./bin/configure_xml_and_json.js cordovabuild diff --git a/setup/export_shared_dep_versions.sh b/setup/export_shared_dep_versions.sh index 123580155..8083d2e37 100644 --- a/setup/export_shared_dep_versions.sh +++ b/setup/export_shared_dep_versions.sh @@ -1,9 +1,9 @@ -export NVM_VERSION=0.39.0 -export NODE_VERSION=14.18.1 -export NPM_VERSION=6.14.15 +export NVM_VERSION=0.36.0 +export NODE_VERSION=14.7.0 +export NPM_VERSION=6.14.8 export RUBY_VERSION=2.6.0 -export COCOAPODS_VERSION=1.11.2 -export GRADLE_VERSION=7.1.1 +export COCOAPODS_VERSION=1.10.0 +export GRADLE_VERSION=6.7 export NVM_DIR="$HOME/.nvm" export RUBY_PATH=$HOME/.gem/ruby/$RUBY_VERSION/bin diff --git a/setup/setup_shared_native.sh b/setup/setup_shared_native.sh index 40ff7536c..788eedac4 100644 --- a/setup/setup_shared_native.sh +++ b/setup/setup_shared_native.sh @@ -3,9 +3,9 @@ echo "Ensure that we fail on error" set -e ./bin/configure_xml_and_json.js cordovabuild -echo "Copying fake FCM configurations for android and iOS" -cp setup/GoogleService-Info.fake.for_ci.plist GoogleService-Info.plist -cp setup/google-services.fake.for_ci.json google-services.json +#echo "Copying fake FCM configurations for android and iOS" +#cp setup/GoogleService-Info.fake.for_ci.plist GoogleService-Info.plist +#cp setup/google-services.fake.for_ci.json google-services.json echo "Setting up all npm packages" npm install @@ -24,9 +24,9 @@ npx bower update echo "hack to make the local cordova fail on error" sed -i -e "s|/usr/bin/env node|/usr/bin/env node --unhandled-rejections=strict|" node_modules/cordova/bin/cordova -npx cordova prepare +cordova prepare -EXPECTED_COUNT=25 +EXPECTED_COUNT=27 INSTALLED_COUNT=`npx cordova plugin list | wc -l` echo "Found $INSTALLED_COUNT plugins, expected $EXPECTED_COUNT" if [ $INSTALLED_COUNT -lt $EXPECTED_COUNT ]; diff --git a/www/css/datepicker-override.css b/www/css/datepicker-override.css new file mode 100644 index 000000000..b7954111c --- /dev/null +++ b/www/css/datepicker-override.css @@ -0,0 +1,36 @@ +/* + Overrides datepicker's style + https://github.com/rajeshwarpatlolla/ionic-datepicker/blob/master/src/scss/ionic-datepicker.styles.scss +*/ + +.ionic_datepicker_popup .today { + border: 1px solid #1123CB !important; +} + +.ionic_datepicker_popup .selected_date { + background-color: #1123CB !important; +} + +.ionic_datepicker_popup .popup-head { + background-color: #1123CB !important; +} + +.ionic_datepicker_popup .popup-body .selected_date_full { + background-color: #1123CB !important; +} + +.ionic_datepicker_popup .popup-body .month_select, .ionic_datepicker_popup .popup-body .year_select { + border-bottom: 1px solid #1123CB !important; +} + +.ionic_datepicker_popup .popup-body .month_select:after, .ionic_datepicker_popup .popup-body .year_select:after { + color: #1123CB !important; +} + +.ionic_datepicker_popup .popup-body .button-clear { + color: #1123CB !important; +} + +.ionic_datepicker_popup .popup-buttons button { + background-color: #1123CB !important; +} diff --git a/www/css/intro.css b/www/css/intro.css index b636a38d6..fb6af7214 100644 --- a/www/css/intro.css +++ b/www/css/intro.css @@ -46,20 +46,42 @@ padding: 15px; height: 90px; } -.consent-title { - padding-top: 10%; - padding-right: 8%; - padding-left: 8%; - font-size: 18px; -} .consent-text { padding-top: 5%; padding-right: 8%; padding-left: 8%; - font-size: 15px; - line-height: 1.5; text-align: left; } +.consent-text h1 { + font-size: 2em; +} +.consent-text h2 { + font-size: 1.5em; +} +.consent-text h3 { + font-size: 1.25em; +} +.consent-text h4 { + font-size: 1.12em; +} +.consent-text p { + text-align: justify; + font-size: 1em; + line-height: 1.5; +} +.consent-text ol { + list-style-type: decimal; + padding-left: 8%; + text-align: justify; +} +.consent-text ul { + list-style-type: disc; +} +/* sub ul */ +.consent-text ul ul { + padding-left: 4%; +} + .consent-space { height: 15px; } diff --git a/www/css/main.control.css b/www/css/main.control.css new file mode 100644 index 000000000..9d9196910 --- /dev/null +++ b/www/css/main.control.css @@ -0,0 +1,81 @@ +.control-profile-picture-box { + margin: auto; + padding: auto; + width: 90px; + height: 90px; + border-radius: 50%; + background-color: #1123CB; + overflow: hidden; +} + +.control-list-header { + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 16px; + padding: 15px; +} + +.control-list-label { + height: 24px; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; + margin: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 15px; +} + +.control-list-option { + color: #1123CB; + float: right; + height: 24px; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; +} + +.control-list-button { + width: 98px; + height: 40px; + border: 2px solid #1123CB; + box-sizing: border-box; + border-radius: 50px; + color: black; + text-align: center; +} + +.control-list-button, +.control-list-option { + margin: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 15px; +} + +.control-list-status { + float: left; + width: 33%; + height: 100%; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.control-list-item { + height: 60px; + padding: 0; + margin: 0; +} + +.control-check-icon { + color: #1123CB; + background-color: #ffffff; +} \ No newline at end of file diff --git a/www/css/main.dashboard.css b/www/css/main.dashboard.css new file mode 100644 index 000000000..b5f8f1c76 --- /dev/null +++ b/www/css/main.dashboard.css @@ -0,0 +1,570 @@ +#dashboard-top { + width: 100%; + text-align: center; + margin: 0; +} + +.dashboard-top-card { + background-size: 100% 100%; + mix-blend-mode: normal; + color: #ffffff; + border-radius: 30px; + display: inline-block; + text-align: left; + width: 45vw; + height: 45vw; + overflow: hidden; +} + +#dashboard-footprint { + background-image: + linear-gradient(307.28deg, rgba(255, 128, 166, 0.77) -10.18%, rgba(17, 35, 203, 0.77) 99.61%), + url("../img/daniel-roe-lpjb_UMOyx8-unsplash 1.png"); + margin: 0vw 1.5vw 3vw 0vw; +} + +#dashboard-calorie { + background-image: + linear-gradient(60.08deg, rgba(255, 136, 159, 0.9) -22.82%, rgba(17, 35, 203, 0.9) 82.29%), + url("../img/cristina-matos-albers-c4sGBJkDrjg-unsplash 1.png"); + margin: 0vw 0vw 3vw 1.5vw; +} + +.dashboard-bottom-card { + border-radius: 30px; + display: block; + width: 94vw; + height: 79.56vw; /* width*325/384 */ + margin: auto; + margin-top: 0; + margin-bottom: 50px; + + /* The background image should not slide */ + background-image: + linear-gradient(6.41deg, rgba(17, 35, 203, 0.77) 13.13%, rgba(255, 128, 166, 0.77) 146.11%), + url("../img/ricardo-gomez-angel-_7favoo7jy8-unsplash 1.png"); + background-size: 100% 100%; + mix-blend-mode: normal; + background-repeat: no-repeat; + + display: inline-block; +} + +#dashboard-bottom .slider-slide{ + padding-top: 0 !important; +} + +h4.dashboard-headers{ + color: #fff; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 20px; + line-height: 24px; + margin-left: 15px; + margin-top: 30px; + text-align: left; +} + +.user-carbon-no-percentage{ + padding-top: 40px; + position: absolute; + width: 100%; +} + +.user-carbon-percentage{ + padding-top: 20px; + position: absolute; + width: 100%; +} + +.user-carbon{ + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; + color: #ffffff; + margin-left: 15px; + margin-top: 50px; +} + +.user-calorie-no-percentage{ + padding-top: 30px; + position: absolute; + width: 100%; +} + +.user-calorie-percentage{ + padding-top: 10px; + position: absolute; + width: 100%; +} + +.user-calorie{ + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; + color: #ffffff; + margin-left: 15px; + margin-top: 50px; +} + +.percentage-change{ + font-weight: 700; + color: #1123CB; + margin-bottom: 20px; +} + +.calorie-change{ + padding-top: 5px; + font-weight: 700; + color: #1123CB; +} + +.dashboard-list{ + padding-top: 10px; + font-weight: 700; + color: #fff; + border-radius: 5px !important; + height: 40px !important; + margin-bottom: 3px !important; + margin-top: 3px !important; + width: 90%; + background-color: #1123CB !important; +} + +.metric-datepicker { + /*height: 33px;*/ + display: flex; /* establish flex container */ + /*flex-direction: column; make main axis vertical */ + justify-content: center; /* center items vertically, in this case */ + align-items: center; /* center items horizontally, in this case */ + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-title { + height: 35px; + display: flex; /* establish flex container */ + flex-direction: column; /* make main axis vertical */ + justify-content: center; /* center items vertically, in this case */ + align-items: left; /* center items horizontally, in this case */ + padding-left: 10px; +} + +.metric-datepicker-container-upper { + width: 100%; + float: left; +} + +.metric-weekday-container-upper { + width: 28%; + float: right; + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-weekday-container-lower { + width: 28%; + float: right; + top: 40px; + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-datepicker-container-lower { + top: 40px; + width: 100%; + float: left; +} + +.metric-left { + width: 25%; + float: left; +} + +.metric-right { + text-align: center; + width: 75%; + float: right; +} + +.metric-change-data { + width: 100%; + text-align: center; +} + +.metric-change-data-button{ + width: 104px; + height: 40px; + border: 2px solid #1123CB; + background-color: #ffffff; + box-sizing: border-box; + border-radius: 50px; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; + text-align: center; +} + +.metric-metric-button { + float: left; + width: 49%; + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-freq-button { + float: right; + width: 100%; + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-get-button { + width: 60px; + border-radius: 5px; + color: white; + background-color: #1123CB; + height: 35px; +} + +.metric-get-button-inactive { + width: 60px; + border-radius: 5px; + color: white; + background-color: #1123CB; + opacity: 0.7; + height: 35px; +} + +.metric-basic { + width: 100%; + border-radius: 5px; + background-color: white; + color: #1123CB; + height: 35px; +} + +.metric-half { + float: left; + width: 100%; + border-radius: 5px; + background-color: white; + height: 30px; + overflow: hidden; + position: relative; +} + +/*Change later*/ +.metric-second-half { + width: 105px; + margin: auto; +} + +.metric-current-title { + color: #333; + position: absolute; + width: 28%; + height: 35px; +} + +.metric-range-button { + border-left-color: #ccc; + border-left-style: solid; + border-left-width: 1px; + position: absolute; + border-right-color: #ccc; + border-right-style: solid; + border-right-width: 1px; + width: 25%; + left: 50%; + height: 35px; +} + +.metric-range-button-active { + border-left-color: #ccc; + border-left-style: solid; + border-left-width: 1px; + position: absolute; + border-right-color: #ccc; + border-right-style: solid; + border-right-width: 1px; + width: 25%; + left: 50%; + height: 35px; + background-color: #1123CB; + color: white; +} + +.metric-filter-button { + position: absolute; + width: 25%; + left: 75%; + height: 35px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.metric-filter-button-active { + position: absolute; + width: 25%; + left: 75%; + height: 35px; + background-color: #1123CB; + color: white; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.metric-chart-button { + width: 50%; + position: absolute; + left: 50%; + height: 30px; + font-weight: 700; + overflow: hidden; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.metric-chart-button-active { + width: 50%; + position: absolute; + left: 50%; + height: 30px; + background-color: #1123CB; + color: white; + font-weight: 700; + overflow: hidden; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.metric-summary-button { + width: 50%; + position: absolute; + border-right-color: #ccc; + border-right-style: solid; + border-right-width: 1px; + height: 30px; + font-weight: 700; + overflow: hidden; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} + +.metric-summary-button-active { + width: 50%; + position: absolute; + border-right-color: #ccc; + border-right-style: solid; + border-right-width: 1px; + height: 30px; + background-color: #1123CB; + color: white; + font-weight: 700; + overflow: hidden; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} + +.distance-button{ + width:25%; + font-size: 12px; + font-weight: 700; + overflow: hidden; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + float: left; + height: 30px; +} + +.speed-button{ + width:25%; + font-size: 12px; + font-weight: 700; + overflow: hidden; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + float: left; + height: 30px; +} + +.trips-button{ + width:25%; + font-size: 12px; + font-weight: 700; + overflow: hidden; + float: left; + height: 30px; +} + +.duration-button{ + width:25%; + font-size: 12px; + font-weight: 700; + overflow: hidden; + float: left; + height: 30px; +} + +.distance-button-active{ + width:25%; + font-size: 12px; + font-weight: 700; + background-color: #1123CB; + color: white; + overflow: hidden; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + float: left; + height: 30px; +} + +.speed-button-active{ + width:25%; + font-size: 12px; + font-weight: 700; + overflow: hidden; + background-color: #1123CB; + color: white; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + float: left; + height: 30px; +} + +.trips-button-active{ + width:25%; + font-size: 12px; + font-weight: 700; + background-color: #1123CB; + color: white; + overflow: hidden; + float: left; + height: 30px; +} + +.duration-button-active{ + width:25%; + font-size: 12px; + font-weight: 700; + background-color: #1123CB; + color: white; + overflow: hidden; + float: left; + height: 30px; +} + +.metric-toggle-button { + width: 33%; + position: absolute; + left: 66%; + height: 33px; +} + +.metric-icon { + color: #ccc; + font-size: 30px; +} + +.metric-filter-title { + position: absolute; + width: 15%; + height: 35px; + display: flex; /* establish flex container */ + flex-direction: column; /* make main axis vertical */ + justify-content: center; /* center items vertically, in this case */ + align-items: left; /* center items horizontally, in this case */ + padding-left: 10px; +} + +.metric-filter-year { + position: absolute; + width: 19%; + left: 21%; + height: 35px; + border-width: 0; +} + +.metric-filter-month { + position: absolute; + width: 13%; + left: 42%; + height: 35px; + border-width: 0; +} + +.metric-filter-day { + position: absolute; + width: 13%; + left: 57%; + height: 35px; + border-width: 0; +} + +.metric-summary-title { + padding: 2px; + color: #FFFFFF; + text-align: left; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 16px; + line-height: 19px; +} + +.metric-summary-content { + color: #FFFFFF; + font-size: 12px; + text-align: left; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 16px; + line-height: 19px; +} + +.metric-summary-left { + float: left; + margin-top: 10px; + width: 40px !important; + margin-left: 10px; + font-size: 30px !important; + color: #FFFFFF; +} + +.metric-summary-right { + margin-left: 0px; + font-family: Lato; + font-style: normal; + font-weight: normal; + font-size: 16px; + line-height: 19px; +} + +.metric-summary-option-button { + display: block; + float: right; + margin-right: 20px; + background-image: url("../img/icons/mode_edit_black_24dp 1.png"); + height: 24px; + width: 24px; +} + +.metric-date-range { + text-align: center; +} \ No newline at end of file diff --git a/www/css/main.diary.css b/www/css/main.diary.css index cc0f33317..8cb6e9f8c 100644 --- a/www/css/main.diary.css +++ b/www/css/main.diary.css @@ -3,11 +3,6 @@ padding:0px !important; } -/*.item { - border:0px !important; - -}*/ - .main { padding-top:50px; padding-bottom:50px !important; @@ -25,11 +20,11 @@ font-size:7px; } .bg-color{ - background:#71bc98!important; + background:#1123CB!important; color:whitesmoke !important; } .summary-color{ - background:#1b9e77!important; + background:#1123CB!important; color:whitesmoke !important; } .place-color{ @@ -95,11 +90,11 @@ a.item-content { border-color: white; } .leaflet-div-icon-start { - background-color: #33e0bb; + background-color: #80D0FF; border-radius: 6px; } .leaflet-div-icon-stop { - background-color: #ff5251; + background-color: #0088ce; border-radius: 6px; } .inner-icon { @@ -113,20 +108,26 @@ a.item-content { .btn-input-confirm-red, .btn-input-confirm-red:hover, .btn-input-confirm-red:active { - background-color: #ED2D3A; - color: white; + background-color: white; + color: #0088ce; + border-color: #0088ce; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } .btn-input-confirm-yellow, .btn-input-confirm-yellow:hover, .btn-input-confirm-yellow:active { - background-color: #FFC108; + background-color: rgba(255, 165, 0, 0.8); /* tentatively orange for now */ color: white; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + border: 2px solid rgba(0, 136, 206, 0.2); } .btn-input-confirm-green, .btn-input-confirm-green:hover, .btn-input-confirm-green:active { - background-color: #30A64A; + background-color: #0088ce; color: white; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + border: 2px solid rgba(0, 136, 206, 0.2); } /* White confirm buttons are currently unused */ /* .btn-input-confirm-white, @@ -136,12 +137,24 @@ a.item-content { color: #333; font-size: 0.8em; } */ + + .btn-input-confirm { - line-height: 30px; + width: 100%; + height: 30px; + margin: 2px; + box-sizing: border-box; + border-radius: 10px; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 12px; + + /* line-height: 30px; min-height: 30px; font-size: 0.8em !important; width: 115px; - padding: 0; + padding: 0; */ } .input-confirm-container { margin-top: 5px; @@ -157,25 +170,222 @@ a.item-content { width: 75%; } -#diary-item { +.diary-item { padding: 0; + margin: 0 1rem 0 1rem; border-width: 0; + background-color: transparent; + height: 319px; /* (diary-card height) + 1.5*(time-tag height) */ +} + +.unified-diary-item { + padding: 0; + margin: 0 1rem 0 1rem; + border-width: 0; + background-color: transparent; + /* height: 250px; */ +} + +.diary-card { + width: 100%; + height: 330px; + margin: 0; + border: 2px solid rgba(0, 136, 206, 0.2); + box-sizing: border-box; + border-radius: 30px; + overflow: hidden; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} + +.diary-button { + width: 100%; + height: 30px; + margin: 2px; + border: 2px solid #0088ce; + box-sizing: border-box; + border-radius: 50px; + background-color: #ffffff; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 13px; +} + +.hr-lines { + position: relative; + justify-content: center; + font-family: 'Lato'; + font-weight: bold; + display: flex; + color: #212121; + font-size: 19px; + margin-left: 10px; + margin-right: 10px; + margin-bottom: 5px; + margin-top: 5px; + margin: 10px auto; + text-align: center; +} + +@media screen and (orientation: portrait) { + .hr-lines:before { + content: " "; + display: block; + height: 2px; + width: 30%; + position: absolute; + top: 50%; + left: 0; + background: #80D0FF; + } + + .hr-lines:after { + content: " "; + display: block; + height: 2px; + width: 30%; + position: absolute; + top: 50%; + right: 0; + background: #80D0FF; + } +} +@media screen and (orientation: landscape) { + .hr-lines:before { + content: " "; + display: block; + height: 2px; + width: 41%; + position: absolute; + top: 50%; + left: 0; + background: #80D0FF; + } + + .hr-lines:after { + content: " "; + display: block; + height: 2px; + width: 41%; + position: absolute; + top: 50%; + right: 0; + background: #80D0FF; + } +} + +.diary-draft-button { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-style: 13px; + background-color: #ffffff; + border: none; + background-image: url("../img/icons/help_outline_black_24dp.svg"); + background-repeat: no-repeat; + background-position: left center; + padding-left: 25px; +} + +.diary-route { + margin: 5px 0; +} + +.diary-street { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 13px; + white-space: normal; +} + +.diary-map { + float: left; + width: 50%; + z-index: -1; /* Can't zoom in or out of the map with this implemented */ + overflow: hidden; + border-radius: 30px 0px 0px 50px; + /* height must be specified in the html */ +} + +.diary-infos { + float: right; + width: 50%; + padding: 10% 2%; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; +} + +.diary-distance-time { + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 16px; + white-space: normal; + text-align: center; + margin-left: auto; + margin-right: auto; +} + +.diary-modes-percents { + margin: 5px 0; +} + +.diary-modes-percents-text { + color: #0088ce; +} + +.diary-modes-percents-icon { + color: #0088ce; +} + +/* Date Picker Override */ +.ionic_datepicker_popup .today { + border: 1px solid #0088ce !important; +} + +.ionic_datepicker_popup .selected_date { + background-color: #0088ce !important; +} + +.ionic_datepicker_popup .popup-head { + background-color: #0088ce !important; +} + +.ionic_datepicker_popup .popup-body .selected_date_full { + background-color: #0088ce !important; +} + +.ionic_datepicker_popup .popup-body .month_select, .ionic_datepicker_popup .popup-body .year_select { + border-bottom: 1px solid #0088ce !important; +} + +.ionic_datepicker_popup .popup-body .month_select:after, .ionic_datepicker_popup .popup-body .year_select:after { + color: #0088ce !important; +} + +.ionic_datepicker_popup .popup-body .button-clear { + color: #0088ce !important; } +.ionic_datepicker_popup .popup-buttons button { + background-color: #0088ce !important; +} div.labelfilterlist { margin: 0 !important; } .button.labelfilter { - color: #01D0A7; + color: #0088ce; border-radius: 0px; border-width: 0; - box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 2px 2px rgba(0,0,0,0.23); padding: 0 0.1em !important; } .button.labelfilter.on { - background-color: #01D0A7; + background-color: #0088ce; color: white; } @@ -187,4 +397,239 @@ div.labelfilterlist { .labelfilter:last-of-type { border-top-right-radius: 5px; border-bottom-right-radius: 5px; +} + +.diary-more-container i { + font-size: 32px; +} +.diary-checkmark-container i { + font-size: 24px; + padding: 3px; +} + +.diary-checkmark-container i.can-verify { + color: #1123CB; + background-color: #ddd; + border-radius: 5px; +} +.diary-checkmark-container i.cannot-verify { + color: #E6B8B8; +} +.diary-checkmark-container i.already-verified { + color: #B8E6C2; +} + +.list-card { + margin: 16px 0; + border: 2px solid #CFD3F5; + box-sizing: border-box; + border-radius: 30px; +} + +.list-card-sm { + width: 95%; +} +.list-card-md { + width: 95%; +} +.list-card-lg { + width: 95%; +} +.list-card .row { + padding-left: 5px; + padding-right: 5px; +} +.list-col-left-margin { + text-align: center; padding: 0.7em 0.8em 0.4em 0.8em; border-right-width: 0.5px; border-right-color: #ccc; border-right-style: solid; border-bottom-color: #ccc; border-bottom-width: 0.5px; border-bottom-style: solid; +} +.list-col-left { + text-align: center; padding: 1.1em 0.8em 0.6em 0.8em; border-right-width: 0.5px; border-right-color: #ccc; border-right-style: solid; border-bottom-color: #ccc; border-bottom-width: 0.5px; border-bottom-style: solid; +} +.list-col-right { + text-align: center; padding: 0.25em 0.8em; border-bottom-color: #ccc; border-bottom-width: 0.5px; border-bottom-style: solid; +} +.diary-start-time-tag { + width: 68px; + height: 30px; + background: #1123CB; + border: 2px solid #1123CB; + box-sizing: border-box; + border-radius: 50px; + margin: auto; + display: flex; + justify-content: center; + align-items: center; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 13px; + text-align: center; + color: #FFFFFF; + position: relative; + bottom: -15px; +} + +.diary-stop-time-tag { + width: 68px; + height: 30px; + background: #CFD3F5; + border: 2px #CFD3F5; + box-sizing: border-box; + border-radius: 50px; + margin: auto; + display: flex; + justify-content: center; + align-items: center; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 13px; + text-align: center; + color: #1123CB; + position: relative; + top: -15px; +} +.start-time-tag-inf-scroll { + text-align: center; + background-color: #1123CB; + color: black; + width: 16%; + height: 25px; + border-radius: 8px; + font-size: 12px; + position: absolute; + left: 1%; + top: 15px; + line-height: 16px; +} +.stop-time-tag-inf-scroll { + text-align: center; + background-color: #ff5251; + color: black; + width: 16%; + height: 25px; + border-radius: 8px; + font-size: 12px; + position: absolute; + left: 1%; + bottom: 15px; + line-height: 16px; +} +.stop-time-tag-lower { + text-align: center; + background-color: #ff5251; + color: black; + width: 16%; + height: 16px; + border-radius: 8px; + font-size: 9px; + position: absolute; + left: 1%; + top: 310px; + line-height: 16px; +} + +.start-end-addresses-container { + display: inline-block; + width: calc(100% - 25px); +} + +.diary-map { + float: left; + width: 50%; + /* height is assigned direcly to the html, otherwise it does not zoom on startup. Mystery. */ + /* height: 286px; */ /* 12px larger than diary-card to hide OpenStreetMap logo*/ + z-index: -1; +} + +.diary-infos { + float: right; + width: 50%; + padding: 10% 5%; + display: flex; + flex-direction: column; + /* justify-content: center; */ + justify-content: space-between; + height: 100%; +} + +.diary-card { + width: 100%; + height: 274px; + margin: 0; + border: 2px solid #CFD3F5; + box-sizing: border-box; + border-radius: 30px; + overflow: hidden; +} + +.diary-button { + width: 100%; + height: 30px; + margin: 2px; + border: 2px solid #1123CB; + box-sizing: border-box; + border-radius: 50px; + background-color: #ffffff; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 13px; +} + +.diary-draft-button { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-style: 13px; + background-color: #ffffff; + border: none; + background-image: url("../img/icons/help_outline_black_24dp.svg"); + background-repeat: no-repeat; + background-position: left center; + padding-left: 25px; +} + + +.diary-distance-time { + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 16px; +} + +.diary-route { + margin: 5px 0; +} + +.diary-street { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 13px; + white-space: normal; +} + +.diary-detail-button { + float: right; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0; + margin: 0; + height: 100%; + color: #1123CB; + font-size: 13px; +} + +.diary-modes-percents { + margin: 5px 0; +} + +.diary-modes-percents-text { + color: #1123CB; +} + +.diary-modes-percents-icon { + color: #1123CB; } \ No newline at end of file diff --git a/www/css/style.css b/www/css/style.css index d5e69b2aa..ba8613827 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -1,5 +1,13 @@ /* Empty. Add your own CSS if you like */ +/* Font Family from Savoir Faire-Linux Development Community */ +@font-face { + font-family: 'Lato'; + src: url('../fonts/Lato-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + body.platform-ios { padding-top: calc(env(safe-area-inset-top) / 2); margin: 0 10px 0 0; @@ -9,16 +17,15 @@ body.platform-ios { height: calc(100% - (env(safe-area-inset-top) / 2)); } -.platform-ios .scroll-content { - height: calc(100% - 50px); -} -[ng\:cloak], [ng-cloak], .ng-cloak { +[ng\:cloak], +[ng-cloak], +.ng-cloak { display: none !important; } .popup-title { - color: #6e6e6e; + color: #6e6e6e; } .pull-right { @@ -33,63 +40,68 @@ body.platform-ios { } .popup-buttons.row { - height: 40px !important; + height: 40px !important; } + .popup-buttons.button { height: 40px !important; } + .button.ng-binding.button-stable { height: 40px; } + .button.ng-binding.button-positive { - background-color: #01D0A7; + background-color: #0088ce; height: 40px; } + .button.ng-binding.button-assertive { - background-color: #01D0A7; + background-color: #0088ce; height: 40px; } -.button.ng-binding.button-cancel { - background-color: #d02001; - height: 40px; - color: #ffffff -} + .selected_date_full.ng-binding { - color: #01D0A7; + color: #0088ce; } + .icon.ion-chevron-left { - color: #01D0A7; + color: #0088ce; } + .icon.ion-chevron-right { - color: #01D0A7; + color: #0088ce; } + .date_col.date_selected { - background-color: #01D0A7 !important; + background-color: #0088ce !important; } + .date_col:active { - background-color: #01D0A7 !important; + background-color: #0088ce !important; } + .customButtomIconSize:before { - font-size: 25px !important; + font-size: 25px !important; } #habitica-heart-icon { - font-size: 18px; - color: #ff6064; - padding-left: 10%; - position: relative; - bottom: 1.5px; + font-size: 18px; + color: #ff6064; + padding-left: 10%; + position: relative; + bottom: 1.5px; } #habitica-star-icon { - font-size: 18px; - color: #ffbe5d; - padding-left: 10%; - position: relative; - bottom: 2px; + font-size: 18px; + color: #ffbe5d; + padding-left: 10%; + position: relative; + bottom: 2px; } #stats-wrapper { @@ -97,7 +109,7 @@ body.platform-ios { font-size: 0px; } -.stats-value-wrapper{ +.stats-value-wrapper { margin-top: -8px !important; } @@ -115,45 +127,47 @@ body.platform-ios { .item-thumbnail-left-avatar.activated { background-color: transparent; - box-shadow: none; - color: #fff; + color: #fff; } -.signup-title{ +.signup-title { font-size: 2em; padding: 30px 0 10px 0; color: #707070 } -.signup-button{ +.signup-button { margin-left: auto; margin-right: auto; - display: block;width: 50%; + display: block; + width: 50%; } .button.button-light-green { border-color: transparent; - background-color: #01D0A7; + background-color: #0088ce; color: #fff; } .button.button-light-green:hover { color: #fff; text-decoration: none; } .button.button-light-green.active, .button.button-gold.activated { - background-color:#01D0A7; } + background-color:#0088ce; } .button.button-light-green.button-clear { border-color: transparent; background: none; box-shadow: none; - color: #01D0A7; } + color: #0088ce; } .button.button-light-green.button-icon { - border-color: transparent; - background: none; } + border-color: transparent; + background: none; +} + .button.button-light-green.button-outline { - border-color: #01D0A7; + border-color: #0088ce; background: transparent; - color: #01D0A7; } + color: #0088ce; } .button.button-light-green.button-outline.active, .button.button-gold.button-outline.activated { - background-color: #01D0A7; + background-color: #0088ce; box-shadow: none; color: #fff; } @@ -165,73 +179,64 @@ progress{ border-radius: 10px; } -progress.quest-boss-bar{ +progress.quest-boss-bar { height: 20px !important; - width: 100% !important;; + width: 100% !important; + ; } -progress.download{ + +progress.download { margin: 0; width: 100%; height: 5px; border-radius: 0; padding-top: 0; position: fixed; - z-index:1; + z-index: 1; -webkit-appearance: none; - appearance: none; + appearance: none; } -progress.download::-webkit-progress-bar{ +progress.download::-webkit-progress-bar { background: transparent; border-radius: 0; - /*box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;*/ } progress.download::-webkit-progress-value{ - background: #5eedce; + background: #80D0FF; border-radius: 0; } -progress::-webkit-progress-value{ +progress::-webkit-progress-value { background: #f74040; border-radius: 10px; } -progress::-webkit-progress-bar{ +progress::-webkit-progress-bar { background: #d1d1d1; border-radius: 10px; - /*box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;*/ } -/*.item-content { - padding-top: 8px; - padding-bottom: 12px; - padding-left: 1px; - padding-right: 1px; - margin-top: -12px; - margin-bottom: -4px; - height: 70px; -}*/ - -progress.golden::-webkit-progress-value{ +progress.golden::-webkit-progress-value { background: #ffd700; border-radius: 10px; } -progress.purple::-webkit-progress-value{ +progress.purple::-webkit-progress-value { background: #3D3240; border-radius: 10px; } img.center { - display: block; - margin: 0 auto; + display: block; + margin: 0 auto; } -.item-content-avatar{ +.item-content-avatar { overflow: hidden; text-overflow: ellipsis; - white-space: nowrap; } + white-space: nowrap; +} .item-thumbnail-left-avatar, .item-thumbnail-left-avatar .item-content-avatar { @@ -239,25 +244,33 @@ img.center { padding-top: 8px; padding-left: 135px; height: 157px; - border: 0px; } - .item-thumbnail-left-avatar > figure:first-child, - .item-thumbnail-left-avatar .item-figure, - .item-thumbnail-left-avatar .item-content-avatar > figure:first-child, - .item-thumbnail-left-avatar .item-content-avatar .item-figure { - position: absolute; - top: 10px; - left:1px; - max-width: 140px; - max-height: 147px; - width: 100%; - height: 100%; } + border: 0px; +} + +.item-thumbnail-left-avatar>figure:first-child, +.item-thumbnail-left-avatar .item-figure, +.item-thumbnail-left-avatar .item-content-avatar>figure:first-child, +.item-thumbnail-left-avatar .item-content-avatar .item-figure { + position: absolute; + top: 10px; + left: 1px; + max-width: 140px; + max-height: 147px; + width: 100%; + height: 100%; +} .item-figure { padding: 0; - text-align: center; } - .item-figure img:first-child, .item-figure .list-figure { - width: 100%; - vertical-align: middle; } + text-align: center; +} + +.item-figure img:first-child, +.item-figure .list-figure { + width: 100%; + vertical-align: middle; +} + .habit-list-border.item { border-width: 0.5px !important; } @@ -286,32 +299,31 @@ img.center { } /* ngAnimate ends here */ -#group-leaderboard{ +#group-leaderboard { padding-left: 20px } -.group-leaderboard-left-stats{ +.group-leaderboard-left-stats { display: inline; } -.group-leaderboard-right-stats{ +.group-leaderboard-right-stats { display: inline; float: right; padding-right: 100px; } -#leaderboard-stats{ +#leaderboard-stats { padding-left: 20px; padding-top: 10px; } -.leaderboard-card.card{ +.leaderboard-card.card { background: #fff !important; border-radius: 20px; display: block; margin: 10px; position: relative; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.03), 0 2px 3px rgba(0, 0, 0, 0.05); } #costume-tab .button { @@ -320,23 +332,29 @@ img.center { background: #f5f5f5 !important; font-weight: 700 !important; width: 50%; - float:left; + float: left; } + #challenge.active { - color: #01D0A7 !important; + color: #0088ce !important; } + #party.active { - color: #01D0A7 !important; + color: #0088ce !important; } + #add-goal:active { color: #ededed !important; } + #leaderboard:active { color: #ededed !important; } + #webkey:active { color: #ededed !important; } + #challenge:active { color: #ededed !important; } @@ -347,7 +365,7 @@ img.center { #dashboard-footprint.card { background: #fff; - color: #54DCC1; + color: #80D0FF; border-radius: 5px; display: block; margin: 10px; @@ -377,7 +395,7 @@ img.center { #dashboard-calorie.card { background: #fff; - color: #54DCC1; + color: #80D0FF; border-radius: 5px; display: block; margin: 10px; @@ -420,7 +438,7 @@ img.center { #dashboard-bottom.card { background-color: #fff; - color: #54DCC1; + color: #0088ce; border-radius: 5px; display: block; /* height: 140px; */ @@ -441,13 +459,13 @@ img.center { } #arrow-color{ - color: #54DCC1; + color: #0088ce; font-size: 25px !important; } h4.dashboard-headers{ color: #fff; - background: #54DCC1; + background: #0088ce; padding-top: 5px; padding-bottom: 5px; margin-top: -1px; @@ -470,7 +488,7 @@ h4.dashboard-headers{ .user-carbon{ font-weight: 700; - color: #54DCC1; + color: #0088ce; font-size: 16px; } @@ -488,20 +506,20 @@ h4.dashboard-headers{ .user-calorie{ font-weight: 700; - color: #54DCC1; + color: #0088ce; font-size: 18px; } .percentage-change{ font-weight: 700; - color: #54DCC1; + color: #0088ce; margin-bottom: 20px; } .calorie-change{ padding-top: 5px; font-weight: 700; - color: #54DCC1; + color: #0088ce; } .dashboard-list{ @@ -513,7 +531,7 @@ h4.dashboard-headers{ margin-bottom: 3px !important; margin-top: 3px !important; width: 90%; - background-color: #54DCC1 !important; + background-color: #0088ce !important; box-shadow: 0 0px 0px rgba(0, 0, 0, 0.3) !important; } @@ -547,7 +565,7 @@ h4.dashboard-headers{ } #green-leaf{ - color: #01D0A7; + color: #80D0FF; font-size: 45px; padding-top: 5px; } @@ -567,82 +585,69 @@ h4.dashboard-headers{ position: absolute; bottom: 5px; right: 10px; - color:#b2b2b2; + color: #b2b2b2; font-size: 20px; } -/* #modes.slider{ - height:245px !important; -} */ - -#modes.slider-slide{ - padding-top: 0 !important; - background-color:transparent; -} - -/*.ion-view-background-dashboard{ - background: rgba(135,245,245,1); - background: -moz-linear-gradient(top, rgba(135,245,245,1) 0%, rgba(120,245,235,1) 15%, rgba(108,245,234,1) 31%, rgba(140,250,232,1) 49%, rgba(118,247,219,1) 70%, rgba(95,250,216,1) 100%); - background: -webkit-gradient(left top, left bottom, color-stop(0%, rgba(135,245,245,1)), color-stop(15%, rgba(120,245,235,1)), color-stop(31%, rgba(108,245,234,1)), color-stop(49%, rgba(140,250,232,1)), color-stop(70%, rgba(118,247,219,1)), color-stop(100%, rgba(95,250,216,1))); - background: -webkit-linear-gradient(top, rgba(135,245,245,1) 0%, rgba(120,245,235,1) 15%, rgba(108,245,234,1) 31%, rgba(140,250,232,1) 49%, rgba(118,247,219,1) 70%, rgba(95,250,216,1) 100%); - background: -o-linear-gradient(top, rgba(135,245,245,1) 0%, rgba(120,245,235,1) 15%, rgba(108,245,234,1) 31%, rgba(140,250,232,1) 49%, rgba(118,247,219,1) 70%, rgba(95,250,216,1) 100%); - background: -ms-linear-gradient(top, rgba(135,245,245,1) 0%, rgba(120,245,235,1) 15%, rgba(108,245,234,1) 31%, rgba(140,250,232,1) 49%, rgba(118,247,219,1) 70%, rgba(95,250,216,1) 100%); - background: linear-gradient(to bottom, rgba(135,245,245,1) 0%, rgba(120,245,235,1) 15%, rgba(108,245,234,1) 31%, rgba(140,250,232,1) 49%, rgba(118,247,219,1) 70%, rgba(95,250,216,1) 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#87f5f5', endColorstr='#5ffad8', GradientType=0 ); -}*/ - -#message.ng-enter{ +#message.ng-enter { -webkit-animation: slideInLeft .25s; animation: slideInLeft .25s; } -#message.ng-leave{ +#message.ng-leave { -webkit-animation: slideOutLeft .25s; animation: slideOutLeft .25s; } -#scroll-message.ng-enter{ +#scroll-message.ng-enter { -webkit-animation: bounceInUp .5s; animation: bounceInUp .5s; } -#scroll-message.ng-leave{ +#scroll-message.ng-leave { -webkit-animation: fadeOut .25s; animation: fadeOut .25s; } + /* ngAnimate ends here */ /* score button color */ #up_value_negative_big{ - background-color: #A9EDE0; + background-color: #93daff; } #up_value_negative{ - background-color: #73D9C5; + background-color: #6ccdff; } #up_value_normal{ - background-color: #4BC3AB; + background-color: #45c0ff; } #up_value_positive{ - background-color: #2CAC93; + background-color: #1db2ff; } #up_value_positive_big{ - background-color: #0D9C80; + background-color: #0088ce; } -#down_value_negative_big{ + +#down_value_negative_big { background-color: #E81431; } -#down_value_negative{ + +#down_value_negative { background-color: #F43F58; } -#down_value_normal{ + +#down_value_normal { background-color: #F75F74; } -#down_value_positive{ - background-color: #FA8595; + +#down_value_positive { + background-color: #FA8595; } -#down_value_positive_big{ + +#down_value_positive_big { background-color: #FDB3BD; } + /*score button color end*/ #costume-tab .button { @@ -651,21 +656,22 @@ h4.dashboard-headers{ background: #f5f5f5 !important; font-weight: 700 !important; width: 50%; - float:left; + float: left; border-radius: 0; } #goal-content .item-content { - padding: 0px 49px 0px 0px !important; + padding: 0px 49px 0px 0px !important; } - -.bar.bar-header.no-bgColor, .bar.bar-footer.no-bgColor{ -border: 0px !important; -border-color: transparent !important; -border-top: transparent !important; -border-bottom: transparent !important; -background-image: none !important; } +.bar.bar-header.no-bgColor, +.bar.bar-footer.no-bgColor { + border: 0px !important; + border-color: transparent !important; + border-top: transparent !important; + border-bottom: transparent !important; + background-image: none !important; +} .list .item.item-accordion { line-height: 38px; @@ -673,19 +679,24 @@ background-image: none !important; } padding-bottom: 0; transition: 0.09s all linear; } + .list .item.item-accordion.ng-hide { line-height: 0px; } + .list .item.item-accordion.ng-hide-add, .list .item.item-accordion.ng-hide-remove { display: block !important; } + .input-label { font-size: 16px; } + .list { padding-top: 0.5px !important; } + .card { background: #fff; border-radius: 2px; @@ -695,15 +706,15 @@ background-image: none !important; } position: relative; } -/* Light theme */ -.control-icon-button{ +.control-icon-button { text-align: center; float: right; - height: 100%; - background-color: #D6C780; + height: 48px; + background-color: rgba(128, 128, 128, 0.5); + /* background-color: #D6C780; */ color: #fff; padding-top: 16px; - width: 64px; + width: 48px; /* changed to fit the diary card in full view */ font-size:20px; } @@ -712,75 +723,84 @@ background-image: none !important; } background-color: #E0A1A1 !important; } -.gray-icon.control-icon-button{ +.gray-icon.control-icon-button { background-color: #CCCCCC !important; } .toggle-on-ourcolor-bg{ - border-color: #01D0A7 !important; - background-color: #01D0A7 !important; + border-color: #0088ce !important; + background-color: #0088ce !important; } -.toggle-color{ - @include toggle-small-style($toggle-on-ourcolor-bg); +.toggle input:checked+.track { + border-color: #1123CB !important; + background-color: #1123CB !important; } -.control-info{ +.control-info { padding: 2px 4px !important; } -.tab-nav{ - background-color: #f5f5f5 !important; background-size: 0 !important; - box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +.tab-nav { + background-color: #EEF0FC !important; + background-size: 0 !important; +} + +.tab-item.tab-item-active, +.tab-item.active, +.tab-item.activated { + color: #1123CB; } .tab-item.tab-item-active, .tab-item.active, .tab-item.activated { - color: #01D0A7; + color: #0088ce; } ion-header-bar { - background-color: #f5f5f5 !important; - box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -.ion-view-background{ - background-color: #ededed !important; -} -.tabs-custom > .tabs, -.tabs.tabs-custom { - border-color: #5D3A23; - background-color: #5D3A23; - background-image: linear-gradient(0deg, #0c60ee, #0c60ee 70%, transparent 70%); - color: #999; } - .tabs-custom > .tabs .tab-item .badge, - .tabs.tabs-custom .tab-item .badge { - background-color: #999; - color: #387ef5; } - -.tabs-striped.tabs-custom .tabs { - background-color: #5D3A23; } - -.tabs-striped.tabs-custom .tab-item { - color: rgba(255, 255, 255, 0.7); - opacity: 1; } - .tabs-striped.tabs-custom .tab-item .badge { - opacity: 0.7; } - .tabs-striped.tabs-custom .tab-item.tab-item-active, .tabs-striped.tabs-custom .tab-item.active, .tabs-striped.tabs-positive .tab-item.activated { - margin-top: -2px; - color: #fff; - border-style: solid; - border-width: 2px 0 0 0; - border-color: #fff; } + background-color: #ffffff !important; +} + +.ion-view-background { + background-color: #ffffff !important; +} + .title.title-center.header-item { color: #303030; } + .date-picker-button { - color: #303030 !important; padding: 0 15px; border-color: transparent; margin-top: 4px; box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 2px 2px rgba(0,0,0,0.23); + font-family: 'Lato'; + color: #0088ce !important; padding: 0 15px; border-color: transparent; margin-top: 4px; + /* box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); */ border-style: solid; border-color: white; border-width: 0px; border-radius: 5px; } + +.button.date-picker-button { + font-size: 15px; +} + .date-picker-arrow { - color: #303030 !important; margin-top: 4px; background-color: transparent !important; + width: 24px; + height: 40px; + background-image: url("../img/icons/navigate_next_black_24dp\ 3.png"); + background-color: #ffffff; + background-repeat: no-repeat; + background-position: center; + border: none; +} + +.date-picker-arrow-left-icon { + background-image: url("../img/icons/navigate_next_black_24dp\ 3.png"); } -/* Light theme ends */ +.date-picker-arrow-right-icon { + width: 24px; + height: 40px; + background-image: url("../img/icons/navigate_next_black_24dp\ 2.png"); + background-color: #ffffff; + background-repeat: no-repeat; + background-position: center; + border: none; +} .earlier-later-expand { color: #303030; @@ -796,14 +816,17 @@ ion-header-bar { padding-bottom: 5px; padding-left: 30px; margin-top: 0 !important; - margin-bottom: 0!important; + margin-bottom: 0 !important; } + p.list-text { color: #303030; } + a.list-text { color: #303030; } + .tab-item .icon { margin: 3px auto 1px auto; font-size: 25px; @@ -811,76 +834,56 @@ a.list-text { } .card-1 { - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - transition: all 0.3s cubic-bezier(.25,.8,.25,1); -} - -.card-1:hover { - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); -} - -.card-2 { - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} - -.card-3 { - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); -} - -.card-4 { - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); -} - -.card-5 { - box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); + transition: all 0.3s cubic-bezier(.25, .8, .25, 1); } button.button.ng-binding { - font-size: 15px; + font-size: 12px; } + button.button.ng-binding i.icon.ion-edit { font-size: 12px; } + button.button.back-button.buttons.button-clear.header-item { - color: #303030; opacity: 0.7; + color: #303030; + opacity: 0.7; } + .nav-bar-title { - color: #303030; opacity: 0.7; -} -/* Profile tab */ -.control-list-item { - background-color: white! important; height: 50px; margin-top: 0.5px; -} -.control-list-text { - background-color: white! important; padding: 15px; float: left; -} -.control-list-toggle { - float: right; margin-top: 5px; margin-right: 2px; + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + font-size: 20px; } + /* Diary list tab */ .lightrail { color: blue } + .dev-zone-input { - padding: 7px 0; font-size: 16px; line-height: 22px; height: 36px; + padding: 7px 0; + font-size: 16px; + line-height: 22px; + height: 36px; } + .dev-zone-title { padding: 18px 16px; } + .dev-zone-button { position: absolute; right: 16px; top: 16px; } -.list-card { - margin: 16px 0; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); - border: 1px solid #ccc; -} + .bg-light { - background-color: #ffffff; + background-color: #ffffff; } + .bg-unprocessed { background-color: #9eb2aa; } @@ -907,56 +910,72 @@ button.button.back-button.buttons.button-clear.header-item { text-align: center; padding: 0.25em 0.8em; border-bottom-color: #ccc; border-bottom-width: 0.5px; border-bottom-style: solid; } .start-time-tag { - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + width: 68px; + height: 30px; + background: #80D0FF; + box-sizing: border-box; + border-radius: 50px; + margin: auto; + display: flex; + justify-content: center; + align-items: center; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 13px; text-align: center; - background-color: #33e0bb; color: black; - width: 16%; - height: 16px; - border-radius: 8px; - font-size: 9px; - position: absolute; - left: 1%; - top: 15px; - line-height: 16px; + position: relative; + bottom: -15px; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } + .stop-time-tag { - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + width: 68px; + height: 30px; + background: #0088ce; + /* border: 1px solid #0088ce; */ + box-sizing: border-box; + border-radius: 50px; + margin: auto; + display: flex; + justify-content: center; + align-items: center; + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + font-size: 13px; text-align: center; - background-color: #ff5251; - color: black; - width: 16%; - height: 16px; - border-radius: 8px; - font-size: 9px; - position: absolute; - left: 1%; - bottom: 15px; - line-height: 16px; + color: white; + position: relative; + top: -15px; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); } + .start-time-tag-inf-scroll { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); text-align: center; - background-color: #33e0bb; + background-color: #80D0FF; color: black; width: 16%; - height: 25px; + height: 18px; border-radius: 8px; - font-size: 12px; + font-size: 11px; position: absolute; left: 1%; top: 15px; line-height: 16px; + } .stop-time-tag-inf-scroll { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); text-align: center; - background-color: #ff5251; - color: black; + background-color: #0088ce; + color: white; width: 16%; - height: 25px; + height: 18px; border-radius: 8px; - font-size: 12px; + font-size: 11px; position: absolute; left: 1%; bottom: 15px; @@ -965,8 +984,8 @@ button.button.back-button.buttons.button-clear.header-item { .stop-time-tag-lower { box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); text-align: center; - background-color: #ff5251; - color: black; + background-color: #0088ce; + color: white; width: 16%; height: 16px; border-radius: 8px; @@ -989,20 +1008,6 @@ button.button.back-button.buttons.button-clear.header-item { padding: 3px; } -.diary-checkmark-container i.can-verify { - color: #30A64A; - background-color: #ddd; - border-radius: 5px; -} -.diary-checkmark-container i.cannot-verify { - color: #E6B8B8; -} -.diary-checkmark-container i.already-verified { - color: #B8E6C2; -} -/* .diary-checkmark-container i.already-verified, .diary-checkmark-container i.cannot-verify { - color: #BFBFBF; -} */ .center-vert { display: flex; @@ -1024,9 +1029,11 @@ button.button.back-button.buttons.button-clear.header-item { .side-menu-item { padding: 5% 10%; } + .common-list-item { padding: 5% 8% 3% 8%; } + .common-list-item-location { font-size: 0.9em; font-weight: 300; @@ -1037,14 +1044,17 @@ button.button.back-button.buttons.button-clear.header-item { font-weight: 300; color: #303030; } + .common-map-item { padding: 0 !important; } + .common-map-item-location { - font-size: 0.8em; + font-size: 0.8em; font-weight: 300; color: #000; } + .common-detail-title { padding: 2% 3%; font-weight: 400; @@ -1056,8 +1066,9 @@ button.button.back-button.buttons.button-clear.header-item { padding: 0 8% 0 8%; border-left-width: 5px; border-left-style: solid; - border-left-color: #01D0A7; + border-left-color: #1123CB; } + .succ-title { font-weight: 400; color: #333; @@ -1075,22 +1086,34 @@ button.button.back-button.buttons.button-clear.header-item { color: #333; } + text { - font: 12px sans-serif; + font: 12px sans-serif; } + svg { - display: block; + display: block; } -html, #chart1, svg { - padding: 0px; - margin: 0 10px 0 0; + +html, +body, +#chart1, +svg { + padding: 0px; + margin: 0 10px 0 0; } -html, #chart2, svg { - padding: 0px; - margin: 0 10px 0 0; + +html, +body, +#chart2, +svg { + padding: 0px; + margin: 0 10px 0 0; } -.nvd3, nv-noData { + +.nvd3, +nv-noData { font-weight: 300 !important; } .metric-datepicker { @@ -1102,7 +1125,7 @@ html, #chart2, svg { border-radius: 5px; background-color: white; box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-title { @@ -1124,7 +1147,7 @@ html, #chart2, svg { border-radius: 5px; background-color: white; box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-weekday-container-lower { @@ -1134,7 +1157,7 @@ html, #chart2, svg { border-radius: 5px; background-color: white; box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-datepicker-container-lower { @@ -1157,12 +1180,12 @@ html, #chart2, svg { border-radius: 20px; background-color: white; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.03), 0 2px 3px rgba(0, 0, 0, 0.05); - color: #01D0A7; + color: #0088ce; font-weight: 700; height: 30px; } .metric-change-data-button: active{ - background-color: #01D0A7; + background-color: #0088ce; color: white; box-shadow: none; } @@ -1172,7 +1195,7 @@ html, #chart2, svg { border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .heatmap-mode-button { @@ -1181,21 +1204,21 @@ html, #chart2, svg { border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; - + } .current-mode-button { border: none; - background-color:#2D9CDB; - display:inline-block; - cursor:pointer; - color:#ffffff; + background-color: #2D9CDB; + display: inline-block; + cursor: pointer; + color: #ffffff; opacity: 0.4; - font-size:28px; + font-size: 28px; width: 100%; - text-decoration:none; + text-decoration: none; height: 80px; z-index: 1; position: relative; @@ -1209,11 +1232,11 @@ html, #chart2, svg { display: block; width: 40%; height: 25px; - background-color: #f5f5f5;; + background-color: #f5f5f5; + ; border-radius: 10px; color: #6A6A6A; left: 30%; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.05); } #current-start-time-text { @@ -1232,7 +1255,6 @@ html, #chart2, svg { #current-speed { background-color: #8F8F8F; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2), 0 2px 4px rgba(0, 0, 0, 0.05); opacity: 0.9; color: white; width: 60px; @@ -1256,7 +1278,7 @@ html, #chart2, svg { } #current-direction-text { - color:#6A6A6A; + color: #6A6A6A; font-size: 20px; font-weight: 600; margin-top: 5px; @@ -1269,51 +1291,54 @@ html, #chart2, svg { left: -4px; } +.slider-pager-page { + color: #1123cb !important; +} + /* Algularjs-slider custom css */ span.rz-bar-wrapper { - background-color: #f5f5f5; - box-shadow: 1px 0 2px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.3); + background-color: #f5f5f5; } .rzslider.rz-vertical .rz-bar-wrapper { - width: 36px !important; + width: 36px !important; } .rzslider .rz-bar { - background: #B3B3B3 !important; + background: #B3B3B3 !important; } .rzslider .rz-selection { - background: #8F8F8F !important; + background: #8F8F8F !important; } .rzslider .rz-pointer.rz-active::after { - background-color: #8F8F8F !important; + background-color: #8F8F8F !important; } .rzslider .rz-pointer { - background-color: #8F8F8F !important; + background-color: #8F8F8F !important; } .rzslider .rz-pointer::after { - background: #8F8F8F !important; + background: #8F8F8F !important; } .rzslider .rz-tick.rz-selected { - background: #8F8F8F !important; + background: #8F8F8F !important; } .rzslider .rz-tick { - background: #B3B3B3 !important; + background: #B3B3B3 !important; } .rzslider .rz-bubble { - color: #6A6A6A !important; - background-color: #f5f5f5; - z-index: 3; - border-radius: 0 10px 10px 0; + color: #6A6A6A !important; + background-color: #f5f5f5; + z-index: 3; + border-radius: 0 10px 10px 0; } .report-button { @@ -1325,7 +1350,6 @@ span.rz-bar-wrapper { width: 60%; height: 35px; z-index: 1; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.05); position: absolute; display: block; bottom: 40px; @@ -1342,21 +1366,21 @@ span.rz-bar-wrapper { border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-get-button { width: 60px; border-radius: 5px; color: white; - background-color: #01D0A7; + background-color: #0088ce; height: 35px; } .metric-get-button-inactive { width: 60px; border-radius: 5px; color: white; - background-color: #01D0A7; + background-color: #0088ce; opacity: 0.7; height: 35px; } @@ -1371,7 +1395,7 @@ span.rz-bar-wrapper { border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-half { @@ -1399,7 +1423,7 @@ span.rz-bar-wrapper { .metric-current-title-nofilter { position: absolute; color: white; - background-color: #01D0A7; + background-color: #0088ce; text-align: center; width: 100%; height: 35px; @@ -1427,7 +1451,7 @@ span.rz-bar-wrapper { width: 25%; left: 50%; height: 35px; - background-color: #01D0A7; + background-color: #0088ce; color: white; } .metric-filter-button { @@ -1443,7 +1467,7 @@ span.rz-bar-wrapper { width: 25%; left: 75%; height: 35px; - background-color: #01D0A7; + background-color: #0088ce; color: white; border-top-right-radius: 5px; border-bottom-right-radius: 5px; @@ -1457,13 +1481,14 @@ span.rz-bar-wrapper { overflow: hidden; border-top-right-radius: 5px; border-bottom-right-radius: 5px; + color: #0088ce; } .metric-chart-button-active { width: 50%; position: absolute; left: 50%; height: 30px; - background-color: #01D0A7; + background-color: #0088ce; color: white; font-weight: 700; overflow: hidden; @@ -1489,7 +1514,7 @@ span.rz-bar-wrapper { border-right-style: solid; border-right-width: 1px; height: 30px; - background-color: #01D0A7; + background-color: #0088ce; color: white; font-weight: 700; overflow: hidden; @@ -1536,7 +1561,7 @@ span.rz-bar-wrapper { width:25%; font-size: 12px; font-weight: 700; - background-color: #01D0A7; + background-color: #0088ce; color: white; overflow: hidden; border-top-left-radius: 5px; @@ -1549,7 +1574,7 @@ span.rz-bar-wrapper { font-size: 12px; font-weight: 700; overflow: hidden; - background-color: #01D0A7; + background-color: #0088ce; color: white; border-top-right-radius: 5px; border-bottom-right-radius: 5px; @@ -1560,7 +1585,7 @@ span.rz-bar-wrapper { width:25%; font-size: 12px; font-weight: 700; - background-color: #01D0A7; + background-color: #0088ce; color: white; overflow: hidden; float: left; @@ -1570,7 +1595,7 @@ span.rz-bar-wrapper { width:25%; font-size: 12px; font-weight: 700; - background-color: #01D0A7; + background-color: #0088ce; color: white; overflow: hidden; float: left; @@ -1625,11 +1650,11 @@ span.rz-bar-wrapper { } .metric-summary-title { padding: 2px; - color: #54DCC1; + color: #0088ce; font-weight: 700; } .metric-summary-content { - color: #54DCC1; + color: #0088ce; font-size: 12px; font-weight: 600; } @@ -1651,49 +1676,53 @@ span.rz-bar-wrapper { margin-bottom: 10px; } - .heatmap-filter-title { position: absolute; width: 14%; height: 35px; - display: flex; /* establish flex container */ - flex-direction: column; /* make main axis vertical */ - justify-content: center; /* center items vertically, in this case */ - align-items: left; /* center items horizontally, in this case */ + display: flex; + /* establish flex container */ + flex-direction: column; + /* make main axis vertical */ + justify-content: center; + /* center items vertically, in this case */ + align-items: left; + /* center items horizontally, in this case */ padding-left: 4px; } + .heatmap-filter-year { position: absolute; width: 16%; left: 18%; height: 35px; border-width: 0; - box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05) !important; } + .heatmap-filter-month { position: absolute; width: 11%; left: 35%; height: 35px; border-width: 0; - box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05) !important; } + .heatmap-filter-day { position: absolute; width: 11%; left: 47%; height: 35px; border-width: 0; - box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05) !important; } + .heatmap-filter-hour { position: absolute; width: 11%; left: 59%; height: 35px; border-width: 0; - box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05) !important; } + .heatmap-weekday-container-upper { left: 71%; width: 26%; @@ -1701,9 +1730,10 @@ span.rz-bar-wrapper { border-radius: 5px; background-color: white; box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } + .heatmap-weekday-container-lower { left: 71%; width: 26%; @@ -1711,9 +1741,10 @@ span.rz-bar-wrapper { border-radius: 5px; background-color: white; box-shadow: 0 1px 1px rgba(0,0,0,0.03), 0 1px 1px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } + .heatmap-fixmap-button { float: right; width: 30%; @@ -1721,21 +1752,22 @@ span.rz-bar-wrapper { border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } + .heatmap-get-button { float: right; width: 30%; border-radius: 5px; background-color: white; box-shadow: 0 1px 2px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05); - color: #01D0A7; + color: #0088ce; height: 35px; } .metric-summary-option-button { float: right; - color: #54DCC1; + color: #0088ce; background-color: white; height: 20px; border-radius: 5px; @@ -1748,7 +1780,10 @@ span.rz-bar-wrapper { height: 35px; +.full-toggle-container { + height: 35px; } + .full-toggle-left { width: 50%; float: left; @@ -1758,7 +1793,7 @@ span.rz-bar-wrapper { border-bottom-left-radius: 5px; background-color: white; - color: #01D0A7; + color: #0088ce; border-right-style: solid; border-right-width: 1px; border-right-color: #ccc; @@ -1771,7 +1806,7 @@ span.rz-bar-wrapper { border-top-left-radius: 5px; border-bottom-left-radius: 5px; - background-color: #01D0A7; + background-color: #0088ce; color: white; border-right-style: solid; border-right-width: 1px; @@ -1786,8 +1821,9 @@ span.rz-bar-wrapper { border-bottom-right-radius: 5px; background-color: white; - color: #01D0A7; + color: #0088ce; } + .full-toggle-right-active { width: 50%; float: right; @@ -1796,12 +1832,14 @@ span.rz-bar-wrapper { border-top-right-radius: 5px; border-bottom-right-radius: 5px; - background-color: #01D0A7; + background-color: #0088ce; color: white; } + .unit-toggle-container { - height: 35px; + height: 35px; } + .unit-toggle-left { width: 50%; float: left; @@ -1809,7 +1847,7 @@ span.rz-bar-wrapper { border-top-left-radius: 5px; border-bottom-left-radius: 5px; background-color: white; - color: #01D0A7; + color: #0088ce; border-right-style: solid; border-right-width: 1px; border-right-color: #ccc; @@ -1820,7 +1858,7 @@ span.rz-bar-wrapper { height: 35px; border-top-left-radius: 5px; border-bottom-left-radius: 5px; - background-color: #01D0A7; + background-color: #0088ce; color: white; border-right-style: solid; border-right-width: 1px; @@ -1833,51 +1871,75 @@ span.rz-bar-wrapper { border-top-right-radius: 5px; border-bottom-right-radius: 5px; background-color: white; - color: #01D0A7; + color: #0088ce; } + .unit-toggle-right-active { width: 50%; float: right; height: 35px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; - background-color: #01D0A7; + background-color: #0088ce; color: white; } + .userdata-title { color: #ccc; } + .carbon-goal-chart { height: 5px; - background-color: #01D0A7; + background-color: #0088ce; opacity: 0.6; border-radius: 2px; width: 100%; } + #no-border.item { border-width: 0 !important; } -#goal-signup-field{ + +#goal-signup-field { width: 50%; margin-left: auto; margin-right: auto; margin-bottom: 10px; } + .item.item-input.item-select { border-width: 1px !important; } + .control-icon-button:active { opacity: 0.7; } + .full-toggle-left:active { - opacity: 0.7; + opacity: 0.7; } + .full-toggle-right:active { opacity: 0.7; } + #iframe { - /*width: 375px !important;*/ - height: 100%; - -webkit-overflow-scrolling: touch !important; - overflow: scroll !important; + /*width: 375px !important;*/ + height: 100%; + -webkit-overflow-scrolling: touch !important; + overflow: scroll !important; +} + +.button-refresh { + background-image: url("../img/icons/restart_alt_black_24dp.svg"); + background-color: #ffffff; + background-repeat: no-repeat; + transform: matrix(-1, 0, 0, 1, 0, 0); + border: none; + width: 24px; + height: 24px; +} + +.platform-android .action-sheet-option { + padding-left: 16px; } diff --git a/www/fonts/Lato-Regular.ttf b/www/fonts/Lato-Regular.ttf new file mode 100644 index 000000000..33eba8b19 Binary files /dev/null and b/www/fonts/Lato-Regular.ttf differ diff --git a/www/i18n/en.json b/www/i18n/en.json index 44803bb2e..39337c380 100644 --- a/www/i18n/en.json +++ b/www/i18n/en.json @@ -1,13 +1,11 @@ { - "loading" : "Loading...", + "loading": "Loading...", "map-refresh": "Refresh", "map-fixmap": "Fix Map", "pull-to-refresh": "Pull to refresh", - "weekdays-all": "All", "weekdays-select": "Select day of the week", - - "post-trip-prompt":{ + "post-trip-prompt": { "notification-option-mute": "Mute", "notification-option-snooze": "Snooze", "notification-option-choose": "Choose", @@ -25,13 +23,10 @@ "unmute": "Unmute", "keep-muted": "Keep muted" }, - "post-trip-map-display-tour-incident": "Zoom in as much as possible to the location where the incident occurred and click on the blue line of the trip to mark a ☻ or ☹ incident", - "tour-next": "Next", "tour-previous": "Previous", "tour-finish": "Finish", - "trip-confirm": { "recenttrip": "Recent trip from: {{startTime}} → to: {{endTime}}", "continue": "Continue", @@ -40,58 +35,44 @@ "services-cancel": "Cancel", "services-save": "Save" }, - "place-common-place": "Common place", "place-successor-trips": "Successor trips", "place-trips-to": "{{trips}} trips to", "place-usually-starts": "Usually starts at: {{hour}}:00", "place-usually-takes": "Usually takes: {{duration}}", - "trip-start-hours": "Start hours", "trip-start-duration": "Duration", - - "control":{ + "control": { "profile": "Profile", - "edit-demographics": "Edit Demographics", - "username": "Username {{usernamedata}}", + "state": "State", + "wifi-activation": "Wifi", + "tracing-activation": "Active", + "signal-activation": "Active", + "waiting-for-trip": "Waiting For Trip", + "waiting-for-trip-start": "Start", + "current-position": "Current Position", + "unknown-position": "unknown", + "parameters": "Parameters", + "identifier": "Identifier", "tracking": "Tracking", - "app-status": "App Status", - "medium-accuracy": "Medium accuracy", - "dark-theme": "Dark theme", - "force-sync": "Force sync", - "share": "Share", - "check-ui-updates": "Check for UI updates", + "view-privacy": "View Privacy Policy", + "delete-my-data": "Delete my data", + "leave-comment": "Leave a comment", + "select-language": "Languages", + "current-language": "English", "download-json-dump": "Download json dump", + "force-sync": "Force sync", "email-log": "Email log", - "upload-log": "Upload log", - "view-privacy": "View Privacy Policy", - "user-data": "User data", - "erase-data": "Erase data", - "dev-zone": "Developer zone", - "refresh": "Refresh", - "end-trip-sync": "End trip + sync", - "check-consent": "Check consent", - "invalidate-cached-docs": "Invalidate cached docs", - "nuke-all": "Nuke all buffers and cache", - "test-notification": "Test local notification", - "set-ui-channel": "Set UI channel", - "check-log": "Check log", - "check-sensed-data": "Check sensed data", - "check-map": "Check map", - "collection": "Collection", - "sync": "Sync", - "transition-notify": "Transition Notify", - "button-accept": "I accept", - "view-qrc": "My OPcode" + "version": "Version", + "app-status": "App Status" }, - - "general-settings":{ - "choose-date" : "Choose date to download data", - "choose-dataset" : "Choose a dataset for carbon footprint calculations", - "carbon-dataset" : "Carbon dataset", - "nuke-ui-state-only" : "UI state only", - "nuke-native-cache-only" : "Native cache only", - "nuke-everything" : "Everything", + "general-settings": { + "choose-date": "Choose date to download data", + "choose-dataset": "Choose a dataset for carbon footprint calculations", + "carbon-dataset": "Carbon dataset", + "nuke-ui-state-only": "UI state only", + "nuke-native-cache-only": "Native cache only", + "nuke-everything": "Everything", "clear-data": "Clear data", "cancel": "Cancel", "user-data-erased": "User data erased.", @@ -102,14 +83,9 @@ "consented-ok": "OK", "share-message": "Join me in making transportation greener and healthier \nDownload the emission app:", "share-subject": "Emission - UC Berkeley Research Project", - "share-url": "https://bic2cal.eecs.berkeley.edu/#download", - "qrcode": "My OPcode", - "qrcode-share-title": "You can save your OPcode to login easily in the future!", - "qrcode-share-message": "Save this OPcode or send to a new device to scan and login! \n[OpenPath] My OPcode: ", - "qrcode-share-subject": "My OPcode - OpenPATH" + "share-url": "https://bic2cal.eecs.berkeley.edu/#download" }, - - "metrics":{ + "metrics": { "cancel": "Cancel", "confirm": "Confirm", "get": "Get", @@ -117,7 +93,7 @@ "filter": "Filter", "from": "From:", "to": "To:", - "last-week": "last week", + "last-week": "Last week", "frequency": "Frequency:", "pandafreqoptions-daily": "DAILY", "pandafreqoptions-weekly": "WEEKLY", @@ -133,37 +109,35 @@ "chart-no-data": "No Data Available", "trips-yaxis-number": "Number", "calorie-data-change": " change", + "carbon-data-change": " change", + "carbon-data-calculating": "Calculating...", + "carbon-data-unknown": "Unknown", "calorie-data-unknown": "Unknown...", - "greater-than": " greater than ", - "greater": " greater ", - "or": "or", - "less-than": " less than ", - "less": " less ", - "week-before": "vs. week before", "calorie-data-change-increase": " increase over a week", "calorie-data-change-decrease": " decrease over a week", + "carbon-data-change-increase": " increase over a week", + "carbon-data-change-decrease": " decrease over a week", "pick-a-date": "Pick a date", "trips": "trips", - "hours": "hours", - "custom": "Custom" + "custom": "Custom", + "day": "day", + "days": "days" }, - "diary": { + "diary": "Diary", "current-trip": "Current Trip", "current-yesterday": "Yesterday", "current-weekago": "Week ago", "history": "History", "began": "Began {{startTime}}", "report-incident": "Report Incident", - "draft": "DRAFT", - "distance-in-time": "{{distance}} {{distsuffix}} in {{time}}", - "date-distance-in-time": "{{date}}: {{distance}} {{distsuffix}} in {{time}}", + "draft": "Draft", + "distance-in-time": "{{distance}} km in {{time}}", + "date-distance-in-time": "{{date}}: {{distance}} km in {{time}}", "distance": "Distance", "time": "Time", "mode": "Mode", - "replaces": "Replaces", "purpose": "Purpose", - "survey": "Details", "unlabeled": "All Unlabeled", "invalid-ebike": "Invalid", "to-label": "To Label", @@ -173,17 +147,63 @@ "scroll-to-load-more": "Scroll to load more", "filter-display-status": "Displaying {{displayTripsLength}} / {{allTripsLength}} trips", "filter-display-range": "{{currentEnd | date}} to {{currentStart | date:'medium' }}", - "choose-mode": "Mode 📝 ", + "choose-mode": "Mode", "choose-replaced-mode": "Replaces 📝", - "choose-purpose": "Purpose 📝", - "choose-survey": "Add Trip Details 📝 ", + "choose-purpose": "Purpose", "select-mode-scroll": "Mode (👇 for more)", "select-replaced-mode-scroll": "Replaces (👇 for more)", "select-purpose-scroll": "Purpose (👇 for more)", - "list-pick-a-date": "Pick a date", - "no-trips-today": "No trips recorded on this day" + "list-pick-a-date": "Pick a date" + }, + "modes": { + "walk": "Walk", + "bike": "Bike", + "car-drove-alone": "Car (Drove Alone)", + "car-shared-ride": "Car (Shared Ride)", + "e-car-drove-alone": "E-Car (Drove Alone)", + "e-car-shared-ride": "E-Car (Shared Ride)", + "taxi": "Taxi/Uber", + "bus": "Bus", + "subway": "Subway", + "train": "Train", + "tramway": "Tramway", + "free-shuttle": "Free Shuttle", + "car": "Car", + "plane": "Plane", + "other": "Other" + }, + "purposes": { + "home": "Home", + "work": "Work", + "school": "School", + "transit-transfer": "Transit Transfer", + "shopping": "Shopping", + "groceries": "Groceries", + "visit": "Visit", + "meal": "Meal", + "pick-drop": "Pick-up/Drop off", + "personal": "Personal", + "personal-med": "Personal/Medical", + "access-recreation": "Access Recreation", + "exercise": "Exercice", + "entertainment": "Entertainment/Social", + "religious": "Religious", + "other": "Other" + }, + "new_label_tour": { + "0": "This is the new Label user interface. Label trips here instead of on the Diary page. Trips take longer to appear here, but when they do they will be more accurate and you will be able to use our new features to label them faster.", + "1": "This is the To Label tab. On this tab, only the trips you need to label will appear; when you label them, they will automatically disappear after a few seconds.", + "2": "Some of your trips do not appear in To Label because an algorithm labeled them for you. If you're curious, you can see these in the other tabs, but you only need to label trips on the To Label tab.", + "3": "Trips now appear with the newest trip at the bottom.", + "4": "To load older trips, scroll up and press the load button.", + "5": "Labels are now red if we couldn't predict them, yellow if we could predict them, and green if you entered or confirmed them yourself.", + "6": "If you see yellow labels on the To Label tab, this means you need to confirm or correct them.", + "7": "If all of a trip's yellow labels are correct, you can click the checkmark button, which will turn them green (the checkmark button doesn't do anything to red or green labels.", + "8": "If certain yellow labels are incorrect, you can correct them just like you'd enter a label normally.", + "9": "When there are no more trips in To Label, you're done labeling for the day.", + "10": "The more you label your trips, the better the algorithm gets at predicting your trips for you, so keeping up-to-date with your labeling will save you work in the long run!", + "11": "Click the ‘?’ button whenever you'd like to view this tour again." }, - "new_label_tour": { "0": "This is the new Label user interface. Label trips here instead of on the Diary page. Trips take longer to appear here, but when they do they will be more accurate and you will be able to use our new features to label them faster.", "1": "This is the To Label tab. On this tab, only the trips you need to label will appear; when you label them, they will automatically disappear after a few seconds.", @@ -198,124 +218,94 @@ "10": "The more you label your trips, the better the algorithm gets at predicting your trips for you, so keeping up-to-date with your labeling will save you work in the long run!", "11": "Click the ‘?’ button whenever you'd like to view this tour again." }, - "user-gender": "Gender", "gender-male": "Male", "gender-female": "Female", "user-height": "Height", "user-weight": "Weight", "user-age": "Age", - - "main-metrics":{ + "main-metrics": { "dashboard": "Dashboard", - "summary": "My Summary", + "summary": "Summary", "chart": "Chart", - "mybear": "My Bear", - "leaderboard": "Leaderboard", - "carbon-usage": "Carbon Usage Past 7 Days", - "trip-labelling-stats": "Trip Labeling Statistics", - "gold-tier": "Gold tier", - "silver-tier": "Silver tier", - "bronze-tier": "Bronze tier", - "overallScoreMsg": "Overall Score: {{overallScore | number }}", - "confirmationMsg": "{{confirmedPct | number }}% labeled", - "validLabelsMsg": "{{validReplacePct | number }}% eBike 'replaced mode' labels valid", - "suggestion": "Suggestion", - "suggestion-savings": "You can save {{suggestionData.savings}} in a month", - "recent-trips": "Recent Trips", - "no-available-recent-trips": "No available recent trips", - "weekly-stats": "Weekly Stats", - "change-data": "Change dates:", - "distance": "My Distance", - "trips": "My Trips", - "duration": "My Duration", - "fav-mode": "My Favorite Mode", - "speed": "My Speed", - "footprint": "My Footprint", - "how-it-compares": "Ballpark comparisons", - "optimal": "Optimal (perfect mode choice for all my trips):", - "average": "Average for group:", - "avoided": "CO₂ avoided (vs. all 'taxi'):", - "label-to-squish": "Label trips to collapse the range into a single number", - "equals-phone-charges": "Saved {charges, plural, =0{at least 0 smartphone charges} one {at least 1 smartphone charge} other {at least # smartphone charges}} vs. all 'taxi'", - "lastweek": "My last week value:", - "us-2030-goal": "US 2030 Goal Estimate:", - "us-2050-goal": "US 2050 Goal Estimate:", - "calories": "My Calories", + "change-data": "Change data:", + "distance": "Distance", + "trips": "Trips", + "duration": "Duration", + "speed": "Speed", + "footprint": "Footprint", + "optimal": "Optimal:", + "average": "Average:", + "worst": "Worst:", + "lastweek": "Last Week:", + "calories": "Calories", "calibrate": "Calibrate", "no-summary-data": "No summary data", - "mean-speed": "My Average Speed", - "equals-cookies": "Equals {cookies, plural, =0{at least 0 homemade chocolate chip cookies} one {at least 1 homemade chocolate chip cookie} other {at least # homemade chocolate chip cookies}}", - "equals-icecream": "Equals {icecream, plural, =0{at least 0 half cups vanilla ice cream} one {at least 1 half cup vanilla ice cream} other {at least # half cups vanilla ice cream}}", - "equals-bananas": "Equals {bananas, plural, =0{at least 0 bananas} one {at least 1 banana} other {at least # bananas}}" + "median-speed": "Average Speed", + "equals-cookies": "Equals {cookies, plural, =0{0 homemade chocolate chip cookies} one {1 homemade chocolate chip cookie} other {# homemade chocolate chip cookies}}", + "equals-icecream": "Equals {icecream, plural, =0{0 half cups vanilla ice cream} one {1 half cup vanilla ice cream} other {# half cups vanilla ice cream}}", + "equals-bananas": "Equals {bananas, plural, =0{0 bananas} one {1 banana} other {# bananas}}", + "get": "Ok", + "from": "from", + "to": "to" }, - - "main-diary" : "Diary", - - "main-inf-scroll" : { + "main-diary": "Diary", + "main-inf-scroll": { "tab": "Label" }, - - "main-heatmap":{ + "main-heatmap": { "title": "Heatmap", - "counts" : "Counts", - "stress" : "Stress", - "from" : "From:", - "to" : "To:", - "get" : "Get!", + "counts": "Counts", + "stress": "Stress", + "from": "From:", + "to": "To:", + "get": "Get!", "all": "ALL", "none": "NONE", "bicycling": "BICYCLING", "walking": "WALKING", "in-vehicle": "IN_VEHICLE", - "select-travel-mode" : "Select travel mode", + "select-travel-mode": "Select travel mode", "cancel": "Cancel", "tour-datepicker": "This heatmap shows the aggregate data for all E-mission users. Select the dates you want to see, and filter by hours of the day (24h format) and days of the week. For example, if you enter 16 and 19 in the last field, and select Monday and Friday, you'll see the Heatmap filtered to show the traffic on weekdays between 4pm and 7pm.", "tour-mode": "Click here to filter your results by mode of transportation. The default is to show all modes.", "tour-get": "Click here to generate the heatmap." }, - - "details":{ + "details": { "speed": "Speed", - "time": "Time", + "time": "Temps", "tour-detail-content": "To report an incident, zoom in as much as possible to the location where the incident occurred and click on the trip to mark a ☻ or ☹ incident", "tour-sectionList-content": "Trip sections, along with times and modes", "tour-sectionPct-content": "% of time spent in each mode for this trip" }, - "list-explainDraft-alert": "This trip has not yet been analysed. If it stays in this state, please ask your sysadmin to check what is wrong.", "list-datepicker-today": "Today", "list-datepicker-close": "Close", "list-datepicker-set": "Set", - "list-tour-datepicker-button" : "Use this to select the day you want to see.", - "list-tour-diary-entry" : "Click on the map to see more details about each trip.", - "list-tour-map-fix-button" : "Use this to fix the map tiles if they have not loaded properly.", - - "service":{ + "list-tour-datepicker-button": "Use this to select the day you want to see.", + "list-tour-diary-entry": "Click on the map to see more details about each trip.", + "list-tour-map-fix-button": "Use this to fix the map tiles if they have not loaded properly.", + "service": { "reading-server": "Reading from server...", "reading-cache": "Reading from cache...", "reading-unprocessed-data": "Reading unprocessed data..." }, - - - "post-trip-manual-incident-time" : "Choose incident time", - - "email-service":{ + "post-trip-manual-incident-time": "Choose incident time", + "email-service": { "email-account-not-configured": "Email account is not configured, cannot send email", "email-account-mail-app": "You must have the mail app on your phone configured with an email address. Otherwise, this won't work", "going-to-email": "Going to email database from {{parentDir}}", - "email-log":{ + "email-log": { "subject-logs": "emission logs", "body-please-fill-in-what-is-wrong": "please fill in what is wrong" }, "no-email-address-configured": "No email address configured.", - "email-data":{ + "email-data": { "subject-data-dump-from-to": "Data dump from {{start}} to {{end}}", "body-data-consists-of-list-of-entries": "Data consists of a list of entries.\nEntry formats are at https://github.com/e-mission/e-mission-server/tree/master/emission/core/wrapper \nData can be loaded locally using instructions at https://github.com/e-mission/e-mission-server#loading-test-data \n and can be manipulated using the example at https://github.com/e-mission/e-mission-server/blob/master/Timeseries_Sample.ipynb" } }, - - "upload-service":{ + "upload-service": { "upload-database": "Uploading database {{db}}", "upload-from-dir": "from directory {{parentDir}}", "upload-to-server": "to servers {{serverURL}}", @@ -325,7 +315,6 @@ "upload-progress": "Sending {{filesizemb | number}} MB to {{serverURL}}", "upload-details": "Sent {{filesizemb | number}} MB to {{serverURL}}" }, - "intro": { "appstatus": { "overall-description": "This app works in the background to automatically build a travel diary for you. Make sure that all the settings below are green so that the app can work properly!", @@ -393,11 +382,11 @@ "allow_background": { "samsung": "Disable 'Medium power saving mode'" }, - "consent":{ + "consent": { "button-accept": "I accept", "button-decline": "I refuse" }, - "updatecheck":{ + "updatecheck": { "downloading-update": "Downloading UI-only update", "extracting-update": "Extracting UI-only update", "done": "Update done, reloading...", @@ -405,22 +394,8 @@ "download-not-now": "Not now", "download-apply": "Apply" }, - "sensor_explanation":{ + "sensor_explanation": { "button-accept": "OK", "button-decline": "Stop" - }, - "survey": { - "prev-survey-found": "Found previous survey response", - "use-prior-response": "Use prior response", - "edit-response": "Edit response", - "move-on": "Move on", - "survey": "Survey", - "save": "Save", - "back": "Back", - "next": "Next", - "powered-by": "Powered by", - "dismiss": "Dismiss", - "return-to-beginning": "Return to beginning", - "go-to-end": "Go to End" } } diff --git a/www/i18n/fr.json b/www/i18n/fr.json new file mode 100644 index 000000000..8ea9c4bcf --- /dev/null +++ b/www/i18n/fr.json @@ -0,0 +1,352 @@ +{ + "loading": "Chargement...", + "map-refresh": "Rafraîchir", + "map-fixmap": "Ré-afficher la Carte", + "pull-to-refresh": "Tirer pour rafraîchir", + "weekdays-all": "Tout", + "weekdays-select": "Jour de la semaine", + "post-trip-prompt": { + "notification-option-mute": "Silencieux", + "notification-option-snooze": "En Sommeil", + "notification-option-choose": "votre choix", + "notification-title": "Comment et pourquoi êtes-vous venu.e?", + "choose-mode": "Mode principal", + "skip": "Sauter", + "snoozed-reminder": "Rappel : en sommeil", + "snoozed-reapper-message": "Affiché à nouveau dans 30'", + "platform-specific-message-ios": "Glisser vers la G ou toucher pour ajouter une info sur ce déplacement.", + "platform-specific-message-android": "Voir les options ou toucher l'écran pour ajouter une info.", + "platform-specific-message-other": "Toucher l'écran pour ajouter une info sur ce déplacement", + "notifications-muted": "Arrêt des notifications en fin de déplacement", + "notifications-reenabled": "Peut être réactivé depuis Profil / Dev Zone, ou réactivez maintenant.", + "muted": "Silencieux", + "unmute": "Réactiver", + "keep-muted": "Laisser silencieux" + }, + "post-trip-map-display-tour-incident": "Zoomez puis indiquez le lieu de l'incident et cliquez sur la ligne bleue pour qualifier l'incident ☻ ou ☹", + "tour-next": "Suivant", + "tour-previous": "Précédent", + "tour-finish": "Fin", + "trip-confirm": { + "recenttrip": "Déplacement de: {{startTime}} → à: {{endTime}}", + "continue": "Continuer", + "done": "OK", + "services-please-fill-in": "Renseignez le {{text}} non listé.", + "services-cancel": "Annuler", + "services-save": "Enregistrer" + }, + "place-common-place": "Lieu fréquent", + "place-successor-trips": "Déplacements suivants", + "place-trips-to": "{{trips}} déplacements vers", + "place-usually-starts": "Commence en général à: {{hour}}:00", + "place-usually-takes": "Dure en général: {{duration}}", + "trip-start-hours": "Heures de départ", + "trip-start-duration": "Durée", + "control": { + "profile": "Profil", + "state": "État", + "wifi-activation": "Wifi", + "tracing-activation": "Activée", + "signal-activation": "Activé", + "waiting-for-trip": "En attente de déplacement", + "waiting-for-trip-start": "Débuter", + "current-position": "Position actuelle", + "unknown-position": "indéterminé", + "parameters": "Paramètres", + "identifier": "Identifiant", + "tracking": "Suivi", + "view-privacy": "Voir la politique de confidentialité", + "delete-my-data": "Supprimer mes données", + "leave-comment": "Laisser un commentaire", + "select-language": "Langues", + "current-language": "Français", + "download-json-dump": "Télécharger les données json", + "force-sync": "Forcer la synchro", + "email-log": "Envoyer les logs", + "version": "Version", + "app-status": "Status de l'application" + }, + "general-settings": { + "choose-date": "Date", + "nuke-ui-state-only": "UI state only", + "nuke-native-cache-only": "Native cache only", + "nuke-everything": "Tout", + "clear-data": "Effacer les données", + "cancel": "Annuler", + "user-data-erased": "Données effacées.", + "consent-not-found": "Consentement utilisateur non trouvé, êtes-vous Ok pour accepter maintenant ?", + "no-consent-message": "OK! Note que vous n'aurez pas de stats sans votre accord!", + "consent-found": "Consentement trouvé!", + "consented-to": "Accord pour le protocole {{protocol_id}}, {{approval_date}}", + "consented-ok": "OK", + "share-message": "Rejoins moi pour rendre les moyens de transports plus écolos \nTélécharges l'application emission:", + "share-subject": "Emission - UC Berkeley Research Project", + "share-url": "https://bic2cal.eecs.berkeley.edu/#download" + }, + "metrics": { + "cancel": "Annuler", + "confirm": "Confirmer", + "get": "Ok", + "range": "Range", + "filter": "Filtre", + "from": "de :", + "to": "à :", + "last-week": "Semaine dernière", + "frequency": "Fréquence:", + "pandafreqoptions-daily": "par JOUR", + "pandafreqoptions-weekly": "par SEMAINE", + "pandafreqoptions-biweekly": "BI-HEBDO", + "pandafreqoptions-monthly": "MENSUEL", + "pandafreqoptions-yearly": "ANNUEL", + "freqoptions-daily": "par JOUR", + "freqoptions-monthly": "MENSUEL", + "freqoptions-yearly": "ANNUEL", + "select-pandafrequency": "Fréquence des stats", + "select-frequency": "Fréquence des stats", + "chart-xaxis-date": "Date", + "chart-no-data": "Pas de données!", + "trips-yaxis-number": "Nombre", + "calorie-data-change": " d'écart", + "carbon-data-change": " d'écart", + "carbon-data-calculating": "Je calcule...", + "carbon-data-unknown": "Inconnu", + "calorie-data-unknown": "Inconnu...", + "calorie-data-change-increase": " d'augmentation en 1 semaine", + "calorie-data-change-decrease": " de diminution en 1 semaine", + "carbon-data-change-increase": " d'augmentation en 1 semaine", + "carbon-data-change-decrease": " de diminution en 1 semaine", + "pick-a-date": "Choisissez la date", + "trips": "déplacements", + "custom": "Dates personnalisées", + "day": "jour", + "days": "jours" + }, + "diary": { + "diary": "Journal", + "current-trip": "Déplacement en cours", + "current-yesterday": "Hier", + "current-weekago": "Semaine dernière", + "history": "Historique", + "began": "A commencé {{startTime}}", + "report-incident": "Signalez un Incident", + "draft": "Brouillon", + "distance-in-time": "{{distance}} km en {{time}}", + "date-distance-in-time": "{{date}}: {{distance}} km en {{time}}", + "distance": "Distance", + "time": "Durée", + "mode": "Mode", + "purpose": "Motif", + "unlabeled": "Sans étiquette", + "invalid-ebike": "Invalide", + "to-label": "Étiquetter", + "show-all": "Tous les déplacements", + "no-trips-found": "Aucun déplacement trouvé", + "for-current-filter": "pour les filtres sélectionnés. 'Tous les déplacemets' pour retirer les filtres", + "scroll-to-load-more": "Défiler la page pour plus de résultats", + "filter-display-status": "Affichage de {{displayTripsLength}} / {{allTripsLength}} déplacements", + "filter-display-range": "{{currentEnd | date}} à {{currentStart | date:'medium' }}", + "choose-mode": "Mode principal", + "choose-replaced-mode": "Replacés 📝", + "choose-purpose": "Motif principal", + "select-mode-scroll": "Mode (👇 pour plus)", + "select-replaced-mode-scroll": "Replacés (👇 pour plus)", + "select-purpose-scroll": "Motif (👇 pour plus)", + "list-pick-a-date": "Date" + }, + "modes": { + "walk": "Marche à pied", + "bike": "Vélo", + "car-drove-alone": "Voiture (seul)", + "car-shared-ride": "Covoiturage", + "e-car-drove-alone": "Voiture électrique (seul)", + "e-car-shared-ride": "Covoiturage électrique", + "taxi": "Taxi/Uber", + "bus": "Bus", + "train": "Train", + "subway": "Métro", + "tramway": "Tram", + "free-shuttle": "Navette", + "car": "Voiture", + "plane": "Avion", + "other": "Autre" + }, + "purposes": { + "home": "Maison", + "work": "Travail", + "at-work": "Au travail", + "school": "Études", + "transit-transfer": "Correspondance TC", + "shopping": "Magasinage", + "groceries": "Épicerie", + "visit": "Visite", + "meal": "Repas", + "pick-drop": "Déposer/Récupérer", + "personal": "Personnel", + "personal-med": "Personnel", + "access-recreation": "Vers un loisir", + "exercise": "Sport", + "entertainment": "Divertissement/Social", + "religious": "Religieux", + "other": "Autre" + }, + "user-gender": "Genre", + "gender-male": "Homme", + "gender-female": "Femme", + "user-height": "Taille", + "user-weight": "Poids", + "user-age": "Age", + "main-metrics": { + "dashboard": "Tableau de bord", + "summary": "Résumé", + "chart": "Graphique", + "change-data": "Changer date", + "distance": "Distance", + "trips": "Déplacements", + "duration": "Durée", + "speed": "Vitesse", + "footprint": "Empreinte", + "optimal": "Optimal :", + "average": "Moyenne :", + "worst": "Pire :", + "lastweek": "Semaine dernière :", + "calories": "Calories", + "calibrate": "Calibrer", + "no-summary-data": "Pas de données résumées", + "median-speed": "Vitesse moyenne", + "equals-cookies": "soit {cookies, plural, =0{0 cookies} one {1 cookie} other {# cookies}}", + "equals-icecream": "soit {icecream, plural, =0{0 glaces à la vanille} one {1 glace à la vanille} other {# glaces à la vanille}}", + "equals-bananas": "soit {bananas, plural, =0{0 bananes} one {1 banane} other {# bananes}}", + "get": "Ok", + "from": "de", + "to": "à" + }, + "main-diary": "Journal", + "main-heatmap": { + "title": "Points chauds", + "counts": "Comptage", + "stress": "Stress", + "from": "De :", + "to": "à :", + "get": "Go !", + "all": "TOUT", + "none": "AUCUN", + "bicycling": "VELO", + "walking": "MARCHE", + "in-vehicle": "VEHICULE", + "select-travel-mode": "Choix du mode", + "cancel": "Annuler", + "tour-datepicker": "Cette carte superpose les données de tous les utilisateurs. Choisissez les dates, filtrez selon l'heure et le jour de la semaine.", + "tour-mode": "Cliquez ici pour filtrer par mode. Par défaut, tous les modes sont affichés.", + "tour-get": "Cliquez ici pour générer la carte." + }, + "details": { + "speed": "Vitesse", + "time": "Durée", + "tour-detail-content": "Pour signaler un incident, Zoomez puis indiquez le lieu de l'incident et cliquez sur la ligne bleue pour qualifier l'incident ☻ ou ☹", + "tour-sectionList-content": "Trajets, heures et modes", + "tour-sectionPct-content": "% du temps passé dans chaque mode" + }, + "list-explainDraft-alert": "Le déplacement n'a pas encore été analysé. Si cela dure + de 24H, signalez-le à votre administrateur système !", + "list-datepicker-today": "Aujourd'hui", + "list-datepicker-close": "Fermer", + "list-datepicker-set": "Définir", + "list-tour-datepicker-button": "Choisissez le jour à afficher.", + "list-tour-diary-entry": "Cliquez sur la carte pour + de détails.", + "list-tour-map-fix-button": "Cliquez pour rafraichir la carte.", + "service": { + "reading-server": "Données lues du serveur...", + "reading-cache": "Données lues dans le cache...", + "reading-unprocessed-data": "Données non traitées en cours de lecture..." + }, + "post-trip-manual-incident-time": "Jour/Heure de l'incident", + "email-service": { + "email-account-not-configured": "Le compte email n'est pas configuré", + "email-account-mail-app": "L'appli e-mail doit être configuré sinon cela ne fonctionnera pas.", + "going-to-email": "Transfert par mail de la Base de Données {{parentDir}}", + "email-log": { + "subject-logs": "emission logs", + "body-please-fill-in-what-is-wrong": "Merci d'indiquer ce qui ne fonctionne pas" + }, + "no-email-address-configured": "Aucune adresse e-mail configurée.", + "email-data": { + "subject-data-dump-from-to": "Données du {{start}} au {{end}}", + "body-data-consists-of-list-of-entries": "Les données sont une liste d'entrées.\n Vous pouvez trouver le format d'une entrée au lien suivant : https://github.com/e-mission/e-mission-server/tree/master/emission/core/wrapper \nLes données peuvent être chargées localement en suivant les instructions indiquées ici https://github.com/e-mission/e-mission-server#loading-test-data \n et peuvent être manipulées en suivant l'exemple disponible à ce lien : https://github.com/e-mission/e-mission-server/blob/master/Timeseries_Sample.ipynb" + } + }, + "consent": { + "button-accept": "J'accepte", + "button-decline": "Je refuse" + }, + "updatecheck": { + "downloading-update": "Mise à jour de l'UI uniquement", + "extracting-update": "Récupération de la mise à jour", + "done": "Mise à jour faire, chargement en cours...", + "download-new-ui": "Télécharger la mise à jour ?", + "download-not-now": "Pas maintenant", + "download-apply": "Appliquer" + }, + "intro": { + "appstatus": { + "overall-description": "Cette application fonctionne en arrière-plan pour créer automatiquement un journal de voyage pour vous. Assurez-vous que tous les paramètres ci-dessous sont verts afin que l'application puisse fonctionner correctement !", + "overall-loc-name": "Localisation", + "overall-loc-description": "Nous utilisons l'autorisation de localisation en arrière-plan pour suivre votre position en arrière-plan, même lorsque l'application est fermée. La lecture des emplacements en arrière-plan élimine le besoin d'activer et de désactiver le suivi, ce qui facilite l'utilisation de l'application et évite l'épuisement de la batterie.", + "locsettings": { + "name": "Les paramètres de localisation", + "description": { + "android-lt-9": "Les services de localisation doivent être activés et définis sur Haute précision. Cela nous permet d'enregistrer avec précision la trajectoire du voyage", + "android-gte-9": "Les services de localisation doivent être activés. Cela nous permet d'accéder aux données de localisation et de générer le journal de bord", + "ios": "Les services de localisation doivent être activés. Cela nous permet d'accéder aux données de localisation et de générer le journal de bord" + } + }, + "locperms": { + "name": "Autorisations de localisation", + "description": { + "android-lt-6": "Activé lors de l'installation de l'application.", + "android-6-9": "Veuillez sélectionner 'autoriser'", + "android-10": "Veuillez sélectionner 'Autoriser tout le temps'", + "android-gte-11": "Sur la page des paramètres de l'application, choisissez l'autorisation 'Emplacement' et définissez-la sur 'Autoriser tout le temps'", + "ios-lt-13": "Veuillez sélectionner 'Toujours autoriser'", + "ios-gte-13": "Veuillez sélectionner 'Toujours autoriser' Sur la page des paramètres de l'application, veuillez sélectionner 'Toujours' et 'Précis' et revenez ici pour continuer" + } + }, + "overall-fitness-name-android": "Activité physique", + "overall-fitness-name-ios": "Activité physique", + "overall-fitness-description": "Les capteurs de fitness distinguent les modes marche, vélo et motorisé. Nous utilisons ces données afin de séparer les parties des déplacements multimodaux comme le transport en commun. Nous l'utilisons également pour contre-vérifier les trajets potentiellement erronés - si le capteur de localisation saute à travers la ville mais que le capteur de condition physique est stationnaire, nous pouvons deviner que le trajet n'était pas valide.", + "fitnessperms": { + "name": "Autorisation d'activité physique", + "description": { + "android": "Merci d'autoriser.", + "ios": "Merci d'autoriser." + } + }, + "overall-notification-name": "Notifications", + "overall-notification-description": "Nous devons utiliser des notifications pour vous informer si les paramètres sont incorrects. Nous utilisons également des notifications push invisibles toutes les heures pour réveiller l'application et lui permettre de télécharger des données et de vérifier l'état de l'application. Nous utilisons également des notifications pour vous rappeler d'étiqueter vos trajets.", + "notificationperms": { + "app-enabled-name": "Notifications de l'application", + "not-paused-name": "Pas mis en pause", + "description": { + "android-enable": "Sur la page des paramètres de l'application, assurez-vous que toutes les notifications et tous les canaux sont activés.", + "android-unpause": "Sur la page des paramètres de l'application, assurez-vous que toutes les notifications sont activées. Si cela ne résout pas le problème, demandez de l'aide à votre administrateur", + "ios-enable": "Veuillez autoriser, dans la fenêtre contextuelle ou la page des paramètres de l'application si nécessaire" + } + }, + "overall-background-restrictions-name": "Restrictions d'arrière-plan", + "overall-background-restrictions-description": "L'application fonctionne la plupart du temps en arrière-plan pour vous faciliter la vie. Il vous suffit de l'ouvrir périodiquement pour étiqueter les trajets. Android empêche parfois les applications de fonctionner en arrière-plan. Cela nous empêche de générer un carnet de voyage précis. Veuillez supprimer les restrictions d'arrière-plan sur cette application.", + "unusedapprestrict": { + "name": "Applications inutilisées désactivées", + "description": { + "android-disable": "Sur la page des paramètres de l'application, accédez à 'Autorisations' et assurez-vous que les autorisations de l'application ne seront pas automatiquement réinitialisées.", + "ios": "Merci d'autoriser." + } + } + }, + "permissions": { + "locationPermExplanation-android-lt-6": "vous avez accepté l'autorisation lors de l'installation. Vous n'avez rien à faire maintenant.", + "locationPermExplanation-android-6-9": "veuillez sélectionnera 'Autoriser'", + "locationPermExplanation-android-10": "veuillez sélectionner 'Autoriser tout le temps'", + "locationPermExplanation-android-gte-11": "veuillez sélectionner 'Autoriser tout le temps' pour les autorisations de localisation sur la page de l'application", + "locationPermExplanation-ios-lt-13": "veuillez sélectionner 'Toujours autoriser'. Cela nous permet de comprendre votre voyage même lorsque vous n'utilisez pas activement l'application", + "locationPermExplanation-ios-gte-13": "veuillez sélectionner 'toujours' et 'précis' dans la page des paramètres de l'application et revenir ici pour continuer" + } + } +} \ No newline at end of file diff --git a/www/i18n/intro/consent-fr.html b/www/i18n/intro/consent-fr.html new file mode 100644 index 000000000..32de06ef2 --- /dev/null +++ b/www/i18n/intro/consent-fr.html @@ -0,0 +1,21 @@ + + + + + + + + + + + diff --git a/www/i18n/intro/consent-text-fr.html b/www/i18n/intro/consent-text-fr.html new file mode 100644 index 000000000..5ef0eb3f2 --- /dev/null +++ b/www/i18n/intro/consent-text-fr.html @@ -0,0 +1,359 @@ + + \ No newline at end of file diff --git a/www/i18n/intro/login-fr.html b/www/i18n/intro/login-fr.html new file mode 100644 index 000000000..d331f4dba --- /dev/null +++ b/www/i18n/intro/login-fr.html @@ -0,0 +1,16 @@ + +
+

Login via google

+ +
+Currently, we only support logging in via google, since they support techniques +such as two factor authentication for greater security. Participants at UC +Berkeley can choose to login using either their CalNet ID or a personal gmail +account. +
+ +
+ + +
+ \ No newline at end of file diff --git a/www/i18n/intro/sensor_explanation-fr.html b/www/i18n/intro/sensor_explanation-fr.html new file mode 100644 index 000000000..08b943769 --- /dev/null +++ b/www/i18n/intro/sensor_explanation-fr.html @@ -0,0 +1,46 @@ + + + + + + + diff --git a/www/i18n/intro/summary-fr.html b/www/i18n/intro/summary-fr.html new file mode 100644 index 000000000..e07d8538f --- /dev/null +++ b/www/i18n/intro/summary-fr.html @@ -0,0 +1,27 @@ + + +
+

TraceMe: Data driven carbon emission reduction

+
+ +
+ E-Mission is designed to: +
+
    +
  1. Automatically calculate your transportation carbon footprint and + compare it against California targets +
    +
  2. Give you suggestions on how to change your travel patterns to reduce your + footprint (coming soon) +
    +
  3. Provide aggregate data on travel patterns so that cities can improve their + land use and transportation planning. +
+
+
+ + + + diff --git a/www/i18n/it.json b/www/i18n/it.json new file mode 100644 index 000000000..1282c91d2 --- /dev/null +++ b/www/i18n/it.json @@ -0,0 +1,245 @@ +{ + "loading": "Caricamento...", + "map-refresh": "Aggiorna", + "map-fixmap": "Centra la mappa", + + "weekdays-all": "Tutto", + "weekdays-select": "Seleziona giorno", + + "post-trip-prompt": { + "notification-option-mute": "Silenzia", + "notification-option-snooze": "Posticipa", + "notification-option-choose": "Scegli", + "notification-title": "Come e perché sei arrivato qui?", + "choose-mode": "Scegli modo", + "skip": "Ignora", + "snoozed-reminder": "Promemoria posticipato", + "snoozed-reapper-message": "Ricomparirà tra 30 minuti", + "platform-specific-message-ios": "Scorri a sinistra o tocca per aggiungere informazioni sul viaggio.", + "platform-specific-message-android": "Vedi le opzioni o tocca per aggiungere informazioni sul viaggio.", + "platform-specific-message-other": "Tocca per aggiungere informazioni sul viaggio.", + "notifications-muted": "Notifiche di fine viaggio silenziate", + "notifications-reenabled": "Possono essere riabilitate da Profilo -> Sviluppatori o immediatamente.", + "muted": "Silenziato", + "unmute": "Riattiva", + "keep-muted": "Mantieni silenziato" + }, + + "post-trip-map-display-tour-incident": "Fai zoom il più possibile sulla posizione dell'incidente e clicca sulla linea blu per segnare un o un ", + + "tour-next": "Prossimo", + "tour-previous": "Precedente", + "tour-finish": "Fine", + + "trip-confirm": { + "recenttrip": "Spostamenti da: {{startTime}} → a: {{endTime}}", + "continue": "Continua", + "done": "Fatto", + "services-please-fill-in": "Compila le {{text}} non elencate.", + "services-cancel": "Annulla", + "services-save": "Salva" + }, + + "place-common-place": "Luoghi frequenti", + "place-successor-trips": "Luoghi successivi", + "place-trips-to": "{{trips}} viaggi verso", + "place-usually-starts": "Parte di solito alle: {{hour}}:00", + "place-usually-takes": "Di solito impiega: {{duration}}", + "trip-start-hours": "Ora di inizio", + "trip-start-duration": "Durata", + + "control": { + "profile": "Profilo", + "tracking": "Tracking attivo", + "medium-accuracy": "Precisione media", + "dark-theme": "Tema scuro", + "force-sync": "Forza la sincronizzazione", + "share": "Condividi", + "check-ui-updates": "Controlla aggiornamenti", + "download-json-dump": "Scarica i dati in json", + "email-log": "Invia i log per email", + "user-data": "I miei dati", + "erase-data": "Cancella i miei dati", + "dev-zone": "Sviluppatori", + "refresh": "Aggiorna", + "end-trip-sync": "Termina viaggio e sincronizza", + "check-consent": "Verifica i consensi", + "invalidate-cached-docs": "Invalida i dati in cache", + "nuke-all": "Cancella buffer e cache", + "set-ui-channel": "Imposta canale interfaccia utente", + "check-log": "Apri il log", + "check-sensed-data": "Dati raccoli", + "check-map": "Controlla la mappa", + "collection": "Raccolta", + "sync": "Sincronizza", + "transition-notify": "Notifica una transizione" + }, + + "general-settings": { + "choose-date": "Scegli data", + "nuke-ui-state-only": "Solo interfaccia utente", + "nuke-native-cache-only": "Solo cache nativa", + "nuke-everything": "Tutto", + "clear-data": "Cancella i dati", + "cancel": "Annulla", + "user-data-erased": "Dati cancellati.", + "consent-not-found": "Consenso per la raccolta dati non trovato. Acconsenti adesso?", + "no-consent-message": "OK! Nota che non avrai statistiche personalizzate senza consenso!", + "consent-found": "Consenso trovato!", + "consented-to": "Consenso fornito per il protocollo {{protocol_id}}, {{approval_date}}", + "consented-ok": "OK", + "share-message": "Unisciti a me per rendere i mezzi di trasporto più ecologici. \nScarica l'applicaizone emission:", + "share-subject": "Emission - UC Berkeley Research Project", + "share-url": "https://bic2cal.eecs.berkeley.edu/#download" + }, + + "metrics": { + "cancel": "Annulla", + "confirm": "Conferma", + "get": "Ok", + "range": "Range", + "filter": "Filtra", + "from": "da :", + "to": "a :", + "last-week": "Settimana precedente", + "frequency": "Frequenza:", + "pandafreqoptions-daily": "per GIORNO", + "pandafreqoptions-weekly": "per SETTIMANA", + "pandafreqoptions-biweekly": "BI-SETTIMANALE", + "pandafreqoptions-monthly": "MENSILE", + "pandafreqoptions-yearly": "ANNUALE", + "freqoptions-daily": "par GIORNO", + "freqoptions-monthly": "MENSILE", + "freqoptions-yearly": "ANNUALE", + "select-pandafrequency": "Frequenza delle statistiche", + "select-frequency": "Frequenza delle statistiche", + "chart-xaxis-date": "Data", + "chart-no-data": "Dati non disponibili", + "trips-yaxis-number": "Numero", + "calorie-data-change": " cambia", + "carbon-data-change": " cambia", + "carbon-data-calculating": "Calcolo...", + "carbon-data-unknown": "Sconosiuto", + "calorie-data-unknown": "Sconosciuto...", + "calorie-data-change-increase": " di aumento in una settimana", + "calorie-data-change-decrease": " di diminuzione in una settimana", + "carbon-data-change-increase": " di aumento in una settimana", + "carbon-data-change-decrease": " di diminuzione in una settimana", + "pick-a-date": "Scegli la data" + }, + + "diary": { + "current-trip": "Viaggio in corso", + "current-yesterday": "Ieri", + "current-weekago": "Settimana precedente", + "history": "Storico", + "began": "A partire da {{startTime}}", + "report-incident": "Riporta un Incidente", + "draft": "BOZZA", + "distance-in-time": "{{distance}} km in {{time}}", + "distance": "Distanza", + "time": "Durata", + "mode": "Modalità", + "purpose": "Motivo", + "choose-mode": "Modalità principale", + "choose-purpose": "Motivo principale", + "how-did-you-get-here": "Modalità principale?", + "why-did-you-come-here": "Motivo principale?", + "list-pick-a-date": "Data" + }, + + "user-gender": "Genere", + "gender-male": "Uomo", + "gender-female": "Donna", + "user-height": "Altezza", + "user-weight": "Peso", + "user-age": "Età", + + "main-metrics": { + "dashboard": "Dashboard", + "summary": "Riassunto", + "chart": "Grafico", + "change-data": "Cambia data", + "distance": "Distanza", + "trips": "Viaggi", + "duration": "Durata", + "speed": "Velocità", + "footprint": "Impronta", + "optimal": "Ottimale :", + "average": "Media :", + "worst": "Peggiore :", + "lastweek": "Settimana precedente :", + "calories": "Calorie", + "calibrate": "Calibra", + "no-summary-data": "Dati riassuntivi non disponibili", + "median-speed": "Velocità media", + "equals-cookies": "pari a {cookies, plural, =0{0 biscotti} one {1 biscotto} other {# biscotti}}", + "equals-icecream": "pari a {icecream, plural, =0{0 gelati alla vaniglia} one {1 gelato alla vaniglia} other {# gelati alla vaniglia}}", + "equals-bananas": "pari a {bananas, plural, =0{0 banane} one {1 banana} other {# banane}}" + }, + + "main-diary": "Diario", + + "main-heatmap": { + "title": "Heatmap", + "counts": "Conteggio", + "stress": "Stress", + "from": "Da :", + "to": "a :", + "get": "Vai !", + "all": "TUTTO", + "none": "NIENTE", + "bicycling": "BICI", + "walking": "A PIEDI", + "in-vehicle": "VEICOLO", + "select-travel-mode": "Seleziona una modalità", + "cancel": "Annula", + "tour-datepicker": "Questa mappa mostra i dati di tutti gli utenti. Scegli la data e filtra per ora e giorno della settimana. ", + "tour-mode": "Clicca qui per filtrare per mezzo di trasporto. Di default sono mostrati tutti i mezzi di trasporto.", + "tour-get": "Clicca qui per generare la mappa." + }, + + "details": { + "speed": "Velocità", + "time": "Durata", + "tour-detail-content": "Fai zoom il più possibile sulla posizione dell'incidente e clicca sulla linea blu per segnare un o un ", + "tour-sectionList-content": "Viaggi, orari e modalità", + "tour-sectionPct-content": "% del tempo per ogni modalità per questo viaggio" + }, + + "list-explainDraft-alert": "Questo viaggio non è stato ancora analizzato. Se questo stato permane contattare il proprio amministratore di sistema.", + "list-datepicker-today": "Oggi", + "list-datepicker-close": "Chiudi", + "list-datepicker-set": "Imposta", + "list-tour-datepicker-button": "Scegli il giorno da mostrare.", + "list-tour-diary-entry": "Clicca sulla mappa per vedere altri dettagli.", + "list-tour-map-fix-button": "Clicca qui per aggiornare la mappa.", + + "service": { + "reading-server": "Caricamento dal server...", + "reading-cache": "Caricamento dalla cache...", + "reading-unprocessed-data": "Lettura dati non processati..." + }, + + "post-trip-manual-incident-time": "Giorno e ora dell'incidente", + + "recent": { + "email-account-not-configured": "L'account email non è configurato.", + "email-account-mail-app": "Devi avere un account email configurato.", + "going-to-email": "Invio dei dati per email da {{parentDir}}/userCacheDB" + }, + + "consent": { + "button-accept": "Accetto", + "button-decline": "Rifiuto" + }, + + "updatecheck": { + "downloading-update": "Aggiornamento interfaccia utente", + "extracting-update": "Estrazione aggiornamento", + "done": "Aggiornamento completo. Ricarico...", + "download-new-ui": "Scaricare l'aggiornamento?", + "download-not-now": "Non adesso", + "download-apply": "Scarica" + } +} \ No newline at end of file diff --git a/www/img/cristina-matos-albers-c4sGBJkDrjg-unsplash 1.png b/www/img/cristina-matos-albers-c4sGBJkDrjg-unsplash 1.png new file mode 100644 index 000000000..efce7f123 Binary files /dev/null and b/www/img/cristina-matos-albers-c4sGBJkDrjg-unsplash 1.png differ diff --git a/www/img/daniel-roe-lpjb_UMOyx8-unsplash 1.png b/www/img/daniel-roe-lpjb_UMOyx8-unsplash 1.png new file mode 100644 index 000000000..e73eb76bd Binary files /dev/null and b/www/img/daniel-roe-lpjb_UMOyx8-unsplash 1.png differ diff --git a/www/img/icons/Line 10.png b/www/img/icons/Line 10.png new file mode 100644 index 000000000..b6f513bf6 Binary files /dev/null and b/www/img/icons/Line 10.png differ diff --git a/www/img/icons/Vector.png b/www/img/icons/Vector.png new file mode 100644 index 000000000..5f33f5a14 Binary files /dev/null and b/www/img/icons/Vector.png differ diff --git a/www/img/icons/dashboard_black_24dp.svg b/www/img/icons/dashboard_black_24dp.svg new file mode 100644 index 000000000..24d0d021c --- /dev/null +++ b/www/img/icons/dashboard_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/directions_bike_black_24dp.svg b/www/img/icons/directions_bike_black_24dp.svg new file mode 100644 index 000000000..b30a4c17b --- /dev/null +++ b/www/img/icons/directions_bike_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/directions_bus_black_24dp 1.png b/www/img/icons/directions_bus_black_24dp 1.png new file mode 100644 index 000000000..d752d3557 Binary files /dev/null and b/www/img/icons/directions_bus_black_24dp 1.png differ diff --git a/www/img/icons/directions_bus_black_24dp.svg b/www/img/icons/directions_bus_black_24dp.svg new file mode 100644 index 000000000..0b0d5552c --- /dev/null +++ b/www/img/icons/directions_bus_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/directions_car_black_24dp 1.png b/www/img/icons/directions_car_black_24dp 1.png new file mode 100644 index 000000000..80daa590e Binary files /dev/null and b/www/img/icons/directions_car_black_24dp 1.png differ diff --git a/www/img/icons/directions_car_black_24dp.svg b/www/img/icons/directions_car_black_24dp.svg new file mode 100644 index 000000000..c49e784ed --- /dev/null +++ b/www/img/icons/directions_car_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/directions_walk_black_24dp 1.png b/www/img/icons/directions_walk_black_24dp 1.png new file mode 100644 index 000000000..ec0274964 Binary files /dev/null and b/www/img/icons/directions_walk_black_24dp 1.png differ diff --git a/www/img/icons/directions_walk_black_24dp.svg b/www/img/icons/directions_walk_black_24dp.svg new file mode 100644 index 000000000..560568414 --- /dev/null +++ b/www/img/icons/directions_walk_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/flag_black_24dp 1.png b/www/img/icons/flag_black_24dp 1.png new file mode 100644 index 000000000..75020db0c Binary files /dev/null and b/www/img/icons/flag_black_24dp 1.png differ diff --git a/www/img/icons/flag_black_24dp.svg b/www/img/icons/flag_black_24dp.svg new file mode 100644 index 000000000..ad5336af5 --- /dev/null +++ b/www/img/icons/flag_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/help_outline_black_24dp 1.png b/www/img/icons/help_outline_black_24dp 1.png new file mode 100644 index 000000000..d8cd47cba Binary files /dev/null and b/www/img/icons/help_outline_black_24dp 1.png differ diff --git a/www/img/icons/help_outline_black_24dp.svg b/www/img/icons/help_outline_black_24dp.svg new file mode 100644 index 000000000..44e29cdc4 --- /dev/null +++ b/www/img/icons/help_outline_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/mode_edit_black_24dp 1.png b/www/img/icons/mode_edit_black_24dp 1.png new file mode 100644 index 000000000..7181f0b8d Binary files /dev/null and b/www/img/icons/mode_edit_black_24dp 1.png differ diff --git a/www/img/icons/mode_edit_black_24dp.svg b/www/img/icons/mode_edit_black_24dp.svg new file mode 100644 index 000000000..f66588b53 --- /dev/null +++ b/www/img/icons/mode_edit_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/mode_of_travel_black_24dp 1.png b/www/img/icons/mode_of_travel_black_24dp 1.png new file mode 100644 index 000000000..ae66cbf90 Binary files /dev/null and b/www/img/icons/mode_of_travel_black_24dp 1.png differ diff --git a/www/img/icons/mode_of_travel_black_24dp.svg b/www/img/icons/mode_of_travel_black_24dp.svg new file mode 100644 index 000000000..fdc5a1776 --- /dev/null +++ b/www/img/icons/mode_of_travel_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/navigate_next_black_24dp 2.png b/www/img/icons/navigate_next_black_24dp 2.png new file mode 100644 index 000000000..672dbd27e Binary files /dev/null and b/www/img/icons/navigate_next_black_24dp 2.png differ diff --git a/www/img/icons/navigate_next_black_24dp 3.png b/www/img/icons/navigate_next_black_24dp 3.png new file mode 100644 index 000000000..232f1da9f Binary files /dev/null and b/www/img/icons/navigate_next_black_24dp 3.png differ diff --git a/www/img/icons/navigate_next_black_24dp.svg b/www/img/icons/navigate_next_black_24dp.svg new file mode 100644 index 000000000..2b7b602de --- /dev/null +++ b/www/img/icons/navigate_next_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/noun_leaf_3501175 3.png b/www/img/icons/noun_leaf_3501175 3.png new file mode 100644 index 000000000..2feb6bb7f Binary files /dev/null and b/www/img/icons/noun_leaf_3501175 3.png differ diff --git a/www/img/icons/person_outline_black_24dp.png b/www/img/icons/person_outline_black_24dp.png new file mode 100644 index 000000000..905ffb9b2 Binary files /dev/null and b/www/img/icons/person_outline_black_24dp.png differ diff --git a/www/img/icons/person_outline_black_24dp.svg b/www/img/icons/person_outline_black_24dp.svg new file mode 100644 index 000000000..eed53273f --- /dev/null +++ b/www/img/icons/person_outline_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/place_black_24dp 1.png b/www/img/icons/place_black_24dp 1.png new file mode 100644 index 000000000..c29fd7fac Binary files /dev/null and b/www/img/icons/place_black_24dp 1.png differ diff --git a/www/img/icons/place_black_24dp.svg b/www/img/icons/place_black_24dp.svg new file mode 100644 index 000000000..630fbdd4c --- /dev/null +++ b/www/img/icons/place_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/restart_alt_black_24dp 1.png b/www/img/icons/restart_alt_black_24dp 1.png new file mode 100644 index 000000000..82a98c25e Binary files /dev/null and b/www/img/icons/restart_alt_black_24dp 1.png differ diff --git a/www/img/icons/restart_alt_black_24dp.svg b/www/img/icons/restart_alt_black_24dp.svg new file mode 100644 index 000000000..5961fe822 --- /dev/null +++ b/www/img/icons/restart_alt_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/signal_cellular_alt_black_24dp 1.png b/www/img/icons/signal_cellular_alt_black_24dp 1.png new file mode 100644 index 000000000..ad2a5e3ea Binary files /dev/null and b/www/img/icons/signal_cellular_alt_black_24dp 1.png differ diff --git a/www/img/icons/signal_cellular_alt_black_24dp.svg b/www/img/icons/signal_cellular_alt_black_24dp.svg new file mode 100644 index 000000000..cd8e229ae --- /dev/null +++ b/www/img/icons/signal_cellular_alt_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/start_black_24dp.svg b/www/img/icons/start_black_24dp.svg new file mode 100644 index 000000000..57cfaf304 --- /dev/null +++ b/www/img/icons/start_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/swipe_left_alt_black_24dp.svg b/www/img/icons/swipe_left_alt_black_24dp.svg new file mode 100644 index 000000000..21af0625d --- /dev/null +++ b/www/img/icons/swipe_left_alt_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/train_black_24dp 1.png b/www/img/icons/train_black_24dp 1.png new file mode 100644 index 000000000..9e7d7364a Binary files /dev/null and b/www/img/icons/train_black_24dp 1.png differ diff --git a/www/img/icons/train_black_24dp.svg b/www/img/icons/train_black_24dp.svg new file mode 100644 index 000000000..739fea2b6 --- /dev/null +++ b/www/img/icons/train_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/upgrade_black_24dp.svg b/www/img/icons/upgrade_black_24dp.svg new file mode 100644 index 000000000..96e7c08ba --- /dev/null +++ b/www/img/icons/upgrade_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/whatshot_black_24dp 1.png b/www/img/icons/whatshot_black_24dp 1.png new file mode 100644 index 000000000..b4be3bf59 Binary files /dev/null and b/www/img/icons/whatshot_black_24dp 1.png differ diff --git a/www/img/icons/whatshot_black_24dp.svg b/www/img/icons/whatshot_black_24dp.svg new file mode 100644 index 000000000..7f6d36a3c --- /dev/null +++ b/www/img/icons/whatshot_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/icons/wifi_black_24dp 1.png b/www/img/icons/wifi_black_24dp 1.png new file mode 100644 index 000000000..14c71bad5 Binary files /dev/null and b/www/img/icons/wifi_black_24dp 1.png differ diff --git a/www/img/icons/wifi_black_24dp.svg b/www/img/icons/wifi_black_24dp.svg new file mode 100644 index 000000000..2483749a4 --- /dev/null +++ b/www/img/icons/wifi_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/img/intro/splash_screen_logo.png b/www/img/intro/splash_screen_logo.png index ffabdd377..c8974c4d1 100644 Binary files a/www/img/intro/splash_screen_logo.png and b/www/img/intro/splash_screen_logo.png differ diff --git a/www/img/ricardo-gomez-angel-_7favoo7jy8-unsplash 1.png b/www/img/ricardo-gomez-angel-_7favoo7jy8-unsplash 1.png new file mode 100644 index 000000000..58518783a Binary files /dev/null and b/www/img/ricardo-gomez-angel-_7favoo7jy8-unsplash 1.png differ diff --git a/www/index.html b/www/index.html index 994794346..91d8a4e02 100644 --- a/www/index.html +++ b/www/index.html @@ -1,75 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -100,6 +99,8 @@ + + @@ -139,29 +140,30 @@ - + - - - - - - - + + + + + + + - - - - - - - - - + + + diff --git a/www/js/app.js b/www/js/app.js index 402244fc6..f9226e4e8 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -17,9 +17,6 @@ angular.module('emission', ['ionic', .run(function($ionicPlatform, $rootScope, $http, Logger, CustomURLScheme, ReferralHandler, UpdateCheck) { console.log("Starting run"); - // ensure that plugin events are delivered after the ionicPlatform is ready - // https://github.com/katzer/cordova-plugin-local-notifications#launch-details - window.skipLocalNotificationReady = true; // alert("Starting run"); // BEGIN: Global listeners, no need to wait for the platform // TODO: Although the onLaunch call doesn't need to wait for the platform the @@ -116,19 +113,26 @@ angular.module('emission', ['ionic', // Define where we can find the .json and the fallback language $translateProvider - .fallbackLanguage('en') - .registerAvailableLanguageKeys(['en', 'fr', 'it', 'es'], { + .fallbackLanguage('fr') + + .registerAvailableLanguageKeys(['en', 'fr'], { 'en_*': 'en', 'fr_*': 'fr', - 'it_*': 'it', - 'es_*': 'es', '*': 'en' }) .determinePreferredLanguage() .useStaticFilesLoader({ prefix: 'i18n/', suffix: '.json' - }); + }) + .useLocalStorage(); console.log("Ending config"); + + + // Tell the module what language to use by default + // $translateProvider.preferredLanguage('en'); + + // Tell the module to store the language in the cookie + // $translateProvider.useCookieStorage(); }); diff --git a/www/js/appstatus/permissioncheck.js b/www/js/appstatus/permissioncheck.js index dfe136343..078e85ed8 100644 --- a/www/js/appstatus/permissioncheck.js +++ b/www/js/appstatus/permissioncheck.js @@ -3,7 +3,7 @@ */ angular.module('emission.appstatus.permissioncheck', - []) + ['emission.i18n.utils',]) .directive('permissioncheck', function() { return { scope: { diff --git a/www/js/common/trip-detail.js b/www/js/common/trip-detail.js index 084e4fad1..fdc0b8a43 100644 --- a/www/js/common/trip-detail.js +++ b/www/js/common/trip-detail.js @@ -46,7 +46,7 @@ angular.module('emission.main.common.trip-detail',['ui-leaflet', chart1.yAxis.tickFormat(d3.format('s')); chart1.yAxis.axisLabel('Number of trips'); - chart1.barColor(["#01D0A7"]); + chart1.barColor(["#1123CB"]); chart1.width(350); chart1.height(valsStartHour.length * 35 + 80); // Just come up with a way to adjust bar width chart1.showValues(true); diff --git a/www/js/control/general-settings.js b/www/js/control/general-settings.js index 3c199edb1..395f77db1 100644 --- a/www/js/control/general-settings.js +++ b/www/js/control/general-settings.js @@ -1,280 +1,348 @@ -'use strict'; - -angular.module('emission.main.control',['emission.services', - 'emission.i18n.utils', - 'emission.main.control.collection', - 'emission.main.control.sync', - 'emission.main.control.tnotify', - 'ionic-datepicker', - 'ionic-datepicker.provider', - 'emission.splash.startprefs', - 'emission.splash.updatecheck', - 'emission.main.metrics.factory', - 'emission.stats.clientstats', - 'emission.plugin.kvstore', - 'emission.survey.enketo.demographics', - 'emission.plugin.logger', - 'monospaced.qrcode']) - -.controller('ControlCtrl', function($scope, $window, $ionicScrollDelegate, - $ionicPlatform, - $state, $ionicPopup, $ionicActionSheet, $ionicPopover, - $ionicModal, $stateParams, - $rootScope, KVStore, ionicDatePicker, - StartPrefs, ControlHelper, EmailHelper, UploadHelper, - ControlCollectionHelper, ControlSyncHelper, - ControlTransitionNotifyHelper, - CarbonDatasetHelper, - UpdateCheck, i18nUtils, - CalorieCal, ClientStats, CommHelper, Logger, - $translate) { - - console.log("controller ControlCtrl called without params"); - - var datepickerObject = { - todayLabel: $translate.instant('list-datepicker-today'), //Optional - closeLabel: $translate.instant('list-datepicker-close'), //Optional - setLabel: $translate.instant('list-datepicker-set'), //Optional - monthsList: moment.monthsShort(), - weeksList: moment.weekdaysMin(), - titleLabel: $translate.instant('general-settings.choose-date'), - setButtonType : 'button-positive', //Optional - todayButtonType : 'button-stable', //Optional - closeButtonType : 'button-stable', //Optional - inputDate: moment().subtract(1, 'week').toDate(), //Optional - from: new Date(2015, 1, 1), - to: new Date(), - mondayFirst: true, //Optional - templateType: 'popup', //Optional - showTodayButton: 'true', //Optional - modalHeaderColor: 'bar-positive', //Optional - modalFooterColor: 'bar-positive', //Optional - callback: ControlHelper.getMyData, //Mandatory - dateFormat: 'dd MMM yyyy', //Optional - closeOnSelect: true //Optional - } - - $scope.overallAppStatus = false; - - $ionicModal.fromTemplateUrl('templates/control/app-status-modal.html', { - scope: $scope - }).then(function(modal) { - $scope.appStatusModal = modal; - if ($stateParams.launchAppStatusModal == true) { - $scope.$broadcast("recomputeAppStatus"); - $scope.appStatusModal.show(); - } - }); +"use strict"; + +angular + .module("emission.main.control", [ + "emission.services", + "emission.i18n.utils", + "emission.main.control.collection", + "emission.main.control.sync", + "emission.main.control.tnotify", + "ionic-datepicker", + "ionic-datepicker.provider", + "emission.splash.startprefs", + "emission.splash.updatecheck", + "emission.main.metrics.factory", + "emission.stats.clientstats", + "emission.plugin.kvstore", + "emission.plugin.logger", + ]) + + .controller( + "ControlCtrl", + function ( + $scope, + $window, + $ionicScrollDelegate, + $ionicPlatform, + $state, + $ionicPopup, + $ionicActionSheet, + $ionicPopover, + $ionicModal, + $rootScope, + KVStore, + ionicDatePicker, + StartPrefs, + ControlHelper, + EmailHelper, + UploadHelper, + ControlCollectionHelper, + ControlSyncHelper, + ControlTransitionNotifyHelper, + CarbonDatasetHelper, + UpdateCheck, + i18nUtils, + CalorieCal, + ClientStats, + CommHelper, + Logger, + $translate, + ) { + var datepickerObject = { + todayLabel: $translate.instant("list-datepicker-today"), //Optional + closeLabel: $translate.instant("list-datepicker-close"), //Optional + setLabel: $translate.instant("list-datepicker-set"), //Optional + monthsList: moment.monthsShort(), + weeksList: moment.weekdaysMin(), + titleLabel: $translate.instant("general-settings.choose-date"), + setButtonType: "button-positive", //Optional + todayButtonType: "button-stable", //Optional + closeButtonType: "button-stable", //Optional + inputDate: moment().subtract(1, "week").toDate(), //Optional + from: new Date(2015, 1, 1), + to: new Date(), + mondayFirst: true, //Optional + templateType: "popup", //Optional + showTodayButton: "true", //Optional + modalHeaderColor: "bar-positive", //Optional + modalFooterColor: "bar-positive", //Optional + callback: ControlHelper.getMyData, //Mandatory + dateFormat: "dd MMM yyyy", //Optional + closeOnSelect: true, //Optional + }; + + $scope.overallAppStatus = false; + + $ionicModal.fromTemplateUrl('templates/control/app-status-modal.html', { + scope: $scope + }).then(function(modal) { + $scope.appStatusModal = modal; + if ($stateParams.launchAppStatusModal == true) { + $scope.$broadcast("recomputeAppStatus"); + $scope.appStatusModal.show(); + } + }); - $scope.openDatePicker = function(){ - ionicDatePicker.openDatePicker(datepickerObject); - }; + $scope.openDatePicker = function () { + ionicDatePicker.openDatePicker(datepickerObject); + }; - $scope.carbonDatasetString = $translate.instant('general-settings.carbon-dataset') + ": " + CarbonDatasetHelper.getCurrentCarbonDatasetCode(); + $scope.carbonDatasetString = + $translate.instant("general-settings.carbon-dataset") + + ": " + + CarbonDatasetHelper.getCurrentCarbonDatasetCode(); - $scope.uploadLog = function () { - UploadHelper.uploadFile("loggerDB") - }; + $scope.uploadLog = function () { + UploadHelper.uploadFile("loggerDB"); + }; - $scope.emailLog = function () { + $scope.emailLog = function () { // Passing true, we want to send logs - EmailHelper.sendEmail("loggerDB") - }; + EmailHelper.sendEmail("loggerDB"); + }; - $scope.viewPrivacyPolicy = function($event) { + $scope.viewPrivacyPolicy = function ($event) { // button -> list element -> scroll // const targetEl = $event.currentTarget.parentElement.parentElement; if ($scope.ppp) { - $scope.ppp.show($event); + $scope.ppp.show($event); } else { - i18nUtils.geti18nFileName("templates/", "intro/consent-text", ".html").then((consentFileName) => { - $scope.consentTextFile = consentFileName; - $ionicPopover.fromTemplateUrl("templates/control/main-consent.html", {scope: $scope}).then((p) => { - $scope.ppp = p; - $scope.ppp.show($event); + i18nUtils + .geti18nFileName("templates/", "intro/consent-text", ".html") + .then((consentFileName) => { + $scope.consentTextFile = consentFileName; + $ionicPopover + .fromTemplateUrl("templates/control/main-consent.html", { + scope: $scope, + }) + .then((p) => { + $scope.ppp = p; + $scope.ppp.show($event); }); - }).catch((err) => Logger.displayError("Error while displaying privacy policy", err)); - } - } - - $scope.viewQRCode = function($event) { - $scope.tokenURL = "emission://login_token?token="+$scope.settings.auth.email; - if ($scope.qrp) { - $scope.qrp.show($event); - } else { - $ionicPopover.fromTemplateUrl("templates/control/qrc.html", {scope: $scope}).then((q) => { - $scope.qrp = q; - $scope.qrp.show($event); - }).catch((err) => Logger.displayError("Error while displaying QR Code", err)); + }) + .catch((err) => + Logger.displayError("Error while displaying privacy policy", err) + ); } - } + }; - $scope.fixAppStatus = function() { - $scope.$broadcast("recomputeAppStatus"); - $scope.appStatusModal.show(); - } + $scope.fixAppStatus = function() { + $scope.$broadcast("recomputeAppStatus"); + $scope.appStatusModal.show(); + } - $scope.appStatusChecked = function() { - // Hardcoded value so we can publish the hacky version today and then debug/fix the - // infinite loop around waiting_for_trip_start -> tracking_error - $window.cordova.plugins.notification.local.clearAll(); - $scope.appStatusModal.hide(); - } + $scope.appStatusChecked = function() { + // Hardcoded value so we can publish the hacky version today and then debug/fix the + // infinite loop around waiting_for_trip_start -> tracking_error + $window.cordova.plugins.notification.local.clearAll(); + $scope.appStatusModal.hide(); + } - $scope.userData = [] - $scope.getUserData = function() { - return CalorieCal.get().then(function(userDataFromStorage) { - $scope.rawUserData = userDataFromStorage; - if ($scope.userDataSaved()) { - $scope.userData = [] + $scope.deleteMyData = function ($event) { + const url = + "https://fabmobqc.ca/nos-donnees-en-mobilite/ma-mobilite/ma-mobilite-suppression-des-donnees/"; + const options = "location=yes,clearcache=no,toolbar=yes,hideurlbar=yes"; + $window.cordova.InAppBrowser.open(url, "_blank", options); + }; + + $scope.leaveComment = function ($event) { + const url = + "https://fabmobqc.ca/nos-donnees-en-mobilite/ma-mobilite/ma-mobilite-nous-contacter/"; + const options = "location=yes,clearcache=no,toolbar=yes,hideurlbar=yes"; + $window.cordova.InAppBrowser.open(url, "_blank", options); + }; + + $scope.userData = []; + $scope.getUserData = function () { + return CalorieCal.get().then(function (userDataFromStorage) { + $scope.rawUserData = userDataFromStorage; + if ($scope.userDataSaved()) { + $scope.userData = []; var height = userDataFromStorage.height.toString(); var weight = userDataFromStorage.weight.toString(); - var temp = { - age: userDataFromStorage.age, - height: height + (userDataFromStorage.heightUnit == 1? ' cm' : ' ft'), - weight: weight + (userDataFromStorage.weightUnit == 1? ' kg' : ' lb'), - gender: userDataFromStorage.gender == 1? $translate.instant('gender-male') : $translate.instant('gender-female') - } + var temp = { + age: userDataFromStorage.age, + height: + height + (userDataFromStorage.heightUnit == 1 ? " cm" : " ft"), + weight: + weight + (userDataFromStorage.weightUnit == 1 ? " kg" : " lb"), + gender: + userDataFromStorage.gender == 1 + ? $translate.instant("gender-male") + : $translate.instant("gender-female"), + }; for (var i in temp) { - $scope.userData.push({key: i, value: temp[i]}); + $scope.userData.push({ key: i, value: temp[i] }); } - } + } }); - } - - $scope.userDataSaved = function() { - if (angular.isDefined($scope.rawUserData) && $scope.rawUserData != null) { - return $scope.rawUserData.userDataSaved; + }; + + $scope.userDataSaved = function () { + if ( + angular.isDefined($scope.rawUserData) && + $scope.rawUserData != null + ) { + return $scope.rawUserData.userDataSaved; } else { - return false; + return false; } - } - $ionicPlatform.ready().then(function() { + }; + $ionicPlatform.ready().then(function () { $scope.refreshScreen(); - }); - $scope.getLowAccuracy = function() { + }); + $scope.getLowAccuracy = function () { // return true: toggle on; return false: toggle off. var isMediumAccuracy = ControlCollectionHelper.isMediumAccuracy(); if (!angular.isDefined(isMediumAccuracy)) { - // config not loaded when loading ui, set default as false - // TODO: Read the value if it is not defined. - // Otherwise, don't we have a race with reading? - // we don't really $apply on this field... - return false; + // config not loaded when loading ui, set default as false + // TODO: Read the value if it is not defined. + // Otherwise, don't we have a race with reading? + // we don't really $apply on this field... + return false; } else { - return isMediumAccuracy; + return isMediumAccuracy; } - } - $scope.toggleLowAccuracy = ControlCollectionHelper.toggleLowAccuracy; - - $scope.getConnectURL = function() { - ControlHelper.getSettings().then(function(response) { - $scope.$apply(function() { - $scope.settings.connect.url = response.connectUrl; - console.log(response); + }; + $scope.toggleLowAccuracy = ControlCollectionHelper.toggleLowAccuracy; + + $scope.getConnectURL = function () { + ControlHelper.getSettings().then( + function (response) { + $scope.$apply(function () { + $scope.settings.connect.url = response.connectUrl; + console.log(response); }); - }, function(error) { + }, + function (error) { console.log("While getting connect Url :" + error); + } + ); + }; + + $scope.getCollectionSettings = function () { + ControlCollectionHelper.getCollectionSettings().then(function ( + showConfig + ) { + $scope.$apply(function () { + $scope.settings.collect.show_config = showConfig; + }); }); - }; - - $scope.getCollectionSettings = function() { - ControlCollectionHelper.getCollectionSettings().then(function(showConfig) { - $scope.$apply(function() { - $scope.settings.collect.show_config = showConfig; - }) - }); - }; + }; - $scope.getSyncSettings = function() { - ControlSyncHelper.getSyncSettings().then(function(showConfig) { - $scope.$apply(function() { - $scope.settings.sync.show_config = showConfig; - }) + $scope.getSyncSettings = function () { + ControlSyncHelper.getSyncSettings().then(function (showConfig) { + $scope.$apply(function () { + $scope.settings.sync.show_config = showConfig; + }); }); - }; - - $scope.getTNotifySettings = function() { - ControlTransitionNotifyHelper.getTNotifySettings().then(function(showConfig) { - $scope.$apply(function() { - $scope.settings.tnotify.show_config = showConfig; - }) + }; + + $scope.getTNotifySettings = function () { + ControlTransitionNotifyHelper.getTNotifySettings().then(function ( + showConfig + ) { + $scope.$apply(function () { + $scope.settings.tnotify.show_config = showConfig; + }); }); - }; - - $scope.getEmail = function() { - ControlHelper.getUserEmail().then(function(response) { - console.log("user email = "+response); - $scope.$apply(function() { - if (response == null) { - $scope.settings.auth.email = "Not logged in"; - } else { - $scope.settings.auth.email = response; - } + }; + + $scope.getEmail = function () { + ControlHelper.getUserEmail().then( + function (response) { + console.log("user email = " + response); + $scope.$apply(function () { + if (response == null) { + $scope.settings.auth.email = "Not logged in"; + } else { + $scope.settings.auth.email = response; + } }); - }, function(error) { - $ionicPopup.alert("while getting email, "+error); - }); - }; - $scope.showLog = function() { + }, + function (error) { + $ionicPopup.alert("while getting email, " + error); + } + ); + }; + $scope.showLog = function () { $state.go("root.main.log"); - } - $scope.showSensed = function() { + }; + $scope.showSensed = function () { $state.go("root.main.sensed"); - } - $scope.showMap = function() { + }; + $scope.showMap = function () { $state.go("root.main.map"); - } - $scope.getState = function() { - return ControlCollectionHelper.getState().then(function(response) { - $scope.$apply(function() { - $scope.settings.collect.state = response; + }; + $scope.getState = function () { + return ControlCollectionHelper.getState().then( + function (response) { + $scope.$apply(function () { + $scope.settings.collect.state = response; }); return response; - }, function(error) { - $ionicPopup.alert("while getting current state, "+error); - }); - }; - - var clearUsercache = function() { - $ionicPopup.alert({template: "WATCH OUT! If there is unsynced data, you may lose it. If you want to keep the data, use 'Force Sync' before doing this"}) - .then(function(result) { + }, + function (error) { + $ionicPopup.alert("while getting current state, " + error); + } + ); + }; + + var clearUsercache = function () { + $ionicPopup + .alert({ + template: + "WATCH OUT! If there is unsynced data, you may lose it. If you want to keep the data, use 'Force Sync' before doing this", + }) + .then(function (result) { if (result) { - window.cordova.plugins.BEMUserCache.clearAll() - .then(function(result) { - $scope.$apply(function() { - $ionicPopup.alert({template: 'success -> '+result}); - }); - }, function(error) { - $scope.$apply(function() { - $ionicPopup.alert({template: 'error -> '+error}); - }); - }); + window.cordova.plugins.BEMUserCache.clearAll().then( + function (result) { + $scope.$apply(function () { + $ionicPopup.alert({ template: "success -> " + result }); + }); + }, + function (error) { + $scope.$apply(function () { + $ionicPopup.alert({ template: "error -> " + error }); + }); + } + ); } - }); - } - - $scope.nukeUserCache = function() { - var nukeChoiceActions = [{text: $translate.instant('general-settings.nuke-ui-state-only'), - action: KVStore.clearOnlyLocal}, - {text: $translate.instant('general-settings.nuke-native-cache-only'), - action: KVStore.clearOnlyNative}, - {text: $translate.instant('general-settings.nuke-everything'), - action: KVStore.clearAll}]; + }); + }; + + $scope.nukeUserCache = function () { + var nukeChoiceActions = [ + { + text: $translate.instant("general-settings.nuke-ui-state-only"), + action: KVStore.clearOnlyLocal, + }, + { + text: $translate.instant("general-settings.nuke-native-cache-only"), + action: KVStore.clearOnlyNative, + }, + { + text: $translate.instant("general-settings.nuke-everything"), + action: KVStore.clearAll, + }, + ]; $ionicActionSheet.show({ - titleText: $translate.instant('general-settings.clear-data'), - cancelText: $translate.instant('general-settings.cancel'), - buttons: nukeChoiceActions, - buttonClicked: function(index, button) { - button.action(); - return true; - } + titleText: $translate.instant("general-settings.clear-data"), + cancelText: $translate.instant("general-settings.cancel"), + buttons: nukeChoiceActions, + buttonClicked: function (index, button) { + button.action(); + return true; + }, }); - } + }; - $scope.testTripEndNotify = function() { - $ionicPopup.alert({template: 'test for local notification 0.9.0-beta.3+ only'}); + $scope.testTripEndNotify = function () { + $ionicPopup.alert({ + template: "test for local notification 0.9.0-beta.3+ only", + }); /* var testCfg = { id: 737678, @@ -301,41 +369,39 @@ angular.module('emission.main.control',['emission.services', }]); $window.cordova.plugins.notification.local.schedule(testCfg); */ - } + }; - $scope.invalidateCache = function() { - window.cordova.plugins.BEMUserCache.invalidateAllCache().then(function(result) { - $scope.$apply(function() { - $ionicPopup.alert({template: 'success -> '+result}); + $scope.invalidateCache = function () { + window.cordova.plugins.BEMUserCache.invalidateAllCache().then( + function (result) { + $scope.$apply(function () { + $ionicPopup.alert({ template: "success -> " + result }); }); - }, function(error) { - $scope.$apply(function() { - $ionicPopup.alert({template: 'error -> '+error}); + }, + function (error) { + $scope.$apply(function () { + $ionicPopup.alert({ template: "error -> " + error }); }); - }); - } + } + ); + }; - $scope.$on('$ionicView.afterEnter', function() { - console.log("afterEnter called with stateparams", $stateParams); - $ionicPlatform.ready().then(function() { - $scope.refreshScreen(); - if ($stateParams.launchAppStatusModal == true) { - $scope.$broadcast("recomputeAppStatus"); - $scope.appStatusModal.show(); - } + $scope.$on("$ionicView.afterEnter", function () { + $ionicPlatform.ready().then(function () { + $scope.refreshScreen(); }); - }) + }); - // Execute action on hidden popover - $scope.$on('control.update.complete', function() { + // Execute action on hidden popover + $scope.$on("control.update.complete", function () { $scope.refreshScreen(); - }); + }); - $scope.$on('popover.hidden', function() { + $scope.$on("popover.hidden", function () { $scope.refreshScreen(); - }); + }); - $scope.refreshScreen = function() { + $scope.refreshScreen = function () { console.log("Refreshing screen"); $scope.settings = {}; $scope.settings.collect = {}; @@ -343,315 +409,411 @@ angular.module('emission.main.control',['emission.services', $scope.settings.tnotify = {}; $scope.settings.auth = {}; $scope.settings.connect = {}; - $scope.settings.channel = function(newName) { - return arguments.length ? (UpdateCheck.setChannel(newName)) : $scope.settings.storedChannel; + $scope.settings.channel = function (newName) { + return arguments.length + ? UpdateCheck.setChannel(newName) + : $scope.settings.storedChannel; }; - UpdateCheck.getChannel().then(function(retVal) { - $scope.$apply(function() { - $scope.settings.storedChannel = retVal; - }); + UpdateCheck.getChannel().then(function (retVal) { + $scope.$apply(function () { + $scope.settings.storedChannel = retVal; + }); }); $scope.getConnectURL(); $scope.getCollectionSettings(); $scope.getSyncSettings(); $scope.getTNotifySettings(); $scope.getEmail(); - $scope.getState().then($scope.isTrackingOn).then(function(isTracking) { - $scope.$apply(function() { - console.log("Setting settings.collect.trackingOn = "+isTracking); - $scope.settings.collect.trackingOn = isTracking; + $scope + .getState() + .then($scope.isTrackingOn) + .then(function (isTracking) { + $scope.$apply(function () { + console.log( + "Setting settings.collect.trackingOn = " + isTracking + ); + $scope.settings.collect.trackingOn = isTracking; }); - }); + }); $scope.getUserData(); - }; - - $scope.returnToIntro = function() { - var testReconsent = false - if (testReconsent) { - $rootScope.req_consent.approval_date = Math.random(); - StartPrefs.loadPreferredScreen(); - } else { - $state.go("root.intro"); - } - }; + }; - var getStartTransitionKey = function() { - if($scope.isAndroid()) { - return "local.transition.exited_geofence"; - } - else if($scope.isIOS()) { - return "T_EXITED_GEOFENCE"; + $scope.returnToIntro = function () { + var testReconsent = false; + if (testReconsent) { + $rootScope.req_consent.approval_date = Math.random(); + StartPrefs.loadPreferredScreen(); + } else { + $state.go("root.intro"); } - } + }; - var getEndTransitionKey = function() { - if($scope.isAndroid()) { - return "local.transition.stopped_moving"; - } - else if($scope.isIOS()) { - return "T_TRIP_ENDED"; + var getStartTransitionKey = function () { + if ($scope.isAndroid()) { + return "local.transition.exited_geofence"; + } else if ($scope.isIOS()) { + return "T_EXITED_GEOFENCE"; } - } + }; - var getOngoingTransitionState = function() { - if($scope.isAndroid()) { - return "local.state.ongoing_trip"; + var getEndTransitionKey = function () { + if ($scope.isAndroid()) { + return "local.transition.stopped_moving"; + } else if ($scope.isIOS()) { + return "T_TRIP_ENDED"; } - else if($scope.isIOS()) { - return "STATE_ONGOING_TRIP"; + }; + + var getOngoingTransitionState = function () { + if ($scope.isAndroid()) { + return "local.state.ongoing_trip"; + } else if ($scope.isIOS()) { + return "STATE_ONGOING_TRIP"; } - } + }; - $scope.forceSync = function() { + $scope.forceSync = function () { ClientStats.addEvent(ClientStats.getStatKeys().BUTTON_FORCE_SYNC).then( - function() { - console.log("Added "+ClientStats.getStatKeys().BUTTON_FORCE_SYNC+" event"); - }); - ControlSyncHelper.forceSync().then(function() { + function () { + console.log( + "Added " + ClientStats.getStatKeys().BUTTON_FORCE_SYNC + " event" + ); + } + ); + ControlSyncHelper.forceSync() + .then(function () { /* * Change to sensorKey to "background/location" after fixing issues * with getLastSensorData and getLastMessages in the usercache * See https://github.com/e-mission/e-mission-phone/issues/279 for details */ var sensorKey = "statemachine/transition"; - return window.cordova.plugins.BEMUserCache.getAllMessages(sensorKey, true); - }).then(function(sensorDataList) { - Logger.log("sensorDataList = "+JSON.stringify(sensorDataList)); + return window.cordova.plugins.BEMUserCache.getAllMessages( + sensorKey, + true + ); + }) + .then(function (sensorDataList) { + Logger.log("sensorDataList = " + JSON.stringify(sensorDataList)); // If everything has been pushed, we should // only have one entry for the battery, which is the one that was // inserted on the last successful push. - var isTripEnd = function(entry) { - if (entry.metadata.key == getEndTransitionKey()) { - return true; - } else { - return false; - } + var isTripEnd = function (entry) { + if (entry.metadata.key == getEndTransitionKey()) { + return true; + } else { + return false; + } }; var syncLaunchedCalls = sensorDataList.filter(isTripEnd); - var syncPending = (syncLaunchedCalls.length > 0); - Logger.log("sensorDataList.length = "+sensorDataList.length+ - ", syncLaunchedCalls.length = "+syncLaunchedCalls.length+ - ", syncPending? = "+syncPending); + var syncPending = syncLaunchedCalls.length > 0; + Logger.log( + "sensorDataList.length = " + + sensorDataList.length + + ", syncLaunchedCalls.length = " + + syncLaunchedCalls.length + + ", syncPending? = " + + syncPending + ); return syncPending; - }).then(function(syncPending) { - Logger.log("sync launched = "+syncPending); + }) + .then(function (syncPending) { + Logger.log("sync launched = " + syncPending); if (syncPending) { - Logger.log("data is pending, showing confirm dialog"); - $ionicPopup.confirm({template: 'data pending for push'}).then(function(res) { - if (res) { - $scope.forceSync(); - } else { - Logger.log("user refused to re-sync"); - } + Logger.log("data is pending, showing confirm dialog"); + $ionicPopup + .confirm({ template: "data pending for push" }) + .then(function (res) { + if (res) { + $scope.forceSync(); + } else { + Logger.log("user refused to re-sync"); + } }); } else { - $ionicPopup.alert({template: 'all data pushed!'}); + $ionicPopup.alert({ template: "all data pushed!" }); } - }).catch(function(error) { + }) + .catch(function (error) { Logger.displayError("Error while forcing sync", error); - }); - }; + }); + }; - var getTransition = function(transKey) { + var getTransition = function (transKey) { var entry_data = {}; - return $scope.getState().then(function(curr_state) { - entry_data.curr_state = curr_state; - if (transKey == getEndTransitionKey()) { - entry_data.curr_state = getOngoingTransitionState(); - } - entry_data.transition = transKey; - entry_data.ts = moment().unix(); - return entry_data; - }) - } + return $scope.getState().then(function (curr_state) { + entry_data.curr_state = curr_state; + if (transKey == getEndTransitionKey()) { + entry_data.curr_state = getOngoingTransitionState(); + } + entry_data.transition = transKey; + entry_data.ts = moment().unix(); + return entry_data; + }); + }; - $scope.endForceSync = function() { + $scope.endForceSync = function () { /* First, quickly start and end the trip. Let's listen to the promise * result for start so that we ensure ordering */ var sensorKey = "statemachine/transition"; - return getTransition(getStartTransitionKey()).then(function(entry_data) { - return window.cordova.plugins.BEMUserCache.putMessage(sensorKey, entry_data); - }).then(function() { - return getTransition(getEndTransitionKey()).then(function(entry_data) { - return window.cordova.plugins.BEMUserCache.putMessage(sensorKey, entry_data); - }) - }).then($scope.forceSync); - } - - $scope.forceState = ControlCollectionHelper.forceState; - $scope.editCollectionConfig = ControlCollectionHelper.editConfig; - $scope.editSyncConfig = ControlSyncHelper.editConfig; - $scope.editTNotifyConfig = ControlTransitionNotifyHelper.editConfig; + return getTransition(getStartTransitionKey()) + .then(function (entry_data) { + return window.cordova.plugins.BEMUserCache.putMessage( + sensorKey, + entry_data + ); + }) + .then(function () { + return getTransition(getEndTransitionKey()).then(function ( + entry_data + ) { + return window.cordova.plugins.BEMUserCache.putMessage( + sensorKey, + entry_data + ); + }); + }) + .then($scope.forceSync); + }; + $scope.forceState = ControlCollectionHelper.forceState; + $scope.editCollectionConfig = ControlCollectionHelper.editConfig; + $scope.editSyncConfig = ControlSyncHelper.editConfig; + $scope.editTNotifyConfig = ControlTransitionNotifyHelper.editConfig; - $scope.isAndroid = function() { + $scope.isAndroid = function () { return ionic.Platform.isAndroid(); - } + }; - $scope.isIOS = function() { + $scope.isIOS = function () { return ionic.Platform.isIOS(); - } + }; - $ionicPopover.fromTemplateUrl('templates/control/main-sync-settings.html', { - scope: $scope - }).then(function(popover) { - $scope.syncSettingsPopup = popover; - }); - $scope.isTrackingOn = function() { - return $ionicPlatform.ready().then(function() { - if($scope.isAndroid()){ - return $scope.settings.collect.state != "local.state.tracking_stopped"; - } else if ($scope.isIOS()) { - return $scope.settings.collect.state != "STATE_TRACKING_STOPPED"; - } + $ionicPopover + .fromTemplateUrl("templates/control/main-sync-settings.html", { + scope: $scope, + }) + .then(function (popover) { + $scope.syncSettingsPopup = popover; + }); + $scope.isTrackingOn = function () { + return $ionicPlatform.ready().then(function () { + if ($scope.isAndroid()) { + return ( + $scope.settings.collect.state != "local.state.tracking_stopped" + ); + } else if ($scope.isIOS()) { + return $scope.settings.collect.state != "STATE_TRACKING_STOPPED"; + } }); - }; - $scope.userStartStopTracking = function() { - if ($scope.settings.collect.trackingOn){ - return ControlCollectionHelper.forceTransition('STOP_TRACKING'); + }; + $scope.userStartStopTracking = function () { + if ($scope.settings.collect.trackingOn) { + return ControlCollectionHelper.forceTransition("STOP_TRACKING"); } else { - return ControlCollectionHelper.forceTransition('START_TRACKING'); + return ControlCollectionHelper.forceTransition("START_TRACKING"); } - } - $scope.getExpandButtonClass = function() { - return ($scope.expanded)? "icon ion-ios-arrow-up" : "icon ion-ios-arrow-down"; - } - $scope.getUserDataExpandButtonClass = function() { - return ($scope.dataExpanded)? "icon ion-ios-arrow-up" : "icon ion-ios-arrow-down"; - } - $scope.eraseUserData = function() { - CalorieCal.delete().then(function() { - $ionicPopup.alert({template: $translate.instant('general-settings.user-data-erased')}); + }; + $scope.getExpandButtonClass = function () { + return $scope.expanded + ? "icon ion-ios-arrow-up" + : "icon ion-ios-arrow-down"; + }; + $scope.getUserDataExpandButtonClass = function () { + return $scope.dataExpanded + ? "icon ion-ios-arrow-up" + : "icon ion-ios-arrow-down"; + }; + $scope.eraseUserData = function () { + CalorieCal.delete().then(function () { + $ionicPopup.alert({ + template: $translate.instant("general-settings.user-data-erased"), + }); }); - } - $scope.parseState = function(state) { + }; + $scope.parseState = function (state) { if (state) { - if($scope.isAndroid()){ - return state.substring(12); - } else if ($scope.isIOS()) { - return state.substring(6); - } + if ($scope.isAndroid()) { + return state.substring(12); + } else if ($scope.isIOS()) { + return state.substring(6); + } } - } - $scope.changeCarbonDataset = function() { + }; + $scope.changeCarbonDataset = function () { $ionicActionSheet.show({ buttons: CarbonDatasetHelper.getCarbonDatasetOptions(), - titleText: $translate.instant('general-settings.choose-dataset'), - cancelText: $translate.instant('general-settings.cancel'), - buttonClicked: function(index, button) { + titleText: $translate.instant("general-settings.choose-dataset"), + cancelText: $translate.instant("general-settings.cancel"), + buttonClicked: function (index, button) { console.log("changeCarbonDataset(): chose locale " + button.value); CarbonDatasetHelper.saveCurrentCarbonDatasetLocale(button.value); - $scope.carbonDatasetString = $translate.instant('general-settings.carbon-dataset') + ": " + CarbonDatasetHelper.getCurrentCarbonDatasetCode(); + $scope.carbonDatasetString = + $translate.instant("general-settings.carbon-dataset") + + ": " + + CarbonDatasetHelper.getCurrentCarbonDatasetCode(); return true; - } + }, }); - }; - $scope.expandDeveloperZone = function() { + }; + $scope.expandDeveloperZone = function () { if ($scope.collectionExpanded()) { - $scope.expanded = false; - $ionicScrollDelegate.resize(); - $ionicScrollDelegate.scrollTo(0, 0, true); - + $scope.expanded = false; + $ionicScrollDelegate.resize(); + $ionicScrollDelegate.scrollTo(0, 0, true); } else { - $scope.expanded = true; - $ionicScrollDelegate.resize(); - $ionicScrollDelegate.scrollTo(0, 1000, true); + $scope.expanded = true; + $ionicScrollDelegate.resize(); + $ionicScrollDelegate.scrollTo(0, 1000, true); } - } - $scope.toggleUserData = function() { + }; + $scope.toggleUserData = function () { if ($scope.dataExpanded) { - $scope.dataExpanded = false; + $scope.dataExpanded = false; } else { - $scope.dataExpanded = true; + $scope.dataExpanded = true; } - } - $scope.collectionExpanded = function() { + }; + $scope.collectionExpanded = function () { return $scope.expanded; - } - $scope.userDataExpanded = function() { + }; + $scope.userDataExpanded = function () { return $scope.dataExpanded && $scope.userDataSaved(); - } - $scope.checkUpdates = function() { - UpdateCheck.checkForUpdates(); - } - - var handleNoConsent = function(resultDoc) { - $ionicPopup.confirm({template: $translate.instant('general-settings.consent-not-found')}) - .then(function(res){ + }; + $scope.checkUpdates = function () { + UpdateCheck.checkForUpdates(); + }; + + var handleNoConsent = function (resultDoc) { + $ionicPopup + .confirm({ + template: $translate.instant("general-settings.consent-not-found"), + }) + .then(function (res) { if (res) { - $state.go("root.reconsent"); + $state.go("root.reconsent"); } else { - $ionicPopup.alert({ - template: $translate.instant('general-settings.no-consent-message')}); + $ionicPopup.alert({ + template: $translate.instant( + "general-settings.no-consent-message" + ), + }); } - }); - } + }); + }; - var handleConsent = function(resultDoc) { + var handleConsent = function (resultDoc) { $scope.consentDoc = resultDoc; - $ionicPopup.confirm({ - template: $translate.instant('general-settings.consented-to',{protocol_id: $scope.consentDoc.protocol_id,approval_date: $scope.consentDoc.approval_date}), + $ionicPopup + .confirm({ + template: $translate.instant("general-settings.consented-to", { + protocol_id: $scope.consentDoc.protocol_id, + approval_date: $scope.consentDoc.approval_date, + }), scope: $scope, - title: $translate.instant('general-settings.consent-found'), + title: $translate.instant("general-settings.consent-found"), buttons: [ - // {text: "View", - // type: 'button-calm'}, - {text: ""+ $translate.instant('general-settings.consented-ok') +"", - type: 'button-positive'} ] - }).finally(function(res) { + // {text: "View", + // type: 'button-calm'}, + { + text: + "" + + $translate.instant("general-settings.consented-ok") + + "", + type: "button-positive", + }, + ], + }) + .finally(function (res) { $scope.consentDoc = null; - }); - } + }); + }; - $scope.checkConsent = function() { - StartPrefs.getConsentDocument().then(function(resultDoc){ + $scope.checkConsent = function () { + StartPrefs.getConsentDocument().then( + function (resultDoc) { if (resultDoc == null) { - handleNoConsent(resultDoc); + handleNoConsent(resultDoc); } else { - handleConsent(resultDoc); + handleConsent(resultDoc); } - }, function(error) { - Logger.displayError("Error reading consent document from cache", error) - }); - } - - var prepopulateMessage = { - message: $translate.instant('general-settings.share-message'), // not supported on some apps (Facebook, Instagram) - subject: $translate.instant('general-settings.share-subject'), // fi. for email - url: $translate.instant('general-settings.share-url') - } - - $scope.share = function() { - window.plugins.socialsharing.shareWithOptions(prepopulateMessage, function(result) { + }, + function (error) { + Logger.displayError( + "Error reading consent document from cache", + error + ); + } + ); + }; + + var prepopulateMessage = { + message: $translate.instant("general-settings.share-message"), // not supported on some apps (Facebook, Instagram) + subject: $translate.instant("general-settings.share-subject"), // fi. for email + url: $translate.instant("general-settings.share-url"), + }; + + $scope.share = function () { + window.plugins.socialsharing.shareWithOptions( + prepopulateMessage, + function (result) { console.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true console.log("Shared to app: " + result.app); // On Android result.app is currently empty. On iOS it's empty when sharing is cancelled (result.completed=false) - }, function(msg) { + }, + function (msg) { console.log("Sharing failed with message: " + msg); - }); - } - - var prepopulateQRMessage = { - message: $translate.instant('general-settings.qrcode-share-message'), // not supported on some apps (Facebook, Instagram) - subject: $translate.instant('general-settings.qrcode-share-subject') // fi. for email - } + } + ); + }; - $scope.shareQR = function() { - //const c = $(".qrcode"); // selects the canvas element containing the QR code - //const cbase64 = c[0].toDataURL(); // converts the canvas element into base64 data - //prepopulateQRMessage.files = [cbase64]; // adds the base64 data into our share message + $scope.languageOptions = [ + { text: "English", value: ["en"] }, + { text: "Français", value: ["fr"] }, + ]; - const c = document.getElementsByClassName('qrcode-link'); - const cbase64 = c[0].getAttribute('href'); - prepopulateQRMessage.files = [cbase64]; + $scope.changeLanguage = function () { + $ionicActionSheet.show({ + buttons: $scope.languageOptions, + titleText: $translate.instant("control.select-language"), + buttonClicked: function (index, button) { + $scope.selectCtrl.language = button.value; + $translate.use(button.value[0]); + return true; + }, + }); + }; + + $scope.copyIdentifierToClipBoard = function (identifier) { + cordova.plugins.clipboard.copy(identifier); + }; + + $scope.displayLanguage = function () { + for (var i in $scope.languageOptions) { + var languageMapping = $scope.languageOptions[i]; + // this is the ALL case + if (i == 0 && $scope.selectCtrl.language == null) { + return languageMapping.text; + } + // this is the NONE case + if (i == 1 && $scope.selectCtrl.language == []) { + return languageMapping.text; + } + // TODO: Right now, we have single element arrays. Change this if we want + // a different representation + if ( + i > 1 && + $scope.selectCtrl.language != null && + $scope.selectCtrl.language.length > 0 && + languageMapping.value[0] == $scope.selectCtrl.language[0] + ) { + return languageMapping.text; + } + } + return "unknown"; + }; - prepopulateQRMessage.url = $scope.settings.auth.email; + $scope.selectCtrl = {}; - window.plugins.socialsharing.shareWithOptions(prepopulateQRMessage, function(result) { - console.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true - console.log("Shared to app: " + result.app); // On Android result.app is currently empty. On iOS it's empty when sharing is cancelled (result.completed=false) - }, function(msg) { - console.log("Sharing failed with message: " + msg); - }); + $scope.selectCtrl.language = null; } - -}); + ); diff --git a/www/js/control/uploadService.js b/www/js/control/uploadService.js index 36d19ccdd..90d1d0d4b 100644 --- a/www/js/control/uploadService.js +++ b/www/js/control/uploadService.js @@ -94,8 +94,6 @@ angular.module('emission.services.upload', ['emission.plugin.logger']) newScope.fromDirText = $translate.instant('upload-service.upload-from-dir', {parentDir: parentDir}); newScope.toServerText = $translate.instant('upload-service.upload-to-server', {serverURL: uploadConfig}); - var didCancel = true; - const detailsPopup = $ionicPopup.show({ title: $translate.instant("upload-service.upload-database", { db: database }), template: newScope.toServerText @@ -103,23 +101,15 @@ angular.module('emission.services.upload', ['emission.plugin.logger']) +' placeholder="{{ \'upload-service.please-fill-in-what-is-wrong \' | translate}}">', scope: newScope, buttons: [ - { - text: 'Cancel', - onTap: function(e) { - didCancel = true; - detailsPopup.close(); - } - }, + { text: 'Cancel' }, { text: 'Upload', type: 'button-positive', onTap: function(e) { if (!newScope.data.reason) { //don't allow the user to close unless he enters wifi password - didCancel = false; e.preventDefault(); } else { - didCancel = false; return newScope.data.reason; } } @@ -130,8 +120,6 @@ angular.module('emission.services.upload', ['emission.plugin.logger']) Logger.log(Logger.LEVEL_INFO, "Going to upload " + database); const readFileAndInfo = [readDBFile(parentDir, database), detailsPopup]; Promise.all(readFileAndInfo).then(([binString, reason]) => { - if(!didCancel) - { console.log("Uploading file of size "+binString.byteLength); const progressScope = $rootScope.$new(); const params = { @@ -139,17 +127,13 @@ angular.module('emission.services.upload', ['emission.plugin.logger']) tz: Intl.DateTimeFormat().resolvedOptions().timeZone } uploadConfig.forEach((url) => { - const progressPopup = $ionicPopup.show({ + const progressPopup = $ionicPopup.alert({ title: $translate.instant("upload-service.upload-database", {db: database}), template: $translate.instant("upload-service.upload-progress", {filesizemb: binString.byteLength / (1000 * 1000), - serverURL: uploadConfig}) - + '
', + serverURL: uploadConfig}), scope: progressScope, - buttons: [ - { text: 'Cancel', type: 'button-cancel', }, - ] }); sendToServer(url, binString, params).then((response) => { console.log(response); @@ -162,7 +146,6 @@ angular.module('emission.services.upload', ['emission.plugin.logger']) }); }).catch(onUploadError); }); - } }).catch(onReadError); }).catch(onReadError); }; diff --git a/www/js/controllers.js b/www/js/controllers.js index dedc94529..0050bd214 100644 --- a/www/js/controllers.js +++ b/www/js/controllers.js @@ -5,9 +5,8 @@ angular.module('emission.controllers', ['emission.splash.updatecheck', 'emission.splash.pushnotify', 'emission.splash.storedevicesettings', 'emission.splash.localnotify', - 'emission.splash.remotenotify', - 'emission.stats.clientstats', - 'emission.survey.multilabel.posttrip.prompt']) + 'emission.survey.launch', + 'emission.stats.clientstats']) .controller('RootCtrl', function($scope) {}) @@ -15,7 +14,7 @@ angular.module('emission.controllers', ['emission.splash.updatecheck', .controller('SplashCtrl', function($scope, $state, $interval, $rootScope, UpdateCheck, StartPrefs, PushNotify, StoreDeviceSettings, - LocalNotify, RemoteNotify, ClientStats, PostTripAutoPrompt) { + LocalNotify, ClientStats, SurveyLaunch) { console.log('SplashCtrl invoked'); // alert("attach debugger!"); // PushNotify.startupInit(); diff --git a/www/js/diary.js b/www/js/diary.js index 71a8e903b..1fb4c4d8c 100644 --- a/www/js/diary.js +++ b/www/js/diary.js @@ -1,9 +1,8 @@ angular.module('emission.main.diary',['emission.main.diary.list', 'emission.main.diary.infscrolllist', - 'emission.main.diary.infscrolldetail', 'emission.main.diary.detail', 'emission.main.diary.services', - 'emission.main.diary.current',]) + 'emission.main.diary.current']) .config(function($stateProvider) { $stateProvider @@ -35,16 +34,7 @@ angular.module('emission.main.diary',['emission.main.diary.list', controller: 'InfiniteDiaryListCtrl' }, } - }) - - .state('root.main.inf_scroll-detail', { - url: "/inf_scroll/:tripId", - views: { - 'main-inf-scroll': { - templateUrl: "templates/diary/infinite_scroll_detail.html", - controller: 'InfiniteDiaryDetailCtrl' - }, - } + }) .state('root.main.current', { diff --git a/www/js/diary/detail.js b/www/js/diary/detail.js index 0db872e28..4f5794275 100644 --- a/www/js/diary/detail.js +++ b/www/js/diary/detail.js @@ -1,22 +1,15 @@ 'use strict'; angular.module('emission.main.diary.detail',['ui-leaflet', 'ng-walkthrough', 'nvd3', 'emission.plugin.kvstore', - 'emission.services', - 'emission.config.imperial', - 'emission.plugin.logger', - 'emission.stats.clientstats', + 'emission.services', 'emission.plugin.logger', 'emission.incident.posttrip.manual']) -.controller("DiaryDetailCtrl", function($scope, $rootScope, $window, $injector, $ionicPlatform, - $state, $stateParams, ClientStats, $ionicActionSheet, +.controller("DiaryDetailCtrl", function($scope, $rootScope, $window, $stateParams, $ionicActionSheet, leafletData, leafletMapEvents, nzTour, KVStore, - Logger, Timeline, DiaryHelper, SurveyOptions, Config, ImperialConfig, + Logger, Timeline, DiaryHelper, Config, CommHelper, PostTripManualMarker, $translate) { console.log("controller DiaryDetailCtrl called with params = "+ JSON.stringify($stateParams)); - $scope.surveyOpt = SurveyOptions.MULTILABEL; - $scope.tripFilterFactory = $injector.get($scope.surveyOpt.filter); - $scope.filterInputs = $scope.tripFilterFactory.configuredFilters; $scope.mapCtrl = {}; angular.extend($scope.mapCtrl, { @@ -30,19 +23,9 @@ angular.module('emission.main.diary.detail',['ui-leaflet', 'ng-walkthrough', for (var k in mapEvents) { var eventName = 'leafletDirectiveMap.detail.' + mapEvents[k]; $scope.$on(eventName, function(event, data){ - try { - console.log("in mapEvents, event = "+JSON.stringify(event.name)+ - " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ - " leafletObject = "+JSON.stringify(data.leafletObject.getBounds())); - } catch (e) { - if (e instanceof TypeError) { - console.log("in mapEvents, event = "+JSON.stringify(event.name)+ - " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ - " leafletObject is undefined"); - } else { - console.log(e); - } - } + console.log("in mapEvents, event = "+JSON.stringify(event.name)+ + " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ + " leafletObject = "+JSON.stringify(data.leafletObject.getBounds())); $scope.eventDetected = event.name; }); } @@ -64,41 +47,34 @@ angular.module('emission.main.diary.detail',['ui-leaflet', 'ng-walkthrough', $scope.$broadcast('invalidateSize'); }; + $scope.getFormattedDate = DiaryHelper.getFormattedDate; + $scope.arrowColor = DiaryHelper.arrowColor; + $scope.parseEarlierOrLater = DiaryHelper.parseEarlierOrLater; + $scope.getEarlierOrLater = DiaryHelper.getEarlierOrLater; + $scope.getLongerOrShorter = DiaryHelper.getLongerOrShorter; + $scope.getIcon = DiaryHelper.getIcon; + $scope.getHumanReadable = DiaryHelper.getHumanReadable; $scope.trip = Timeline.getTrip($stateParams.tripId); - $scope.tripgj = $scope.trip == undefined? {"sections": []} : Timeline.getTripWrapper($stateParams.tripId); + $scope.getKmph = DiaryHelper.getKmph; + $scope.getFormattedDistance = DiaryHelper.getFormattedDistance; + $scope.getSectionDetails = DiaryHelper.getSectionDetails; + $scope.getFormattedTime = DiaryHelper.getFormattedTime; + $scope.getLocalTimeString = DiaryHelper.getLocalTimeString; + $scope.getFormattedTimeRange = DiaryHelper.getFormattedTimeRange; + $scope.getFormattedDuration = DiaryHelper.getFormattedDuration; + $scope.getTripDetails = DiaryHelper.getTripDetails + $scope.tripgj = Timeline.getTripWrapper($stateParams.tripId); $scope.formattedSectionProperties = $scope.tripgj.sections.map(function(s) { return {"fmt_time": DiaryHelper.getLocalTimeString(s.properties.start_local_dt), "fmt_time_range": DiaryHelper.getFormattedTimeRange(s.properties.end_ts, s.properties.start_ts), - "fmt_distance": ImperialConfig.getFormattedDistance(s.properties.distance), - "fmt_distance_suffix": ImperialConfig.getDistanceSuffix, + "fmt_distance": DiaryHelper.getFormattedDistance(s.properties.distance), "icon": DiaryHelper.getIcon(s.properties.sensed_mode), "colorStyle": {color: DiaryHelper.getColor(s.properties.sensed_mode)} }; }); - $scope.recomputeDisplayTrips = function() { - console.log("Called diary details.recomputeDisplayTrips"); - // Let's copy over the userInput to the field expected by the checks (user_input) - // We definitely need to unify this ASAP - $scope.tripgj.user_input = $scope.tripgj.userInput; - const filterMap = $scope.filterInputs.map((f) => f.filter($scope.tripgj)); - // again, we cannot use both filters in the detail screen because the trip - // version of in the list view doesn't have the expectation value filled - // out. We really need to unify ASAP! - console.log("filterMap = "+filterMap+" we will only use the second (unlabeled check)"); - // if the trip was going to stay (not be filtered), we should not go back to the scroll list - // TODO: Unify with infinite scroll and remove this hack - if (!filterMap[1]) { - $state.go("root.main.diary"); - } - }; - - if (!angular.isDefined($scope.trip) || !angular.isDefined($scope.tripgj)) { - console.log("Detail trip not defined, going back to the list view") - $state.go("root.main.diary"); - } else { - console.log("trip.start_place = " , $scope.trip); + console.log("trip.start_place = " + JSON.stringify($scope.trip.start_place)); var data = []; var start_ts = $scope.trip.properties.start_ts; @@ -138,7 +114,6 @@ angular.module('emission.main.diary.detail',['ui-leaflet', 'ng-walkthrough', //Update the chart when window resizes. nv.utils.windowResize(chart.update); nv.addGraph(chart); - } /* START: ng-walkthrough code */ // Tour steps @@ -187,38 +162,11 @@ angular.module('emission.main.diary.detail',['ui-leaflet', 'ng-walkthrough', } $scope.$on('$ionicView.afterEnter', function(ev) { - // Workaround from + // Workaround from // https://github.com/driftyco/ionic/issues/3433#issuecomment-195775629 if(ev.targetScope !== $scope) return; checkDetailTutorialDone(); }); - - $scope.$on('$ionicView.enter',function(){ - $scope.startTime = moment().utc() - ClientStats.addEvent(ClientStats.getStatKeys().EXPANDED_TRIP).then( - function() { - console.log("Added "+ClientStats.getStatKeys().EXPANDED_TRIP+" event"); - } - ); - }); - - $scope.$on('$ionicView.leave',function() { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().DIARY_TIME, timeOnPage); - }); - - $ionicPlatform.on("pause", function() { - if ($state.$current == "root.main.diary.detail") { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().DIARY_TIME, timeOnPage); - } - }) - - $ionicPlatform.on("resume", function() { - if ($state.$current == "root.main.diary.detail") { - $scope.startTime = moment().utc() - } - }) /* END: ng-walkthrough code */ }) diff --git a/www/js/diary/diary_list_item.js b/www/js/diary/diary_list_item.js new file mode 100644 index 000000000..be400d20a --- /dev/null +++ b/www/js/diary/diary_list_item.js @@ -0,0 +1,35 @@ +/** + * A directive to display a diary list item. + */ + +angular.module('emission.main.diary.diarylistitem', [ + 'ui-leaflet', + 'emission.main.diary.list' +]) + +.directive("diaryListItem", function(){ + return{ + restrict: 'E', + scope: { + tripgj: '=' + }, + controller: 'DiaryListItemCtrl', + templateUrl: 'templates/diary/diary_list_item.html' + }; +}) + +.controller("DiaryListItemCtrl", function( + $scope, + SurveyOptions, + $state +){ + $scope.surveyOpt = SurveyOptions.MULTILABEL; + const DEFAULT_ITEM_HT = 335; + $scope.itemHt = DEFAULT_ITEM_HT; + + $scope.toDetail = function (param) { + $state.go('root.main.diary-detail', { + tripId: param + }); + } +}); \ No newline at end of file diff --git a/www/js/diary/infinite_scroll_filters.js b/www/js/diary/infinite_scroll_filters.js new file mode 100644 index 000000000..1f441b330 --- /dev/null +++ b/www/js/diary/infinite_scroll_filters.js @@ -0,0 +1,66 @@ +'use strict'; + +/* + * The general structure of this code is that all the timeline information for + * a particular day is retrieved from the Timeline factory and put into the scope. + * For best performance, all data should be loaded into the in-memory timeline, + * and in addition to writing to storage, the data should be written to memory. + * All UI elements should only use $scope variables. + */ + +angular.module('emission.main.diary.infscrollfilters',[ + 'emission.tripconfirm.services', + 'emission.stats.clientstats', + 'emission.plugin.logger' + ]) +.factory('InfScrollFilters', function(Logger, ConfirmHelper, ClientStats, $translate){ + var sf = {}; + var unlabeledCheck = function(t) { + return ConfirmHelper.INPUTS + .map((inputType, index) => !angular.isDefined(t.userInput[inputType])) + .reduce((acc, val) => acc || val, false); + } + + var invalidCheck = function(t) { + const retVal = + (angular.isDefined(t.userInput['MODE']) && t.userInput['MODE'].value === 'pilot_ebike') && + (!angular.isDefined(t.userInput['REPLACED_MODE']) || + t.userInput['REPLACED_MODE'].value === 'pilot_ebike' || + t.userInput['REPLACED_MODE'].value === 'same_mode'); + return retVal; + } + + var toLabelCheck = function(trip) { + if (angular.isDefined(trip.expectation)) { + console.log(trip.expectation.to_label) + return trip.expectation.to_label && unlabeledCheck(trip); + } else { + return true; + } + } + + sf.waitingForMod = function(t) { + return t.waitingForMod == true; + } + + sf.UNLABELED = { + key: "unlabeled", + text: $translate.instant(".unlabeled"), + filter: unlabeledCheck, + width: "col-50" + } + + sf.INVALID_EBIKE = { + key: "invalid_ebike", + text: $translate.instant(".invalid-ebike"), + filter: invalidCheck + } + + sf.TO_LABEL = { + key: "to_label", + text: $translate.instant(".to-label"), + filter: toLabelCheck, + width: "col-50" + } + return sf; +}); diff --git a/www/js/diary/infinite_scroll_list.js b/www/js/diary/infinite_scroll_list.js index c4c3e22e9..88cd28876 100644 --- a/www/js/diary/infinite_scroll_list.js +++ b/www/js/diary/infinite_scroll_list.js @@ -16,13 +16,16 @@ angular.module('emission.main.diary.infscrolllist',['ui-leaflet', 'emission.survey', 'ng-walkthrough', 'nzTour', 'emission.plugin.kvstore', 'emission.stats.clientstats', - 'emission.plugin.logger']) + 'emission.plugin.logger', + 'emission.main.diary.infscrolltripitem', + ]) .controller("InfiniteDiaryListCtrl", function($window, $scope, $rootScope, $injector, $ionicPlatform, $state, $ionicScrollDelegate, $ionicPopup, ClientStats, $ionicLoading, $ionicActionSheet, + ionicDatePicker, $timeout, leafletData, Timeline, CommonGraph, DiaryHelper, SurveyOptions, @@ -31,7 +34,7 @@ angular.module('emission.main.diary.infscrolllist',['ui-leaflet', // TODO: load only a subset of entries instead of everything console.log("controller InfiniteDiaryListCtrl called"); - const DEFAULT_ITEM_HT = 150; + const DEFAULT_ITEM_HT = 274; $scope.surveyOpt = SurveyOptions.MULTILABEL; $scope.itemHt = DEFAULT_ITEM_HT; // Add option @@ -54,6 +57,7 @@ angular.module('emission.main.diary.infscrolllist',['ui-leaflet', ClientStats.addReading(ClientStats.getStatKeys().LABEL_TAB_SWITCH, {"source": null, "dest": $scope.getActiveFilters()}); $scope.allTrips = false; const ONE_WEEK = 7 * 24 * 60 * 60; // seconds + const ONE_DAY = 24 * 60 * 60; // seconds /* * These values are used to ensure that when the user scrolls upwards, they @@ -166,7 +170,7 @@ angular.module('emission.main.diary.infscrolllist',['ui-leaflet', $scope.infScrollControl.pipelineRange = pipelineRange; $scope.infScrollControl.currentEnd = pipelineRange.end_ts; $scope.infScrollControl.callback = function() { - $ionicScrollDelegate.scrollBottom(); + $ionicScrollDelegate.scrollBottom(); // scrollTop()? }; $scope.readDataFromServer(); } else { @@ -187,12 +191,6 @@ angular.module('emission.main.diary.infscrolllist',['ui-leaflet', } }); - $scope.showDetail = function($event, trip) { - $state.go("root.main.inf_scroll-detail", { - tripId: trip.id - }); - } - $scope.select = function(selF) { const prev = $scope.getActiveFilters(); selF.state = true; diff --git a/www/js/diary/infinite_scroll_trip_item.js b/www/js/diary/infinite_scroll_trip_item.js new file mode 100644 index 000000000..3c0d9d666 --- /dev/null +++ b/www/js/diary/infinite_scroll_trip_item.js @@ -0,0 +1,122 @@ + +/** + * A directive to display each trip within the diary view. + */ + +angular.module('emission.main.diary.infscrolltripitem', [ + 'emission.main.diary.infscrolllist', + 'emission.survey.multilabel.services', + 'emission.main.diary.infscrolldetail', + 'ui-leaflet', 'ng-walkthrough', + 'nvd3', 'emission.plugin.kvstore', + 'emission.services', + 'emission.config.imperial', + 'emission.plugin.logger', + 'emission.stats.clientstats', + 'emission.incident.posttrip.manual' +]) + +.directive("infiniteScrollTripItem", function(){ + return{ + restrict: 'E', + scope: { + trip: '=' + }, + controller: 'TripItemCtrl', + templateUrl: 'templates/diary/trip_list_item.html' + }; + }) + + .controller("TripItemCtrl", function($scope, $injector, $ionicPlatform, + $state, leafletMapEvents, + nzTour, Timeline, DiaryHelper, SurveyOptions, + Config, $ionicScrollDelegate + ){ + console.log("Trip Item Controller called"); + const DEFAULT_ITEM_HT = 274; + $scope.surveyOpt = SurveyOptions.MULTILABEL; + $scope.itemHt = DEFAULT_ITEM_HT; + + // Added function from infiniteDiaryListCtrl + $scope.showDetail = function($event) { + $state.go("root.main.inf_scroll-detail", { + tripId: $scope.trip.id + }); + console.log("Testing if showDetail has the trip defined: ", $scope.trip); + } + + console.log("Trip before tripgj transformation ", $scope.trip); + + // Converting trip to tripgj + Timeline.confirmedTrip2Geojson($scope.trip).then((tripgj) => { + $scope.$apply(() => { + $scope.tripgj = $scope.trip; + $scope.tripgj.data = tripgj; + $scope.tripgj.common = {}; + $scope.tripgj.common.earlierOrLater = ''; + $scope.tripgj.pointToLayer = DiaryHelper.pointFormat; + + console.log("Is our trip a draft? ", DiaryHelper.isDraft($scope.tripgj)); + $scope.tripgj.isDraft = DiaryHelper.isDraft($scope.tripgj); + console.log("Tripgj == Draft: ", $scope.tripgj.isDraft); + + console.log("Tripgj in Trip Item Ctrl is ", $scope.tripgj); + + // var tc = getTripComponents($scope.tripgj); + // $scope.tripgj.sections = tc[3]; + // $scope.tripgj.percentages = DiaryHelper.getPercentages($scope.trip); + // console.log("Section Percentages are ", $scope.tripgj.percentages); + }); + }); + console.log("Trip's Date is ", $scope.trip.display_date); + console.log("Trip in Trip Item Ctrl is ", $scope.trip); + + // Explain Draft Function for the button to explain what a draft is + $scope.explainDraft = function($event) { + $event.stopPropagation(); + $ionicPopup.alert({ + template: $translate.instant('list-explainDraft-alert') + }); + // don't want to go to the detail screen + } + + // In-Line Map, functionality pulled from Infinite Scroll Detail + $scope.mapCtrl = {}; + angular.extend($scope.mapCtrl, { + defaults : { + zoomControl: false + } + }); + + angular.extend($scope.mapCtrl.defaults, Config.getMapTiles()) + + var mapEvents = leafletMapEvents.getAvailableMapEvents(); + for (var k in mapEvents) { + var eventName = 'leafletDirectiveMap.infscroll-tripitem.' + mapEvents[k]; + $scope.$on(eventName, function(event, data){ + try { + console.log("in mapEvents, event = "+JSON.stringify(event.name)+ + " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ + " leafletObject = "+JSON.stringify(data.leafletObject.getBounds())); + } catch (e) { + if (e instanceof TypeError) { + console.log("in mapEvents, event = "+JSON.stringify(event.name)+ + " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ + " leafletObject is undefined"); + } else { + console.log(e); + } + } + $scope.eventDetected = event.name; + }); + } + + $scope.refreshTiles = function() { + $scope.$broadcast('invalidateSize'); + } + + $scope.$on('leafletDirectiveMap.infscroll-tripitem.resize', function(event, data) { + console.log("detail received resize event, invalidating map size"); + data.leafletObject.invalidateSize(); + }); +}); \ No newline at end of file diff --git a/www/js/diary/list.js b/www/js/diary/list.js index c0f6fc86b..441cd8e1e 100644 --- a/www/js/diary/list.js +++ b/www/js/diary/list.js @@ -11,42 +11,44 @@ angular.module('emission.main.diary.list',['ui-leaflet', 'ionic-datepicker', 'emission.main.common.services', + 'emission.incident.posttrip.manual', + 'emission.tripconfirm.services', 'emission.services', - 'emission.config.imperial', - 'emission.survey', 'ng-walkthrough', 'nzTour', 'emission.plugin.kvstore', 'emission.stats.clientstats', - 'emission.plugin.logger' + 'emission.plugin.logger', + 'emission.main.diary.diarylistitem' ]) -.controller("DiaryListCtrl", function($window, $scope, $rootScope, $injector, - $ionicPlatform, $state, - $ionicScrollDelegate, $ionicPopup, ClientStats, +.controller("DiaryListCtrl", function($window, $scope, $rootScope, $ionicPlatform, $state, + $ionicScrollDelegate, $ionicPopup, $ionicLoading, $ionicActionSheet, - $timeout, ionicDatePicker, leafletData, Timeline, CommonGraph, DiaryHelper, - SurveyOptions, - Config, ImperialConfig, PostTripManualMarker, nzTour, KVStore, Logger, UnifiedDataLoader, $ionicPopover, $translate) { + Config, PostTripManualMarker, ConfirmHelper, nzTour, KVStore, Logger, UnifiedDataLoader, $ionicPopover, $translate) { console.log("controller DiaryListCtrl called"); - const DEFAULT_ITEM_HT = 335; - $scope.surveyOpt = SurveyOptions.MULTILABEL; - ClientStats.addReading(ClientStats.getStatKeys().LABEL_TAB_SWITCH, - {"source": null, "dest": $scope.data? $scope.data.currDay : undefined}); // Add option - $scope.labelPopulateFactory = $injector.get($scope.surveyOpt.service); - $scope.itemHt = DEFAULT_ITEM_HT; + + $scope.$on('leafletDirectiveMap.resize', function(event, data) { + console.log("diary/list received resize event, invalidating map size"); + data.leafletObject.invalidateSize(); + }); + + $scope.userInputDetails = []; + ConfirmHelper.INPUTS.forEach(function(item, index) { + const currInput = angular.copy(ConfirmHelper.inputDetails[item]); + currInput.name = item; + $scope.userInputDetails.push(currInput); + }); var readAndUpdateForDay = function(day) { // This just launches the update. The update can complete in the background // based on the time when the database finishes reading. // TODO: Convert the usercache calls into promises so that we don't have to // do this juggling - $scope.itemHt = DEFAULT_ITEM_HT; Timeline.updateForDay(day); - // This will be used to show the date of datePicker in the user language. - $scope.currDay = moment(day).format('LL'); + $scope.currDay = moment(day).format("DD MMM"); // CommonGraph.updateCurrent(); }; @@ -112,7 +114,7 @@ angular.module('emission.main.diary.list',['ui-leaflet', $scope.listColRightClass = "col-50 list-col-right" $scope.differentCommon = function(tripgj) { - return (DiaryHelper.isCommon(tripgj.id))? ((DiaryHelper.getEarlierOrLater(tripgj.data.properties.start_ts, tripgj.data.id) == '')? false : true) : false; + return ($scope.isCommon(tripgj.id))? ((DiaryHelper.getEarlierOrLater(tripgj.data.properties.start_ts, tripgj.data.id) == '')? false : true) : false; } $scope.stopTimeTagClass = function(tripgj) { return ($scope.differentCommon(tripgj))? "stop-time-tag-lower" : "stop-time-tag"; @@ -161,35 +163,61 @@ angular.module('emission.main.diary.list',['ui-leaflet', ionicDatePicker.openDatePicker($scope.datepickerObject); } + /** + * Embed 'inputType' to the trip + */ + $scope.populateInputFromTimeline = function (tripgj, nextTripgj, inputType, inputList) { + var userInput = DiaryHelper.getUserInputForTrip(tripgj, nextTripgj, inputList); + if (angular.isDefined(userInput)) { + // userInput is an object with data + metadata + // the label is the "value" from the options + var userInputEntry = $scope.inputParams[inputType].value2entry[userInput.data.label]; + if (!angular.isDefined(userInputEntry)) { + userInputEntry = ConfirmHelper.getFakeEntry(userInput.data.label); + $scope.inputParams[inputType].options.push(userInputEntry); + $scope.inputParams[inputType].value2entry[userInput.data.label] = userInputEntry; + } + console.log("Mapped label "+userInput.data.label+" to entry "+JSON.stringify(userInputEntry)); + tripgj.userInput[inputType] = userInputEntry; + } + Logger.log("Set "+ inputType + " " + JSON.stringify(userInputEntry) + " for trip id " + JSON.stringify(tripgj.data.id)); + $scope.editingTrip = angular.undefined; + } $scope.populateBasicClasses = function(tripgj) { tripgj.display_start_time = DiaryHelper.getLocalTimeString(tripgj.data.properties.start_local_dt); tripgj.display_end_time = DiaryHelper.getLocalTimeString(tripgj.data.properties.end_local_dt); - tripgj.display_distance = ImperialConfig.getFormattedDistance(tripgj.data.properties.distance); - tripgj.display_distance_suffix = ImperialConfig.getDistanceSuffix; - tripgj.display_date = moment(tripgj.data.properties.start_ts * 1000).format('ddd DD MMM YY'); - tripgj.display_time = DiaryHelper.getFormattedTimeRange(tripgj.data.properties.start_ts, + tripgj.display_distance = $scope.getFormattedDistance(tripgj.data.properties.distance); + tripgj.display_time = $scope.getFormattedTimeRange(tripgj.data.properties.start_ts, tripgj.data.properties.end_ts); - tripgj.isDraft = DiaryHelper.isDraft(tripgj); + tripgj.isDraft = $scope.isDraft(tripgj); tripgj.background = DiaryHelper.getTripBackground(tripgj); tripgj.listCardClass = $scope.listCardClass(tripgj); - tripgj.percentages = DiaryHelper.getPercentages(tripgj) + tripgj.percentages = $scope.getPercentages(tripgj) } $scope.populateCommonInfo = function(tripgj) { tripgj.common = {} DiaryHelper.fillCommonTripCount(tripgj); tripgj.common.different = $scope.differentCommon(tripgj); - tripgj.common.longerOrShorter = DiaryHelper.getLongerOrShorter(tripgj.data, tripgj.data.id); + tripgj.common.longerOrShorter = $scope.getLongerOrShorter(tripgj.data, tripgj.data.id); tripgj.common.listColLeftClass = $scope.listColLeftClass(tripgj.common.longerOrShorter[0]); tripgj.common.stopTimeTagClass = $scope.stopTimeTagClass(tripgj); - tripgj.common.arrowColor = DiaryHelper.arrowColor(tripgj.common.longerOrShorter[0]); - tripgj.common.arrowClass = DiaryHelper.getArrowClass(tripgj.common.longerOrShorter[0]); + tripgj.common.arrowColor = $scope.arrowColor(tripgj.common.longerOrShorter[0]); + tripgj.common.arrowClass = $scope.getArrowClass(tripgj.common.longerOrShorter[0]); - tripgj.common.earlierOrLater = DiaryHelper.getEarlierOrLater(tripgj.data.properties.start_ts, tripgj.data.id); - tripgj.common.displayEarlierLater = DiaryHelper.parseEarlierOrLater(tripgj.common.earlierOrLater); + tripgj.common.earlierOrLater = $scope.getEarlierOrLater(tripgj.data.properties.start_ts, tripgj.data.id); + tripgj.common.displayEarlierLater = $scope.parseEarlierOrLater(tripgj.common.earlierOrLater); } + var isNotEmpty = function (obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) + return true; + } + return false; + }; + $scope.explainDraft = function($event) { $event.stopPropagation(); $ionicPopup.alert({ @@ -210,24 +238,12 @@ angular.module('emission.main.diary.list',['ui-leaflet', DiaryHelper.directiveForTrip); Timeline.setTripWrappers(currDayTripWrappers); - // Add "next" pointers to make it easier to use trip linkages for display $scope.data.currDayTripWrappers.forEach(function(tripgj, tripIndex, array) { - tripgj.nextTripgj = array[tripIndex+1]; - - // First populate basic classes so that we can use `isDraft` during - // the matching code + tripgj.userInput = {}; + ConfirmHelper.INPUTS.forEach(function(item, index) { + $scope.populateInputFromTimeline(tripgj, array[tripIndex+1], item, $scope.data.unifiedConfirmsResults[item]); + }); $scope.populateBasicClasses(tripgj); - - // add additional data structures to make the trip gj similar to a - // trip object so that the unified populate code works - tripgj.start_ts = tripgj.data.properties.start_ts; - tripgj.end_ts = tripgj.data.properties.end_ts; - tripgj.inferred_labels = tripgj.data.properties.inferred_labels; - tripgj.user_input = tripgj.data.properties.user_input; - if (tripgj.user_input == undefined) { - console.log("while populating trips, user_input not found", tripgj.data.properties); - } - $scope.labelPopulateFactory.populateInputsAndInferences(tripgj, $scope.data.unifiedConfirmsResults); $scope.populateCommonInfo(tripgj); }); if ($rootScope.displayingIncident) { @@ -303,15 +319,68 @@ angular.module('emission.main.diary.list',['ui-leaflet', */ $scope.refresh = function() { + if ($ionicScrollDelegate.getScrollPosition().top < 20) { readAndUpdateForDay(Timeline.data.currDay); + $scope.$broadcast('invalidateSize'); + } }; + /* For UI control */ + $scope.groups = []; + for (var i=0; i<10; i++) { + $scope.groups[i] = { + name: i, + items: ["good1", "good2", "good3"] + }; + for (var j=0; j<3; j++) { + $scope.groups[i].items.push(i + '-' + j); + } + } + $scope.toggleGroup = function(group) { + if ($scope.isGroupShown(group)) { + $scope.shownGroup = null; + } else { + $scope.shownGroup = group; + } + }; + $scope.isGroupShown = function(group) { + return $scope.shownGroup === group; + }; + $scope.getEarlierOrLater = DiaryHelper.getEarlierOrLater; + $scope.getLongerOrShorter = DiaryHelper.getLongerOrShorter; + $scope.getHumanReadable = DiaryHelper.getHumanReadable; + $scope.getKmph = DiaryHelper.getKmph; + $scope.getPercentages = DiaryHelper.getPercentages; + $scope.getFormattedDistance = DiaryHelper.getFormattedDistance; + $scope.getSectionDetails = DiaryHelper.getSectionDetails; + $scope.getFormattedTime = DiaryHelper.getFormattedTime; + $scope.getFormattedTimeRange = DiaryHelper.getFormattedTimeRange; + $scope.getFormattedDuration = DiaryHelper.getFormattedDuration; + $scope.getTripDetails = DiaryHelper.getTripDetails; + $scope.starColor = DiaryHelper.starColor; + $scope.arrowColor = DiaryHelper.arrowColor; + $scope.getArrowClass = DiaryHelper.getArrowClass; + $scope.isCommon = DiaryHelper.isCommon; + $scope.isDraft = DiaryHelper.isDraft; + // $scope.expandEarlierOrLater = DiaryHelper.expandEarlierOrLater; + // $scope.increaseRestElementsTranslate3d = DiaryHelper.increaseRestElementsTranslate3d; + $scope.makeCurrent = function() { $ionicPopup.alert({ template: "Coming soon, after Shankari's quals in early March!" }); } + $scope.parseEarlierOrLater = DiaryHelper.parseEarlierOrLater; + + $scope.getTimeSplit = function(tripList) { + var retVal = {}; + var tripTimes = tripList.map(function(dt) { + return dt.data.properties.duration; + }); + + }; + // Tour steps var tour = { config: { @@ -346,27 +415,10 @@ angular.module('emission.main.diary.list',['ui-leaflet', }); }; - $scope.increaseHeight = function () { - // let's increase by a small amount to workaround the issue with the - // card not resizing the first time - $scope.itemHt = $scope.itemHt + 5; - const oldDisplayTrips = $scope.data.currDayTripWrappers; - const TEN_MS = 10; - $scope.data.currDayTripWrappers = []; - $timeout(() => { - $scope.$apply(() => { - // make sure that the new item-height is calculated by resetting the list - // that we iterate over - $scope.data.currDayTripWrappers = oldDisplayTrips; - // make sure that the cards within the items are set to the new - // size. Apparently, `ng-style` is not recalulated although the - // variable has changed and the items have changed. - $(".list-card").css("height", $scope.itemHt + "px"); - }); - }, TEN_MS); + $scope.refreshTiles = function() { + $scope.$broadcast('invalidateSize'); }; - /* * Checks if it is the first time the user has loaded the diary tab. If it is then * show a walkthrough and store the info that the user has seen the tutorial. @@ -398,13 +450,117 @@ angular.module('emission.main.diary.list',['ui-leaflet', readAndUpdateForDay(nextDay); }; - $scope.toDetail = function (param) { - $state.go('root.main.diary-detail', { - tripId: param + $scope.showModes = DiaryHelper.showModes; + + $scope.popovers = {}; + ConfirmHelper.INPUTS.forEach(function(item, index) { + let popoverPath = 'templates/diary/'+item.toLowerCase()+'-popover.html'; + return $ionicPopover.fromTemplateUrl(popoverPath, { + scope: $scope + }).then(function (popover) { + $scope.popovers[item] = popover; + }); + }); + + $scope.openPopover = function ($event, tripgj, inputType) { + $scope.draftInput = { + "start_ts": tripgj.data.properties.start_ts, + "end_ts": tripgj.data.properties.end_ts + }; + $scope.editingTrip = tripgj; + Logger.log("in openPopover, setting draftInput = " + JSON.stringify($scope.draftInput)); + + var options = []; + // translate options. + // Would be nicer not to do this everytime function is called + $scope.inputParams[inputType].options.forEach( (item) => { + options.push( { + "text": $translate.instant(item.text), + "value": item.value + }); + }) + + $ionicActionSheet.show({ + buttons: options, + titleText: $translate.instant("diary"+ConfirmHelper.inputDetails[inputType].labeltext), + buttonClicked: function (index, button) { + var input = $scope.inputParams[inputType].options[index]; // get the non translated input + $scope.choose(inputType, input); + return true; + }, }); }; - $scope.showModes = DiaryHelper.showModes; + /** + * Store selected value for options + * $scope.selected is for display only + * the value is displayed on popover selected option + */ + $scope.selected = {} + ConfirmHelper.INPUTS.forEach(function(item, index) { + $scope.selected[item] = {value: ''}; + }); + $scope.selected.other = {text: '', value: ''}; + + /* + * This is a curried function that curries the `$scope` variable + * while returing a function that takes `e` as the input + */ + var checkOtherOptionOnTap = function ($scope, inputType) { + return function (e) { + if (!$scope.selected.other.text) { + e.preventDefault(); + } else { + Logger.log("in choose other, other = " + JSON.stringify($scope.selected)); + $scope.store(inputType, $scope.selected.other, true /* isOther */); + $scope.selected.other = ''; + return $scope.selected.other; + } + } + }; + + $scope.choose = function (inputType, input) { + var isOther = false + if (input.value != "other") { + $scope.store(inputType, input, isOther); + } else { + isOther = true + ConfirmHelper.checkOtherOption(inputType, checkOtherOptionOnTap, $scope); + } + }; + + $scope.$on('$ionicView.loaded', function() { + $scope.inputParams = {} + ConfirmHelper.INPUTS.forEach(function(item) { + ConfirmHelper.getOptionsAndMaps(item).then(function(omObj) { + $scope.inputParams[item] = omObj; + }); + }); + }); + + $scope.store = function (inputType, input, isOther) { + if(isOther) { + // Let's make the value for user entered inputs look consistent with our + // other values + input.value = ConfirmHelper.otherTextToValue(input.text); + } + $scope.draftInput.label = input.value; + Logger.log("in storeInput, after setting input.value = " + input.value + ", draftInput = " + JSON.stringify($scope.draftInput)); + var tripToUpdate = $scope.editingTrip; + $window.cordova.plugins.BEMUserCache.putMessage(ConfirmHelper.inputDetails[inputType].key, $scope.draftInput).then(function () { + $scope.$apply(function() { + if (isOther) { + tripToUpdate.userInput[inputType] = ConfirmHelper.getFakeEntry(input.value); + $scope.inputParams[inputType].options.push(tripToUpdate.userInput[inputType]); + $scope.inputParams[inputType].value2entry[input.value] = tripToUpdate.userInput[inputType]; + } else { + tripToUpdate.userInput[inputType] = $scope.inputParams[inputType].value2entry[input.value]; + } + }); + }); + if (isOther == true) + $scope.draftInput = angular.undefined; + } $scope.redirect = function(){ $state.go("root.main.current"); @@ -414,7 +570,7 @@ angular.module('emission.main.diary.list',['ui-leaflet', $scope.checkTripState = function() { window.cordova.plugins.BEMDataCollection.getState().then(function(result) { Logger.log("Current trip state" + JSON.stringify(result)); - if(JSON.stringify(result) == "\"STATE_ONGOING_TRIP\"" || + if(JSON.stringify(result) == "\"STATE_ONGOING_TRIP\"" || JSON.stringify(result) == "\"local.state.ongoing_trip\"") { in_trip = true; } else { @@ -426,7 +582,7 @@ angular.module('emission.main.diary.list',['ui-leaflet', // storing boolean to in_trip and return it in inTrip function // work because ng-show is watching the inTrip function. // Returning a promise to ng-show did not work. - // Changing in_trip = bool value; in checkTripState function + // Changing in_trip = bool value; in checkTripState function // to return bool value and using checkTripState function in ng-show // did not work. $scope.inTrip = function() { @@ -436,15 +592,10 @@ angular.module('emission.main.diary.list',['ui-leaflet', }); }; - $scope.recomputeDisplayTrips = function() { - console.log("recomputing is a NOP on the diary since we always show all trips"); - }; - $ionicPlatform.ready().then(function() { readAndUpdateForDay(moment().startOf('day')); $scope.$on('$ionicView.enter', function(ev) { - $scope.startTime = moment().utc() // Workaround from // https://github.com/driftyco/ionic/issues/3433#issuecomment-195775629 if(ev.targetScope !== $scope) @@ -452,49 +603,7 @@ angular.module('emission.main.diary.list',['ui-leaflet', checkDiaryTutorialDone(); }); - $scope.$on('$ionicView.leave',function() { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().DIARY_TIME, timeOnPage); - }); - - $ionicPlatform.on("pause", function() { - if ($state.$current == "root.main.diary.list") { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().DIARY_TIME, timeOnPage); - } - }) - - $ionicPlatform.on("resume", function() { - if ($state.$current == "root.main.diary.list") { - $scope.startTime = moment().utc() - } - }) - $scope.$on('$ionicView.afterEnter', function() { - ClientStats.addEvent(ClientStats.getStatKeys().CHECKED_DIARY).then(function() { - console.log("Added "+ClientStats.getStatKeys().CHECKED_DIARY+" event"); - }); - /* - In case we have set the labels in the label screen, we want them to - show up when we come to this screen. It is really hard to do this - using the original code, because the unification is not complete, and - the code to read the manual inputs is completely different. - Instead, let's find the corresponding trip from the label view and - copy over the `userInput` (and potentially the `user_input`) values over - */ - $scope.$apply(() => { - if ($scope.data && $scope.data.currDayTripWrappers) { - $scope.data.currDayTripWrappers.forEach(function(tripgj, tripIndex, array) { - let tripFromLabel = Timeline.getConfirmedTrip(tripgj.data.id); - // Should we just copy over the entry from the label screen - // NO, what if the user changed the labels here, then went to - // the profile and came back. Don't want to lose the upgraded entries - $scope.labelPopulateFactory.copyInputIfNewer(tripFromLabel, tripgj); - }); - } else { - console.log("No trips loaded yet, no inputs to copy over"); - } - }); if($rootScope.barDetail){ readAndUpdateForDay($rootScope.barDetailDate); $rootScope.barDetail = false; diff --git a/www/js/diary/services.js b/www/js/diary/services.js index ab070f537..cf36b9750 100644 --- a/www/js/diary/services.js +++ b/www/js/diary/services.js @@ -2,7 +2,7 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', 'emission.services', 'emission.main.common.services', - 'emission.incident.posttrip.manual']) + 'emission.incident.posttrip.manual', 'emission.tripconfirm.services']) .factory('DiaryHelper', function(CommonGraph, PostTripManualMarker, $translate){ var dh = {}; // dh.expandEarlierOrLater = function(id) { @@ -144,6 +144,29 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', return background; } + dh.getKmph = function(section) { + var metersPerSec = section.properties.distance / section.properties.duration; + return (metersPerSec * 3.6).toFixed(2); + }; + dh.getFormattedDistance = function(dist_in_meters) { + if (dist_in_meters > 1000) { + return (dist_in_meters/1000).toFixed(0); + } else { + return (dist_in_meters/1000).toFixed(3); + } + } + dh.getSectionDetails = function(section) { + var startMoment = moment(section.properties.start_ts * 1000); + var endMoment = moment(section.properties.end_ts * 1000); + var retVal = [startMoment.format('LT'), + endMoment.format('LT'), + endMoment.to(startMoment, true), + formatDistance(section.properties.distance), + tokmph(section.properties.distance, section.properties.duration).toFixed(2), + dh.getHumanReadable(section.properties.sensed_mode)]; + return retVal; + }; + dh.getLocalTimeString = function (dt) { //correcting the date of the processed trips knowing that local_dt months are from 1 -> 12 and for the moment function they need to be between 0 -> 11 let mdt = angular.copy(dt) @@ -242,7 +265,7 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', if (pn == 0) { return 'transparent'; } else if (pn == -1) { - return '#33e0bb'; + return '#1123CB'; } else { return '#ff5251'; } @@ -372,10 +395,120 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', return getColoredStyle(baseDict, dh.getColor(feature.properties.sensed_mode)); }; + var fmtTs = function(ts_in_secs, tz) { + return moment(ts_in_secs * 1000).tz(tz).format(); + } + + var printUserInput = function(ui) { + return fmtTs(ui.data.start_ts, ui.metadata.time_zone) + "("+ui.data.start_ts + ") -> "+ + fmtTs(ui.data.end_ts, ui.metadata.time_zone) + "("+ui.data.end_ts + ")"+ + " " + ui.data.label + " logged at "+ ui.metadata.write_ts; + } + + dh.getUserInputForTrip = function(tripgj, nextTripgj, userInputList) { + if (userInputList.length < 20) { + console.log("Input list = "+userInputList.map(printUserInput)); + } + var tripProp = tripgj.data.properties; + var isDraft = dh.isDraft(tripgj); + var potentialCandidates = userInputList.filter(function(userInput) { + /* + console.log("startDelta "+userInput.data.label+ + "= user("+fmtTs(userInput.data.start_ts, userInput.metadata.time_zone)+ + ") - trip("+fmtTs(userInput.data.start_ts, userInput.metadata.time_zone)+") = "+ + (userInput.data.start_ts - tripProp.start_ts)+" should be positive"); + console.log("endDelta = "+userInput.data.label+ + "user("+fmtTs(userInput.data.end_ts, userInput.metadata.time_zone)+ + ") - trip("+fmtTs(tripProp.end_ts, userInput.metadata.time_zone)+") = "+ + (userInput.data.end_ts - tripProp.end_ts)+" should be negative"); + */ + // logic described in + // https://github.com/e-mission/e-mission-docs/issues/423 + if (isDraft) { + if (userInputList.length < 20) { + var logStr = "Draft trip: comparing user = "+fmtTs(userInput.data.start_ts, userInput.metadata.time_zone) + +" -> "+fmtTs(userInput.data.end_ts, userInput.metadata.time_zone) + +" trip = "+fmtTs(tripProp.start_ts, userInput.metadata.time_zone) + +" -> "+fmtTs(tripProp.end_ts, userInput.metadata.time_zone) + +" checks are ("+(userInput.data.start_ts >= tripProp.start_ts) + +" && "+(userInput.data.start_ts <= tripProp.end_ts) + +" || "+(-(userInput.data.start_ts - tripProp.start_ts) <= 15 * 60) + +") && "+(userInput.data.end_ts <= tripProp.end_ts); + console.log(logStr); + // Logger.log(logStr); + } + return (userInput.data.start_ts >= tripProp.start_ts + && userInput.data.start_ts <= tripProp.end_ts + || -(userInput.data.start_ts - tripProp.start_ts) <= 15 * 60) + && userInput.data.end_ts <= tripProp.end_ts; + } else { + // we know that the trip is cleaned so we can use the fmt_time + // but the confirm objects are not necessarily filled out + if (userInputList.length < 20) { + var logStr = "Cleaned trip: comparing user = " + +fmtTs(userInput.data.start_ts, userInput.metadata.time_zone) + +" -> "+fmtTs(userInput.data.end_ts, userInput.metadata.time_zone) + +" trip = "+tripProp.start_fmt_time + +" -> "+tripProp.end_fmt_time + +" start checks are "+(userInput.data.start_ts >= tripProp.start_ts) + +" && "+(userInput.data.start_ts <= tripProp.end_ts) + +" end checks are "+(userInput.data.end_ts <= tripProp.end_ts) + +" || "+((userInput.data.end_ts - tripProp.end_ts) <= 15 * 60)+")"; + Logger.log(logStr); + } + // https://github.com/e-mission/e-mission-docs/issues/476#issuecomment-747222181 + const startChecks = userInput.data.start_ts >= tripProp.start_ts && + userInput.data.start_ts <= tripProp.end_ts; + var endChecks = (userInput.data.end_ts <= tripProp.end_ts || + (userInput.data.end_ts - tripProp.end_ts) <= 15 * 60); + if (startChecks && !endChecks) { + if (angular.isDefined(nextTripgj)) { + endChecks = userInput.data.end_ts <= nextTripgj.data.properties.start_ts; + Logger.log("Second level of end checks when the next trip is defined("+userInput.data.end_ts+" <= "+ nextTripgj.data.properties.start_ts+") = "+endChecks); + } else { + // next trip is not defined, last trip + endChecks = (userInput.data.end_local_dt.day == userInput.data.start_local_dt.day) + Logger.log("Second level of end checks for the last trip of the day"); + Logger.log("compare "+userInput.data.end_local_dt.day + " with " + userInput.data.start_local_dt.day + " = " + endChecks); + } + if (endChecks) { + // If we have flipped the values, check to see that there + // is sufficient overlap + const overlapDuration = Math.min(userInput.data.end_ts, tripProp.end_ts) - Math.max(userInput.data.start_ts, tripProp.start_ts) + Logger.log("Flipped endCheck, overlap("+overlapDuration+ + ")/trip("+tripProp.duration+") = "+ (overlapDuration / tripProp.duration)); + endChecks = (overlapDuration/tripProp.duration) > 0.5; + } + } + return startChecks && endChecks; + } + }); + if (potentialCandidates.length === 0) { + if (userInputList.length < 20) { + Logger.log("In getUserInputForTripStartEnd, no potential candidates, returning []"); + } + return undefined; + } + + if (potentialCandidates.length === 1) { + Logger.log("In getUserInputForTripStartEnd, one potential candidate, returning "+ printUserInput(potentialCandidates[0])); + return potentialCandidates[0]; + } + + Logger.log("potentialCandidates are "+potentialCandidates.map(printUserInput)); + var sortedPC = potentialCandidates.sort(function(pc1, pc2) { + return pc2.metadata.write_ts - pc1.metadata.write_ts; + }); + var mostRecentEntry = sortedPC[0]; + Logger.log("Returning mostRecentEntry "+printUserInput(mostRecentEntry)); + return mostRecentEntry; + } + + return dh; }) -.factory('Timeline', function(CommHelper, SurveyOptions, $http, $ionicLoading, $window, - $rootScope, CommonGraph, UnifiedDataLoader, Logger, $injector, $translate) { +.factory('Timeline', function(CommHelper, ConfirmHelper, $http, $ionicLoading, $window, + $rootScope, CommonGraph, UnifiedDataLoader, Logger, $translate) { var timeline = {}; // corresponds to the old $scope.data. Contains all state for the current // day, including the indication of the current day @@ -383,9 +516,6 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', timeline.data.unifiedConfirmsResults = null; timeline.UPDATE_DONE = "TIMELINE_UPDATE_DONE"; - const surveyOpt = SurveyOptions.MULTILABEL; - const manualInputFactory = $injector.get(surveyOpt.service); - // Internal function, not publicly exposed var getKeyForDate = function(date) { var dateString = date.startOf('day').format('YYYY-MM-DD'); @@ -402,13 +532,15 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', startTs: result.end_ts - 10, endTs: moment().unix() + 10 } - var manualPromises = manualInputFactory.MANUAL_KEYS.map(function(inp_key) { + var manualPromises = ConfirmHelper.INPUTS.map(function(inp) { return UnifiedDataLoader.getUnifiedMessagesForInterval( - inp_key, pendingLabelQuery).then(manualInputFactory.extractResult); + ConfirmHelper.inputDetails[inp].key, pendingLabelQuery); }); - const manualConfirmResults = {}; return Promise.all(manualPromises).then((manualResults) => { - manualInputFactory.processManualInputs(manualResults, manualConfirmResults); + const manualConfirmResults = {}; + manualResults.forEach(function(mr, index) { + manualConfirmResults[ConfirmHelper.INPUTS[index]] = mr; + }); return [result, manualConfirmResults]; }); }).catch((err) => { @@ -428,11 +560,7 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', return Promise.all(readPromises) .then(([ctList]) => { $ionicLoading.hide(); - return ctList.phone_data.map((ct) => { - const retVal = ct.data; - retVal.id = ct._id["$oid"]; - return retVal; - }); + return ctList.phone_data.map((ct) => ct.data); }) .catch((err) => { Logger.displayError("while reading confirmed trips", err); @@ -505,7 +633,7 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', +" end of current day = " +eod+"("+moment.unix(eod).toString()+")" +" retVal = "+retVal); - return [result.complete_ts, retVal]; + return retVal; }); } @@ -712,10 +840,6 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', start_local_dt: moment2localdate(startMoment), start_ts: startPoint.data.ts, times: times, - inferred_labels: [], - expectation: 0, - confidence_threshold: 0, - user_input: {}, trip_id: {$oid: tripAndSectionId} } } @@ -755,9 +879,6 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', } timeline.confirmedTrip2Geojson = function(trip) { - if (trip == undefined) { - return Promise.resolve(undefined); - } Logger.log("About to pull location data for range " + moment.unix(trip.start_ts).toString() + " -> " + moment.unix(trip.end_ts).toString()); @@ -841,10 +962,6 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', id: section_gj.features[0].id, type: "FeatureCollection", features: features, - inferred_labels: [], - expectation: 0, - confidence_threshold: 0, - user_input: {}, properties: angular.copy(section_gj.features[0].properties) } @@ -988,8 +1105,34 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', var localCacheReadFn = timeline.updateFromDatabase; - var addUnprocessedTrips = function(processedTripList, day, completeStatus) { + // Functions + timeline.updateForDay = function(day) { // currDay is a moment + // First, we try the server + var tripsFromServerPromise = timeline.updateFromServer(day); + var isProcessingCompletePromise = timeline.isProcessingComplete(day); + + // Also mode/purpose and (currently disabled) survey answers + var tq = $window.cordova.plugins.BEMUserCache.getAllTimeQuery(); + var manualPromises = ConfirmHelper.INPUTS.map(function(inp) { + return UnifiedDataLoader.getUnifiedMessagesForInterval( + ConfirmHelper.inputDetails[inp].key, tq); + }); + // var surveyAnswersPromise = EnketoSurvey.getAllSurveyAnswers("manual/confirm_survey", { populateLabels: true }); + + // Deal with all the trip retrieval + Promise.all([tripsFromServerPromise, isProcessingCompletePromise].concat(manualPromises)) + .then(function([processedTripList, completeStatus, ...manualResults]) { + console.log("Promise.all() finished successfully with length " + +processedTripList.length+" completeStatus = "+completeStatus); + var mrString = 'with ' + manualResults.map(function(item, index) { + return ' ${mr.length} ${ConfirmHelper.INPUTS[index]}'; + }); + console.log(mrString); var tripList = processedTripList; + timeline.data.unifiedConfirmsResults = {} + manualResults.forEach(function(mr, index) { + timeline.data.unifiedConfirmsResults[ConfirmHelper.INPUTS[index]] = mr; + }); if (!completeStatus) { return timeline.readUnprocessedTrips(day, processedTripList) .then(function(unprocessedTripList) { @@ -1002,75 +1145,54 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', } else { return tripList; } - } - - var readTripsAndUnprocessedInputs = function(day, tripReadFn, completeStatus, tq) { - console.log("Reading values for list ", manualInputFactory.MANUAL_KEYS); - var manualPromises = manualInputFactory.MANUAL_KEYS.map(function(inp_key) { - return UnifiedDataLoader.getUnifiedMessagesForInterval( - inp_key, tq).then(manualInputFactory.extractResult); - }); - let tripsReadPromise = tripReadFn(day); - timeline.data.unifiedConfirmsResults = {}; - let allManualPromise = Promise.all(manualPromises).then((manualResults) => - manualInputFactory.processManualInputs(manualResults, timeline.data.unifiedConfirmsResults)); - - let allTripsPromise = tripsReadPromise.then((processedTripList) => { - console.log("Reading trips from server finished successfully with length " - +processedTripList.length+" completeStatus = "+completeStatus); - return addUnprocessedTrips(processedTripList, day, completeStatus); - }).then((combinedTripList) => processOrDisplayNone(day, combinedTripList)); - return Promise.all([allManualPromise, allTripsPromise]).then(() => { - console.log("Finished reading processed/unprocessed trips with length " - +timeline.data.currDayTrips.length); - }); - } - - // Functions - timeline.updateForDay = function(day) { // currDay is a moment - // First, we try the server - var isProcessingCompletePromise = timeline.isProcessingComplete(day); + }).then(function(combinedTripList) { + processOrDisplayNone(day, combinedTripList); + }).catch(function(error) { + // If there is any error reading from the server, we fallback on the local cache + Logger.log("while reading data from server for "+day +" error = "+JSON.stringify(error)); + console.log("About to hide loading overlay"); + $ionicLoading.hide(); - // First get the pipeline complete timestamp - isProcessingCompletePromise.then(([completeTs, completeStatus]) => { - // then, in parallel, read unprocessed user inputs - // and trips - // Also mode/purpose and (currently disabled) survey answers - var pendingTq = { - key: "write_ts", - startTs: completeTs, - endTs: moment().unix() - }; - readTripsAndUnprocessedInputs(day, timeline.updateFromServer, - completeStatus, pendingTq) - .catch(function(error) { - // If there is any error reading from the server, we fallback on the local cache - Logger.log("while reading data from server for "+day +" error = "+JSON.stringify(error)); - console.log("About to hide loading overlay"); - $ionicLoading.hide(); + var tripsFromCachePromise = localCacheReadFn(day); - // Also mode/purpose and (currently disabled) survey answers - let allTq = $window.cordova.plugins.BEMUserCache.getAllTimeQuery(); - readTripsAndUnprocessedInputs(day, localCacheReadFn, undefined, allTq) - .catch(function(error) { - console.log("About to hide loading overlay"); - $ionicLoading.hide(); - Logger.displayError("while reading data from cache for "+day, error); - }) + // Also mode/purpose and (currently disabled) survey answers + var tq = $window.cordova.plugins.BEMUserCache.getAllTimeQuery(); + var manualPromises = ConfirmHelper.INPUTS.map(function(inp) { + return UnifiedDataLoader.getUnifiedMessagesForInterval( + ConfirmHelper.inputDetails[inp].key, tq); }); - }); + Promise.all([tripsFromCachePromise].concat(manualPromises)).then(function( + [processedTripList, ...manualResults]) { + console.log(' in local cache, found ${modes.length} modes, ${purposes.length} purposes'); + var tripList = processedTripList; + timeline.data.unifiedConfirmsResults = {} + manualResults.forEach(function(mr, index) { + timeline.data.unifiedConfirmsResults[ConfirmHelper.INPUTS[index]] = mr; + }); + return timeline.readUnprocessedTrips(day, processedTripList) + .then(function(unprocessedTripList) { + Logger.log("tripList.length = "+tripList.length + +"unprocessedTripList.length = "+unprocessedTripList.length); + Array.prototype.push.apply(tripList, unprocessedTripList); + console.log("After merge, returning trip list of size "+tripList.length); + return tripList; + }) + }).then(function(combinedTripList) { + processOrDisplayNone(day, combinedTripList); + }).catch(function(error) { + console.log("About to hide loading overlay"); + $ionicLoading.hide(); + Logger.displayError("while reading data from cache for "+day, error); + }) + }); } timeline.getTrip = function(tripId) { - return angular.isDefined(timeline.data.tripMap)? timeline.data.tripMap[tripId] : undefined; + return timeline.data.tripMap[tripId]; }; timeline.getTripWrapper = function(tripId) { - return angular.isDefined(timeline.data.tripWrapperMap)? timeline.data.tripWrapperMap[tripId] : undefined; - }; - - timeline.getConfirmedTrip = function(tripId) { - return angular.isDefined(timeline.data.infScrollConfirmedTripMap)? timeline.data.infScrollConfirmedTripMap[tripId] : undefined; + return timeline.data.tripWrapperMap[tripId]; }; /* @@ -1154,16 +1276,6 @@ angular.module('emission.main.diary.services', ['emission.plugin.logger', }); } - timeline.setInfScrollConfirmedTripList = function(confirmedTripList) { - timeline.data.infScrollConfirmedTripList = confirmedTripList; - - timeline.data.infScrollConfirmedTripMap = {}; - - timeline.data.infScrollConfirmedTripList.forEach(function(trip, index, array) { - timeline.data.infScrollConfirmedTripMap[trip.id] = trip; - }); - } - // TODO: Should this be in the factory or in the scope? var generateDaySummary = function() { var dayMovingTime = 0; diff --git a/www/js/goals.js b/www/js/goals.js index 8261b2fc0..9bed3b80b 100644 --- a/www/js/goals.js +++ b/www/js/goals.js @@ -2,7 +2,7 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logger', 'emission.plugin.kvstore', - 'emission.survey.external.launch', + 'emission.survey.launch', 'ngSanitize', 'ngAnimate', 'emission.splash.referral', 'ng-walkthrough', 'nzTour']) diff --git a/www/js/heatmap.js b/www/js/heatmap.js index 0a8adaf40..6e04814c3 100644 --- a/www/js/heatmap.js +++ b/www/js/heatmap.js @@ -87,10 +87,10 @@ angular.module('emission.main.heatmap',['ui-leaflet', 'emission.services', */ $scope.modeOptions = [ - {text: $translate.instant('main-heatmap.all'), value:null}, + // {text: $translate.instant('main-heatmap.all'), value:null}, {text: $translate.instant('main-heatmap.none'), value:[]}, - {text: $translate.instant('main-heatmap.bicycling'), value:["BICYCLING"]}, - {text: $translate.instant('main-heatmap.walking'), value:["WALKING", "ON_FOOT"]}, + // {text: $translate.instant('main-heatmap.bicycling'), value:["BICYCLING"]}, + // {text: $translate.instant('main-heatmap.walking'), value:["WALKING", "ON_FOOT"]}, {text: $translate.instant('main-heatmap.in-vehicle'), value:["IN_VEHICLE"]} ]; diff --git a/www/js/i18n-utils.js b/www/js/i18n-utils.js index 8d06c7ece..82e57150d 100644 --- a/www/js/i18n-utils.js +++ b/www/js/i18n-utils.js @@ -22,12 +22,14 @@ angular.module('emission.i18n.utils', []) var defaultVal = defaultPath + fpFirstPart + fpSecondPart; if (lang != 'en') { var url = i18nPath + fpFirstPart + "-" + lang + fpSecondPart; + return Promise.resolve(url); + // Following code would be nice to have, but it seems broken. return $http.get(url).then( function(result){ - Logger.log(window.Logger.LEVEL_DEBUG, + window.Logger.log(window.Logger.LEVEL_DEBUG, "Successfully found the "+url+", result is " + JSON.stringify(result.data).substring(0,10)); return url; }).catch(function (err) { - Logger.log(window.Logger.LEVEL_DEBUG, + window.Logger.log(window.Logger.LEVEL_DEBUG, url+" file not found, loading english version, error is " + JSON.stringify(err)); return Promise.resolve(defaultVal); }); diff --git a/www/js/intro.js b/www/js/intro.js index 3affb838d..88b6c97ed 100644 --- a/www/js/intro.js +++ b/www/js/intro.js @@ -1,238 +1,289 @@ -'use strict'; - -angular.module('emission.intro', ['emission.splash.startprefs', - 'emission.splash.updatecheck', - 'emission.survey.enketo.demographics', - 'emission.appstatus.permissioncheck', - 'emission.i18n.utils', - 'ionic-toast']) - -.config(function($stateProvider) { - $stateProvider - // setup an abstract state for the intro directive - .state('root.intro', { - url: '/intro', - templateUrl: 'templates/intro/intro.html', - controller: 'IntroCtrl' - }) - .state('root.reconsent', { - url: '/reconsent', - templateUrl: 'templates/intro/reconsent.html', - controller: 'IntroCtrl' - }); -}) - -.controller('IntroCtrl', function($scope, $rootScope, $state, $window, - $ionicPlatform, $ionicSlideBoxDelegate, - $ionicPopup, $ionicHistory, ionicToast, $timeout, CommHelper, StartPrefs, SurveyLaunch, UpdateCheck, i18nUtils) { - - var allIntroFiles = Promise.all([ - i18nUtils.geti18nFileName("templates/", "intro/summary", ".html"), - i18nUtils.geti18nFileName("templates/", "intro/consent", ".html"), - i18nUtils.geti18nFileName("templates/", "intro/sensor_explanation", ".html"), - i18nUtils.geti18nFileName("templates/", "intro/login", ".html"), - i18nUtils.geti18nFileName("templates/", "intro/survey", ".html") - ]); - allIntroFiles.then(function(allIntroFilePaths) { - $scope.$apply(function() { - console.log("intro files are "+allIntroFilePaths); - $scope.summaryFile = allIntroFilePaths[0]; - $scope.consentFile = allIntroFilePaths[1]; - $scope.explainFile = allIntroFilePaths[2]; - $scope.loginFile = allIntroFilePaths[3]; - $scope.surveyFile = allIntroFilePaths[4]; - }); - }); - - $scope.getIntroBox = function() { - return $ionicSlideBoxDelegate.$getByHandle('intro-box'); - }; - - $scope.stopSliding = function() { - $scope.getIntroBox().enableSlide(false); - }; - - $scope.showSettings = function() { - window.cordova.plugins.BEMConnectionSettings.getSettings().then(function(settings) { - var errorMsg = JSON.stringify(settings); - var alertPopup = $ionicPopup.alert({ - title: 'settings', - template: errorMsg - }); +"use strict"; - alertPopup.then(function(res) { - $scope.next(); - }); - }, function(error) { - $scope.alertError('getting settings', error); - }); - }; - - $scope.overallStatus = false; - - // Adapted from https://stackoverflow.com/a/63363662/4040267 - // made available under a CC BY-SA 4.0 license - - $scope.generateRandomToken = function(length) { - var randomInts = window.crypto.getRandomValues(new Uint8Array(length * 2)); - var randomChars = Array.from(randomInts).map((b) => String.fromCharCode(b)); - var randomString = randomChars.join(""); - var validRandomString = window.btoa(randomString).replace(/[+/]/g, ""); - return validRandomString.substring(0, length); - } - - $scope.disagree = function() { - $state.go('root.main.heatmap'); - }; - - $scope.agree = function() { - $scope.randomToken = $scope.generateRandomToken(16); - window.Logger.log("Signing in with random token "+$scope.randomToken); - - StartPrefs.markConsented().then(function(response) { - $ionicHistory.clearHistory(); - if ($state.is('root.intro')) { - $scope.next(); - } else { - StartPrefs.loadPreferredScreen(); - } - }); - }; - - $scope.next = function() { - $scope.getIntroBox().next(); - }; - - $scope.previous = function() { - $scope.getIntroBox().previous(); - }; - - $scope.alertError = function(title, errorResult) { - var errorMsg = JSON.stringify(errorResult); - var alertPopup = $ionicPopup.alert({ - title: title, - template: errorMsg - }); +angular + .module("emission.intro", [ + "emission.splash.startprefs", + "emission.splash.updatecheck", + 'emission.appstatus.permissioncheck', + "emission.i18n.utils", + "ionic-toast", + ]) - alertPopup.then(function(res) { - window.Logger.log(window.Logger.LEVEL_INFO, errorMsg + ' ' + res); + .config(function ($stateProvider) { + $stateProvider + // setup an abstract state for the intro directive + .state("root.intro", { + url: "/intro", + templateUrl: "templates/intro/intro.html", + controller: "IntroCtrl", + }) + .state("root.reconsent", { + url: "/reconsent", + templateUrl: "templates/intro/reconsent.html", + controller: "IntroCtrl", }); - } - - $scope.loginNew = function() { - $scope.login($scope.randomToken); - }; - - $scope.typeExisting = function() { - $scope.data = {}; - const tokenPopup = $ionicPopup.show({ - template: '', - title: 'Enter the existing token that you have', - scope: $scope, - buttons: [ - { - text: 'OK', - type: 'button-positive', - onTap: function(e) { - if (!$scope.data.existing_token) { - //don't allow the user to close unless he enters a username - - e.preventDefault(); - } else { - return $scope.data.existing_token; - } - } - },{ - text: 'Cancel', - type: 'button-stable', - onTap: function(e) { - return null; - } + }) + + .controller( + "IntroCtrl", + function ( + $scope, + $rootScope, + $state, + $window, + $ionicPlatform, + $ionicSlideBoxDelegate, + $ionicPopup, + $ionicHistory, + ionicToast, + $timeout, + CommHelper, + StartPrefs, + SurveyLaunch, + UpdateCheck, + $translate, + i18nUtils + ) { + $scope.setupPermissionText = function () { + $scope.platform = $window.device.platform; + $scope.osver = $window.device.version.split(".")[0]; + if ($scope.platform.toLowerCase() == "android") { + if ($scope.osver < 6) { + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-android-lt-6" + ); + } else if ($scope.osver < 10) { + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-android-6-9" + ); + } else if ($scope.osver < 11) { + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-android-10" + ); + } else { + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-android-gte-11" + ); } - ] - }); - tokenPopup.then(function(token) { - if (token != null) { - $scope.login(token); } - }).catch(function(err) { - $scope.alertError(err); - }); - }; - - $scope.scanExisting = function() { - const EXPECTED_PREFIX = "emission://login_token?token="; - cordova.plugins.barcodeScanner.scan( - function (result) { - if (result.format == "QR_CODE" && - result.cancelled == false && - result.text.startsWith(EXPECTED_PREFIX)) { - const extractedToken = result.text.substring(EXPECTED_PREFIX.length, result.length); - Logger.log("From QR code, extracted token "+extractedToken); - $scope.login(extractedToken); + + if ($scope.platform.toLowerCase() == "ios") { + if ($scope.osver < 13) { + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-ios-lt-13" + ); } else { - $ionicPopup.alert({template: "invalid token format"+result.text}); + $scope.locationPermExplanation = $translate.instant( + "intro.permissions.locationPermExplanation-ios-gte-13" + ); } - }, - function (error) { - $ionicPopup.alert({template: "Scanning failed: " + error}); + } + + $scope.backgroundRestricted = false; + if ($window.device.manufacturer.toLowerCase() == "samsung") { + $scope.backgroundRestricted = true; + $scope.allowBackgroundInstructions = $translate.instant( + "intro.allow_background.samsung" + ); + } + + $scope.fitnessPermNeeded = + $scope.platform.toLowerCase() == "ios" || + ($scope.platform.toLowerCase() == "android" && $scope.osver >= 10); + + console.log("Explanation = " + $scope.locationPermExplanation); + }; + + var allIntroFiles = Promise.all([ + i18nUtils.geti18nFileName("templates/", "intro/summary", ".html"), + i18nUtils.geti18nFileName("templates/", "intro/consent", ".html"), + i18nUtils.geti18nFileName( + "templates/", + "intro/sensor_explanation", + ".html" + ), + i18nUtils.geti18nFileName("templates/", "intro/login", ".html"), + ]); + allIntroFiles.then(function (allIntroFilePaths) { + $scope.$apply(function () { + console.log("intro files are " + allIntroFilePaths); + $scope.summaryFile = allIntroFilePaths[0]; + $scope.consentFile = allIntroFilePaths[1]; + $scope.explainFile = allIntroFilePaths[2]; + $scope.loginFile = allIntroFilePaths[3]; + }); }); - }; - - $scope.login = function(token) { - window.cordova.plugins.BEMJWTAuth.setPromptedAuthToken(token).then(function(userEmail) { - // ionicToast.show(message, position, stick, time); - // $scope.next(); - ionicToast.show(userEmail, 'middle', false, 2500); - if (userEmail == "null" || userEmail == "") { - $scope.alertError("Invalid login "+userEmail); - } else { - CommHelper.registerUser(function(successResult) { - UpdateCheck.getChannel().then(function(retVal) { - CommHelper.updateUser({ - client: retVal + + $scope.getIntroBox = function () { + return $ionicSlideBoxDelegate.$getByHandle("intro-box"); + }; + + $scope.stopSliding = function () { + $scope.getIntroBox().enableSlide(false); + }; + + $scope.showSettings = function () { + window.cordova.plugins.BEMConnectionSettings.getSettings().then( + function (settings) { + var errorMsg = JSON.stringify(settings); + var alertPopup = $ionicPopup.alert({ + title: "settings", + template: errorMsg, + }); + + alertPopup.then(function (res) { + $scope.next(); }); - }); - $scope.next(); - }, function(errorResult) { - $scope.alertError('User registration error', errorResult); + }, + function (error) { + $scope.alertError("getting settings", error); + } + ); + }; + + $scope.generateRandomToken = function (length) { + var randomInts = window.crypto.getRandomValues( + new Uint8Array(length * 2) + ); + var randomChars = Array.from(randomInts).map((b) => + String.fromCharCode(b) + ); + var randomString = randomChars.join(""); + var validRandomString = window.btoa(randomString).replace(/[+/]/g, ""); + return validRandomString.substring(0, length); + }; + + $scope.disagree = function () { + $scope.getIntroBox().previous(); + }; + + $scope.agree = function () { + StartPrefs.markConsented().then(function (response) { + $ionicHistory.clearHistory(); + if ($state.is("root.intro")) { + $scope.loginNew(); + } else { + StartPrefs.loadPreferredScreen(); + } }); - } - }, function(error) { - $scope.alertError('Sign in error', error); - }); - }; - - // Called each time the slide changes - $scope.slideChanged = function(index) { - $scope.slideIndex = index; - /* - * The slidebox is created as a child of the HTML page that this controller - * is associated with, so it is not available when the controller is created. - * There is an onLoad, but it is for ng-include, not for random divs, apparently. - * Trying to create a new controller complains because then both the - * directive and the controller are trying to ask for a new scope. - * So instead, I turn off swiping after the initial summary is past. - * Since the summary is not legally binding, it is fine to swipe past it... - */ - if (index > 0) { - $scope.getIntroBox().enableSlide(false); - } - }; - - $scope.finish = function() { - // this is not a promise, so we don't need to use .then - StartPrefs.markIntroDone(); - $scope.getIntroBox().slide(0); - StartPrefs.loadPreferredScreen(); - // remove this view since the intro is done - // when we go back to the intro state, it will be recreated - $("[state='root.intro']").remove(); - $scope.$destroy(); - } - - $ionicPlatform.ready().then(function() { - console.log("app is launched, currently NOP"); - }); -}); + }; + + $scope.startSurvey = function () { + const frenchForm = { + userIdElementId: "wpforms-25100-field_14", + url: "https://fabmobqc.ca/nos-donnees-en-mobilite/ma-mobilite/questionnaire-ma-mobilite/", + }; + + const englishForm = { + userIdElementId: "wpforms-25278-field_14", + url: "https://fabmobqc.ca/en/our-mobility-data/my-mobility/my-mobility-questionnaire/", + }; + + const form = ((language) => { + switch (language) { + case "fr": + return frenchForm; + case "en": + return englishForm; + default: + return englishForm; + } + })($translate.use()); + + CommHelper.getUser().then(function (userProfile) { + const fillers = [ + { + elementId: form.userIdElementId, + elementValue: userProfile.user_id["$uuid"], + }, + ]; + + SurveyLaunch.startSurveyPrefilled(form.url, fillers); + }); + }; + $scope.next = function () { + $scope.getIntroBox().next(); + }; + + $scope.previous = function () { + $scope.getIntroBox().previous(); + }; + + $scope.alertError = function (title, errorResult) { + var errorMsg = JSON.stringify(errorResult); + var alertPopup = $ionicPopup.alert({ + title: title, + template: errorMsg, + }); + + alertPopup.then(function (res) { + window.Logger.log(window.Logger.LEVEL_INFO, errorMsg + " " + res); + }); + }; + + $scope.loginNew = function () { + $scope.randomToken = $scope.generateRandomToken(16); + $scope.login($scope.randomToken); + }; + + $scope.login = function (token) { + window.cordova.plugins.BEMJWTAuth.setPromptedAuthToken(token).then( + function (userEmail) { + // ionicToast.show(message, position, stick, time); + // $scope.next(); + ionicToast.show(userEmail, "middle", false, 2500); + if (userEmail == "null" || userEmail == "") { + $scope.alertError("Invalid login " + userEmail); + } else { + CommHelper.registerUser( + function (successResult) { + UpdateCheck.getChannel().then(function (retVal) { + CommHelper.updateUser({ + client: retVal, + }); + }); + $scope.startSurvey(); + $scope.finish(); + }, + function (errorResult) { + $scope.alertError("User registration error", errorResult); + } + ); + } + }, + function (error) { + $scope.alertError("Sign in error", error); + } + ); + }; + + // Called each time the slide changes + $scope.slideChanged = function (index) { + $scope.slideIndex = index; + /* + * The slidebox is created as a child of the HTML page that this controller + * is associated with, so it is not available when the controller is created. + * There is an onLoad, but it is for ng-include, not for random divs, apparently. + * Trying to create a new controller complains because then both the + * directive and the controller are trying to ask for a new scope. + * So instead, I turn off swiping after the initial summary is past. + * Since the summary is not legally binding, it is fine to swipe past it... + */ + if (index > 0) { + $scope.getIntroBox().enableSlide(false); + } + }; + + $scope.finish = function () { + // this is not a promise, so we don't need to use .then + StartPrefs.markIntroDone(); + $scope.getIntroBox().slide(0); + StartPrefs.loadPreferredScreen(); + }; + + $ionicPlatform.ready().then(function () { + $scope.setupPermissionText(); + }); + } + ); diff --git a/www/js/main.js b/www/js/main.js index 1c986b22d..1b0a0d7af 100644 --- a/www/js/main.js +++ b/www/js/main.js @@ -7,7 +7,7 @@ angular.module('emission.main', ['emission.main.recent', 'emission.main.common', 'emission.main.heatmap', 'emission.main.metrics', - 'emission.survey.multilabel.posttrip.map', + 'emission.tripconfirm.posttrip.map', 'emission.services', 'emission.services.upload']) @@ -54,9 +54,6 @@ angular.module('emission.main', ['emission.main.recent', .state('root.main.control', { url: '/control', - params: { - launchAppStatusModal: false - }, views: { 'main-control': { templateUrl: 'templates/control/main-control.html', @@ -135,6 +132,7 @@ angular.module('emission.main', ['emission.main.recent', $ionicConfigProvider.tabs.style('standard') $ionicConfigProvider.tabs.position('bottom'); + $ionicConfigProvider.navBar.alignTitle('center'); }) .controller('appCtrl', function($scope, $ionicModal, $timeout) { @@ -160,4 +158,6 @@ angular.module('emission.main', ['emission.main.recent', $scope.tabsCustomClass = function() { return "tabs-icon-top tabs-custom"; } + + }); diff --git a/www/js/metrics-factory.js b/www/js/metrics-factory.js index c762da72f..f0207c834 100644 --- a/www/js/metrics-factory.js +++ b/www/js/metrics-factory.js @@ -1,35 +1,18 @@ 'use strict'; -angular.module('emission.main.metrics.factory', - ['emission.main.metrics.mappings', - 'emission.plugin.kvstore']) +angular.module('emission.main.metrics.factory', ['emission.services', 'emission.plugin.kvstore']) -.factory('FootprintHelper', function(CarbonDatasetHelper, CustomDatasetHelper) { +.factory('FootprintHelper', function(CarbonDatasetHelper) { var fh = {}; - var highestFootprint = 0; - var mtokm = function(v) { return v / 1000; } - fh.useCustom = false; - - fh.setUseCustomFootprint = function () { - fh.useCustom = true; - } - - fh.getFootprint = function() { - if (this.useCustom == true) { - return CustomDatasetHelper.getCustomFootprint(); - } else { - return CarbonDatasetHelper.getCurrentCarbonDatasetFootprint(); - } - } fh.readableFormat = function(v) { return v > 999? Math.round(v / 1000) + 'k kg CO₂' : Math.round(v) + ' kg CO₂'; } - fh.getFootprintForMetrics = function(userMetrics, defaultIfMissing=0) { - var footprint = fh.getFootprint(); + fh.getFootprintForMetrics = function(userMetrics) { + var footprint = CarbonDatasetHelper.getCurrentCarbonDatasetFootprint(); var result = 0; for (var i in userMetrics) { var mode = userMetrics[i].key; @@ -44,13 +27,12 @@ angular.module('emission.main.metrics.factory', } else { console.warn('WARNING FootprintHelper.getFootprintFromMetrics() was requested for an unknown mode: ' + mode + " metrics JSON: " + JSON.stringify(userMetrics)); - result += defaultIfMissing * mtokm(userMetrics[i].values); } } return result; } fh.getLowestFootprintForDistance = function(distance) { - var footprint = fh.getFootprint(); + var footprint = CarbonDatasetHelper.getCurrentCarbonDatasetFootprint(); var lowestFootprint = Number.MAX_SAFE_INTEGER; for (var mode in footprint) { if (mode == 'WALKING' || mode == 'BICYCLING') { @@ -62,103 +44,21 @@ angular.module('emission.main.metrics.factory', } return lowestFootprint * mtokm(distance); } - - fh.getHighestFootprint = function() { - if (!highestFootprint) { - var footprint = fh.getFootprint(); - let footprintList = []; - for (var mode in footprint) { - footprintList.push(footprint[mode]); - } - highestFootprint = Math.max(...footprintList); - } - return highestFootprint; - } - fh.getHighestFootprintForDistance = function(distance) { - return fh.getHighestFootprint() * mtokm(distance); - } - - var getLowestMotorizedNonAirFootprint = function(footprint, rlmCO2) { - var lowestFootprint = Number.MAX_SAFE_INTEGER; + var footprint = CarbonDatasetHelper.getCurrentCarbonDatasetFootprint(); + var highestFootprint = 0; for (var mode in footprint) { - if (mode == 'AIR_OR_HSR' || mode == 'air') { - console.log("Air mode, ignoring"); - } - else { - if (footprint[mode] == 0 || footprint[mode] <= rlmCO2) { - console.log("Non motorized mode or footprint <= range_limited_motorized", mode, footprint[mode], rlmCO2); - } else { - lowestFootprint = Math.min(lowestFootprint, footprint[mode]); - } - } + highestFootprint = Math.max(highestFootprint, footprint[mode]); } - return lowestFootprint; + return highestFootprint * mtokm(distance); } - - fh.getOptimalDistanceRanges = function() { - const FIVE_KM = 5 * 1000; - const SIX_HUNDRED_KM = 600 * 1000; - if (!fh.useCustom) { - const defaultFootprint = CarbonDatasetHelper.getCurrentCarbonDatasetFootprint(); - const lowestMotorizedNonAir = getLowestMotorizedNonAirFootprint(defaultFootprint); - const airFootprint = defaultFootprint["AIR_OR_HSR"]; - return [ - {low: 0, high: FIVE_KM, optimal: 0}, - {low: FIVE_KM, high: SIX_HUNDRED_KM, optimal: lowestMotorizedNonAir}, - {low: SIX_HUNDRED_KM, high: Number.MAX_VALUE, optimal: airFootprint}]; - } else { - // custom footprint, let's get the custom values - const customFootprint = CustomDatasetHelper.getCustomFootprint(); - let airFootprint = customFootprint["air"] - if (!airFootprint) { - // 2341 BTU/PMT from - // https://tedb.ornl.gov/wp-content/uploads/2021/02/TEDB_Ed_39.pdf#page=68 - // 159.25 lb per million BTU from EIA - // https://www.eia.gov/environment/emissions/co2_vol_mass.php - // (2341 * (159.25/1000000))/(1.6*2.2) = 0.09975, rounded up a bit - console.log("No entry for air in ", customFootprint," using default"); - airFootprint = 0.1; - } - const rlm = CustomDatasetHelper.range_limited_motorized; - if (!rlm) { - return [ - {low: 0, high: FIVE_KM, optimal: 0}, - {low: FIVE_KM, high: SIX_HUNDRED_KM, optimal: lowestMotorizedNonAir}, - {low: SIX_HUNDRED_KM, high: Number.MAX_VALUE, optimal: airFootprint}]; - } else { - console.log("Found range_limited_motorized mode", rlm); - const lowestMotorizedNonAir = getLowestMotorizedNonAirFootprint(customFootprint, rlm.co2PerMeter); - return [ - {low: 0, high: FIVE_KM, optimal: 0}, - {low: FIVE_KM, high: rlm.range_limit_km * 1000, optimal: rlm.co2PerMeter}, - {low: rlm.range_limit_km * 1000, high: SIX_HUNDRED_KM, optimal: lowestMotorizedNonAir}, - {low: SIX_HUNDRED_KM, high: Number.MAX_VALUE, optimal: airFootprint}]; - } - } - } - return fh; }) -.factory('CalorieCal', function(KVStore, METDatasetHelper, CustomDatasetHelper) { +.factory('CalorieCal', function(KVStore){ var cc = {}; - var highestMET = 0; var USER_DATA_KEY = "user-data"; - cc.useCustom = false; - - cc.setUseCustomFootprint = function () { - cc.useCustom = true; - } - - cc.getMETs = function() { - if (this.useCustom == true) { - return CustomDatasetHelper.getCustomMETs(); - } else { - return METDatasetHelper.getStandardMETs(); - } - } cc.set = function(info) { return KVStore.set(USER_DATA_KEY, info); @@ -172,33 +72,18 @@ angular.module('emission.main.metrics.factory', Number.prototype.between = function (min, max) { return this >= min && this <= max; }; - cc.getHighestMET = function() { - if (!highestMET) { - var met = cc.getMETs(); - let metList = []; - for (var mode in met) { - var rangeList = met[mode]; - for (var range in rangeList) { - metList.push(rangeList[range].mets); - } - } - highestMET = Math.max(...metList); - } - return highestMET; - } - cc.getMet = function(mode, speed, defaultIfMissing) { + cc.getMet = function(mode, speed) { if (mode == 'ON_FOOT') { console.log("CalorieCal.getMet() converted 'ON_FOOT' to 'WALKING'"); mode = 'WALKING'; } - let currentMETs = cc.getMETs(); - if (!currentMETs[mode]) { - console.warn("CalorieCal.getMet() Illegal mode: " + mode); - return defaultIfMissing; //So the calorie sum does not break with wrong return type + if (!standardMETs[mode]) { + console.log("CalorieCal.getMet() Illegal mode: " + mode); + return 0; //So the calorie sum does not break with wrong return type } - for (var i in currentMETs[mode]) { - if (mpstomph(speed).between(currentMETs[mode][i].range[0], currentMETs[mode][i].range[1])) { - return currentMETs[mode][i].mets; + for (var i in standardMETs[mode]) { + if (mpstomph(speed).between(standardMETs[mode][i].range[0], standardMETs[mode][i].range[1])) { + return standardMETs[mode][i].mets; } else if (mpstomph(speed) < 0 ) { console.log("CalorieCal.getMet() Negative speed: " + mpstomph(speed)); return 0; @@ -231,5 +116,128 @@ angular.module('emission.main.metrics.factory', cc.getCalories = function(weightInKg, durationInMin, met) { return weightInKg * durationInMin * met; } + var standardMETs = { + "WALKING": { + "VERY_SLOW": { + range: [0, 2.0], + mets: 2.0 + }, + "SLOW": { + range: [2.0, 2.5], + mets: 2.8 + }, + "MODERATE_0": { + range: [2.5, 2.8], + mets: 3.0 + }, + "MODERATE_1": { + range: [2.8, 3.2], + mets: 3.5 + }, + "FAST": { + range: [3.2, 3.5], + mets: 4.3 + }, + "VERY_FAST_0": { + range: [3.5, 4.0], + mets: 5.0 + }, + "VERY_FAST_!": { + range: [4.0, 4.5], + mets: 6.0 + }, + "VERY_VERY_FAST": { + range: [4.5, 5], + mets: 7.0 + }, + "SUPER_FAST": { + range: [5, 6], + mets: 8.3 + }, + "RUNNING": { + range: [6, Number.MAX_VALUE], + mets: 9.8 + } + }, + "BICYCLING": { + "VERY_VERY_SLOW": { + range: [0, 5.5], + mets: 3.5 + }, + "VERY_SLOW": { + range: [5.5, 10], + mets: 5.8 + }, + "SLOW": { + range: [10, 12], + mets: 6.8 + }, + "MODERATE": { + range: [12, 14], + mets: 8.0 + }, + "FAST": { + range: [14, 16], + mets: 10.0 + }, + "VERT_FAST": { + range: [16, 19], + mets: 12.0 + }, + "RACING": { + range: [20, Number.MAX_VALUE], + mets: 15.8 + } + }, + "IN_VEHICLE": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "CAR": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "BUS": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "LIGHT_RAIL": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "TRAIN": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "TRAM": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "SUBWAY": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + }, + "AIR_OR_HSR": { + "ALL": { + range: [0, Number.MAX_VALUE], + mets: 0 + } + } + } return cc; + }); diff --git a/www/js/metrics.js b/www/js/metrics.js index 19d10f254..f060ae92e 100644 --- a/www/js/metrics.js +++ b/www/js/metrics.js @@ -3,94 +3,30 @@ angular.module('emission.main.metrics',['nvd3', 'emission.services', 'ionic-datepicker', - 'emission.config.imperial', 'emission.main.metrics.factory', - 'emission.main.metrics.mappings', - 'emission.stats.clientstats', 'emission.plugin.kvstore', 'emission.plugin.logger']) .controller('MetricsCtrl', function($scope, $ionicActionSheet, $ionicLoading, - ClientStats, CommHelper, $window, $ionicPopup, + CommHelper, $window, $ionicPopup, ionicDatePicker, $ionicPlatform, - FootprintHelper, CalorieCal, ImperialConfig, $ionicModal, $timeout, KVStore, CarbonDatasetHelper, + FootprintHelper, CalorieCal, $ionicModal, $timeout, KVStore, CarbonDatasetHelper, $rootScope, $location, $state, ReferHelper, Logger, $translate) { var lastTwoWeeksQuery = true; - $scope.defaultTwoWeekUserCall = true; + var first = true; + var lastWeekCalories = 0; + var lastWeekCarbon = "0 kg CO₂"; + var twoWeeksAgoCarbon = ""; + var lastWeekCarbonInt = 0; + var twoWeeksAgoCarbonInt = 0; + var twoWeeksAgoCalories = 0; var DURATION = "duration"; - var MEAN_SPEED = "mean_speed"; + var MEDIAN_SPEED = "median_speed"; var COUNT = "count"; var DISTANCE = "distance"; - var METRIC_LIST = [DURATION, MEAN_SPEED, COUNT, DISTANCE]; - var COMPUTATIONAL_METRIC_LIST = [DURATION, MEAN_SPEED, DISTANCE]; - - /* - * BEGIN: Data structures to parse and store the data in different formats. - * So that we don't have to keep re-creating them over and over as we used - * to, slowing down the processing. - */ - - /* - These are metric maps, with the key as the metric, and the value as a - list of ModeStatTimeSummary objects for the metric. - i.e. {count: [ - {fmt_time: "2021-12-03T00:00:00+00:00", - label_drove_alone: 4 label_walk: 1 - local_dt: {year: 2021, month: 12, day: 3, hour: 0, minute: 0, …} - nUsers: 1 - ts: 1638489600},....], - duration: [...] - distance: [...] - mean_speed: [...]} - */ - $scope.userCurrentResults = {}; - $scope.userTwoWeeksAgo = {}; - $scope.aggCurrentResults = {}; - - /* - These are metric mode maps, with a nested map of maps. The outer key is - the metric, and the inner key is the , with the key as the metric, and the - inner key is the mode. The innermost value is the list of - ModeStatTimeSummary objects for that mode. - list of ModeStatTimeSummary objects for the metric. - i.e. { - count: [ - {key: drove_alone, values: : [[1638489600, 4, "2021-12-03T00:00:00+00:00"], ...]}, - { key: walk, values: [[1638489600, 4, "2021-12-03T00:00:00+00:00"],...]}], - duration: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ], - distance: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ], - mean_speed: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ] - } - */ - $scope.userCurrentModeMap = {}; - $scope.userTwoWeeksAgoModeMap = {}; - $scope.userCurrentModeMapFormatted = {}; - $scope.aggCurrentModeMap = {}; - $scope.aggCurrentModeMapFormatted = {}; - $scope.aggCurrentPerCapitaModeMap = {}; - - /* - These are summary mode maps, which have the same structure as the mode - maps, but with a value that is a single array instead of an array of arrays. - The single array is the summation of the values in the individual arrays of the non-summary mode maps. - i.e. { - count: [{key: "drove_alone", values: [10, "trips", "10 trips"], - {key: "walk", values: [5, "trips", "5 trips"]}], - - duration: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ], - distance: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ], - mean_speed: [ { key: drove_alone, values: [...]}, {key: walk, values: [...]} ] - } - */ - $scope.userCurrentSummaryModeMap = {}; - $scope.userTwoWeeksAgoSummaryModeMap = {}; - $scope.aggCurrentSummaryModeMap = {}; - $scope.aggCurrentSummaryPerCapitaModeMap = {}; - - /* $scope.onCurrentTrip = function() { window.cordova.plugins.BEMDataCollection.getState().then(function(result) { Logger.log("Current trip state" + JSON.stringify(result)); @@ -100,13 +36,12 @@ angular.module('emission.main.metrics',['nvd3', } }); }; - */ $ionicPlatform.ready(function() { CarbonDatasetHelper.loadCarbonDatasetLocale().then(function(result) { getData(); }); - // $scope.onCurrentTrip(); + $scope.onCurrentTrip(); }); // If we want to share this function (see the pun?) between the control screen and the dashboard, we need to put it into a service/factory. @@ -453,11 +388,9 @@ angular.module('emission.main.metrics',['nvd3', var tempFrom = moment2Timestamp(moment().utc().startOf('day').subtract(14, 'days')); var tempTo = moment2Timestamp(moment().utc().startOf('day').subtract(1, 'days')) lastTwoWeeksQuery = false; // Only get last week's data once - $scope.defaultTwoWeekUserCall = true; } else { var tempFrom = moment2Timestamp($scope.selectCtrl.fromDateTimestamp); var tempTo = moment2Timestamp($scope.selectCtrl.toDateTimestamp); - $scope.defaultTwoWeekUserCall = false; } data = { freq: $scope.selectCtrl.pandaFreq, @@ -476,7 +409,7 @@ angular.module('emission.main.metrics',['nvd3', var getUserMetricsFromServer = function() { var clonedData = angular.copy(data); delete clonedData.metric; - clonedData.metric_list = METRIC_LIST; + clonedData.metric_list = [DURATION, MEDIAN_SPEED, COUNT, DISTANCE]; clonedData.is_return_aggregate = false; var getMetricsResult = CommHelper.getMetrics(theMode, clonedData); return getMetricsResult; @@ -484,7 +417,7 @@ angular.module('emission.main.metrics',['nvd3', var getAggMetricsFromServer = function() { var clonedData = angular.copy(data); delete clonedData.metric; - clonedData.metric_list = METRIC_LIST; + clonedData.metric_list = [DURATION, MEDIAN_SPEED, COUNT, DISTANCE]; clonedData.is_return_aggregate = true; var getMetricsResult = CommHelper.getAggregateData( "result/metrics/timestamp", clonedData) @@ -503,7 +436,7 @@ angular.module('emission.main.metrics',['nvd3', $ionicLoading.show({ template: $translate.instant('loading') }); - if(!$scope.defaultTwoWeekUserCall){ + if(!first){ $scope.uictrl.currentString = $translate.instant('metrics.custom'); $scope.uictrl.current = false; } @@ -516,8 +449,19 @@ angular.module('emission.main.metrics',['nvd3', $scope.caloriesData = {}; $scope.carbonData = {}; $scope.summaryData = {}; - + $scope.caloriesData.userCalories = 0; + $scope.caloriesData.aggrCalories = 0; + $scope.caloriesData.lastWeekUserCalories = 0; + $scope.caloriesData.changeInPercentage = "0%" + $scope.caloriesData.change = $translate.instant('metrics.calorie-data-change'); + + $scope.carbonData.userCarbon = "0 kg CO₂"; + $scope.carbonData.aggrCarbon = $translate.instant('metrics.carbon-data-calculating');; $scope.carbonData.optimalCarbon = "0 kg CO₂"; + $scope.carbonData.worstCarbon = "0 kg CO₂"; + $scope.carbonData.lastWeekUserCarbon = "0 kg CO₂"; + $scope.carbonData.changeInPercentage = "0%"; + $scope.carbonData.change = $translate.instant('metrics.carbon-data-change'); $scope.summaryData.userSummary = []; $scope.chartDataUser = {}; @@ -527,24 +471,18 @@ angular.module('emission.main.metrics',['nvd3', 'vanillaIceCream' : 137, //1/2 cup 'banana' : 105, //medium banana 118g }; - // calculation is at - // https://github.com/e-mission/e-mission-docs/issues/696#issuecomment-1018181638 - $scope.carbon = { - 'phoneCharge' : 8.22 * 10**(-3), // 8.22 x 10^-6 metric tons CO2/smartphone charge - }; getUserMetricsFromServer().then(function(results) { $ionicLoading.hide(); - console.log("user results ", results); if(results.user_metrics.length == 1){ - console.log("$scope.defaultTwoWeekUserCall = "+$scope.defaultTwoWeekUserCall); - $scope.defaultTwoWeekUserCall = false; + console.log("first = "+first); + first = false; // If there is no data from last week (ex. new user) // Don't store the any other data as last we data } $scope.fillUserValues(results.user_metrics); $scope.summaryData.defaultSummary = $scope.summaryData.userSummary; - $scope.defaultTwoWeekUserCall = false; //If there is data from last week store the data only first time + first = false; //If there is data from last week store the data only first time $scope.uictrl.showContent = true; if (angular.isDefined($scope.chartDataUser)) { $scope.$apply(function() { @@ -565,7 +503,6 @@ angular.module('emission.main.metrics',['nvd3', }) getAggMetricsFromServer().then(function(results) { - console.log("aggregate results ", results); $scope.fillAggregateValues(results.aggregate_metrics); $scope.uictrl.hasAggr = true; if (angular.isDefined($scope.chartDataAggr)) { //Only have to check one because @@ -593,205 +530,162 @@ angular.module('emission.main.metrics',['nvd3', $scope.fillUserValues = function(user_metrics_arr) { var seventhDayAgo = moment().utc().startOf('day').subtract(7, 'days'); - METRIC_LIST.forEach((m) => $scope.userCurrentResults[m] = []); - - METRIC_LIST.forEach((m) => $scope.userTwoWeeksAgo[m] = []); - - if($scope.defaultTwoWeekUserCall){ + var twoWeeksAgoDuration = []; + var twoWeeksAgoMedianSpeed = []; + var twoWeeksAgoDistance = []; + var userDuration = []; + var userMedianSpeed = []; + var userCount = []; + var userDistance = []; + + if(first){ for(var i in user_metrics_arr[0]) { if(seventhDayAgo.isSameOrBefore(moment.unix(user_metrics_arr[0][i].ts).utc())){ - METRIC_LIST.forEach((m, idx) => $scope.userCurrentResults[m].push(user_metrics_arr[idx][i])); + userDuration.push(user_metrics_arr[0][i]); + userMedianSpeed.push(user_metrics_arr[1][i]); + userCount.push(user_metrics_arr[2][i]); + userDistance.push(user_metrics_arr[3][i]); } else { - METRIC_LIST.forEach((m, idx) => $scope.userTwoWeeksAgo[m].push(user_metrics_arr[idx][i])); + twoWeeksAgoDuration.push(user_metrics_arr[0][i]); + twoWeeksAgoMedianSpeed.push(user_metrics_arr[1][i]); + twoWeeksAgoDistance.push(user_metrics_arr[3][i]); } } - METRIC_LIST.forEach((m) => console.log("userTwoWeeksAgo."+m+" = "+$scope.userTwoWeeksAgo[m])); + console.log("twoWeeksAgoDuration = "+twoWeeksAgoDuration); + console.log("twoWeeksAgoMedianSpeed = "+twoWeeksAgoMedianSpeed); + console.log("twoWeeksAgoDistance = "+twoWeeksAgoDistance); } else { - METRIC_LIST.forEach((m, idx) => $scope.userCurrentResults[m] = user_metrics_arr[idx]); + var userDuration = user_metrics_arr[0]; + var userMedianSpeed = user_metrics_arr[1]; + var userCount = user_metrics_arr[2]; + var userDistance = user_metrics_arr[3]; } - - METRIC_LIST.forEach((m) => - $scope.userCurrentModeMap[m] = getDataFromMetrics($scope.userCurrentResults[m], metric2valUser)); - - COMPUTATIONAL_METRIC_LIST.forEach((m) => - $scope.userTwoWeeksAgoModeMap[m] = getDataFromMetrics($scope.userTwoWeeksAgo[m], metric2valUser)); - - METRIC_LIST.forEach((m) => - $scope.userCurrentModeMapFormatted[m] = formatModeMap($scope.userCurrentModeMap[m], m)); - - METRIC_LIST.forEach((m) => - $scope.userCurrentSummaryModeMap[m] = getSummaryDataRaw($scope.userCurrentModeMap[m], m)); - - COMPUTATIONAL_METRIC_LIST.forEach((m) => - $scope.userTwoWeeksAgoSummaryModeMap[m] = getSummaryDataRaw($scope.userTwoWeeksAgoModeMap[m], m)); - - METRIC_LIST.forEach((m) => - $scope.summaryData.userSummary[m] = getSummaryDataRaw($scope.userCurrentModeMap[m], m)); - - $scope.isCustomLabelResult = isCustomLabels($scope.userCurrentModeMap); - FootprintHelper.setUseCustomFootprint($scope.isCustomLabelResult); - CalorieCal.setUseCustomFootprint($scope.isCustomLabelResult); - - $scope.chartDataUser = $scope.userCurrentModeMapFormatted; + $scope.summaryData.userSummary.duration = getSummaryData(userDuration, "duration"); + $scope.summaryData.userSummary.median_speed = getSummaryData(userMedianSpeed, "median_speed"); + $scope.summaryData.userSummary.count = getSummaryData(userCount, "count"); + $scope.summaryData.userSummary.distance = getSummaryData(userDistance, "distance"); + $scope.chartDataUser.duration = userDuration? userDuration : []; + $scope.chartDataUser.speed = userMedianSpeed? userMedianSpeed : []; + $scope.chartDataUser.count = userCount? userCount : []; + $scope.chartDataUser.distance = userDistance? userDistance : []; // Fill in user calorie information - $scope.fillCalorieCardUserVals($scope.userCurrentSummaryModeMap.duration, - $scope.userCurrentSummaryModeMap.mean_speed, - $scope.userTwoWeeksAgoSummaryModeMap.duration, - $scope.userTwoWeeksAgoSummaryModeMap.mean_speed); - $scope.fillFootprintCardUserVals($scope.userCurrentModeMap.distance, - $scope.userCurrentSummaryModeMap.distance, - $scope.userTwoWeeksAgoModeMap.distance, - $scope.userTwoWeeksAgoSummaryModeMap.distance); + $scope.fillCalorieCardUserVals(userDuration, userMedianSpeed, + twoWeeksAgoDuration, twoWeeksAgoMedianSpeed); + $scope.fillFootprintCardUserVals(userDistance, twoWeeksAgoDistance); } $scope.fillAggregateValues = function(agg_metrics_arr) { - METRIC_LIST.forEach((m) => $scope.aggCurrentResults[m] = []); - if ($scope.defaultTwoWeekUserCall) { - METRIC_LIST.forEach((m, idx) => $scope.aggCurrentResults[m] = agg_metrics_arr[idx].slice(0,7)); + if (first) { + var aggDuration = agg_metrics_arr[0].slice(0, 7); + var aggMedianSpeed = agg_metrics_arr[1].slice(0, 7); + var aggCount = agg_metrics_arr[2].slice(0, 7); + var aggDistance = agg_metrics_arr[3].slice(0, 7); } else { - METRIC_LIST.forEach((m, idx) => $scope.aggCurrentResults[m] = agg_metrics_arr[idx]); + var aggDuration = agg_metrics_arr[0]; + var aggMedianSpeed = agg_metrics_arr[1]; + var aggCount = agg_metrics_arr[2]; + var aggDistance = agg_metrics_arr[3]; } - METRIC_LIST.forEach((m) => - $scope.aggCurrentModeMap[m] = getDataFromMetrics($scope.aggCurrentResults[m], metric2valUser)); + $scope.chartDataAggr.duration = aggDuration? aggDuration : []; + $scope.chartDataAggr.speed = aggMedianSpeed? aggMedianSpeed : []; + $scope.chartDataAggr.count = aggCount? aggCount : []; + $scope.chartDataAggr.distance = aggDistance? aggDistance : []; - METRIC_LIST.forEach((m) => - $scope.aggCurrentModeMapFormatted[m] = formatModeMap($scope.aggCurrentModeMap[m], m)); - - COMPUTATIONAL_METRIC_LIST.forEach((m) => - $scope.aggCurrentPerCapitaModeMap[m] = getDataFromMetrics($scope.aggCurrentResults[m], metric2valAvg)); - - COMPUTATIONAL_METRIC_LIST.forEach((m) => - $scope.aggCurrentSummaryPerCapitaModeMap[m] = getSummaryDataRaw($scope.aggCurrentPerCapitaModeMap[m], m)); - - $scope.chartDataAggr = $scope.aggCurrentModeMapFormatted; - $scope.fillCalorieAggVals($scope.aggCurrentSummaryPerCapitaModeMap.duration, - $scope.aggCurrentSummaryPerCapitaModeMap.mean_speed); - $scope.fillFootprintAggVals($scope.aggCurrentSummaryPerCapitaModeMap.distance); + $scope.fillCalorieAggVals(aggDuration, aggMedianSpeed); + $scope.fillFootprintAggVals(aggDistance); } - /* - * We use the results to determine whether these results are from custom - * labels or from the automatically sensed labels. Automatically sensedV - * labels are in all caps, custom labels are prefixed by label, but have had - * the label_prefix stripped out before this. Results should have either all - * sensed labels or all custom labels. - */ - var isCustomLabels = function(modeMap) { - const isSensed = (mode) => mode == mode.toUpperCase(); - const isCustom = (mode) => mode == mode.toLowerCase(); - const metricSummaryChecksCustom = []; - const metricSummaryChecksSensed = []; - for (const metric in modeMap) { - const metricKeys = modeMap[metric].map((e) => e.key); - const isSensedKeys = metricKeys.map(isSensed); - const isCustomKeys = metricKeys.map(isCustom); - console.log("Checking metric keys", metricKeys, " sensed ", isSensedKeys, - " custom ", isCustomKeys); - const isAllCustomForMetric = isAllCustom(isSensedKeys, isCustomKeys); - metricSummaryChecksSensed.push(!isAllCustomForMetric); - metricSummaryChecksCustom.push(isAllCustomForMetric); - } - console.log("overall custom/not results for each metric = ", metricSummaryChecksCustom); - return isAllCustom(metricSummaryChecksSensed, metricSummaryChecksCustom); - } + $scope.fillCalorieCardUserVals = function(userDuration, userMedianSpeed, + twoWeeksAgoDuration, twoWeeksAgoMedianSpeed) { + if (userDuration) { + var durationData = getSummaryDataRaw(userDuration, "duration"); + } + if (userMedianSpeed) { + var speedData = getSummaryDataRaw(userMedianSpeed, "median_speed"); + } + for (var i in durationData) { + var met = $scope.getCorrectedMetFromUserData(durationData[i], speedData[i]) + $scope.caloriesData.userCalories += + Math.round(CalorieCal.getuserCalories(durationData[i].values / 3600, met)) //+ ' cal' + } - var isAllCustom = function(isSensedKeys, isCustomKeys) { - const allSensed = isSensedKeys.reduce((a, b) => a && b, true); - const anySensed = isSensedKeys.reduce((a, b) => a || b, false); - const allCustom = isCustomKeys.reduce((a, b) => a && b, true); - const anyCustom = isCustomKeys.reduce((a, b) => a || b, false); - if ((allSensed && !anyCustom)) { - return false; // sensed, not custom - } - if ((!anySensed && allCustom)) { - return true; // custom, not sensed; false implies that the other option is true - } - Logger.displayError("Mixed entries that combine sensed and custom labels", - "Please report to your program admin"); - return undefined; - } - - $scope.fillCalorieCardUserVals = function(userDurationSummary, userMeanSpeedSummary, - twoWeeksAgoDurationSummary, twoWeeksAgoMeanSpeedSummary) { - $scope.caloriesData.userCalories = {low: 0, high: 0}; - const highestMET = CalorieCal.getHighestMET(); - for (var i in userDurationSummary) { - var lowMET = $scope.getCorrectedMetFromUserData(userDurationSummary[i], userMeanSpeedSummary[i], 0); - var highMET = $scope.getCorrectedMetFromUserData(userDurationSummary[i], userMeanSpeedSummary[i], highestMET); - $scope.caloriesData.userCalories.low += - Math.round(CalorieCal.getuserCalories(userDurationSummary[i].values / 3600, lowMET)) //+ ' cal' - $scope.caloriesData.userCalories.high += - Math.round(CalorieCal.getuserCalories(userDurationSummary[i].values / 3600, highMET)) //+ ' cal' + if(first){ + lastWeekCalories = $scope.caloriesData.userCalories; } - $scope.numberOfCookies = { - low: Math.floor($scope.caloriesData.userCalories.low/ - $scope.food.chocolateChip), - high: Math.floor($scope.caloriesData.userCalories.high/ - $scope.food.chocolateChip), - }; - $scope.numberOfIceCreams = { - low: Math.floor($scope.caloriesData.userCalories.low/ - $scope.food.vanillaIceCream), - high: Math.floor($scope.caloriesData.userCalories.high/ - $scope.food.vanillaIceCream), - }; - $scope.numberOfBananas = { - low: Math.floor($scope.caloriesData.userCalories.low/ - $scope.food.banana), - high: Math.floor($scope.caloriesData.userCalories.high/ - $scope.food.banana), - }; - - if($scope.defaultTwoWeekUserCall) { - if (twoWeeksAgoDurationSummary.length > 0) { - var twoWeeksAgoCalories = {low: 0, high: 0}; - for (var i in twoWeeksAgoDurationSummary) { - var lowMET = $scope.getCorrectedMetFromUserData(twoWeeksAgoDurationSummary[i], - twoWeeksAgoMeanSpeedSummary[i], 0) - var highMET = $scope.getCorrectedMetFromUserData(twoWeeksAgoDurationSummary[i], - twoWeeksAgoMeanSpeedSummary[i], highestMET) - twoWeeksAgoCalories.low += - Math.round(CalorieCal.getuserCalories(twoWeeksAgoDurationSummary[i].values / 3600, lowMET)); - twoWeeksAgoCalories.high += - Math.round(CalorieCal.getuserCalories(twoWeeksAgoDurationSummary[i].values / 3600, highMET)); + $scope.numberOfCookies = Math.floor($scope.caloriesData.userCalories/ + $scope.food.chocolateChip); + $scope.numberOfIceCreams = Math.floor($scope.caloriesData.userCalories/ + $scope.food.vanillaIceCream); + $scope.numberOfBananas = Math.floor($scope.caloriesData.userCalories/ + $scope.food.banana); + + if(first){ + if (twoWeeksAgoDuration) { + var durationData = getSummaryDataRaw(twoWeeksAgoDuration, "duration"); } - $scope.caloriesData.lastWeekUserCalories = { - low: twoWeeksAgoCalories.low, - high: twoWeeksAgoCalories.high - }; - console.log("Running calorieData with ", $scope.caloriesData); - // TODO: Refactor this so that we can filter out bad values ahead of time - // instead of having to work around it here - $scope.caloriesData.greaterLesserPct = { - low: ($scope.caloriesData.userCalories.low/$scope.caloriesData.lastWeekUserCalories.low) * 100 - 100, - high: ($scope.caloriesData.userCalories.high/$scope.caloriesData.lastWeekUserCalories.high) * 100 - 100, + if (twoWeeksAgoMedianSpeed) { + var speedData = getSummaryDataRaw(twoWeeksAgoMedianSpeed, "median_speed"); + } + for (var i in durationData) { + var met = $scope.getCorrectedMetFromUserData(durationData[i], speedData[i]) + twoWeeksAgoCalories += + Math.round(CalorieCal.getuserCalories(durationData[i].values / 3600, met)); } - } + } + + if (first) { + $scope.caloriesData.lastWeekUserCalories = twoWeeksAgoCalories; + } else { + $scope.caloriesData.lastWeekUserCalories = "" + } + + + console.log("Running calorieData with " + + (lastWeekCalories) + + " and " + + (twoWeeksAgoCalories)); + // TODO: Refactor this so that we can filter out bad values ahead of time + // instead of having to work around it here + var calorieCalculation = Math.abs(Math.round((lastWeekCalories/twoWeeksAgoCalories) * 100 - 100)); + if (isValidNumber(calorieCalculation)) { + $scope.caloriesData.changeInPercentage = calorieCalculation + "%"; + if(lastWeekCalories > twoWeeksAgoCalories){ + $scope.caloriesData.change = $translate.instant('metrics.calorie-data-change-increase'); + $scope.caloriesUp = true; + $scope.caloriesDown = false; + } else { + $scope.caloriesData.change = $translate.instant('metrics.calorie-data-change-decrease'); + $scope.caloriesUp = false; + $scope.caloriesDown = true; + } } } - $scope.fillCalorieAggVals = function(aggDurationSummaryAvg, aggMeanSpeedSummaryAvg) { - $scope.caloriesData.aggrCalories = {low: 0, high: 0}; - const highestMET = CalorieCal.getHighestMET(); - for (var i in aggDurationSummaryAvg) { - var lowMET = CalorieCal.getMet(aggDurationSummaryAvg[i].key, aggMeanSpeedSummaryAvg[i].values, 0); - var highMET = CalorieCal.getMet(aggDurationSummaryAvg[i].key, aggMeanSpeedSummaryAvg[i].values, highestMET); - $scope.caloriesData.aggrCalories.low += - CalorieCal.getuserCalories(aggDurationSummaryAvg[i].values / 3600, lowMET); //+ ' cal' - $scope.caloriesData.aggrCalories.high += - CalorieCal.getuserCalories(aggDurationSummaryAvg[i].values / 3600, highMET); //+ ' cal' + $scope.fillCalorieAggVals = function(aggDuration, aggMedianSpeed) { + if (aggDuration) { + var avgDurationData = getAvgSummaryDataRaw(aggDuration, "duration"); + } + if (aggMedianSpeed) { + var avgSpeedData = getAvgSummaryDataRaw(aggMedianSpeed, "median_speed"); + } + for (var i in avgDurationData) { + + var met = CalorieCal.getMet(avgDurationData[i].key, avgSpeedData[i].values); + + $scope.caloriesData.aggrCalories += + Math.round(CalorieCal.getuserCalories(avgDurationData[i].values / 3600, met)) //+ ' cal' } } - $scope.getCorrectedMetFromUserData = function(currDurationData, currSpeedData, defaultIfMissing) { + $scope.getCorrectedMetFromUserData = function(currDurationData, currSpeedData) { if ($scope.userDataSaved()) { // this is safe because userDataSaved will never be set unless there // is stored user data that we have loaded var userDataFromStorage = $scope.savedUserData; - var met = CalorieCal.getMet(currDurationData.key, currSpeedData.values, defaultIfMissing); + var met = CalorieCal.getMet(currDurationData.key, currSpeedData.values); var gender = userDataFromStorage.gender; var heightUnit = userDataFromStorage.heightUnit; var height = userDataFromStorage.height; @@ -800,78 +694,71 @@ angular.module('emission.main.metrics',['nvd3', var age = userDataFromStorage.age; return CalorieCal.getCorrectedMet(met, gender, age, height, heightUnit, weight, weightUnit); } else { - return CalorieCal.getMet(currDurationData.key, currSpeedData.values, defaultIfMissing); + return CalorieCal.getMet(currDurationData.key, currSpeedData.values); } }; - $scope.fillFootprintCardUserVals = function( - userDistance, userDistanceSummary, - twoWeeksAgoDistance, twoWeeksAgoDistanceSummary) { + $scope.fillFootprintCardUserVals = function(userDistance, twoWeeksAgoDistance) { if (userDistance) { - // var optimalDistance = getOptimalFootprintDistance(userDistance); - var worstDistance = getWorstFootprintDistance(userDistanceSummary); + var userCarbonData = getSummaryDataRaw(userDistance, 'distance'); + var optimalDistance = getOptimalFootprintDistance(userDistance); + var worstDistance = getWorstFootprintDistance(userDistance); var date1 = $scope.selectCtrl.fromDateTimestamp; var date2 = $scope.selectCtrl.toDateTimestamp; var duration = moment.duration(date2.diff(date1)); var days = duration.asDays(); - /* - * 54 and 14 are the per-week CO2 estimates. - * https://github.com/e-mission/e-mission-docs/issues/688 - * Since users can choose a custom range which can be less or greater - * than 7 days, we calculate the per day value by dividing by 7 and - * then multiplying by the actual number of days. - */ - $scope.carbonData.us2030 = Math.round(54 / 7 * days); // kg/day - $scope.carbonData.us2050 = Math.round(14 / 7 * days); - - $scope.carbonData.userCarbon = { - low: FootprintHelper.getFootprintForMetrics(userDistanceSummary,0), - high: FootprintHelper.getFootprintForMetrics(userDistanceSummary, - FootprintHelper.getHighestFootprint()), - }; - // $scope.carbonData.optimalCarbon = FootprintHelper.getLowestFootprintForDistance(optimalDistance); - $scope.carbonData.worstCarbon = FootprintHelper.getHighestFootprintForDistance(worstDistance); - $scope.carbonData.carbonAvoided = { - low: $scope.carbonData.worstCarbon - $scope.carbonData.userCarbon.high, - high: $scope.carbonData.worstCarbon - $scope.carbonData.userCarbon.low, - }; + $scope.carbonData.ca2035 = Math.round(40.142892 / 5 * days) + ' kg CO₂'; // kg/day + $scope.carbonData.ca2050 = Math.round(8.28565 / 5 * days) + ' kg CO₂'; + + $scope.carbonData.userCarbon = FootprintHelper.readableFormat(FootprintHelper.getFootprintForMetrics(userCarbonData)); + $scope.carbonData.optimalCarbon = FootprintHelper.readableFormat(FootprintHelper.getLowestFootprintForDistance(optimalDistance)); + $scope.carbonData.worstCarbon = FootprintHelper.readableFormat(FootprintHelper.getHighestFootprintForDistance(worstDistance)); + lastWeekCarbonInt = FootprintHelper.getFootprintForMetrics(userCarbonData); } - $scope.numberOfCharges = { - low: Math.floor($scope.carbonData.carbonAvoided.low/ - $scope.carbon.phoneCharge), - high: Math.floor($scope.carbonData.carbonAvoided.high/ - $scope.carbon.phoneCharge), - }; + if (first) { + if (twoWeeksAgoDistance) { + var userCarbonDataTwoWeeks = getSummaryDataRaw(twoWeeksAgoDistance, 'distance'); + twoWeeksAgoCarbon = 0; + twoWeeksAgoCarbonInt = 0; - if ($scope.defaultTwoWeekUserCall) { - // This is a default call in which we retrieved the current week and - // the previous week of data - if (twoWeeksAgoDistance.length > 0) { - // and this user has been around long enough that they have two weeks - // of data, or they haven't turned off tracking for all of last week, - // or.... - $scope.carbonData.lastWeekUserCarbon = { - low: FootprintHelper.getFootprintForMetrics(twoWeeksAgoDistanceSummary,0), - high: FootprintHelper.getFootprintForMetrics(twoWeeksAgoDistanceSummary, - FootprintHelper.getHighestFootprint()), - }; - - console.log("Running calculation with " + $scope.carbonData.userCarbon + " and " + $scope.carbonData.lastWeekUserCarbon); - console.log("Running calculation with ", $scope.carbonData); - $scope.carbonData.greaterLesserPct = { - low: ($scope.carbonData.userCarbon.low/$scope.carbonData.lastWeekUserCarbon.low) * 100 - 100, - high: ($scope.carbonData.userCarbon.high/$scope.carbonData.lastWeekUserCarbon.high) * 100 - 100, + twoWeeksAgoCarbonInt = FootprintHelper.getFootprintForMetrics(userCarbonDataTwoWeeks); + + twoWeeksAgoCarbon = FootprintHelper.readableFormat(twoWeeksAgoCarbonInt); + lastWeekCarbon = twoWeeksAgoCarbon; } } - } + $scope.carbonData.lastWeekUserCarbon = lastWeekCarbon; + + var change = ""; + console.log("Running calculation with " + lastWeekCarbonInt + " and " + twoWeeksAgoCarbonInt); + var calculation = (lastWeekCarbonInt/twoWeeksAgoCarbonInt) * 100 - 100; + + // TODO: Refactor this so that we can filter out bad values ahead of time + // instead of having to work around it here + if (isValidNumber(calculation)) { + if(lastWeekCarbonInt > twoWeeksAgoCarbonInt){ + $scope.carbonData.change = $translate.instant('metrics.carbon-data-change-increase'); + $scope.carbonUp = true; + $scope.carbonDown = false; + } else { + $scope.carbonData.change = $translate.instant('metrics.carbon-data-change-decrease'); + $scope.carbonUp = false; + $scope.carbonDown = true; + } + $scope.carbonData.changeInPercentage = Math.abs(Math.round(calculation)) + "%" + } + else { + $scope.carbonData.change = ""; + $scope.carbonData.changeInPercentage = "0%"; + } }; $scope.fillFootprintAggVals = function(aggDistance) { if (aggDistance) { - var aggrCarbonData = aggDistance; + var aggrCarbonData = getAvgSummaryDataRaw(aggDistance, 'distance'); // Issue 422: // https://github.com/e-mission/e-mission-docs/issues/422 @@ -882,24 +769,23 @@ angular.module('emission.main.metrics',['nvd3', } } - $scope.carbonData.aggrCarbon = { - low: FootprintHelper.getFootprintForMetrics(aggrCarbonData, 0), - high: FootprintHelper.getFootprintForMetrics(aggrCarbonData, - FootprintHelper.getHighestFootprint()), - }; + $scope.carbonData.aggrCarbon = FootprintHelper.readableFormat(FootprintHelper.getFootprintForMetrics(aggrCarbonData)); } }; $scope.showCharts = function(agg_metrics) { - $scope.data = agg_metrics; + $scope.data.count = getDataFromMetrics(agg_metrics.count, metric2valUser); + $scope.data.distance = getDataFromMetrics(agg_metrics.distance, metric2valUser); + $scope.data.duration = getDataFromMetrics(agg_metrics.duration, metric2valUser); + $scope.data.speed = getDataFromMetrics(agg_metrics.speed, metric2valUser); $scope.countOptions = angular.copy($scope.options) $scope.countOptions.chart.yAxis.axisLabel = $translate.instant('metrics.trips-yaxis-number'); $scope.distanceOptions = angular.copy($scope.options) - $scope.distanceOptions.chart.yAxis.axisLabel = ImperialConfig.getDistanceSuffix; + $scope.distanceOptions.chart.yAxis.axisLabel = 'm'; $scope.durationOptions = angular.copy($scope.options) - $scope.durationOptions.chart.yAxis.axisLabel = $translate.instant('metrics.hours'); + $scope.durationOptions.chart.yAxis.axisLabel = 'secs' $scope.speedOptions = angular.copy($scope.options) - $scope.speedOptions.chart.yAxis.axisLabel = ImperialConfig.getSpeedSuffix; + $scope.speedOptions.chart.yAxis.axisLabel = 'm/sec' }; $scope.pandaFreqOptions = [ {text: $translate.instant('metrics.pandafreqoptions-daily'), value: 'D'}, @@ -930,14 +816,14 @@ angular.module('emission.main.metrics',['nvd3', } var getDataFromMetrics = function(metrics, metric2val) { - console.log("Called getDataFromMetrics on ", metrics); var mode_bins = {}; metrics.forEach(function(metric) { var on_foot_val = 0; for (var field in metric) { - // For modes inferred from sensor data, we check if the string - // is all upper case by converting it to upper case and seeing - // if it is changed + // TODO: Consider creating a prefix such as M_ to signal + // modes. Is that really less fragile than caps, though? + // Here, we check if the string is all upper case by + // converting it to upper case and seeing if it is changed if (field == field.toUpperCase()) { // since we can have multiple possible ON_FOOT modes, we // add all of them up here @@ -952,19 +838,8 @@ angular.module('emission.main.metrics',['nvd3', // since we can have multiple on_foot entries, let's hold // off on handling them until we have considered all fields if (field != "ON_FOOT") { - mode_bins[field].push([metric.ts, metric2val(metric, field), metric.fmt_time]); - } - } - // For modes from user labels, we assume that the field stars with - // the label_ prefix - if (field.startsWith("label_")) { - // "label_" is 6 characters - let actualMode = field.slice(6, field.length); - console.log("Mapped field "+field+" to mode "+actualMode); - if (actualMode in mode_bins == false) { - mode_bins[actualMode] = [] + mode_bins[field].push([metric.ts, Math.round(metric2val(metric, field)), metric.fmt_time]); } - mode_bins[actualMode].push([metric.ts, Math.round(metric2val(metric, field)), moment(metric.fmt_time).format()]); } } // here's where we handle the ON_FOOT @@ -981,42 +856,27 @@ angular.module('emission.main.metrics',['nvd3', return rtn; } - var getSummaryDataRaw = function(modeMap, metric) { - console.log("Invoked getSummaryDataRaw on ", modeMap, "with", metric); - let summaryMap = angular.copy(modeMap); - for (var i = 0; i < modeMap.length; i++) { + var getSummaryDataRaw = function(metrics, metric) { + var data = getDataFromMetrics(metrics, metric2valUser); + for (var i = 0; i < data.length; i++) { var temp = 0; - for (var j = 0; j < modeMap[i].values.length; j++) { - temp += modeMap[i].values[j][1]; + for (var j = 0; j < data[i].values.length; j++) { + temp += data[i].values[j][1]; } - if (metric === "mean_speed") { - summaryMap[i].values = Math.round(temp / modeMap[i].values.length); + if (metric === "median_speed") { + data[i].values = Math.round(temp / data[i].values.length); } else { - summaryMap[i].values = Math.round(temp); + data[i].values = Math.round(temp); } } - return summaryMap; + return data; } /*var sortNumber = function(a,b) { return a - b; }*/ - /* - * This is _broken_ because what we see on the client is summary values, - * not individual trip values. So value > longTrip just means that the - * overall travel by that mode was long, not that each individual trip - * was long. - * - * As an obvious example, if I had 10 1k car trips, they would show up as - * daily travel of 10k by car, and be counted as a long trip, although each - * individual trip was actually 1k and short. - * - * Leaving this disabled until we come up with a principled solution. - * https://github.com/e-mission/e-mission-docs/issues/688#issuecomment-1000626564 - */ - var getOptimalFootprintDistance = function(metrics){ var data = getDataFromMetrics(metrics, metric2valUser); var distance = 0; @@ -1033,64 +893,67 @@ angular.module('emission.main.metrics',['nvd3', } return distance; } - var getWorstFootprintDistance = function(modeMapSummary) { - var totalDistance = modeMapSummary.reduce((prevDistance, currModeSummary) => prevDistance + currModeSummary.values, 0); - return totalDistance; - } - - $scope.formatCount = function(value) { - const formatVal = Math.round(value); - const unit = $translate.instant('metrics.trips'); - const stringRep = formatVal + " " + unit; - return [formatVal, unit, stringRep]; - } - - $scope.formatDistance = function(value) { - const formatVal = Number.parseFloat(ImperialConfig.getFormattedDistance(value)); - const unit = ImperialConfig.getDistanceSuffix; - const stringRep = formatVal + " " + unit; - return [formatVal, unit, stringRep]; - } - - $scope.formatDuration = function(value) { - const durM = moment.duration(value * 1000); - const formatVal = durM.asHours(); - const unit = $translate.instant('metrics.hours'); - const stringRep = durM.humanize(); - return [formatVal, unit, stringRep]; - } - - $scope.formatMeanSpeed = function(value) { - const formatVal = Number.parseFloat(ImperialConfig.getFormattedSpeed(value)); - const unit = ImperialConfig.getSpeedSuffix; - const stringRep = formatVal + " " + unit; - return [formatVal, unit, stringRep]; + var getWorstFootprintDistance = function(metrics){ + var data = getDataFromMetrics(metrics, metric2valUser); + var distance = 0; + for(var i = 0; i < data.length; i++) { + for(var j = 0; j < data[i].values.length; j++){ + distance += data[i].values[j][1]; + } + } + return distance; } + var getAvgSummaryDataRaw = function(metrics, metric) { + var data = getDataFromMetrics(metrics, metric2valAvg); + for (var i = 0; i < data.length; i++) { + var temp = 0; + for (var j = 0; j < data[i].values.length; j++) { + temp += data[i].values[j][1]; + } + if (metric === "median_speed") { + data[i].values = Math.round(temp / data[i].values.length); + } else { + data[i].values = Math.round(temp); + } - $scope.formatterMap = { - count: $scope.formatCount, - distance: $scope.formatDistance, - duration: $scope.formatDuration, - mean_speed: $scope.formatMeanSpeed + } + return data; } + var getSummaryData = function(metrics, metric) { + var data = getDataFromMetrics(metrics, metric2valUser); + for (var i = 0; i < data.length; i++) { + var temp = 0; + for (var j = 0; j < data[i].values.length; j++) { + temp += data[i].values[j][1]; + } + var unit = ""; + switch(metric) { + case "count": + unit = $translate.instant('metrics.trips'); + break; + case "distance": + unit = "m"; + break; + case "duration": + unit = "s"; + break; + case "median_speed": + unit = "m/s"; + break; + } + if (metric === "median_speed") { + // This is actually an average, not a median + data[i].values = Math.round(temp / data[i].values.length ) + ' ' + unit; + } else if(metric === "distance" && temp.toString().length > 4){ + data[i].values = Math.round(temp / 1000) + ' ' + "km"; + } else if(metric === "duration" && temp > 60){ + data[i].values = Math.round(temp / 60) + ' ' + "mins"; + } else { + data[i].values = Math.round(temp) + ' ' + unit; + } - var formatModeMap = function(modeMapList, metric) { - const formatter = $scope.formatterMap[metric]; - let formattedModeList = []; - modeMapList.forEach((modeMap) => { - let currMode = modeMap["key"]; - let modeStatList = modeMap["values"]; - let formattedModeStatList = modeStatList.map((modeStat) => { - let [formatVal, unit, stringRep] = formatter(modeStat[1]); - let copiedModeStat = angular.copy(modeStat); - copiedModeStat[1] = formatVal; - copiedModeStat.push(unit); - copiedModeStat.push(stringRep); - return copiedModeStat; - }); - formattedModeList.push({key: currMode, values: formattedModeStatList}); - }); - return formattedModeList; + } + return data; } $scope.changeFromWeekday = function() { @@ -1201,75 +1064,16 @@ angular.module('emission.main.metrics',['nvd3', initSelect(); $scope.doRefresh = function() { + first = true; getMetrics(); } - $scope.$on('$ionicView.enter',function(){ - $scope.startTime = moment().utc() - ClientStats.addEvent(ClientStats.getStatKeys().OPENED_APP).then( - function() { - console.log("Added "+ClientStats.getStatKeys().OPENED_APP+" event"); - }); - }); - - $scope.$on('$ionicView.leave',function() { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().METRICS_TIME, timeOnPage); - }); - - $ionicPlatform.on("pause", function() { - if ($state.$current == "root.main.metrics") { - var timeOnPage = moment().utc() - $scope.startTime; - ClientStats.addReading(ClientStats.getStatKeys().METRICS_TIME, timeOnPage); - } - }) - - $ionicPlatform.on("resume", function() { - if ($state.$current == "root.main.metrics") { - $scope.startTime = moment().utc() - } - }) - - $scope.linkToMaps = function() { - let start = $scope.suggestionData.startCoordinates[1] + ',' + $scope.suggestionData.startCoordinates[0]; - let destination = $scope.suggestionData.endCoordinates[1] + ',' + $scope.suggestionData.endCoordinates[0]; - var mode = $scope.suggestionData.mode - if(ionic.Platform.isIOS()){ - if (mode === 'bike') { - mode = 'b'; - } else if (mode === 'public') { - mode = 'r'; - } else if (mode === 'walk') { - mode = 'w'; - } - window.open('https://www.maps.apple.com/?saddr=' + start + '&daddr=' + destination + '&dirflg=' + mode, '_system'); - } else { - if (mode === 'bike') { - mode = 'b'; - } else if (mode === 'public') { - mode = 'r'; - } else if (mode === 'walk') { - mode = 'w'; - } - window.open('https://www.google.com/maps?saddr=' + start + '&daddr=' + destination +'&dirflg=' + mode, '_system'); - } - } - - $scope.linkToDiary = function(trip_id) { - console.log("Loading trip "+trip_id); - window.location.href = "#/root/main/diary/" + trip_id; - } - - $scope.hasUsername = function(obj) { - return (obj.hasOwnProperty('username')); - } - $scope.modeIcon = function(key) { var icons = {"BICYCLING":"ion-android-bicycle", "ON_FOOT":" ion-android-walk", "WALKING":" ion-android-walk", "IN_VEHICLE":"ion-speedometer", - "CAR":"ion-android-car", + "CAR":"ion-android-car", //ion-android-walk "BUS": "ion-android-bus", "LIGHT_RAIL":"lightrail fas fa-subway", "TRAIN": "ion-android-train", @@ -1280,26 +1084,57 @@ angular.module('emission.main.metrics',['nvd3', return icons[key]; } + $scope.modeTitle = function(key) { + var titles = {"BICYCLING":"modes.bike", + "ON_FOOT": "modes.walk", + "WALKING": "modes.walk", + "IN_VEHICLE": "modes.car", + "CAR": "modes.car", + "BUS": "modes.bus", + "LIGHT_RAIL":"modes.subway", + "TRAIN": "modes.train", + "TRAM": "modes.train", + "SUBWAY":"modes.subway", + "UNKNOWN": "modes.other", + "AIR_OR_HSR": "modes.plane"} + return titles[key]; + } + + $scope.diffDateInDays = ''; + var setDiffDateInDays = function() { + var date1 = moment.utc($scope.selectCtrl.fromDateTimestamp); + var date2 = moment.utc($scope.selectCtrl.toDateTimestamp).set({'hour': 23}); + var days = moment(date2).diff(date1, 'days') + 1; + if (days < 1) { + $scope.diffDateInDays = ''; + } + else if (days == 1) { + $scope.diffDateInDays = days + ' ' + $translate.instant('metrics.day'); + } + else { + $scope.diffDateInDays = days + ' ' + $translate.instant('metrics.days'); + } + }; + $scope.setCurDayFrom = function(val) { if (val) { $scope.selectCtrl.fromDateTimestamp = moment(val).utc(); - $scope.datepickerObjFrom.inputMoment = $scope.selectCtrl.fromDateTimestamp; $scope.datepickerObjFrom.inputDate = $scope.selectCtrl.fromDateTimestamp.toDate(); } else { - $scope.datepickerObjFrom.inputMoment = $scope.selectCtrl.fromDateTimestamp; $scope.datepickerObjFrom.inputDate = $scope.selectCtrl.fromDateTimestamp.toDate(); } - + setDiffDateInDays(); + setMetricsHelper(getMetrics); }; $scope.setCurDayTo = function(val) { if (val) { $scope.selectCtrl.toDateTimestamp = moment(val).utc(); - $scope.datepickerObjTo.inputMoment = $scope.selectCtrl.toDateTimestamp; $scope.datepickerObjTo.inputDate = $scope.selectCtrl.toDateTimestamp.toDate(); } else { - $scope.datepickerObjTo.inputMoment = $scope.selectCtrl.toDateTimestamp; $scope.datepickerObjTo.inputDate = $scope.selectCtrl.toDateTimestamp.toDate(); } + setDiffDateInDays(); + setMetricsHelper(getMetrics); }; @@ -1332,8 +1167,9 @@ angular.module('emission.main.metrics',['nvd3', ] }); } - - $scope.datepickerObjBase = { + $scope.datepickerObjFrom = { + callback: $scope.setCurDayFrom, + inputDate: $scope.selectCtrl.fromDateTimestamp.toDate(), todayLabel: $translate.instant('list-datepicker-today'), //Optional closeLabel: $translate.instant('list-datepicker-close'), //Optional setLabel: $translate.instant('list-datepicker-set'), //Optional @@ -1345,23 +1181,29 @@ angular.module('emission.main.metrics',['nvd3', from: new Date(2015, 1, 1), to: new Date(), showTodayButton: true, + dateFormat: 'dd MMM', closeOnSelect: false, // add this instruction if you want to exclude a particular weekday, e.g. Saturday disableWeekdays: [6] }; - - $scope.datepickerObjFrom = angular.copy($scope.datepickerObjBase); - angular.extend($scope.datepickerObjFrom, { - callback: $scope.setCurDayFrom, - inputDate: $scope.selectCtrl.fromDateTimestamp.toDate(), - inputMoment: $scope.selectCtrl.fromDateTimestamp, - }); - - $scope.datepickerObjTo = angular.copy($scope.datepickerObjBase); - angular.extend($scope.datepickerObjTo, { + $scope.datepickerObjTo = { callback: $scope.setCurDayTo, inputDate: $scope.selectCtrl.toDateTimestamp.toDate(), - inputMoment: $scope.selectCtrl.toDateTimestamp, - }); + todayLabel: $translate.instant('list-datepicker-today'), //Optional + closeLabel: $translate.instant('list-datepicker-close'), //Optional + setLabel: $translate.instant('list-datepicker-set'), //Optional + titleLabel: $translate.instant('metrics.pick-a-date'), + mondayFirst: false, + weeksList: moment.weekdaysMin(), + monthsList: moment.monthsShort(), + templateType: 'popup', + from: new Date(2015, 1, 1), + to: new Date(), + showTodayButton: true, + dateFormat: 'dd MMM', + closeOnSelect: false, + // add this instruction if you want to exclude a particular weekday, e.g. Saturday disableWeekdays: [6] + }; + setDiffDateInDays(); $scope.pickFromDay = function() { ionicDatePicker.openDatePicker($scope.datepickerObjFrom); @@ -1370,72 +1212,4 @@ angular.module('emission.main.metrics',['nvd3', $scope.pickToDay = function() { ionicDatePicker.openDatePicker($scope.datepickerObjTo); } - - $scope.extendFootprintCard = function() { - if($scope.expandedf){ - $scope.expandedf = false; - } else { - $scope.expandedf = true - } - } - $scope.checkFootprintCardExpanded = function() { - return ($scope.expandedf)? "icon ion-chevron-up" : "icon ion-chevron-down"; - } - $scope.extendCalorieCard = function() { - if($scope.expandedc){ - $scope.expandedc = false; - } else { - $scope.expandedc = true - } - } - $scope.checkCalorieCardExpanded = function() { - return ($scope.expandedc)? "icon ion-chevron-up" : "icon ion-chevron-down"; - } - - $scope.changeFootprintCardHeight = function() { - return ($scope.expandedf)? "expanded-footprint-card" : "small-footprint-card"; - } - - $scope.changeCalorieCardHeight = function() { - return ($scope.expandedc)? "expanded-calorie-card" : "small-calorie-card"; - } - - -}) -.directive('diffdisplay', function() { - return { - scope: { - change: "=" - }, - link: function(scope) { - if (isNaN(scope.change.low)) scope.change.low = 0; - if (isNaN(scope.change.high)) scope.change.high = 0; - console.log("In diffdisplay, after changes, scope = ", scope); - }, - templateUrl: "templates/metrics/arrow-greater-lesser.html" - } -}) -.directive('rangedisplay', function() { - return { - scope: { - range: "=" - }, - link: function(scope) { - // console.log("RANGE DISPLAY "+JSON.stringify(scope.range)); - var humanize = function(num) { - if (Math.abs(num) < 1) { - return num.toFixed(2); - } else { - return num.toFixed(0); - } - } - - if (Math.abs(scope.range.high - scope.range.low) < 1) { - scope.tinyDiff = true; - } - scope.lowFmt = humanize(scope.range.low); - scope.highFmt = humanize(scope.range.high); - }, - templateUrl: "templates/metrics/range-display.html" - } }); diff --git a/www/js/services.js b/www/js/services.js index 6c1733182..3571228d7 100644 --- a/www/js/services.js +++ b/www/js/services.js @@ -430,6 +430,183 @@ angular.module('emission.services', ['emission.plugin.logger', }) +.service('CarbonDatasetHelper', function(KVStore) { + var CARBON_DATASET_KEY = 'carbon_dataset_locale'; + + // Values are in Kg/PKm (kilograms per passenger-kilometer) + // Sources for EU values: + // - Tremod: 2017, CO2, CH4 and N2O in CO2-equivalent + // - HBEFA: 2020, CO2 (per country) + // German data uses Tremod. Other EU countries (and Switzerland) use HBEFA for car and bus, + // and Tremod for train and air (because HBEFA doesn't provide these). + // EU data is an average of the Tremod/HBEFA data for the countries listed; + // for this average the HBEFA data was used also in the German set (for car and bus). + var carbonDatasets = { + US: { + regionName: "United States", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 267/1609, + BUS: 278/1609, + LIGHT_RAIL: 120/1609, + SUBWAY: 74/1609, + TRAM: 90/1609, + TRAIN: 92/1609, + AIR_OR_HSR: 217/1609 + } + }, + EU: { // Plain average of values for the countries below (using HBEFA for car and bus, Tremod for others) + regionName: "European Union", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.14515, + BUS: 0.04751, + LIGHT_RAIL: 0.064, + SUBWAY: 0.064, + TRAM: 0.064, + TRAIN: 0.048, + AIR_OR_HSR: 0.201 + } + }, + DE: { + regionName: "Germany", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.139, // Tremod (passenger car) + BUS: 0.0535, // Tremod (average city/coach) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + }, + FR: { + regionName: "France", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.13125, // HBEFA (passenger car, considering 1 passenger) + BUS: 0.04838, // HBEFA (average short/long distance, considering 16/25 passengers) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + }, + AT: { + regionName: "Austria", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.14351, // HBEFA (passenger car, considering 1 passenger) + BUS: 0.04625, // HBEFA (average short/long distance, considering 16/25 passengers) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + }, + SE: { + regionName: "Sweden", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.13458, // HBEFA (passenger car, considering 1 passenger) + BUS: 0.04557, // HBEFA (average short/long distance, considering 16/25 passengers) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + }, + NO: { + regionName: "Norway", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.13265, // HBEFA (passenger car, considering 1 passenger) + BUS: 0.04185, // HBEFA (average short/long distance, considering 16/25 passengers) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + }, + CH: { + regionName: "Switzerland", + footprintData: { + WALKING: 0, + BICYCLING: 0, + CAR: 0.17638, // HBEFA (passenger car, considering 1 passenger) + BUS: 0.04866, // HBEFA (average short/long distance, considering 16/25 passengers) + LIGHT_RAIL: 0.064, // Tremod (DE tram, urban rail and subway) + SUBWAY: 0.064, // Tremod (DE tram, urban rail and subway) + TRAM: 0.064, // Tremod (DE tram, urban rail and subway) + TRAIN: 0.048, // Tremod (DE average short/long distance) + AIR_OR_HSR: 0.201 // Tremod (DE airplane) + } + } + }; + + var defaultCarbonDatasetCode = 'US'; + var currentCarbonDatasetCode = defaultCarbonDatasetCode; + + // we need to call the method from within a promise in initialize() + // and using this.setCurrentCarbonDatasetLocale doesn't seem to work + var setCurrentCarbonDatasetLocale = function(localeCode) { + for (var code in carbonDatasets) { + if (code == localeCode) { + currentCarbonDatasetCode = localeCode; + break; + } + } + } + + this.loadCarbonDatasetLocale = function() { + return KVStore.get(CARBON_DATASET_KEY).then(function(localeCode) { + Logger.log("CarbonDatasetHelper.loadCarbonDatasetLocale() obtained value from storage [" + localeCode + "]"); + if (!localeCode) { + localeCode = defaultCarbonDatasetCode; + Logger.log("CarbonDatasetHelper.loadCarbonDatasetLocale() no value in storage, using [" + localeCode + "] instead"); + } + setCurrentCarbonDatasetLocale(localeCode); + }); + } + + this.saveCurrentCarbonDatasetLocale = function (localeCode) { + setCurrentCarbonDatasetLocale(localeCode); + KVStore.set(CARBON_DATASET_KEY, currentCarbonDatasetCode); + Logger.log("CarbonDatasetHelper.saveCurrentCarbonDatasetLocale() saved value [" + currentCarbonDatasetCode + "] to storage"); + } + + this.getCarbonDatasetOptions = function() { + var options = []; + for (var code in carbonDatasets) { + options.push({ + text: code, //carbonDatasets[code].regionName, + value: code + }); + } + return options; + }; + + this.getCurrentCarbonDatasetCode = function () { + return currentCarbonDatasetCode; + }; + + this.getCurrentCarbonDatasetFootprint = function () { + return carbonDatasets[currentCarbonDatasetCode].footprintData; + }; +}) + // common configuration methods across all screens // e.g. maps // for consistent L&F diff --git a/www/js/splash/localnotify.js b/www/js/splash/localnotify.js index e81462ff7..dde7012bc 100644 --- a/www/js/splash/localnotify.js +++ b/www/js/splash/localnotify.js @@ -17,18 +17,17 @@ angular.module('emission.splash.localnotify', ['emission.plugin.logger', localNotify.getRedirectState = function(notification) { // TODO: Think whether this should be in data or in category if (angular.isDefined(notification.data)) { - return [notification.data.redirectTo, notification.data.redirectParams]; + return notification.data.redirectTo; } return undefined; } - localNotify.handleLaunch = function(targetState, targetParams) { + localNotify.handleLaunch = function(targetState) { $rootScope.redirectTo = targetState; - $rootScope.redirectParams = targetParams; - $state.go(targetState, targetParams, { reload : true }); + $state.go(targetState); } - localNotify.handlePrompt = function(notification, targetState, targetParams) { + localNotify.handlePrompt = function(notification, targetState) { Logger.log("Prompting for notification "+notification.title+" and text "+notification.text); var promptPromise = $ionicPopup.show({title: notification.title, template: notification.text, @@ -49,7 +48,7 @@ angular.module('emission.splash.localnotify', ['emission.plugin.logger', }); promptPromise.then(function(handle) { if (handle == true) { - localNotify.handleLaunch(targetState, targetParams); + localNotify.handleLaunch(targetState); } else { Logger.log("Ignoring notification "+notification.title+" and text "+notification.text); } @@ -57,17 +56,13 @@ angular.module('emission.splash.localnotify', ['emission.plugin.logger', } localNotify.handleNotification = function(notification,state,data) { - // Comment this out for ease of testing. But in the real world, we do in fact want to - // cancel the notification to avoid "hey! I just fixed this, why is the notification still around!" - // issues - // $window.cordova.plugins.notification.local.cancel(notification.id); - var [targetState, targetParams] = localNotify.getRedirectState(notification); + var targetState = localNotify.getRedirectState(notification); Logger.log("targetState = "+targetState); if (angular.isDefined(targetState)) { - if (state.foreground == true) { - localNotify.handlePrompt(notification, targetState, targetParams); + if (state == "foreground") { + localNotify.handlePrompt(notification, targetState); } else { - localNotify.handleLaunch(targetState, targetParams); + localNotify.handleLaunch(targetState); } } } @@ -84,7 +79,10 @@ angular.module('emission.splash.localnotify', ['emission.plugin.logger', // alert("notification cancelled, no report"); }); $window.cordova.plugins.notification.local.on('trigger', function (notification, state, data) { - localNotify.handleNotification(notification, state, data); + Logger.log("triggered, no action"); + if ($ionicPlatform.is('ios')) { + localNotify.handleNotification(notification, state, data); + } }); $window.cordova.plugins.notification.local.on('click', function (notification, state, data) { localNotify.handleNotification(notification, state, data); @@ -93,8 +91,6 @@ angular.module('emission.splash.localnotify', ['emission.plugin.logger', $ionicPlatform.ready().then(function() { localNotify.registerRedirectHandler(); - Logger.log("finished registering handlers, about to fire queued events"); - $window.cordova.plugins.notification.local.fireQueuedEvents(); }); return localNotify; diff --git a/www/js/splash/pushnotify.js b/www/js/splash/pushnotify.js index 07699add6..1f1ecf8e3 100644 --- a/www/js/splash/pushnotify.js +++ b/www/js/splash/pushnotify.js @@ -1,18 +1,3 @@ -/* - * This module deals with the interaction with the push plugin, the redirection - * of silent push notifications and the re-parsing of iOS pushes. It then - * re-emits a CLOUD_NOTIFICATION_EVENT that other modules can listen to. - * - * Other modules, such as the survey code, and the remotenotify module, listen - * to these CLOUD_NOTIFICATION_EVENTs and handle them through launching - * surveys, displaying popups, etc. - * - * This allows us to decouple the push handling logic from push notification - * interface. Note that the local notification is not currently decoupled since - * it only supports redirection to a specific app page. If the local - * notification handling gets more complex, we should consider decoupling it as well. - */ - angular.module('emission.splash.pushnotify', ['emission.plugin.logger', 'emission.services', 'emission.splash.startprefs']) @@ -32,8 +17,9 @@ angular.module('emission.splash.pushnotify', ['emission.plugin.logger', "clearBadge": true }, "android": { - "iconColor": "#54DCC1", - "icon": "ic_mood_question", + "senderID": "1096592179912", + "iconColor": "#1123CB", + "icon": "ic_question_answer", "clearNotifications": true } }); @@ -74,7 +60,7 @@ angular.module('emission.splash.pushnotify', ['emission.plugin.logger', pushnotify.registerPush = function() { pushnotify.registerPromise().then(function(t) { - // alert("Token = "+JSON.stringify(t)); + // alert("Token = "+JSON.stringify(t)); Logger.log("Token = "+JSON.stringify(t)); return $window.cordova.plugins.BEMServerSync.getConfig().then(function(config) { return config.sync_interval; diff --git a/www/js/splash/startprefs.js b/www/js/splash/startprefs.js index 0ee47fc81..e18c4054d 100644 --- a/www/js/splash/startprefs.js +++ b/www/js/splash/startprefs.js @@ -172,10 +172,8 @@ angular.module('emission.splash.startprefs', ['emission.plugin.logger', return {state: 'root.main.diary'}; } else if (angular.isDefined($rootScope.redirectTo)) { var redirState = $rootScope.redirectTo; - var redirParams = $rootScope.redirectParams; $rootScope.redirectTo = undefined; - $rootScope.redirectParams = undefined; - return {state: redirState, params: redirParams}; + return {state: redirState, params: {}}; } else { return {state: 'root.main.inf_scroll', params: {}}; } diff --git a/www/js/stats/clientstats.js b/www/js/stats/clientstats.js index 3053b0282..e29c05406 100644 --- a/www/js/stats/clientstats.js +++ b/www/js/stats/clientstats.js @@ -4,7 +4,7 @@ angular.module('emission.stats.clientstats', []) .factory('ClientStats', function($window) { var clientStat = {}; - + clientStat.CLIENT_TIME = "stats/client_time"; clientStat.CLIENT_ERROR = "stats/client_error"; clientStat.CLIENT_NAV_EVENT = "stats/client_nav_event"; @@ -13,16 +13,11 @@ angular.module('emission.stats.clientstats', []) return { STATE_CHANGED: "state_changed", BUTTON_FORCE_SYNC: "button_sync_forced", - CHECKED_DIARY: "checked_diary", - DIARY_TIME: "diary_time", - METRICS_TIME: "metrics_time", CHECKED_INF_SCROLL: "checked_inf_scroll", INF_SCROLL_TIME: "inf_scroll_time", VERIFY_TRIP: "verify_trip", LABEL_TAB_SWITCH: "label_tab_switch", - SELECT_LABEL: "select_label", - EXPANDED_TRIP: "expanded_trip", - NOTIFICATION_OPEN: "notification_open" + SELECT_LABEL: "select_label" }; } diff --git a/www/js/survey/launch.js b/www/js/survey/launch.js new file mode 100644 index 000000000..cbf2b9b4b --- /dev/null +++ b/www/js/survey/launch.js @@ -0,0 +1,214 @@ +'use strict'; + +angular.module('emission.survey.launch', ['emission.services', + 'emission.plugin.logger']) + +.factory('SurveyLaunch', function($http, $window, $ionicPopup, $rootScope, + CommHelper, Logger) { + + var surveylaunch = {}; + var replace_uuid= function(iab, elementSelector, scriptFile) { + return Promise.all([$http.get(scriptFile), + CommHelper.getUser()]) + .then(function([scriptText, userProfile]) { + // alert("finished loading script"); + Logger.log(scriptText.data); + var uuid = userProfile.user_id['$uuid'] + // I tried to use http://stackoverflow.com/posts/23387583/revisions + // for the idea on how to invoke the function in the script + // file, but the callback function was never invoked. So I edit the + // script file directly and insert the userId. + Logger.log("inserting user id into survey. userId = "+ uuid + +" element selector = "+elementSelector); + var codeTemplate = scriptText.data; + var codeString = codeTemplate.replace("SCRIPT_REPLACE_VALUE", uuid) + .replace("SCRIPT_REPLACE_ELEMENT_SEL", elementSelector); + Logger.log(codeString); + return iab.executeScript({ code: codeString }); + }); + }; + + var replace_time = function(iab, tsElementId, fmtTimeElementId, ts, label) { + // we don't need to get the user because we have the timestamp right here + return Promise.all([$http.get("js/survey/time_insert.js")]) + .then(function([scriptText]) { + // alert("finished loading script"); + Logger.log(scriptText.data); + // I tried to use http://stackoverflow.com/posts/23387583/revisions + // for the idea on how to invoke the function in the script + // file, but the callback function was never invoked. So I edit the + // script file directly and insert the userId. + Logger.log("inserting ts into survey. ts = "+ ts + +" element id = "+tsElementId + +" fmtTime"+moment.unix(ts).format() + +" element id = "+fmtTimeElementId); + var codeTemplate = scriptText.data; + var tsCodeString = codeTemplate.replace("SCRIPT_REPLACE_VALUE", ts) + .replace("SCRIPT_REPLACE_ELEMENT_ID", tsElementId) + .replace(/LABEL/g, label+"Ts"); + Logger.log("After ts replace" + tsCodeString); + $cordovaInAppBrowser.executeScript({ code: tsCodeString }); + var fmtTimeCodeString = codeTemplate.replace("SCRIPT_REPLACE_VALUE", moment.unix(ts).format()) + .replace("SCRIPT_REPLACE_ELEMENT_ID", fmtTimeElementId) + .replace(/LABEL/g, label+"FmtTime"); + Logger.log("After fmtTimeCode replace" + tsCodeString); + iab.executeScript({ code: fmtTimeCodeString }); + }); + }; + + + // BEGIN: startSurveyForCompletedTrip + + // Put the launch in one place so that + surveylaunch.options = "location=yes,clearcache=no,toolbar=yes,hideurlbar=yes"; + /* + surveylaunch.options = { + location: window.cordova.platformId == 'ios'? 'no' : 'yes', + clearcache: 'no', + toolbar: 'yes', + hideurlbar: 'yes' + }; + */ + + surveylaunch.startSurveyForCompletedTrip = function (url, uuidElementId, + startTsElementId, + endTsElementId, + startFmtTimeElementId, + endFmtTimeElementId, + startTs, + endTs) { + // THIS LINE FOR inAppBrowser + let iab = $window.cordova.InAppBrowser.open(url, '_blank', surveylaunch.options); + + iab.addEventListener("loadstop", function(event) { + console.log("successfully opened page with result "+JSON.stringify(event)); + // success + Promise.all([replace_uuid(iab, uuidElementId, "js/survey/uuid_insert.js"), + replace_time(iab, startTsElementId, startFmtTimeElementId, startTs, "Start"), + replace_time(iab, endTsElementId, endFmtTimeElementId, endTs, "End")]) + .catch(function(error) { // catch for all promises + $ionicPopup.alert({"template": "Relaunching survey - while replacing uuid, got error "+ JSON.stringify(error)}) + .then(function() { + surveylaunch.startSurvey(url, uuidElementId, + startTsElementId, endTsElementId, + startFmtTimeElementId, endTsElementId, + startTs, endTs); + }); + }); + }) + + iab.addEventListener('loaderror', function(event) { + Logger.displayError("Unable to launch survey", JSON.stringify(event)); + }); + + iab.addEventListener('loadstart', function(event) { + console.log("started loading, event = "+JSON.stringify(event)); + /* + if (event.url == 'https://bic2cal.eecs.berkeley.edu/') { + $cordovaInAppBrowser.close(); + } + */ + }); + iab.addEventListener('exit', function(event) { + console.log("exiting, event = "+JSON.stringify(event)); + // we could potentially restore the close-on-bic2cal functionality above + // if we unregistered here + }); + } + // END: startSurveyForCompletedTrip + + var startSurveyCommon = function (url, elementSelector, elementSelScriptFile) { + // THIS LINE FOR inAppBrowser + let iab = $window.cordova.InAppBrowser.open(url, '_blank', surveylaunch.options); + iab.addEventListener("loadstop", function(event) { + console.log("successfully opened page with result "+JSON.stringify(event)); + // success + replace_uuid(iab, elementSelector, elementSelScriptFile) + .catch(function(error) { + iab.close(); + $ionicPopup.alert({"template": "Relaunching survey - while replacing uuid, got error "+ error}) + .then(function() { + startSurveyCommon(url,elementSelector, elementSelScriptFile); + }); + }); + }); + + iab.addEventListener('loaderror', function(event) { + Logger.displayError("Unable to launch survey", event); + }); + + iab.addEventListener("loadstart", function(event) { + console.log("started loading, event = "+JSON.stringify(event)); + /* + if (event.url == 'https://bic2cal.eecs.berkeley.edu/') { + $cordovaInAppBrowser.close(); + } + */ + }); + + iab.addEventListener('exit', function(event) { + console.log("exiting, event = "+JSON.stringify(event)); + // we could potentially restore the close-on-bic2cal functionality above + // if we unregistered here + }); + }; + + surveylaunch.startSurveyWithID = function (url, uuidElementId) { + startSurveyCommon(url, uuidElementId, "js/survey/uuid_insert_id.js"); + } + + surveylaunch.startSurveyWithXPath = function (url, elementXPath) { + startSurveyCommon(url, elementXPath, "js/survey/uuid_insert_xpath.js"); + } + + surveylaunch.startSurveyPrefilled = function (url, fillers) { + const code = fillers.reduce( (previous, {elementId, elementValue}) => { + previous.push(`document.getElementById("${elementId}").value = "${elementValue}"`); + return previous; + }, []) + .join("; "); + + let iab = $window.cordova.InAppBrowser.open(url, '_blank', surveylaunch.options); + iab.addEventListener('loaderror', function(event) { + Logger.displayError("Unable to launch survey", event); + }); + iab.addEventListener('loadstop', function() { + iab.executeScript({ code }); + }); + } + + surveylaunch.init = function() { + $rootScope.$on('cloud:push:notification', function(event, data) { + Logger.log("data = "+JSON.stringify(data)); + if (angular.isDefined(data.additionalData) && + angular.isDefined(data.additionalData.payload) && + angular.isDefined(data.additionalData.payload.alert_type) && + data.additionalData.payload.alert_type == "survey") { + var survey_spec = data.additionalData.payload.spec; + if (angular.isDefined(survey_spec) && + angular.isDefined(survey_spec.url)) { + if (angular.isDefined(survey_spec.uuidElementId)) { + surveylaunch.startSurveyWithID(survey_spec.url, survey_spec.uuidElementId); + } else if (angular.isDefined(survey_spec.uuidXPath)) { + surveylaunch.startSurveyWithXPath(survey_spec.url, survey_spec.uuidXPath); + } else if (angular.isDefined(survey_spec.uuidSearchParam)) { + CommHelper.getUser().then(function(userProfile) { + const fillers = [{ + "elementId": survey_spec.uuidSearchParam, + "elementValue": userProfile.user_id['$uuid'] + }]; + SurveyLaunch.startSurveyPrefilled(survey_spec.url, fillers); + }); + } else { + $ionicPopup.alert("survey was not specified correctly. spec is "+JSON.stringify(survey_spec)); + } + } else { + $ionicPopup.alert("survey was not specified correctly. spec is "+JSON.stringify(survey_spec)); + } + } + }); + }; + + surveylaunch.init(); + return surveylaunch; +}); diff --git a/www/js/survey/time_insert.js b/www/js/survey/time_insert.js new file mode 100644 index 000000000..66235c16c --- /dev/null +++ b/www/js/survey/time_insert.js @@ -0,0 +1,22 @@ +var populateIdLABEL = function(time) { + var curriedPILABEL = function() { + populateIdLABEL(time); + }; + if (document == null) { +// alert('document == '+document); + setTimeout(curriedPILABEL, 1000); + } else { + var el = document.getElementById('SCRIPT_REPLACE_ELEMENT_ID'); +// alert('document = '+document+ ' element = '+ el); + if (el == null) { +// alert('element == null!'); + setTimeout(curriedPILABEL, 1000); + } else { + el.value += time; + } + } +}; + +// alert("executing script"); +populateIdLABEL('SCRIPT_REPLACE_VALUE'); +// alert("done executing script"); diff --git a/www/js/survey/uuid_insert_id.js b/www/js/survey/uuid_insert_id.js new file mode 100644 index 000000000..f3617c564 --- /dev/null +++ b/www/js/survey/uuid_insert_id.js @@ -0,0 +1,22 @@ +var populateId = function(userId) { + var curriedPI = function() { + populateId(userId); + }; + if (document == null) { +// alert('document == '+document); + setTimeout(curriedPI, 1000); + } else { + var el = document.getElementById('SCRIPT_REPLACE_ELEMENT_SEL'); +// alert('document = '+document+ ' element = '+ el); + if (el == null) { +// alert('element == null!'); + setTimeout(curriedPI, 1000); + } else { + el.value = userId; + } + } +}; + +// alert("executing script"); +populateId('SCRIPT_REPLACE_VALUE'); +// alert("done executing script"); diff --git a/www/js/survey/uuid_insert_xpath.js b/www/js/survey/uuid_insert_xpath.js new file mode 100644 index 000000000..b70a2fea1 --- /dev/null +++ b/www/js/survey/uuid_insert_xpath.js @@ -0,0 +1,27 @@ +var populateId = function(userId) { + var curriedPI = function() { + populateId(userId); + }; + if (document == null) { +// alert('document == '+document); + setTimeout(curriedPI, 1000); + } else { + var xpathres = document.evaluate('SCRIPT_REPLACE_ELEMENT_SEL', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE); + var el = xpathres.iterateNext(); + var endElement = xpathres.iterateNext(); + if (endElement != null) { + alert("Found multiple matches for xpath. Second match is "+endElement); + } +// alert('document = '+document+ ' element = '+ el); + if (el == null) { +// alert('element == null!'); + setTimeout(curriedPI, 1000); + } else { + el.value = userId; + } + } +}; + +// alert("executing script"); +populateId('SCRIPT_REPLACE_VALUE'); +// alert("done executing script"); diff --git a/www/js/tripconfirm/post-trip-map-display.js b/www/js/tripconfirm/post-trip-map-display.js new file mode 100644 index 000000000..4d25a4a84 --- /dev/null +++ b/www/js/tripconfirm/post-trip-map-display.js @@ -0,0 +1,315 @@ +'use strict'; +angular.module('emission.tripconfirm.posttrip.map',['ui-leaflet', 'ng-walkthrough', + 'emission.plugin.kvstore', + 'emission.services', + 'emission.tripconfirm.services', + 'emission.plugin.logger', + 'emission.main.diary.services']) + +.controller("PostTripMapCtrl", function($scope, $window, $state, + $stateParams, $ionicLoading, + leafletData, leafletMapEvents, nzTour, KVStore, + Logger, DiaryHelper, ConfirmHelper, Config, + UnifiedDataLoader, $ionicSlideBoxDelegate, $ionicPopup, + $translate) { + Logger.log("controller PostTripMapDisplay called with params = "+ + JSON.stringify($stateParams)); + var MODE_CONFIRM_KEY = "manual/mode_confirm"; + var PURPOSE_CONFIRM_KEY = "manual/purpose_confirm"; + + $scope.mapCtrl = {}; + angular.extend($scope.mapCtrl, { + defaults: {} + }); + angular.extend($scope.mapCtrl.defaults, Config.getMapTiles()); + var LOC_KEY = "background/filtered_location"; + + $scope.mapCtrl.start_ts = $stateParams.start_ts; + $scope.mapCtrl.end_ts = $stateParams.end_ts; + if (($scope.mapCtrl.start_ts == null) || ($scope.mapCtrl.end_ts == null) + || ($scope.mapCtrl.start_ts == 0) || ($scope.mapCtrl.end_ts == 0)) { + Logger.log("BUG 413 check: stateParams = "+JSON.stringify($stateParams)+ + " mapCtrl = "+$state.mapCtrl.start_ts+","+$state.mapCtrl.end_ts); + } + + $scope.$on('$ionicView.enter', function() { + // we want to initialize these while entering the screen instead of while + // creating the controller, because the app may stick around for a while, + // and then when the user clicks on a notification, they will re-enter this + // screen. + Logger.log("entered post-trip map screen, resetting start = "+ + $stateParams.start_ts+" end = "+$stateParams.end_ts); + $scope.mapCtrl.start_ts = $stateParams.start_ts; + $scope.mapCtrl.end_ts = $stateParams.end_ts; + if (($scope.mapCtrl.start_ts == null) || ($scope.mapCtrl.end_ts == null) + || ($scope.mapCtrl.start_ts == 0) || ($scope.mapCtrl.end_ts == 0)) { + Logger.log("BUG 413 check: stateParams = "+JSON.stringify($stateParams)+ + " mapCtrl = "+$state.mapCtrl.start_ts+","+$state.mapCtrl.end_ts); + } + $scope.draftMode = {"start_ts": $stateParams.start_ts, "end_ts": $stateParams.end_ts}; + $scope.draftPurpose = {"start_ts": $stateParams.start_ts, "end_ts": $stateParams.end_ts}; + }); + + $scope.$on('$ionicView.leave', function() { + Logger.log("entered post-trip map screen, prompting for values"); + $scope.draftMode = angular.undefined; + $scope.draftPurpose = angular.undefined; + }); + + /* + var mapEvents = leafletMapEvents.getAvailableMapEvents(); + for (var k in mapEvents) { + var eventName = 'leafletDirectiveMap.incident.' + mapEvents[k]; + $scope.$on(eventName, function(event, data){ + Logger.log("in mapEvents, event = "+JSON.stringify(event.name)+ + " leafletEvent = "+JSON.stringify(data.leafletEvent.type)+ + " leafletObject = "+JSON.stringify(data.leafletObject.getBounds())); + $scope.eventDetected = event.name; + }); + } + */ + + $scope.refreshMap = function(start_ts, end_ts) { + var db = $window.cordova.plugins.BEMUserCache; + var tq = {key: "write_ts", + startTs: start_ts, + endTs: end_ts}; + $scope.mapCtrl.cache = {}; + $scope.mapCtrl.server = {}; + // Clear everything before we start loading new data + $scope.mapCtrl.geojson = {}; + $scope.mapCtrl.geojson.pointToLayer = DiaryHelper.pointFormat; + $scope.mapCtrl.geojson.data = { + type: "Point", + coordinates: [-122, 37], + properties: { + feature_type: "location" + } + }; + Logger.log("About to query buffer for "+JSON.stringify(tq)); + $ionicLoading.show({ + template: $translate.instant('loading') + }); + UnifiedDataLoader.getUnifiedSensorDataForInterval(LOC_KEY, tq) + .then(function(resultList) { + Logger.log("Read data of length "+resultList.length); + $ionicLoading.show({ + template: 'Mapping '+resultList.length+' points' + }); + if (resultList.length > 0) { + var pointCoords = resultList.map(function(locEntry) { + return [locEntry.data.longitude, locEntry.data.latitude]; + }); + var pointTimes = resultList.map(function(locEntry) { + return locEntry.data.ts; + }); + $scope.mapCtrl.cache.features = [{ + type: "Feature", + geometry: { + type: "LineString", + coordinates: pointCoords, + properties: { + times: pointTimes + } + } + }]; + $scope.mapCtrl.cache.data = { + type: "FeatureCollection", + features: $scope.mapCtrl.cache.features, + properties: { + start_ts: start_ts, + end_ts: end_ts + } + }; + + Logger.log("About to get section points"); + var points = resultList.map(function(locEntry) { + var coords = [locEntry.data.longitude, locEntry.data.latitude]; + // Logger.log("coords = "+coords); + return {loc: coords, + latlng: L.GeoJSON.coordsToLatLng(coords), + ts: locEntry.data.ts}; + }); + $scope.mapCtrl.cache.points = points; + Logger.log("Finished getting section points"); + /* + $scope.mapCtrl.cache.points = resultList.map(function(locEntry) { + Logger.log("locEntry = "+JSON.serialize(locEntry)); + var currMappedPoint = {loc: locEntry.data.loc, + latlng: L.GeoJSON.coordsToLatLng(locEntry.data.loc), + ts: locEntry.data.ts}; + Logger.log("Mapped point "+ JSON.stringify(locEntry)+" to "+currMappedPoint); + return currMappedPoint; + return locEntry.data.ts; + }); + Logger.log("Finished getting section points"); + */ + + $scope.mapCtrl.cache.loaded = true; + $scope.$apply(function() { + // data is in the cache, so we can just load it from there + // Logger.log("About to set geojson = "+JSON.stringify($scope.mapCtrl.cache.data)); + $scope.mapCtrl.geojson.data = $scope.mapCtrl.cache.data; + }); + + } + $ionicLoading.hide(); + }) + .catch(function(error) { + $ionicLoading.hide(); + Logger.displayError("Unable to retrieve data for map display", error); + }); + } + + $scope.refreshWholeMap = function() { + $scope.refreshMap($scope.mapCtrl.start_ts, $scope.mapCtrl.end_ts); + } + + $scope.refreshTiles = function() { + $scope.$broadcast('invalidateSize'); + }; + + $scope.getFormattedDate = DiaryHelper.getFormattedDate; + $scope.getFormattedTime = DiaryHelper.getFormattedTime; + $scope.refreshMap($scope.mapCtrl.start_ts, $scope.mapCtrl.end_ts); + + /* START: ng-walkthrough code */ + // Tour steps + var tour = { + config: { + mask: { + visibleOnNoTarget: true, + clickExit: true + } + }, + steps: [{ + target: '#mode_list', + content: 'Scroll for more options' + }] + }; + + var startWalkthrough = function () { + nzTour.start(tour).then(function(result) { + Logger.log("post trip mode walkthrough start completed, no error"); + }).catch(function(err) { + Logger.displayError("post trip mode walkthrough errored", err); + }); + }; + + + var checkTripConfirmTutorialDone = function () { + var TRIP_CONFIRM_DONE_KEY = 'tripconfirm_tutorial_done'; + var tripconfirmTutorialDone = KVStore.getDirect(TRIP_CONFIRM_DONE_KEY); + if (!tripconfirmTutorialDone) { + startWalkthrough(); + KVStore.set(TRIP_CONFIRM_DONE_KEY, true); + } + }; + + $scope.startWalkthrough = function () { + startWalkthrough(); + } + + $scope.closeView = function () { + $state.go('root.main.control'); + } + + $scope.$on('$ionicView.afterEnter', function(ev) { + // Workaround from + // https://github.com/driftyco/ionic/issues/3433#issuecomment-195775629 + if(ev.targetScope !== $scope) + return; + checkTripConfirmTutorialDone(); + }); + /* END: ng-walkthrough code */ + + $scope.selected = {mode: {value: ''},purpose: {value: ''},other: {text: ''}, other_to_store:''}; + + var checkOtherOptionOnTap = function($scope, choice) { + return function(e) { + if (!$scope.selected.other.text) { + e.preventDefault(); + } else { + $scope.selected.other_to_store = $scope.selected.other.text; + $scope.selected.other.text = ''; + return $scope.selected.other; + } + }; + }; + + $scope.choosePurpose = function() { + if($scope.selected.purpose.value == "other_purpose"){ + ConfirmHelper.checkOtherOption($scope.selected.purpose, checkOtherOptionOnTap, $scope); + } + }; + + $scope.chooseMode = function (){ + if($scope.selected.mode.value == "other_mode"){ + ConfirmHelper.checkOtherOption($scope.selected.mode, checkOtherOptionOnTap, $scope); + } + }; + + $scope.secondSlide = false; + + $scope.nextSlide = function() { + if($scope.selected.mode.value == "other_mode" && $scope.selected.other_to_store.length > 0) { + $scope.secondSlide = true; + console.log($scope.selected.other_to_store); + // store other_to_store here + $scope.storeMode($scope.selected.other_to_store, true /* isOther */); + $ionicSlideBoxDelegate.next(); + } else if ($scope.selected.mode.value != "other_mode" && $scope.selected.mode.value.length > 0) { + $scope.secondSlide = true; + console.log($scope.selected.mode); + // This storeMode expects a string, not an object with a value string + $scope.storeMode($scope.selected.mode.value, false /* isOther */); + $ionicSlideBoxDelegate.next(); + } + }; + + $scope.doneSlide = function() { + if($scope.selected.purpose.value == "other_purpose" && $scope.selected.other_to_store.length > 0) { + console.log($scope.selected.other_to_store); + // store other_to_store here + $scope.storePurpose($scope.selected.other_to_store, true /* isOther */); + $scope.closeView(); + } else if ($scope.selected.purpose.value != "other_purpose" && $scope.selected.purpose.value.length > 0) { + console.log($scope.selected.purpose); + // This storePurpose expects a string, not an object with a value string + $scope.storePurpose($scope.selected.purpose.value, false /*is Other */); + $scope.closeView(); + } + }; + + $scope.disableSwipe = function() { + $ionicSlideBoxDelegate.enableSlide(false); + }; + + ConfirmHelper.getModeOptions().then(function(modeOptions) { + $scope.modeOptions = modeOptions; + }); + + ConfirmHelper.getPurposeOptions().then(function(purposeOptions) { + $scope.purposeOptions = purposeOptions; + }); + + $scope.storeMode = function(mode_val, isOther) { + if (isOther) { + mode_val = ConfirmHelper.otherTextToValue(mode_val); + } + $scope.draftMode.label = mode_val; + Logger.log("in storeMode, after setting mode_val = "+mode_val+", draftMode = "+JSON.stringify($scope.draftMode)); + $window.cordova.plugins.BEMUserCache.putMessage(MODE_CONFIRM_KEY, $scope.draftMode); + } + + $scope.storePurpose = function(purpose_val, isOther) { + if (isOther) { + purpose_val = ConfirmHelper.otherTextToValue(purpose_val); + } + $scope.draftPurpose.label = purpose_val; + Logger.log("in storePurpose, after setting purpose_val = "+purpose_val+", draftPurpose = "+JSON.stringify($scope.draftPurpose)); + $window.cordova.plugins.BEMUserCache.putMessage(PURPOSE_CONFIRM_KEY, $scope.draftPurpose); + } + + +}); diff --git a/www/js/tripconfirm/post-trip-prompt.js b/www/js/tripconfirm/post-trip-prompt.js new file mode 100644 index 000000000..e9b011427 --- /dev/null +++ b/www/js/tripconfirm/post-trip-prompt.js @@ -0,0 +1,262 @@ +'use strict'; + +angular.module('emission.tripconfirm.posttrip.prompt', ['emission.plugin.logger']) +.factory("PostTripAutoPrompt", function($window, $ionicPlatform, $rootScope, $state, + $ionicPopup, Logger, $translate) { + var ptap = {}; + var REPORT = 737678; // REPORT on the phone keypad + var TRIP_CONFIRM_TEXT = 'TRIP_CONFIRM'; + var TRIP_END_EVENT = "trip_ended"; + + var reportMessage = function(platform) { + var platformSpecificMessage = { + "ios": $translate.instant('post-trip-prompt.platform-specific-message-ios'), + "android": $translate.instant('post-trip-prompt.platform-specific-message-android') + }; + var selMessage = platformSpecificMessage[platform]; + if (!angular.isDefined(selMessage)) { + selMessage = $translate.instant('post-trip-prompt.platform-specific-message-other'); + } + return selMessage; + }; + + var getTripEndReportNotification = function() { + var actions = [{ + id: 'MUTE', + type: 'button', + title: $translate.instant('post-trip-prompt.notification-option-mute'), + icon: 'res://ic_moreoptions', + launch: true, + destructive: false, + authenticationRequired: false + }, { + id: 'SNOOZE', + type: 'button', + title: $translate.instant('post-trip-prompt.notification-option-snooze'), + icon: 'res://ic_moreoptions', + launch: true, + destructive: false, + authenticationRequired: false + }, { + id: 'CHOOSE', + type: 'button', + title: $translate.instant('post-trip-prompt.notification-option-choose'), + icon: 'res://ic_signin', + launch: true, + destructive: false, + authenticationRequired: false + }]; + + var reportNotifyConfig = { + id: REPORT, + title: $translate.instant('post-trip-prompt.notification-title'), + text: reportMessage(ionic.Platform.platform()), + icon: 'file://img/icon.png', + smallIcon: 'res://ic_mood_question.png', + sound: null, + actions: actions, + actionGroupId: TRIP_CONFIRM_TEXT, + autoClear: true + }; + Logger.log("Returning notification config "+JSON.stringify(reportNotifyConfig)); + return reportNotifyConfig; + } + + ptap.registerTripEnd = function() { + Logger.log( "registertripEnd received!" ); + // iOS + var notifyPlugin = $window.cordova.plugins.BEMTransitionNotification; + notifyPlugin.addEventListener(notifyPlugin.TRIP_END, getTripEndReportNotification()) + .then(function(result) { + // $window.broadcaster.addEventListener("TRANSITION_NAME", function(result) { + Logger.log("Finished registering "+notifyPlugin.TRIP_END+" with result "+JSON.stringify(result)); + }) + .catch(function(error) { + Logger.displayError("Unable to register notifications for trip end", error); + }); + } + + var getFormattedTime = function(ts_in_secs) { + if (angular.isDefined(ts_in_secs)) { + return moment(ts_in_secs * 1000).format('LT'); + } else { + return "---"; + } + }; + + var promptReport = function(notification, state, data) { + Logger.log("About to prompt choose the mode for the trip"); + var newScope = $rootScope.$new(); + angular.extend(newScope, notification.data); + newScope.getFormattedTime = getFormattedTime; + Logger.log("notification = "+JSON.stringify(notification)); + Logger.log("state = "+JSON.stringify(state)); + Logger.log("data = "+JSON.stringify(data)); + return $ionicPopup.show({title: "Choose the travel mode and purpose of this trip", + scope: newScope, + template: "{{getFormattedTime(start_ts)}} -> {{getFormattedTime(end_ts)}}", + buttons: [{ + text: $translate.instant('post-trip-prompt.choose-mode'), + type: 'button-positive', + onTap: function(e) { + // e.preventDefault() will stop the popup from closing when tapped. + return true; + } + }, { + text: $translate.instant('post-trip-prompt.skip'), + type: 'button-positive', + onTap: function(e) { + return false; + } + }] + }) + } + + var cleanDataIfNecessary = function(notification, eventOpts) { + // as of version 0.9.0-beta.4, cleaning data is not necessary, since iOS also returns + // pre-parsed notification data. Let's leave this here for a bit in case we need it + // later, but we can also remove it if we don't need it for a year or so + }; + + var displayCompletedTrip = function(notification, eventOpts) { + /* + $rootScope.tripConfirmParams = notification.data; + Logger.log("About to display completed trip from notification "+ + JSON.stringify(notification.data)); + $state.go("root.main.tripconfirm", notification.data); + */ + Logger.log("About to go to diary, which now displays draft information"); + $rootScope.displayingIncident = true; + $state.go("root.main.diary"); + }; + + var checkCategory = function(notification) { + if (notification.actionGroupId == TRIP_CONFIRM_TEXT) { + return true; + } else { + return false; + } + } + + ptap.registerUserResponse = function() { + Logger.log( "registerUserResponse received!" ); + $window.cordova.plugins.notification.local.on('CHOOSE', function (notification, eventOpts) { + if (!checkCategory(notification)) { + Logger.log("notification "+notification+" is not an mode choice, returning..."); + return; + } + Logger.log("Notification, action event"); + cleanDataIfNecessary(notification, eventOpts); + displayCompletedTrip(notification, eventOpts); + }); + $window.cordova.plugins.notification.local.on('SNOOZE', function (notification, eventOpts) { + if (!checkCategory(notification)) { + Logger.log("notification "+notification+" is not an mode choice, returning..."); + return; + } + var now = new Date().getTime(), + _30_mins_from_now = new Date(now + 30 * 60 * 1000); + var after_30_mins_prompt = getTripEndReportNotification(); + after_30_mins_prompt.at = _30_mins_from_now; + $window.cordova.plugins.notification.local.schedule([after_30_mins_prompt]); + if ($ionicPlatform.is('android')) { + $ionicPopup.alert({ + title: $translate.instant('post-trip-prompt.snoozed-reminder'), + template: $translate.instant('post-trip-prompt.snoozed-reapper-message') + }); + } + }); + $window.cordova.plugins.notification.local.on('MUTE', function (notification, eventOpts) { + if (!checkCategory(notification)) { + Logger.log("notification "+notification+" is not an mode choice, returning..."); + return; + } + var now = new Date().getTime(), + _1_min_from_now = new Date(now + 60 * 1000); + var notifyPlugin = $window.cordova.plugins.BEMTransitionNotification; + notifyPlugin.disableEventListener(notifyPlugin.TRIP_END, notification).then(function() { + if ($ionicPlatform.is('ios')) { + $window.cordova.plugins.notification.local.schedule([{ + id: REPORT, + title: $translate.instant('post-trip-prompt.notifications-muted'), + text: $translate.instant('post-trip-prompt.notifications-reenabled'), + at: _1_min_from_now, + data: {redirectTo: "root.main.control"} + }]); + } else if ($ionicPlatform.is('android')) { + $ionicPopup.show({ + title: $translate.instant('post-trip-prompt.muted'), + template: $translate.instant('post-trip-prompt.notifications-muted'), + buttons: [{ + text: $translate.instant('post-trip-prompt.unmute'), + type: 'button-positive', + onTap: function(e) { + return true; + } + }, { + text: $translate.instant('post-trip-prompt.keep-muted'), + type: 'button-positive', + onTap: function(e) { + return false; + } + }] + }).then(function(res) { + if(res == true) { + notifyPlugin.enableEventListener(notifyPlugin.TRIP_END, notification); + } else { + Logger.log("User chose to keep the transition muted"); + } + }); + } + }).catch(function(error) { + Logger.displayError("Error while muting notifications for trip end. Try again later.", error); + }); + }); + $window.cordova.plugins.notification.local.on('clear', function (notification, eventOpts) { + // alert("notification cleared, no report"); + }); + $window.cordova.plugins.notification.local.on('cancel', function (notification, eventOpts) { + // alert("notification cancelled, no report"); + }); + $window.cordova.plugins.notification.local.on('trigger', function (notification, eventOpts) { + // alert("triggered, no action"); + Logger.log("Notification triggered"); + if (!checkCategory(notification)) { + Logger.log("notification "+notification+" is not an mode choice, returning..."); + return; + } + cleanDataIfNecessary(notification, eventOpts); + if($ionicPlatform.is('ios')) { + promptReport(notification, eventOpts).then(function(res) { + if (res == true) { + Logger.log("About to go to prompt page"); + displayCompletedTrip(notification, eventOpts); + } else { + Logger.log("Skipped confirmation reporting"); + } + }); + } else { + Logger.log("About to go to prompt page"); + displayCompletedTrip(notification, eventOpts); + } + }); + $window.cordova.plugins.notification.local.on('click', function (notification, eventOpts) { + // alert("clicked, no action"); + Logger.log("Notification, click event"); + if (!checkCategory(notification)) { + Logger.log("notification "+notification+" is not an mode choice, returning..."); + return; + } + cleanDataIfNecessary(notification, eventOpts); + displayCompletedTrip(notification, eventOpts); + }); + }; + + $ionicPlatform.ready().then(function() { + ptap.registerTripEnd(); + ptap.registerUserResponse(); + }); + + return ptap; + +}); diff --git a/www/js/tripconfirm/trip-confirm-services.js b/www/js/tripconfirm/trip-confirm-services.js new file mode 100644 index 000000000..5094f0574 --- /dev/null +++ b/www/js/tripconfirm/trip-confirm-services.js @@ -0,0 +1,134 @@ +angular.module('emission.tripconfirm.services', ['ionic', 'emission.i18n.utils', "emission.plugin.logger"]) +.factory("ConfirmHelper", function($http, $ionicPopup, $translate, i18nUtils, Logger) { + var ch = {}; + ch.INPUTS = ["MODE", "PURPOSE"] + ch.inputDetails = { + "MODE": { + labeltext: $translate.instant(".mode"), + choosetext: $translate.instant(".choose-mode"), + width: "col-50", + key: "manual/mode_confirm", + otherVals: {}, + }, + "PURPOSE": { + labeltext: $translate.instant(".purpose"), + choosetext: $translate.instant(".choose-purpose"), + width: "col-50", + key: "manual/purpose_confirm", + otherVals: {}, + } + } + + var fillInOptions = function(confirmConfig) { + if(confirmConfig.data.length == 0) { + throw "blank string instead of missing file on dynamically served app"; + } + ch.INPUTS.forEach(function(i) { + ch.inputDetails[i].options = confirmConfig.data[i] + }); + } + + /* + * Convert the array of {text, value} objects to a {value: text} map so that + * we can look up quickly without iterating over the list for each trip + */ + + var arrayToMap = function(optionsArray) { + var text2entryMap = {}; + var value2entryMap = {}; + + optionsArray.forEach(function(text2val) { + text2entryMap[text2val.text] = text2val; + value2entryMap[text2val.value] = text2val; + }); + return [text2entryMap, value2entryMap]; + } + + var loadAndPopulateOptions = function () { + return i18nUtils.geti18nFileName("json/", "trip_confirm_options", ".json") + .then((optionFileName) => { + console.log("Final option file = "+optionFileName); + return $http.get(optionFileName) + .then(fillInOptions) + .catch(function(err) { + // no prompt here since we have a fallback + console.log("error "+JSON.stringify(err)+" while reading confirm options, reverting to defaults"); + return $http.get("json/trip_confirm_options.json.sample") + .then(fillInOptions) + .catch(function(err) { + // prompt here since we don't have a fallback + Logger.displayError("Error while reading default confirm options", err); + }); + }); + }); + } + + ch.getOptionsAndMaps = function(inputType) { + return ch.getOptions(inputType).then(function(inputOptions) { + var inputMaps = arrayToMap(inputOptions); + return { + options: inputOptions, + text2entry: inputMaps[0], + value2entry: inputMaps[1] + }; + }); + }; + + /* + * Lazily loads the options and returns the chosen one. Using this option + * instead of an in-memory data structure so that we can return a promise + * and not have to worry about when the data is available. + */ + ch.getOptions = function(inputType) { + if (!angular.isDefined(ch.inputDetails[inputType].options)) { + var lang = $translate.use(); + return loadAndPopulateOptions() + .then(function () { + return ch.inputDetails[inputType].options; + }); + } else { + return Promise.resolve(ch.inputDetails[inputType].options); + } + } + + ch.checkOtherOption = function(inputType, onTapFn, $scope) { + $ionicPopup.show({title: $translate.instant("trip-confirm.services-please-fill-in",{text: inputType.toLowerCase()}), + scope: $scope, + template: '', + buttons: [ + { text: $translate.instant('trip-confirm.services-cancel'), + onTap: function(e) { + ch.INPUTS.forEach(function(item) { + $scope.selected[item] = {value: ''}; + }); + } + }, { + text: '' + $translate.instant('trip-confirm.services-save') + '', + type: 'button-positive', + onTap: onTapFn($scope, inputType) + } + ] + }); + } + + ch.otherTextToValue = function(otherText) { + return otherText.toLowerCase().replace(" ", "_"); + } + + ch.otherValueToText = function(otherValue) { + var words = otherValue.replace("_", " ").split(" "); + if (words.length == 0) { + return ""; + } + return words.map(function(word) { + return word[0].toUpperCase() + word.slice(1); + }).join(" "); + } + + ch.getFakeEntry = function(otherValue) { + return {text: ch.otherValueToText(otherValue), + value: otherValue}; + } + + return ch; +}); diff --git a/www/json/connectionConfig.json b/www/json/connectionConfig.json new file mode 100644 index 000000000..0d3d99938 --- /dev/null +++ b/www/json/connectionConfig.json @@ -0,0 +1,16 @@ +{ + "connectUrl": "https://e-mission.fabmobqc.ca", + "aggregate_call_auth": "no_auth", + "android": { + "auth": { + "method": "prompted-auth", + "clientID": "ignored" + } + }, + "ios": { + "auth": { + "method": "prompted-auth", + "clientID": "ignored" + } + } +} diff --git a/www/json/emailConfig.json b/www/json/emailConfig.json new file mode 100644 index 000000000..e9b83102f --- /dev/null +++ b/www/json/emailConfig.json @@ -0,0 +1,3 @@ +{ + "address": "rsadeddine@coopcarbone.coop" +} \ No newline at end of file diff --git a/www/json/trip_confirm_options.json.sample b/www/json/trip_confirm_options.json.sample index 6dc6c82f3..cba9a9660 100644 --- a/www/json/trip_confirm_options.json.sample +++ b/www/json/trip_confirm_options.json.sample @@ -1,33 +1,25 @@ { "MODE" : [ - {"text":"Walk", "value":"walk", "met_equivalent": "WALKING", "co2PerMeter": 0}, - {"text":"Bike","value":"bike", "met_equivalent": "BICYCLING", "co2PerMeter": 0}, - {"text":"e-bike","value":"e-bike", "met": { - "ALL": {"range": [0, -1], "mets": 4.9} - }, "co2PerMeter": 0.00728}, - {"text":"Scooter share","value":"scootershare", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.00894}, - {"text":"Drove Alone","value":"drove_alone", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.22031}, - {"text":"Shared Ride","value":"shared_ride", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.11015}, - {"text":"Taxi/Uber/Lyft","value":"taxi", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.30741}, - {"text":"Bus","value":"bus", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.20727}, - {"text":"Train","value":"train", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.12256}, - {"text":"Free Shuttle","value":"free_shuttle", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.20727}, - {"text":"Air","value":"air", "met_equivalent": "IN_VEHICLE", "co2PerMeter": 0.09975}, - {"text":"Other","value":"other", "met_equivalent": "UNKNOWN", "co2PerMeter": 0}], + {"text":"modes.walk", "value":"walk"}, + {"text":"modes.bike","value":"bike"}, + {"text":"modes.car-drove-alone","value":"car_drove_alone"}, + {"text":"modes.car-shared-ride","value":"car_shared_ride"}, + {"text":"modes.e-car-drove-alone","value":"e-car_drove_alone"}, + {"text":"modes.e-car-shared-ride","value":"e-car_shared_ride"}, + {"text":"modes.taxi","value":"taxi"}, + {"text":"modes.bus","value":"bus"}, + {"text":"modes.subway","value":"subway"}, + {"text":"modes.train","value":"train"}, + {"text":"modes.other","value":"other"}], "PURPOSE" : [ - {"text":"Home", "value":"home"}, - {"text":"To Work","value":"work"}, - {"text":"At Work","value":"at_work"}, - {"text":"School","value":"school"}, - {"text":"Transit transfer", "value":"transit_transfer"}, - {"text":"Shopping","value":"shopping"}, - {"text":"Meal","value":"meal"}, - {"text":"Pick-up/Drop off 👤","value":"pick_drop_person"}, - {"text":"Pick-up/Drop off 📦","value":"pick_drop_item"}, - {"text":"Personal/Medical","value":"personal_med"}, - {"text":"Access Recreation","value":"access_recreation"}, - {"text":"Recreation/Exercise","value":"exercise"}, - {"text":"Entertainment/Social","value":"entertainment"}, - {"text":"Religious", "value":"religious"}, - {"text":"Other","value":"other"}] + {"text":"purposes.home", "value":"home"}, + {"text":"purposes.work","value":"work"}, + {"text":"purposes.school","value":"school"}, + {"text":"purposes.shopping","value":"shopping"}, + {"text":"purposes.groceries","value":"groceries"}, + {"text":"purposes.visit","value":"visit"}, + {"text":"purposes.pick-drop","value":"pick_drop"}, + {"text":"purposes.entertainment","value":"entertainment"}, + {"text":"purposes.personal","value":"personal"}, + {"text":"purposes.other","value":"other"}] } diff --git a/www/lib/ionic/css/ionic.css b/www/lib/ionic/css/ionic.css index 1d05acfa2..9f3184c3f 100644 --- a/www/lib/ionic/css/ionic.css +++ b/www/lib/ionic/css/ionic.css @@ -5694,14 +5694,14 @@ ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.tab-item-active, ion-tabs * -------------------------------------------------- */ .item { - border-color: #ddd; + border-color: #fff; /* #ddd */ background-color: #fff; color: #444; position: relative; z-index: 2; display: block; margin: -1px; - padding: 16px; + padding: 0 10px; /* Changed from 16px. This change was to ensure the correct alignment of the diary card */ border-width: 1px; border-style: solid; font-size: 16px; } @@ -8587,7 +8587,7 @@ progress { margin: 0; padding: 0 12px; min-width: 52px; - min-height: 47px; + min-height: 10px; /* Changed from 47px. This allows for the correct height for the label buttons to fit nicely in the diary card. */ border-width: 1px; border-style: solid; border-radius: 4px; @@ -8595,7 +8595,7 @@ progress { text-align: center; text-overflow: ellipsis; font-size: 16px; - line-height: 42px; + /* line-height: 42px; */ /* Commented out to align the text in the Label Buttons. If Uncommented, the text won't align; by all means implement a different solution */ cursor: pointer; } .button:hover { color: #444; diff --git a/www/manual_lib/leaflet/.bower.json b/www/manual_lib/leaflet/.bower.json new file mode 100644 index 000000000..f58a99ddd --- /dev/null +++ b/www/manual_lib/leaflet/.bower.json @@ -0,0 +1,34 @@ +{ + "name": "leaflet", + "version": "0.7.7", + "description": "JavaScript library for mobile-friendly interactive maps", + "main": [ + "dist/leaflet.css", + "dist/leaflet-src.js", + "dist/images/layers-2x.png", + "dist/images/layers.png", + "dist/images/marker-icon-2x.png", + "dist/images/marker-icon.png", + "dist/images/marker-shadow.png" + ], + "ignore": [ + ".*", + "CHANGELOG.json", + "FAQ.md", + "debug", + "spec", + "src", + "build" + ], + "homepage": "https://github.com/Leaflet/Leaflet", + "_release": "0.7.7", + "_resolution": { + "type": "version", + "tag": "v0.7.7", + "commit": "197f9d43b7bbc73c0492bf62cd666a5a98038098" + }, + "_source": "git://github.com/Leaflet/Leaflet.git", + "_target": "^0.7.7", + "_originalSource": "leaflet", + "_direct": true +} \ No newline at end of file diff --git a/www/manual_lib/leaflet/CHANGELOG.md b/www/manual_lib/leaflet/CHANGELOG.md new file mode 100644 index 000000000..d10e6188f --- /dev/null +++ b/www/manual_lib/leaflet/CHANGELOG.md @@ -0,0 +1,957 @@ +Leaflet Changelog +================= + +(all changes without author notice are by [@mourner](https://github.com/mourner)) + +## 0.7.7 (October 26, 2015) + +* Fixed a regression that could sometimes cause tiles to disappear when pinch-zooming on iOS devices. +* Fixed a regression related to msPointer detection in IE10 (affecting Leaflet.draw and some other plugins) (by @danzel) #3842 #3839 #3804 +* Fixed a bug where a mouseout could fire after a vector element was removed (by @sambernet). #3849 #3829 +* Fixed touch interactions in Edge browser (by @mitchless & @Neorth). #3853 #3379 +* Fixed a bug where removing a layer group from a feature group would throw an error (by @Lambdac0re). #3869 + +Note tha we skipped 0.7.6 version for which we accidentally published a broken build to NPM. + +## 0.7.5 (September 2, 2015) + +* Fixed a regression that broke animation in Leaflet.markercluster. [#3796](https://github.com/Leaflet/Leaflet/issues/3796) + +## 0.7.4 (September 1, 2015) + +* Fixed a bug introduced by a recent Chrome update that caused the map not to react to interactions until all tiles are loaded. [#3689](https://github.com/Leaflet/Leaflet/issues/3689) +* Fixed a bug where tile layers were not respecting their `minZoom` or `maxZoom` options (by [@ivansanchez](https://github.com/ivansanchez)) [#3778](https://github.com/Leaflet/Leaflet/pull/3778) +* Improved detection of touch-capable web browsers, in particular fixing touch interactions in device emulation mode in Chrome and Firefox (by [@ivansanchez](https://github.com/ivansanchez)) [#3520](https://github.com/Leaflet/Leaflet/pull/3520) [#3710](https://github.com/Leaflet/Leaflet/pull/3710) +* Fixed a bug where tile layers with `maxNativeZoom` were not checking bounds properly (by [@jlaxon](https://github.com/jlaxon)) [#3415](https://github.com/Leaflet/Leaflet/pull/3152) +* Fixed a bug where popups were not remembering which layer originated them after calling `bindPopup(popup)` (by [@Eschon](https://github.com/Eschon)) [#3675](https://github.com/Leaflet/Leaflet/pull/3765) +* Fixed a race condition between markers and zoom animation (by [@perliedman](https://github.com/perliedman)) [#3152](https://github.com/Leaflet/Leaflet/pull/3152) +* Fixed a bug with `Map.fitBounds` padding (by [@bsstoner](https://github.com/bsstoner)). [#2489](https://github.com/Leaflet/Leaflet/issues/2489) +* Allow canvas paths to fire `dblclick` and `contextmenu` events (by [@ivansanchez](https://github.com/ivansanchez)) [#3482](https://github.com/Leaflet/Leaflet/pull/3482) +* Allow canvas filled polygons to use the `fillRule` option (by [@w8r](https://github.com/w8r)) [#3477](https://github.com/Leaflet/Leaflet/pull/3477) +* Allow canvas lines to use `lineCap` and `lineJoin` options (by [@northerneyes](https://github.com/northerneyes)) [#3156](https://github.com/Leaflet/Leaflet/pull/3156) +* Updated bower definitions to comply with best practices (by [@guptaso2](https://github.com/guptaso2)) [#2726](https://github.com/Leaflet/Leaflet/pull/2726) [#3448](https://github.com/Leaflet/Leaflet/pull/3448) + +## 0.7.3 (May 23, 2014) + +* Added proper **bower** and **component** support (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#2561](https://github.com/Leaflet/Leaflet/pull/2561) [#1903](https://github.com/Leaflet/Leaflet/issues/1903) +* Fixed a bug where dragging the map outside the window caused an error on FF. [#2610](https://github.com/Leaflet/Leaflet/issues/2610) +* Fixed a bug where some taps on Android where not working, often falsely perceived as drags (by [@axefrog](https://github.com/axefrog)). [#2503](https://github.com/Leaflet/Leaflet/pull/2503) +* Fixed a bug where tapping too quickly on Android ignored most taps. [#2303](https://github.com/Leaflet/Leaflet/issues/2303) +* Fixed a bug where calling `setView` (or similar methods) several times in succession could freeze the map. [#2521](https://github.com/Leaflet/Leaflet/issues/2521) [#2236](https://github.com/Leaflet/Leaflet/issues/2236) [#2485](https://github.com/Leaflet/Leaflet/issues/2485) +* Fixed a bug where `Control.Layers` wasn't properly removed (by [@jack-kerouac](https://github.com/jack-kerouac)). [#2569](https://github.com/Leaflet/Leaflet/pull/2569) +* Fixed a bug that caused `TileLayer` `load` event not to fire properly. [#2510](https://github.com/Leaflet/Leaflet/issues/2510) +* Fixed Canvas-based paths not triggering `remove` event when removed (by @adimitrov). [#2486](https://github.com/Leaflet/Leaflet/pull/2486) +* Fixed a bug where you could end up with fractional zoom after pinch-zooming in some cases (by [@danzel](https://github.com/danzel). [#2400](https://github.com/Leaflet/Leaflet/pull/2400) [#1943](https://github.com/Leaflet/Leaflet/issues/1934) + +## 0.7.2 (January 17, 2013) + +* Fixed a bug that appeared with **Chrome 32 update** that made all **mouse events shifted on scrolled pages**. [#2352](https://github.com/Leaflet/Leaflet/issues/2352) +* Fixed a bug that could break tile loading when using non-standard tile sizes. [#2288](https://github.com/Leaflet/Leaflet/issues/2288) +* Fixed a bug where `maxNativeZoom` option didn't work with TMS tile layers (by [@perliedman](https://github.com/perliedman)). [#2321](https://github.com/Leaflet/Leaflet/issues/2321) [#2314](https://github.com/Leaflet/Leaflet/issues/2314) + +## 0.7.1 (December 6, 2013) + +* Fixed a bug where pinch-zooming quickly could occasionally leave the map at a fractional zoom thus breaking tile loading (by [@danzel](https://github.com/danzel)). [#2269](https://github.com/Leaflet/Leaflet/pull/2269) [#2255](https://github.com/Leaflet/Leaflet/issues/2255) [#1934](https://github.com/Leaflet/Leaflet/issues/1934) +* Fixed tile flickering issues on some old Android 2/3 devices by disabling buggy hardware accelerated CSS there (by [@danzel](https://github.com/danzel)). [#2216](https://github.com/Leaflet/Leaflet/pull/2216) [#2198](https://github.com/Leaflet/Leaflet/issues/2198) +* Fixed a regression that sometimes led to an error when you started pinch-zoom as the first action on the map (by [@danzel](https://github.com/danzel)). [#2259](https://github.com/Leaflet/Leaflet/pull/2259) [#2256](https://github.com/Leaflet/Leaflet/issues/2256) +* Reverted `L.Util.template` optimizations to allow Leaflet to be used in eval-banning environments like browser extensions (performance gain was insignificant anyway) (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#2217](https://github.com/Leaflet/Leaflet/issues/2217) [#2209](https://github.com/Leaflet/Leaflet/issues/2209) [#1968](https://github.com/Leaflet/Leaflet/issues/1968) +* Fixed a regression where `Map` `invalidateSize` could lead to unexpected results when called before map initialization (by [@Zverik](https://github.com/Zverik)). [#2250](https://github.com/Leaflet/Leaflet/issues/2250) [#2249](https://github.com/Leaflet/Leaflet/issues/2249) +* Fixed a regression where `FeatureGroup` containing other group overwrote original `e.layer` value in mouse events (by [@gumballhead](https://github.com/gumballhead)). [#2253](https://github.com/Leaflet/Leaflet/pull/2253) [#2252](https://github.com/Leaflet/Leaflet/issues/2252) +* Fixed a regression where `CircleMarker` `setLatLngs` didn't return `this` (by [@radicalbiscuit](https://github.com/radicalbiscuit)). [#2206](https://github.com/Leaflet/Leaflet/pull/2206) + +## 0.7 (November 18, 2013) + +### Improvements + +#### Usability improvements + +* Added **support for IE11 touch devices** (by [@danzel](https://github.com/danzel), [@DanielX2](https://github.com/DanielX2) and [@fnicollet](https://github.com/fnicollet)). [#2039](https://github.com/Leaflet/Leaflet/pull/2039) [#2066](https://github.com/Leaflet/Leaflet/pull/2066) [#2037](https://github.com/Leaflet/Leaflet/issues/2037) [#2102](https://github.com/Leaflet/Leaflet/issues/2102) +* Added shift-double-click to zoom out shortcut. [#2185](https://github.com/Leaflet/Leaflet/issues/2185) +* Significantly improved **controls design on mobile** devices. [#1868](https://github.com/Leaflet/Leaflet/issues/1868) [#2012](https://github.com/Leaflet/Leaflet/issues/2012) +* Fixed and improved IE7-8 control and popup styles. +* Made subtle improvements to control styles on desktop browsers. +* Improved keyboard nav support so that map doesn't loose focus when you click on a control (by [@jacobtoye](https://github.com/jacobtoye)). [#2150](https://github.com/Leaflet/Leaflet/issues/2150) [#2148](https://github.com/Leaflet/Leaflet/issues/2148) +* Improved `maxBounds` behavior: now it doesn't force higher minimal zoom, and anchors to max bounds edges properly when zooming (by [@kapouer](https://github.com/kapouer) and [@mourner](https://github.com/mourner)). [#2187](https://github.com/Leaflet/Leaflet/pull/2187) [#1946](https://github.com/Leaflet/Leaflet/pull/1946) [#2081](https://github.com/Leaflet/Leaflet/issues/2081) [#2168](https://github.com/Leaflet/Leaflet/issues/2168) [#1908](https://github.com/Leaflet/Leaflet/issues/1908) + +#### Map API improvements + +* Made `Map` `setView` `zoom` argument optional. [#2056](https://github.com/Leaflet/Leaflet/issues/2056) +* Added `maxZoom` option to `Map` `fitBounds`. [#2101](https://github.com/Leaflet/Leaflet/issues/2101) +* Added `Map` `bounceAtZoomLimits` option that makes the map bounce when you pinch-zoom past limits (it worked like this before, but now you can disable this) (by [@trevorpowell](https://github.com/trevorpowell)). [#1864](https://github.com/Leaflet/Leaflet/issues/1864) [#2072](https://github.com/Leaflet/Leaflet/pull/2072) +* Added `distance` property to `Map` and `Marker` `dragend` events. [#2158](https://github.com/Leaflet/Leaflet/issues/2158) [#872](https://github.com/Leaflet/Leaflet/issues/872) +* Added optional support for center-oriented scroll and double-click zoom (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1939](https://github.com/Leaflet/Leaflet/issues/1939) +* Added `timestamp` to `Map` `locationfound` event. [#584](https://github.com/Leaflet/Leaflet/pull/584) +* Improved `Map` `invalidateSize` to call `moveend` immediately unless given `debounceMoveend: true` option (by [@jfirebaugh](https://github.com/jfirebaugh)). [#2181](https://github.com/Leaflet/Leaflet/issues/2181) + +#### TileLayer API improvements + +* Added `TileLayer` `maxNativeZoom` option that allows displaying tile layers on zoom levels above their maximum by **upscaling tiles**. [#1802](https://github.com/Leaflet/Leaflet/issues/1802) [#1798](https://github.com/Leaflet/Leaflet/issues/1798) +* Added `TileLayer` `tileloadstart` event (by [@tmcw](https://github.com/tmcw)). [#2142](https://github.com/Leaflet/Leaflet/pull/2142) [#2140](https://github.com/Leaflet/Leaflet/issues/2140) +* Improved `TileLayer` world size (used for wrapping and limiting tiles) to be derived from CRS instead of hardcoded, making it easier to use with custom projections (by [@perliedman](https://github.com/perliedman)). [#2160](https://github.com/Leaflet/Leaflet/pull/2160) + +#### Marker API improvements + +* Added CSS classes to draggable markers for easier customization (by [@snkashis](https://github.com/snkashis)). [#1902](https://github.com/Leaflet/Leaflet/issues/1902) [#1916](https://github.com/Leaflet/Leaflet/issues/1916) +* Added `Marker` `add` event (by [@tohaocean](https://github.com/tohaocean)). [#1942](https://github.com/Leaflet/Leaflet/issues/1942) +* Added `Marker` `getPopup` method (by [@scottharvey](https://github.com/scottharvey)). [#618](https://github.com/Leaflet/Leaflet/issues/618) [#1197](https://github.com/Leaflet/Leaflet/pull/1197) +* Added `Marker` `alt` option for adding `alt` text to markers (by [@jimmytidey](https://github.com/jimmytidey)). [#2112](https://github.com/Leaflet/Leaflet/pull/2112) + +#### Vector layers API improvements + +* Added `Path` `className` option for adding custom class names to vector layers. +* Added `Path` `lineCap` and `lineJoin` options (by [@palewire](https://github.com/palewire)). [#1843](https://github.com/Leaflet/Leaflet/issues/1843) [#1863](https://github.com/Leaflet/Leaflet/issues/1863) [#1881](https://github.com/Leaflet/Leaflet/issues/1881) +* Added ability to pass vector options to `GeoJSON` (by [@kapouer](https://github.com/kapouer)). [#2075](https://github.com/Leaflet/Leaflet/pull/2075) +* Improved `Polygon` `setLatLngs` to also accept holes (by [@aparshin](https://github.com/aparshin)). [#2095](https://github.com/Leaflet/Leaflet/pull/2095) [#1518](https://github.com/Leaflet/Leaflet/issues/1518) +* Added `GeoJSON` 3D format support and optional `altitude` argument to `LatLng` constructor (by [@Starefossen](https://github.com/Starefossen)). [#1822](https://github.com/Leaflet/Leaflet/pull/1822) +* Added `MultiPolygon` and `MultiPolyline` `openPopup` method. [#2046](https://github.com/Leaflet/Leaflet/issues/2046) + +#### Popup API improvements + +* Added `Popup` `update` method. [#1959](https://github.com/Leaflet/Leaflet/issues/1959) +* Added `Popup` `autoPanPaddingTopLeft` and `autoPanPaddingBottomRight` options (by [@albburtsev](https://github.com/albburtsev)). [#1972](https://github.com/Leaflet/Leaflet/issues/1972) [#1588](https://github.com/Leaflet/Leaflet/issues/1588) +* Added `Popup` `getContent` method. [#2100](https://github.com/Leaflet/Leaflet/issues/2100) +* Added `Popup` `getLatLng` method (by [@AndreyGeonya](https://github.com/AndreyGeonya)). [#2097](https://github.com/Leaflet/Leaflet/pull/2097) + +#### Misc API improvements + +* Added `ImageOverlay` `setUrl` and `getAttribution` methods and `attribution` option (by [@stsydow](https://github.com/stsydow)). [#1957](https://github.com/Leaflet/Leaflet/issues/1957) [#1958](https://github.com/Leaflet/Leaflet/issues/1958) +* Added localization support for the zoom control (by [@Danielku15](https://github.com/Danielku15)). [#1953](https://github.com/Leaflet/Leaflet/issues/1953) [#1643](https://github.com/Leaflet/Leaflet/issues/1643) [#1953](https://github.com/Leaflet/Leaflet/pull/1953) +* Significantly improved `L.Util.template` performance (affects `L.TileLayer`) by introducing cached template compilation (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#1969](https://github.com/Leaflet/Leaflet/issues/1969) [#1968](https://github.com/Leaflet/Leaflet/issues/1968) [#1554](https://github.com/Leaflet/Leaflet/issues/1554) +* Added `CRS` `getSize` for getting the world size in pixels (by [@perliedman](https://github.com/perliedman)). [#2160](https://github.com/Leaflet/Leaflet/pull/2160) +* Added `leaflet-drag-target` CSS class to an element under cursor when dragging for more flexible customization. [#2164](https://github.com/Leaflet/Leaflet/issues/2164) [#1902](https://github.com/Leaflet/Leaflet/issues/1902) +* Improved `L.DomUtil` `addClass`, `removeClass`, `hasClass` methods performance and fixed it to work with SVG elements. [#2164](https://github.com/Leaflet/Leaflet/issues/2164) + +#### Dev workflow improvements + +* Added an [official FAQ](https://github.com/Leaflet/Leaflet/blob/master/FAQ.md). +* Cleaned up and moved old IE styles to `leaflet.css` and removed `leaflet.ie.css`, so **no need for IE conditional comment** when including Leaflet now. [#2159](https://github.com/Leaflet/Leaflet/issues/2159) +* Added `leaflet-oldie` CSS class to map container in IE7-8 for easier styling. [#2159](https://github.com/Leaflet/Leaflet/issues/2159) +* Officially **dropped support for IE6**. Nobody cares anyway, and Leaflet should still be accessible on it. [#2159](https://github.com/Leaflet/Leaflet/issues/2159) +* Improved the build system to check JS errors in spec files. [#2151](https://github.com/Leaflet/Leaflet/issues/2151) +* Fixed `jake` command to run tests before building the source. [#2151](https://github.com/Leaflet/Leaflet/issues/2151) +* Switched the main file in `package.json` to unminified version for NPM/Browserify (by [@icetan](https://github.com/icetan)). [#2109](https://github.com/Leaflet/Leaflet/pull/2109) + +### Bugfixes + +#### 0.6 regression fixes + +* Fixed a **memory leak in iOS7** that could crash Safari when handling lots of objects (e.g. 1000 markers) (by [@danzel](https://github.com/danzel)). [#2149](https://github.com/Leaflet/Leaflet/pull/2149) [#2122](https://github.com/Leaflet/Leaflet/issues/2122) +* Fixed a bug that caused lag at the beginning of panning in Chrome (by [@jfirebaugh](https://github.com/jfirebaugh)). [#2163](https://github.com/Leaflet/Leaflet/issues/2163) +* Fixed a regression that made the layers control unscrollable in Firefox. [#2029](https://github.com/Leaflet/Leaflet/issues/2029) +* Fixed a regression that broke `worldCopyJump: true` option (by [@fastrde](https://github.com/fastrde)). [#1904](https://github.com/Leaflet/Leaflet/issues/1904) [#1831](https://github.com/Leaflet/Leaflet/issues/1831) [#1982](https://github.com/Leaflet/Leaflet/issues/1982) +* Fixed a regression where a first map click after popup close button click was ignored (by [@fastrde](https://github.com/fastrde)). [#1537](https://github.com/Leaflet/Leaflet/issues/1537) [#1963](https://github.com/Leaflet/Leaflet/issues/1963) [#1925](https://github.com/Leaflet/Leaflet/issues/1925) +* Fixed a regression where `L.DomUtil.getMousePosition` would throw an error if container argument not provided (by [@scooterw](https://github.com/scooterw)). [#1826](https://github.com/Leaflet/Leaflet/issues/1826) [#1928](https://github.com/Leaflet/Leaflet/issues/1928) [#1926](https://github.com/Leaflet/Leaflet/issues/1926) +* Fixed a regression with vector layers positioning when zooming on IE10+ touch devices (by [@danzel](https://github.com/danzel)). [#2002](https://github.com/Leaflet/Leaflet/issues/2002) [#2000](https://github.com/Leaflet/Leaflet/issues/2000) +* Fixed a regression with `maxBounds` behaving weirdly on panning inertia out of bounds. [#2168](https://github.com/Leaflet/Leaflet/issues/2168) + +#### General bugfixes + +* Fixed a bug where the map could freeze if centered and immediately recentered on initialization. [#2071](https://github.com/Leaflet/Leaflet/issues/2071) +* Fixed a bug where all maps except the first one on a page didn't track window resize. [#1980](https://github.com/Leaflet/Leaflet/issues/1980) +* Fixed a bug where tiles in `EPSG:3395` projection were shifted (by [@aparshin](https://github.com/aparshin)). [#2020](https://github.com/Leaflet/Leaflet/issues/2020) +* Fixed a bug where scale control displayed wrong scale when on pages with `box-sizing: border-box`. +* Fixed a bug where zoom control button didn't appear as disabled if map was initialized at the zoom limit. [#2083](https://github.com/Leaflet/Leaflet/issues/2083) +* Fixed a bug where box zoom also triggered a map click event (by [@fastrde](https://github.com/fastrde)). [#1951](https://github.com/Leaflet/Leaflet/issues/1951) [#1884](https://github.com/Leaflet/Leaflet/issues/1884) +* Fixed a bug where shift-clicking on a map immediately after a drag didn't trigger a click event (by [@fastrde](https://github.com/fastrde)). [#1952](https://github.com/Leaflet/Leaflet/issues/1952) [#1950](https://github.com/Leaflet/Leaflet/issues/1950) +* Fixed a bug where content was updated twice when opening a popup. [#2137](https://github.com/Leaflet/Leaflet/issues/2137) +* Fixed a bug that could sometimes cause infinite panning loop when using `maxBounds` (by [@kapouer](https://github.com/kapouer) and [@mourner](https://github.com/mourner)). [#2187](https://github.com/Leaflet/Leaflet/pull/2187) [#1946](https://github.com/Leaflet/Leaflet/pull/1946) [#2081](https://github.com/Leaflet/Leaflet/issues/2081) [#2168](https://github.com/Leaflet/Leaflet/issues/2168) [#1908](https://github.com/Leaflet/Leaflet/issues/1908) + +#### Browser bugfixes + +* Fixed a bug where keyboard `+` no longer zoomed the map on FF 22+ (by [@fastrde](https://github.com/fastrde)). [#1943](https://github.com/Leaflet/Leaflet/issues/1943) [#1981](https://github.com/Leaflet/Leaflet/issues/1981) +* Fixed a bug where calling `Map` `remove` throwed an error in IE6-8. [#2015](https://github.com/Leaflet/Leaflet/issues/2015) +* Fixed a bug where `isArray` didn't work in rare cases in IE9. [#2077](https://github.com/Leaflet/Leaflet/issues/2077) +* Fixed a bug where FF sometimes produced console warnings when animating markers. [#2090](https://github.com/Leaflet/Leaflet/issues/2090) +* Fixed a bug where mouse wasn't handled correctly on RTL pages in some cases (by [@danzel](https://github.com/danzel)). [#1986](https://github.com/Leaflet/Leaflet/issues/1986) [#2136](https://github.com/Leaflet/Leaflet/pull/2136) + +#### Mobile bugfixes + +* Fixed a bug where tiles could **disappear after zooming on Chrome 30+ for Android** (by [@danzel](https://github.com/danzel)). [#2152](https://github.com/Leaflet/Leaflet/pull/2152) [#2078](https://github.com/Leaflet/Leaflet/issues/2078) +* Fixed a bug on IE10+ touch where pinch-zoom also caused click (by [@danzel](https://github.com/danzel)). [#2117](https://github.com/Leaflet/Leaflet/pull/2117) [#2094](https://github.com/Leaflet/Leaflet/issues/2094) +* Fixed a bug on IE10+ touch where controls didn't loose the pressed state after tapping (by [@danzel](https://github.com/danzel)). [#2111](https://github.com/Leaflet/Leaflet/pull/2111) [#2103](https://github.com/Leaflet/Leaflet/issues/2103) +* Fixed a bug where clicking on layers control labels on iOS throwed an error (by [@olemarkus](https://github.com/olemarkus) and [@dagjomar](https://github.com/dagjomar)). [#1984](https://github.com/Leaflet/Leaflet/issues/1984) [#1989](https://github.com/Leaflet/Leaflet/issues/1989) + +#### Map API bugfixes + +* Fixed a bug where `Map` `getCenter` returned old result after map container size changed (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1940](https://github.com/Leaflet/Leaflet/issues/1940) [#1919](https://github.com/Leaflet/Leaflet/issues/1919) +* Fixed `Map` `invalidateSize` rounding issues when changing map size by an odd pixel amount (by [@russelldavis](https://github.com/russelldavis)). [#1931](https://github.com/Leaflet/Leaflet/issues/1931) +* Fixed a bug where `Map` `removeLayer` didn't return `this` in a corner case (by [@jfirebaugh](https://github.com/jfirebaugh)). +* Fixed a bug where calling `Map` `setZoom` before `setView` would throw an error. [#1449](https://github.com/Leaflet/Leaflet/issues/1449) + +#### Layers API bugfixes + +* Fixed a bug where `Popup` `setLatLng` unnecessarily reset content and updated layout; works much faster now. [#2167](https://github.com/Leaflet/Leaflet/issues/2167) +* Fixed a bug where `toGeoJSON` of layers originated from GeoJSON GeometryCollection and MultiPoint didn't work properly (wasn't round-tripped). [#1956](https://github.com/Leaflet/Leaflet/issues/1956) +* Fixed `GeoJSON` dependencies in build configuration that could lead to a broken custom build in some situations (by [@alubchuk](https://github.com/alubchuk)). [#1909](https://github.com/Leaflet/Leaflet/issues/1909) +* Fixed a bug where `CircleMarker` popup placement wasn't updated after calling `setLatLng` (by [@snkashis](https://github.com/snkashis)). [#1921](https://github.com/Leaflet/Leaflet/issues/1921) [#1927](https://github.com/Leaflet/Leaflet/issues/1927) +* Fixed a bug where popup anchor wasn't updated on `Marker` `setIcon` (by [@snkashis](https://github.com/snkashis)). [#1874](https://github.com/Leaflet/Leaflet/issues/1874) [#1891](https://github.com/Leaflet/Leaflet/issues/1891) +* Fixed a bug with GeoJSON not throwing a descriptive error if a polygon has zero length inner ring (by [@snkashis](https://github.com/snkashis)). [#1917](https://github.com/Leaflet/Leaflet/issues/1917) [#1918](https://github.com/Leaflet/Leaflet/issues/1918) +* Fixed a bug where `FeatureGroup` would break when using non-evented children layers (by [@tmcw](https://github.com/tmcw)). [#2032](https://github.com/Leaflet/Leaflet/pull/2032) [#1962](https://github.com/Leaflet/Leaflet/issues/1962) +* Fixed a bug where `CircleMarker` `getRadius` would always return `null`. [#2016](https://github.com/Leaflet/Leaflet/issues/2016) [#2017](https://github.com/Leaflet/Leaflet/pull/2017) +* Fixed a bug where `TileLayer.WMS` didn't work with WMS 1.3 & EPSG4326 projection (by [@Bobboya](https://github.com/Bobboya)). [#1897](https://github.com/Leaflet/Leaflet/pull/1897) +* Fixed a bug where `FeatureGroup` events `e.layer` was sometimes empty in old IE. [#1938](https://github.com/Leaflet/Leaflet/issues/1938) + +#### Misc API bugfixes + +* Fixed a bug where `L.latLngBounds` didn't accept simple object `LatLng` form (by [@Gnurfos](https://github.com/Gnurfos)). [#2025](https://github.com/Leaflet/Leaflet/issues/2025) [#1915](https://github.com/Leaflet/Leaflet/issues/1915) +* Fixed a bug where `L.Util.tempalate` wouldn't work with double quotes in the string (by [@jieter](https://github.com/jieter)). [#1968](https://github.com/Leaflet/Leaflet/issues/1968) [#2121](https://github.com/Leaflet/Leaflet/pull/2121) [#2120](https://github.com/Leaflet/Leaflet/issues/2120) +* Fixed a bug where attribution control that was added to a map after attributed layers didn't have the corresponding attributions (by [@snkashis](https://github.com/snkashis)). [#2177](https://github.com/Leaflet/Leaflet/issues/2177) [#2178](https://github.com/Leaflet/Leaflet/pull/2178) + + +## 0.6.4 (July 25, 2013) + +* Fixed a regression where `fitBounds` and `setMaxBounds` could freeze the browser in some situations. [#1895](https://github.com/Leaflet/Leaflet/issues/1895) [1866](https://github.com/Leaflet/Leaflet/issues/1866) +* Fixed a bug where click on a map on a page with horizontal scroll caused the page to scroll right (by [@mstrelan](https://github.com/mstrelan)). [#1901](https://github.com/Leaflet/Leaflet/issues/1901) + +## 0.6.3 (July 17, 2013) + +### Regression fixes + +* Fixed a regression where mouse interaction had incorrect coordinates in some map positioning cases (by [@scooterw](https://github.com/scooterw)). [#1826](https://github.com/Leaflet/Leaflet/issues/1826) [#1684](https://github.com/Leaflet/Leaflet/issues/1684) [#1745](https://github.com/Leaflet/Leaflet/issues/1745) [#1](https://github.com/Leaflet/Leaflet/issues/1) +* Fixed a regression that prevented the map from responding to drag on areas covered with `ImageOverlay` (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1821](https://github.com/Leaflet/Leaflet/issues/1821) +* Fixed a regression where `layerremove` and `layeradd` were fired before the corresponding action finishes (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1846](https://github.com/Leaflet/Leaflet/issues/1846) +* Fixed a regression with `worldCopyJump: true` breaking the map on small zoom levels (by [@danzel](https://github.com/danzel)). [#1831](https://github.com/Leaflet/Leaflet/issues/1831) +* Fixed a regression where `Marker` shadow didn't animate on zoom after using `setIcon`. [#1768](https://github.com/Leaflet/Leaflet/issues/1768) +* Fixed a regression where the map would stuck when trying to animate zoom before any tile layers are added to the map. [#1484](https://github.com/Leaflet/Leaflet/issues/1484) [#1845](https://github.com/Leaflet/Leaflet/issues/1845) +* Fixed a regression with the layers control and popups closing on inside click in IE < 9. [#1850](https://github.com/Leaflet/Leaflet/issues/1850) +* Fixed a regression where scrolled popup content woudln't scroll in FF (by [@jfirebaugh](https://github.com/jfirebaugh)). + +### Bug fixes + +* Fixed vector feature flickering on Safari Mac for screen < 2000px. [#902](https://github.com/Leaflet/Leaflet/issues/902) +* Fixed a bug where `GeoJSON` ignored non-feature geometries passed in an array. [#1840](https://github.com/Leaflet/Leaflet/issues/1840) +* Fixed a bug where `Map` `minZoom` and `maxZoom` didn't always override values derived from the added tile layers. [1848](https://github.com/Leaflet/Leaflet/issues/1848) +* Fixed a bug where `TileLayer.Canvas` wasn't immediately redrawn when `redraw` is called (by [@tofferrosen](https://github.com/tofferrosen)). [#1797](https://github.com/Leaflet/Leaflet/issues/1797) [#1817](https://github.com/Leaflet/Leaflet/issues/1817) +* Fixed a bug where `FeatureGroup` still fired `layerremove` event on `removeLayer` even if the given layer wan't present in the group (by (by [@danzel](https://github.com/danzel))). [#1847](https://github.com/Leaflet/Leaflet/issues/1847) [#1858](https://github.com/Leaflet/Leaflet/issues/1858) +* Fixed a bug where `Marker` `setOpacity` wasn't returning the marker (by [@freepius44](https://github.com/freepius44)). [#1851](https://github.com/Leaflet/Leaflet/issues/1851) +* Fixed a bug where removing the map element from the DOM before panning transition has finished could keep a setInterval loop running forever (by [@rutkovsky](https://github.com/rutkovsky)). [#1825](https://github.com/Leaflet/Leaflet/issues/1825) [#1856](https://github.com/Leaflet/Leaflet/issues/1856) +* Fixed mobile styles to apply to `leaflet-bar` elements. + +### Improvements + +* Added ability to pass zoom/pan animation options to `setMaxBounds` (by [@davidjb](http://git.io/djb)). [#1834](https://github.com/Leaflet/Leaflet/pull/1834) +* Added `MultiPolyline` and `MultiPolygon` `getLatLngs` method. [#1839](https://github.com/Leaflet/Leaflet/issues/1839) + +### Dev Workflow improvements + +* Leaflet builds (*.js files in the `dist` folder) were removed from the repo and are now done automatically on each commit for `master` and `stable` branches by [Travis CI](travis-ci.org/Leaflet/Leaflet). The download links are on the [Leafet download page](http://leafletjs.com/download.html). + +## 0.6.2 (June 28, 2013) + + * Fixed a bug that caused wrong tile layers stacking order when using opacity < 1 (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1804](https://github.com/Leaflet/Leaflet/issues/1804) [#1790](https://github.com/Leaflet/Leaflet/issues/1790) [#1667](https://github.com/Leaflet/Leaflet/issues/1667) + * Fixed a regression that caused tiles selection when double-clicking absolutely positioned maps with vector layers in it in Firefox (WTF!) (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1807](https://github.com/Leaflet/Leaflet/issues/1807) + * Fixed a regression with a wrong cursor when dragging a map with vector layers, and tiles becoming selected on double click (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1800](https://github.com/Leaflet/Leaflet/issues/1800) + * Fixed a regression that caused flickering of tiles near map border on zoom animation in Chrome. + +## 0.6.1 (June 27, 2013) + + * Fixed a regression with mouse wheel zooming too fast on Firefox (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1788](https://github.com/Leaflet/Leaflet/issues/1788) + * Fixed a regression with broken zooming on maps with EPSG3395 projection. [#1796](https://github.com/Leaflet/Leaflet/issues/1796) + * Fixed a bug where zoom buttons inherited Bootstrap link hover styles. [#1791](https://github.com/Leaflet/Leaflet/issues/1791) + +## 0.6 (June 26, 2013) + +### Breaking changes + + * Moved polyline editing code into [Leaflet.draw](https://github.com/Leaflet/Leaflet.draw) plugin (where it fits much better along with all other editing and drawing handlers). The API remains the same. + * Dropped support for environments that augment `Object.prototype` (luckily it's a thing of the past nowadays). + * `Map` `invalidateSize` no longer fires `move` and `moveend` events if the map size didn't change. [#1819](https://github.com/Leaflet/Leaflet/issues/1819) + +### Improvements + +#### Usability and performance improvements + + * **Improved zoom control design** - cleaner, simpler, more accessible (mostly by [@jacobtoye](https://github.com/jacobtoye)). [#1313](https://github.com/Leaflet/Leaflet/issues/1313) + * Updated `Control.Layers` icon (designed by Volker Kinkelin), added retina version and SVG source. [#1739](https://github.com/Leaflet/Leaflet/issues/1739) + * Added keyboard accessibility to markers (you can now tab to them and press enter for click behavior). [#1355](https://github.com/Leaflet/Leaflet/issues/1355) + * Improved `TileLayer` zoom animation to eliminate flickering in case one tile layer on top of another or when zooming several times quickly (by [@mourner](https://github.com/mourner) with lots of fixes from [@danzel](https://github.com/danzel)). [#1140](https://github.com/Leaflet/Leaflet/issues/1140) [#1437](https://github.com/Leaflet/Leaflet/issues/1437) [#52](https://github.com/Leaflet/Leaflet/issues/52) + * Subtly improved default popup styles + * Improved attribution control to be much less obtrusive (no "powered by", just a Leaflet link). You can still remove the prefix with `map.attributionControl.setPrefix('')` if you need. + * Improved zoom behavior so that there's no drift of coordinates when you change zoom back and forth without panning. [#426](https://github.com/Leaflet/Leaflet/issues/426) + * Improved double click behavior to zoom while keeping the clicked point fixed (by [@ansis](https://github.com/ansis)). [#1582](https://github.com/Leaflet/Leaflet/issues/1582) + * Improved dragging behavior to not get stuck if mouse moved outside of an iframe containing the map (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1277](https://github.com/Leaflet/Leaflet/issues/1277) [#1782](https://github.com/Leaflet/Leaflet/issues/1782) [#1786](https://github.com/Leaflet/Leaflet/issues/1786) + * Improved box zoom to be cancelable by pressing Escape (by [@yohanboniface](https://github.com/yohanboniface)). [#1438](https://github.com/Leaflet/Leaflet/issues/1438) + * Improved `Marker` popups to close on marker click if opened (by [@popox](https://github.com/popox)). [#1761](https://github.com/Leaflet/Leaflet/issues/1761) + * Significantly improved mass layer removal performance (by [@jfgirard](https://github.com/jfgirard) with fixes from [@danzel](https://github.com/danzel)). [#1141](https://github.com/Leaflet/Leaflet/pull/1141) [#1514](https://github.com/Leaflet/Leaflet/pull/1514) + +#### API improvements + +##### Layers API improvements + + * Added `toGeoJSON` method to various layer types, allowing you to **save your Leaflet layers as GeoJSON**. (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1462](https://github.com/Leaflet/Leaflet/issues/1462) [#712](https://github.com/Leaflet/Leaflet/issues/712) [#1779](https://github.com/Leaflet/Leaflet/issues/1779) + * Added `GeoJSON` `coordsToLatLng` option for dealing with GeoJSON that has non-WGS84 coords (thanks to [@moonlite](https://github.com/moonlite)). [#888](https://github.com/Leaflet/Leaflet/issues/888) [#886](https://github.com/Leaflet/Leaflet/issues/886) + * Improved `Marker` to reuse icon DOM elements when changing icons on the fly (e.g. fixes problems when changing icon on mouse hover) (by [@robpvn](https://github.com/robpvn) & [@danzel](https://github.com/danzel)). [#1726](https://github.com/Leaflet/Leaflet/issues/1726) [#561](https://github.com/Leaflet/Leaflet/issues/561) [#1753](https://github.com/Leaflet/Leaflet/issues/1753) [#1754](https://github.com/Leaflet/Leaflet/pull/1754) + * Added `latlng` property to `Marker` mouse event data. [#1613](https://github.com/Leaflet/Leaflet/issues/1613) + * Added `LayerGroup` `hasLayer` method (by [@rvlasveld](https://github.com/rvlasveld)). [#1282](https://github.com/Leaflet/Leaflet/issues/1282) [#1300](https://github.com/Leaflet/Leaflet/pull/1300) + * Added `LayerGroup` `getLayers` method (by [@tmcw](https://github.com/tmcw)). [#1469](https://github.com/Leaflet/Leaflet/pull/1469) + * Added `LayerGroup` `getLayer` method (by [@gumballhead](https://github.com/gumballhead)). [#1650](https://github.com/Leaflet/Leaflet/pull/1650) + * Improved `LayerGroup` `removeLayer` method to also accept layer `id` (by [@gumballhead](https://github.com/gumballhead)). [#1642](https://github.com/Leaflet/Leaflet/pull/1642) + * Added `Path` `pointerEvents` option for setting pointer-events on SVG-powered vector layers (by [@inpursuit](https://github.com/inpursuit)). [#1053](https://github.com/Leaflet/Leaflet/pull/1053) + * Improved `Polygon` to filter out last point if it's equal to the first one (to fix GeoJSON polygon issues) (by [@snkashis](https://github.com/snkashis)). [#1153](https://github.com/Leaflet/Leaflet/pull/1153) [#1135](https://github.com/Leaflet/Leaflet/issues/1135) + * Improved paths with `clickable: false` to allow mouse events to pass through to objects underneath (by [@snkashis](https://github.com/snkashis)). [#1384](https://github.com/Leaflet/Leaflet/pull/1384) [#1281](https://github.com/Leaflet/Leaflet/issues/1281) + * Improved `L.Util.template` (and correspondingly url-related `TileLayer` options) to support functions for data values (by [@olegsmith](https://github.com/olegsmith)). [#1554](https://github.com/Leaflet/Leaflet/pull/1554) + * Added `TileLayer` `getContainer` method (by [@tmcw](https://github.com/tmcw)). [#1433](https://github.com/Leaflet/Leaflet/pull/1433) + * Fixed `TileLayer.Canvas` `redraw` method chaining (by [@jieter](https://github.com/jieter)). [#1287](https://github.com/Leaflet/Leaflet/pull/1287) + * Added `TileLayer.WMS` `crs` option to be able to use WMS of CRS other than the map CRS (by [@kengu](https://github.com/kengu)). [#942](https://github.com/Leaflet/Leaflet/issues/942) [#945](https://github.com/Leaflet/Leaflet/issues/945) + * Added `popupopen` and `popupclose` events to various layers (by [@Koc](https://github.com/Koc)). [#738](https://github.com/Leaflet/Leaflet/pull/738) + * Added `Popup` `keepInView` option (thanks to [@lapo-luchini](https://github.com/lapo-luchini)) that prevents the popup from going off-screen while it's opened. [#1308](https://github.com/Leaflet/Leaflet/pull/1308) [#1052](https://github.com/Leaflet/Leaflet/issues/1052) + * Added `Marker` `togglePopup` method (by [@popox](https://github.com/popox)). [#1761](https://github.com/Leaflet/Leaflet/issues/1761) + * Added `Popup` `closeOnClick` option that overrides the same `Map` option for specific popups (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1669](https://github.com/Leaflet/Leaflet/issues/1669) + * Improved `Marker` and `Path` `bindPopup` method to also accept `Popup` objects (by [@snkashis](https://github.com/snkashis)). [#1385](https://github.com/Leaflet/Leaflet/pull/1385) [#1208](https://github.com/Leaflet/Leaflet/issues/1208) [#1402](https://github.com/Leaflet/Leaflet/pull/1402) + * Added `Marker` `setPopupContent` method (by [@snkashis](https://github.com/snkashis)). [#1373](https://github.com/Leaflet/Leaflet/pull/1373) + +##### Map API improvements + + * Improved all view changing methods of `Map` (`setView`, `panTo`, `setZoom`, `fitBounds`, etc.) to accept an options object, including the ability to precisely control zoom/pan animations they cause (force disable/enable, etc.). [#1617](https://github.com/Leaflet/Leaflet/pull/1617) [#1616](https://github.com/Leaflet/Leaflet/issues/1616) [#340](https://github.com/Leaflet/Leaflet/issues/340) [#483](https://github.com/Leaflet/Leaflet/issues/483) [#1164](https://github.com/Leaflet/Leaflet/issues/1164) [#1420](https://github.com/Leaflet/Leaflet/issues/1420) + * Improved `Map` `fitBounds` method to accept `padding` (or `paddingTopLeft` and `paddingBottomRight`) options, allowing you to zoom to an area with a certain padding in pixels (usually left for controls). [#859](https://github.com/Leaflet/Leaflet/issues/859) + * Improved `Map` `invalidateSize` to accept options object (`animate` and `pan`, the latter controls if it pans the map on size change). (by [@jacobtoye](https://github.com/jacobtoye) and [@mourner](https://github.com/mourner)). [#1766](https://github.com/Leaflet/Leaflet/issues/1766) [#1767](https://github.com/Leaflet/Leaflet/issues/1767) + * Added `Map` `setZoomAround` method for zooming while keeping a certain point fixed (used by scroll and double-click zooming). [#1157](https://github.com/Leaflet/Leaflet/issues/1157) + * Added `Map` `remove` method to properly destroy the map and clean up all events, and added corresponding `unload` event (by [@jfirebaugh](https://github.com/jfirebaugh) and [@mourner](https://github.com/mourner)). [#1434](https://github.com/Leaflet/Leaflet/issues/1434) [#1101](https://github.com/Leaflet/Leaflet/issues/1101) [#1621](https://github.com/Leaflet/Leaflet/issues/1621) + * Added `Map` `tap` handler that now contains all mobile hacks for enabling quick taps and long holds and `tapTolerance` option specifying the number of pixels you can shift your finger for click to still fire. + * Added `Map` `zoomAnimationThreshold` for setting the max zoom difference with which zoom animation can occur. [#1377](https://github.com/Leaflet/Leaflet/issues/1377) + * Improved `Map` `openPopup` method to also accept `(content, latlng)` signature as a shortcut. + * Improved `Map` `closePopup` method to optionally accept a popup object to close. [#1641](https://github.com/Leaflet/Leaflet/issues/1641) + * Improved `Map` `stopLocate` method to abort resetting map view if calling `locate` with `setView` option. [#747](https://github.com/Leaflet/Leaflet/issues/747) + * Improved `Map` to throw exception if the specified container id is not found (by [@tmcw](htts://github.com/tmcw)). [#1574](https://github.com/Leaflet/Leaflet/pull/1574) + * Improved `Map` `locationfound` event to pass all location data (heading, speed, etc.). [#984](https://github.com/Leaflet/Leaflet/issues/984) [#584](https://github.com/Leaflet/Leaflet/issues/584) [#987](https://github.com/Leaflet/Leaflet/issues/987) [#1028](https://github.com/Leaflet/Leaflet/issues/1028) + * Added `Map` `resize` event. [#1564](https://github.com/Leaflet/Leaflet/issues/1564) + * Added `Map` `zoomlevelschange` event that triggers when the current zoom range (min/max) changes (by [@moonlite](https://github.com/moonlite)). [#1376](https://github.com/Leaflet/Leaflet/pull/1376) + +##### Controls API improvements + + * Added **generic toolbar classes** for reuse by plugin developers (used by zoom control). + * Added `Map` `baselayerchange`, `overlayadd` and `overlayremove` events fired by `Control.Layers` (by [@calvinmetcalf](https://github.com/calvinmetcalf) and [@Xelio](https://github.com/Xelio)). [#1286](https://github.com/Leaflet/Leaflet/issues/1286) [#1634](https://github.com/Leaflet/Leaflet/issues/1634) + * Added `Control` `getContainer` method. [#1409](https://github.com/Leaflet/Leaflet/issues/1409) + +##### Misc API improvements + + * Made Leaflet classes compatible with **CoffeeScript class inheritance** syntax (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#1345](https://github.com/Leaflet/Leaflet/pull/1345) [#1314](https://github.com/Leaflet/Leaflet/issues/1314) + * Added `cleanAllEventListeners` method (aliased to `off` without arguments) to all events-enabled objects (by [@iirvine](https://github.com/iirvine)). [#1599](https://github.com/Leaflet/Leaflet/issues/1599) + * Added `addOneTimeEventListener` method (aliased to `once`) to all events-enabled objects (by [@iirvine](https://github.com/iirvine)). [#473](https://github.com/Leaflet/Leaflet/issues/473) [#1596](https://github.com/Leaflet/Leaflet/issues/1596) + * Added ability to pass coordinates as simple objects (`{lat: 50, lon: 30}` or `{lat: 50, lng: 30}`). [#1412](https://github.com/Leaflet/Leaflet/issues/1412) + * Added `LatLngBounds` `getNorth`, `getEast`, `getSouth`, `getWest` methods (by [@yohanboniface](https://github.com/yohanboniface)). [#1318](https://github.com/Leaflet/Leaflet/issues/1318) + * Added `AMD` support (Leaflet now registers itself as a `leaflet` AMD module) (with fixes from [@sheppard](https://github.com/sheppard)). [#1364](https://github.com/Leaflet/Leaflet/issues/1364) [#1778](https://github.com/Leaflet/Leaflet/issues/1778) + * Added `L.Util.trim` function (by [@kristerkari](https://github.com/kristerkari)). [#1607](https://github.com/Leaflet/Leaflet/pull/1607) + +#### Development workflow improvements + + * Switched from Jasmine to [Mocha](http://visionmedia.github.io/mocha/) with Expect.js (matchers) and Sinon (spies) for tests (by [@tmcw](https://github.com/tmcw) & [@jfirebaugh](https://github.com/jfirebaugh)). [#1479](https://github.com/Leaflet/Leaflet/issues/1479) + * Added [Karma](http://karma-runner.github.io) integration for running tests in a headless PhantomJS instance and code coverage reporting (by [@edjafarov](https://github.com/edjafarov)). [#1326](https://github.com/Leaflet/Leaflet/issues/1326) [#1340](https://github.com/Leaflet/Leaflet/pull/1340) + * Added [Travis CI integration](https://travis-ci.org/Leaflet/Leaflet) for linting and running tests for each commit and pull request automatically (by [@edjafarov](https://github.com/edjafarov)). [#1336](https://github.com/Leaflet/Leaflet/issues/1336) + * Significantly improved test coverage + * Added compatibility with lazy evaluation scripts (by [@kristerkari](https://github.com/kristerkari)). [#1288](https://github.com/Leaflet/Leaflet/issues/1288) [#1607](https://github.com/Leaflet/Leaflet/issues/1607) [#1288](https://github.com/Leaflet/Leaflet/issues/1288) + +### Bugfixes + +#### General bugfixes + + * Fixed lots of issues with extent restriction by `Map` `maxBounds`. [#1491](https://github.com/Leaflet/Leaflet/issues/1491) [#1475](https://github.com/Leaflet/Leaflet/issues/1475) [#1194](https://github.com/Leaflet/Leaflet/issues/1194) [#900](https://github.com/Leaflet/Leaflet/issues/900) [#1333](https://github.com/Leaflet/Leaflet/issues/1333) + * Fixed occasional crashes by disabling zoom animation if changing zoom level by more than 4 levels. [#1377](https://github.com/Leaflet/Leaflet/issues/1377) + * Fixed a bug with that caused stuttery keyboard panning in some cases (by [@tmcw](https://github.com/tmcw)). [#1710](https://github.com/Leaflet/Leaflet/issues/1710) + * Fixed a bug that caused unwanted scrolling of the page to the top of the map on focus. [#1228](https://github.com/Leaflet/Leaflet/issues/1228) [#1540](https://github.com/Leaflet/Leaflet/issues/1540) + * Fixed a bug where clicking on a marker with an open popup caused the popup to faded in again (by [@snkashis](https://github.com/snkashis)). [#506](https://github.com/Leaflet/Leaflet/issues/560) [#1386](https://github.com/Leaflet/Leaflet/pull/1386) + * Fixed a bug where zoom buttons disabled state didn't update on min/max zoom change (by [@snkashis](https://github.com/snkashis)). [#1372](https://github.com/Leaflet/Leaflet/pull/1372) [#1328](https://github.com/Leaflet/Leaflet/issues/1328) + * Fixed a bug where scrolling slightly wouldn't always zoom out the map (by [@cschwarz](https://github.com/cschwarz)). [#1575](https://github.com/Leaflet/Leaflet/pull/1575) + * Fixed popup close button to not leave an outline after clicking on it and reopening the popup (by [@dotCypress](https://github.com/dotCypress)). [#1537](https://github.com/Leaflet/Leaflet/pull/1537) + * Fixed a bug that prevented tiles from loading during pan animation. + * Fixed a bug with `contextmenu` events on popups falling through to map (by [@snkashis](https://github.com/snkashis)). [#1730](https://github.com/Leaflet/Leaflet/issues/1730) [#1732](https://github.com/Leaflet/Leaflet/issues/1732) + * Fixed `404` tile loading errors when browsing the map off the world bounds. + * Fixed shifted mouse events in some cases with map inside a relatively positioned parent (by [@scooterw](https://github.com/scooterw) and [@jec006](https://github.com/jec006)). [#1670](https://github.com/Leaflet/Leaflet/issues/1670) [#1684](https://github.com/Leaflet/Leaflet/issues/1684) [#1745](https://github.com/Leaflet/Leaflet/issues/1745) [#1744](https://github.com/Leaflet/Leaflet/issues/1744) + * Fixed a bug where tile layer z-index order sometimes broke after view reset. [#1422](https://github.com/Leaflet/Leaflet/issues/1422) + +#### Browser bugfixes + + * Fixed a bug with undesirable page scrolling in Firefox 17+ when you zoom the map by scrolling (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1789](https://github.com/Leaflet/Leaflet/issues/1789) [#1788](https://github.com/Leaflet/Leaflet/issues/1788) + * Fixed a bug where mouse coordinates where shifted in Firefox if the map was inside a positioned block on a scrolled page (by [@joschka](https://github.com/joschka)). [#1365](https://github.com/Leaflet/Leaflet/pull/1365) [#1322](https://github.com/Leaflet/Leaflet/issues/1322) + * Fixed a bug where box zoom didn't work in some cases in Firefox 18+ (by [@fabriceds](https://github.com/fabriceds)). [#1405](https://github.com/Leaflet/Leaflet/pull/1405) + * Fixed a bug where `TileLayer` opacity didn't work in IE 7-8 (by [@javisantana](https://github.com/javisantana) & [@danzel](https://gi +.com/danzel)). [#1084](https://github.com/Leaflet/Leaflet/issues/1084) [#1396](https://github.com/Leaflet/Leaflet/pull/1396) [#1371](https://github.com/Leaflet/Leaflet/issues/1371) + * Fixed Leaflet not working correctly in PhantomJS (by [@rassie](https://github.com/rassie)). [#1501](https://github.com/Leaflet/Leaflet/pull/1501) + +#### Mobile bugfixes + + * Fixed a bug with layers control on WinPhone8/IE10 Touch (by [@danzel](https://github.com/danzel)). [#1635](https://github.com/Leaflet/Leaflet/pull/1635) [#1539](https://github.com/Leaflet/Leaflet/issues/1539) + * Fixed a bug with click sometimes firing twice on WinPhone8/IE10 Touch (by [@danzel](https://github.com/danzel)). [#1694](https://github.com/Leaflet/Leaflet/issues/1694) + * Fixed a bug in Android where click was triggered twice on one tap (by [@jerel](https://github.com/jerel) & [@mourner](https://github.com/mourner)). [#1227](https://github.com/Leaflet/Leaflet/pull/1227) [#1263](https://github.com/Leaflet/Leaflet/issues/1263) [#1785](https://github.com/Leaflet/Leaflet/issues/1785) [#1694](https://github.com/Leaflet/Leaflet/issues/1694) + * Fixed a bug in Android where click on a collapsed layers control would immediately select one of the layers (by [@danzel](https://github.com/danzel)). [#1784](https://github.com/Leaflet/Leaflet/issues/1784) [#1694](https://github.com/Leaflet/Leaflet/issues/1694) + +#### API bugfixes + +##### General API bugfixes + + * Fixed click mouse event inside popups **not propagating outside the map** (fixes issues with jQuery.live and some mobile frameworks that rely on document click listeners). [#301](https://github.com/Leaflet/Leaflet/issues/301) + * Fixed a bug where event listener still fired even if it was removed on the same event in other listener (by [@spamdaemon](https://github.com/spamdaemon)). [#1661](https://github.com/Leaflet/Leaflet/issues/1661) [#1654](https://github.com/Leaflet/Leaflet/issues/1654) + * Fixed a bug where `L.point` and `L.latLng` factories weren't passing `null` and `undefined` values through. + * Fixed `DomEvent` `removeListener` function chaining (by [@pagameba](https://github.com/pagameba)). + * Fixed a bug where `removeEventListener` would throw an error if no events are registered on the object (by [@tjoekbezoer](https://github.com/tjoekbezoer)). [#1632](https://github.com/Leaflet/Leaflet/pull/1632) [#1631](https://github.com/Leaflet/Leaflet/issues/1631) + * Fixed a bug where `Point` `equals` and `contains` methods didn't accept points in array form. + * Fixed a bug where `LatLngBounds` `extend` of an undefined object would cause an error (by [@korzhyk](https://github.com/korzhyk)). [#1688](https://github.com/Leaflet/Leaflet/issues/1688) + * Fixed a bug where `Control.Attribution` `removeAttribution` of inexistant attribution corrupted the attribution text. [#1410](https://github.com/Leaflet/Leaflet/issues/1410) + * Fixed a bug where `setView` on an invisible map caused an error (by [@jfire](https://github.com/jfire)). [#1707](https://github.com/Leaflet/Leaflet/issues/1707) + * Fixed compatibility with Browserify (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1572](https://github.com/Leaflet/Leaflet/pull/1572) + +##### Layers API bugfixes + + * Fixed a bug where default marker icon path wasn't properly detected in some cases in IE6-7 (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#1294](https://github.com/Leaflet/Leaflet/pull/1294) + * Fixed a bug where `TileLayer.WMS` param values weren't escaped in URLs (by [@yohanboniface](https://github.com/yohanboniface)). [#1317](https://github.com/Leaflet/Leaflet/issues/1317) + * Fixed a bug where layers that belong to multiple feature groups didn't propagate events correctly (by [@danzel](https://github.com/danzel)). [#1359](https://github.com/Leaflet/Leaflet/pull/1359) + * Fixed a bug where `TileLayer.WMS` `tileSize` option was ignored (by [@brianhatchl](https://github.com/brianhatchl)). [#1080](https://github.com/brianhatchl) + * Fixed a bug where `Polyline` constructor could overwrite the source array (by [@snkashis](https://github.com/snkashis) and [@danzel](https://github.com/danzel)). [#1439](https://github.com/Leaflet/Leaflet/pull/1439) [#1092](https://github.com/Leaflet/Leaflet/issues/1092) [#1246](https://github.com/Leaflet/Leaflet/issues/1246) [#1426](https://github.com/Leaflet/Leaflet/issues/1426) + * Fixed a bug where marker dragging disabling/enabling wouldn't always work correctly (by [@snkashis](https://github.com/snkashis) and [@escaped](https://github.com/escaped)). [#1471](https://github.com/Leaflet/Leaflet/pull/1471) [#1551](https://github.com/Leaflet/Leaflet/pull/1551) + * Fixed `TileLayer` to prevent incorrect subdomain in case of negative tile coordinates (by [@malexeev](https://github.com/malexeev)). [#1532](https://github.com/Leaflet/Leaflet/pull/1532) + * Fixed polygons to normalize holes (remove last point if it's equal to the first one) (by [@jfirebaugh](https://github.com/jfirebaugh)). [#](https://github.com/Leaflet/Leaflet/pull/1467) [#1459](https://github.com/Leaflet/Leaflet/issues/1459) + * Fixed `DivIcon` `html` option to accept `0` as a value (by [@stuporglue](https://github.com/stuporglue)). [#1633](https://github.com/Leaflet/Leaflet/pull/1633) + * Fixed a bug with Canvas-based paths throwing an error on `mousemove` in certain conditions. [#1615](https://github.com/Leaflet/Leaflet/issues/1615) + * Fixed a bug where copies of the world wouldn't load if you set `TileLayer` `bounds` (by [@ansis](https://github.com/ansis)). [#1618](https://github.com/Leaflet/Leaflet/issues/1618) + * Fixed a bug where `TileLayer` `load` event wouldn't always fire correctly. [#1565](https://github.com/Leaflet/Leaflet/issues/1565) + * Fixed `TileLayer.WMS` compatibility with some old servers that only accepted request parameters in uppercase. [#1751](https://github.com/Leaflet/Leaflet/issues/1751) + * Fixed a bug with incorrect `L.Icon.Default.imagePath` detection in some cases. [#1657](https://github.com/Leaflet/Leaflet/issues/1657) + * Fixed a bug where layer `onRemove` was still called even if it was never added (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1729](https://github.com/Leaflet/Leaflet/issues/1729) + * Fixed a bug where calling `setRadius` on a Canvas-powered `CircleMarker` would cause an infinite loop (by [@snkashis](https://github.com/snkashis)). [#1712](https://github.com/Leaflet/Leaflet/issues/1712) [#1713](https://github.com/Leaflet/Leaflet/issues/1713) [#1728](https://github.com/Leaflet/Leaflet/issues/1728) + * Renamed `marker-icon@2x.png` to `marker-icon-2x.png` to fix compatibility with Google AppEngine. [#1552](https://github.com/Leaflet/Leaflet/issues/1552) [#1553](https://github.com/Leaflet/Leaflet/issues/1553) + * Fixed a bug where `popupclose` and `popupopen` events weren't fired for multipolygons and multipolylines (by [@tmcw](https://github.com/tmcw)). [#1681](https://github.com/Leaflet/Leaflet/issues/1681) + +##### Map API bugfixes + + * Fixed a bug where `Map` `fitBounds` wouldn't work correctly with large bounds (thanks to [@MaZderMind](https://github.com/MaZderMind)). [#1069](https://github.com/Leaflet/Leaflet/issues/1069) + * Fixed a bug where `Map` `hasLayer` wasn't handling `null` objects (by [@rvlasveld](https://github.com/rvlasveld)). [#1282](https://github.com/Leaflet/Leaflet/issues/1282) [#1302](https://github.com/Leaflet/Leaflet/pull/1302) + * Fixed a bug where `Map` `moveend` fired before `dragend` on drag (by [@oslek](https://github.com/oslek)). [#1374](https://github.com/Leaflet/Leaflet/pull/1374) + * Fixed a bug where panning with inertia produced an excessive `Map` `movestart` event on inertia start (by [@oslek](https://github.com/oslek)). [#1374](https://github.com/Leaflet/Leaflet/pull/1374) + * Fixed a bug where `Map` `moveend` fired repeatedly on window resize even if the actual map size didn't change (by [@oslek](https://github.com/oslek)). [#1374](https://github.com/Leaflet/Leaflet/pull/1374) + * Fixed a bug where `Map` `moveend` sometimes wasn't fired after drag (particularly often when dragging with a trackpad). + * Fixed a bug that would cause an error when trying to get the state of the map in a `Map` `load` event listener. [#962](https://github.com/Leaflet/Leaflet/issues/962) + * Added `Map` `autopanstart` event back (it was removed occasionally in previous version). [#1375](https://github.com/Leaflet/Leaflet/issues/1375) + * Fixed a bug with removing previously set `Map` `maxBounds` (by [@jec006](https://github.com/jec006)). [#1749](https://github.com/Leaflet/Leaflet/issues/1749) [#1750](https://github.com/Leaflet/Leaflet/issues/1750) + + +## 0.5.1 (February 6, 2013) + + * Fixed a regression with `GeoJSON` not accepting arrays of `FeatureCollection` (by [@snkashis](https://github.com/snkashis)). [#1299](https://github.com/Leaflet/Leaflet/pull/1299) [#1298](https://github.com/Leaflet/Leaflet/issues/1298) + * Fixed a regression with `CirleMarker` `setRadius` not working if called before adding the layer to the map (by [@danzel](https://github.com/danzel)). [#1342](https://github.com/Leaflet/Leaflet/issues/1342) [#1297](https://github.com/Leaflet/Leaflet/issues/1297) + +## 0.5 (January 17, 2013) + +### Breaking changes + +Be sure to read through these changes to avoid any issues when upgrading from older versions: + + * Removed default `LatLng` wrapping/clamping of coordinates (`-180, -90` to `180, 90`), wrapping moved to an explicit method (`LatLng` `wrap`). + * Disabled `Map` `worldCopyJump` option by default (jumping back to the original world copy when panning out of it). Enable it explicitly if you need it. + * Changed styles for the zoom control (you may need to update your custom styles for it). + +### Improvements + +#### Usability improvements + +##### Interaction + + * Added touch zoom, pan and double tap support for **IE10 touch devices and Metro apps** (by [@danzel](https://github.com/danzel) and [@veproza](https://github.com/veproza) with help from [@oliverheilig](https://github.com/oliverheilig)). [#1076](https://github.com/Leaflet/Leaflet/pull/1076) [#871](https://github.com/Leaflet/Leaflet/issues/871) + * **Improved panning inertia** to be much more natural and smooth. + * **Improved dragging cursors** in Chrome, Safari and Firefox (now grabbing hand cursors are used). + * Improved zoom animation curve for a better feel overall. + * Improved scroll wheel zoom to be more responsive. + * Improved panning animation performance in IE6-8. + +##### Controls + + * **Improved zoom control design** to look better, more neutral and in line with other controls, making it easier to customize and fit different website designs. Replaced +/- images with text. + * Improved zoom control to zoom by 3 levels if you hold shift while clicking on a button. + * Improved zoom control buttons to become visually disabled when min/max zoom is reached. [#917](https://github.com/Leaflet/Leaflet/issues/917) + * Improved scale control styles. + * Improved fallback control styles for IE6-8. + +##### Other + + * Added **retina support for markers** (through `Icon` `iconRetinaUrl` and `shadowRetinaUrl` options) (by [@danzel](https://github.com/danzel)). [#1048](https://github.com/Leaflet/Leaflet/issues/1048) [#1174](https://github.com/Leaflet/Leaflet/pull/1174) + * Added retina-sized default marker icon in addition to standard one (along with its SVG source and with some subtle design improvements) (by [@danzel](https://github.com/danzel)). [#1048](https://github.com/Leaflet/Leaflet/issues/1048) [#1174](https://github.com/Leaflet/Leaflet/pull/1174) + * Improved vectors updating/removing performance on Canvas backend (by [@danzel](https://github.com/danzel)). [#961](https://github.com/Leaflet/Leaflet/pull/961) + * Cut total images size from 10KB to 3.2KB with [Yahoo Smush.it](http://www.smushit.com/ysmush.it/). Thanks to Peter Rounce for suggestion. + +#### API improvements + + * Replaced `L.Transition` with a much better and simpler `L.PosAnimation`. + * Added `Class` `addInitHook` method for **adding constructor hooks to any classes** (great extension point for plugin authors). [#1123](https://github.com/Leaflet/Leaflet/issues/1123) + * Added `Map` `whenReady` method (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1063](https://github.com/Leaflet/Leaflet/pull/1063) + * Added optional `delta` argument to `Map` `zoomIn` and `zoomOut` (1 by default). + * Added `isValid` method to `LatLngBounds` and `Bounds` (by [@domoritz](https://github.com/domoritz)). [#972](https://github.com/Leaflet/Leaflet/pull/972) + * Added `Point` `equals` method. + * Added `Bounds` `getSize` method. + * Improved markers and vectors click event so that it propagates to map if no one is listening to it (by [@danzel](https://github.com/danzel)). [#834](https://github.com/Leaflet/Leaflet/issues/834) [#1033](https://github.com/Leaflet/Leaflet/pull/1033) + * Added `Path` `unbindPopup` and `closePopup` methods. + * Added `Path` `add` and `remove` event. + * Added `Marker` `riseOnHover` and `riseOffset` options (for bringing markers to front on hover, disabled by default) (by [jacobtoye](https://github.com/jacobtoye)). [#914](https://github.com/Leaflet/Leaflet/pull/914) [#920](https://github.com/Leaflet/Leaflet/issues/920) + * Added `Marker` `move` and `remove` events. + * Added `Marker` `contextmenu` event. [#223](https://github.com/Leaflet/Leaflet/issues/223) + * Added `Popup` `zoomAnimation` option (useful to disable when displaying flash content inside popups [#999](https://github.com/Leaflet/Leaflet/issues/999)). + * Added `FeatureGroup` `layeradd` and `layerremove` events (by [@jacobtoye](https://github.com/jacobtoye)). [#1122](https://github.com/Leaflet/Leaflet/issues/1122) + * Added `Control.Layers` `baselayerchange` event (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1064](https://github.com/Leaflet/Leaflet/pull/1064) + * Improved `Control.Layers` to support HTML in layer names (by [@aparshin](https://github.com/aparshin)). [#1055](https://github.com/Leaflet/Leaflet/pull/1055) [#1099](https://github.com/Leaflet/Leaflet/issues/1099) + * Added `CRS.Simple` to the list of built-in CRS and improved it to be more usable out of the box (it has different default scaling and transformation now), see `debug/map/simple-proj.html` for an example. + * Removed `Browser` `ua`, `gecko`, `opera` properties (no longer needed). + * Added `L.extend`, `L.bind`, `L.stamp`, `L.setOptions` shortcuts for corresponding `L.Util` methods. + * Disabled clearing of map container contents on map initialization (as a result of fixing [#278](https://github.com/Leaflet/Leaflet/issues/278)). + * Added `L.Util.isArray` function (by [@oslek](https://github.com/oslek)). [#1279](https://github.com/Leaflet/Leaflet/pull/1279) + * Added `mouseover` and `mouseout` events to canvas-based vector layers (by [@snkashis](https://github.com/snkashis)). [#1403](https://github.com/Leaflet/Leaflet/pull/1403) + * Added `Map` `eachLayer` to iterate over all layers added to the map (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1457](https://github.com/Leaflet/Leaflet/pull/1457) + * Added `TileLayer` `bounds` option to limit tile loading to a specific region (by [@adimitrov](https://github.com/adimitrov)). [#991](https://github.com/Leaflet/Leaflet/pull/991) + +### Bugfixes + +#### General bugfixes + + * Fixed broken tiles and zooming in RTL layouts (by [@danzel](https://github.com/danzel)). [#1099](https://github.com/Leaflet/Leaflet/pull/1099) [#1095](https://github.com/Leaflet/Leaflet/issues/1095) + * Fixed a bug with pan animation where it jumped to its end position if you tried to drag the map. + * Fixed a bug where shift-clicking on a map would zoom it to the max zoom level. + * Fixed a glitch with zooming in while panning animation is running. + * Fixed a glitch with dragging the map while zoom animation is running. + * Fixed a bug where slight touchpad scrolling or one-wheel scrolling wouln't always perform zooming. [#1039](https://github.com/Leaflet/Leaflet/issues/1039) + * Fixed a bug where `panBy` wouldn't round the offset values (so it was possible to make the map blurry with it). [#1085](https://github.com/Leaflet/Leaflet/issues/1085) + * Fixed a bug where you couldn't scroll the layers control with a mouse wheel. + * Fixed a regression where WMS tiles wouldn't wrap on date lines. [#970](https://github.com/Leaflet/Leaflet/issues/970) + * Fixed a bug where mouse interaction was affected by map container border width (by [@mohlendo](https://github.com/mohlendo)). [#1204](https://github.com/Leaflet/Leaflet/issues/1205) [#1205](https://github.com/Leaflet/Leaflet/pull/1205) + * Fixed a bug with weird vector zoom animation when using Canvas for rendering (by [@danzel](https://github.com/danzel)). [#1187](https://github.com/Leaflet/Leaflet/issues/1187) [#1188](https://github.com/Leaflet/Leaflet/pull/1188) + * Fixed a bug where max bounds limitation didn't work when navigating the map with a keyboard (by [@snkashis](https://github.com/snkashis)). [#989](https://github.com/Leaflet/Leaflet/issues/989) [#1221](https://github.com/Leaflet/Leaflet/pull/1221) + +#### API bugfixes + + * Fixed a bug where `TileLayer` `bringToBack` didn't work properly in some cases (by [@danzel](https://github.com/danzel)). [#963](https://github.com/Leaflet/Leaflet/pull/963) [#959](https://github.com/Leaflet/Leaflet/issues/959) + * Fixed a bug where removing a tile layer while dragging would throw an error (by [@danzel](https://github.com/danzel)). [#965](https://github.com/Leaflet/Leaflet/issues/965) [#968](https://github.com/Leaflet/Leaflet/pull/968) + * Fixed a bug where middle marker wasn't removed after deleting 2 end nodes from a polyline (by [@Svad](https://github.com/Svad)). [#1022](https://github.com/Leaflet/Leaflet/issues/1022) [#1023](https://github.com/Leaflet/Leaflet/pull/1023) + * Fixed a bug where `Map` `load` event happened too late (after `moveend`, etc.) (by [@jfirebaugh](https://github.com/jfirebaugh)). [#1027](https://github.com/Leaflet/Leaflet/pull/1027) + * Fixed `Circle` `getBounds` to return correct bounds and work without adding the circle to a map. [#1068](https://github.com/Leaflet/Leaflet/issues/1068) + * Fixed a bug where removing `Popup` on `viewreset` throwed an error (by [fnicollet](https://github.com/fnicollet) and [@danzel](https://github.com/danzel)). [#1098](https://github.com/Leaflet/Leaflet/pull/1098) [#1094](https://github.com/Leaflet/Leaflet/issues/1094) + * Fixed a bug where `TileLayer.Canvas` `drawTile` didn't receive tile zoom level in arguments. + * Fixed a bug where `GeoJSON` `resetStyle` would not fully reset a layer to its default style. [#1112](https://github.com/Leaflet/Leaflet/issues/1112) + * Fixed a bug that caused infinite recursion when using `latLngBounds` factory with coordinates as string values. [#933](https://github.com/Leaflet/Leaflet/issues/933) + * Fixed chaining on `Marker` `setIcon`, `setZIndexOffset`, `update` methods. [#1176](https://github.com/Leaflet/Leaflet/issues/1176) + * Fixed a bug with mouse interaction when the map container contained children with position other than absolute. [#278](https://github.com/Leaflet/Leaflet/issues/278) + * Fixed a bug with fill/stroke opacity conflicts when using Canvas for rendering (by [@danzel](https://github.com/danzel)). [#1186](https://github.com/Leaflet/Leaflet/issues/1186) [#1889](https://github.com/Leaflet/Leaflet/pull/1189) + * Fixed a bug where `FeatureGroup` `bindPopup` didn't take options into account. + * Fixed a bug where Canvas-based vector layers didn't cleanup click event on removal properly (by [@snkashis](https://github.com/snkashis)). [#1006](https://github.com/Leaflet/Leaflet/issues/1006) [#1273](https://github.com/Leaflet/Leaflet/pull/1273) + * Fixed a bug where `CircleMarker` `setStyle` didn't take `radius` into account (by [@fdlk](https://github.com/fdlk)). [#1012](https://github.com/Leaflet/Leaflet/issues/1012) [#1013](https://github.com/Leaflet/Leaflet/pull/1013) + * Fixed a bug where null GeoJSON geometries would throw an error instead of skipping (by [@brianherbert](https://github.com/brianherbert)). [#1240](https://github.com/Leaflet/Leaflet/pull/1240) + * Fixed a bug where Canvas-based vector layers passed incorrect `layer` event property on click (by [@snkashis](https://github.com/snkashis)). [#1215](https://github.com/Leaflet/Leaflet/issues/1215) [#1243](https://github.com/Leaflet/Leaflet/pull/1243) + * Fixed a bug where `TileLayer.WMS` didn't work correctly if the base URL contained query parameters (by [@snkashis](https://github.com/snkashis)). [#973](https://github.com/Leaflet/Leaflet/issues/973) [#1231](https://github.com/Leaflet/Leaflet/pull/1231) + * Fixed a bug where removing a polyline in editing state wouldn't clean up the editing handles (by [@mehmeta](https://github.com/mehmeta)). [#1233](https://github.com/Leaflet/Leaflet/pull/1233) + * Fixed a bug where removing a vector layer with a bound popup wouldn't clean up its click event properly (by [@yohanboniface](https://github.com/yohanboniface)). [#1229](https://github.com/Leaflet/Leaflet/pull/1229) + * Fixed a bug where `GeoJSON` features with `GeometryCollection` didn't pass properties to `pointToLayer` function (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#1097](https://github.com/Leaflet/Leaflet/pull/1097) + * Fixed `FeatureGroup` `eachLayer` chaining. [#1452](https://github.com/Leaflet/Leaflet/issues/1452) + +#### Browser bugfixes + + * Fixed a bug with map **freezing after zoom on Android 4.1**. [#1182](https://github.com/Leaflet/Leaflet/issues/1182) + * Fixed a bug where "Not implemented" error sometimes appeared in IE6-8 (by [@bryguy](https://github.com/bryguy) and [@lookfirst](https://github.com/lookfirst)). [#892](https://github.com/Leaflet/Leaflet/issues/892) [#893](https://github.com/Leaflet/Leaflet/pull/893) + * Fixed compatibility with SmoothWheel extension for Firefox (by [@waldir](https://github.com/waldir)). [#1011](https://github.com/Leaflet/Leaflet/pull/1011) + * Fixed a bug with popup layout in IE6-7 (by [@danzel](https://github.com/danzel)). [#1117](https://github.com/Leaflet/Leaflet/issues/1117) + * Fixed a bug with incorrect box zoom opacity in IE6-7 (by [@jacobtoye](https://github.com/jacobtoye)). [#1072](https://githubcom/Leaflet/Leaflet/pull/1072) + * Fixed a bug with box zoom throwing a JS error in IE6-7 (by [@danzel](https://github.com/danzel)). [#1071](https://github.com/Leaflet/Leaflet/pull/1071) + * Fixed a bug where `TileLayer` `bringToFront/Back()` throwed an error in IE6-8. [#1168](https://github.com/Leaflet/Leaflet/issues/1168) + * Fixed array type checking in the code to be more consistent in a cross-frame environment (by [@oslek](https://github.com/oslek)). [#1279](https://github.com/Leaflet/Leaflet/pull/1279) + * Fixed a bug with `-` key not working in Firefox 15+ (thanks to [@mattesCZ](https://github.com/mattesCZ)). [#869](https://github.com/Leaflet/Leaflet/issues/869) + +## 0.4.5 (October 25, 2012) + + * Fixed a bug with **wonky zoom animation in IE10** (by [@danzel](https://github.com/danzel)). [#1007](https://github.com/Leaflet/Leaflet/pull/1007) + * Fixed a bug with **wonky zoom animation in Chrome 23+** (by [@danzel](https://github.com/danzel)). [#1060](https://github.com/Leaflet/Leaflet/pull/1060) [#1056](https://github.com/Leaflet/Leaflet/issues/1056) + +## 0.4.4 (August 7, 2012) + +### Improvements + + * Improved `GeoJSON` `setStyle` to also accept function (like the corresponding option). + * Added `GeoJSON` `resetStyle(layer)`, useful for resetting hover state. + * Added `feature` property to layers created with `GeoJSON` (containing the GeoJSON feature data). + * Added `FeatureGroup` `bringToFront` and `bringToBack` methods (so that they would work for multipolys). + * Added optional `animate` argument to `Map` `invalidateSize` (by [@ajbeaven](https://github.com/ajbeaven)). [#857](https://github.com/Leaflet/Leaflet/pull/857) + +### Bugfixes + + * Fixed a bug where tiles sometimes disappeared on initial map load on Android 2/3 (by [@danzel](https://github.com/danzel)). [#868](https://github.com/Leaflet/Leaflet/pull/868) + * Fixed a bug where map would occasionally flicker near the border on zoom or pan on Chrome. + * Fixed a bug where `Path` `bringToFront` and `bringToBack` didn't return `this`. + * Removed zoom out on Win/Meta key binding (since it interferes with global keyboard shortcuts). [#869](https://github.com/Leaflet/Leaflet/issues/869) + +## 0.4.2 (August 1, 2012) + + * Fixed a bug where layers control radio buttons would not work correctly in IE7 (by [@danzel](https://github.com/danzel)). [#862](https://github.com/Leaflet/Leaflet/pull/862) + * Fixed a bug where `FeatureGroup` `removeLayer` would unbind popups of removed layers even if the popups were not put by the group (affected [Leaflet.markercluster](https://github.com/danzel/Leaflet.markercluster) plugin) (by [@danzel](https://github.com/danzel)). [#861](https://github.com/Leaflet/Leaflet/pull/861) + +## 0.4.1 (July 31, 2012) + + * Fixed a bug that caused marker shadows appear as opaque black in IE6-8. [#850](https://github.com/Leaflet/Leaflet/issues/850) + * Fixed a bug with incorrect calculation of scale by the scale control. [#852](https://github.com/Leaflet/Leaflet/issues/852) + * Fixed broken L.tileLayer.wms class factory (by [@mattcurrie](https://github.com/mattcurrie)). [#856](https://github.com/Leaflet/Leaflet/issues/856) + * Improved retina detection for `TileLayer` `detectRetina` option (by [@sxua](https://github.com/sxua)). [#854](https://github.com/Leaflet/Leaflet/issues/854) + +## 0.4 (July 30, 2012) + +### API simplification + +Leaflet 0.4 contains several API improvements that allow simpler, jQuery-like syntax ([example](https://gist.github.com/3038879)) while being backwards compatible with the previous approach (so you can use both styles): + + * Improved most methods and options to accept `LatLng`, `LatLngBounds`, `Point` and `Bounds` values in an array form (e.g. `map.panTo([lat, lng])` will be the same as `map.panTo(new L.LatLng(lat, lng))`) + * Added `addTo` method to all layer classes, e.g. `marker.addTo(map)` is equivalent to `map.addLayer(marker)` + * Added factory methods to most classes to be able to write code without `new` keyword, named the same as classes but starting with a lowercase letter, e.g. `L.map('map')` is the same as `new L.Map('map')` + +### Notable new features + + * Added configurable **panning inertia** - after a quick pan, the map slows down in the same direction. + * Added **keyboard navigation** for panning/zooming with keyboard arrows and +/- keys (by [@ericmmartinez](https://github.com/ericmmartinez)). [#663](https://github.com/Leaflet/Leaflet/pull/663) [#646](https://github.com/Leaflet/Leaflet/issues/646) + * Added smooth **zoom animation of markers, vector layers, image overlays and popups** (by [@danzel](https://github.com/danzel)). [#740](https://github.com/Leaflet/Leaflet/pull/740) [#758](https://github.com/Leaflet/Leaflet/issues/758) + * Added **Android 4+ pinch-zoom** support (by [@danzel](https://github.com/danzel)). [#774](https://github.com/Leaflet/Leaflet/pull/774) + * Added **polyline and polygon editing**. [#174](https://github.com/Leaflet/Leaflet/issues/174) + * Added an unobtrusive **scale control**. + * Added **DivIcon** class that easily allows you to create lightweight div-based markers. + * Added **Rectangle** vector layer (by [@JasonSanford](https://github.com/JasonSanford)). [#504](https://github.com/Leaflet/Leaflet/pull/504) + +### Improvements + +#### Usability improvements + + * Improved zooming so that you don't get a blank map when you zoom in or out twice quickly (by [@danzel](https://github.com/danzel)). [#7](https://github.com/Leaflet/Leaflet/issues/7) [#729](https://github.com/Leaflet/Leaflet/pull/729) + * Drag-panning now works even when there are markers in the starting point (helps on maps with lots of markers). [#506](https://github.com/Leaflet/Leaflet/issues/506) + * Improved panning performance even more (there are no wasted frames now). + * Improved pinch-zoom performance in mobile Chrome and Firefox. + * Improved map performance on window resize. + * Replaced box-shadow with border on controls for mobile devices to improve performance. + * Slightly improved default popup styling. + * Added `TileLayer` `detectRetina` option (`false` by default) that makes tiles show in a higher resolution on iOS retina displays (by [@Mithgol](https://github.com/Mithgol)). [#586](https://github.com/Leaflet/Leaflet/pull/586) + +#### GeoJSON API changes + +GeoJSON API was improved to be simpler and more flexible ([example](https://gist.github.com/3062900)). The changes are not backwards-compatible, so be sure to update your old code. + + * Added `style` option for styling vector layers, passed either as an object or as a function (to style vector layers according to GeoJSON properties). + * Added `filter` option to leave out features that don't correspond to a certain criteria (e.g. based on properties). + * Added `onEachFeature` option to execute certain code on each feature layer based on its properties (binding popups, etc). + * Changed `pointToLayer` function signature to provide `geojson` in addition to `latlng` when creating point features for more flexibility. + +#### Icon API changes + +Icon API was improved to be more flexible, but one of the changes is backwards-incompatible: you now need to pass different icon properties (like `iconUrl`) inside an options object ([example](https://gist.github.com/3076084)). + + * Converted `Icon` properties to options, changed constructor signature to `Icon(options)`. + * Moved default marker icon options to `L.Icon.Default` class (which extends from `L.Icon`). + * Added `Icon` `className` option to assign a custom class to an icon. + * Added `Icon` `shadowAnchor` option to set the anchor of the shadow. + * Made all `Icon` options except `iconUrl` optional (if not specified, they'll be chosen automatically or implemented using CSS). Anchor is centered by default (if size is specified), and otherwise can be set through CSS using negative margins. + +#### Control API changes + + * Added `setPosition` and `getPosition` to all controls, as well as ability to pass certain position as an option when creating a control. + * Made controls implementation easier (now more magic happens under the hood). + * Replaced ugly control position constants (e.g. `L.Control.Position.TOP_LEFT`) with light strings (`'topleft'`, `'bottomright'`, etc.) + +#### Other breaking API changes + + * Improved `TileLayer` constructor to interpolate URL template values from options (removed third `urlParams` argument). + * Changed `TileLayer` `scheme: 'tms'` option to `tms: true`. + * Removed `Map` `locateAndSetView` method (use `locate` with `setView: true` option) + * Changed popup `minWidth` and `maxWidth` options to be applied to content element, not the whole popup. + * Moved `prefix` argument to `options` in `Control.Attribution` constructor. + * Renamed `L.VERSION` to `L.version`. + +#### Other API improvements + + * Improved `on` and `off` methods to also accept `(eventHash[, context])`, as well as multiple space-separated events (by [@Guiswa](https://github.com/Guiswa)). [#770](https://github.com/Leaflet/Leaflet/pull/770) + * Improved `off` to remove all listeners of the event if no function was specified (by [@Guiswa](https://github.com/Guiswa)). [#770](https://github.com/Leaflet/Leaflet/pull/770) [#691](https://github.com/Leaflet/Leaflet/issues/691) + * Added `TileLayer` `setZIndex` method for controlling the order of tile layers (thanks to [@mattcurrie](https://github.com/mattcurrie)). [#837](https://github.com/Leaflet/Leaflet/pull/837) + * Added `Control.Layers` `autoZIndex` option (on by default) to preserve the order of tile layers when switching. + * Added `TileLayer` `redraw` method for re-requesting tiles (by [@greeninfo](https://github.com/greeninfo)). [#719](https://github.com/Leaflet/Leaflet/issues/719) + * Added `TileLayer` `setUrl` method for dynamically changing the tile URL template. + * Added `bringToFront` and `bringToBack` methods to `TileLayer`, `ImageOverlay` and vector layers. [#185](https://github.com/Leaflet/Leaflet/issues/185) [#505](https://github.com/Leaflet/Leaflet/issues/505) + * Added `TileLayer` `loading` event that fires when its tiles start to load (thanks to [@lapinos03](https://github.com/lapinos03)). [#177](https://github.com/Leaflet/Leaflet/issues/177) + * Added `TileLayer.WMS` `setParams` method for setting WMS parameters at runtime (by [@greeninfo](https://github.com/greeninfo)). [#719](https://github.com/Leaflet/Leaflet/issues/719) + * Added `TileLayer.WMS` subdomain support (`{s}` in the url) (by [@greeninfo](https://github.com/greeninfo)). [#735](https://github.com/Leaflet/Leaflet/issues/735) + * Added `originalEvent` property to `MouseEvent` (by [@k4](https://github.com/k4)). [#521](https://github.com/Leaflet/Leaflet/pull/521) + * Added `containerPoint` property to `MouseEvent`. [#413](https://github.com/Leaflet/Leaflet/issues/413) + * Added `contextmenu` event to vector layers (by [@ErrorProne](https://github.com/ErrorProne)). [#500](https://github.com/Leaflet/Leaflet/pull/500) + * Added `LayerGroup` `eachLayer` method for iterating over its members. + * Added `FeatureGroup` `mousemove` and `contextmenu` events (by [@jacobtoye](https://github.com/jacobtoye)). [#816](https://github.com/Leaflet/Leaflet/pull/816) + * Added chaining to `DomEvent` methods. + * Added `on` and `off` aliases for `DomEvent` `addListener` and `removeListener` methods. + * Added `L_NO_TOUCH` global variable switch (set it before Leaflet inclusion) which disables touch detection, helpful for desktop apps built using QT. [#572](https://github.com/Leaflet/Leaflet/issues/572) + * Added `dashArray` option to vector layers for making dashed strokes (by [jacobtoye](https://github.com/jacobtoye)). [#821](https://github.com/Leaflet/Leaflet/pull/821) [#165](https://github.com/Leaflet/Leaflet/issues/165) + * Added `Circle` `getBounds` method. [#440](https://github.com/Leaflet/Leaflet/issues/440) + * Added `Circle` `getLatLng` and `getRadius` methods (by [@Guiswa](https://github.com/Guiswa)). [#655](https://github.com/Leaflet/Leaflet/pull/655) + * Added `openPopup` method to all vector layers. [#246](https://github.com/Leaflet/Leaflet/issues/246) + * Added public `redraw` method to vector layers (useful if you manipulate their `LatLng` points directly). + * Added `Marker` `opacity` option and `setOpacity` method. + * Added `Marker` `update` method. [#392](https://github.com/Leaflet/Leaflet/issues/392) + * Improved `Marker` `openPopup` not to raise an error if it doesn't have a popup. [#507](https://github.com/Leaflet/Leaflet/issues/507) + * Added `ImageOverlay` `opacity` option and `setOpacity` method. [#438](https://github.com/Leaflet/Leaflet/issues/438) + * Added `Popup` `maxHeight` option that makes content inside the popup scrolled if it doesn't fit the specified max height. + * Added `Popup` `openOn(map)` method (similar to `Map` `openPopup`). + * Added `Map` `getContainer` method (by [@Guiswa](https://github.com/Guiswa)). [#654](https://github.com/Leaflet/Leaflet/pull/654) + * Added `Map` `containerPointToLatLng` and `latLngToContainerPoint` methods. [#474](https://github.com/Leaflet/Leaflet/issues/474) + * Added `Map` `addHandler` method. + * Added `Map` `mouseup` and `autopanstart` events. + * Added `LatLngBounds` `pad` method that returns bounds extended by a percentage (by [@jacobtoye](https://github.com/jacobtoye)). [#492](https://github.com/Leaflet/Leaflet/pull/492) + * Moved dragging cursor styles from JS code to CSS. + +### Bug fixes + +#### General bugfixes + + * Fixed a bug where the map was zooming incorrectly inside a `position: fixed` container (by [@chx007](https://github.com/chx007)). [#602](https://github.com/Leaflet/Leaflet/pull/602) + * Fixed a bug where scaled tiles weren't cleared up after zoom in some cases (by [@cfis](https://github.com/cfis)) [#683](https://github.com/Leaflet/Leaflet/pull/683) + * Fixed a bug where map wouldn't drag over a polygon with a `mousedown` listener. [#834](https://github.com/Leaflet/Leaflet/issues/834) + +#### API bugfixes + + * Fixed a regression where removeLayer would not remove corresponding attribution. [#488](https://github.com/Leaflet/Leaflet/issues/488) + * Fixed a bug where popup close button wouldn't work on manually added popups. [#423](https://github.com/Leaflet/Leaflet/issues/423) + * Fixed a bug where marker click event would stop working if you dragged it and then disabled dragging. [#434](https://github.com/Leaflet/Leaflet/issues/434) + * Fixed a bug where `TileLayer` `setOpacity` wouldn't work when setting it back to 1. + * Fixed a bug where vector layer `setStyle({stroke: false})` wouldn't remove stroke and the same for fill. [#441](https://github.com/Leaflet/Leaflet/issues/441) + * Fixed a bug where `Marker` `bindPopup` method wouldn't take `offset` option into account. + * Fixed a bug where `TileLayer` `load` event wasn't fired if some tile didn't load (by [@lapinos03](https://github.com/lapinos03) and [@cfis](https://github.com/cfis)) [#682](https://github.com/Leaflet/Leaflet/pull/682) + * Fixed error when removing `GeoJSON` layer. [#685](https://github.com/Leaflet/Leaflet/issues/685) + * Fixed error when calling `GeoJSON` `clearLayer` (by [@runderwood](https://github.com/runderwood)). [#617](https://github.com/Leaflet/Leaflet/pull/617) + * Fixed a bug where `Control` `setPosition` wasn't always working correctly (by [@ericmmartinez](https://github.com/ericmmartinez)). [#657](https://github.com/Leaflet/Leaflet/pull/657) + * Fixed a bug with `Util.bind` sometimes losing arguments (by [@johtso](https://github.com/johtso)). [#588](https://github.com/Leaflet/Leaflet/pull/588) + * Fixed a bug where `drag` event was sometimes fired after `dragend`. [#555](https://github.com/Leaflet/Leaflet/issues/555) + * Fixed a bug where `TileLayer` `load` event was firing only once (by [@lapinos03](https://github.com/lapinos03) and [shintonik](https://github.com/shintonik)). [#742](https://github.com/Leaflet/Leaflet/pull/742) [#177](https://github.com/Leaflet/Leaflet/issues/177) + * Fixed a bug where `FeatureGroup` popup events where not cleaned up after removing a layer from it (by [@danzel](https://github.com/danzel)). [#775](https://github.com/Leaflet/Leaflet/pull/775) + * Fixed a bug where `DomUtil.removeClass` didn't remove trailing spaces (by [@jieter](https://github.com/jieter)). [#784](https://github.com/Leaflet/Leaflet/pull/784) + * Fixed a bug where marker popup didn't take popup offset into account. + * Fixed a bug that led to an error when polyline was removed inside a `moveend` listener. + * Fixed a bug where `LayerGroup` `addLayer` wouldn't check if a layer has already been added (by [@danzel](https://github.com/danzel)). [798](https://github.com/Leaflet/Leaflet/pull/798) + +#### Browser bugfixes + + * Fixed broken zooming on IE10 beta (by [@danzel](https://github.com/danzel)). [#650](https://github.com/Leaflet/Leaflet/issues/650) [#751](https://github.com/Leaflet/Leaflet/pull/751) + * Fixed a bug that broke Leaflet for websites that had XHTML content-type header set (by [lars-sh](https://github.com/lars-sh)). [#801](https://github.com/Leaflet/Leaflet/pull/801) + * Fixed a bug that caused popups to be empty in IE when passing a DOM node as the content (by [@nrenner](https://github.com/nrenner)). [#472](https://github.com/Leaflet/Leaflet/pull/472) + * Fixed inability to use scrolled content inside popup due to mouse wheel propagation. + * Fixed a bug that caused jumping/stuttering of panning animation in some cases. + * Fixed a bug where popup size was calculated incorrectly in IE. + * Fixed a bug where cursor would flicker when dragging a marker. + * Fixed a bug where clickable paths on IE9 didn't have a hand cursor (by [naehrstoff](https://github.com/naehrstoff)). [#671](https://github.com/Leaflet/Leaflet/pull/671) + * Fixed a bug in IE with disappearing icons when changing opacity (by [@tagliala](https://github.com/tagliala) and [DamonOehlman](https://github.com/DamonOehlman)). [#667](https://github.com/Leaflet/Leaflet/pull/667) [#600](https://github.com/Leaflet/Leaflet/pull/600) + * Fixed a bug with setting opacity on IE10 (by [@danzel](https://github.com/danzel)). [796](https://github.com/Leaflet/Leaflet/pull/796) + * Fixed a bug where `Control.Layers` didn't work on IE7. [#652](https://github.com/Leaflet/Leaflet/issues/652) + * Fixed a bug that could cause false `mousemove` events on click in Chrome (by [@stsydow](https://github.com/stsydow)). [#757](https://github.com/Leaflet/Leaflet/pull/757) + * Fixed a bug in IE6-8 where adding fill or stroke on vector layers after initialization with `setStyle` would break the map. [#641](https://github.com/Leaflet/Leaflet/issues/641) + * Fixed a bug with setOpacity in IE where it would not work correctly if used more than once on the same element (by [@ajbeaven](https://github.com/ajbeaven)). [#827](https://github.com/Leaflet/Leaflet/pull/827) + * Fixed a bug in Chrome where transparent control corners sometimes couldn't be clicked through (by [@danzel](https://github.com/danzel)). [#836](https://github.com/Leaflet/Leaflet/pull/836) [#575](https://github.com/Leaflet/Leaflet/issues/575) + +#### Mobile browser bugfixes + + * Fixed a bug that sometimes caused map to disappear completely after zoom on iOS (by [@fr1n63](https://github.com/fr1n63)). [#580](https://github.com/Leaflet/Leaflet/issues/580) [#777](https://github.com/Leaflet/Leaflet/pull/777) + * Fixed a bug that often caused vector layers to flicker on drag end on iOS (by [@krawaller](https://github.com/krawaller)). [#18](https://github.com/Leaflet/Leaflet/issues/18) + * Fixed a bug with false map click events on pinch-zoom and zoom/layers controls click. [#485](https://github.com/Leaflet/Leaflet/issues/485) + * Fixed a bug where touching the map with two or more fingers simultaneously would raise an error. + * Fixed a bug where zoom control wasn't always visible on Android 3. [#335](https://github.com/Leaflet/Leaflet/issues/335) + * Fixed a bug where opening the layers control would propagate a click to the map (by [@jacobtoye](https://github.com/jacobtoye)). [#638](https://github.com/Leaflet/Leaflet/pull/638) + * Fixed a bug where `ImageOverlay` wouldn't stretch properly on zoom on Android 2. [#651](https://github.com/Leaflet/Leaflet/issues/651) + * Fixed a bug where `clearLayers` for vector layers on a Canvas backend (e.g. on Android 2) would take unreasonable amount of time. [#785](https://github.com/Leaflet/Leaflet/issues/785) + * Fixed a bug where `setLatLngs` and similar methods on vector layers on a Canvas backend would not update the layers immediately. [#732](https://github.com/Leaflet/Leaflet/issues/732) + +## 0.3.1 (February 14, 2012) + + * Fixed a regression where default marker icons wouldn't work if Leaflet include url contained a query string. + * Fixed a regression where tiles sometimes flickered with black on panning in iOS. + +## 0.3 (February 13, 2012) + +### Major features + + * Added **Canvas backend** for vector layers (polylines, polygons, circles). This enables vector support on Android < 3, and it can also be optionally preferred over SVG for a performance gain in some cases. Thanks to [@florianf](https://github.com/florianf) for a big part of this work. + * Added **layers control** (`Control.Layers`) for convenient layer switching. + * Added ability to set **max bounds** within which users can pan/zoom. [#93](https://github.com/Leaflet/Leaflet/issues/93) + +### Improvements + +#### Usability improvements + + * Map now preserves its center after resize. + * When panning to another copy of the world (that's infinite horizontally), map overlays now jump to corresponding positions. [#273](https://github.com/Leaflet/Leaflet/issues/273) + * Limited maximum zoom change on a single mouse wheel movement (so you won't zoom across the whole zoom range in one scroll). [#149](https://github.com/Leaflet/Leaflet/issues/149) + * Significantly improved line simplification performance (noticeable when rendering polylines/polygons with tens of thousands of points) + * Improved circles performance by not drawing them if they're off the clip region. + * Improved stability of zoom animation (less flickering of tiles). + +#### API improvements + + * Added ability to add a tile layer below all others (`map.addLayer(layer, true)`) (useful for switching base tile layers). + * Added `Map` `zoomstart` event (thanks to [@Fabiz](https://github.com/Fabiz)). [#377](https://github.com/Leaflet/Leaflet/pull/377) + * Improved `Map` `locate` method, added ability to watch location continuously and more options. [#212](https://github.com/Leaflet/Leaflet/issues/212) + * Added second argument `inside` to `Map` `getBoundsZoom` method that allows you to get appropriate zoom for the view to fit *inside* the given bounds. + * Added `hasLayer` method to `Map`. + * Added `Marker` `zIndexOffset` option to be able to set certain markers below/above others. [#65](https://github.com/Leaflet/Leaflet/issues/65) + * Added `urlParams` third optional argument to `TileLayer` constructor for convenience: an object with properties that will be evaluated in the URL template. + * Added `TileLayer` `continuousWorld` option to disable tile coordinates checking/wrapping. + * Added `TileLayer` `tileunload` event fired when tile gets removed after panning (by [@CodeJosch](https://github.com/CodeJosch)). [#256](https://github.com/Leaflet/Leaflet/pull/256) + * Added `TileLayer` `zoomOffset` option useful for non-256px tiles (by [@msaspence](https://github.com/msaspence)). + * Added `TileLayer` `zoomReverse` option to reverse zoom numbering (by [@Majiir](https://github.com/Majiir)). [#406](https://github.com/Leaflet/Leaflet/pull/406) + * Added `TileLayer.Canvas` `redraw` method (by [@mortenbekditlevsen](https://github.com/mortenbekditlevsen)). [#459](https://github.com/Leaflet/Leaflet/pull/459) + * Added `Polyline` `closestLayerPoint` method that's can be useful for interaction features (by [@anru](https://github.com/anru)). [#186](https://github.com/Leaflet/Leaflet/pull/186) + * Added `setLatLngs` method to `MultiPolyline` and `MultiPolygon` (by [@anru](https://github.com/anru)). [#194](https://github.com/Leaflet/Leaflet/pull/194) + * Added `getBounds` method to `Polyline` and `Polygon` (by [@JasonSanford](https://github.com/JasonSanford)). [#253](https://github.com/Leaflet/Leaflet/pull/253) + * Added `getBounds` method to `FeatureGroup` (by [@JasonSanford](https://github.com/JasonSanford)). [#557](https://github.com/Leaflet/Leaflet/pull/557) + * Added `FeatureGroup` `setStyle` method (also inherited by `MultiPolyline` and `MultiPolygon`). [#353](https://github.com/Leaflet/Leaflet/issues/353) + * Added `FeatureGroup` `invoke` method to call a particular method on all layers of the group with the given arguments. + * Added `ImageOverlay` `load` event. [#213](https://github.com/Leaflet/Leaflet/issues/213) + * Added `minWidth` option to `Popup` (by [@marphi](https://github.com/marphi)). [#214](https://github.com/Leaflet/Leaflet/pull/214) + * Improved `LatLng` constructor to be more tolerant (and throw descriptive error if latitude or longitude can't be interpreted as a number). [#136](https://github.com/Leaflet/Leaflet/issues/136) + * Added `LatLng` `distanceTo` method (great circle distance) (by [@mortenbekditlevsen](https://github.com/mortenbekditlevsen)). [#462](https://github.com/Leaflet/Leaflet/pull/462) + * Added `LatLngBounds` `toBBoxString` method for convenience (by [@JasonSanford](https://github.com/JasonSanford)). [#263](https://github.com/Leaflet/Leaflet/pull/263) + * Added `LatLngBounds` `intersects(otherBounds)` method (thanks to [@pagameba](https://github.com/pagameba)). [#350](https://github.com/Leaflet/Leaflet/pull/350) + * Made `LatLngBounds` `extend` method to accept other `LatLngBounds` in addition to `LatLng` (by [@JasonSanford](https://github.com/JasonSanford)). [#553](https://github.com/Leaflet/Leaflet/pull/553) + * Added `Bounds` `intersects(otherBounds)` method. [#461](https://github.com/Leaflet/Leaflet/issues/461) + * Added `L.Util.template` method for simple string template evaluation. + * Added `DomUtil.removeClass` method (by [@anru](https://github.com/anru)). + * Improved browser-specific code to rely more on feature detection rather than user agent string. + * Improved superclass access mechanism to work with inheritance chains of 3 or more classes; now you should use `Klass.superclass` instead of `this.superclass` (by [@anru](https://github.com/anru)). [#179](https://github.com/Leaflet/Leaflet/pull/179) + * Added `Map` `boxzoomstart` and `boxzoomend` events (by [@zedd45](https://github.com/zedd45)). [#554](https://github.com/Leaflet/Leaflet/pull/554) + * Added `Popup` `contentupdate` event (by [@mehmeta](https://github.com/mehmeta)). [#548](https://github.com/Leaflet/Leaflet/pull/548) + +#### Breaking API changes + + * `shiftDragZoom` map option/property renamed to `boxZoom`. + * Removed `mouseEventToLatLng` method (bringed back in 0.4). + +#### Development workflow improvements + + * Build system completely overhauled to be based on Node.js, Jake, JSHint and UglifyJS. + * All code is now linted for errors and conformity with a strict code style (with JSHint), and wont build unless the check passes. + +### Bugfixes + +#### General bugfixes + + * Fixed a bug where `Circle` was rendered with incorrect radius (didn't take projection exagerration into account). [#331](https://github.com/Leaflet/Leaflet/issues/331) + * Fixed a bug where `Map` `getBounds` would work incorrectly on a date line cross. [#295](https://github.com/Leaflet/Leaflet/issues/295) + * Fixed a bug where polygons and polylines sometimes rendered incorrectly on some zoom levels. [#381](https://github.com/Leaflet/Leaflet/issues/381) + * Fixed a bug where fast mouse wheel zoom worked incorrectly when approaching min/max zoom values. + * Fixed a bug where `GeoJSON` `pointToLayer` option wouldn't work in a `GeometryCollection`. [#391](https://github.com/Leaflet/Leaflet/issues/391) + * Fixed a bug with incorrect rendering of GeoJSON on a date line cross. [#354](https://github.com/Leaflet/Leaflet/issues/354) + * Fixed a bug where map panning would stuck forever after releasing the mouse over an iframe or a flash object (thanks to [@sten82](https://github.com/sten82)). [#297](https://github.com/Leaflet/Leaflet/pull/297) [#64](https://github.com/Leaflet/Leaflet/issues/64) + * Fixed a bug where mouse wheel zoom worked incorrectly if map is inside scrolled container (partially by [@chrillo](https://github.com/chrillo)). [#206](https://github.com/Leaflet/Leaflet/issues/206) + * Fixed a bug where it was possible to add the same listener twice. [#281](https://github.com/Leaflet/Leaflet/issues/281) + * Fixed a bug where `Circle` was rendered with incorrect radius (didn't take projection exaggeration into account). [#331](https://github.com/Leaflet/Leaflet/issues/331) + * Fixed a bug where `Marker` `setIcon` was not working properly (by [@marphi](https://github.com/marphi)). [#218](https://github.com/Leaflet/Leaflet/pull/218) [#311](https://github.com/Leaflet/Leaflet/issues/311) + * Fixed a bug where `Marker` `setLatLng` was not working if it's set before adding the marker to a map. [#222](https://github.com/Leaflet/Leaflet/issues/222) + * Fixed a bug where marker popup would not move on `Marker` `setLatLng` (by [@tjarratt](https://github.com/tjarratt)). [#272](https://github.com/Leaflet/Leaflet/pull/272) + * Fixed a bug where static properties of a child class would not override the parent ones. + * Fixed broken popup `closePopup` option (by [@jgerigmeyer](https://github.com/jgerigmeyer)). + * Fixed a bug that caused en error when dragging marker with icon without shadow (by [@anru](https://github.com/anru)). [#178](https://github.com/Leaflet/Leaflet/issues/178) + * Fixed a typo in `Bounds` `contains` method (by [@anru](https://github.com/anru)). [#180](https://github.com/Leaflet/Leaflet/pull/180) + * Fixed a bug where creating an empty `Polygon` with `new L.Polygon()` would raise an error. + * Fixed a bug where drag event fired before the actual movement of layer (by [@anru](https://github.com/anru)). [#197](https://github.com/Leaflet/Leaflet/pull/197) + * Fixed a bug where map click caused an error if dragging is initially disabled. [#196](https://github.com/Leaflet/Leaflet/issues/196) + * Fixed a bug where map `movestart` event would fire after zoom animation. + * Fixed a bug where attribution prefix would not update on `setPrefix`. [#195](https://github.com/Leaflet/Leaflet/issues/195) + * Fixed a bug where `TileLayer` `load` event wouldn't fire in some edge cases (by [@dravnic](https://github.com/dravnic)). + * Fixed a bug related to clearing background tiles after zooming (by [@neno-giscloud](https://github.com/neno-giscloud) & [@dravnic](https://github.com/dravnic)). + * Fixed a bug that sometimes caused map flickering after zoom animation. + * Fixed a bug related to cleaning up after removing tile layers (by [@dravnic](https://github.com/dravnic)). [#276](https://github.com/Leaflet/Leaflet/pull/276) + * Fixed a bug that made selecting text in the attribution control impossible. [#279](https://github.com/Leaflet/Leaflet/issues/279) + * Fixed a bug when initializing a map in a non-empty div. [#278](https://github.com/Leaflet/Leaflet/issues/278) + * Fixed a bug where `movestart` didn't fire on panning animation. + * Fixed a bug in Elliptical Mercator formula that affeted `EPSG:3395` CRS (by [@Savvkin](https://github.com/Savvkin)). [#358](https://github.com/Leaflet/Leaflet/pull/358) + +#### Browser bugfixes + + * Fixed occasional crashes on Mac Safari (thanks to [@lapinos03](https://github.com/lapinos03)). [#191](https://github.com/Leaflet/Leaflet/issues/191) + * Fixed a bug where resizing the map would sometimes make it blurry on WebKit (by [@mortenbekditlevsen](https://github.com/mortenbekditlevsen)). [#453](https://github.com/Leaflet/Leaflet/pull/453) + * Fixed a bug that raised error in IE6-8 when clicking on popup close button. [#235](https://github.com/Leaflet/Leaflet/issues/235) + * Fixed a bug with Safari not redrawing UI immediately after closing a popup. [#296](https://github.com/Leaflet/Leaflet/issues/296) + * Fixed a bug that caused performance drop and high CPU usage when calling `setView` or `panTo` to the current center. [#231](https://github.com/Leaflet/Leaflet/issues/231) + * Fixed a bug that caused map overlays to appear blurry in some cases under WebKit browsers. + * Fixed a bug that was causing errors in some Webkit/Linux builds (requestAnimationFrame-related), thanks to Chris Martens. + +#### Mobile browser bugfixes + + * Fixed a bug that caused an error when clicking vector layers under iOS. [#204](https://github.com/Leaflet/Leaflet/issues/204) + * Fixed crash on Android 3+ when panning or zooming (by [@florian](https://github.com/florianf)). [#137](https://github.com/Leaflet/Leaflet/issues/137) + * Fixed a bug on Android 2/3 that sometimes caused the map to disappear after zooming. [#69](https://github.com/Leaflet/Leaflet/issues/69) + * Fixed a bug on Android 3 that caused tiles to shift position on a big map. + * Fixed a bug that caused the map to pan when touch-panning inside a popup. [#452](https://github.com/Leaflet/Leaflet/issues/452) + * Fixed a bug that caused click delays on zoom control. + + +## 0.2.1 (2011-06-18) + + * Fixed regression that caused error in `TileLayer.Canvas`. + +## 0.2 (2011-06-17) + +### Major features + + * Added **WMS** support (`TileLayer.WMS` layer). + * Added different **projections** support, having `EPSG:3857`, `EPSG:4326` and `EPSG:3395` out of the box (through `crs` option in `Map`). Thanks to [@Miroff](https://github.com/Miroff) & [@Komzpa](https://github.com/Komzpa) for great advice and explanation regarding this. + * Added **GeoJSON** layer support. + +### Improvements + +#### Usability improvements + + * Improved panning performance in Chrome and FF considerably with the help of `requestAnimationFrame`. [#130](https://github.com/Leaflet/Leaflet/issues/130) + * Improved click responsiveness in mobile WebKit (now it happens without delay). [#26](https://github.com/Leaflet/Leaflet/issues/26) + * Added tap tolerance (so click happens even if you moved your finger slighly when tapping). + * Improved geolocation error handling: better error messages, explicit timeout, set world view on locateAndSetView failure. [#61](https://github.com/Leaflet/Leaflet/issues/61) + +#### API improvements + + * Added **MultiPolyline** and **MultiPolygon** layers. [#77](https://github.com/Leaflet/Leaflet/issues/77) + * Added **LayerGroup** and **FeatureGroup** layers for grouping other layers. + * Added **TileLayer.Canvas** for easy creation of canvas-based tile layers. + * Changed `Circle` to be zoom-dependent (with radius in meters); circle of a permanent size is now called `CircleMarker`. + * Added `mouseover` and `mouseout` events to map, markers and paths; added map `mousemove` event. + * Added `setLatLngs`, `spliceLatLngs`, `addLatLng`, `getLatLngs` methods to polylines and polygons. + * Added `setLatLng` and `setRadius` methods to `Circle` and `CircleMarker`. + * Improved `LatLngBounds contains` method to accept `LatLng` in addition to `LatLngBounds`, the same for `Bounds contains` and `Point` + * Improved `LatLngBounds` & `Bounds` to allow their instantiation without arguments (by [@snc](https://github.com/snc)). + * Added TMS tile numbering support through `TileLayer` `scheme: 'tms'` option (by [@tmcw](https://github.com/tmcw)). + * Added `TileLayer` `noWrap` option to disable wrapping `x` tile coordinate (by [@jasondavies](https://github.com/jasondavies)). + * Added `opacity` option and `setOpacity` method to `TileLayer`. + * Added `setLatLng` and `setIcon` methods to `Marker`. + * Added `title` option to `Marker`. + * Added `maxZoom` argument to `map.locateAndSetView` method. + * Added ability to pass Geolocation options to map `locate` and `locateAndSetView` methods (by [@JasonSanford](https://github.com/JasonSanford)). + * Improved `Popup` to accept HTML elements in addition to strings as its content. + +#### Development workflow improvements + + * Added `Makefile` for building `leaflet.js` on non-Windows machines (by [@tmcw](https://github.com/tmcw)). + * Improved `debug/leaflet-include.js` script to allow using it outside of `debug` folder (by [@antonj](https://github.com/antonj)). + * Improved `L` definition to be compatible with CommonJS. [#122](https://github.com/Leaflet/Leaflet/issues/122) + +### Bug fixes + +#### General bugfixes + + * Fixed a bug where zooming is broken if the map contains a polygon and you zoom to an area where it's not visible. [#47](https://github.com/Leaflet/Leaflet/issues/47) + * Fixed a bug where closed polylines would not appear on the map. + * Fixed a bug where marker that was added, removed and then added again would not appear on the map. [#66](https://github.com/Leaflet/Leaflet/issues/66) + * Fixed a bug where tile layer that was added, removed and then added again would not appear on the map. + * Fixed a bug where some tiles would not load when panning across the date line. [#97](https://github.com/Leaflet/Leaflet/issues/97) + * Fixed a bug where map div with `position: absolute` is reset to `relative`. [#100](https://github.com/Leaflet/Leaflet/issues/100) + * Fixed a bug that caused an error when trying to add a marker without shadow in its icon. + * Fixed a bug where popup content would not update on `setContent` call. [#94](https://github.com/Leaflet/Leaflet/issues/94) + * Fixed a bug where double click zoom wouldn't work if popup is opened on map click + * Fixed a bug with click propagation on popup close button. [#99](https://github.com/Leaflet/Leaflet/issues/99) + * Fixed inability to remove ImageOverlay layer. + +#### Browser bugfixes + + * Fixed a bug where paths would not appear in IE8. + * Fixed a bug where there were occasional slowdowns before zoom animation in WebKit. [#123](https://github.com/Leaflet/Leaflet/issues/123) + * Fixed incorrect zoom animation & popup styling in Opera 11.11. + * Fixed popup fade animation in Firefox and Opera. + * Fixed a bug where map isn't displayed in Firefox when there's an `img { max-width: 100% }` rule. + +#### Mobile browsers bugfixes + + * Fixed a bug that prevented panning on some Android 2.1 (and possibly older) devices. [#84](https://github.com/Leaflet/Leaflet/issues/84) + * Disabled zoom animation on Android by default because it's buggy on some devices (will be enabled back when it's stable enough). [#32](https://github.com/Leaflet/Leaflet/issues/32) + * Fixed a bug where map would occasionally break while multi-touch-zooming on iOS. [#32](https://github.com/Leaflet/Leaflet/issues/32) + * Fixed a bug that prevented panning/clicking on Android 3 tablets. [#121](https://github.com/Leaflet/Leaflet/issues/121) + * Fixed a bug that prevented panning/clicking on Opera Mobile. [#138](https://github.com/Leaflet/Leaflet/issues/138) + * Fixed potentional memory leak on WebKit when removing tiles, thanks to [@Scalar4eg](https://github.com/Scalar4eg). [#107](https://github.com/Leaflet/Leaflet/issues/107) + +## 0.1 (2011-05-13) + +Initial Leaflet release. diff --git a/www/manual_lib/leaflet/CONTRIBUTING.md b/www/manual_lib/leaflet/CONTRIBUTING.md new file mode 100644 index 000000000..052240d19 --- /dev/null +++ b/www/manual_lib/leaflet/CONTRIBUTING.md @@ -0,0 +1,155 @@ +Contributing to Leaflet +======================= + + 1. [Getting Involved](#getting-involved) + 2. [Reporting Bugs](#reporting-bugs) + 3. [Contributing Code](#contributing-code) + 4. [Improving Documentation](#improving-documentation) + +## Getting Involved + +Third-party patches are absolutely essential on our quest to create the best mapping library that will ever exist. +However, they're not the only way to get involved with the development of Leaflet. +You can help the project tremendously by discovering and [reporting bugs](#reporting-bugs), +[improving documentation](#improving-documentation), +helping others on the [Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) +and [GitHub issues](https://github.com/Leaflet/Leaflet/issues), +showing your support for your favorite feature suggestions on [Leaflet UserVoice page](http://leaflet.uservoice.com), +tweeting to [@LeafletJS](http://twitter.com/LeafletJS) +and spreading the word about Leaflet among your colleagues and friends. + +## Reporting Bugs + +Before reporting a bug on the project's [issues page](https://github.com/Leaflet/Leaflet/issues), +first make sure that your issue is caused by Leaflet, not your application code +(e.g. passing incorrect arguments to methods, etc.). +Second, search the already reported issues for similar cases, +and if it's already reported, just add any additional details in the comments. + +After you made sure that you've found a new Leaflet bug, +here are some tips for creating a helpful report that will make fixing it much easier and quicker: + + * Write a **descriptive, specific title**. Bad: *Problem with polylines*. Good: *Doing X in IE9 causes Z*. + * Include **browser, OS and Leaflet version** info in the description. + * Create a **simple test case** that demonstrates the bug (e.g. using [JSFiddle](http://jsfiddle.net/)). + * Check whether the bug can be reproduced in **other browsers**. + * Check if the bug occurs in the stable version, master, or both. + * *Bonus tip:* if the bug only appears in the master version but the stable version is fine, + use `git bisect` to find the exact commit that introduced the bug. + +If you just want some help with your project, +try asking [on the Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) instead. + +## Contributing Code + +### Considerations for Accepting Patches + +While we happily accept patches, we're also commited to keeping Leaflet simple, lightweight and blazingly fast. +So bugfixes, performance optimizations and small improvements that don't add a lot of code +are much more likely to get accepted quickly. + +Before sending a pull request with a new feature, first check if it's been discussed before already +(either on [GitHub issues](https://github.com/Leaflet/Leaflet/issues) +or [Leaflet UserVoice](http://leaflet.uservoice.com/)), +and then ask yourself two questions: + + 1. Are you sure that this new feature is important enough to justify its presense in the Leaflet core? + Or will it look better as a plugin in a separate repository? + 2. Is it written in a simple, concise way that doesn't add bulk to the codebase? + +If your feature or API improvement did get merged into master, +please consider submitting another pull request with the corresponding [documentation update](#improving-documentation). + +### Setting up the Build System + +To set up the Leaflet build system, install [Node](http://nodejs.org/), +then run the following commands in the project root: + +``` +npm install -g jake +npm install +``` + +You can build minified Leaflet by running `jake` (it will be built from source in the `dist` folder). +For a custom build with selected components, open `build/build.html` in the browser and follow the instructions from there. + +### Making Changes to Leaflet Source + +If you're not yet familiar with the way GitHub works (forking, pull requests, etc.), +be sure to check out the awesome [article about forking](https://help.github.com/articles/fork-a-repo) +on the GitHub Help website — it will get you started quickly. + +You should always write each batch of changes (feature, bugfix, etc.) in **its own topic branch**. +Please do not commit to the `master` branch, or your unrelated changes will go into the same pull request. + +You should also follow the code style and whitespace conventions of the original codebase. +In particular, use tabs for indentation and spaces for alignment. + +Before commiting your changes, run `jake lint` to catch any JS errors in the code and fix them. +If you add any new files to the Leaflet source, make sure to also add them to `build/deps.js` +so that the build system knows about them. + +Also, please make sure that you have [line endings configured properly](https://help.github.com/articles/dealing-with-line-endings) in Git! Otherwise the diff will show that all lines of a file were changed even if you touched only one. + +Happy coding! + +## Running the Tests + +To run the tests from the command line, +install [PhantomJS](http://phantomjs.org/) (and make sure it's in your `PATH`), +then run: + +``` +jake test +``` + +To run all the tests in actual browsers at the same time, you can do: + +``` +jake test --ff --chrome --safari --ie +``` + +To run the tests in a browser manually, open `spec/index.html`. + +## Code Coverage + +To generate a detailed report about test coverage (which helps tremendously when working on test improvements), run: + +``` +jake test --cov +``` + +After that, open `spec/coverage//index.html` in a browser to see the report. +From there you can click through folders/files to get details on their individual coverage. + +## Improving Documentation + +The code of the live Leaflet website that contains all documentation and examples is located in the `gh-pages` branch +and is automatically generated from a set of HTML and Markdown files by [Jekyll](https://github.com/mojombo/jekyll). + +The easiest way to make little improvements such as fixing typos without even leaving the browser +is by editing one of the files with the online GitHub editor: +browse the [gh-pages branch](https://github.com/Leaflet/Leaflet/tree/gh-pages), +choose a certain file for editing (e.g. `reference.html` for API reference), +click the Edit button, make changes and follow instructions from there. +Once it gets merged, the changes will immediately appear on the website. + +If you need to make edits in a local repository to see how it looks in the process, do the following: + + 1. [Install Ruby](http://www.ruby-lang.org/en/) if don't have it yet. + 2. Run `gem install jekyll`. + 3. Run `jekyll serve --watch` in the root `Leaflet` folder. + 4. Open `localhost:4000` in your browser. + +Now any file changes will be updated when you reload pages automatically. +After commiting the changes, just send a pull request. + +If you need to update documentation according to a new feature that only appeared in the master version (not stable one), +you need to make changes to `gh-pages-master` branch instead of `gh-pages`. +It will get merged into the latter when released as stable. + +## Thank You + +Not only are we grateful for any contributions, — helping Leaflet and its community actually makes you AWESOME. +Join [this approved list of awesome people](https://github.com/Leaflet/Leaflet/graphs/contributors) +and help us push the limits of what's possible with online maps! diff --git a/www/manual_lib/leaflet/Jakefile.js b/www/manual_lib/leaflet/Jakefile.js new file mode 100644 index 000000000..77be075b4 --- /dev/null +++ b/www/manual_lib/leaflet/Jakefile.js @@ -0,0 +1,48 @@ +/* +Leaflet building, testing and linting scripts. + +To use, install Node, then run the following commands in the project root: + + npm install -g jake + npm install + +To check the code for errors and build Leaflet from source, run "jake". +To run the tests, run "jake test". + +For a custom build, open build/build.html in the browser and follow the instructions. +*/ + +var build = require('./build/build.js'); + +function hint(msg, paths) { + return function () { + console.log(msg); + jake.exec('node node_modules/jshint/bin/jshint -c ' + paths, + {printStdout: true}, function () { + console.log('\tCheck passed.\n'); + complete(); + }); + } +} + +desc('Check Leaflet source for errors with JSHint'); +task('lint', {async: true}, hint('Checking for JS errors...', 'build/hintrc.js src')); + +desc('Check Leaflet specs source for errors with JSHint'); +task('lintspec', {async: true}, hint('Checking for specs JS errors...', 'spec/spec.hintrc.js spec/suites')); + +desc('Combine and compress Leaflet source files'); +task('build', {async: true}, function () { + build.build(complete); +}); + +desc('Run PhantomJS tests'); +task('test', ['lint', 'lintspec'], {async: true}, function () { + build.test(complete); +}); + +task('default', ['test', 'build']); + +jake.addListener('complete', function () { + process.exit(); +}); diff --git a/www/manual_lib/leaflet/LICENSE b/www/manual_lib/leaflet/LICENSE new file mode 100644 index 000000000..46cd121fe --- /dev/null +++ b/www/manual_lib/leaflet/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2010-2013, Vladimir Agafonkin +Copyright (c) 2010-2011, CloudMade +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/www/manual_lib/leaflet/PLUGIN-GUIDE.md b/www/manual_lib/leaflet/PLUGIN-GUIDE.md new file mode 100644 index 000000000..e9325e570 --- /dev/null +++ b/www/manual_lib/leaflet/PLUGIN-GUIDE.md @@ -0,0 +1,127 @@ +# Leaflet Plugin Authoring Guide + +One of the greatest things about Leaflet is its powerful plugin ecosystem. +The [Leaflet plugins page](http://leafletjs.com/plugins.html) lists dozens of awesome plugins, and more are being added every week. + +This guide lists a number of best practices for publishing a Leaflet plugin that meets the quality standards of Leaflet itself. + +1. [Presentation](#presentation) + - [Repository](#repository) + - [Name](#name) + - [Demo](#demo) + - [Readme](#readme) + - [License](#license) +2. [Code](#code) + - [File Structure](#file-structure) + - [Code Conventions](#code-conventions) + - [Plugin API](#plugin-api) + +## Presentation + +### Repository + +The best place to put your Leaflet plugin to is a separate [GitHub](http://github.com) repository. +If you create a collection of plugins for different uses, +don't put them in one repo — +it's usually easier to work with small, self-contained plugins in individual repositories. + +### Name + +Most existing plugins follow the convention of naming plugins (and repos) like this: `Leaflet.MyPluginName`. +You can use other forms (e.g. "leaflet-my-plugin-name"), +just make sure to include the word "Leaflet" in the name so that it's obvious that it's a Leaflet plugin. + +### Demo + +The most essential thing to do when publishing a plugin is to include a demo that showcases what the plugin does — +it's usually the first thing people will look for. + +The easiest way to put up a demo is using [GitHub Pages](http://pages.github.com/). +A good [starting point](https://help.github.com/articles/creating-project-pages-manually) is creating a `gh-pages` branch in your repo and adding an `index.html` page to it — +after pushing, it'll be published as `http://.github.io/`. + +### Readme + +The next thing you need to have is a descriptive `README.md` in the root of the repo (or a link to a website with a similar content). +At a minimum it should contain the following items: + +- name of the plugin +- a simple, concise description of what it does +- requirements + - Leaflet version + - other external dependencies (if any) + - browser / device compatibility +- links to demos +- instructions for including the plugin +- simple usage code example +- API reference (methods, options, events) + +### License + +Every open source repository should include a license. +If you don't know what open source license to choose for your code, +[MIT License](http://opensource.org/licenses/MIT) and [BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause) are both good choices. +You can either put it in the repo as a `LICENSE` file or just link to the license from the Readme. + +## Code + +### File Structure + +Keep the file structure clean and simple, +don't pile up lots of files in one place — +make it easy for a new person to find their way in your repo. + +A barebones repo for a simple plugin would look like this: + +``` +my-plugin.js +README.md +``` + +An example of a more sophisticated plugin file structure: + +``` +/src - JS source files +/dist - minified plugin JS, CSS, images +/spec - test files +/lib - any external libraries/plugins if necessary +/examples - HTML examples of plugin usage +README.md +LICENSE +package.json +``` + +### Code Conventions + +Everyone's tastes are different, but it's important to be consistent with whatever conventions you choose for your plugin. + +For a good starting point, check out [Airbnb JavaScript Guide](https://github.com/airbnb/javascript). +Leaflet follows pretty much the same conventions +except for using smart tabs (hard tabs for indentation, spaces for alignment) +and putting a space after the `function` keyword. + +### Plugin API + +Never expose global variables in your plugin.
+If you have a new class, put it directly in the `L` namespace (`L.MyPlugin`).
+If you inherit one of the existing classes, make it a sub-property (`L.TileLayer.Banana`).
+If you want to add new methods to existing Leaflet classes, you can do it like this: `L.Marker.include({myPlugin: …})`. + +Function, method and property names should be in `camelCase`.
+Class names should be in `CapitalizedCamelCase`. + +If you have a lot of arguments in your function, consider accepting an options object instead +(putting default values where possible so that users don't need specify all of them): + +```js +// bad +marker.myPlugin('bla', 'foo', null, {}, 5, 0); + + // good +marker.myPlugin('bla', { + optionOne: 'foo', + optionThree: 5 +}); +``` + +And most importantly, keep it simple. Leaflet is all about *simplicity*. diff --git a/www/manual_lib/leaflet/README.md b/www/manual_lib/leaflet/README.md new file mode 100644 index 000000000..220b74ecc --- /dev/null +++ b/www/manual_lib/leaflet/README.md @@ -0,0 +1,34 @@ +Leaflet + +Leaflet is an open source JavaScript library for **mobile-friendly interactive maps**. +It is developed by [Vladimir Agafonkin][] of [MapBox][] with a team of dedicated [contributors][]. +Weighing just about 30 KB of gzipped JS code, it has all the [features][] most developers ever need for online maps. + +Leaflet is designed with *simplicity*, *performance* and *usability* in mind. +It works efficiently across all major desktop and mobile platforms out of the box, +taking advantage of HTML5 and CSS3 on modern browsers while being accessible on older ones too. +It can be extended with a huge amount of [plugins][], +has a beautiful, easy to use and [well-documented][] API +and a simple, readable [source code][] that is a joy to [contribute][] to. + +For more info, docs and tutorials, check out the [official website][].
+For **Leaflet downloads** (including the built master version), check out the [download page][]. + +We're happy to meet new contributors. +If you want to **get involved** with Leaflet development, check out the [contribution guide][contribute]. +Let's make the best mapping library that will ever exist, +and push the limits of what's possible with online maps! + +[![Build Status](https://travis-ci.org/Leaflet/Leaflet.png?branch=master)](https://travis-ci.org/Leaflet/Leaflet) + + [Vladimir Agafonkin]: http://agafonkin.com/en + [contributors]: https://github.com/Leaflet/Leaflet/graphs/contributors + [features]: http://leafletjs.com/features.html + [plugins]: http://leafletjs.com/plugins.html + [well-documented]: http://leafletjs.com/reference.html "Leaflet API reference" + [source code]: https://github.com/Leaflet/Leaflet "Leaflet GitHub repository" + [hosted on GitHub]: http://github.com/Leaflet/Leaflet + [contribute]: https://github.com/Leaflet/Leaflet/blob/master/CONTRIBUTING.md "A guide to contributing to Leaflet" + [official website]: http://leafletjs.com + [download page]: http://leafletjs.com/download.html + [MapBox]: https://mapbox.com diff --git a/www/manual_lib/leaflet/bower.json b/www/manual_lib/leaflet/bower.json new file mode 100644 index 000000000..001fcf183 --- /dev/null +++ b/www/manual_lib/leaflet/bower.json @@ -0,0 +1,23 @@ +{ + "name": "leaflet", + "version": "0.7.7", + "description": "JavaScript library for mobile-friendly interactive maps", + "main": [ + "dist/leaflet.css", + "dist/leaflet-src.js", + "dist/images/layers-2x.png", + "dist/images/layers.png", + "dist/images/marker-icon-2x.png", + "dist/images/marker-icon.png", + "dist/images/marker-shadow.png" + ], + "ignore": [ + ".*", + "CHANGELOG.json", + "FAQ.md", + "debug", + "spec", + "src", + "build" + ] +} diff --git a/www/manual_lib/leaflet/component.json b/www/manual_lib/leaflet/component.json new file mode 100644 index 000000000..2bef5e904 --- /dev/null +++ b/www/manual_lib/leaflet/component.json @@ -0,0 +1,20 @@ +{ + "name": "leaflet", + "version": "0.7.7", + "description": "JavaScript library for mobile-friendly interactive maps", + "scripts": [ + "dist/leaflet.js", + "dist/leaflet-src.js" + ], + "images": [ + "dist/images/layers-2x.png", + "dist/images/layers.png", + "dist/images/marker-icon-2x.png", + "dist/images/marker-icon.png", + "dist/images/marker-shadow.png" + ], + "styles": [ + "dist/leaflet.css" + ], + "main": "dist/leaflet-src.js" +} diff --git a/www/manual_lib/leaflet/dist/images/layers-2x.png b/www/manual_lib/leaflet/dist/images/layers-2x.png new file mode 100644 index 000000000..a2cf7f9ef Binary files /dev/null and b/www/manual_lib/leaflet/dist/images/layers-2x.png differ diff --git a/www/manual_lib/leaflet/dist/images/layers.png b/www/manual_lib/leaflet/dist/images/layers.png new file mode 100644 index 000000000..bca0a0e42 Binary files /dev/null and b/www/manual_lib/leaflet/dist/images/layers.png differ diff --git a/www/manual_lib/leaflet/dist/images/marker-icon-2x.png b/www/manual_lib/leaflet/dist/images/marker-icon-2x.png new file mode 100644 index 000000000..0015b6495 Binary files /dev/null and b/www/manual_lib/leaflet/dist/images/marker-icon-2x.png differ diff --git a/www/manual_lib/leaflet/dist/images/marker-icon.png b/www/manual_lib/leaflet/dist/images/marker-icon.png new file mode 100644 index 000000000..e2e9f757f Binary files /dev/null and b/www/manual_lib/leaflet/dist/images/marker-icon.png differ diff --git a/www/manual_lib/leaflet/dist/images/marker-shadow.png b/www/manual_lib/leaflet/dist/images/marker-shadow.png new file mode 100644 index 000000000..d1e773c71 Binary files /dev/null and b/www/manual_lib/leaflet/dist/images/marker-shadow.png differ diff --git a/www/manual_lib/leaflet/dist/leaflet-src.js b/www/manual_lib/leaflet/dist/leaflet-src.js new file mode 100644 index 000000000..6c754ca3e --- /dev/null +++ b/www/manual_lib/leaflet/dist/leaflet-src.js @@ -0,0 +1,9183 @@ +/* + Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com + (c) 2010-2013, Vladimir Agafonkin + (c) 2010-2011, CloudMade +*/ +(function (window, document, undefined) { +var oldL = window.L, + L = {}; + +L.version = '0.7.7'; + +// define Leaflet for Node module pattern loaders, including Browserify +if (typeof module === 'object' && typeof module.exports === 'object') { + module.exports = L; + +// define Leaflet as an AMD module +} else if (typeof define === 'function' && define.amd) { + define(L); +} + +// define Leaflet as a global L variable, saving the original L to restore later if needed + +L.noConflict = function () { + window.L = oldL; + return this; +}; + +window.L = L; + + +/* + * L.Util contains various utility functions used throughout Leaflet code. + */ + +L.Util = { + extend: function (dest) { // (Object[, Object, ...]) -> + var sources = Array.prototype.slice.call(arguments, 1), + i, j, len, src; + + for (j = 0, len = sources.length; j < len; j++) { + src = sources[j] || {}; + for (i in src) { + if (src.hasOwnProperty(i)) { + dest[i] = src[i]; + } + } + } + return dest; + }, + + bind: function (fn, obj) { // (Function, Object) -> Function + var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null; + return function () { + return fn.apply(obj, args || arguments); + }; + }, + + stamp: (function () { + var lastId = 0, + key = '_leaflet_id'; + return function (obj) { + obj[key] = obj[key] || ++lastId; + return obj[key]; + }; + }()), + + invokeEach: function (obj, method, context) { + var i, args; + + if (typeof obj === 'object') { + args = Array.prototype.slice.call(arguments, 3); + + for (i in obj) { + method.apply(context, [i, obj[i]].concat(args)); + } + return true; + } + + return false; + }, + + limitExecByInterval: function (fn, time, context) { + var lock, execOnUnlock; + + return function wrapperFn() { + var args = arguments; + + if (lock) { + execOnUnlock = true; + return; + } + + lock = true; + + setTimeout(function () { + lock = false; + + if (execOnUnlock) { + wrapperFn.apply(context, args); + execOnUnlock = false; + } + }, time); + + fn.apply(context, args); + }; + }, + + falseFn: function () { + return false; + }, + + formatNum: function (num, digits) { + var pow = Math.pow(10, digits || 5); + return Math.round(num * pow) / pow; + }, + + trim: function (str) { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); + }, + + splitWords: function (str) { + return L.Util.trim(str).split(/\s+/); + }, + + setOptions: function (obj, options) { + obj.options = L.extend({}, obj.options, options); + return obj.options; + }, + + getParamString: function (obj, existingUrl, uppercase) { + var params = []; + for (var i in obj) { + params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i])); + } + return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&'); + }, + template: function (str, data) { + return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) { + var value = data[key]; + if (value === undefined) { + throw new Error('No value provided for variable ' + str); + } else if (typeof value === 'function') { + value = value(data); + } + return value; + }); + }, + + isArray: Array.isArray || function (obj) { + return (Object.prototype.toString.call(obj) === '[object Array]'); + }, + + emptyImageUrl: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' +}; + +(function () { + + // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + + function getPrefixed(name) { + var i, fn, + prefixes = ['webkit', 'moz', 'o', 'ms']; + + for (i = 0; i < prefixes.length && !fn; i++) { + fn = window[prefixes[i] + name]; + } + + return fn; + } + + var lastTime = 0; + + function timeoutDefer(fn) { + var time = +new Date(), + timeToCall = Math.max(0, 16 - (time - lastTime)); + + lastTime = time + timeToCall; + return window.setTimeout(fn, timeToCall); + } + + var requestFn = window.requestAnimationFrame || + getPrefixed('RequestAnimationFrame') || timeoutDefer; + + var cancelFn = window.cancelAnimationFrame || + getPrefixed('CancelAnimationFrame') || + getPrefixed('CancelRequestAnimationFrame') || + function (id) { window.clearTimeout(id); }; + + + L.Util.requestAnimFrame = function (fn, context, immediate, element) { + fn = L.bind(fn, context); + + if (immediate && requestFn === timeoutDefer) { + fn(); + } else { + return requestFn.call(window, fn, element); + } + }; + + L.Util.cancelAnimFrame = function (id) { + if (id) { + cancelFn.call(window, id); + } + }; + +}()); + +// shortcuts for most used utility functions +L.extend = L.Util.extend; +L.bind = L.Util.bind; +L.stamp = L.Util.stamp; +L.setOptions = L.Util.setOptions; + + +/* + * L.Class powers the OOP facilities of the library. + * Thanks to John Resig and Dean Edwards for inspiration! + */ + +L.Class = function () {}; + +L.Class.extend = function (props) { + + // extended class with the new prototype + var NewClass = function () { + + // call the constructor + if (this.initialize) { + this.initialize.apply(this, arguments); + } + + // call all constructor hooks + if (this._initHooks) { + this.callInitHooks(); + } + }; + + // instantiate class without calling constructor + var F = function () {}; + F.prototype = this.prototype; + + var proto = new F(); + proto.constructor = NewClass; + + NewClass.prototype = proto; + + //inherit parent's statics + for (var i in this) { + if (this.hasOwnProperty(i) && i !== 'prototype') { + NewClass[i] = this[i]; + } + } + + // mix static properties into the class + if (props.statics) { + L.extend(NewClass, props.statics); + delete props.statics; + } + + // mix includes into the prototype + if (props.includes) { + L.Util.extend.apply(null, [proto].concat(props.includes)); + delete props.includes; + } + + // merge options + if (props.options && proto.options) { + props.options = L.extend({}, proto.options, props.options); + } + + // mix given properties into the prototype + L.extend(proto, props); + + proto._initHooks = []; + + var parent = this; + // jshint camelcase: false + NewClass.__super__ = parent.prototype; + + // add method for calling all hooks + proto.callInitHooks = function () { + + if (this._initHooksCalled) { return; } + + if (parent.prototype.callInitHooks) { + parent.prototype.callInitHooks.call(this); + } + + this._initHooksCalled = true; + + for (var i = 0, len = proto._initHooks.length; i < len; i++) { + proto._initHooks[i].call(this); + } + }; + + return NewClass; +}; + + +// method for adding properties to prototype +L.Class.include = function (props) { + L.extend(this.prototype, props); +}; + +// merge new default options to the Class +L.Class.mergeOptions = function (options) { + L.extend(this.prototype.options, options); +}; + +// add a constructor hook +L.Class.addInitHook = function (fn) { // (Function) || (String, args...) + var args = Array.prototype.slice.call(arguments, 1); + + var init = typeof fn === 'function' ? fn : function () { + this[fn].apply(this, args); + }; + + this.prototype._initHooks = this.prototype._initHooks || []; + this.prototype._initHooks.push(init); +}; + + +/* + * L.Mixin.Events is used to add custom events functionality to Leaflet classes. + */ + +var eventsKey = '_leaflet_events'; + +L.Mixin = {}; + +L.Mixin.Events = { + + addEventListener: function (types, fn, context) { // (String, Function[, Object]) or (Object[, Object]) + + // types can be a map of types/handlers + if (L.Util.invokeEach(types, this.addEventListener, this, fn, context)) { return this; } + + var events = this[eventsKey] = this[eventsKey] || {}, + contextId = context && context !== this && L.stamp(context), + i, len, event, type, indexKey, indexLenKey, typeIndex; + + // types can be a string of space-separated words + types = L.Util.splitWords(types); + + for (i = 0, len = types.length; i < len; i++) { + event = { + action: fn, + context: context || this + }; + type = types[i]; + + if (contextId) { + // store listeners of a particular context in a separate hash (if it has an id) + // gives a major performance boost when removing thousands of map layers + + indexKey = type + '_idx'; + indexLenKey = indexKey + '_len'; + + typeIndex = events[indexKey] = events[indexKey] || {}; + + if (!typeIndex[contextId]) { + typeIndex[contextId] = []; + + // keep track of the number of keys in the index to quickly check if it's empty + events[indexLenKey] = (events[indexLenKey] || 0) + 1; + } + + typeIndex[contextId].push(event); + + + } else { + events[type] = events[type] || []; + events[type].push(event); + } + } + + return this; + }, + + hasEventListeners: function (type) { // (String) -> Boolean + var events = this[eventsKey]; + return !!events && ((type in events && events[type].length > 0) || + (type + '_idx' in events && events[type + '_idx_len'] > 0)); + }, + + removeEventListener: function (types, fn, context) { // ([String, Function, Object]) or (Object[, Object]) + + if (!this[eventsKey]) { + return this; + } + + if (!types) { + return this.clearAllEventListeners(); + } + + if (L.Util.invokeEach(types, this.removeEventListener, this, fn, context)) { return this; } + + var events = this[eventsKey], + contextId = context && context !== this && L.stamp(context), + i, len, type, listeners, j, indexKey, indexLenKey, typeIndex, removed; + + types = L.Util.splitWords(types); + + for (i = 0, len = types.length; i < len; i++) { + type = types[i]; + indexKey = type + '_idx'; + indexLenKey = indexKey + '_len'; + + typeIndex = events[indexKey]; + + if (!fn) { + // clear all listeners for a type if function isn't specified + delete events[type]; + delete events[indexKey]; + delete events[indexLenKey]; + + } else { + listeners = contextId && typeIndex ? typeIndex[contextId] : events[type]; + + if (listeners) { + for (j = listeners.length - 1; j >= 0; j--) { + if ((listeners[j].action === fn) && (!context || (listeners[j].context === context))) { + removed = listeners.splice(j, 1); + // set the old action to a no-op, because it is possible + // that the listener is being iterated over as part of a dispatch + removed[0].action = L.Util.falseFn; + } + } + + if (context && typeIndex && (listeners.length === 0)) { + delete typeIndex[contextId]; + events[indexLenKey]--; + } + } + } + } + + return this; + }, + + clearAllEventListeners: function () { + delete this[eventsKey]; + return this; + }, + + fireEvent: function (type, data) { // (String[, Object]) + if (!this.hasEventListeners(type)) { + return this; + } + + var event = L.Util.extend({}, data, { type: type, target: this }); + + var events = this[eventsKey], + listeners, i, len, typeIndex, contextId; + + if (events[type]) { + // make sure adding/removing listeners inside other listeners won't cause infinite loop + listeners = events[type].slice(); + + for (i = 0, len = listeners.length; i < len; i++) { + listeners[i].action.call(listeners[i].context, event); + } + } + + // fire event for the context-indexed listeners as well + typeIndex = events[type + '_idx']; + + for (contextId in typeIndex) { + listeners = typeIndex[contextId].slice(); + + if (listeners) { + for (i = 0, len = listeners.length; i < len; i++) { + listeners[i].action.call(listeners[i].context, event); + } + } + } + + return this; + }, + + addOneTimeEventListener: function (types, fn, context) { + + if (L.Util.invokeEach(types, this.addOneTimeEventListener, this, fn, context)) { return this; } + + var handler = L.bind(function () { + this + .removeEventListener(types, fn, context) + .removeEventListener(types, handler, context); + }, this); + + return this + .addEventListener(types, fn, context) + .addEventListener(types, handler, context); + } +}; + +L.Mixin.Events.on = L.Mixin.Events.addEventListener; +L.Mixin.Events.off = L.Mixin.Events.removeEventListener; +L.Mixin.Events.once = L.Mixin.Events.addOneTimeEventListener; +L.Mixin.Events.fire = L.Mixin.Events.fireEvent; + + +/* + * L.Browser handles different browser and feature detections for internal Leaflet use. + */ + +(function () { + + var ie = 'ActiveXObject' in window, + ielt9 = ie && !document.addEventListener, + + // terrible browser detection to work around Safari / iOS / Android browser bugs + ua = navigator.userAgent.toLowerCase(), + webkit = ua.indexOf('webkit') !== -1, + chrome = ua.indexOf('chrome') !== -1, + phantomjs = ua.indexOf('phantom') !== -1, + android = ua.indexOf('android') !== -1, + android23 = ua.search('android [23]') !== -1, + gecko = ua.indexOf('gecko') !== -1, + + mobile = typeof orientation !== undefined + '', + msPointer = !window.PointerEvent && window.MSPointerEvent, + pointer = (window.PointerEvent && window.navigator.pointerEnabled) || + msPointer, + retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) || + ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') && + window.matchMedia('(min-resolution:144dpi)').matches), + + doc = document.documentElement, + ie3d = ie && ('transition' in doc.style), + webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23, + gecko3d = 'MozPerspective' in doc.style, + opera3d = 'OTransition' in doc.style, + any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs; + + var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch)); + + L.Browser = { + ie: ie, + ielt9: ielt9, + webkit: webkit, + gecko: gecko && !webkit && !window.opera && !ie, + + android: android, + android23: android23, + + chrome: chrome, + + ie3d: ie3d, + webkit3d: webkit3d, + gecko3d: gecko3d, + opera3d: opera3d, + any3d: any3d, + + mobile: mobile, + mobileWebkit: mobile && webkit, + mobileWebkit3d: mobile && webkit3d, + mobileOpera: mobile && window.opera, + + touch: touch, + msPointer: msPointer, + pointer: pointer, + + retina: retina + }; + +}()); + + +/* + * L.Point represents a point with x and y coordinates. + */ + +L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) { + this.x = (round ? Math.round(x) : x); + this.y = (round ? Math.round(y) : y); +}; + +L.Point.prototype = { + + clone: function () { + return new L.Point(this.x, this.y); + }, + + // non-destructive, returns a new point + add: function (point) { + return this.clone()._add(L.point(point)); + }, + + // destructive, used directly for performance in situations where it's safe to modify existing point + _add: function (point) { + this.x += point.x; + this.y += point.y; + return this; + }, + + subtract: function (point) { + return this.clone()._subtract(L.point(point)); + }, + + _subtract: function (point) { + this.x -= point.x; + this.y -= point.y; + return this; + }, + + divideBy: function (num) { + return this.clone()._divideBy(num); + }, + + _divideBy: function (num) { + this.x /= num; + this.y /= num; + return this; + }, + + multiplyBy: function (num) { + return this.clone()._multiplyBy(num); + }, + + _multiplyBy: function (num) { + this.x *= num; + this.y *= num; + return this; + }, + + round: function () { + return this.clone()._round(); + }, + + _round: function () { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + }, + + floor: function () { + return this.clone()._floor(); + }, + + _floor: function () { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this; + }, + + distanceTo: function (point) { + point = L.point(point); + + var x = point.x - this.x, + y = point.y - this.y; + + return Math.sqrt(x * x + y * y); + }, + + equals: function (point) { + point = L.point(point); + + return point.x === this.x && + point.y === this.y; + }, + + contains: function (point) { + point = L.point(point); + + return Math.abs(point.x) <= Math.abs(this.x) && + Math.abs(point.y) <= Math.abs(this.y); + }, + + toString: function () { + return 'Point(' + + L.Util.formatNum(this.x) + ', ' + + L.Util.formatNum(this.y) + ')'; + } +}; + +L.point = function (x, y, round) { + if (x instanceof L.Point) { + return x; + } + if (L.Util.isArray(x)) { + return new L.Point(x[0], x[1]); + } + if (x === undefined || x === null) { + return x; + } + return new L.Point(x, y, round); +}; + + +/* + * L.Bounds represents a rectangular area on the screen in pixel coordinates. + */ + +L.Bounds = function (a, b) { //(Point, Point) or Point[] + if (!a) { return; } + + var points = b ? [a, b] : a; + + for (var i = 0, len = points.length; i < len; i++) { + this.extend(points[i]); + } +}; + +L.Bounds.prototype = { + // extend the bounds to contain the given point + extend: function (point) { // (Point) + point = L.point(point); + + if (!this.min && !this.max) { + this.min = point.clone(); + this.max = point.clone(); + } else { + this.min.x = Math.min(point.x, this.min.x); + this.max.x = Math.max(point.x, this.max.x); + this.min.y = Math.min(point.y, this.min.y); + this.max.y = Math.max(point.y, this.max.y); + } + return this; + }, + + getCenter: function (round) { // (Boolean) -> Point + return new L.Point( + (this.min.x + this.max.x) / 2, + (this.min.y + this.max.y) / 2, round); + }, + + getBottomLeft: function () { // -> Point + return new L.Point(this.min.x, this.max.y); + }, + + getTopRight: function () { // -> Point + return new L.Point(this.max.x, this.min.y); + }, + + getSize: function () { + return this.max.subtract(this.min); + }, + + contains: function (obj) { // (Bounds) or (Point) -> Boolean + var min, max; + + if (typeof obj[0] === 'number' || obj instanceof L.Point) { + obj = L.point(obj); + } else { + obj = L.bounds(obj); + } + + if (obj instanceof L.Bounds) { + min = obj.min; + max = obj.max; + } else { + min = max = obj; + } + + return (min.x >= this.min.x) && + (max.x <= this.max.x) && + (min.y >= this.min.y) && + (max.y <= this.max.y); + }, + + intersects: function (bounds) { // (Bounds) -> Boolean + bounds = L.bounds(bounds); + + var min = this.min, + max = this.max, + min2 = bounds.min, + max2 = bounds.max, + xIntersects = (max2.x >= min.x) && (min2.x <= max.x), + yIntersects = (max2.y >= min.y) && (min2.y <= max.y); + + return xIntersects && yIntersects; + }, + + isValid: function () { + return !!(this.min && this.max); + } +}; + +L.bounds = function (a, b) { // (Bounds) or (Point, Point) or (Point[]) + if (!a || a instanceof L.Bounds) { + return a; + } + return new L.Bounds(a, b); +}; + + +/* + * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix. + */ + +L.Transformation = function (a, b, c, d) { + this._a = a; + this._b = b; + this._c = c; + this._d = d; +}; + +L.Transformation.prototype = { + transform: function (point, scale) { // (Point, Number) -> Point + return this._transform(point.clone(), scale); + }, + + // destructive transform (faster) + _transform: function (point, scale) { + scale = scale || 1; + point.x = scale * (this._a * point.x + this._b); + point.y = scale * (this._c * point.y + this._d); + return point; + }, + + untransform: function (point, scale) { + scale = scale || 1; + return new L.Point( + (point.x / scale - this._b) / this._a, + (point.y / scale - this._d) / this._c); + } +}; + + +/* + * L.DomUtil contains various utility functions for working with DOM. + */ + +L.DomUtil = { + get: function (id) { + return (typeof id === 'string' ? document.getElementById(id) : id); + }, + + getStyle: function (el, style) { + + var value = el.style[style]; + + if (!value && el.currentStyle) { + value = el.currentStyle[style]; + } + + if ((!value || value === 'auto') && document.defaultView) { + var css = document.defaultView.getComputedStyle(el, null); + value = css ? css[style] : null; + } + + return value === 'auto' ? null : value; + }, + + getViewportOffset: function (element) { + + var top = 0, + left = 0, + el = element, + docBody = document.body, + docEl = document.documentElement, + pos; + + do { + top += el.offsetTop || 0; + left += el.offsetLeft || 0; + + //add borders + top += parseInt(L.DomUtil.getStyle(el, 'borderTopWidth'), 10) || 0; + left += parseInt(L.DomUtil.getStyle(el, 'borderLeftWidth'), 10) || 0; + + pos = L.DomUtil.getStyle(el, 'position'); + + if (el.offsetParent === docBody && pos === 'absolute') { break; } + + if (pos === 'fixed') { + top += docBody.scrollTop || docEl.scrollTop || 0; + left += docBody.scrollLeft || docEl.scrollLeft || 0; + break; + } + + if (pos === 'relative' && !el.offsetLeft) { + var width = L.DomUtil.getStyle(el, 'width'), + maxWidth = L.DomUtil.getStyle(el, 'max-width'), + r = el.getBoundingClientRect(); + + if (width !== 'none' || maxWidth !== 'none') { + left += r.left + el.clientLeft; + } + + //calculate full y offset since we're breaking out of the loop + top += r.top + (docBody.scrollTop || docEl.scrollTop || 0); + + break; + } + + el = el.offsetParent; + + } while (el); + + el = element; + + do { + if (el === docBody) { break; } + + top -= el.scrollTop || 0; + left -= el.scrollLeft || 0; + + el = el.parentNode; + } while (el); + + return new L.Point(left, top); + }, + + documentIsLtr: function () { + if (!L.DomUtil._docIsLtrCached) { + L.DomUtil._docIsLtrCached = true; + L.DomUtil._docIsLtr = L.DomUtil.getStyle(document.body, 'direction') === 'ltr'; + } + return L.DomUtil._docIsLtr; + }, + + create: function (tagName, className, container) { + + var el = document.createElement(tagName); + el.className = className; + + if (container) { + container.appendChild(el); + } + + return el; + }, + + hasClass: function (el, name) { + if (el.classList !== undefined) { + return el.classList.contains(name); + } + var className = L.DomUtil._getClass(el); + return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className); + }, + + addClass: function (el, name) { + if (el.classList !== undefined) { + var classes = L.Util.splitWords(name); + for (var i = 0, len = classes.length; i < len; i++) { + el.classList.add(classes[i]); + } + } else if (!L.DomUtil.hasClass(el, name)) { + var className = L.DomUtil._getClass(el); + L.DomUtil._setClass(el, (className ? className + ' ' : '') + name); + } + }, + + removeClass: function (el, name) { + if (el.classList !== undefined) { + el.classList.remove(name); + } else { + L.DomUtil._setClass(el, L.Util.trim((' ' + L.DomUtil._getClass(el) + ' ').replace(' ' + name + ' ', ' '))); + } + }, + + _setClass: function (el, name) { + if (el.className.baseVal === undefined) { + el.className = name; + } else { + // in case of SVG element + el.className.baseVal = name; + } + }, + + _getClass: function (el) { + return el.className.baseVal === undefined ? el.className : el.className.baseVal; + }, + + setOpacity: function (el, value) { + + if ('opacity' in el.style) { + el.style.opacity = value; + + } else if ('filter' in el.style) { + + var filter = false, + filterName = 'DXImageTransform.Microsoft.Alpha'; + + // filters collection throws an error if we try to retrieve a filter that doesn't exist + try { + filter = el.filters.item(filterName); + } catch (e) { + // don't set opacity to 1 if we haven't already set an opacity, + // it isn't needed and breaks transparent pngs. + if (value === 1) { return; } + } + + value = Math.round(value * 100); + + if (filter) { + filter.Enabled = (value !== 100); + filter.Opacity = value; + } else { + el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')'; + } + } + }, + + testProp: function (props) { + + var style = document.documentElement.style; + + for (var i = 0; i < props.length; i++) { + if (props[i] in style) { + return props[i]; + } + } + return false; + }, + + getTranslateString: function (point) { + // on WebKit browsers (Chrome/Safari/iOS Safari/Android) using translate3d instead of translate + // makes animation smoother as it ensures HW accel is used. Firefox 13 doesn't care + // (same speed either way), Opera 12 doesn't support translate3d + + var is3d = L.Browser.webkit3d, + open = 'translate' + (is3d ? '3d' : '') + '(', + close = (is3d ? ',0' : '') + ')'; + + return open + point.x + 'px,' + point.y + 'px' + close; + }, + + getScaleString: function (scale, origin) { + + var preTranslateStr = L.DomUtil.getTranslateString(origin.add(origin.multiplyBy(-1 * scale))), + scaleStr = ' scale(' + scale + ') '; + + return preTranslateStr + scaleStr; + }, + + setPosition: function (el, point, disable3D) { // (HTMLElement, Point[, Boolean]) + + // jshint camelcase: false + el._leaflet_pos = point; + + if (!disable3D && L.Browser.any3d) { + el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point); + } else { + el.style.left = point.x + 'px'; + el.style.top = point.y + 'px'; + } + }, + + getPosition: function (el) { + // this method is only used for elements previously positioned using setPosition, + // so it's safe to cache the position for performance + + // jshint camelcase: false + return el._leaflet_pos; + } +}; + + +// prefix style property names + +L.DomUtil.TRANSFORM = L.DomUtil.testProp( + ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']); + +// webkitTransition comes first because some browser versions that drop vendor prefix don't do +// the same for the transitionend event, in particular the Android 4.1 stock browser + +L.DomUtil.TRANSITION = L.DomUtil.testProp( + ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']); + +L.DomUtil.TRANSITION_END = + L.DomUtil.TRANSITION === 'webkitTransition' || L.DomUtil.TRANSITION === 'OTransition' ? + L.DomUtil.TRANSITION + 'End' : 'transitionend'; + +(function () { + if ('onselectstart' in document) { + L.extend(L.DomUtil, { + disableTextSelection: function () { + L.DomEvent.on(window, 'selectstart', L.DomEvent.preventDefault); + }, + + enableTextSelection: function () { + L.DomEvent.off(window, 'selectstart', L.DomEvent.preventDefault); + } + }); + } else { + var userSelectProperty = L.DomUtil.testProp( + ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']); + + L.extend(L.DomUtil, { + disableTextSelection: function () { + if (userSelectProperty) { + var style = document.documentElement.style; + this._userSelect = style[userSelectProperty]; + style[userSelectProperty] = 'none'; + } + }, + + enableTextSelection: function () { + if (userSelectProperty) { + document.documentElement.style[userSelectProperty] = this._userSelect; + delete this._userSelect; + } + } + }); + } + + L.extend(L.DomUtil, { + disableImageDrag: function () { + L.DomEvent.on(window, 'dragstart', L.DomEvent.preventDefault); + }, + + enableImageDrag: function () { + L.DomEvent.off(window, 'dragstart', L.DomEvent.preventDefault); + } + }); +})(); + + +/* + * L.LatLng represents a geographical point with latitude and longitude coordinates. + */ + +L.LatLng = function (lat, lng, alt) { // (Number, Number, Number) + lat = parseFloat(lat); + lng = parseFloat(lng); + + if (isNaN(lat) || isNaN(lng)) { + throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')'); + } + + this.lat = lat; + this.lng = lng; + + if (alt !== undefined) { + this.alt = parseFloat(alt); + } +}; + +L.extend(L.LatLng, { + DEG_TO_RAD: Math.PI / 180, + RAD_TO_DEG: 180 / Math.PI, + MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check +}); + +L.LatLng.prototype = { + equals: function (obj) { // (LatLng) -> Boolean + if (!obj) { return false; } + + obj = L.latLng(obj); + + var margin = Math.max( + Math.abs(this.lat - obj.lat), + Math.abs(this.lng - obj.lng)); + + return margin <= L.LatLng.MAX_MARGIN; + }, + + toString: function (precision) { // (Number) -> String + return 'LatLng(' + + L.Util.formatNum(this.lat, precision) + ', ' + + L.Util.formatNum(this.lng, precision) + ')'; + }, + + // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula + // TODO move to projection code, LatLng shouldn't know about Earth + distanceTo: function (other) { // (LatLng) -> Number + other = L.latLng(other); + + var R = 6378137, // earth radius in meters + d2r = L.LatLng.DEG_TO_RAD, + dLat = (other.lat - this.lat) * d2r, + dLon = (other.lng - this.lng) * d2r, + lat1 = this.lat * d2r, + lat2 = other.lat * d2r, + sin1 = Math.sin(dLat / 2), + sin2 = Math.sin(dLon / 2); + + var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2); + + return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + }, + + wrap: function (a, b) { // (Number, Number) -> LatLng + var lng = this.lng; + + a = a || -180; + b = b || 180; + + lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a); + + return new L.LatLng(this.lat, lng); + } +}; + +L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number) + if (a instanceof L.LatLng) { + return a; + } + if (L.Util.isArray(a)) { + if (typeof a[0] === 'number' || typeof a[0] === 'string') { + return new L.LatLng(a[0], a[1], a[2]); + } else { + return null; + } + } + if (a === undefined || a === null) { + return a; + } + if (typeof a === 'object' && 'lat' in a) { + return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon); + } + if (b === undefined) { + return null; + } + return new L.LatLng(a, b); +}; + + + +/* + * L.LatLngBounds represents a rectangular area on the map in geographical coordinates. + */ + +L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[]) + if (!southWest) { return; } + + var latlngs = northEast ? [southWest, northEast] : southWest; + + for (var i = 0, len = latlngs.length; i < len; i++) { + this.extend(latlngs[i]); + } +}; + +L.LatLngBounds.prototype = { + // extend the bounds to contain the given point or bounds + extend: function (obj) { // (LatLng) or (LatLngBounds) + if (!obj) { return this; } + + var latLng = L.latLng(obj); + if (latLng !== null) { + obj = latLng; + } else { + obj = L.latLngBounds(obj); + } + + if (obj instanceof L.LatLng) { + if (!this._southWest && !this._northEast) { + this._southWest = new L.LatLng(obj.lat, obj.lng); + this._northEast = new L.LatLng(obj.lat, obj.lng); + } else { + this._southWest.lat = Math.min(obj.lat, this._southWest.lat); + this._southWest.lng = Math.min(obj.lng, this._southWest.lng); + + this._northEast.lat = Math.max(obj.lat, this._northEast.lat); + this._northEast.lng = Math.max(obj.lng, this._northEast.lng); + } + } else if (obj instanceof L.LatLngBounds) { + this.extend(obj._southWest); + this.extend(obj._northEast); + } + return this; + }, + + // extend the bounds by a percentage + pad: function (bufferRatio) { // (Number) -> LatLngBounds + var sw = this._southWest, + ne = this._northEast, + heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio, + widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio; + + return new L.LatLngBounds( + new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer), + new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer)); + }, + + getCenter: function () { // -> LatLng + return new L.LatLng( + (this._southWest.lat + this._northEast.lat) / 2, + (this._southWest.lng + this._northEast.lng) / 2); + }, + + getSouthWest: function () { + return this._southWest; + }, + + getNorthEast: function () { + return this._northEast; + }, + + getNorthWest: function () { + return new L.LatLng(this.getNorth(), this.getWest()); + }, + + getSouthEast: function () { + return new L.LatLng(this.getSouth(), this.getEast()); + }, + + getWest: function () { + return this._southWest.lng; + }, + + getSouth: function () { + return this._southWest.lat; + }, + + getEast: function () { + return this._northEast.lng; + }, + + getNorth: function () { + return this._northEast.lat; + }, + + contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean + if (typeof obj[0] === 'number' || obj instanceof L.LatLng) { + obj = L.latLng(obj); + } else { + obj = L.latLngBounds(obj); + } + + var sw = this._southWest, + ne = this._northEast, + sw2, ne2; + + if (obj instanceof L.LatLngBounds) { + sw2 = obj.getSouthWest(); + ne2 = obj.getNorthEast(); + } else { + sw2 = ne2 = obj; + } + + return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) && + (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng); + }, + + intersects: function (bounds) { // (LatLngBounds) + bounds = L.latLngBounds(bounds); + + var sw = this._southWest, + ne = this._northEast, + sw2 = bounds.getSouthWest(), + ne2 = bounds.getNorthEast(), + + latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat), + lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng); + + return latIntersects && lngIntersects; + }, + + toBBoxString: function () { + return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(','); + }, + + equals: function (bounds) { // (LatLngBounds) + if (!bounds) { return false; } + + bounds = L.latLngBounds(bounds); + + return this._southWest.equals(bounds.getSouthWest()) && + this._northEast.equals(bounds.getNorthEast()); + }, + + isValid: function () { + return !!(this._southWest && this._northEast); + } +}; + +//TODO International date line? + +L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng) + if (!a || a instanceof L.LatLngBounds) { + return a; + } + return new L.LatLngBounds(a, b); +}; + + +/* + * L.Projection contains various geographical projections used by CRS classes. + */ + +L.Projection = {}; + + +/* + * Spherical Mercator is the most popular map projection, used by EPSG:3857 CRS used by default. + */ + +L.Projection.SphericalMercator = { + MAX_LATITUDE: 85.0511287798, + + project: function (latlng) { // (LatLng) -> Point + var d = L.LatLng.DEG_TO_RAD, + max = this.MAX_LATITUDE, + lat = Math.max(Math.min(max, latlng.lat), -max), + x = latlng.lng * d, + y = lat * d; + + y = Math.log(Math.tan((Math.PI / 4) + (y / 2))); + + return new L.Point(x, y); + }, + + unproject: function (point) { // (Point, Boolean) -> LatLng + var d = L.LatLng.RAD_TO_DEG, + lng = point.x * d, + lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d; + + return new L.LatLng(lat, lng); + } +}; + + +/* + * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple. + */ + +L.Projection.LonLat = { + project: function (latlng) { + return new L.Point(latlng.lng, latlng.lat); + }, + + unproject: function (point) { + return new L.LatLng(point.y, point.x); + } +}; + + +/* + * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet. + */ + +L.CRS = { + latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point + var projectedPoint = this.projection.project(latlng), + scale = this.scale(zoom); + + return this.transformation._transform(projectedPoint, scale); + }, + + pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng + var scale = this.scale(zoom), + untransformedPoint = this.transformation.untransform(point, scale); + + return this.projection.unproject(untransformedPoint); + }, + + project: function (latlng) { + return this.projection.project(latlng); + }, + + scale: function (zoom) { + return 256 * Math.pow(2, zoom); + }, + + getSize: function (zoom) { + var s = this.scale(zoom); + return L.point(s, s); + } +}; + + +/* + * A simple CRS that can be used for flat non-Earth maps like panoramas or game maps. + */ + +L.CRS.Simple = L.extend({}, L.CRS, { + projection: L.Projection.LonLat, + transformation: new L.Transformation(1, 0, -1, 0), + + scale: function (zoom) { + return Math.pow(2, zoom); + } +}); + + +/* + * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping + * and is used by Leaflet by default. + */ + +L.CRS.EPSG3857 = L.extend({}, L.CRS, { + code: 'EPSG:3857', + + projection: L.Projection.SphericalMercator, + transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5), + + project: function (latlng) { // (LatLng) -> Point + var projectedPoint = this.projection.project(latlng), + earthRadius = 6378137; + return projectedPoint.multiplyBy(earthRadius); + } +}); + +L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, { + code: 'EPSG:900913' +}); + + +/* + * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists. + */ + +L.CRS.EPSG4326 = L.extend({}, L.CRS, { + code: 'EPSG:4326', + + projection: L.Projection.LonLat, + transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5) +}); + + +/* + * L.Map is the central class of the API - it is used to create a map. + */ + +L.Map = L.Class.extend({ + + includes: L.Mixin.Events, + + options: { + crs: L.CRS.EPSG3857, + + /* + center: LatLng, + zoom: Number, + layers: Array, + */ + + fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android23, + trackResize: true, + markerZoomAnimation: L.DomUtil.TRANSITION && L.Browser.any3d + }, + + initialize: function (id, options) { // (HTMLElement or String, Object) + options = L.setOptions(this, options); + + + this._initContainer(id); + this._initLayout(); + + // hack for https://github.com/Leaflet/Leaflet/issues/1980 + this._onResize = L.bind(this._onResize, this); + + this._initEvents(); + + if (options.maxBounds) { + this.setMaxBounds(options.maxBounds); + } + + if (options.center && options.zoom !== undefined) { + this.setView(L.latLng(options.center), options.zoom, {reset: true}); + } + + this._handlers = []; + + this._layers = {}; + this._zoomBoundLayers = {}; + this._tileLayersNum = 0; + + this.callInitHooks(); + + this._addLayers(options.layers); + }, + + + // public methods that modify map state + + // replaced by animation-powered implementation in Map.PanAnimation.js + setView: function (center, zoom) { + zoom = zoom === undefined ? this.getZoom() : zoom; + this._resetView(L.latLng(center), this._limitZoom(zoom)); + return this; + }, + + setZoom: function (zoom, options) { + if (!this._loaded) { + this._zoom = this._limitZoom(zoom); + return this; + } + return this.setView(this.getCenter(), zoom, {zoom: options}); + }, + + zoomIn: function (delta, options) { + return this.setZoom(this._zoom + (delta || 1), options); + }, + + zoomOut: function (delta, options) { + return this.setZoom(this._zoom - (delta || 1), options); + }, + + setZoomAround: function (latlng, zoom, options) { + var scale = this.getZoomScale(zoom), + viewHalf = this.getSize().divideBy(2), + containerPoint = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng), + + centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale), + newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset)); + + return this.setView(newCenter, zoom, {zoom: options}); + }, + + fitBounds: function (bounds, options) { + + options = options || {}; + bounds = bounds.getBounds ? bounds.getBounds() : L.latLngBounds(bounds); + + var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]), + paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]), + + zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)); + + zoom = (options.maxZoom) ? Math.min(options.maxZoom, zoom) : zoom; + + var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), + + swPoint = this.project(bounds.getSouthWest(), zoom), + nePoint = this.project(bounds.getNorthEast(), zoom), + center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom); + + return this.setView(center, zoom, options); + }, + + fitWorld: function (options) { + return this.fitBounds([[-90, -180], [90, 180]], options); + }, + + panTo: function (center, options) { // (LatLng) + return this.setView(center, this._zoom, {pan: options}); + }, + + panBy: function (offset) { // (Point) + // replaced with animated panBy in Map.PanAnimation.js + this.fire('movestart'); + + this._rawPanBy(L.point(offset)); + + this.fire('move'); + return this.fire('moveend'); + }, + + setMaxBounds: function (bounds) { + bounds = L.latLngBounds(bounds); + + this.options.maxBounds = bounds; + + if (!bounds) { + return this.off('moveend', this._panInsideMaxBounds, this); + } + + if (this._loaded) { + this._panInsideMaxBounds(); + } + + return this.on('moveend', this._panInsideMaxBounds, this); + }, + + panInsideBounds: function (bounds, options) { + var center = this.getCenter(), + newCenter = this._limitCenter(center, this._zoom, bounds); + + if (center.equals(newCenter)) { return this; } + + return this.panTo(newCenter, options); + }, + + addLayer: function (layer) { + // TODO method is too big, refactor + + var id = L.stamp(layer); + + if (this._layers[id]) { return this; } + + this._layers[id] = layer; + + // TODO getMaxZoom, getMinZoom in ILayer (instead of options) + if (layer.options && (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom))) { + this._zoomBoundLayers[id] = layer; + this._updateZoomLevels(); + } + + // TODO looks ugly, refactor!!! + if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) { + this._tileLayersNum++; + this._tileLayersToLoad++; + layer.on('load', this._onTileLayerLoad, this); + } + + if (this._loaded) { + this._layerAdd(layer); + } + + return this; + }, + + removeLayer: function (layer) { + var id = L.stamp(layer); + + if (!this._layers[id]) { return this; } + + if (this._loaded) { + layer.onRemove(this); + } + + delete this._layers[id]; + + if (this._loaded) { + this.fire('layerremove', {layer: layer}); + } + + if (this._zoomBoundLayers[id]) { + delete this._zoomBoundLayers[id]; + this._updateZoomLevels(); + } + + // TODO looks ugly, refactor + if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) { + this._tileLayersNum--; + this._tileLayersToLoad--; + layer.off('load', this._onTileLayerLoad, this); + } + + return this; + }, + + hasLayer: function (layer) { + if (!layer) { return false; } + + return (L.stamp(layer) in this._layers); + }, + + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context, this._layers[i]); + } + return this; + }, + + invalidateSize: function (options) { + if (!this._loaded) { return this; } + + options = L.extend({ + animate: false, + pan: true + }, options === true ? {animate: true} : options); + + var oldSize = this.getSize(); + this._sizeChanged = true; + this._initialCenter = null; + + var newSize = this.getSize(), + oldCenter = oldSize.divideBy(2).round(), + newCenter = newSize.divideBy(2).round(), + offset = oldCenter.subtract(newCenter); + + if (!offset.x && !offset.y) { return this; } + + if (options.animate && options.pan) { + this.panBy(offset); + + } else { + if (options.pan) { + this._rawPanBy(offset); + } + + this.fire('move'); + + if (options.debounceMoveend) { + clearTimeout(this._sizeTimer); + this._sizeTimer = setTimeout(L.bind(this.fire, this, 'moveend'), 200); + } else { + this.fire('moveend'); + } + } + + return this.fire('resize', { + oldSize: oldSize, + newSize: newSize + }); + }, + + // TODO handler.addTo + addHandler: function (name, HandlerClass) { + if (!HandlerClass) { return this; } + + var handler = this[name] = new HandlerClass(this); + + this._handlers.push(handler); + + if (this.options[name]) { + handler.enable(); + } + + return this; + }, + + remove: function () { + if (this._loaded) { + this.fire('unload'); + } + + this._initEvents('off'); + + try { + // throws error in IE6-8 + delete this._container._leaflet; + } catch (e) { + this._container._leaflet = undefined; + } + + this._clearPanes(); + if (this._clearControlPos) { + this._clearControlPos(); + } + + this._clearHandlers(); + + return this; + }, + + + // public methods for getting map state + + getCenter: function () { // (Boolean) -> LatLng + this._checkIfLoaded(); + + if (this._initialCenter && !this._moved()) { + return this._initialCenter; + } + return this.layerPointToLatLng(this._getCenterLayerPoint()); + }, + + getZoom: function () { + return this._zoom; + }, + + getBounds: function () { + var bounds = this.getPixelBounds(), + sw = this.unproject(bounds.getBottomLeft()), + ne = this.unproject(bounds.getTopRight()); + + return new L.LatLngBounds(sw, ne); + }, + + getMinZoom: function () { + return this.options.minZoom === undefined ? + (this._layersMinZoom === undefined ? 0 : this._layersMinZoom) : + this.options.minZoom; + }, + + getMaxZoom: function () { + return this.options.maxZoom === undefined ? + (this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) : + this.options.maxZoom; + }, + + getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number + bounds = L.latLngBounds(bounds); + + var zoom = this.getMinZoom() - (inside ? 1 : 0), + maxZoom = this.getMaxZoom(), + size = this.getSize(), + + nw = bounds.getNorthWest(), + se = bounds.getSouthEast(), + + zoomNotFound = true, + boundsSize; + + padding = L.point(padding || [0, 0]); + + do { + zoom++; + boundsSize = this.project(se, zoom).subtract(this.project(nw, zoom)).add(padding); + zoomNotFound = !inside ? size.contains(boundsSize) : boundsSize.x < size.x || boundsSize.y < size.y; + + } while (zoomNotFound && zoom <= maxZoom); + + if (zoomNotFound && inside) { + return null; + } + + return inside ? zoom : zoom - 1; + }, + + getSize: function () { + if (!this._size || this._sizeChanged) { + this._size = new L.Point( + this._container.clientWidth, + this._container.clientHeight); + + this._sizeChanged = false; + } + return this._size.clone(); + }, + + getPixelBounds: function () { + var topLeftPoint = this._getTopLeftPoint(); + return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize())); + }, + + getPixelOrigin: function () { + this._checkIfLoaded(); + return this._initialTopLeftPoint; + }, + + getPanes: function () { + return this._panes; + }, + + getContainer: function () { + return this._container; + }, + + + // TODO replace with universal implementation after refactoring projections + + getZoomScale: function (toZoom) { + var crs = this.options.crs; + return crs.scale(toZoom) / crs.scale(this._zoom); + }, + + getScaleZoom: function (scale) { + return this._zoom + (Math.log(scale) / Math.LN2); + }, + + + // conversion methods + + project: function (latlng, zoom) { // (LatLng[, Number]) -> Point + zoom = zoom === undefined ? this._zoom : zoom; + return this.options.crs.latLngToPoint(L.latLng(latlng), zoom); + }, + + unproject: function (point, zoom) { // (Point[, Number]) -> LatLng + zoom = zoom === undefined ? this._zoom : zoom; + return this.options.crs.pointToLatLng(L.point(point), zoom); + }, + + layerPointToLatLng: function (point) { // (Point) + var projectedPoint = L.point(point).add(this.getPixelOrigin()); + return this.unproject(projectedPoint); + }, + + latLngToLayerPoint: function (latlng) { // (LatLng) + var projectedPoint = this.project(L.latLng(latlng))._round(); + return projectedPoint._subtract(this.getPixelOrigin()); + }, + + containerPointToLayerPoint: function (point) { // (Point) + return L.point(point).subtract(this._getMapPanePos()); + }, + + layerPointToContainerPoint: function (point) { // (Point) + return L.point(point).add(this._getMapPanePos()); + }, + + containerPointToLatLng: function (point) { + var layerPoint = this.containerPointToLayerPoint(L.point(point)); + return this.layerPointToLatLng(layerPoint); + }, + + latLngToContainerPoint: function (latlng) { + return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng))); + }, + + mouseEventToContainerPoint: function (e) { // (MouseEvent) + return L.DomEvent.getMousePosition(e, this._container); + }, + + mouseEventToLayerPoint: function (e) { // (MouseEvent) + return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e)); + }, + + mouseEventToLatLng: function (e) { // (MouseEvent) + return this.layerPointToLatLng(this.mouseEventToLayerPoint(e)); + }, + + + // map initialization methods + + _initContainer: function (id) { + var container = this._container = L.DomUtil.get(id); + + if (!container) { + throw new Error('Map container not found.'); + } else if (container._leaflet) { + throw new Error('Map container is already initialized.'); + } + + container._leaflet = true; + }, + + _initLayout: function () { + var container = this._container; + + L.DomUtil.addClass(container, 'leaflet-container' + + (L.Browser.touch ? ' leaflet-touch' : '') + + (L.Browser.retina ? ' leaflet-retina' : '') + + (L.Browser.ielt9 ? ' leaflet-oldie' : '') + + (this.options.fadeAnimation ? ' leaflet-fade-anim' : '')); + + var position = L.DomUtil.getStyle(container, 'position'); + + if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') { + container.style.position = 'relative'; + } + + this._initPanes(); + + if (this._initControlPos) { + this._initControlPos(); + } + }, + + _initPanes: function () { + var panes = this._panes = {}; + + this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container); + + this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane); + panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane); + panes.shadowPane = this._createPane('leaflet-shadow-pane'); + panes.overlayPane = this._createPane('leaflet-overlay-pane'); + panes.markerPane = this._createPane('leaflet-marker-pane'); + panes.popupPane = this._createPane('leaflet-popup-pane'); + + var zoomHide = ' leaflet-zoom-hide'; + + if (!this.options.markerZoomAnimation) { + L.DomUtil.addClass(panes.markerPane, zoomHide); + L.DomUtil.addClass(panes.shadowPane, zoomHide); + L.DomUtil.addClass(panes.popupPane, zoomHide); + } + }, + + _createPane: function (className, container) { + return L.DomUtil.create('div', className, container || this._panes.objectsPane); + }, + + _clearPanes: function () { + this._container.removeChild(this._mapPane); + }, + + _addLayers: function (layers) { + layers = layers ? (L.Util.isArray(layers) ? layers : [layers]) : []; + + for (var i = 0, len = layers.length; i < len; i++) { + this.addLayer(layers[i]); + } + }, + + + // private methods that modify map state + + _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) { + + var zoomChanged = (this._zoom !== zoom); + + if (!afterZoomAnim) { + this.fire('movestart'); + + if (zoomChanged) { + this.fire('zoomstart'); + } + } + + this._zoom = zoom; + this._initialCenter = center; + + this._initialTopLeftPoint = this._getNewTopLeftPoint(center); + + if (!preserveMapOffset) { + L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0)); + } else { + this._initialTopLeftPoint._add(this._getMapPanePos()); + } + + this._tileLayersToLoad = this._tileLayersNum; + + var loading = !this._loaded; + this._loaded = true; + + this.fire('viewreset', {hard: !preserveMapOffset}); + + if (loading) { + this.fire('load'); + this.eachLayer(this._layerAdd, this); + } + + this.fire('move'); + + if (zoomChanged || afterZoomAnim) { + this.fire('zoomend'); + } + + this.fire('moveend', {hard: !preserveMapOffset}); + }, + + _rawPanBy: function (offset) { + L.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset)); + }, + + _getZoomSpan: function () { + return this.getMaxZoom() - this.getMinZoom(); + }, + + _updateZoomLevels: function () { + var i, + minZoom = Infinity, + maxZoom = -Infinity, + oldZoomSpan = this._getZoomSpan(); + + for (i in this._zoomBoundLayers) { + var layer = this._zoomBoundLayers[i]; + if (!isNaN(layer.options.minZoom)) { + minZoom = Math.min(minZoom, layer.options.minZoom); + } + if (!isNaN(layer.options.maxZoom)) { + maxZoom = Math.max(maxZoom, layer.options.maxZoom); + } + } + + if (i === undefined) { // we have no tilelayers + this._layersMaxZoom = this._layersMinZoom = undefined; + } else { + this._layersMaxZoom = maxZoom; + this._layersMinZoom = minZoom; + } + + if (oldZoomSpan !== this._getZoomSpan()) { + this.fire('zoomlevelschange'); + } + }, + + _panInsideMaxBounds: function () { + this.panInsideBounds(this.options.maxBounds); + }, + + _checkIfLoaded: function () { + if (!this._loaded) { + throw new Error('Set map center and zoom first.'); + } + }, + + // map events + + _initEvents: function (onOff) { + if (!L.DomEvent) { return; } + + onOff = onOff || 'on'; + + L.DomEvent[onOff](this._container, 'click', this._onMouseClick, this); + + var events = ['dblclick', 'mousedown', 'mouseup', 'mouseenter', + 'mouseleave', 'mousemove', 'contextmenu'], + i, len; + + for (i = 0, len = events.length; i < len; i++) { + L.DomEvent[onOff](this._container, events[i], this._fireMouseEvent, this); + } + + if (this.options.trackResize) { + L.DomEvent[onOff](window, 'resize', this._onResize, this); + } + }, + + _onResize: function () { + L.Util.cancelAnimFrame(this._resizeRequest); + this._resizeRequest = L.Util.requestAnimFrame( + function () { this.invalidateSize({debounceMoveend: true}); }, this, false, this._container); + }, + + _onMouseClick: function (e) { + if (!this._loaded || (!e._simulated && + ((this.dragging && this.dragging.moved()) || + (this.boxZoom && this.boxZoom.moved()))) || + L.DomEvent._skipped(e)) { return; } + + this.fire('preclick'); + this._fireMouseEvent(e); + }, + + _fireMouseEvent: function (e) { + if (!this._loaded || L.DomEvent._skipped(e)) { return; } + + var type = e.type; + + type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type)); + + if (!this.hasEventListeners(type)) { return; } + + if (type === 'contextmenu') { + L.DomEvent.preventDefault(e); + } + + var containerPoint = this.mouseEventToContainerPoint(e), + layerPoint = this.containerPointToLayerPoint(containerPoint), + latlng = this.layerPointToLatLng(layerPoint); + + this.fire(type, { + latlng: latlng, + layerPoint: layerPoint, + containerPoint: containerPoint, + originalEvent: e + }); + }, + + _onTileLayerLoad: function () { + this._tileLayersToLoad--; + if (this._tileLayersNum && !this._tileLayersToLoad) { + this.fire('tilelayersload'); + } + }, + + _clearHandlers: function () { + for (var i = 0, len = this._handlers.length; i < len; i++) { + this._handlers[i].disable(); + } + }, + + whenReady: function (callback, context) { + if (this._loaded) { + callback.call(context || this, this); + } else { + this.on('load', callback, context); + } + return this; + }, + + _layerAdd: function (layer) { + layer.onAdd(this); + this.fire('layeradd', {layer: layer}); + }, + + + // private methods for getting map state + + _getMapPanePos: function () { + return L.DomUtil.getPosition(this._mapPane); + }, + + _moved: function () { + var pos = this._getMapPanePos(); + return pos && !pos.equals([0, 0]); + }, + + _getTopLeftPoint: function () { + return this.getPixelOrigin().subtract(this._getMapPanePos()); + }, + + _getNewTopLeftPoint: function (center, zoom) { + var viewHalf = this.getSize()._divideBy(2); + // TODO round on display, not calculation to increase precision? + return this.project(center, zoom)._subtract(viewHalf)._round(); + }, + + _latLngToNewLayerPoint: function (latlng, newZoom, newCenter) { + var topLeft = this._getNewTopLeftPoint(newCenter, newZoom).add(this._getMapPanePos()); + return this.project(latlng, newZoom)._subtract(topLeft); + }, + + // layer point of the current center + _getCenterLayerPoint: function () { + return this.containerPointToLayerPoint(this.getSize()._divideBy(2)); + }, + + // offset of the specified place to the current center in pixels + _getCenterOffset: function (latlng) { + return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint()); + }, + + // adjust center for view to get inside bounds + _limitCenter: function (center, zoom, bounds) { + + if (!bounds) { return center; } + + var centerPoint = this.project(center, zoom), + viewHalf = this.getSize().divideBy(2), + viewBounds = new L.Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)), + offset = this._getBoundsOffset(viewBounds, bounds, zoom); + + return this.unproject(centerPoint.add(offset), zoom); + }, + + // adjust offset for view to get inside bounds + _limitOffset: function (offset, bounds) { + if (!bounds) { return offset; } + + var viewBounds = this.getPixelBounds(), + newBounds = new L.Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset)); + + return offset.add(this._getBoundsOffset(newBounds, bounds)); + }, + + // returns offset needed for pxBounds to get inside maxBounds at a specified zoom + _getBoundsOffset: function (pxBounds, maxBounds, zoom) { + var nwOffset = this.project(maxBounds.getNorthWest(), zoom).subtract(pxBounds.min), + seOffset = this.project(maxBounds.getSouthEast(), zoom).subtract(pxBounds.max), + + dx = this._rebound(nwOffset.x, -seOffset.x), + dy = this._rebound(nwOffset.y, -seOffset.y); + + return new L.Point(dx, dy); + }, + + _rebound: function (left, right) { + return left + right > 0 ? + Math.round(left - right) / 2 : + Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right)); + }, + + _limitZoom: function (zoom) { + var min = this.getMinZoom(), + max = this.getMaxZoom(); + + return Math.max(min, Math.min(max, zoom)); + } +}); + +L.map = function (id, options) { + return new L.Map(id, options); +}; + + +/* + * Mercator projection that takes into account that the Earth is not a perfect sphere. + * Less popular than spherical mercator; used by projections like EPSG:3395. + */ + +L.Projection.Mercator = { + MAX_LATITUDE: 85.0840591556, + + R_MINOR: 6356752.314245179, + R_MAJOR: 6378137, + + project: function (latlng) { // (LatLng) -> Point + var d = L.LatLng.DEG_TO_RAD, + max = this.MAX_LATITUDE, + lat = Math.max(Math.min(max, latlng.lat), -max), + r = this.R_MAJOR, + r2 = this.R_MINOR, + x = latlng.lng * d * r, + y = lat * d, + tmp = r2 / r, + eccent = Math.sqrt(1.0 - tmp * tmp), + con = eccent * Math.sin(y); + + con = Math.pow((1 - con) / (1 + con), eccent * 0.5); + + var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con; + y = -r * Math.log(ts); + + return new L.Point(x, y); + }, + + unproject: function (point) { // (Point, Boolean) -> LatLng + var d = L.LatLng.RAD_TO_DEG, + r = this.R_MAJOR, + r2 = this.R_MINOR, + lng = point.x * d / r, + tmp = r2 / r, + eccent = Math.sqrt(1 - (tmp * tmp)), + ts = Math.exp(- point.y / r), + phi = (Math.PI / 2) - 2 * Math.atan(ts), + numIter = 15, + tol = 1e-7, + i = numIter, + dphi = 0.1, + con; + + while ((Math.abs(dphi) > tol) && (--i > 0)) { + con = eccent * Math.sin(phi); + dphi = (Math.PI / 2) - 2 * Math.atan(ts * + Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi; + phi += dphi; + } + + return new L.LatLng(phi * d, lng); + } +}; + + + +L.CRS.EPSG3395 = L.extend({}, L.CRS, { + code: 'EPSG:3395', + + projection: L.Projection.Mercator, + + transformation: (function () { + var m = L.Projection.Mercator, + r = m.R_MAJOR, + scale = 0.5 / (Math.PI * r); + + return new L.Transformation(scale, 0.5, -scale, 0.5); + }()) +}); + + +/* + * L.TileLayer is used for standard xyz-numbered tile layers. + */ + +L.TileLayer = L.Class.extend({ + includes: L.Mixin.Events, + + options: { + minZoom: 0, + maxZoom: 18, + tileSize: 256, + subdomains: 'abc', + errorTileUrl: '', + attribution: '', + zoomOffset: 0, + opacity: 1, + /* + maxNativeZoom: null, + zIndex: null, + tms: false, + continuousWorld: false, + noWrap: false, + zoomReverse: false, + detectRetina: false, + reuseTiles: false, + bounds: false, + */ + unloadInvisibleTiles: L.Browser.mobile, + updateWhenIdle: L.Browser.mobile + }, + + initialize: function (url, options) { + options = L.setOptions(this, options); + + // detecting retina displays, adjusting tileSize and zoom levels + if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) { + + options.tileSize = Math.floor(options.tileSize / 2); + options.zoomOffset++; + + if (options.minZoom > 0) { + options.minZoom--; + } + this.options.maxZoom--; + } + + if (options.bounds) { + options.bounds = L.latLngBounds(options.bounds); + } + + this._url = url; + + var subdomains = this.options.subdomains; + + if (typeof subdomains === 'string') { + this.options.subdomains = subdomains.split(''); + } + }, + + onAdd: function (map) { + this._map = map; + this._animated = map._zoomAnimated; + + // create a container div for tiles + this._initContainer(); + + // set up events + map.on({ + 'viewreset': this._reset, + 'moveend': this._update + }, this); + + if (this._animated) { + map.on({ + 'zoomanim': this._animateZoom, + 'zoomend': this._endZoomAnim + }, this); + } + + if (!this.options.updateWhenIdle) { + this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this); + map.on('move', this._limitedUpdate, this); + } + + this._reset(); + this._update(); + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + this._container.parentNode.removeChild(this._container); + + map.off({ + 'viewreset': this._reset, + 'moveend': this._update + }, this); + + if (this._animated) { + map.off({ + 'zoomanim': this._animateZoom, + 'zoomend': this._endZoomAnim + }, this); + } + + if (!this.options.updateWhenIdle) { + map.off('move', this._limitedUpdate, this); + } + + this._container = null; + this._map = null; + }, + + bringToFront: function () { + var pane = this._map._panes.tilePane; + + if (this._container) { + pane.appendChild(this._container); + this._setAutoZIndex(pane, Math.max); + } + + return this; + }, + + bringToBack: function () { + var pane = this._map._panes.tilePane; + + if (this._container) { + pane.insertBefore(this._container, pane.firstChild); + this._setAutoZIndex(pane, Math.min); + } + + return this; + }, + + getAttribution: function () { + return this.options.attribution; + }, + + getContainer: function () { + return this._container; + }, + + setOpacity: function (opacity) { + this.options.opacity = opacity; + + if (this._map) { + this._updateOpacity(); + } + + return this; + }, + + setZIndex: function (zIndex) { + this.options.zIndex = zIndex; + this._updateZIndex(); + + return this; + }, + + setUrl: function (url, noRedraw) { + this._url = url; + + if (!noRedraw) { + this.redraw(); + } + + return this; + }, + + redraw: function () { + if (this._map) { + this._reset({hard: true}); + this._update(); + } + return this; + }, + + _updateZIndex: function () { + if (this._container && this.options.zIndex !== undefined) { + this._container.style.zIndex = this.options.zIndex; + } + }, + + _setAutoZIndex: function (pane, compare) { + + var layers = pane.children, + edgeZIndex = -compare(Infinity, -Infinity), // -Infinity for max, Infinity for min + zIndex, i, len; + + for (i = 0, len = layers.length; i < len; i++) { + + if (layers[i] !== this._container) { + zIndex = parseInt(layers[i].style.zIndex, 10); + + if (!isNaN(zIndex)) { + edgeZIndex = compare(edgeZIndex, zIndex); + } + } + } + + this.options.zIndex = this._container.style.zIndex = + (isFinite(edgeZIndex) ? edgeZIndex : 0) + compare(1, -1); + }, + + _updateOpacity: function () { + var i, + tiles = this._tiles; + + if (L.Browser.ielt9) { + for (i in tiles) { + L.DomUtil.setOpacity(tiles[i], this.options.opacity); + } + } else { + L.DomUtil.setOpacity(this._container, this.options.opacity); + } + }, + + _initContainer: function () { + var tilePane = this._map._panes.tilePane; + + if (!this._container) { + this._container = L.DomUtil.create('div', 'leaflet-layer'); + + this._updateZIndex(); + + if (this._animated) { + var className = 'leaflet-tile-container'; + + this._bgBuffer = L.DomUtil.create('div', className, this._container); + this._tileContainer = L.DomUtil.create('div', className, this._container); + + } else { + this._tileContainer = this._container; + } + + tilePane.appendChild(this._container); + + if (this.options.opacity < 1) { + this._updateOpacity(); + } + } + }, + + _reset: function (e) { + for (var key in this._tiles) { + this.fire('tileunload', {tile: this._tiles[key]}); + } + + this._tiles = {}; + this._tilesToLoad = 0; + + if (this.options.reuseTiles) { + this._unusedTiles = []; + } + + this._tileContainer.innerHTML = ''; + + if (this._animated && e && e.hard) { + this._clearBgBuffer(); + } + + this._initContainer(); + }, + + _getTileSize: function () { + var map = this._map, + zoom = map.getZoom() + this.options.zoomOffset, + zoomN = this.options.maxNativeZoom, + tileSize = this.options.tileSize; + + if (zoomN && zoom > zoomN) { + tileSize = Math.round(map.getZoomScale(zoom) / map.getZoomScale(zoomN) * tileSize); + } + + return tileSize; + }, + + _update: function () { + + if (!this._map) { return; } + + var map = this._map, + bounds = map.getPixelBounds(), + zoom = map.getZoom(), + tileSize = this._getTileSize(); + + if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + return; + } + + var tileBounds = L.bounds( + bounds.min.divideBy(tileSize)._floor(), + bounds.max.divideBy(tileSize)._floor()); + + this._addTilesFromCenterOut(tileBounds); + + if (this.options.unloadInvisibleTiles || this.options.reuseTiles) { + this._removeOtherTiles(tileBounds); + } + }, + + _addTilesFromCenterOut: function (bounds) { + var queue = [], + center = bounds.getCenter(); + + var j, i, point; + + for (j = bounds.min.y; j <= bounds.max.y; j++) { + for (i = bounds.min.x; i <= bounds.max.x; i++) { + point = new L.Point(i, j); + + if (this._tileShouldBeLoaded(point)) { + queue.push(point); + } + } + } + + var tilesToLoad = queue.length; + + if (tilesToLoad === 0) { return; } + + // load tiles in order of their distance to center + queue.sort(function (a, b) { + return a.distanceTo(center) - b.distanceTo(center); + }); + + var fragment = document.createDocumentFragment(); + + // if its the first batch of tiles to load + if (!this._tilesToLoad) { + this.fire('loading'); + } + + this._tilesToLoad += tilesToLoad; + + for (i = 0; i < tilesToLoad; i++) { + this._addTile(queue[i], fragment); + } + + this._tileContainer.appendChild(fragment); + }, + + _tileShouldBeLoaded: function (tilePoint) { + if ((tilePoint.x + ':' + tilePoint.y) in this._tiles) { + return false; // already loaded + } + + var options = this.options; + + if (!options.continuousWorld) { + var limit = this._getWrapTileNum(); + + // don't load if exceeds world bounds + if ((options.noWrap && (tilePoint.x < 0 || tilePoint.x >= limit.x)) || + tilePoint.y < 0 || tilePoint.y >= limit.y) { return false; } + } + + if (options.bounds) { + var tileSize = this._getTileSize(), + nwPoint = tilePoint.multiplyBy(tileSize), + sePoint = nwPoint.add([tileSize, tileSize]), + nw = this._map.unproject(nwPoint), + se = this._map.unproject(sePoint); + + // TODO temporary hack, will be removed after refactoring projections + // https://github.com/Leaflet/Leaflet/issues/1618 + if (!options.continuousWorld && !options.noWrap) { + nw = nw.wrap(); + se = se.wrap(); + } + + if (!options.bounds.intersects([nw, se])) { return false; } + } + + return true; + }, + + _removeOtherTiles: function (bounds) { + var kArr, x, y, key; + + for (key in this._tiles) { + kArr = key.split(':'); + x = parseInt(kArr[0], 10); + y = parseInt(kArr[1], 10); + + // remove tile if it's out of bounds + if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) { + this._removeTile(key); + } + } + }, + + _removeTile: function (key) { + var tile = this._tiles[key]; + + this.fire('tileunload', {tile: tile, url: tile.src}); + + if (this.options.reuseTiles) { + L.DomUtil.removeClass(tile, 'leaflet-tile-loaded'); + this._unusedTiles.push(tile); + + } else if (tile.parentNode === this._tileContainer) { + this._tileContainer.removeChild(tile); + } + + // for https://github.com/CloudMade/Leaflet/issues/137 + if (!L.Browser.android) { + tile.onload = null; + tile.src = L.Util.emptyImageUrl; + } + + delete this._tiles[key]; + }, + + _addTile: function (tilePoint, container) { + var tilePos = this._getTilePos(tilePoint); + + // get unused tile - or create a new tile + var tile = this._getTile(); + + /* + Chrome 20 layouts much faster with top/left (verify with timeline, frames) + Android 4 browser has display issues with top/left and requires transform instead + (other browsers don't currently care) - see debug/hacks/jitter.html for an example + */ + L.DomUtil.setPosition(tile, tilePos, L.Browser.chrome); + + this._tiles[tilePoint.x + ':' + tilePoint.y] = tile; + + this._loadTile(tile, tilePoint); + + if (tile.parentNode !== this._tileContainer) { + container.appendChild(tile); + } + }, + + _getZoomForUrl: function () { + + var options = this.options, + zoom = this._map.getZoom(); + + if (options.zoomReverse) { + zoom = options.maxZoom - zoom; + } + + zoom += options.zoomOffset; + + return options.maxNativeZoom ? Math.min(zoom, options.maxNativeZoom) : zoom; + }, + + _getTilePos: function (tilePoint) { + var origin = this._map.getPixelOrigin(), + tileSize = this._getTileSize(); + + return tilePoint.multiplyBy(tileSize).subtract(origin); + }, + + // image-specific code (override to implement e.g. Canvas or SVG tile layer) + + getTileUrl: function (tilePoint) { + return L.Util.template(this._url, L.extend({ + s: this._getSubdomain(tilePoint), + z: tilePoint.z, + x: tilePoint.x, + y: tilePoint.y + }, this.options)); + }, + + _getWrapTileNum: function () { + var crs = this._map.options.crs, + size = crs.getSize(this._map.getZoom()); + return size.divideBy(this._getTileSize())._floor(); + }, + + _adjustTilePoint: function (tilePoint) { + + var limit = this._getWrapTileNum(); + + // wrap tile coordinates + if (!this.options.continuousWorld && !this.options.noWrap) { + tilePoint.x = ((tilePoint.x % limit.x) + limit.x) % limit.x; + } + + if (this.options.tms) { + tilePoint.y = limit.y - tilePoint.y - 1; + } + + tilePoint.z = this._getZoomForUrl(); + }, + + _getSubdomain: function (tilePoint) { + var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length; + return this.options.subdomains[index]; + }, + + _getTile: function () { + if (this.options.reuseTiles && this._unusedTiles.length > 0) { + var tile = this._unusedTiles.pop(); + this._resetTile(tile); + return tile; + } + return this._createTile(); + }, + + // Override if data stored on a tile needs to be cleaned up before reuse + _resetTile: function (/*tile*/) {}, + + _createTile: function () { + var tile = L.DomUtil.create('img', 'leaflet-tile'); + tile.style.width = tile.style.height = this._getTileSize() + 'px'; + tile.galleryimg = 'no'; + + tile.onselectstart = tile.onmousemove = L.Util.falseFn; + + if (L.Browser.ielt9 && this.options.opacity !== undefined) { + L.DomUtil.setOpacity(tile, this.options.opacity); + } + // without this hack, tiles disappear after zoom on Chrome for Android + // https://github.com/Leaflet/Leaflet/issues/2078 + if (L.Browser.mobileWebkit3d) { + tile.style.WebkitBackfaceVisibility = 'hidden'; + } + return tile; + }, + + _loadTile: function (tile, tilePoint) { + tile._layer = this; + tile.onload = this._tileOnLoad; + tile.onerror = this._tileOnError; + + this._adjustTilePoint(tilePoint); + tile.src = this.getTileUrl(tilePoint); + + this.fire('tileloadstart', { + tile: tile, + url: tile.src + }); + }, + + _tileLoaded: function () { + this._tilesToLoad--; + + if (this._animated) { + L.DomUtil.addClass(this._tileContainer, 'leaflet-zoom-animated'); + } + + if (!this._tilesToLoad) { + this.fire('load'); + + if (this._animated) { + // clear scaled tiles after all new tiles are loaded (for performance) + clearTimeout(this._clearBgBufferTimer); + this._clearBgBufferTimer = setTimeout(L.bind(this._clearBgBuffer, this), 500); + } + } + }, + + _tileOnLoad: function () { + var layer = this._layer; + + //Only if we are loading an actual image + if (this.src !== L.Util.emptyImageUrl) { + L.DomUtil.addClass(this, 'leaflet-tile-loaded'); + + layer.fire('tileload', { + tile: this, + url: this.src + }); + } + + layer._tileLoaded(); + }, + + _tileOnError: function () { + var layer = this._layer; + + layer.fire('tileerror', { + tile: this, + url: this.src + }); + + var newUrl = layer.options.errorTileUrl; + if (newUrl) { + this.src = newUrl; + } + + layer._tileLoaded(); + } +}); + +L.tileLayer = function (url, options) { + return new L.TileLayer(url, options); +}; + + +/* + * L.TileLayer.WMS is used for putting WMS tile layers on the map. + */ + +L.TileLayer.WMS = L.TileLayer.extend({ + + defaultWmsParams: { + service: 'WMS', + request: 'GetMap', + version: '1.1.1', + layers: '', + styles: '', + format: 'image/jpeg', + transparent: false + }, + + initialize: function (url, options) { // (String, Object) + + this._url = url; + + var wmsParams = L.extend({}, this.defaultWmsParams), + tileSize = options.tileSize || this.options.tileSize; + + if (options.detectRetina && L.Browser.retina) { + wmsParams.width = wmsParams.height = tileSize * 2; + } else { + wmsParams.width = wmsParams.height = tileSize; + } + + for (var i in options) { + // all keys that are not TileLayer options go to WMS params + if (!this.options.hasOwnProperty(i) && i !== 'crs') { + wmsParams[i] = options[i]; + } + } + + this.wmsParams = wmsParams; + + L.setOptions(this, options); + }, + + onAdd: function (map) { + + this._crs = this.options.crs || map.options.crs; + + this._wmsVersion = parseFloat(this.wmsParams.version); + + var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs'; + this.wmsParams[projectionKey] = this._crs.code; + + L.TileLayer.prototype.onAdd.call(this, map); + }, + + getTileUrl: function (tilePoint) { // (Point, Number) -> String + + var map = this._map, + tileSize = this.options.tileSize, + + nwPoint = tilePoint.multiplyBy(tileSize), + sePoint = nwPoint.add([tileSize, tileSize]), + + nw = this._crs.project(map.unproject(nwPoint, tilePoint.z)), + se = this._crs.project(map.unproject(sePoint, tilePoint.z)), + bbox = this._wmsVersion >= 1.3 && this._crs === L.CRS.EPSG4326 ? + [se.y, nw.x, nw.y, se.x].join(',') : + [nw.x, se.y, se.x, nw.y].join(','), + + url = L.Util.template(this._url, {s: this._getSubdomain(tilePoint)}); + + return url + L.Util.getParamString(this.wmsParams, url, true) + '&BBOX=' + bbox; + }, + + setParams: function (params, noRedraw) { + + L.extend(this.wmsParams, params); + + if (!noRedraw) { + this.redraw(); + } + + return this; + } +}); + +L.tileLayer.wms = function (url, options) { + return new L.TileLayer.WMS(url, options); +}; + + +/* + * L.TileLayer.Canvas is a class that you can use as a base for creating + * dynamically drawn Canvas-based tile layers. + */ + +L.TileLayer.Canvas = L.TileLayer.extend({ + options: { + async: false + }, + + initialize: function (options) { + L.setOptions(this, options); + }, + + redraw: function () { + if (this._map) { + this._reset({hard: true}); + this._update(); + } + + for (var i in this._tiles) { + this._redrawTile(this._tiles[i]); + } + return this; + }, + + _redrawTile: function (tile) { + this.drawTile(tile, tile._tilePoint, this._map._zoom); + }, + + _createTile: function () { + var tile = L.DomUtil.create('canvas', 'leaflet-tile'); + tile.width = tile.height = this.options.tileSize; + tile.onselectstart = tile.onmousemove = L.Util.falseFn; + return tile; + }, + + _loadTile: function (tile, tilePoint) { + tile._layer = this; + tile._tilePoint = tilePoint; + + this._redrawTile(tile); + + if (!this.options.async) { + this.tileDrawn(tile); + } + }, + + drawTile: function (/*tile, tilePoint*/) { + // override with rendering code + }, + + tileDrawn: function (tile) { + this._tileOnLoad.call(tile); + } +}); + + +L.tileLayer.canvas = function (options) { + return new L.TileLayer.Canvas(options); +}; + + +/* + * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds). + */ + +L.ImageOverlay = L.Class.extend({ + includes: L.Mixin.Events, + + options: { + opacity: 1 + }, + + initialize: function (url, bounds, options) { // (String, LatLngBounds, Object) + this._url = url; + this._bounds = L.latLngBounds(bounds); + + L.setOptions(this, options); + }, + + onAdd: function (map) { + this._map = map; + + if (!this._image) { + this._initImage(); + } + + map._panes.overlayPane.appendChild(this._image); + + map.on('viewreset', this._reset, this); + + if (map.options.zoomAnimation && L.Browser.any3d) { + map.on('zoomanim', this._animateZoom, this); + } + + this._reset(); + }, + + onRemove: function (map) { + map.getPanes().overlayPane.removeChild(this._image); + + map.off('viewreset', this._reset, this); + + if (map.options.zoomAnimation) { + map.off('zoomanim', this._animateZoom, this); + } + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + setOpacity: function (opacity) { + this.options.opacity = opacity; + this._updateOpacity(); + return this; + }, + + // TODO remove bringToFront/bringToBack duplication from TileLayer/Path + bringToFront: function () { + if (this._image) { + this._map._panes.overlayPane.appendChild(this._image); + } + return this; + }, + + bringToBack: function () { + var pane = this._map._panes.overlayPane; + if (this._image) { + pane.insertBefore(this._image, pane.firstChild); + } + return this; + }, + + setUrl: function (url) { + this._url = url; + this._image.src = this._url; + }, + + getAttribution: function () { + return this.options.attribution; + }, + + _initImage: function () { + this._image = L.DomUtil.create('img', 'leaflet-image-layer'); + + if (this._map.options.zoomAnimation && L.Browser.any3d) { + L.DomUtil.addClass(this._image, 'leaflet-zoom-animated'); + } else { + L.DomUtil.addClass(this._image, 'leaflet-zoom-hide'); + } + + this._updateOpacity(); + + //TODO createImage util method to remove duplication + L.extend(this._image, { + galleryimg: 'no', + onselectstart: L.Util.falseFn, + onmousemove: L.Util.falseFn, + onload: L.bind(this._onImageLoad, this), + src: this._url + }); + }, + + _animateZoom: function (e) { + var map = this._map, + image = this._image, + scale = map.getZoomScale(e.zoom), + nw = this._bounds.getNorthWest(), + se = this._bounds.getSouthEast(), + + topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center), + size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft), + origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale))); + + image.style[L.DomUtil.TRANSFORM] = + L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') '; + }, + + _reset: function () { + var image = this._image, + topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()), + size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft); + + L.DomUtil.setPosition(image, topLeft); + + image.style.width = size.x + 'px'; + image.style.height = size.y + 'px'; + }, + + _onImageLoad: function () { + this.fire('load'); + }, + + _updateOpacity: function () { + L.DomUtil.setOpacity(this._image, this.options.opacity); + } +}); + +L.imageOverlay = function (url, bounds, options) { + return new L.ImageOverlay(url, bounds, options); +}; + + +/* + * L.Icon is an image-based icon class that you can use with L.Marker for custom markers. + */ + +L.Icon = L.Class.extend({ + options: { + /* + iconUrl: (String) (required) + iconRetinaUrl: (String) (optional, used for retina devices if detected) + iconSize: (Point) (can be set through CSS) + iconAnchor: (Point) (centered by default, can be set in CSS with negative margins) + popupAnchor: (Point) (if not specified, popup opens in the anchor point) + shadowUrl: (String) (no shadow by default) + shadowRetinaUrl: (String) (optional, used for retina devices if detected) + shadowSize: (Point) + shadowAnchor: (Point) + */ + className: '' + }, + + initialize: function (options) { + L.setOptions(this, options); + }, + + createIcon: function (oldIcon) { + return this._createIcon('icon', oldIcon); + }, + + createShadow: function (oldIcon) { + return this._createIcon('shadow', oldIcon); + }, + + _createIcon: function (name, oldIcon) { + var src = this._getIconUrl(name); + + if (!src) { + if (name === 'icon') { + throw new Error('iconUrl not set in Icon options (see the docs).'); + } + return null; + } + + var img; + if (!oldIcon || oldIcon.tagName !== 'IMG') { + img = this._createImg(src); + } else { + img = this._createImg(src, oldIcon); + } + this._setIconStyles(img, name); + + return img; + }, + + _setIconStyles: function (img, name) { + var options = this.options, + size = L.point(options[name + 'Size']), + anchor; + + if (name === 'shadow') { + anchor = L.point(options.shadowAnchor || options.iconAnchor); + } else { + anchor = L.point(options.iconAnchor); + } + + if (!anchor && size) { + anchor = size.divideBy(2, true); + } + + img.className = 'leaflet-marker-' + name + ' ' + options.className; + + if (anchor) { + img.style.marginLeft = (-anchor.x) + 'px'; + img.style.marginTop = (-anchor.y) + 'px'; + } + + if (size) { + img.style.width = size.x + 'px'; + img.style.height = size.y + 'px'; + } + }, + + _createImg: function (src, el) { + el = el || document.createElement('img'); + el.src = src; + return el; + }, + + _getIconUrl: function (name) { + if (L.Browser.retina && this.options[name + 'RetinaUrl']) { + return this.options[name + 'RetinaUrl']; + } + return this.options[name + 'Url']; + } +}); + +L.icon = function (options) { + return new L.Icon(options); +}; + + +/* + * L.Icon.Default is the blue marker icon used by default in Leaflet. + */ + +L.Icon.Default = L.Icon.extend({ + + options: { + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + + shadowSize: [41, 41] + }, + + _getIconUrl: function (name) { + var key = name + 'Url'; + + if (this.options[key]) { + return this.options[key]; + } + + if (L.Browser.retina && name === 'icon') { + name += '-2x'; + } + + var path = L.Icon.Default.imagePath; + + if (!path) { + throw new Error('Couldn\'t autodetect L.Icon.Default.imagePath, set it manually.'); + } + + return path + '/marker-' + name + '.png'; + } +}); + +L.Icon.Default.imagePath = (function () { + var scripts = document.getElementsByTagName('script'), + leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/; + + var i, len, src, matches, path; + + for (i = 0, len = scripts.length; i < len; i++) { + src = scripts[i].src; + matches = src.match(leafletRe); + + if (matches) { + path = src.split(leafletRe)[0]; + return (path ? path + '/' : '') + 'images'; + } + } +}()); + + +/* + * L.Marker is used to display clickable/draggable icons on the map. + */ + +L.Marker = L.Class.extend({ + + includes: L.Mixin.Events, + + options: { + icon: new L.Icon.Default(), + title: '', + alt: '', + clickable: true, + draggable: false, + keyboard: true, + zIndexOffset: 0, + opacity: 1, + riseOnHover: false, + riseOffset: 250 + }, + + initialize: function (latlng, options) { + L.setOptions(this, options); + this._latlng = L.latLng(latlng); + }, + + onAdd: function (map) { + this._map = map; + + map.on('viewreset', this.update, this); + + this._initIcon(); + this.update(); + this.fire('add'); + + if (map.options.zoomAnimation && map.options.markerZoomAnimation) { + map.on('zoomanim', this._animateZoom, this); + } + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + if (this.dragging) { + this.dragging.disable(); + } + + this._removeIcon(); + this._removeShadow(); + + this.fire('remove'); + + map.off({ + 'viewreset': this.update, + 'zoomanim': this._animateZoom + }, this); + + this._map = null; + }, + + getLatLng: function () { + return this._latlng; + }, + + setLatLng: function (latlng) { + this._latlng = L.latLng(latlng); + + this.update(); + + return this.fire('move', { latlng: this._latlng }); + }, + + setZIndexOffset: function (offset) { + this.options.zIndexOffset = offset; + this.update(); + + return this; + }, + + setIcon: function (icon) { + + this.options.icon = icon; + + if (this._map) { + this._initIcon(); + this.update(); + } + + if (this._popup) { + this.bindPopup(this._popup); + } + + return this; + }, + + update: function () { + if (this._icon) { + this._setPos(this._map.latLngToLayerPoint(this._latlng).round()); + } + return this; + }, + + _initIcon: function () { + var options = this.options, + map = this._map, + animation = (map.options.zoomAnimation && map.options.markerZoomAnimation), + classToAdd = animation ? 'leaflet-zoom-animated' : 'leaflet-zoom-hide'; + + var icon = options.icon.createIcon(this._icon), + addIcon = false; + + // if we're not reusing the icon, remove the old one and init new one + if (icon !== this._icon) { + if (this._icon) { + this._removeIcon(); + } + addIcon = true; + + if (options.title) { + icon.title = options.title; + } + + if (options.alt) { + icon.alt = options.alt; + } + } + + L.DomUtil.addClass(icon, classToAdd); + + if (options.keyboard) { + icon.tabIndex = '0'; + } + + this._icon = icon; + + this._initInteraction(); + + if (options.riseOnHover) { + L.DomEvent + .on(icon, 'mouseover', this._bringToFront, this) + .on(icon, 'mouseout', this._resetZIndex, this); + } + + var newShadow = options.icon.createShadow(this._shadow), + addShadow = false; + + if (newShadow !== this._shadow) { + this._removeShadow(); + addShadow = true; + } + + if (newShadow) { + L.DomUtil.addClass(newShadow, classToAdd); + } + this._shadow = newShadow; + + + if (options.opacity < 1) { + this._updateOpacity(); + } + + + var panes = this._map._panes; + + if (addIcon) { + panes.markerPane.appendChild(this._icon); + } + + if (newShadow && addShadow) { + panes.shadowPane.appendChild(this._shadow); + } + }, + + _removeIcon: function () { + if (this.options.riseOnHover) { + L.DomEvent + .off(this._icon, 'mouseover', this._bringToFront) + .off(this._icon, 'mouseout', this._resetZIndex); + } + + this._map._panes.markerPane.removeChild(this._icon); + + this._icon = null; + }, + + _removeShadow: function () { + if (this._shadow) { + this._map._panes.shadowPane.removeChild(this._shadow); + } + this._shadow = null; + }, + + _setPos: function (pos) { + L.DomUtil.setPosition(this._icon, pos); + + if (this._shadow) { + L.DomUtil.setPosition(this._shadow, pos); + } + + this._zIndex = pos.y + this.options.zIndexOffset; + + this._resetZIndex(); + }, + + _updateZIndex: function (offset) { + this._icon.style.zIndex = this._zIndex + offset; + }, + + _animateZoom: function (opt) { + var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round(); + + this._setPos(pos); + }, + + _initInteraction: function () { + + if (!this.options.clickable) { return; } + + // TODO refactor into something shared with Map/Path/etc. to DRY it up + + var icon = this._icon, + events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu']; + + L.DomUtil.addClass(icon, 'leaflet-clickable'); + L.DomEvent.on(icon, 'click', this._onMouseClick, this); + L.DomEvent.on(icon, 'keypress', this._onKeyPress, this); + + for (var i = 0; i < events.length; i++) { + L.DomEvent.on(icon, events[i], this._fireMouseEvent, this); + } + + if (L.Handler.MarkerDrag) { + this.dragging = new L.Handler.MarkerDrag(this); + + if (this.options.draggable) { + this.dragging.enable(); + } + } + }, + + _onMouseClick: function (e) { + var wasDragged = this.dragging && this.dragging.moved(); + + if (this.hasEventListeners(e.type) || wasDragged) { + L.DomEvent.stopPropagation(e); + } + + if (wasDragged) { return; } + + if ((!this.dragging || !this.dragging._enabled) && this._map.dragging && this._map.dragging.moved()) { return; } + + this.fire(e.type, { + originalEvent: e, + latlng: this._latlng + }); + }, + + _onKeyPress: function (e) { + if (e.keyCode === 13) { + this.fire('click', { + originalEvent: e, + latlng: this._latlng + }); + } + }, + + _fireMouseEvent: function (e) { + + this.fire(e.type, { + originalEvent: e, + latlng: this._latlng + }); + + // TODO proper custom event propagation + // this line will always be called if marker is in a FeatureGroup + if (e.type === 'contextmenu' && this.hasEventListeners(e.type)) { + L.DomEvent.preventDefault(e); + } + if (e.type !== 'mousedown') { + L.DomEvent.stopPropagation(e); + } else { + L.DomEvent.preventDefault(e); + } + }, + + setOpacity: function (opacity) { + this.options.opacity = opacity; + if (this._map) { + this._updateOpacity(); + } + + return this; + }, + + _updateOpacity: function () { + L.DomUtil.setOpacity(this._icon, this.options.opacity); + if (this._shadow) { + L.DomUtil.setOpacity(this._shadow, this.options.opacity); + } + }, + + _bringToFront: function () { + this._updateZIndex(this.options.riseOffset); + }, + + _resetZIndex: function () { + this._updateZIndex(0); + } +}); + +L.marker = function (latlng, options) { + return new L.Marker(latlng, options); +}; + + +/* + * L.DivIcon is a lightweight HTML-based icon class (as opposed to the image-based L.Icon) + * to use with L.Marker. + */ + +L.DivIcon = L.Icon.extend({ + options: { + iconSize: [12, 12], // also can be set through CSS + /* + iconAnchor: (Point) + popupAnchor: (Point) + html: (String) + bgPos: (Point) + */ + className: 'leaflet-div-icon', + html: false + }, + + createIcon: function (oldIcon) { + var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'), + options = this.options; + + if (options.html !== false) { + div.innerHTML = options.html; + } else { + div.innerHTML = ''; + } + + if (options.bgPos) { + div.style.backgroundPosition = + (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px'; + } + + this._setIconStyles(div, 'icon'); + return div; + }, + + createShadow: function () { + return null; + } +}); + +L.divIcon = function (options) { + return new L.DivIcon(options); +}; + + +/* + * L.Popup is used for displaying popups on the map. + */ + +L.Map.mergeOptions({ + closePopupOnClick: true +}); + +L.Popup = L.Class.extend({ + includes: L.Mixin.Events, + + options: { + minWidth: 50, + maxWidth: 300, + // maxHeight: null, + autoPan: true, + closeButton: true, + offset: [0, 7], + autoPanPadding: [5, 5], + // autoPanPaddingTopLeft: null, + // autoPanPaddingBottomRight: null, + keepInView: false, + className: '', + zoomAnimation: true + }, + + initialize: function (options, source) { + L.setOptions(this, options); + + this._source = source; + this._animated = L.Browser.any3d && this.options.zoomAnimation; + this._isOpen = false; + }, + + onAdd: function (map) { + this._map = map; + + if (!this._container) { + this._initLayout(); + } + + var animFade = map.options.fadeAnimation; + + if (animFade) { + L.DomUtil.setOpacity(this._container, 0); + } + map._panes.popupPane.appendChild(this._container); + + map.on(this._getEvents(), this); + + this.update(); + + if (animFade) { + L.DomUtil.setOpacity(this._container, 1); + } + + this.fire('open'); + + map.fire('popupopen', {popup: this}); + + if (this._source) { + this._source.fire('popupopen', {popup: this}); + } + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + openOn: function (map) { + map.openPopup(this); + return this; + }, + + onRemove: function (map) { + map._panes.popupPane.removeChild(this._container); + + L.Util.falseFn(this._container.offsetWidth); // force reflow + + map.off(this._getEvents(), this); + + if (map.options.fadeAnimation) { + L.DomUtil.setOpacity(this._container, 0); + } + + this._map = null; + + this.fire('close'); + + map.fire('popupclose', {popup: this}); + + if (this._source) { + this._source.fire('popupclose', {popup: this}); + } + }, + + getLatLng: function () { + return this._latlng; + }, + + setLatLng: function (latlng) { + this._latlng = L.latLng(latlng); + if (this._map) { + this._updatePosition(); + this._adjustPan(); + } + return this; + }, + + getContent: function () { + return this._content; + }, + + setContent: function (content) { + this._content = content; + this.update(); + return this; + }, + + update: function () { + if (!this._map) { return; } + + this._container.style.visibility = 'hidden'; + + this._updateContent(); + this._updateLayout(); + this._updatePosition(); + + this._container.style.visibility = ''; + + this._adjustPan(); + }, + + _getEvents: function () { + var events = { + viewreset: this._updatePosition + }; + + if (this._animated) { + events.zoomanim = this._zoomAnimation; + } + if ('closeOnClick' in this.options ? this.options.closeOnClick : this._map.options.closePopupOnClick) { + events.preclick = this._close; + } + if (this.options.keepInView) { + events.moveend = this._adjustPan; + } + + return events; + }, + + _close: function () { + if (this._map) { + this._map.closePopup(this); + } + }, + + _initLayout: function () { + var prefix = 'leaflet-popup', + containerClass = prefix + ' ' + this.options.className + ' leaflet-zoom-' + + (this._animated ? 'animated' : 'hide'), + container = this._container = L.DomUtil.create('div', containerClass), + closeButton; + + if (this.options.closeButton) { + closeButton = this._closeButton = + L.DomUtil.create('a', prefix + '-close-button', container); + closeButton.href = '#close'; + closeButton.innerHTML = '×'; + L.DomEvent.disableClickPropagation(closeButton); + + L.DomEvent.on(closeButton, 'click', this._onCloseButtonClick, this); + } + + var wrapper = this._wrapper = + L.DomUtil.create('div', prefix + '-content-wrapper', container); + L.DomEvent.disableClickPropagation(wrapper); + + this._contentNode = L.DomUtil.create('div', prefix + '-content', wrapper); + + L.DomEvent.disableScrollPropagation(this._contentNode); + L.DomEvent.on(wrapper, 'contextmenu', L.DomEvent.stopPropagation); + + this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container); + this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer); + }, + + _updateContent: function () { + if (!this._content) { return; } + + if (typeof this._content === 'string') { + this._contentNode.innerHTML = this._content; + } else { + while (this._contentNode.hasChildNodes()) { + this._contentNode.removeChild(this._contentNode.firstChild); + } + this._contentNode.appendChild(this._content); + } + this.fire('contentupdate'); + }, + + _updateLayout: function () { + var container = this._contentNode, + style = container.style; + + style.width = ''; + style.whiteSpace = 'nowrap'; + + var width = container.offsetWidth; + width = Math.min(width, this.options.maxWidth); + width = Math.max(width, this.options.minWidth); + + style.width = (width + 1) + 'px'; + style.whiteSpace = ''; + + style.height = ''; + + var height = container.offsetHeight, + maxHeight = this.options.maxHeight, + scrolledClass = 'leaflet-popup-scrolled'; + + if (maxHeight && height > maxHeight) { + style.height = maxHeight + 'px'; + L.DomUtil.addClass(container, scrolledClass); + } else { + L.DomUtil.removeClass(container, scrolledClass); + } + + this._containerWidth = this._container.offsetWidth; + }, + + _updatePosition: function () { + if (!this._map) { return; } + + var pos = this._map.latLngToLayerPoint(this._latlng), + animated = this._animated, + offset = L.point(this.options.offset); + + if (animated) { + L.DomUtil.setPosition(this._container, pos); + } + + this._containerBottom = -offset.y - (animated ? 0 : pos.y); + this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (animated ? 0 : pos.x); + + // bottom position the popup in case the height of the popup changes (images loading etc) + this._container.style.bottom = this._containerBottom + 'px'; + this._container.style.left = this._containerLeft + 'px'; + }, + + _zoomAnimation: function (opt) { + var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center); + + L.DomUtil.setPosition(this._container, pos); + }, + + _adjustPan: function () { + if (!this.options.autoPan) { return; } + + var map = this._map, + containerHeight = this._container.offsetHeight, + containerWidth = this._containerWidth, + + layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom); + + if (this._animated) { + layerPos._add(L.DomUtil.getPosition(this._container)); + } + + var containerPos = map.layerPointToContainerPoint(layerPos), + padding = L.point(this.options.autoPanPadding), + paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding), + paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding), + size = map.getSize(), + dx = 0, + dy = 0; + + if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right + dx = containerPos.x + containerWidth - size.x + paddingBR.x; + } + if (containerPos.x - dx - paddingTL.x < 0) { // left + dx = containerPos.x - paddingTL.x; + } + if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom + dy = containerPos.y + containerHeight - size.y + paddingBR.y; + } + if (containerPos.y - dy - paddingTL.y < 0) { // top + dy = containerPos.y - paddingTL.y; + } + + if (dx || dy) { + map + .fire('autopanstart') + .panBy([dx, dy]); + } + }, + + _onCloseButtonClick: function (e) { + this._close(); + L.DomEvent.stop(e); + } +}); + +L.popup = function (options, source) { + return new L.Popup(options, source); +}; + + +L.Map.include({ + openPopup: function (popup, latlng, options) { // (Popup) or (String || HTMLElement, LatLng[, Object]) + this.closePopup(); + + if (!(popup instanceof L.Popup)) { + var content = popup; + + popup = new L.Popup(options) + .setLatLng(latlng) + .setContent(content); + } + popup._isOpen = true; + + this._popup = popup; + return this.addLayer(popup); + }, + + closePopup: function (popup) { + if (!popup || popup === this._popup) { + popup = this._popup; + this._popup = null; + } + if (popup) { + this.removeLayer(popup); + popup._isOpen = false; + } + return this; + } +}); + + +/* + * Popup extension to L.Marker, adding popup-related methods. + */ + +L.Marker.include({ + openPopup: function () { + if (this._popup && this._map && !this._map.hasLayer(this._popup)) { + this._popup.setLatLng(this._latlng); + this._map.openPopup(this._popup); + } + + return this; + }, + + closePopup: function () { + if (this._popup) { + this._popup._close(); + } + return this; + }, + + togglePopup: function () { + if (this._popup) { + if (this._popup._isOpen) { + this.closePopup(); + } else { + this.openPopup(); + } + } + return this; + }, + + bindPopup: function (content, options) { + var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]); + + anchor = anchor.add(L.Popup.prototype.options.offset); + + if (options && options.offset) { + anchor = anchor.add(options.offset); + } + + options = L.extend({offset: anchor}, options); + + if (!this._popupHandlersAdded) { + this + .on('click', this.togglePopup, this) + .on('remove', this.closePopup, this) + .on('move', this._movePopup, this); + this._popupHandlersAdded = true; + } + + if (content instanceof L.Popup) { + L.setOptions(content, options); + this._popup = content; + content._source = this; + } else { + this._popup = new L.Popup(options, this) + .setContent(content); + } + + return this; + }, + + setPopupContent: function (content) { + if (this._popup) { + this._popup.setContent(content); + } + return this; + }, + + unbindPopup: function () { + if (this._popup) { + this._popup = null; + this + .off('click', this.togglePopup, this) + .off('remove', this.closePopup, this) + .off('move', this._movePopup, this); + this._popupHandlersAdded = false; + } + return this; + }, + + getPopup: function () { + return this._popup; + }, + + _movePopup: function (e) { + this._popup.setLatLng(e.latlng); + } +}); + + +/* + * L.LayerGroup is a class to combine several layers into one so that + * you can manipulate the group (e.g. add/remove it) as one layer. + */ + +L.LayerGroup = L.Class.extend({ + initialize: function (layers) { + this._layers = {}; + + var i, len; + + if (layers) { + for (i = 0, len = layers.length; i < len; i++) { + this.addLayer(layers[i]); + } + } + }, + + addLayer: function (layer) { + var id = this.getLayerId(layer); + + this._layers[id] = layer; + + if (this._map) { + this._map.addLayer(layer); + } + + return this; + }, + + removeLayer: function (layer) { + var id = layer in this._layers ? layer : this.getLayerId(layer); + + if (this._map && this._layers[id]) { + this._map.removeLayer(this._layers[id]); + } + + delete this._layers[id]; + + return this; + }, + + hasLayer: function (layer) { + if (!layer) { return false; } + + return (layer in this._layers || this.getLayerId(layer) in this._layers); + }, + + clearLayers: function () { + this.eachLayer(this.removeLayer, this); + return this; + }, + + invoke: function (methodName) { + var args = Array.prototype.slice.call(arguments, 1), + i, layer; + + for (i in this._layers) { + layer = this._layers[i]; + + if (layer[methodName]) { + layer[methodName].apply(layer, args); + } + } + + return this; + }, + + onAdd: function (map) { + this._map = map; + this.eachLayer(map.addLayer, map); + }, + + onRemove: function (map) { + this.eachLayer(map.removeLayer, map); + this._map = null; + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context, this._layers[i]); + } + return this; + }, + + getLayer: function (id) { + return this._layers[id]; + }, + + getLayers: function () { + var layers = []; + + for (var i in this._layers) { + layers.push(this._layers[i]); + } + return layers; + }, + + setZIndex: function (zIndex) { + return this.invoke('setZIndex', zIndex); + }, + + getLayerId: function (layer) { + return L.stamp(layer); + } +}); + +L.layerGroup = function (layers) { + return new L.LayerGroup(layers); +}; + + +/* + * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods + * shared between a group of interactive layers (like vectors or markers). + */ + +L.FeatureGroup = L.LayerGroup.extend({ + includes: L.Mixin.Events, + + statics: { + EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose' + }, + + addLayer: function (layer) { + if (this.hasLayer(layer)) { + return this; + } + + if ('on' in layer) { + layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this); + } + + L.LayerGroup.prototype.addLayer.call(this, layer); + + if (this._popupContent && layer.bindPopup) { + layer.bindPopup(this._popupContent, this._popupOptions); + } + + return this.fire('layeradd', {layer: layer}); + }, + + removeLayer: function (layer) { + if (!this.hasLayer(layer)) { + return this; + } + if (layer in this._layers) { + layer = this._layers[layer]; + } + + if ('off' in layer) { + layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this); + } + + L.LayerGroup.prototype.removeLayer.call(this, layer); + + if (this._popupContent) { + this.invoke('unbindPopup'); + } + + return this.fire('layerremove', {layer: layer}); + }, + + bindPopup: function (content, options) { + this._popupContent = content; + this._popupOptions = options; + return this.invoke('bindPopup', content, options); + }, + + openPopup: function (latlng) { + // open popup on the first layer + for (var id in this._layers) { + this._layers[id].openPopup(latlng); + break; + } + return this; + }, + + setStyle: function (style) { + return this.invoke('setStyle', style); + }, + + bringToFront: function () { + return this.invoke('bringToFront'); + }, + + bringToBack: function () { + return this.invoke('bringToBack'); + }, + + getBounds: function () { + var bounds = new L.LatLngBounds(); + + this.eachLayer(function (layer) { + bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds()); + }); + + return bounds; + }, + + _propagateEvent: function (e) { + e = L.extend({ + layer: e.target, + target: this + }, e); + this.fire(e.type, e); + } +}); + +L.featureGroup = function (layers) { + return new L.FeatureGroup(layers); +}; + + +/* + * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc. + */ + +L.Path = L.Class.extend({ + includes: [L.Mixin.Events], + + statics: { + // how much to extend the clip area around the map view + // (relative to its size, e.g. 0.5 is half the screen in each direction) + // set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is) + CLIP_PADDING: (function () { + var max = L.Browser.mobile ? 1280 : 2000, + target = (max / Math.max(window.outerWidth, window.outerHeight) - 1) / 2; + return Math.max(0, Math.min(0.5, target)); + })() + }, + + options: { + stroke: true, + color: '#0033ff', + dashArray: null, + lineCap: null, + lineJoin: null, + weight: 5, + opacity: 0.5, + + fill: false, + fillColor: null, //same as color by default + fillOpacity: 0.2, + + clickable: true + }, + + initialize: function (options) { + L.setOptions(this, options); + }, + + onAdd: function (map) { + this._map = map; + + if (!this._container) { + this._initElements(); + this._initEvents(); + } + + this.projectLatlngs(); + this._updatePath(); + + if (this._container) { + this._map._pathRoot.appendChild(this._container); + } + + this.fire('add'); + + map.on({ + 'viewreset': this.projectLatlngs, + 'moveend': this._updatePath + }, this); + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + map._pathRoot.removeChild(this._container); + + // Need to fire remove event before we set _map to null as the event hooks might need the object + this.fire('remove'); + this._map = null; + + if (L.Browser.vml) { + this._container = null; + this._stroke = null; + this._fill = null; + } + + map.off({ + 'viewreset': this.projectLatlngs, + 'moveend': this._updatePath + }, this); + }, + + projectLatlngs: function () { + // do all projection stuff here + }, + + setStyle: function (style) { + L.setOptions(this, style); + + if (this._container) { + this._updateStyle(); + } + + return this; + }, + + redraw: function () { + if (this._map) { + this.projectLatlngs(); + this._updatePath(); + } + return this; + } +}); + +L.Map.include({ + _updatePathViewport: function () { + var p = L.Path.CLIP_PADDING, + size = this.getSize(), + panePos = L.DomUtil.getPosition(this._mapPane), + min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()), + max = min.add(size.multiplyBy(1 + p * 2)._round()); + + this._pathViewport = new L.Bounds(min, max); + } +}); + + +/* + * Extends L.Path with SVG-specific rendering code. + */ + +L.Path.SVG_NS = 'http://www.w3.org/2000/svg'; + +L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect); + +L.Path = L.Path.extend({ + statics: { + SVG: L.Browser.svg + }, + + bringToFront: function () { + var root = this._map._pathRoot, + path = this._container; + + if (path && root.lastChild !== path) { + root.appendChild(path); + } + return this; + }, + + bringToBack: function () { + var root = this._map._pathRoot, + path = this._container, + first = root.firstChild; + + if (path && first !== path) { + root.insertBefore(path, first); + } + return this; + }, + + getPathString: function () { + // form path string here + }, + + _createElement: function (name) { + return document.createElementNS(L.Path.SVG_NS, name); + }, + + _initElements: function () { + this._map._initPathRoot(); + this._initPath(); + this._initStyle(); + }, + + _initPath: function () { + this._container = this._createElement('g'); + + this._path = this._createElement('path'); + + if (this.options.className) { + L.DomUtil.addClass(this._path, this.options.className); + } + + this._container.appendChild(this._path); + }, + + _initStyle: function () { + if (this.options.stroke) { + this._path.setAttribute('stroke-linejoin', 'round'); + this._path.setAttribute('stroke-linecap', 'round'); + } + if (this.options.fill) { + this._path.setAttribute('fill-rule', 'evenodd'); + } + if (this.options.pointerEvents) { + this._path.setAttribute('pointer-events', this.options.pointerEvents); + } + if (!this.options.clickable && !this.options.pointerEvents) { + this._path.setAttribute('pointer-events', 'none'); + } + this._updateStyle(); + }, + + _updateStyle: function () { + if (this.options.stroke) { + this._path.setAttribute('stroke', this.options.color); + this._path.setAttribute('stroke-opacity', this.options.opacity); + this._path.setAttribute('stroke-width', this.options.weight); + if (this.options.dashArray) { + this._path.setAttribute('stroke-dasharray', this.options.dashArray); + } else { + this._path.removeAttribute('stroke-dasharray'); + } + if (this.options.lineCap) { + this._path.setAttribute('stroke-linecap', this.options.lineCap); + } + if (this.options.lineJoin) { + this._path.setAttribute('stroke-linejoin', this.options.lineJoin); + } + } else { + this._path.setAttribute('stroke', 'none'); + } + if (this.options.fill) { + this._path.setAttribute('fill', this.options.fillColor || this.options.color); + this._path.setAttribute('fill-opacity', this.options.fillOpacity); + } else { + this._path.setAttribute('fill', 'none'); + } + }, + + _updatePath: function () { + var str = this.getPathString(); + if (!str) { + // fix webkit empty string parsing bug + str = 'M0 0'; + } + this._path.setAttribute('d', str); + }, + + // TODO remove duplication with L.Map + _initEvents: function () { + if (this.options.clickable) { + if (L.Browser.svg || !L.Browser.vml) { + L.DomUtil.addClass(this._path, 'leaflet-clickable'); + } + + L.DomEvent.on(this._container, 'click', this._onMouseClick, this); + + var events = ['dblclick', 'mousedown', 'mouseover', + 'mouseout', 'mousemove', 'contextmenu']; + for (var i = 0; i < events.length; i++) { + L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this); + } + } + }, + + _onMouseClick: function (e) { + if (this._map.dragging && this._map.dragging.moved()) { return; } + + this._fireMouseEvent(e); + }, + + _fireMouseEvent: function (e) { + if (!this._map || !this.hasEventListeners(e.type)) { return; } + + var map = this._map, + containerPoint = map.mouseEventToContainerPoint(e), + layerPoint = map.containerPointToLayerPoint(containerPoint), + latlng = map.layerPointToLatLng(layerPoint); + + this.fire(e.type, { + latlng: latlng, + layerPoint: layerPoint, + containerPoint: containerPoint, + originalEvent: e + }); + + if (e.type === 'contextmenu') { + L.DomEvent.preventDefault(e); + } + if (e.type !== 'mousemove') { + L.DomEvent.stopPropagation(e); + } + } +}); + +L.Map.include({ + _initPathRoot: function () { + if (!this._pathRoot) { + this._pathRoot = L.Path.prototype._createElement('svg'); + this._panes.overlayPane.appendChild(this._pathRoot); + + if (this.options.zoomAnimation && L.Browser.any3d) { + L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-animated'); + + this.on({ + 'zoomanim': this._animatePathZoom, + 'zoomend': this._endPathZoom + }); + } else { + L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-hide'); + } + + this.on('moveend', this._updateSvgViewport); + this._updateSvgViewport(); + } + }, + + _animatePathZoom: function (e) { + var scale = this.getZoomScale(e.zoom), + offset = this._getCenterOffset(e.center)._multiplyBy(-scale)._add(this._pathViewport.min); + + this._pathRoot.style[L.DomUtil.TRANSFORM] = + L.DomUtil.getTranslateString(offset) + ' scale(' + scale + ') '; + + this._pathZooming = true; + }, + + _endPathZoom: function () { + this._pathZooming = false; + }, + + _updateSvgViewport: function () { + + if (this._pathZooming) { + // Do not update SVGs while a zoom animation is going on otherwise the animation will break. + // When the zoom animation ends we will be updated again anyway + // This fixes the case where you do a momentum move and zoom while the move is still ongoing. + return; + } + + this._updatePathViewport(); + + var vp = this._pathViewport, + min = vp.min, + max = vp.max, + width = max.x - min.x, + height = max.y - min.y, + root = this._pathRoot, + pane = this._panes.overlayPane; + + // Hack to make flicker on drag end on mobile webkit less irritating + if (L.Browser.mobileWebkit) { + pane.removeChild(root); + } + + L.DomUtil.setPosition(root, min); + root.setAttribute('width', width); + root.setAttribute('height', height); + root.setAttribute('viewBox', [min.x, min.y, width, height].join(' ')); + + if (L.Browser.mobileWebkit) { + pane.appendChild(root); + } + } +}); + + +/* + * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods. + */ + +L.Path.include({ + + bindPopup: function (content, options) { + + if (content instanceof L.Popup) { + this._popup = content; + } else { + if (!this._popup || options) { + this._popup = new L.Popup(options, this); + } + this._popup.setContent(content); + } + + if (!this._popupHandlersAdded) { + this + .on('click', this._openPopup, this) + .on('remove', this.closePopup, this); + + this._popupHandlersAdded = true; + } + + return this; + }, + + unbindPopup: function () { + if (this._popup) { + this._popup = null; + this + .off('click', this._openPopup) + .off('remove', this.closePopup); + + this._popupHandlersAdded = false; + } + return this; + }, + + openPopup: function (latlng) { + + if (this._popup) { + // open the popup from one of the path's points if not specified + latlng = latlng || this._latlng || + this._latlngs[Math.floor(this._latlngs.length / 2)]; + + this._openPopup({latlng: latlng}); + } + + return this; + }, + + closePopup: function () { + if (this._popup) { + this._popup._close(); + } + return this; + }, + + _openPopup: function (e) { + this._popup.setLatLng(e.latlng); + this._map.openPopup(this._popup); + } +}); + + +/* + * Vector rendering for IE6-8 through VML. + * Thanks to Dmitry Baranovsky and his Raphael library for inspiration! + */ + +L.Browser.vml = !L.Browser.svg && (function () { + try { + var div = document.createElement('div'); + div.innerHTML = ''; + + var shape = div.firstChild; + shape.style.behavior = 'url(#default#VML)'; + + return shape && (typeof shape.adj === 'object'); + + } catch (e) { + return false; + } +}()); + +L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({ + statics: { + VML: true, + CLIP_PADDING: 0.02 + }, + + _createElement: (function () { + try { + document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml'); + return function (name) { + return document.createElement(''); + }; + } catch (e) { + return function (name) { + return document.createElement( + '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">'); + }; + } + }()), + + _initPath: function () { + var container = this._container = this._createElement('shape'); + + L.DomUtil.addClass(container, 'leaflet-vml-shape' + + (this.options.className ? ' ' + this.options.className : '')); + + if (this.options.clickable) { + L.DomUtil.addClass(container, 'leaflet-clickable'); + } + + container.coordsize = '1 1'; + + this._path = this._createElement('path'); + container.appendChild(this._path); + + this._map._pathRoot.appendChild(container); + }, + + _initStyle: function () { + this._updateStyle(); + }, + + _updateStyle: function () { + var stroke = this._stroke, + fill = this._fill, + options = this.options, + container = this._container; + + container.stroked = options.stroke; + container.filled = options.fill; + + if (options.stroke) { + if (!stroke) { + stroke = this._stroke = this._createElement('stroke'); + stroke.endcap = 'round'; + container.appendChild(stroke); + } + stroke.weight = options.weight + 'px'; + stroke.color = options.color; + stroke.opacity = options.opacity; + + if (options.dashArray) { + stroke.dashStyle = L.Util.isArray(options.dashArray) ? + options.dashArray.join(' ') : + options.dashArray.replace(/( *, *)/g, ' '); + } else { + stroke.dashStyle = ''; + } + if (options.lineCap) { + stroke.endcap = options.lineCap.replace('butt', 'flat'); + } + if (options.lineJoin) { + stroke.joinstyle = options.lineJoin; + } + + } else if (stroke) { + container.removeChild(stroke); + this._stroke = null; + } + + if (options.fill) { + if (!fill) { + fill = this._fill = this._createElement('fill'); + container.appendChild(fill); + } + fill.color = options.fillColor || options.color; + fill.opacity = options.fillOpacity; + + } else if (fill) { + container.removeChild(fill); + this._fill = null; + } + }, + + _updatePath: function () { + var style = this._container.style; + + style.display = 'none'; + this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug + style.display = ''; + } +}); + +L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : { + _initPathRoot: function () { + if (this._pathRoot) { return; } + + var root = this._pathRoot = document.createElement('div'); + root.className = 'leaflet-vml-container'; + this._panes.overlayPane.appendChild(root); + + this.on('moveend', this._updatePathViewport); + this._updatePathViewport(); + } +}); + + +/* + * Vector rendering for all browsers that support canvas. + */ + +L.Browser.canvas = (function () { + return !!document.createElement('canvas').getContext; +}()); + +L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({ + statics: { + //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value + CANVAS: true, + SVG: false + }, + + redraw: function () { + if (this._map) { + this.projectLatlngs(); + this._requestUpdate(); + } + return this; + }, + + setStyle: function (style) { + L.setOptions(this, style); + + if (this._map) { + this._updateStyle(); + this._requestUpdate(); + } + return this; + }, + + onRemove: function (map) { + map + .off('viewreset', this.projectLatlngs, this) + .off('moveend', this._updatePath, this); + + if (this.options.clickable) { + this._map.off('click', this._onClick, this); + this._map.off('mousemove', this._onMouseMove, this); + } + + this._requestUpdate(); + + this.fire('remove'); + this._map = null; + }, + + _requestUpdate: function () { + if (this._map && !L.Path._updateRequest) { + L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map); + } + }, + + _fireMapMoveEnd: function () { + L.Path._updateRequest = null; + this.fire('moveend'); + }, + + _initElements: function () { + this._map._initPathRoot(); + this._ctx = this._map._canvasCtx; + }, + + _updateStyle: function () { + var options = this.options; + + if (options.stroke) { + this._ctx.lineWidth = options.weight; + this._ctx.strokeStyle = options.color; + } + if (options.fill) { + this._ctx.fillStyle = options.fillColor || options.color; + } + + if (options.lineCap) { + this._ctx.lineCap = options.lineCap; + } + if (options.lineJoin) { + this._ctx.lineJoin = options.lineJoin; + } + }, + + _drawPath: function () { + var i, j, len, len2, point, drawMethod; + + this._ctx.beginPath(); + + for (i = 0, len = this._parts.length; i < len; i++) { + for (j = 0, len2 = this._parts[i].length; j < len2; j++) { + point = this._parts[i][j]; + drawMethod = (j === 0 ? 'move' : 'line') + 'To'; + + this._ctx[drawMethod](point.x, point.y); + } + // TODO refactor ugly hack + if (this instanceof L.Polygon) { + this._ctx.closePath(); + } + } + }, + + _checkIfEmpty: function () { + return !this._parts.length; + }, + + _updatePath: function () { + if (this._checkIfEmpty()) { return; } + + var ctx = this._ctx, + options = this.options; + + this._drawPath(); + ctx.save(); + this._updateStyle(); + + if (options.fill) { + ctx.globalAlpha = options.fillOpacity; + ctx.fill(options.fillRule || 'evenodd'); + } + + if (options.stroke) { + ctx.globalAlpha = options.opacity; + ctx.stroke(); + } + + ctx.restore(); + + // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature + }, + + _initEvents: function () { + if (this.options.clickable) { + this._map.on('mousemove', this._onMouseMove, this); + this._map.on('click dblclick contextmenu', this._fireMouseEvent, this); + } + }, + + _fireMouseEvent: function (e) { + if (this._containsPoint(e.layerPoint)) { + this.fire(e.type, e); + } + }, + + _onMouseMove: function (e) { + if (!this._map || this._map._animatingZoom) { return; } + + // TODO don't do on each move + if (this._containsPoint(e.layerPoint)) { + this._ctx.canvas.style.cursor = 'pointer'; + this._mouseInside = true; + this.fire('mouseover', e); + + } else if (this._mouseInside) { + this._ctx.canvas.style.cursor = ''; + this._mouseInside = false; + this.fire('mouseout', e); + } + } +}); + +L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : { + _initPathRoot: function () { + var root = this._pathRoot, + ctx; + + if (!root) { + root = this._pathRoot = document.createElement('canvas'); + root.style.position = 'absolute'; + ctx = this._canvasCtx = root.getContext('2d'); + + ctx.lineCap = 'round'; + ctx.lineJoin = 'round'; + + this._panes.overlayPane.appendChild(root); + + if (this.options.zoomAnimation) { + this._pathRoot.className = 'leaflet-zoom-animated'; + this.on('zoomanim', this._animatePathZoom); + this.on('zoomend', this._endPathZoom); + } + this.on('moveend', this._updateCanvasViewport); + this._updateCanvasViewport(); + } + }, + + _updateCanvasViewport: function () { + // don't redraw while zooming. See _updateSvgViewport for more details + if (this._pathZooming) { return; } + this._updatePathViewport(); + + var vp = this._pathViewport, + min = vp.min, + size = vp.max.subtract(min), + root = this._pathRoot; + + //TODO check if this works properly on mobile webkit + L.DomUtil.setPosition(root, min); + root.width = size.x; + root.height = size.y; + root.getContext('2d').translate(-min.x, -min.y); + } +}); + + +/* + * L.LineUtil contains different utility functions for line segments + * and polylines (clipping, simplification, distances, etc.) + */ + +/*jshint bitwise:false */ // allow bitwise operations for this file + +L.LineUtil = { + + // Simplify polyline with vertex reduction and Douglas-Peucker simplification. + // Improves rendering performance dramatically by lessening the number of points to draw. + + simplify: function (/*Point[]*/ points, /*Number*/ tolerance) { + if (!tolerance || !points.length) { + return points.slice(); + } + + var sqTolerance = tolerance * tolerance; + + // stage 1: vertex reduction + points = this._reducePoints(points, sqTolerance); + + // stage 2: Douglas-Peucker simplification + points = this._simplifyDP(points, sqTolerance); + + return points; + }, + + // distance from a point to a segment between two points + pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) { + return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true)); + }, + + closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) { + return this._sqClosestPointOnSegment(p, p1, p2); + }, + + // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm + _simplifyDP: function (points, sqTolerance) { + + var len = points.length, + ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array, + markers = new ArrayConstructor(len); + + markers[0] = markers[len - 1] = 1; + + this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1); + + var i, + newPoints = []; + + for (i = 0; i < len; i++) { + if (markers[i]) { + newPoints.push(points[i]); + } + } + + return newPoints; + }, + + _simplifyDPStep: function (points, markers, sqTolerance, first, last) { + + var maxSqDist = 0, + index, i, sqDist; + + for (i = first + 1; i <= last - 1; i++) { + sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true); + + if (sqDist > maxSqDist) { + index = i; + maxSqDist = sqDist; + } + } + + if (maxSqDist > sqTolerance) { + markers[index] = 1; + + this._simplifyDPStep(points, markers, sqTolerance, first, index); + this._simplifyDPStep(points, markers, sqTolerance, index, last); + } + }, + + // reduce points that are too close to each other to a single point + _reducePoints: function (points, sqTolerance) { + var reducedPoints = [points[0]]; + + for (var i = 1, prev = 0, len = points.length; i < len; i++) { + if (this._sqDist(points[i], points[prev]) > sqTolerance) { + reducedPoints.push(points[i]); + prev = i; + } + } + if (prev < len - 1) { + reducedPoints.push(points[len - 1]); + } + return reducedPoints; + }, + + // Cohen-Sutherland line clipping algorithm. + // Used to avoid rendering parts of a polyline that are not currently visible. + + clipSegment: function (a, b, bounds, useLastCode) { + var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds), + codeB = this._getBitCode(b, bounds), + + codeOut, p, newCode; + + // save 2nd code to avoid calculating it on the next segment + this._lastCode = codeB; + + while (true) { + // if a,b is inside the clip window (trivial accept) + if (!(codeA | codeB)) { + return [a, b]; + // if a,b is outside the clip window (trivial reject) + } else if (codeA & codeB) { + return false; + // other cases + } else { + codeOut = codeA || codeB; + p = this._getEdgeIntersection(a, b, codeOut, bounds); + newCode = this._getBitCode(p, bounds); + + if (codeOut === codeA) { + a = p; + codeA = newCode; + } else { + b = p; + codeB = newCode; + } + } + } + }, + + _getEdgeIntersection: function (a, b, code, bounds) { + var dx = b.x - a.x, + dy = b.y - a.y, + min = bounds.min, + max = bounds.max; + + if (code & 8) { // top + return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y); + } else if (code & 4) { // bottom + return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y); + } else if (code & 2) { // right + return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx); + } else if (code & 1) { // left + return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx); + } + }, + + _getBitCode: function (/*Point*/ p, bounds) { + var code = 0; + + if (p.x < bounds.min.x) { // left + code |= 1; + } else if (p.x > bounds.max.x) { // right + code |= 2; + } + if (p.y < bounds.min.y) { // bottom + code |= 4; + } else if (p.y > bounds.max.y) { // top + code |= 8; + } + + return code; + }, + + // square distance (to avoid unnecessary Math.sqrt calls) + _sqDist: function (p1, p2) { + var dx = p2.x - p1.x, + dy = p2.y - p1.y; + return dx * dx + dy * dy; + }, + + // return closest point on segment or distance to that point + _sqClosestPointOnSegment: function (p, p1, p2, sqDist) { + var x = p1.x, + y = p1.y, + dx = p2.x - x, + dy = p2.y - y, + dot = dx * dx + dy * dy, + t; + + if (dot > 0) { + t = ((p.x - x) * dx + (p.y - y) * dy) / dot; + + if (t > 1) { + x = p2.x; + y = p2.y; + } else if (t > 0) { + x += dx * t; + y += dy * t; + } + } + + dx = p.x - x; + dy = p.y - y; + + return sqDist ? dx * dx + dy * dy : new L.Point(x, y); + } +}; + + +/* + * L.Polyline is used to display polylines on a map. + */ + +L.Polyline = L.Path.extend({ + initialize: function (latlngs, options) { + L.Path.prototype.initialize.call(this, options); + + this._latlngs = this._convertLatLngs(latlngs); + }, + + options: { + // how much to simplify the polyline on each zoom level + // more = better performance and smoother look, less = more accurate + smoothFactor: 1.0, + noClip: false + }, + + projectLatlngs: function () { + this._originalPoints = []; + + for (var i = 0, len = this._latlngs.length; i < len; i++) { + this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]); + } + }, + + getPathString: function () { + for (var i = 0, len = this._parts.length, str = ''; i < len; i++) { + str += this._getPathPartStr(this._parts[i]); + } + return str; + }, + + getLatLngs: function () { + return this._latlngs; + }, + + setLatLngs: function (latlngs) { + this._latlngs = this._convertLatLngs(latlngs); + return this.redraw(); + }, + + addLatLng: function (latlng) { + this._latlngs.push(L.latLng(latlng)); + return this.redraw(); + }, + + spliceLatLngs: function () { // (Number index, Number howMany) + var removed = [].splice.apply(this._latlngs, arguments); + this._convertLatLngs(this._latlngs, true); + this.redraw(); + return removed; + }, + + closestLayerPoint: function (p) { + var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null; + + for (var j = 0, jLen = parts.length; j < jLen; j++) { + var points = parts[j]; + for (var i = 1, len = points.length; i < len; i++) { + p1 = points[i - 1]; + p2 = points[i]; + var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true); + if (sqDist < minDistance) { + minDistance = sqDist; + minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2); + } + } + } + if (minPoint) { + minPoint.distance = Math.sqrt(minDistance); + } + return minPoint; + }, + + getBounds: function () { + return new L.LatLngBounds(this.getLatLngs()); + }, + + _convertLatLngs: function (latlngs, overwrite) { + var i, len, target = overwrite ? latlngs : []; + + for (i = 0, len = latlngs.length; i < len; i++) { + if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') { + return; + } + target[i] = L.latLng(latlngs[i]); + } + return target; + }, + + _initEvents: function () { + L.Path.prototype._initEvents.call(this); + }, + + _getPathPartStr: function (points) { + var round = L.Path.VML; + + for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) { + p = points[j]; + if (round) { + p._round(); + } + str += (j ? 'L' : 'M') + p.x + ' ' + p.y; + } + return str; + }, + + _clipPoints: function () { + var points = this._originalPoints, + len = points.length, + i, k, segment; + + if (this.options.noClip) { + this._parts = [points]; + return; + } + + this._parts = []; + + var parts = this._parts, + vp = this._map._pathViewport, + lu = L.LineUtil; + + for (i = 0, k = 0; i < len - 1; i++) { + segment = lu.clipSegment(points[i], points[i + 1], vp, i); + if (!segment) { + continue; + } + + parts[k] = parts[k] || []; + parts[k].push(segment[0]); + + // if segment goes out of screen, or it's the last one, it's the end of the line part + if ((segment[1] !== points[i + 1]) || (i === len - 2)) { + parts[k].push(segment[1]); + k++; + } + } + }, + + // simplify each clipped part of the polyline + _simplifyPoints: function () { + var parts = this._parts, + lu = L.LineUtil; + + for (var i = 0, len = parts.length; i < len; i++) { + parts[i] = lu.simplify(parts[i], this.options.smoothFactor); + } + }, + + _updatePath: function () { + if (!this._map) { return; } + + this._clipPoints(); + this._simplifyPoints(); + + L.Path.prototype._updatePath.call(this); + } +}); + +L.polyline = function (latlngs, options) { + return new L.Polyline(latlngs, options); +}; + + +/* + * L.PolyUtil contains utility functions for polygons (clipping, etc.). + */ + +/*jshint bitwise:false */ // allow bitwise operations here + +L.PolyUtil = {}; + +/* + * Sutherland-Hodgeman polygon clipping algorithm. + * Used to avoid rendering parts of a polygon that are not currently visible. + */ +L.PolyUtil.clipPolygon = function (points, bounds) { + var clippedPoints, + edges = [1, 4, 2, 8], + i, j, k, + a, b, + len, edge, p, + lu = L.LineUtil; + + for (i = 0, len = points.length; i < len; i++) { + points[i]._code = lu._getBitCode(points[i], bounds); + } + + // for each edge (left, bottom, right, top) + for (k = 0; k < 4; k++) { + edge = edges[k]; + clippedPoints = []; + + for (i = 0, len = points.length, j = len - 1; i < len; j = i++) { + a = points[i]; + b = points[j]; + + // if a is inside the clip window + if (!(a._code & edge)) { + // if b is outside the clip window (a->b goes out of screen) + if (b._code & edge) { + p = lu._getEdgeIntersection(b, a, edge, bounds); + p._code = lu._getBitCode(p, bounds); + clippedPoints.push(p); + } + clippedPoints.push(a); + + // else if b is inside the clip window (a->b enters the screen) + } else if (!(b._code & edge)) { + p = lu._getEdgeIntersection(b, a, edge, bounds); + p._code = lu._getBitCode(p, bounds); + clippedPoints.push(p); + } + } + points = clippedPoints; + } + + return points; +}; + + +/* + * L.Polygon is used to display polygons on a map. + */ + +L.Polygon = L.Polyline.extend({ + options: { + fill: true + }, + + initialize: function (latlngs, options) { + L.Polyline.prototype.initialize.call(this, latlngs, options); + this._initWithHoles(latlngs); + }, + + _initWithHoles: function (latlngs) { + var i, len, hole; + if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) { + this._latlngs = this._convertLatLngs(latlngs[0]); + this._holes = latlngs.slice(1); + + for (i = 0, len = this._holes.length; i < len; i++) { + hole = this._holes[i] = this._convertLatLngs(this._holes[i]); + if (hole[0].equals(hole[hole.length - 1])) { + hole.pop(); + } + } + } + + // filter out last point if its equal to the first one + latlngs = this._latlngs; + + if (latlngs.length >= 2 && latlngs[0].equals(latlngs[latlngs.length - 1])) { + latlngs.pop(); + } + }, + + projectLatlngs: function () { + L.Polyline.prototype.projectLatlngs.call(this); + + // project polygon holes points + // TODO move this logic to Polyline to get rid of duplication + this._holePoints = []; + + if (!this._holes) { return; } + + var i, j, len, len2; + + for (i = 0, len = this._holes.length; i < len; i++) { + this._holePoints[i] = []; + + for (j = 0, len2 = this._holes[i].length; j < len2; j++) { + this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]); + } + } + }, + + setLatLngs: function (latlngs) { + if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) { + this._initWithHoles(latlngs); + return this.redraw(); + } else { + return L.Polyline.prototype.setLatLngs.call(this, latlngs); + } + }, + + _clipPoints: function () { + var points = this._originalPoints, + newParts = []; + + this._parts = [points].concat(this._holePoints); + + if (this.options.noClip) { return; } + + for (var i = 0, len = this._parts.length; i < len; i++) { + var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport); + if (clipped.length) { + newParts.push(clipped); + } + } + + this._parts = newParts; + }, + + _getPathPartStr: function (points) { + var str = L.Polyline.prototype._getPathPartStr.call(this, points); + return str + (L.Browser.svg ? 'z' : 'x'); + } +}); + +L.polygon = function (latlngs, options) { + return new L.Polygon(latlngs, options); +}; + + +/* + * Contains L.MultiPolyline and L.MultiPolygon layers. + */ + +(function () { + function createMulti(Klass) { + + return L.FeatureGroup.extend({ + + initialize: function (latlngs, options) { + this._layers = {}; + this._options = options; + this.setLatLngs(latlngs); + }, + + setLatLngs: function (latlngs) { + var i = 0, + len = latlngs.length; + + this.eachLayer(function (layer) { + if (i < len) { + layer.setLatLngs(latlngs[i++]); + } else { + this.removeLayer(layer); + } + }, this); + + while (i < len) { + this.addLayer(new Klass(latlngs[i++], this._options)); + } + + return this; + }, + + getLatLngs: function () { + var latlngs = []; + + this.eachLayer(function (layer) { + latlngs.push(layer.getLatLngs()); + }); + + return latlngs; + } + }); + } + + L.MultiPolyline = createMulti(L.Polyline); + L.MultiPolygon = createMulti(L.Polygon); + + L.multiPolyline = function (latlngs, options) { + return new L.MultiPolyline(latlngs, options); + }; + + L.multiPolygon = function (latlngs, options) { + return new L.MultiPolygon(latlngs, options); + }; +}()); + + +/* + * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object. + */ + +L.Rectangle = L.Polygon.extend({ + initialize: function (latLngBounds, options) { + L.Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options); + }, + + setBounds: function (latLngBounds) { + this.setLatLngs(this._boundsToLatLngs(latLngBounds)); + }, + + _boundsToLatLngs: function (latLngBounds) { + latLngBounds = L.latLngBounds(latLngBounds); + return [ + latLngBounds.getSouthWest(), + latLngBounds.getNorthWest(), + latLngBounds.getNorthEast(), + latLngBounds.getSouthEast() + ]; + } +}); + +L.rectangle = function (latLngBounds, options) { + return new L.Rectangle(latLngBounds, options); +}; + + +/* + * L.Circle is a circle overlay (with a certain radius in meters). + */ + +L.Circle = L.Path.extend({ + initialize: function (latlng, radius, options) { + L.Path.prototype.initialize.call(this, options); + + this._latlng = L.latLng(latlng); + this._mRadius = radius; + }, + + options: { + fill: true + }, + + setLatLng: function (latlng) { + this._latlng = L.latLng(latlng); + return this.redraw(); + }, + + setRadius: function (radius) { + this._mRadius = radius; + return this.redraw(); + }, + + projectLatlngs: function () { + var lngRadius = this._getLngRadius(), + latlng = this._latlng, + pointLeft = this._map.latLngToLayerPoint([latlng.lat, latlng.lng - lngRadius]); + + this._point = this._map.latLngToLayerPoint(latlng); + this._radius = Math.max(this._point.x - pointLeft.x, 1); + }, + + getBounds: function () { + var lngRadius = this._getLngRadius(), + latRadius = (this._mRadius / 40075017) * 360, + latlng = this._latlng; + + return new L.LatLngBounds( + [latlng.lat - latRadius, latlng.lng - lngRadius], + [latlng.lat + latRadius, latlng.lng + lngRadius]); + }, + + getLatLng: function () { + return this._latlng; + }, + + getPathString: function () { + var p = this._point, + r = this._radius; + + if (this._checkIfEmpty()) { + return ''; + } + + if (L.Browser.svg) { + return 'M' + p.x + ',' + (p.y - r) + + 'A' + r + ',' + r + ',0,1,1,' + + (p.x - 0.1) + ',' + (p.y - r) + ' z'; + } else { + p._round(); + r = Math.round(r); + return 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r + ' 0,' + (65535 * 360); + } + }, + + getRadius: function () { + return this._mRadius; + }, + + // TODO Earth hardcoded, move into projection code! + + _getLatRadius: function () { + return (this._mRadius / 40075017) * 360; + }, + + _getLngRadius: function () { + return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat); + }, + + _checkIfEmpty: function () { + if (!this._map) { + return false; + } + var vp = this._map._pathViewport, + r = this._radius, + p = this._point; + + return p.x - r > vp.max.x || p.y - r > vp.max.y || + p.x + r < vp.min.x || p.y + r < vp.min.y; + } +}); + +L.circle = function (latlng, radius, options) { + return new L.Circle(latlng, radius, options); +}; + + +/* + * L.CircleMarker is a circle overlay with a permanent pixel radius. + */ + +L.CircleMarker = L.Circle.extend({ + options: { + radius: 10, + weight: 2 + }, + + initialize: function (latlng, options) { + L.Circle.prototype.initialize.call(this, latlng, null, options); + this._radius = this.options.radius; + }, + + projectLatlngs: function () { + this._point = this._map.latLngToLayerPoint(this._latlng); + }, + + _updateStyle : function () { + L.Circle.prototype._updateStyle.call(this); + this.setRadius(this.options.radius); + }, + + setLatLng: function (latlng) { + L.Circle.prototype.setLatLng.call(this, latlng); + if (this._popup && this._popup._isOpen) { + this._popup.setLatLng(latlng); + } + return this; + }, + + setRadius: function (radius) { + this.options.radius = this._radius = radius; + return this.redraw(); + }, + + getRadius: function () { + return this._radius; + } +}); + +L.circleMarker = function (latlng, options) { + return new L.CircleMarker(latlng, options); +}; + + +/* + * Extends L.Polyline to be able to manually detect clicks on Canvas-rendered polylines. + */ + +L.Polyline.include(!L.Path.CANVAS ? {} : { + _containsPoint: function (p, closed) { + var i, j, k, len, len2, dist, part, + w = this.options.weight / 2; + + if (L.Browser.touch) { + w += 10; // polyline click tolerance on touch devices + } + + for (i = 0, len = this._parts.length; i < len; i++) { + part = this._parts[i]; + for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) { + if (!closed && (j === 0)) { + continue; + } + + dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]); + + if (dist <= w) { + return true; + } + } + } + return false; + } +}); + + +/* + * Extends L.Polygon to be able to manually detect clicks on Canvas-rendered polygons. + */ + +L.Polygon.include(!L.Path.CANVAS ? {} : { + _containsPoint: function (p) { + var inside = false, + part, p1, p2, + i, j, k, + len, len2; + + // TODO optimization: check if within bounds first + + if (L.Polyline.prototype._containsPoint.call(this, p, true)) { + // click on polygon border + return true; + } + + // ray casting algorithm for detecting if point is in polygon + + for (i = 0, len = this._parts.length; i < len; i++) { + part = this._parts[i]; + + for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) { + p1 = part[j]; + p2 = part[k]; + + if (((p1.y > p.y) !== (p2.y > p.y)) && + (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) { + inside = !inside; + } + } + } + + return inside; + } +}); + + +/* + * Extends L.Circle with Canvas-specific code. + */ + +L.Circle.include(!L.Path.CANVAS ? {} : { + _drawPath: function () { + var p = this._point; + this._ctx.beginPath(); + this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false); + }, + + _containsPoint: function (p) { + var center = this._point, + w2 = this.options.stroke ? this.options.weight / 2 : 0; + + return (p.distanceTo(center) <= this._radius + w2); + } +}); + + +/* + * CircleMarker canvas specific drawing parts. + */ + +L.CircleMarker.include(!L.Path.CANVAS ? {} : { + _updateStyle: function () { + L.Path.prototype._updateStyle.call(this); + } +}); + + +/* + * L.GeoJSON turns any GeoJSON data into a Leaflet layer. + */ + +L.GeoJSON = L.FeatureGroup.extend({ + + initialize: function (geojson, options) { + L.setOptions(this, options); + + this._layers = {}; + + if (geojson) { + this.addData(geojson); + } + }, + + addData: function (geojson) { + var features = L.Util.isArray(geojson) ? geojson : geojson.features, + i, len, feature; + + if (features) { + for (i = 0, len = features.length; i < len; i++) { + // Only add this if geometry or geometries are set and not null + feature = features[i]; + if (feature.geometries || feature.geometry || feature.features || feature.coordinates) { + this.addData(features[i]); + } + } + return this; + } + + var options = this.options; + + if (options.filter && !options.filter(geojson)) { return; } + + var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng, options); + layer.feature = L.GeoJSON.asFeature(geojson); + + layer.defaultOptions = layer.options; + this.resetStyle(layer); + + if (options.onEachFeature) { + options.onEachFeature(geojson, layer); + } + + return this.addLayer(layer); + }, + + resetStyle: function (layer) { + var style = this.options.style; + if (style) { + // reset any custom styles + L.Util.extend(layer.options, layer.defaultOptions); + + this._setLayerStyle(layer, style); + } + }, + + setStyle: function (style) { + this.eachLayer(function (layer) { + this._setLayerStyle(layer, style); + }, this); + }, + + _setLayerStyle: function (layer, style) { + if (typeof style === 'function') { + style = style(layer.feature); + } + if (layer.setStyle) { + layer.setStyle(style); + } + } +}); + +L.extend(L.GeoJSON, { + geometryToLayer: function (geojson, pointToLayer, coordsToLatLng, vectorOptions) { + var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson, + coords = geometry.coordinates, + layers = [], + latlng, latlngs, i, len; + + coordsToLatLng = coordsToLatLng || this.coordsToLatLng; + + switch (geometry.type) { + case 'Point': + latlng = coordsToLatLng(coords); + return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng); + + case 'MultiPoint': + for (i = 0, len = coords.length; i < len; i++) { + latlng = coordsToLatLng(coords[i]); + layers.push(pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng)); + } + return new L.FeatureGroup(layers); + + case 'LineString': + latlngs = this.coordsToLatLngs(coords, 0, coordsToLatLng); + return new L.Polyline(latlngs, vectorOptions); + + case 'Polygon': + if (coords.length === 2 && !coords[1].length) { + throw new Error('Invalid GeoJSON object.'); + } + latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng); + return new L.Polygon(latlngs, vectorOptions); + + case 'MultiLineString': + latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng); + return new L.MultiPolyline(latlngs, vectorOptions); + + case 'MultiPolygon': + latlngs = this.coordsToLatLngs(coords, 2, coordsToLatLng); + return new L.MultiPolygon(latlngs, vectorOptions); + + case 'GeometryCollection': + for (i = 0, len = geometry.geometries.length; i < len; i++) { + + layers.push(this.geometryToLayer({ + geometry: geometry.geometries[i], + type: 'Feature', + properties: geojson.properties + }, pointToLayer, coordsToLatLng, vectorOptions)); + } + return new L.FeatureGroup(layers); + + default: + throw new Error('Invalid GeoJSON object.'); + } + }, + + coordsToLatLng: function (coords) { // (Array[, Boolean]) -> LatLng + return new L.LatLng(coords[1], coords[0], coords[2]); + }, + + coordsToLatLngs: function (coords, levelsDeep, coordsToLatLng) { // (Array[, Number, Function]) -> Array + var latlng, i, len, + latlngs = []; + + for (i = 0, len = coords.length; i < len; i++) { + latlng = levelsDeep ? + this.coordsToLatLngs(coords[i], levelsDeep - 1, coordsToLatLng) : + (coordsToLatLng || this.coordsToLatLng)(coords[i]); + + latlngs.push(latlng); + } + + return latlngs; + }, + + latLngToCoords: function (latlng) { + var coords = [latlng.lng, latlng.lat]; + + if (latlng.alt !== undefined) { + coords.push(latlng.alt); + } + return coords; + }, + + latLngsToCoords: function (latLngs) { + var coords = []; + + for (var i = 0, len = latLngs.length; i < len; i++) { + coords.push(L.GeoJSON.latLngToCoords(latLngs[i])); + } + + return coords; + }, + + getFeature: function (layer, newGeometry) { + return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : L.GeoJSON.asFeature(newGeometry); + }, + + asFeature: function (geoJSON) { + if (geoJSON.type === 'Feature') { + return geoJSON; + } + + return { + type: 'Feature', + properties: {}, + geometry: geoJSON + }; + } +}); + +var PointToGeoJSON = { + toGeoJSON: function () { + return L.GeoJSON.getFeature(this, { + type: 'Point', + coordinates: L.GeoJSON.latLngToCoords(this.getLatLng()) + }); + } +}; + +L.Marker.include(PointToGeoJSON); +L.Circle.include(PointToGeoJSON); +L.CircleMarker.include(PointToGeoJSON); + +L.Polyline.include({ + toGeoJSON: function () { + return L.GeoJSON.getFeature(this, { + type: 'LineString', + coordinates: L.GeoJSON.latLngsToCoords(this.getLatLngs()) + }); + } +}); + +L.Polygon.include({ + toGeoJSON: function () { + var coords = [L.GeoJSON.latLngsToCoords(this.getLatLngs())], + i, len, hole; + + coords[0].push(coords[0][0]); + + if (this._holes) { + for (i = 0, len = this._holes.length; i < len; i++) { + hole = L.GeoJSON.latLngsToCoords(this._holes[i]); + hole.push(hole[0]); + coords.push(hole); + } + } + + return L.GeoJSON.getFeature(this, { + type: 'Polygon', + coordinates: coords + }); + } +}); + +(function () { + function multiToGeoJSON(type) { + return function () { + var coords = []; + + this.eachLayer(function (layer) { + coords.push(layer.toGeoJSON().geometry.coordinates); + }); + + return L.GeoJSON.getFeature(this, { + type: type, + coordinates: coords + }); + }; + } + + L.MultiPolyline.include({toGeoJSON: multiToGeoJSON('MultiLineString')}); + L.MultiPolygon.include({toGeoJSON: multiToGeoJSON('MultiPolygon')}); + + L.LayerGroup.include({ + toGeoJSON: function () { + + var geometry = this.feature && this.feature.geometry, + jsons = [], + json; + + if (geometry && geometry.type === 'MultiPoint') { + return multiToGeoJSON('MultiPoint').call(this); + } + + var isGeometryCollection = geometry && geometry.type === 'GeometryCollection'; + + this.eachLayer(function (layer) { + if (layer.toGeoJSON) { + json = layer.toGeoJSON(); + jsons.push(isGeometryCollection ? json.geometry : L.GeoJSON.asFeature(json)); + } + }); + + if (isGeometryCollection) { + return L.GeoJSON.getFeature(this, { + geometries: jsons, + type: 'GeometryCollection' + }); + } + + return { + type: 'FeatureCollection', + features: jsons + }; + } + }); +}()); + +L.geoJson = function (geojson, options) { + return new L.GeoJSON(geojson, options); +}; + + +/* + * L.DomEvent contains functions for working with DOM events. + */ + +L.DomEvent = { + /* inspired by John Resig, Dean Edwards and YUI addEvent implementations */ + addListener: function (obj, type, fn, context) { // (HTMLElement, String, Function[, Object]) + + var id = L.stamp(fn), + key = '_leaflet_' + type + id, + handler, originalHandler, newType; + + if (obj[key]) { return this; } + + handler = function (e) { + return fn.call(context || obj, e || L.DomEvent._getEvent()); + }; + + if (L.Browser.pointer && type.indexOf('touch') === 0) { + return this.addPointerListener(obj, type, handler, id); + } + if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) { + this.addDoubleTapListener(obj, handler, id); + } + + if ('addEventListener' in obj) { + + if (type === 'mousewheel') { + obj.addEventListener('DOMMouseScroll', handler, false); + obj.addEventListener(type, handler, false); + + } else if ((type === 'mouseenter') || (type === 'mouseleave')) { + + originalHandler = handler; + newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout'); + + handler = function (e) { + if (!L.DomEvent._checkMouse(obj, e)) { return; } + return originalHandler(e); + }; + + obj.addEventListener(newType, handler, false); + + } else if (type === 'click' && L.Browser.android) { + originalHandler = handler; + handler = function (e) { + return L.DomEvent._filterClick(e, originalHandler); + }; + + obj.addEventListener(type, handler, false); + } else { + obj.addEventListener(type, handler, false); + } + + } else if ('attachEvent' in obj) { + obj.attachEvent('on' + type, handler); + } + + obj[key] = handler; + + return this; + }, + + removeListener: function (obj, type, fn) { // (HTMLElement, String, Function) + + var id = L.stamp(fn), + key = '_leaflet_' + type + id, + handler = obj[key]; + + if (!handler) { return this; } + + if (L.Browser.pointer && type.indexOf('touch') === 0) { + this.removePointerListener(obj, type, id); + } else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) { + this.removeDoubleTapListener(obj, id); + + } else if ('removeEventListener' in obj) { + + if (type === 'mousewheel') { + obj.removeEventListener('DOMMouseScroll', handler, false); + obj.removeEventListener(type, handler, false); + + } else if ((type === 'mouseenter') || (type === 'mouseleave')) { + obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false); + } else { + obj.removeEventListener(type, handler, false); + } + } else if ('detachEvent' in obj) { + obj.detachEvent('on' + type, handler); + } + + obj[key] = null; + + return this; + }, + + stopPropagation: function (e) { + + if (e.stopPropagation) { + e.stopPropagation(); + } else { + e.cancelBubble = true; + } + L.DomEvent._skipped(e); + + return this; + }, + + disableScrollPropagation: function (el) { + var stop = L.DomEvent.stopPropagation; + + return L.DomEvent + .on(el, 'mousewheel', stop) + .on(el, 'MozMousePixelScroll', stop); + }, + + disableClickPropagation: function (el) { + var stop = L.DomEvent.stopPropagation; + + for (var i = L.Draggable.START.length - 1; i >= 0; i--) { + L.DomEvent.on(el, L.Draggable.START[i], stop); + } + + return L.DomEvent + .on(el, 'click', L.DomEvent._fakeStop) + .on(el, 'dblclick', stop); + }, + + preventDefault: function (e) { + + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + return this; + }, + + stop: function (e) { + return L.DomEvent + .preventDefault(e) + .stopPropagation(e); + }, + + getMousePosition: function (e, container) { + if (!container) { + return new L.Point(e.clientX, e.clientY); + } + + var rect = container.getBoundingClientRect(); + + return new L.Point( + e.clientX - rect.left - container.clientLeft, + e.clientY - rect.top - container.clientTop); + }, + + getWheelDelta: function (e) { + + var delta = 0; + + if (e.wheelDelta) { + delta = e.wheelDelta / 120; + } + if (e.detail) { + delta = -e.detail / 3; + } + return delta; + }, + + _skipEvents: {}, + + _fakeStop: function (e) { + // fakes stopPropagation by setting a special event flag, checked/reset with L.DomEvent._skipped(e) + L.DomEvent._skipEvents[e.type] = true; + }, + + _skipped: function (e) { + var skipped = this._skipEvents[e.type]; + // reset when checking, as it's only used in map container and propagates outside of the map + this._skipEvents[e.type] = false; + return skipped; + }, + + // check if element really left/entered the event target (for mouseenter/mouseleave) + _checkMouse: function (el, e) { + + var related = e.relatedTarget; + + if (!related) { return true; } + + try { + while (related && (related !== el)) { + related = related.parentNode; + } + } catch (err) { + return false; + } + return (related !== el); + }, + + _getEvent: function () { // evil magic for IE + /*jshint noarg:false */ + var e = window.event; + if (!e) { + var caller = arguments.callee.caller; + while (caller) { + e = caller['arguments'][0]; + if (e && window.Event === e.constructor) { + break; + } + caller = caller.caller; + } + } + return e; + }, + + // this is a horrible workaround for a bug in Android where a single touch triggers two click events + _filterClick: function (e, handler) { + var timeStamp = (e.timeStamp || e.originalEvent.timeStamp), + elapsed = L.DomEvent._lastClick && (timeStamp - L.DomEvent._lastClick); + + // are they closer together than 500ms yet more than 100ms? + // Android typically triggers them ~300ms apart while multiple listeners + // on the same event should be triggered far faster; + // or check if click is simulated on the element, and if it is, reject any non-simulated events + + if ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) { + L.DomEvent.stop(e); + return; + } + L.DomEvent._lastClick = timeStamp; + + return handler(e); + } +}; + +L.DomEvent.on = L.DomEvent.addListener; +L.DomEvent.off = L.DomEvent.removeListener; + + +/* + * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too. + */ + +L.Draggable = L.Class.extend({ + includes: L.Mixin.Events, + + statics: { + START: L.Browser.touch ? ['touchstart', 'mousedown'] : ['mousedown'], + END: { + mousedown: 'mouseup', + touchstart: 'touchend', + pointerdown: 'touchend', + MSPointerDown: 'touchend' + }, + MOVE: { + mousedown: 'mousemove', + touchstart: 'touchmove', + pointerdown: 'touchmove', + MSPointerDown: 'touchmove' + } + }, + + initialize: function (element, dragStartTarget) { + this._element = element; + this._dragStartTarget = dragStartTarget || element; + }, + + enable: function () { + if (this._enabled) { return; } + + for (var i = L.Draggable.START.length - 1; i >= 0; i--) { + L.DomEvent.on(this._dragStartTarget, L.Draggable.START[i], this._onDown, this); + } + + this._enabled = true; + }, + + disable: function () { + if (!this._enabled) { return; } + + for (var i = L.Draggable.START.length - 1; i >= 0; i--) { + L.DomEvent.off(this._dragStartTarget, L.Draggable.START[i], this._onDown, this); + } + + this._enabled = false; + this._moved = false; + }, + + _onDown: function (e) { + this._moved = false; + + if (e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; } + + L.DomEvent.stopPropagation(e); + + if (L.Draggable._disabled) { return; } + + L.DomUtil.disableImageDrag(); + L.DomUtil.disableTextSelection(); + + if (this._moving) { return; } + + var first = e.touches ? e.touches[0] : e; + + this._startPoint = new L.Point(first.clientX, first.clientY); + this._startPos = this._newPos = L.DomUtil.getPosition(this._element); + + L.DomEvent + .on(document, L.Draggable.MOVE[e.type], this._onMove, this) + .on(document, L.Draggable.END[e.type], this._onUp, this); + }, + + _onMove: function (e) { + if (e.touches && e.touches.length > 1) { + this._moved = true; + return; + } + + var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e), + newPoint = new L.Point(first.clientX, first.clientY), + offset = newPoint.subtract(this._startPoint); + + if (!offset.x && !offset.y) { return; } + if (L.Browser.touch && Math.abs(offset.x) + Math.abs(offset.y) < 3) { return; } + + L.DomEvent.preventDefault(e); + + if (!this._moved) { + this.fire('dragstart'); + + this._moved = true; + this._startPos = L.DomUtil.getPosition(this._element).subtract(offset); + + L.DomUtil.addClass(document.body, 'leaflet-dragging'); + this._lastTarget = e.target || e.srcElement; + L.DomUtil.addClass(this._lastTarget, 'leaflet-drag-target'); + } + + this._newPos = this._startPos.add(offset); + this._moving = true; + + L.Util.cancelAnimFrame(this._animRequest); + this._animRequest = L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget); + }, + + _updatePosition: function () { + this.fire('predrag'); + L.DomUtil.setPosition(this._element, this._newPos); + this.fire('drag'); + }, + + _onUp: function () { + L.DomUtil.removeClass(document.body, 'leaflet-dragging'); + + if (this._lastTarget) { + L.DomUtil.removeClass(this._lastTarget, 'leaflet-drag-target'); + this._lastTarget = null; + } + + for (var i in L.Draggable.MOVE) { + L.DomEvent + .off(document, L.Draggable.MOVE[i], this._onMove) + .off(document, L.Draggable.END[i], this._onUp); + } + + L.DomUtil.enableImageDrag(); + L.DomUtil.enableTextSelection(); + + if (this._moved && this._moving) { + // ensure drag is not fired after dragend + L.Util.cancelAnimFrame(this._animRequest); + + this.fire('dragend', { + distance: this._newPos.distanceTo(this._startPos) + }); + } + + this._moving = false; + } +}); + + +/* + L.Handler is a base class for handler classes that are used internally to inject + interaction features like dragging to classes like Map and Marker. +*/ + +L.Handler = L.Class.extend({ + initialize: function (map) { + this._map = map; + }, + + enable: function () { + if (this._enabled) { return; } + + this._enabled = true; + this.addHooks(); + }, + + disable: function () { + if (!this._enabled) { return; } + + this._enabled = false; + this.removeHooks(); + }, + + enabled: function () { + return !!this._enabled; + } +}); + + +/* + * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default. + */ + +L.Map.mergeOptions({ + dragging: true, + + inertia: !L.Browser.android23, + inertiaDeceleration: 3400, // px/s^2 + inertiaMaxSpeed: Infinity, // px/s + inertiaThreshold: L.Browser.touch ? 32 : 18, // ms + easeLinearity: 0.25, + + // TODO refactor, move to CRS + worldCopyJump: false +}); + +L.Map.Drag = L.Handler.extend({ + addHooks: function () { + if (!this._draggable) { + var map = this._map; + + this._draggable = new L.Draggable(map._mapPane, map._container); + + this._draggable.on({ + 'dragstart': this._onDragStart, + 'drag': this._onDrag, + 'dragend': this._onDragEnd + }, this); + + if (map.options.worldCopyJump) { + this._draggable.on('predrag', this._onPreDrag, this); + map.on('viewreset', this._onViewReset, this); + + map.whenReady(this._onViewReset, this); + } + } + this._draggable.enable(); + }, + + removeHooks: function () { + this._draggable.disable(); + }, + + moved: function () { + return this._draggable && this._draggable._moved; + }, + + _onDragStart: function () { + var map = this._map; + + if (map._panAnim) { + map._panAnim.stop(); + } + + map + .fire('movestart') + .fire('dragstart'); + + if (map.options.inertia) { + this._positions = []; + this._times = []; + } + }, + + _onDrag: function () { + if (this._map.options.inertia) { + var time = this._lastTime = +new Date(), + pos = this._lastPos = this._draggable._newPos; + + this._positions.push(pos); + this._times.push(time); + + if (time - this._times[0] > 200) { + this._positions.shift(); + this._times.shift(); + } + } + + this._map + .fire('move') + .fire('drag'); + }, + + _onViewReset: function () { + // TODO fix hardcoded Earth values + var pxCenter = this._map.getSize()._divideBy(2), + pxWorldCenter = this._map.latLngToLayerPoint([0, 0]); + + this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x; + this._worldWidth = this._map.project([0, 180]).x; + }, + + _onPreDrag: function () { + // TODO refactor to be able to adjust map pane position after zoom + var worldWidth = this._worldWidth, + halfWidth = Math.round(worldWidth / 2), + dx = this._initialWorldOffset, + x = this._draggable._newPos.x, + newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx, + newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx, + newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2; + + this._draggable._newPos.x = newX; + }, + + _onDragEnd: function (e) { + var map = this._map, + options = map.options, + delay = +new Date() - this._lastTime, + + noInertia = !options.inertia || delay > options.inertiaThreshold || !this._positions[0]; + + map.fire('dragend', e); + + if (noInertia) { + map.fire('moveend'); + + } else { + + var direction = this._lastPos.subtract(this._positions[0]), + duration = (this._lastTime + delay - this._times[0]) / 1000, + ease = options.easeLinearity, + + speedVector = direction.multiplyBy(ease / duration), + speed = speedVector.distanceTo([0, 0]), + + limitedSpeed = Math.min(options.inertiaMaxSpeed, speed), + limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed), + + decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease), + offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round(); + + if (!offset.x || !offset.y) { + map.fire('moveend'); + + } else { + offset = map._limitOffset(offset, map.options.maxBounds); + + L.Util.requestAnimFrame(function () { + map.panBy(offset, { + duration: decelerationDuration, + easeLinearity: ease, + noMoveStart: true + }); + }); + } + } + } +}); + +L.Map.addInitHook('addHandler', 'dragging', L.Map.Drag); + + +/* + * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default. + */ + +L.Map.mergeOptions({ + doubleClickZoom: true +}); + +L.Map.DoubleClickZoom = L.Handler.extend({ + addHooks: function () { + this._map.on('dblclick', this._onDoubleClick, this); + }, + + removeHooks: function () { + this._map.off('dblclick', this._onDoubleClick, this); + }, + + _onDoubleClick: function (e) { + var map = this._map, + zoom = map.getZoom() + (e.originalEvent.shiftKey ? -1 : 1); + + if (map.options.doubleClickZoom === 'center') { + map.setZoom(zoom); + } else { + map.setZoomAround(e.containerPoint, zoom); + } + } +}); + +L.Map.addInitHook('addHandler', 'doubleClickZoom', L.Map.DoubleClickZoom); + + +/* + * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map. + */ + +L.Map.mergeOptions({ + scrollWheelZoom: true +}); + +L.Map.ScrollWheelZoom = L.Handler.extend({ + addHooks: function () { + L.DomEvent.on(this._map._container, 'mousewheel', this._onWheelScroll, this); + L.DomEvent.on(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault); + this._delta = 0; + }, + + removeHooks: function () { + L.DomEvent.off(this._map._container, 'mousewheel', this._onWheelScroll); + L.DomEvent.off(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault); + }, + + _onWheelScroll: function (e) { + var delta = L.DomEvent.getWheelDelta(e); + + this._delta += delta; + this._lastMousePos = this._map.mouseEventToContainerPoint(e); + + if (!this._startTime) { + this._startTime = +new Date(); + } + + var left = Math.max(40 - (+new Date() - this._startTime), 0); + + clearTimeout(this._timer); + this._timer = setTimeout(L.bind(this._performZoom, this), left); + + L.DomEvent.preventDefault(e); + L.DomEvent.stopPropagation(e); + }, + + _performZoom: function () { + var map = this._map, + delta = this._delta, + zoom = map.getZoom(); + + delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta); + delta = Math.max(Math.min(delta, 4), -4); + delta = map._limitZoom(zoom + delta) - zoom; + + this._delta = 0; + this._startTime = null; + + if (!delta) { return; } + + if (map.options.scrollWheelZoom === 'center') { + map.setZoom(zoom + delta); + } else { + map.setZoomAround(this._lastMousePos, zoom + delta); + } + } +}); + +L.Map.addInitHook('addHandler', 'scrollWheelZoom', L.Map.ScrollWheelZoom); + + +/* + * Extends the event handling code with double tap support for mobile browsers. + */ + +L.extend(L.DomEvent, { + + _touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart', + _touchend: L.Browser.msPointer ? 'MSPointerUp' : L.Browser.pointer ? 'pointerup' : 'touchend', + + // inspired by Zepto touch code by Thomas Fuchs + addDoubleTapListener: function (obj, handler, id) { + var last, + doubleTap = false, + delay = 250, + touch, + pre = '_leaflet_', + touchstart = this._touchstart, + touchend = this._touchend, + trackedTouches = []; + + function onTouchStart(e) { + var count; + + if (L.Browser.pointer) { + trackedTouches.push(e.pointerId); + count = trackedTouches.length; + } else { + count = e.touches.length; + } + if (count > 1) { + return; + } + + var now = Date.now(), + delta = now - (last || now); + + touch = e.touches ? e.touches[0] : e; + doubleTap = (delta > 0 && delta <= delay); + last = now; + } + + function onTouchEnd(e) { + if (L.Browser.pointer) { + var idx = trackedTouches.indexOf(e.pointerId); + if (idx === -1) { + return; + } + trackedTouches.splice(idx, 1); + } + + if (doubleTap) { + if (L.Browser.pointer) { + // work around .type being readonly with MSPointer* events + var newTouch = { }, + prop; + + // jshint forin:false + for (var i in touch) { + prop = touch[i]; + if (typeof prop === 'function') { + newTouch[i] = prop.bind(touch); + } else { + newTouch[i] = prop; + } + } + touch = newTouch; + } + touch.type = 'dblclick'; + handler(touch); + last = null; + } + } + obj[pre + touchstart + id] = onTouchStart; + obj[pre + touchend + id] = onTouchEnd; + + // on pointer we need to listen on the document, otherwise a drag starting on the map and moving off screen + // will not come through to us, so we will lose track of how many touches are ongoing + var endElement = L.Browser.pointer ? document.documentElement : obj; + + obj.addEventListener(touchstart, onTouchStart, false); + endElement.addEventListener(touchend, onTouchEnd, false); + + if (L.Browser.pointer) { + endElement.addEventListener(L.DomEvent.POINTER_CANCEL, onTouchEnd, false); + } + + return this; + }, + + removeDoubleTapListener: function (obj, id) { + var pre = '_leaflet_'; + + obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false); + (L.Browser.pointer ? document.documentElement : obj).removeEventListener( + this._touchend, obj[pre + this._touchend + id], false); + + if (L.Browser.pointer) { + document.documentElement.removeEventListener(L.DomEvent.POINTER_CANCEL, obj[pre + this._touchend + id], + false); + } + + return this; + } +}); + + +/* + * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices. + */ + +L.extend(L.DomEvent, { + + //static + POINTER_DOWN: L.Browser.msPointer ? 'MSPointerDown' : 'pointerdown', + POINTER_MOVE: L.Browser.msPointer ? 'MSPointerMove' : 'pointermove', + POINTER_UP: L.Browser.msPointer ? 'MSPointerUp' : 'pointerup', + POINTER_CANCEL: L.Browser.msPointer ? 'MSPointerCancel' : 'pointercancel', + + _pointers: [], + _pointerDocumentListener: false, + + // Provides a touch events wrapper for (ms)pointer events. + // Based on changes by veproza https://github.com/CloudMade/Leaflet/pull/1019 + //ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890 + + addPointerListener: function (obj, type, handler, id) { + + switch (type) { + case 'touchstart': + return this.addPointerListenerStart(obj, type, handler, id); + case 'touchend': + return this.addPointerListenerEnd(obj, type, handler, id); + case 'touchmove': + return this.addPointerListenerMove(obj, type, handler, id); + default: + throw 'Unknown touch event type'; + } + }, + + addPointerListenerStart: function (obj, type, handler, id) { + var pre = '_leaflet_', + pointers = this._pointers; + + var cb = function (e) { + if (e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) { + L.DomEvent.preventDefault(e); + } + + var alreadyInArray = false; + for (var i = 0; i < pointers.length; i++) { + if (pointers[i].pointerId === e.pointerId) { + alreadyInArray = true; + break; + } + } + if (!alreadyInArray) { + pointers.push(e); + } + + e.touches = pointers.slice(); + e.changedTouches = [e]; + + handler(e); + }; + + obj[pre + 'touchstart' + id] = cb; + obj.addEventListener(this.POINTER_DOWN, cb, false); + + // need to also listen for end events to keep the _pointers list accurate + // this needs to be on the body and never go away + if (!this._pointerDocumentListener) { + var internalCb = function (e) { + for (var i = 0; i < pointers.length; i++) { + if (pointers[i].pointerId === e.pointerId) { + pointers.splice(i, 1); + break; + } + } + }; + //We listen on the documentElement as any drags that end by moving the touch off the screen get fired there + document.documentElement.addEventListener(this.POINTER_UP, internalCb, false); + document.documentElement.addEventListener(this.POINTER_CANCEL, internalCb, false); + + this._pointerDocumentListener = true; + } + + return this; + }, + + addPointerListenerMove: function (obj, type, handler, id) { + var pre = '_leaflet_', + touches = this._pointers; + + function cb(e) { + + // don't fire touch moves when mouse isn't down + if ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; } + + for (var i = 0; i < touches.length; i++) { + if (touches[i].pointerId === e.pointerId) { + touches[i] = e; + break; + } + } + + e.touches = touches.slice(); + e.changedTouches = [e]; + + handler(e); + } + + obj[pre + 'touchmove' + id] = cb; + obj.addEventListener(this.POINTER_MOVE, cb, false); + + return this; + }, + + addPointerListenerEnd: function (obj, type, handler, id) { + var pre = '_leaflet_', + touches = this._pointers; + + var cb = function (e) { + for (var i = 0; i < touches.length; i++) { + if (touches[i].pointerId === e.pointerId) { + touches.splice(i, 1); + break; + } + } + + e.touches = touches.slice(); + e.changedTouches = [e]; + + handler(e); + }; + + obj[pre + 'touchend' + id] = cb; + obj.addEventListener(this.POINTER_UP, cb, false); + obj.addEventListener(this.POINTER_CANCEL, cb, false); + + return this; + }, + + removePointerListener: function (obj, type, id) { + var pre = '_leaflet_', + cb = obj[pre + type + id]; + + switch (type) { + case 'touchstart': + obj.removeEventListener(this.POINTER_DOWN, cb, false); + break; + case 'touchmove': + obj.removeEventListener(this.POINTER_MOVE, cb, false); + break; + case 'touchend': + obj.removeEventListener(this.POINTER_UP, cb, false); + obj.removeEventListener(this.POINTER_CANCEL, cb, false); + break; + } + + return this; + } +}); + + +/* + * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers. + */ + +L.Map.mergeOptions({ + touchZoom: L.Browser.touch && !L.Browser.android23, + bounceAtZoomLimits: true +}); + +L.Map.TouchZoom = L.Handler.extend({ + addHooks: function () { + L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this); + }, + + removeHooks: function () { + L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this); + }, + + _onTouchStart: function (e) { + var map = this._map; + + if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; } + + var p1 = map.mouseEventToLayerPoint(e.touches[0]), + p2 = map.mouseEventToLayerPoint(e.touches[1]), + viewCenter = map._getCenterLayerPoint(); + + this._startCenter = p1.add(p2)._divideBy(2); + this._startDist = p1.distanceTo(p2); + + this._moved = false; + this._zooming = true; + + this._centerOffset = viewCenter.subtract(this._startCenter); + + if (map._panAnim) { + map._panAnim.stop(); + } + + L.DomEvent + .on(document, 'touchmove', this._onTouchMove, this) + .on(document, 'touchend', this._onTouchEnd, this); + + L.DomEvent.preventDefault(e); + }, + + _onTouchMove: function (e) { + var map = this._map; + + if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; } + + var p1 = map.mouseEventToLayerPoint(e.touches[0]), + p2 = map.mouseEventToLayerPoint(e.touches[1]); + + this._scale = p1.distanceTo(p2) / this._startDist; + this._delta = p1._add(p2)._divideBy(2)._subtract(this._startCenter); + + if (this._scale === 1) { return; } + + if (!map.options.bounceAtZoomLimits) { + if ((map.getZoom() === map.getMinZoom() && this._scale < 1) || + (map.getZoom() === map.getMaxZoom() && this._scale > 1)) { return; } + } + + if (!this._moved) { + L.DomUtil.addClass(map._mapPane, 'leaflet-touching'); + + map + .fire('movestart') + .fire('zoomstart'); + + this._moved = true; + } + + L.Util.cancelAnimFrame(this._animRequest); + this._animRequest = L.Util.requestAnimFrame( + this._updateOnMove, this, true, this._map._container); + + L.DomEvent.preventDefault(e); + }, + + _updateOnMove: function () { + var map = this._map, + origin = this._getScaleOrigin(), + center = map.layerPointToLatLng(origin), + zoom = map.getScaleZoom(this._scale); + + map._animateZoom(center, zoom, this._startCenter, this._scale, this._delta, false, true); + }, + + _onTouchEnd: function () { + if (!this._moved || !this._zooming) { + this._zooming = false; + return; + } + + var map = this._map; + + this._zooming = false; + L.DomUtil.removeClass(map._mapPane, 'leaflet-touching'); + L.Util.cancelAnimFrame(this._animRequest); + + L.DomEvent + .off(document, 'touchmove', this._onTouchMove) + .off(document, 'touchend', this._onTouchEnd); + + var origin = this._getScaleOrigin(), + center = map.layerPointToLatLng(origin), + + oldZoom = map.getZoom(), + floatZoomDelta = map.getScaleZoom(this._scale) - oldZoom, + roundZoomDelta = (floatZoomDelta > 0 ? + Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)), + + zoom = map._limitZoom(oldZoom + roundZoomDelta), + scale = map.getZoomScale(zoom) / this._scale; + + map._animateZoom(center, zoom, origin, scale); + }, + + _getScaleOrigin: function () { + var centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale); + return this._startCenter.add(centerOffset); + } +}); + +L.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom); + + +/* + * L.Map.Tap is used to enable mobile hacks like quick taps and long hold. + */ + +L.Map.mergeOptions({ + tap: true, + tapTolerance: 15 +}); + +L.Map.Tap = L.Handler.extend({ + addHooks: function () { + L.DomEvent.on(this._map._container, 'touchstart', this._onDown, this); + }, + + removeHooks: function () { + L.DomEvent.off(this._map._container, 'touchstart', this._onDown, this); + }, + + _onDown: function (e) { + if (!e.touches) { return; } + + /* + * If we have turned off dragging and zooming, then this is basically a + * set of static images. At that point, we expect to be able to treat it as an + * image - i.e. click on it and scroll the underlying window. + * So we preventDefault only when dragging and zooming are enabled + * + * We want to do the checks for dragging, etc only on a map because + * they won't be defined on the oher layers. So if this has a _map + * defined on it, we want to preventDefault, and otherwise, it is a + * map and we want to check for the other configurations. + */ + var mapOptions = this._map.options; + if (mapOptions.dragging || mapOptions.doubleClickZoom || + mapOptions.scrollWheelZoom || mapOptions.touchZoom) { + L.DomEvent.preventDefault(e); + } + + this._fireClick = true; + + // don't simulate click or track longpress if more than 1 touch + if (e.touches.length > 1) { + this._fireClick = false; + clearTimeout(this._holdTimeout); + return; + } + + var first = e.touches[0], + el = first.target; + + this._startPos = this._newPos = new L.Point(first.clientX, first.clientY); + + // if touching a link, highlight it + if (el.tagName && el.tagName.toLowerCase() === 'a') { + L.DomUtil.addClass(el, 'leaflet-active'); + } + + // simulate long hold but setting a timeout + this._holdTimeout = setTimeout(L.bind(function () { + if (this._isTapValid()) { + this._fireClick = false; + this._onUp(); + this._simulateEvent('contextmenu', first); + } + }, this), 1000); + + L.DomEvent + .on(document, 'touchmove', this._onMove, this) + .on(document, 'touchend', this._onUp, this); + }, + + _onUp: function (e) { + clearTimeout(this._holdTimeout); + + L.DomEvent + .off(document, 'touchmove', this._onMove, this) + .off(document, 'touchend', this._onUp, this); + + if (this._fireClick && e && e.changedTouches) { + + var first = e.changedTouches[0], + el = first.target; + + if (el && el.tagName && el.tagName.toLowerCase() === 'a') { + L.DomUtil.removeClass(el, 'leaflet-active'); + } + + // simulate click if the touch didn't move too much + if (this._isTapValid()) { + this._simulateEvent('click', first); + } + } + }, + + _isTapValid: function () { + return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance; + }, + + _onMove: function (e) { + var first = e.touches[0]; + this._newPos = new L.Point(first.clientX, first.clientY); + }, + + _simulateEvent: function (type, e) { + var simulatedEvent = document.createEvent('MouseEvents'); + + simulatedEvent._simulated = true; + e.target._simulatedClick = true; + + simulatedEvent.initMouseEvent( + type, true, true, window, 1, + e.screenX, e.screenY, + e.clientX, e.clientY, + false, false, false, false, 0, null); + + e.target.dispatchEvent(simulatedEvent); + } +}); + +if (L.Browser.touch && !L.Browser.pointer) { + L.Map.addInitHook('addHandler', 'tap', L.Map.Tap); +} + + +/* + * L.Handler.ShiftDragZoom is used to add shift-drag zoom interaction to the map + * (zoom to a selected bounding box), enabled by default. + */ + +L.Map.mergeOptions({ + boxZoom: true +}); + +L.Map.BoxZoom = L.Handler.extend({ + initialize: function (map) { + this._map = map; + this._container = map._container; + this._pane = map._panes.overlayPane; + this._moved = false; + }, + + addHooks: function () { + L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); + }, + + removeHooks: function () { + L.DomEvent.off(this._container, 'mousedown', this._onMouseDown); + this._moved = false; + }, + + moved: function () { + return this._moved; + }, + + _onMouseDown: function (e) { + this._moved = false; + + if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; } + + L.DomUtil.disableTextSelection(); + L.DomUtil.disableImageDrag(); + + this._startLayerPoint = this._map.mouseEventToLayerPoint(e); + + L.DomEvent + .on(document, 'mousemove', this._onMouseMove, this) + .on(document, 'mouseup', this._onMouseUp, this) + .on(document, 'keydown', this._onKeyDown, this); + }, + + _onMouseMove: function (e) { + if (!this._moved) { + this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane); + L.DomUtil.setPosition(this._box, this._startLayerPoint); + + //TODO refactor: move cursor to styles + this._container.style.cursor = 'crosshair'; + this._map.fire('boxzoomstart'); + } + + var startPoint = this._startLayerPoint, + box = this._box, + + layerPoint = this._map.mouseEventToLayerPoint(e), + offset = layerPoint.subtract(startPoint), + + newPos = new L.Point( + Math.min(layerPoint.x, startPoint.x), + Math.min(layerPoint.y, startPoint.y)); + + L.DomUtil.setPosition(box, newPos); + + this._moved = true; + + // TODO refactor: remove hardcoded 4 pixels + box.style.width = (Math.max(0, Math.abs(offset.x) - 4)) + 'px'; + box.style.height = (Math.max(0, Math.abs(offset.y) - 4)) + 'px'; + }, + + _finish: function () { + if (this._moved) { + this._pane.removeChild(this._box); + this._container.style.cursor = ''; + } + + L.DomUtil.enableTextSelection(); + L.DomUtil.enableImageDrag(); + + L.DomEvent + .off(document, 'mousemove', this._onMouseMove) + .off(document, 'mouseup', this._onMouseUp) + .off(document, 'keydown', this._onKeyDown); + }, + + _onMouseUp: function (e) { + + this._finish(); + + var map = this._map, + layerPoint = map.mouseEventToLayerPoint(e); + + if (this._startLayerPoint.equals(layerPoint)) { return; } + + var bounds = new L.LatLngBounds( + map.layerPointToLatLng(this._startLayerPoint), + map.layerPointToLatLng(layerPoint)); + + map.fitBounds(bounds); + + map.fire('boxzoomend', { + boxZoomBounds: bounds + }); + }, + + _onKeyDown: function (e) { + if (e.keyCode === 27) { + this._finish(); + } + } +}); + +L.Map.addInitHook('addHandler', 'boxZoom', L.Map.BoxZoom); + + +/* + * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default. + */ + +L.Map.mergeOptions({ + keyboard: true, + keyboardPanOffset: 80, + keyboardZoomOffset: 1 +}); + +L.Map.Keyboard = L.Handler.extend({ + + keyCodes: { + left: [37], + right: [39], + down: [40], + up: [38], + zoomIn: [187, 107, 61, 171], + zoomOut: [189, 109, 173] + }, + + initialize: function (map) { + this._map = map; + + this._setPanOffset(map.options.keyboardPanOffset); + this._setZoomOffset(map.options.keyboardZoomOffset); + }, + + addHooks: function () { + var container = this._map._container; + + // make the container focusable by tabbing + if (container.tabIndex === -1) { + container.tabIndex = '0'; + } + + L.DomEvent + .on(container, 'focus', this._onFocus, this) + .on(container, 'blur', this._onBlur, this) + .on(container, 'mousedown', this._onMouseDown, this); + + this._map + .on('focus', this._addHooks, this) + .on('blur', this._removeHooks, this); + }, + + removeHooks: function () { + this._removeHooks(); + + var container = this._map._container; + + L.DomEvent + .off(container, 'focus', this._onFocus, this) + .off(container, 'blur', this._onBlur, this) + .off(container, 'mousedown', this._onMouseDown, this); + + this._map + .off('focus', this._addHooks, this) + .off('blur', this._removeHooks, this); + }, + + _onMouseDown: function () { + if (this._focused) { return; } + + var body = document.body, + docEl = document.documentElement, + top = body.scrollTop || docEl.scrollTop, + left = body.scrollLeft || docEl.scrollLeft; + + this._map._container.focus(); + + window.scrollTo(left, top); + }, + + _onFocus: function () { + this._focused = true; + this._map.fire('focus'); + }, + + _onBlur: function () { + this._focused = false; + this._map.fire('blur'); + }, + + _setPanOffset: function (pan) { + var keys = this._panKeys = {}, + codes = this.keyCodes, + i, len; + + for (i = 0, len = codes.left.length; i < len; i++) { + keys[codes.left[i]] = [-1 * pan, 0]; + } + for (i = 0, len = codes.right.length; i < len; i++) { + keys[codes.right[i]] = [pan, 0]; + } + for (i = 0, len = codes.down.length; i < len; i++) { + keys[codes.down[i]] = [0, pan]; + } + for (i = 0, len = codes.up.length; i < len; i++) { + keys[codes.up[i]] = [0, -1 * pan]; + } + }, + + _setZoomOffset: function (zoom) { + var keys = this._zoomKeys = {}, + codes = this.keyCodes, + i, len; + + for (i = 0, len = codes.zoomIn.length; i < len; i++) { + keys[codes.zoomIn[i]] = zoom; + } + for (i = 0, len = codes.zoomOut.length; i < len; i++) { + keys[codes.zoomOut[i]] = -zoom; + } + }, + + _addHooks: function () { + L.DomEvent.on(document, 'keydown', this._onKeyDown, this); + }, + + _removeHooks: function () { + L.DomEvent.off(document, 'keydown', this._onKeyDown, this); + }, + + _onKeyDown: function (e) { + var key = e.keyCode, + map = this._map; + + if (key in this._panKeys) { + + if (map._panAnim && map._panAnim._inProgress) { return; } + + map.panBy(this._panKeys[key]); + + if (map.options.maxBounds) { + map.panInsideBounds(map.options.maxBounds); + } + + } else if (key in this._zoomKeys) { + map.setZoom(map.getZoom() + this._zoomKeys[key]); + + } else { + return; + } + + L.DomEvent.stop(e); + } +}); + +L.Map.addInitHook('addHandler', 'keyboard', L.Map.Keyboard); + + +/* + * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable. + */ + +L.Handler.MarkerDrag = L.Handler.extend({ + initialize: function (marker) { + this._marker = marker; + }, + + addHooks: function () { + var icon = this._marker._icon; + if (!this._draggable) { + this._draggable = new L.Draggable(icon, icon); + } + + this._draggable + .on('dragstart', this._onDragStart, this) + .on('drag', this._onDrag, this) + .on('dragend', this._onDragEnd, this); + this._draggable.enable(); + L.DomUtil.addClass(this._marker._icon, 'leaflet-marker-draggable'); + }, + + removeHooks: function () { + this._draggable + .off('dragstart', this._onDragStart, this) + .off('drag', this._onDrag, this) + .off('dragend', this._onDragEnd, this); + + this._draggable.disable(); + L.DomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable'); + }, + + moved: function () { + return this._draggable && this._draggable._moved; + }, + + _onDragStart: function () { + this._marker + .closePopup() + .fire('movestart') + .fire('dragstart'); + }, + + _onDrag: function () { + var marker = this._marker, + shadow = marker._shadow, + iconPos = L.DomUtil.getPosition(marker._icon), + latlng = marker._map.layerPointToLatLng(iconPos); + + // update shadow position + if (shadow) { + L.DomUtil.setPosition(shadow, iconPos); + } + + marker._latlng = latlng; + + marker + .fire('move', {latlng: latlng}) + .fire('drag'); + }, + + _onDragEnd: function (e) { + this._marker + .fire('moveend') + .fire('dragend', e); + } +}); + + +/* + * L.Control is a base class for implementing map controls. Handles positioning. + * All other controls extend from this class. + */ + +L.Control = L.Class.extend({ + options: { + position: 'topright' + }, + + initialize: function (options) { + L.setOptions(this, options); + }, + + getPosition: function () { + return this.options.position; + }, + + setPosition: function (position) { + var map = this._map; + + if (map) { + map.removeControl(this); + } + + this.options.position = position; + + if (map) { + map.addControl(this); + } + + return this; + }, + + getContainer: function () { + return this._container; + }, + + addTo: function (map) { + this._map = map; + + var container = this._container = this.onAdd(map), + pos = this.getPosition(), + corner = map._controlCorners[pos]; + + L.DomUtil.addClass(container, 'leaflet-control'); + + if (pos.indexOf('bottom') !== -1) { + corner.insertBefore(container, corner.firstChild); + } else { + corner.appendChild(container); + } + + return this; + }, + + removeFrom: function (map) { + var pos = this.getPosition(), + corner = map._controlCorners[pos]; + + corner.removeChild(this._container); + this._map = null; + + if (this.onRemove) { + this.onRemove(map); + } + + return this; + }, + + _refocusOnMap: function () { + if (this._map) { + this._map.getContainer().focus(); + } + } +}); + +L.control = function (options) { + return new L.Control(options); +}; + + +// adds control-related methods to L.Map + +L.Map.include({ + addControl: function (control) { + control.addTo(this); + return this; + }, + + removeControl: function (control) { + control.removeFrom(this); + return this; + }, + + _initControlPos: function () { + var corners = this._controlCorners = {}, + l = 'leaflet-', + container = this._controlContainer = + L.DomUtil.create('div', l + 'control-container', this._container); + + function createCorner(vSide, hSide) { + var className = l + vSide + ' ' + l + hSide; + + corners[vSide + hSide] = L.DomUtil.create('div', className, container); + } + + createCorner('top', 'left'); + createCorner('top', 'right'); + createCorner('bottom', 'left'); + createCorner('bottom', 'right'); + }, + + _clearControlPos: function () { + this._container.removeChild(this._controlContainer); + } +}); + + +/* + * L.Control.Zoom is used for the default zoom buttons on the map. + */ + +L.Control.Zoom = L.Control.extend({ + options: { + position: 'topleft', + zoomInText: '+', + zoomInTitle: 'Zoom in', + zoomOutText: '-', + zoomOutTitle: 'Zoom out' + }, + + onAdd: function (map) { + var zoomName = 'leaflet-control-zoom', + container = L.DomUtil.create('div', zoomName + ' leaflet-bar'); + + this._map = map; + + this._zoomInButton = this._createButton( + this.options.zoomInText, this.options.zoomInTitle, + zoomName + '-in', container, this._zoomIn, this); + this._zoomOutButton = this._createButton( + this.options.zoomOutText, this.options.zoomOutTitle, + zoomName + '-out', container, this._zoomOut, this); + + this._updateDisabled(); + map.on('zoomend zoomlevelschange', this._updateDisabled, this); + + return container; + }, + + onRemove: function (map) { + map.off('zoomend zoomlevelschange', this._updateDisabled, this); + }, + + _zoomIn: function (e) { + this._map.zoomIn(e.shiftKey ? 3 : 1); + }, + + _zoomOut: function (e) { + this._map.zoomOut(e.shiftKey ? 3 : 1); + }, + + _createButton: function (html, title, className, container, fn, context) { + var link = L.DomUtil.create('a', className, container); + link.innerHTML = html; + link.href = '#'; + link.title = title; + + var stop = L.DomEvent.stopPropagation; + + L.DomEvent + .on(link, 'click', stop) + .on(link, 'mousedown', stop) + .on(link, 'dblclick', stop) + .on(link, 'click', L.DomEvent.preventDefault) + .on(link, 'click', fn, context) + .on(link, 'click', this._refocusOnMap, context); + + return link; + }, + + _updateDisabled: function () { + var map = this._map, + className = 'leaflet-disabled'; + + L.DomUtil.removeClass(this._zoomInButton, className); + L.DomUtil.removeClass(this._zoomOutButton, className); + + if (map._zoom === map.getMinZoom()) { + L.DomUtil.addClass(this._zoomOutButton, className); + } + if (map._zoom === map.getMaxZoom()) { + L.DomUtil.addClass(this._zoomInButton, className); + } + } +}); + +L.Map.mergeOptions({ + zoomControl: true +}); + +L.Map.addInitHook(function () { + if (this.options.zoomControl) { + this.zoomControl = new L.Control.Zoom(); + this.addControl(this.zoomControl); + } +}); + +L.control.zoom = function (options) { + return new L.Control.Zoom(options); +}; + + + +/* + * L.Control.Attribution is used for displaying attribution on the map (added by default). + */ + +L.Control.Attribution = L.Control.extend({ + options: { + position: 'bottomright', + prefix: 'Leaflet' + }, + + initialize: function (options) { + L.setOptions(this, options); + + this._attributions = {}; + }, + + onAdd: function (map) { + this._container = L.DomUtil.create('div', 'leaflet-control-attribution'); + L.DomEvent.disableClickPropagation(this._container); + + for (var i in map._layers) { + if (map._layers[i].getAttribution) { + this.addAttribution(map._layers[i].getAttribution()); + } + } + + map + .on('layeradd', this._onLayerAdd, this) + .on('layerremove', this._onLayerRemove, this); + + this._update(); + + return this._container; + }, + + onRemove: function (map) { + map + .off('layeradd', this._onLayerAdd) + .off('layerremove', this._onLayerRemove); + + }, + + setPrefix: function (prefix) { + this.options.prefix = prefix; + this._update(); + return this; + }, + + addAttribution: function (text) { + if (!text) { return; } + + if (!this._attributions[text]) { + this._attributions[text] = 0; + } + this._attributions[text]++; + + this._update(); + + return this; + }, + + removeAttribution: function (text) { + if (!text) { return; } + + if (this._attributions[text]) { + this._attributions[text]--; + this._update(); + } + + return this; + }, + + _update: function () { + if (!this._map) { return; } + + var attribs = []; + + for (var i in this._attributions) { + if (this._attributions[i]) { + attribs.push(i); + } + } + + var prefixAndAttribs = []; + + if (this.options.prefix) { + prefixAndAttribs.push(this.options.prefix); + } + if (attribs.length) { + prefixAndAttribs.push(attribs.join(', ')); + } + + this._container.innerHTML = prefixAndAttribs.join(' | '); + }, + + _onLayerAdd: function (e) { + if (e.layer.getAttribution) { + this.addAttribution(e.layer.getAttribution()); + } + }, + + _onLayerRemove: function (e) { + if (e.layer.getAttribution) { + this.removeAttribution(e.layer.getAttribution()); + } + } +}); + +L.Map.mergeOptions({ + attributionControl: true +}); + +L.Map.addInitHook(function () { + if (this.options.attributionControl) { + this.attributionControl = (new L.Control.Attribution()).addTo(this); + } +}); + +L.control.attribution = function (options) { + return new L.Control.Attribution(options); +}; + + +/* + * L.Control.Scale is used for displaying metric/imperial scale on the map. + */ + +L.Control.Scale = L.Control.extend({ + options: { + position: 'bottomleft', + maxWidth: 100, + metric: true, + imperial: true, + updateWhenIdle: false + }, + + onAdd: function (map) { + this._map = map; + + var className = 'leaflet-control-scale', + container = L.DomUtil.create('div', className), + options = this.options; + + this._addScales(options, className, container); + + map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this); + map.whenReady(this._update, this); + + return container; + }, + + onRemove: function (map) { + map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this); + }, + + _addScales: function (options, className, container) { + if (options.metric) { + this._mScale = L.DomUtil.create('div', className + '-line', container); + } + if (options.imperial) { + this._iScale = L.DomUtil.create('div', className + '-line', container); + } + }, + + _update: function () { + var bounds = this._map.getBounds(), + centerLat = bounds.getCenter().lat, + halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180), + dist = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180, + + size = this._map.getSize(), + options = this.options, + maxMeters = 0; + + if (size.x > 0) { + maxMeters = dist * (options.maxWidth / size.x); + } + + this._updateScales(options, maxMeters); + }, + + _updateScales: function (options, maxMeters) { + if (options.metric && maxMeters) { + this._updateMetric(maxMeters); + } + + if (options.imperial && maxMeters) { + this._updateImperial(maxMeters); + } + }, + + _updateMetric: function (maxMeters) { + var meters = this._getRoundNum(maxMeters); + + this._mScale.style.width = this._getScaleWidth(meters / maxMeters) + 'px'; + this._mScale.innerHTML = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km'; + }, + + _updateImperial: function (maxMeters) { + var maxFeet = maxMeters * 3.2808399, + scale = this._iScale, + maxMiles, miles, feet; + + if (maxFeet > 5280) { + maxMiles = maxFeet / 5280; + miles = this._getRoundNum(maxMiles); + + scale.style.width = this._getScaleWidth(miles / maxMiles) + 'px'; + scale.innerHTML = miles + ' mi'; + + } else { + feet = this._getRoundNum(maxFeet); + + scale.style.width = this._getScaleWidth(feet / maxFeet) + 'px'; + scale.innerHTML = feet + ' ft'; + } + }, + + _getScaleWidth: function (ratio) { + return Math.round(this.options.maxWidth * ratio) - 10; + }, + + _getRoundNum: function (num) { + var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1), + d = num / pow10; + + d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1; + + return pow10 * d; + } +}); + +L.control.scale = function (options) { + return new L.Control.Scale(options); +}; + + +/* + * L.Control.Layers is a control to allow users to switch between different layers on the map. + */ + +L.Control.Layers = L.Control.extend({ + options: { + collapsed: true, + position: 'topright', + autoZIndex: true + }, + + initialize: function (baseLayers, overlays, options) { + L.setOptions(this, options); + + this._layers = {}; + this._lastZIndex = 0; + this._handlingClick = false; + + for (var i in baseLayers) { + this._addLayer(baseLayers[i], i); + } + + for (i in overlays) { + this._addLayer(overlays[i], i, true); + } + }, + + onAdd: function (map) { + this._initLayout(); + this._update(); + + map + .on('layeradd', this._onLayerChange, this) + .on('layerremove', this._onLayerChange, this); + + return this._container; + }, + + onRemove: function (map) { + map + .off('layeradd', this._onLayerChange, this) + .off('layerremove', this._onLayerChange, this); + }, + + addBaseLayer: function (layer, name) { + this._addLayer(layer, name); + this._update(); + return this; + }, + + addOverlay: function (layer, name) { + this._addLayer(layer, name, true); + this._update(); + return this; + }, + + removeLayer: function (layer) { + var id = L.stamp(layer); + delete this._layers[id]; + this._update(); + return this; + }, + + _initLayout: function () { + var className = 'leaflet-control-layers', + container = this._container = L.DomUtil.create('div', className); + + //Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released + container.setAttribute('aria-haspopup', true); + + if (!L.Browser.touch) { + L.DomEvent + .disableClickPropagation(container) + .disableScrollPropagation(container); + } else { + L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation); + } + + var form = this._form = L.DomUtil.create('form', className + '-list'); + + if (this.options.collapsed) { + if (!L.Browser.android) { + L.DomEvent + .on(container, 'mouseover', this._expand, this) + .on(container, 'mouseout', this._collapse, this); + } + var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container); + link.href = '#'; + link.title = 'Layers'; + + if (L.Browser.touch) { + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', this._expand, this); + } + else { + L.DomEvent.on(link, 'focus', this._expand, this); + } + //Work around for Firefox android issue https://github.com/Leaflet/Leaflet/issues/2033 + L.DomEvent.on(form, 'click', function () { + setTimeout(L.bind(this._onInputClick, this), 0); + }, this); + + this._map.on('click', this._collapse, this); + // TODO keyboard accessibility + } else { + this._expand(); + } + + this._baseLayersList = L.DomUtil.create('div', className + '-base', form); + this._separator = L.DomUtil.create('div', className + '-separator', form); + this._overlaysList = L.DomUtil.create('div', className + '-overlays', form); + + container.appendChild(form); + }, + + _addLayer: function (layer, name, overlay) { + var id = L.stamp(layer); + + this._layers[id] = { + layer: layer, + name: name, + overlay: overlay + }; + + if (this.options.autoZIndex && layer.setZIndex) { + this._lastZIndex++; + layer.setZIndex(this._lastZIndex); + } + }, + + _update: function () { + if (!this._container) { + return; + } + + this._baseLayersList.innerHTML = ''; + this._overlaysList.innerHTML = ''; + + var baseLayersPresent = false, + overlaysPresent = false, + i, obj; + + for (i in this._layers) { + obj = this._layers[i]; + this._addItem(obj); + overlaysPresent = overlaysPresent || obj.overlay; + baseLayersPresent = baseLayersPresent || !obj.overlay; + } + + this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none'; + }, + + _onLayerChange: function (e) { + var obj = this._layers[L.stamp(e.layer)]; + + if (!obj) { return; } + + if (!this._handlingClick) { + this._update(); + } + + var type = obj.overlay ? + (e.type === 'layeradd' ? 'overlayadd' : 'overlayremove') : + (e.type === 'layeradd' ? 'baselayerchange' : null); + + if (type) { + this._map.fire(type, obj); + } + }, + + // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe) + _createRadioElement: function (name, checked) { + + var radioHtml = '= 0) { + this._onZoomTransitionEnd(); + } + }, + + _nothingToAnimate: function () { + return !this._container.getElementsByClassName('leaflet-zoom-animated').length; + }, + + _tryAnimatedZoom: function (center, zoom, options) { + + if (this._animatingZoom) { return true; } + + options = options || {}; + + // don't animate if disabled, not supported or zoom difference is too large + if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() || + Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; } + + // offset is the pixel coords of the zoom origin relative to the current center + var scale = this.getZoomScale(zoom), + offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale), + origin = this._getCenterLayerPoint()._add(offset); + + // don't animate if the zoom origin isn't within one screen from the current center, unless forced + if (options.animate !== true && !this.getSize().contains(offset)) { return false; } + + this + .fire('movestart') + .fire('zoomstart'); + + this._animateZoom(center, zoom, origin, scale, null, true); + + return true; + }, + + _animateZoom: function (center, zoom, origin, scale, delta, backwards, forTouchZoom) { + + if (!forTouchZoom) { + this._animatingZoom = true; + } + + // put transform transition on all layers with leaflet-zoom-animated class + L.DomUtil.addClass(this._mapPane, 'leaflet-zoom-anim'); + + // remember what center/zoom to set after animation + this._animateToCenter = center; + this._animateToZoom = zoom; + + // disable any dragging during animation + if (L.Draggable) { + L.Draggable._disabled = true; + } + + L.Util.requestAnimFrame(function () { + this.fire('zoomanim', { + center: center, + zoom: zoom, + origin: origin, + scale: scale, + delta: delta, + backwards: backwards + }); + // horrible hack to work around a Chrome bug https://github.com/Leaflet/Leaflet/issues/3689 + setTimeout(L.bind(this._onZoomTransitionEnd, this), 250); + }, this); + }, + + _onZoomTransitionEnd: function () { + if (!this._animatingZoom) { return; } + + this._animatingZoom = false; + + L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim'); + + L.Util.requestAnimFrame(function () { + this._resetView(this._animateToCenter, this._animateToZoom, true, true); + + if (L.Draggable) { + L.Draggable._disabled = false; + } + }, this); + } +}); + + +/* + Zoom animation logic for L.TileLayer. +*/ + +L.TileLayer.include({ + _animateZoom: function (e) { + if (!this._animating) { + this._animating = true; + this._prepareBgBuffer(); + } + + var bg = this._bgBuffer, + transform = L.DomUtil.TRANSFORM, + initialTransform = e.delta ? L.DomUtil.getTranslateString(e.delta) : bg.style[transform], + scaleStr = L.DomUtil.getScaleString(e.scale, e.origin); + + bg.style[transform] = e.backwards ? + scaleStr + ' ' + initialTransform : + initialTransform + ' ' + scaleStr; + }, + + _endZoomAnim: function () { + var front = this._tileContainer, + bg = this._bgBuffer; + + front.style.visibility = ''; + front.parentNode.appendChild(front); // Bring to fore + + // force reflow + L.Util.falseFn(bg.offsetWidth); + + var zoom = this._map.getZoom(); + if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + this._clearBgBuffer(); + } + + this._animating = false; + }, + + _clearBgBuffer: function () { + var map = this._map; + + if (map && !map._animatingZoom && !map.touchZoom._zooming) { + this._bgBuffer.innerHTML = ''; + this._bgBuffer.style[L.DomUtil.TRANSFORM] = ''; + } + }, + + _prepareBgBuffer: function () { + + var front = this._tileContainer, + bg = this._bgBuffer; + + // if foreground layer doesn't have many tiles but bg layer does, + // keep the existing bg layer and just zoom it some more + + var bgLoaded = this._getLoadedTilesPercentage(bg), + frontLoaded = this._getLoadedTilesPercentage(front); + + if (bg && bgLoaded > 0.5 && frontLoaded < 0.5) { + + front.style.visibility = 'hidden'; + this._stopLoadingImages(front); + return; + } + + // prepare the buffer to become the front tile pane + bg.style.visibility = 'hidden'; + bg.style[L.DomUtil.TRANSFORM] = ''; + + // switch out the current layer to be the new bg layer (and vice-versa) + this._tileContainer = bg; + bg = this._bgBuffer = front; + + this._stopLoadingImages(bg); + + //prevent bg buffer from clearing right after zoom + clearTimeout(this._clearBgBufferTimer); + }, + + _getLoadedTilesPercentage: function (container) { + var tiles = container.getElementsByTagName('img'), + i, len, count = 0; + + for (i = 0, len = tiles.length; i < len; i++) { + if (tiles[i].complete) { + count++; + } + } + return count / len; + }, + + // stops loading all tiles in the background layer + _stopLoadingImages: function (container) { + var tiles = Array.prototype.slice.call(container.getElementsByTagName('img')), + i, len, tile; + + for (i = 0, len = tiles.length; i < len; i++) { + tile = tiles[i]; + + if (!tile.complete) { + tile.onload = L.Util.falseFn; + tile.onerror = L.Util.falseFn; + tile.src = L.Util.emptyImageUrl; + + tile.parentNode.removeChild(tile); + } + } + } +}); + + +/* + * Provides L.Map with convenient shortcuts for using browser geolocation features. + */ + +L.Map.include({ + _defaultLocateOptions: { + watch: false, + setView: false, + maxZoom: Infinity, + timeout: 10000, + maximumAge: 0, + enableHighAccuracy: false + }, + + locate: function (/*Object*/ options) { + + options = this._locateOptions = L.extend(this._defaultLocateOptions, options); + + if (!navigator.geolocation) { + this._handleGeolocationError({ + code: 0, + message: 'Geolocation not supported.' + }); + return this; + } + + var onResponse = L.bind(this._handleGeolocationResponse, this), + onError = L.bind(this._handleGeolocationError, this); + + if (options.watch) { + this._locationWatchId = + navigator.geolocation.watchPosition(onResponse, onError, options); + } else { + navigator.geolocation.getCurrentPosition(onResponse, onError, options); + } + return this; + }, + + stopLocate: function () { + if (navigator.geolocation) { + navigator.geolocation.clearWatch(this._locationWatchId); + } + if (this._locateOptions) { + this._locateOptions.setView = false; + } + return this; + }, + + _handleGeolocationError: function (error) { + var c = error.code, + message = error.message || + (c === 1 ? 'permission denied' : + (c === 2 ? 'position unavailable' : 'timeout')); + + if (this._locateOptions.setView && !this._loaded) { + this.fitWorld(); + } + + this.fire('locationerror', { + code: c, + message: 'Geolocation error: ' + message + '.' + }); + }, + + _handleGeolocationResponse: function (pos) { + var lat = pos.coords.latitude, + lng = pos.coords.longitude, + latlng = new L.LatLng(lat, lng), + + latAccuracy = 180 * pos.coords.accuracy / 40075017, + lngAccuracy = latAccuracy / Math.cos(L.LatLng.DEG_TO_RAD * lat), + + bounds = L.latLngBounds( + [lat - latAccuracy, lng - lngAccuracy], + [lat + latAccuracy, lng + lngAccuracy]), + + options = this._locateOptions; + + if (options.setView) { + var zoom = Math.min(this.getBoundsZoom(bounds), options.maxZoom); + this.setView(latlng, zoom); + } + + var data = { + latlng: latlng, + bounds: bounds, + timestamp: pos.timestamp + }; + + for (var i in pos.coords) { + if (typeof pos.coords[i] === 'number') { + data[i] = pos.coords[i]; + } + } + + this.fire('locationfound', data); + } +}); + + +}(window, document)); diff --git a/www/manual_lib/leaflet/dist/leaflet.css b/www/manual_lib/leaflet/dist/leaflet.css new file mode 100644 index 000000000..c161c3134 --- /dev/null +++ b/www/manual_lib/leaflet/dist/leaflet.css @@ -0,0 +1,479 @@ +/* required styles */ + +.leaflet-map-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-pane, +.leaflet-tile-container, +.leaflet-overlay-pane, +.leaflet-shadow-pane, +.leaflet-marker-pane, +.leaflet-popup-pane, +.leaflet-overlay-pane svg, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + -ms-touch-action: none; + touch-action: none; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container img { + max-width: none !important; + } +/* stupid Android 2 doesn't understand "max-width: none" properly */ +.leaflet-container img.leaflet-image-layer { + max-width: 15000px !important; + } +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-tile-pane { z-index: 2; } +.leaflet-objects-pane { z-index: 3; } +.leaflet-overlay-pane { z-index: 4; } +.leaflet-shadow-pane { z-index: 5; } +.leaflet-marker-pane { z-index: 6; } +.leaflet-popup-pane { z-index: 7; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 7; + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile, +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-tile-loaded, +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } + +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile, +.leaflet-touching .leaflet-zoom-animated { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-clickable { + cursor: pointer; + } +.leaflet-container { + cursor: -webkit-grab; + cursor: -moz-grab; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-container, +.leaflet-dragging .leaflet-clickable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + } + + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-container a.leaflet-active { + outline: 2px solid orange; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } + + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } +.leaflet-control-zoom-out { + font-size: 20px; + } + +.leaflet-touch .leaflet-control-zoom-in { + font-size: 22px; + } +.leaflet-touch .leaflet-control-zoom-out { + font-size: 24px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover { + text-decoration: underline; + } +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: content-box; + box-sizing: content-box; + + background: #fff; + background: rgba(255, 255, 255, 0.5); + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; + } +.leaflet-popup-content p { + margin: 18px 0; + } +.leaflet-popup-tip-container { + margin: 0 auto; + width: 40px; + height: 20px; + position: relative; + overflow: hidden; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; + } +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } diff --git a/www/manual_lib/leaflet/dist/leaflet.js b/www/manual_lib/leaflet/dist/leaflet.js new file mode 100644 index 000000000..ee5ff5a1d --- /dev/null +++ b/www/manual_lib/leaflet/dist/leaflet.js @@ -0,0 +1,9 @@ +/* + Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com + (c) 2010-2013, Vladimir Agafonkin + (c) 2010-2011, CloudMade +*/ +!function(t,e,i){var n=t.L,o={};o.version="0.7.7","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator, +transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n); +case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document); \ No newline at end of file diff --git a/www/pro-manifest.json b/www/pro-manifest.json new file mode 100644 index 000000000..97207ff1e --- /dev/null +++ b/www/pro-manifest.json @@ -0,0 +1,7802 @@ +[ + { + "href": "index.html", + "size": 7802, + "integrity": "sha256-E1AAm+vZzbmaQLlpYG3CKYYtPFdvsPrVa9Gt+zDsL/Y= sha384-13iMrApq8dY1/X1oVk6RYb+CpyLd7AaFnH9w/8MnC4pm5z4nqVzjJW2uDXaIQbiG sha512-xStUF9/qTMGNxaVs/OlxrxgeQLLGmLMaXtHOzGSbzRopSaxKz+ZM2hJkFq/yv9U0awcyJjXmCOEmrwGwERwc2w==" + }, + { + "href": "build/app.css", + "size": 382750, + "integrity": "sha256-GZlNWzCg8Fm92GMBtI9oYpcfitu5eQ0JQVPJih0R8Sg= sha384-q9v12c/folAcTspbppkfmt/hQnfX9nZ3stWjPqsylspxcJjXu4OXilNRfps1Zw93 sha512-rH39wnhR05L7+f4b94vo0YHUONBWHe5t4ar19zx2kKt6JWZGgWu14RsSS3KkHsyu1pxhZOzsvtum2an9qNiu4g==" + }, + { + "href": "build/static.css", + "size": 7023, + "integrity": "sha256-LKbFG3WnREaUY2ZC0qgpfg7EWnPNjymLi02LnkB1IiY= sha384-RYPrGR2+LXQh8SOys2lCBcWNH35VktJOwI7FV82MQm5rWn13GNYIOepJoBdrbbYz sha512-iIFThCrOyQW7/h4cZ0AZV7clZNVQdtze4WX2ci4i1EOvLu1LG1b96bfZf6plLiYyHyNu9z93MFg11MdPOumhsg==" + }, + { + "href": "css/datepicker-override.css", + "size": 958, + "integrity": "sha256-HjZFPTg7cQsrHpU5KvkIXCyku95DYze+z+mT4ZweKSg= sha384-saLEFsTHiuRy5Jtx/9pCnOA48zvaeDC+nQsmgqNzNItmjO+BWLJSnK8V1UunEyPk sha512-ZWPLrD3ObN2EkhxRFmRFg3Ji9Xk7F0iB9zVDLU7gW8RcMay/vH/zamU9NU6osJPwy49Yv8Jzl6gqjytY5hvrKw==" + }, + { + "href": "css/intro.css", + "size": 1820, + "integrity": "sha256-PeG+7y0+sqESForehbJ3YY6+JfevRheZGAPtubiG3dY= sha384-kpWw2YzluHo2OT4GJX2ApxCcb1JUw/dXwxnyN5tKv+dXgrbNnxTTA1YsCZqTdkJJ sha512-OCQJgGJ3ZTGsGbROS6OIhVKcD1lwCzFFPGkNTOpfLJ5YeJNO8idmRMil5xsJ1hHTe8/+dJoIIysOCtv03/c49g==" + }, + { + "href": "css/main.control.css", + "size": 1296, + "integrity": "sha256-GJ0Tfx2XDSWG6dqRGKwC1QVuqzuhshhEF6KGOsaw3BE= sha384-bIgfeWwB6xGIbOGVaZZVdArRB9LzQ9UfYxkZHbnKH8c3+/frWBzEqlGYd94MNtXF sha512-yw/nJka/ZwoxtzU7SixsvismL8LNabJ14tb3gvDX9/Xs+FoNACG2wjwalXCqpkN9TLyLwO8tZVzkwPXGJJAwGA==" + }, + { + "href": "css/main.dashboard.css", + "size": 10442, + "integrity": "sha256-9JD4TiowRhsiRNYsEsF3fdP22jGnLR8M9A8gKuTD3ik= sha384-kNI6qUWLJJnhspPiZi1yeSMiLSG2b4rqo0Sb3GbBFiS+cKj7Coxy9DQ2XBv4vOUl sha512-7WzI6vOlZwdQC3UMlIICwfnbFOyguRSFoyjClbmDw3jD44GsqMKNajwSx1aL8X9DpSWqb2Wd481M0rGY3mnKxA==" + }, + { + "href": "css/main.diary.css", + "size": 7981, + "integrity": "sha256-IjoV8XIi3+5UQOGO65RS6MFyDxwihRRtIxe/toHAihw= sha384-BRz2tSh0NtE7n5e9cb2/Z0MtHq/P8jQ57kZLo0uJBJcBufK+MU1raokXgGdH1v+d sha512-XJLMRxaVqIQHHHx5b4agJCRIB8+NQKFKl2JpsfZVLxQXQ68jzZ4RC4q/UVYicM+vZJpUG1egfiSwnAvJ5Gs3wg==" + }, + { + "href": "css/main.recent.css", + "size": 201, + "integrity": "sha256-VqklCiXN2Ff2pN/JdL5qPSX0/VurlsB4pTgEWS1PW88= sha384-d10/i78yikK9B+d6YdhcQ8KqpaWfMN3os3IWuwlUVTXzvT4greL1DejCK3Y4hVyA sha512-ye4I1N+TYtnYMH+QZG4Op8zI0I5+ZIrzFpickAm/HGn0xgSpE84IsSmhnmhXr3j9InQV7KniLicRaTiE230D8A==" + }, + { + "href": "css/style.css", + "size": 19597, + "integrity": "sha256-bwiXzYbOnWFp0TJGLdz3ADlHtRm4MVap+0p+QTNhPuQ= sha384-Beyjb/UzXrOcAl+fdbp+1M++cH2YobLOih9KOPq2hWedYL8XjExfsFzLeSUG28QZ sha512-X14nh4Bx9HWBXGvtjrcpjYtJdnQ+QVe4BxbaqjulgPOdTLR5sqGba/a9t/mOODI8kqQuRyN9normRxjQ0CTxFA==" + }, + { + "href": "fonts/Lato-Regular.ttf", + "size": 75136, + "integrity": "sha256-6ol5wizx2DDj/5OardScxNeMhR48tZ0qqV6hDudS1dE= sha384-RVylIYC19tYQxl760RJsccEyra4oHMtb6jpye9HhMGGiR+32WhqRdom/zfTr+/y3 sha512-8a+1rJ8VuEJ0K1bBnpxId35Rj9BBuWpmjqXnWKLEhGVzyfkTDFXp4Bd/2c5k2qZ8rZrjyezgROWhuOIFJcZMxw==" + }, + { + "href": "i18n/en.json", + "size": 22441, + "integrity": "sha256-5c5aSBRZt1bREmXvxOf9DTkQdJR2ReaRpeCsKIyz3QY= sha384-XTUnfJc+JlfBic9xjDSlZQeeGoV18GxoaTk+TkoXPuPxcXiPUmsLO5iuNO9tttw3 sha512-Ui6Xl5PlkUuucAWfPciYuydmpRQzAUec4Qe9k2ImK3EBTf15AWkEwC6WU52XnOzdsRwO0jOl/ROq9tBDyC0JVw==" + }, + { + "href": "i18n/fr.json", + "size": 19515, + "integrity": "sha256-sxKK7w9fm3bkfvogQVxaAIEAJSMcGNUcRdU9Csls4mA= sha384-boP2C0QI8bWKn3km68JypQZNSM/U+sIGQxtBq9e2vsiGwDmEj2shu2hppvMTGrqt sha512-SRn5j/ncv9sklIeuhNUbf0Q8lmC0GepadjSiGBxgA4/V4B+NwVrA5C59r/qMuNnw4SEG/Mkm9DKjWrlUo1hJdg==" + }, + { + "href": "i18n/it.json", + "size": 10222, + "integrity": "sha256-U9q2I6WrCJOrvp6qqD9ibWfe9WPuD7KumET171PUxMU= sha384-h0eaJ1yHm9cNWPYUSRQUKDK2QkelepEjzSWQXlLLqy71oNOi9woSOb19N7ZuoZl7 sha512-N5mw9X86wP1fBIl0PtLD6yAZDxIBbE/vIOv/Kx4jm69ZZk2XTTPUf3IsRWy/dgEF4AxD1ih1iFzRjgtUi2qcAw==" + }, + { + "href": "img/adam.jpg", + "size": 42497, + "integrity": "sha256-fczkAgBwxR2pc94gjyNvdvvReEXoeM4tAJdBQlkhvC4= sha384-06JutbK4G1xxTkMD3WweR+vdP9Ohtf5fPuyVV42w0L/7jlY1v38Z8fW55hFFJkTx sha512-pBTL7wzkM3z8jc5hvc9UmoeMm20r3KLI5Z7yPKOOTflgY92S0GNcVW8GaNHXfN0Sgs8XJ6P/aEGa64+R696Cug==" + }, + { + "href": "img/avatar_1.png", + "size": 5090, + "integrity": "sha256-ZXYEiD4v6b6+IfGuK4ibmSbKWJSoovA6qAuvCHpP9OM= sha384-5oYvU8s7gSrKxfth0gHY5TCfkkzU+QmwcS7tQ2KfUzRugVQN0TncQFVjvpc7OQvJ sha512-lMlGVtGAUINu7BePe7Jd8NlfiVbiOfHbkPv3owM6/epmLpCiDk5cR5fiRUH556RVtB/cEV8ESWdk5pzbK2Tzcw==" + }, + { + "href": "img/banana.png", + "size": 17036, + "integrity": "sha256-mejxat9agk6BUcUBslBisVyunB0x/Y3CAcyK86jnn9c= sha384-jnVuzV+p0f2d6gnc/YSjZ9x1cWLbF72bGQWInZAVxfzJ2Q+FsdEkG84fCb4eXec7 sha512-+jTryVpxloqmWfi9vLtTi14GxaFf8QP9YQkYqU/qrr3pl8KPpgwMqNmcfUDNFXaElYyTAkS1Hx+IFvvMv4V0WQ==" + }, + { + "href": "img/ben.png", + "size": 266479, + "integrity": "sha256-FNEil0tYd6ZrendGuic14kaNUA3jqJMaYaFr00UNzvg= sha384-6QyrF8uFgKCDoaxlBaKGA918S2OVkKhWxphLKXgpK0DqMafYApf7jHuMOU8TMPdW sha512-uIFqRQBZK+KSAES4vnNGrAVHHGWYB2Aya+/7PiGlWiNcw6k9ruXkUKy5bt4Yej4s+Tdx44V3tDFtvfryPRWhnA==" + }, + { + "href": "img/cookie.png", + "size": 19056, + "integrity": "sha256-O7oM/JELnKQtQPl9VPRJHl5fVlpGESM9KOEWPMiERtg= sha384-wn/DK+vkYbjhqjc9V/WEHSZ74iKPA96tcgs3zDAdJx5Gf0GhujOXfwBfsMRer0ml sha512-PMq9u14oVvqZTw1ce7Gkm5F1VV6b45voEopOlWyruOLe0zKGAMT1JOQI+eKu/eDSiQ3KnFIYQ4dBfmhRgyCFXw==" + }, + { + "href": "img/cristina-matos-albers-c4sGBJkDrjg-unsplash 1.png", + "size": 80168, + "integrity": "sha256-arYINq2gHNMXOw5goxZ+AHp0XUtk1X9bR1TxXjlCtLw= sha384-qnzE4obt+QN+qX7IK1ZwEj3EX3/G6IaVf/OL6W20O/rcOY+87OxFUnn4i+htja1Q sha512-9hJea/FFFPZRaAGQpo95GA8EYbJJFdbCjkFTRSCf2ougxwVHoTpihGhyfzmk8smRYwZVZ0+na/5rJ0H5eS+XjQ==" + }, + { + "href": "img/daniel-roe-lpjb_UMOyx8-unsplash 1.png", + "size": 70050, + "integrity": "sha256-po2CmbU2qXs95QCKlMbW/DxMVR9hR/INHCbHaYBCAAY= sha384-bY0AqYitgH4fgpGg08fjUlgkxi9/FsSmssmBpmCx/bbDcz51io6kQC2gkJlR2uxN sha512-WjASs2oIUyelWD3TbzZDZdh8z6l3bH+bgKnKTcvTWpgxIEdXH2IDCpkc2ukmAykYaTOpwgSltXQ77bCfUikWcQ==" + }, + { + "href": "img/ic_header_gem.png", + "size": 3775, + "integrity": "sha256-IkWcS/QSsu05qxx7ayHFXVlE00Nx7WsfZ6swk9TBwYo= sha384-F/7i5wsreOodPQHlqARwHMAWq6S7sAR9ctBpP4dKfcQccMUG2sl2ZMQIr0/rZp+r sha512-beOYAftBVxKQNDnuSfOGhfHRC8fsduPpwbhgOg+ZZSOt+oPi4Pzv3540QIe04esDOLxtM7R+bBGx5GEpY/4cdg==" + }, + { + "href": "img/ic_header_gold.png", + "size": 2946, + "integrity": "sha256-TB8raSirdLeNeeNR8jVwzzb5AcTE0hGu88zsBlnVEoc= sha384-/GHaLgaZx/E7h8bkMdmmNL9SEL2Lsf2CiEsw0ytxKts3K0hW/QjpfKIW1F81jPjL sha512-RUGY13CYrMnZn/g9N5P0xsiVpUdGYLIU+spiSajcXqgidUJzr4jwGRLgVVB3/chG/3u5HuAS9dI83MHA0BSfNA==" + }, + { + "href": "img/ic_header_healer.png", + "size": 21425, + "integrity": "sha256-0dIVhKmqExQSlRTSU57u3ukaSkTnLzfr2XpyCSTdNhI= sha384-32HrPyTnpEY8k8uxzQQJUgWmwXpnQVgI95QQl34B9UZq15ELfmi/+4cMMM/N4d6k sha512-o79DEEWTu4VT0ngofYiedC/VuRqK/aY2zUEo+QP0dfLi8q/B89bF5s8yPVSA6p8s7x+PGvbud8yicservTgHag==" + }, + { + "href": "img/ic_header_mage.png", + "size": 20533, + "integrity": "sha256-TGDON7AbljhmJCa5IS+HsCqLEDSx21wpIH6i2mc8Tqw= sha384-YIc0I1Li6wzrAdfeTn+3u5n/17q5LAQ2MkjQeL9ADMQR2xITB6/EHj91BTmUWnrN sha512-Jjevw7Yx02a2uPhIPwhcdXZOS8ierrRKBwOPva2jEXsEGZjEscNeyeZkvydqEYJe8CjlQ0U/DT/QYZAvRwS7Ag==" + }, + { + "href": "img/ic_header_rogue.png", + "size": 21230, + "integrity": "sha256-bIxJvTJRLfNS7lMu2KdBlKzfPse7u/ynezp4uPn99Iw= sha384-JjPXLScYSs30DOH2TXeYRfazOkUys2TuIXbgv1bkUrMfLsJrDZEgS5kqKA/3w3BA sha512-YIbDyY8v/JHkneP1RdoEMRo6cz0gddh67MlBKX2BK+5xJ1TYQPK7fCWX/SyDVy7GpKRarJKwM314R3+4SfrXUg==" + }, + { + "href": "img/ic_header_silver.png", + "size": 3491, + "integrity": "sha256-KvbZJRIB+OCGy/8GLk6CWPgzl4KZL4ZOEE4TC4gyvxA= sha384-kJWQb/a+6GDfa+Lmiajw3/3dbS5zQ4SlFjKM4Xv+JPI/lbYYBCL6FyMErpzmBaTP sha512-Ycr+vVhcCqmEZjbm9j7fXnCvxyyJqrL6Pg3zXxdmgdUBsEZbyLFtzX/zMvOaDAS/1BNb9Bri+5jGN70/7Hva3A==" + }, + { + "href": "img/ic_header_warrior.png", + "size": 5654, + "integrity": "sha256-+/lIX6gZGBmky20CP0q479j5yM/zkXrfvtZUHbskxNk= sha384-Tus0XF1Cuq6Nx2QMktIZQiFvFIGtOrbWM/rJoOZoFkDHyScvzHgPnpz/G9MW6dNk sha512-ZMbwf4iC3UrsU/EH5qO82m1UvCbQvnzvNQoMD+l+o17u3fmMIFBxq6x2inE9CoHGaY6YpbPysm911fT9WbPsnw==" + }, + { + "href": "img/ic_navigation_black_24dp.png", + "size": 803, + "integrity": "sha256-WIEL+sCFgApJ0ORVCRkdh9sr+E4Bqwnm7+JLMEkQA3g= sha384-CoZ6EAWg3nuzIh6BtHPCprEC/vfc4H9lFxZCAgt13UivBxqShbmXAkFJ7ZDsoeNw sha512-VK/xfdMKL7r4umxSl0EVLI+ljbCFD1ID52UxesOqfS2J/LO006WfRDVmCn8FOqTkmpfRGRfsAZkreqv5BXV7NA==" + }, + { + "href": "img/icecream.png", + "size": 16271, + "integrity": "sha256-H70qlDc9WptGkITY+fzeB2gDMvcVcppKd3cpmYLvwAk= sha384-4UqNcG8wDxlLNZrupVlRVxRAnwqbnAIZMPMgtCj3w8nGhx30vaMolkbgQqn5UJWk sha512-XJsHSpFclao9OUq7YUTG1jumHDsIQzHw9C4s0nBgkgqMi8HNi+UnYwCZCuwlK8N1LJiL24Qfi5Pk0M4ifV9CYg==" + }, + { + "href": "img/ionic.png", + "size": 4757, + "integrity": "sha256-klo4cuf+fAh/RUmVpwCfZo2/hmg8liW49ITH0Cu6HWI= sha384-TjNrwt/JDs7+uahxpjqSHBIsXHD+cM/M2+kwp1kKCcYdxx9XwtypwjxZXsu7/kZV sha512-izroIg4KabsPkiprCyb1LF0MgkD91ZaoMLT1Swuh81Yj5kmaaXkwGOyQFVyqMlS3ZLK3ECD8VNCaUElO47Lkrw==" + }, + { + "href": "img/max.png", + "size": 18611, + "integrity": "sha256-P8oreM/YZ0FENBarSPUnJRu1LB1F+cfTlRJiD1NesLw= sha384-8sWhLo34zMj7aOyZwrTLmXbrz6n7qORnGJSb3Yu1jH8Yyati7GLaezmyI/MHUJjr sha512-guJTKFjphqUFiUw+kTxLyYw37eWOEFfq4Xr4TfZfWM7WwTX0J3U1mXXdgtWvCp5hG6usdlYvCN3/O5WdWFAHfQ==" + }, + { + "href": "img/mike.png", + "size": 238136, + "integrity": "sha256-0B1B5XGkQ3PLTExYDXocJ4gwn8J8xTSrsuOoYhSRDDw= sha384-dAZWsUUAeK/yoANMcRUgGHpQcFs6gwPUoET8cGb5phB03868wHBqXcF0U3khIOyy sha512-hzxs1FVe13K7Uiku/oWnB1W5PXLcn3VW/GpH0nGoxqEybTjz3Pzk8K7+kHpsxJ913mtW5u5Qb3FrMVsiT1Wq3Q==" + }, + { + "href": "img/minus.gif", + "size": 4635, + "integrity": "sha256-V395NtkViu2ssZhQoRs0em1Q1CB0hbiAMIAV8JlBnRY= sha384-cv9LUoIkeZCUjiCi1hSWge/awWUPD8ykD2Fo75S11LX1loL9bubrwNUO5orxjpMx sha512-JOcZFaMjaqjPuzEk5pzkjAqj/aDJI5Niu+w9s7hqwW1lg1VsHpHBCrfnS6gduO+eR7DN18k0RDj/ZbWzvt7QFQ==" + }, + { + "href": "img/nileredsea_126b5740_small.png", + "size": 36171, + "integrity": "sha256-r3pDDtfwR7VwSAy/g3PZPX6idvk3lYxlBaochouqR/0= sha384-koXTNHUhIxYerWsHQwnGudaxHdhJ6Lu8op6WlSAKa0387BZ9OVSjBdj4XHVeVygY sha512-dQw4Gul7592zS1y78j5aSsjF8wtmoUt4HkEpJLiS3dDZFwMPmotGe15sNBOddfdUwt93ajSlLWQHoQsca4KlTw==" + }, + { + "href": "img/pacman.gif", + "size": 80346, + "integrity": "sha256-5BNBshn2aC1AxvyttTAN23nA3Xbsj8HZ6+Yo3gb4nrk= sha384-biXr0jGge45QoEdEtEJSE4blDTmkM/fiF71Jr8RrlX8+tM7ny5aMyjHMCSo2X72W sha512-wZzKCizGIxcJYyEaucvLMxSnD6hrzX/URcaAY/lc9UEvsl9iZ/PTc3WWYbXenu7cz+H4zqJ5DuToU6xhinemQQ==" + }, + { + "href": "img/perry.png", + "size": 571942, + "integrity": "sha256-H7AWL7jpAp2OeCR+B9DNEGsPhiDxJ/bSvW9dNFXvDyA= sha384-K8aS3jAkjNTnB5tIgEM4K3dAKjSNqotOF/q5o6DjjGejouefZ5fYGZI0OvlIuVoc sha512-gKYkZFVOSBC6XBLfGrx1ts2f4Q4JvzO6332+YvFaoDz0psyam6EXHtNRKGClJ5eaPtm/6n0RIoKZ/1mHwO39OQ==" + }, + { + "href": "img/plus.gif", + "size": 4633, + "integrity": "sha256-H5EDZRaHDL+iWdw56BbKHpHPdWU+aXwvMWvDr+Zznic= sha384-OtOxNWYtCbExydfM01pjUYLWPZzLwMoMGL8f3HYGsEHCxU0K70wwtJCz5uhJpwqx sha512-2zw++89Tdr8OflZqZ2d/PMLpURQNkrhl5/FlDNncwON4mwXkshbgW2u2ekPTVBTHwFeyMf3a+DiGesHa9mSitg==" + }, + { + "href": "img/ricardo-gomez-angel-_7favoo7jy8-unsplash 1.png", + "size": 83617, + "integrity": "sha256-ivyN4y+bJdEKdjzg7Whbe2TGat2fVhEFT2xJZEMhLW8= sha384-NbSBgUYDc0ilSLTgSOZ306DtpbRpruRPL/U5Kk9Jh2XNIrwRBB8ssnp9H8LZPVXi sha512-qyI48bbTb2cYv6MLuobyOZJ0hWDrumiIpjmciQHaLuR7t+QW1rdFBnlwpwtLHiB2Oh4nMtzlRgex7RLlhtN2ag==" + }, + { + "href": "js/app.js", + "size": 5605, + "integrity": "sha256-LhFYorw1rlkLRDEustzqqprxnMPf2qhXu2KT9HhwBS8= sha384-47DuoLTmvKZhdqDkSDPpX5FiF0YMPBADpV7NGAH9E9ZT/MMgzU4mvAqp2snewWt1 sha512-FvTDr6dAXlEukiDL0/SsEYzlRST1WzVlJH+yr5p2EPJ5YXbknahGWXvldon5sZIFxNt7LWt+/aOe+G7f0yK3pQ==" + }, + { + "href": "js/common.js", + "size": 1914, + "integrity": "sha256-xJVjeJRXv5vByHlQzF9//FWQ/n+eOWOLdqfDBcTtZxA= sha384-yVkI1Tx1xOKD0zl//XghfGgnSNRK3yaxlbV5XMrJD4gM8SBpR9adtzQFCe17WDCR sha512-fDOS3XGP5QbCl0xYHXylwUYjda46pxHO6YSSE9EsX/fH/mUKULP2hXncuwz7hwUP1y3OvMgjhAfveOvO/BdofA==" + }, + { + "href": "js/controllers.js", + "size": 3971, + "integrity": "sha256-EJG9K6w57THur+SKZs8rOylFHnLl+A6H6IwcSmxAxA8= sha384-eNpeQg58Xj2OaGmu70nfsDe+Dc8nHbJ243ElFee2O2Fbs+E1Hq0HzGMoEzRrSWje sha512-NOc799dhpkVW0/DRAx2AY9YgFNXDXYbnrdJDMpYrIZiQJVadwMHqiY2BNLM2P/VGUu0uWNn7O+sFB5KR3OWu3A==" + }, + { + "href": "js/diary.js", + "size": 1287, + "integrity": "sha256-hMyT0xQTuwk2OYaWMeLncOWPNczRZUZ23KpwbGAFwlI= sha384-JmZuU3ev3mGfyenawjLw9lCWU/QkfXISQh5AHrIFGkrMjkjZ8dRF2wdnd4o+nLpc sha512-eXKl5KKbS/YIiqd+kRPD9mV/dvnw0qc+3O6psqCeiUBAiREsTnUqglZpfICE8oLDYAhAL0A8LAFb0+v36HNZFg==" + }, + { + "href": "js/goals.js", + "size": 34603, + "integrity": "sha256-6ZE3duMgCEPk7h0Z0uX0vjl4lVR3cglTW3aAeF8ENfU= sha384-43LsmUnvQM3Mv2QRvtkAu6VkWKAtVwh7ZqV6YidgEpT3Bxh0jo8owE8WR4c1KeMM sha512-Ta/eOYgnPYohB2WPZfNxibZKqyRqhVyptLe+GFvMFczzApsNTOerfrQOvLyI3Bm+8PAaXlz11nknaShZTCdaVA==" + }, + { + "href": "js/heatmap.js", + "size": 12512, + "integrity": "sha256-znfZqZ7jR1hk7LRiWavBDoYrkKeTEYkkv7tDvOnZ0RU= sha384-L5LNmshbtKkQbc6ZDkoCv4SoWk7wg1EQspOeF4YeAioUV3Q4lhl3Dy/dagk21vEY sha512-Pmm6yx8N9ILWYW6yLTWLUP00A1jYlva61y7wzKAlWqqOZ8VyTPXo44QfKspdJM5kec/KDuMpY2iQ+2w+DxOFRQ==" + }, + { + "href": "js/i18n-utils.js", + "size": 1431, + "integrity": "sha256-ryi4WHAKnC/7/RtY3b82Neil9LWQ8Q+RHF96Sb2nsSQ= sha384-+CO/QiX2ojSaFaq/3hic4z+fjza3P5Wd3x1kMXm5Orlj59eZisICeIQ5DxCxMYim sha512-tAJLFXYOt8RHBL/JtGnVtQU/sK99pCEtC00PABeXdRRQEdYo4KROGz0xVlc2WrCJq/0iiFJ9eEzPiLa2b24Clw==" + }, + { + "href": "js/intro.js", + "size": 9507, + "integrity": "sha256-/8iD9pWp5+Dnpt6ZhtAcLQE8RbsyxJLG4JF8luZ5AYE= sha384-OTgwd8bndgrcTlJOTvZ1m6zemMhOC3vJ2OuAFRf7JUt6nlwez33Q3oItQsHPIerz sha512-QxHT0DzP4mK9s3laaYoI3/6exuITy2LRhuqKLjedFwqCVYWjNCiH34WqjFkfuKEhgtXT2yR/iFka9socrjzlCA==" + }, + { + "href": "js/main.js", + "size": 4250, + "integrity": "sha256-JTGzTrZpOSxzyTrEkKtQPO2KWtKiqpXe3Im8+kiZ1mk= sha384-PL8iLc7SUuxzJNQR5qo9+noBlD87axrF36HwUEfyguH+O/WiNpPlrVsqTVOHkQWO sha512-P4RxvNO98YtNUSejaVwg20i/cGnnmtgacvPQL8vmYjdhwPKLij/1G3F6HuDx3q+rmbzVxZ4eGTTfYPOcpi2ZXw==" + }, + { + "href": "js/metrics-factory.js", + "size": 6247, + "integrity": "sha256-T5OHv+w6C4ArPr5JchBGOLILSirWgNQaV6qVU1pMfCs= sha384-4sNqTAGyn/n++VOjNG8pHKqaD7YOyeSz7DrCFORbY8C5hAMLW0ye5hiTQQ3hLJEQ sha512-gFN5fTQOc1N9pJ2pmNK2r1BSA01tDTEEkSjdwvyBAO62Ayp+690ib0EESLEr/XQWTyNdXkHJi5CT/3M89DTjUQ==" + }, + { + "href": "js/metrics.js", + "size": 47342, + "integrity": "sha256-M6908Rlj/VA3pz/1j7Iu+0CgjJ4S9ev6KvULIP0kiDI= sha384-mRAn70o41rJeYqgF+0/5Lk+zlMqJ6iBg6kiebuz1vPODZKpAEOR2/HMaAoueW17U sha512-2CGx95D6bkkIV8XIJO6HgiFWQS2N+YdGam7eC6W9XOdI7KEQoCUqslgSTQGSduh7fxXsKtKZFt7Zv9MVRqR6GQ==" + }, + { + "href": "js/recent.js", + "size": 7238, + "integrity": "sha256-JR/S3W2s5IjGJPPQOUHO5p0wgvP7axAd5Pf4uM6neow= sha384-ujVlEAon8Z0NJwzlAyDx8F0ebEyaqhq6tr9OWGZT6NN0x6pIM6xWANSxZ3RanU2z sha512-akqNLVA9XrptHNDxZyollfO03+ViAfLPqzSWeS/xyYnXs9kXlMFGkecPWquSNEt1Ll4BFVRsq7PUAVZAYni+sQ==" + }, + { + "href": "js/services.js", + "size": 26916, + "integrity": "sha256-kZjlqbNq+ChfyIOMDXBo9i0BBmqJGHXOdRddpvrz7EM= sha384-BmvX3ERo+fnlZFCjL3HyMr4NSy5OyynvS4WQVtny6ZbhUKzcuzq1Tn5umvNsaX8/ sha512-QPI6eZXMf1zaacVZlekEUK1pNLrgQQLbq/4Kl1kN3GD4UkXbMABSEUUhOChS5/oc+BUNJrQf/uYdKbTVblS3Rg==" + }, + { + "href": "json/connectionConfig.googleauth.json.sample", + "size": 490, + "integrity": "sha256-vr2QCQoMHVBkKabQjO9+rAXmP01HFPlhoJVs5zkMlHc= sha384-3d0y8BAoqCXhmvTT/86VN6Py6M96dplpT3LLOxmK1lZx0evhbonGq58sGliPwpwn sha512-lEkSFATI2M9Kw4KEzEwfg1Nr2Z81Ciew3eXm5MaDGHeMla0tMEkj9couN9oGOmlLBOpaJPX1EEA+u7L/x7QlDA==" + }, + { + "href": "json/connectionConfig.json", + "size": 338, + "integrity": "sha256-xmaXV1LN8Y5950dsWTOx48wm/v+ghqgXaZ6TLpX5i4A= sha384-7lV2OeHv6ta93JO7gElhQku74zRIvs/+YW3jt81sAPuEqOgF7bvlrkiwprL0js6+ sha512-w9vCRJMrCc5Z0RH1PSQ2FGxpXw1Ucctt3Dz4I5QXaD6P0MC01J/aoUuCR95r3YgZLXvnmNMF625wkUjTYm4m1Q==" + }, + { + "href": "json/connectionConfig.openid.json.sample", + "size": 644, + "integrity": "sha256-zy+aNvnSyj+FBryzeCirIrvLZ30lXSWj+fTo0kwaZJU= sha384-2Epd0bzFCOzmiiblzgCO99PuiohVAEfQasEXRLG4gGwuRDZSJojxqsy03ZnRwDQB sha512-rqSUOLVq4ziey+AWkCdoS5/+UDmWYYgNROndIf3f9qayZikn5pWrNo3ax/+J84W5FD9TWxv54HuYoYQE7l7DUQ==" + }, + { + "href": "json/connectionConfig.physical_device2localhost.json.sample", + "size": 337, + "integrity": "sha256-39ZBbd4RydjeLCH2k6p6m2W9TRiO1tGXikFo9W2UygY= sha384-VDUmlFiI3OIVfgcZ1aFVBHtBEMANC76zQwKPpHIvDBVbpR1cN/Qa2XxMEmUr9aC3 sha512-N6j5goKQ4/9VR8cCM9tUWrC5GKmihwmdPPRjXSH2kqG0rxuw4c8NlvADRdINv6cDntKOsv8YdcmNEAmdLWbeMQ==" + }, + { + "href": "json/connectionConfig.token_list.json.sample", + "size": 458, + "integrity": "sha256-5cPUVf1Izy6TB/E3pA8Ey2DcIuOBAK+F5+xk1dWlNuE= sha384-PdEy5K3SqZv8BxJIlnAKLUSdve6JeqM+s3aSGjr0i4Q9KHjc56clCwmBHQePcehK sha512-2DJfEwUA6aTnJhnny/Eid251U3Y2BuYIqG0NHNwL8TAhLdkgigNCIcN2+LHL2ZfETGk16Q2KXclg+jQG2Jj72A==" + }, + { + "href": "json/connectionConfig.zephyr.json", + "size": 367, + "integrity": "sha256-3mUfVJ8UazeQtNAynKUUdKh1FoSyIeEhzoo93fDCGJw= sha384-Tb3CvW2RIDCdpYsHeg6hP3rpxQHIchqWn95hU/LFYHD2u1Ua57ABqZK8Q5F2tIRV sha512-ISLNT3u8yQzYlT4rILji9XfD75lk8L7zcQoKEM7dHPeFen99jAY7bN102tj1fb1iOKurcF1KFdwVMXt2IOftNg==" + }, + { + "href": "json/emailConfig.json", + "size": 48, + "integrity": "sha256-7dEZQU0xJJUmn71wbkFrSP4QydYt+0BpL9EefiUVh5M= sha384-2U67XzBLrHbU4Lg9fEvd5sLhSrAkst/rN36bjDMx+a93+NvmXml+vLTVmNycfu16 sha512-CaXj730m7kkYzqZTLVIk51buJGB1dFRMpcpjQgnC7FnnP3+p8IstfgPIy2uEa6NxCFix2hk9ocsVOupIw4C0Nw==" + }, + { + "href": "json/emailConfig.json.sample", + "size": 47, + "integrity": "sha256-JcIV8PH1TRexmgk0FYdPKgamipuivcNdt5QwhFqkVq8= sha384-R66AnC/ntH7HH2ca3eNKq9LgQDmVT17Po/E5lzUcTpuKu+2Cy0bAgGSgmIpLDpct sha512-B96UeHMkhwL7SxVsmBZKXxygCJmjk88/OrKZdpDJS24KlpYTQcC1lKKm34cxYVFFimZjJ18lGbJUE2giugfDMg==" + }, + { + "href": "json/startupConfig.json", + "size": 127, + "integrity": "sha256-iRfC6S6Oz8oFRnR7LvLjzPrZR18FrEe9ALNtqzrFGdk= sha384-IiXOYHIETNg38LqT2mheUVbb6SR593jbubMUPND3ZMKsDD0+sQnIf3K5Qby50mpe sha512-qhmqOqR95NAM6knK3YoOkGH3aPaE7g/9dpLywAV0UICgmBqHdFdMlwJ/egnSjPpPFmUJjzY7G4huQ6qVaw3f0g==" + }, + { + "href": "json/startupConfig.json.sample", + "size": 138, + "integrity": "sha256-EVJs6N2ICY6wtv0bm7zmF2dKodc/uqLAMi34koJePd8= sha384-7J9qGsHSYPuytSzK3amAZR6bJPAf1AbriBidZ55KRsDNoP3QKLMxq+lPMp4onerI sha512-zxxqL/B7e6wfr2WGSp/bSZXGf8/uMAOZAzx7wdaPhBH3+47duBQCigEWZrr9puGf8MAtXdi3DdpiaH4ti4s3Ig==" + }, + { + "href": "json/trip_confirm_options.json.sample", + "size": 1177, + "integrity": "sha256-IzcCI3TzvU+OSs0M1UO256UzYxyrfN2gu1Laif9kfA4= sha384-9jh5PKNpwUwNuFI4uDe2TNaw47aaZtBWz146XOm2SzZPZa5sKRNSLFKDNkqEagrQ sha512-b1CY38Yooc6TOKgZCvng9BVqXzypc0y9s3H0CUyAwCddF1BrZtLlFNvwd8Jqyjen/fU0/I7W15NejlhwRCyjKw==" + }, + { + "href": "json/uploadConfig.json.sample", + "size": 169, + "integrity": "sha256-OcdAv6AZbtB1EcPmJnrOcdAxmHyi3+fsw17mpVQukwc= sha384-bv60iV8wvFf2I/T8nMvH5+P/A8G0g7EiIj10V2kVXSriNjKY/OwCoXsLoDntLPVc sha512-kGHhcYIojUxa7pxSUMevyQt8+3nb/RlpyH8oJ+gxRqZXFfq9cpC1CAMmi1sRf71+qqrKR6R/I5Cl6JWL2kBUdQ==" + }, + { + "href": "tasks/gulp-sprites.js", + "size": 4904, + "integrity": "sha256-UHtn8J9DINp3ygFLkh9Ebj/1Fiug1udMdOJ39au4cKM= sha384-SfAHXknwMyXmyT96CQUXU4Hl8LnNbZYm+/iAbywlDvn0fvknvzVGnZqxYJ/xBmdv sha512-YVpipRV/rC/DS+lbkt9IlYXra4ec1gOLOxVsQNCm1z7Mof9TKQCLw6X8djO//54sTgr0O7ZcStsq7z/5FdLbVg==" + }, + { + "href": "templates/caloriePopup.html", + "size": 1364, + "integrity": "sha256-a/xgLNkAZWvuse/45GwoVyEMFubEdwArUeUGkB0SE78= sha384-JAirHY9j5SHdE+iDnB8rQnM11LnKoV6PObaSTLCIZL0222oWxvgkxOY8xLd4gznE sha512-imWIXVEx2O//UhoFlvGVCf+9SdLmOQ5sIiCIkwAs1fB57VIXjH0faR9VJCqevMXrwpOTWY2b4NqsCBD4m57XHg==" + }, + { + "href": "templates/chat-detail.html", + "size": 489, + "integrity": "sha256-DgUA6Ou1mYawFT1pzK+WboOzogJkyh0f+N1FPUaY1Q4= sha384-ebJg4HhzKh73Nj5mFcJEnA5sssQWVnJG0tOlCLaxEs0iZkm0iMBCQJHkCF2noPMo sha512-3A+QJczi11wfLlvZEfXTX+abstM+tLVmzBZ+wgTfj52eTr6QEsij98Gsn94ZeSIFuk5Sbhy4Y6aPPVfoBpHHgg==" + }, + { + "href": "templates/main-chats.html", + "size": 563, + "integrity": "sha256-w9kcDGQF0fR2z3Q7Mdg91aOHPQVs8s+MaZpUW+wHdX4= sha384-as7S4EPODIsdDnauwufPaDpa1QzoYijDeECplTjZUrG5XNBQTe+4bWfwYJV+94WQ sha512-TXtnIotkJ/fYo23iZAjfiu+CvFBdX3pUkUThnyBAJytKrO55ApqCV7nmz2Qzd7TcvgMIMzV12TL+tbw6q7tfIQ==" + }, + { + "href": "templates/main-common.html", + "size": 1723, + "integrity": "sha256-4leirJBpbkjZ6wv2NCYgdqm6HUWrWlVlYF+oIKmCjRc= sha384-jG+5Piq4gK7e51zRW91MFb0WugthWCaXdp4MZ7el3Y/A4cl8DXaR832F/nGd8j+5 sha512-w6gmicGce8QAFVfUP1whJxnSnz9D82l9ObdvLGiaGIoVxIcdJLutK46dHIfWN+wt2/9SSYCVoSDPeJ+RK/s+Eg==" + }, + { + "href": "templates/main-dash.html", + "size": 1112, + "integrity": "sha256-KMv0syBOEoJV95fnV3zyY36WXHPt11wwaARJDRZj7Oo= sha384-qCOakj48/a6p+q73A+uEeJIdLAJKNTcHQ7xT4DEW6Ji2N45sr99wEIPxB6/8rxMY sha512-DvKX8b7hPG8Ri0A7gbyb8b4s2bp3JB0lX9JpyifadqyXPniauoaQyb5nRNMTD5zYEUMq9Rj2el7dbuMhRMNJCA==" + }, + { + "href": "templates/main-detail.html", + "size": 1375, + "integrity": "sha256-63Gg0XbVJO23zrDYDYYfsNnS1KYfhzYWHp70DttdEXU= sha384-WdmhG5yGerIuBiSh8MCpKKgwyNFsNquphhPlG5wuq+zGbISSpC8BjXDFfJnGtSOk sha512-vQv2Sfa1buPl06EPSBKfflZVzz0pLLsadAgsXB63dCLNMumofZWvcF6dlUBEPezt/dMXBbmfVJzgMIhI0RVRgQ==" + }, + { + "href": "templates/main-diary-backup.html", + "size": 4985, + "integrity": "sha256-RGUayFtWjQDwa4AbIF3rfZ8Yz8aatI2Vcrrv6PEzFd8= sha384-O2ah7WKqphERaImLudJtXWCKAcdZNqR3gIkrMTGiz2fYiqFWL+HtWwDcyuk+dT3+ sha512-hvLgD93tDsm6gfqlk4FGLqiruDzyltFQNzbbKhCOErYlfJ0mZ0kQQUMUrsuz5n0OgAq5iFHtNWQJfUqk0uYL5A==" + }, + { + "href": "templates/main-goals.html", + "size": 21457, + "integrity": "sha256-LjSIsW6FmIUGPg5NGglrboeIO1N0VqpUVQiKbXl/3rg= sha384-XEXX0u3JTzKdBISSH04pBBxBmIb6dHsPYG0+I98esO+ARrdnTd1a4Yxah3oTm/Ja sha512-PxFDY83UbX1g21DtSYf6aYvELVhDIA9GXsozZVmQ/mBm1ABWMpIM5F6q0xLGVjRF2wvTj22UE47HgdanxzpPRA==" + }, + { + "href": "templates/main-heatmap.html", + "size": 2747, + "integrity": "sha256-/1Ls6eUkferjvPURQ0QXY+h404xvW3o7muSzNQHY3EE= sha384-3buETKtfzvnifJQ/DkCkAbUa/ZauQg7qk/mpMzlvUq2pdVZj/d4aQzoJT2LkzJkO sha512-VznD6DKRI3WRbjkT1ZDpMlvqR639kZoP0RGRTDJBJJfRMhw46WgdLzVCDBU7Pu3r8RN6bARIpPb7FMskVTUFEA==" + }, + { + "href": "templates/main-metrics.html", + "size": 7101, + "integrity": "sha256-leIfhWA4lAgBi/UI7uhCIuUT60GUc9PWiTcB/Yh8f4g= sha384-dNcsNlksYxHkBBxQGS673NFBXidgO1H1cmOtAPRNXlYL0+8ckwlSufqyJ2MZYfcp sha512-4/wQ8Z94r+ZKaXQ07aJStodvuoeDy1tR9sDFMN1F1K7fj9n44jOtWT3O6tWWYDkXSWjnhfRH9O5tAS0Q2FgmBQ==" + }, + { + "href": "templates/main-recent.html", + "size": 1393, + "integrity": "sha256-baOa7w4uSTcnoUWBMC0GIJeM/2QtQ+juWegVxFfMCWo= sha384-r8gzT6Ry/ojb2OCiSvdw9C5VXtNoBaWFbGKvFRkgiCidFgPRO9OJqQf3L/QDX1Ov sha512-KqsDcGM845eO0z9vzyKDVxJrXOUwuMbEnSimUDkVvy3SXd7+faTnvwAG9G3MCD8xGYBKSyFloYJ/D5PCmpAeYA==" + }, + { + "href": "templates/main.html", + "size": 849, + "integrity": "sha256-cLuUxDADjnrp7Fpn2lnUpl/vysmLRbYvzCpp3q0U9kw= sha384-ahHnFai7ztAMjeyQH2jIepMrsQcOQ8F27DVIRZvvEgkPGXAvNPeIfu/7QxdNlbRK sha512-m6vbCEOboUDyU+FUj+oZpbdT+OrqAldptsee4xq5a1PTskqQFRjS289wlllU+BJkB+QATY7SQFgcF/RVXPjyyA==" + }, + { + "href": "i18n/intro/consent-fr.html", + "size": 820, + "integrity": "sha256-qGbRJpeZZ8QZj+WHblbfSN7gFUqKF4mUCkIdRUZJubI= sha384-2FJAoQ23qZ7eTQFgWGkX1dPK1dOKJYJ9gaCWoB6NA5a4a6lRhJsI28n2W9Bdl2Y4 sha512-jJH6ukPIrKafWCInxRR1326hDBTl4cBl8rVHKZ9f0bFvrZRVp6MJ0eKk8OLSaQFMUGaJ7xaigB9Yk+Zh3GdHJQ==" + }, + { + "href": "i18n/intro/consent-text-fr.html", + "size": 27835, + "integrity": "sha256-y8NHd79Z/2grn//g7cyBJjEVhXfhFsOiRuuZbRIv7TY= sha384-2hjJ+Bd7LZL4ob3GErgPxm8kW8TaYdI7Yn0+sd4yUoS+MtTqPzL7N+u4EsjxVceq sha512-yhDVyZwUvoWvK0Ibhb0eAFIAvpbwN/C2B6kTqQ2BJO9B3ddXstvS4WPvCOsTGwvKOX23ZPKt5jdvjB0iHjS5ug==" + }, + { + "href": "i18n/intro/login-fr.html", + "size": 511, + "integrity": "sha256-xGyRNiFMsROhgj1BjjRR6vWgeI+otDclLfafqZpGouc= sha384-TxWF1QhznMMXnsjgfIbrL2mVmRfMfNvsfM1TQN2VbVbcXes7Px3hC+oxLmhRGNmc sha512-tw/8dmwzVKhvUj6XFcnNE83zgLcuL8ik5sU3WluGSpazebekK5oqPAXSgWM8tt1N/b3tk3uAp9IYO2ibz+lj0w==" + }, + { + "href": "i18n/intro/sensor_explanation-fr.html", + "size": 1770, + "integrity": "sha256-rKwzu4W2s3FixYp0qSD80gDmg0r7VxDR/ZY+db39tvA= sha384-vRxlDERxwAKYfMJeUdzBaXocrE2AJl8LVd395o+iWeGJa/0+Ezyv70SEvZIcj4xn sha512-1ouCxdqUxKyGDZrAqEMMtA6lyIWWNlzvntlfIeZIla2w6KVX/Twv5BnKUGfaYz9d/F+N4xd2/SpHrG+L3b9SMQ==" + }, + { + "href": "i18n/intro/summary-fr.html", + "size": 963, + "integrity": "sha256-Eotd90okR5QydComY7DXSPcT5fF6b8hwWXIVNbcxk8w= sha384-Vz8OOw1bF/sDMAI3DxCpaEDaYxA9MCXUzIatNhh3BvAHrQL0Aj9iE+z6+DVBUHTi sha512-1Ebp8aud6XYPPfVoB/Ysz8EXhCFT2OCvgVO5g6w1fNnQUiZk+Bpjt/3DB5ALauPYpxbMFQkKis8G7XBoP1JJ5g==" + }, + { + "href": "img/icons/Line 10.png", + "size": 144, + "integrity": "sha256-7GLcOqB8WoVPK8WULRuUDb78QU5G4v6ZyMq61UsvKGw= sha384-q+x6XMCXAxbxq4ePofJK59NqCGZhPgxpThb6Du/Hf1FfOHyjrfU78MPDVGYIa1vP sha512-QbPoI5PmT4Bv3hWurVH/YWxDk4/dwKcsnlcVSbPxHKOoeAH2Teh5TxdQVry24+OwiKech2QJvm6nsOz8WX6ehQ==" + }, + { + "href": "img/icons/Vector.png", + "size": 421, + "integrity": "sha256-WEgTmImjI9Xgrvr9W8FsF6/jaMljl+VtGAX8qwcQeQk= sha384-joC6mT5ZMcp03t5Agk4EYjSqzFOrZPYpzXqajWpLGdpQXsq++sNKofgcDUmL9VFp sha512-kRrJe/tEaoW8VO31fYVgGcFL9syT2G3iWcQm6wCD9oSOS7v+AaUJ2C6ryqZsA+blEpg6b+nM/GjO51C0qOtqVQ==" + }, + { + "href": "img/icons/dashboard_black_24dp.svg", + "size": 277, + "integrity": "sha256-yR2Eh3Tv+W888GyEK6TK1KN3jkiXQA7N9LZmqUSY9hc= sha384-2SEJ6auWIXdbYiG+L204FIAVVnWcj0Q3PPKmhz0dsULT2qwQjvGpkWiXC825SQR3 sha512-9gbtjxlkD1g04elDWfntzBCsE3T6UUkLJX0YaLrqP03dWH3S7QYpUay070BAsXLHqxtzX97Fu4cbI5BQTDzdxg==" + }, + { + "href": "img/icons/directions_bike_black_24dp.svg", + "size": 649, + "integrity": "sha256-wBiZ8r0aU7fb6oXlymydBiEA/eb0mrD7Ocj9/pGU20M= sha384-lnuRRAZOjEXwOLX9MMbjlwLsLDQLxAwxHqaMHcMxXAN9yAWXFrtm5i01DU00dT1o sha512-OIIlo4EDjK0+QQCxZNjJAc4Y4LeIUve3jwQWGBgkoy3dP9p2gk2llZJlLcUmNU8V0WMyO6gYvv/9386yCDv+Sg==" + }, + { + "href": "img/icons/directions_bus_black_24dp 1.png", + "size": 325, + "integrity": "sha256-Hff9ptmVeVj+4trYh66QSn1gYoLuLu/FCU5zMfgNeQ4= sha384-1JkJePJ2X2kiAlUSDMA13pr/WZ+U71ayJW5pDBciGNzKUKR/seQYfG0bD3iFqVMy sha512-KqRlTbtrRz1tihNg6ZO/DQua/XHYf2rQbP5nxx9EUBxqRy19cjRwuKbt4+w13Kee/lnJmUodbMNBQrEP5zMUbA==" + }, + { + "href": "img/icons/directions_bus_black_24dp.svg", + "size": 561, + "integrity": "sha256-9rXxoqgn2swVWK1vO3qx7QcsGvoa+BKjFViIuTMN694= sha384-71lywtaubdGRDg4wPmBDS5A4KcENmrVWF8wJqCqW7oBbYgtmMZCMS3d4gocvkEqG sha512-fY9P3hQWvTAZd/PdmaLSC0ElZlOswXKz3azgP0dL/4ZJlvzlLjaqgUWTOvfIrRrVVJobS7Df8DP9Mc3FlTQmGg==" + }, + { + "href": "img/icons/directions_car_black_24dp 1.png", + "size": 304, + "integrity": "sha256-sqEBEttg69Oj+Uo6MAhaRv0aFMeSMtD54Dr5BMESbT4= sha384-3dMTXcot3zd3buGh/LbFr63woPWStPbV/7xqwO0Py6Ts02++LtvkjZkKJg2p8MMd sha512-6515yDEel3KnwSXrp/0r1tP5PRRB8k8V9POu8U+9XVivWHrQ6GGqO7yZHYo71d3uRTRRKo8mpQT1UzAK9qgdKw==" + }, + { + "href": "img/icons/directions_car_black_24dp.svg", + "size": 447, + "integrity": "sha256-AcUJWyLh8qzr858SqpMH3AOzQpNxKj6Arr2FKumKgac= sha384-3myffFoSF0WVrM2eOpzsUAz3XcjCjhAYRMEQSwqy3Q560GMqBTSso6Mnj9j/oRO7 sha512-zbUZxKY1diWzHufjKmTlg9tebos/Qig4Eiv1VEzi6+rdHUeR4qZnju+BBreHUMRKbffXagpjk4poZtZw9DvoVA==" + }, + { + "href": "img/icons/directions_walk_black_24dp 1.png", + "size": 339, + "integrity": "sha256-sLNXV3+j0LpQtk1ChFSC/rgqK0Dng6acap6K12strqc= sha384-ETf3ocSfMBnZmXcwoXd6TtSuFtqUT8W+uccEJvM7NMfHHIvuxGAiYQs1ZSA523cA sha512-ZkzJa5EZPCLdlFe+U7+l+pC1nq7kv58ModBUObJF9Pms6DwwwnYtreHfKxWoz2sg2XCW4cZnG73EYzDq13IhxQ==" + }, + { + "href": "img/icons/directions_walk_black_24dp.svg", + "size": 365, + "integrity": "sha256-jELBjm0rJOtKF7fEmcsWZzYNNiNHbGlEQilo/P1nQ7o= sha384-7ps3C0xzeyQawaw6wuwvMNztelUbzJ8DOzwtJncyek4RtpGa6kUt3t8TR5wh1UyA sha512-dzPvHsby1hdrT2vfcGIbuadPIb6w/T5z8BS409ZIi78AkGkSfZYMcAUQ4R/FKbxRuq3Sxy1omvtJaE/HexIV4w==" + }, + { + "href": "img/icons/flag_black_24dp 1.png", + "size": 266, + "integrity": "sha256-4f0v8v8o0pLxxDyS5lXTdCvRptTyfCaWrIXswHfhhS0= sha384-d/PIaCeca6cs2nB8m1+rDR5wC91AkMCAdXCpS0yt5JDVgfZWRNxuSR6NxxJYXyYr sha512-6r1qlrSYGHzJQO41tDny6XFfQigqsKcbZ99DcX6Taqe4K/6xdS/M+4PKcDg5dahpIkyrHLsOENyHKpaJBdJL7A==" + }, + { + "href": "img/icons/flag_black_24dp.svg", + "size": 237, + "integrity": "sha256-+KL5wyrlnZUgCAY+IgDJkZ5YD8uBtLY7UQFVhS4c2Jo= sha384-4s8HvbScVRcpJVUFgLVn+ijICCC+J5ppVTVZHK6dOKh8g/7fuX/8+c+uRo8GlD03 sha512-U+H1VDdC7UcjHGRRxkMsL2E63ZCCQydO02cNI/WgGf6/w4iAXfx6oNfaSZaU3lURPgTj7ma+pw9VS+DlPFcVIg==" + }, + { + "href": "img/icons/help_outline_black_24dp 1.png", + "size": 435, + "integrity": "sha256-wjnqGvvP46CrgcOyao9OnxnaMhzdQUgKuhvvCki7s30= sha384-NrpH3YUz2/4C/2kY+0s6ci2IG9i9nU6kd61mB/jkyBn95F57y3fY2SPOdJTHcjJl sha512-VLsTbt0Gy5CJHNTLASm4IReRPQ79lG8lf6DAX7baZDzUtKPliAnq7cecqTX/RhlIzDooyxC5uNLGDf8helfJiw==" + }, + { + "href": "img/icons/help_outline_black_24dp.svg", + "size": 402, + "integrity": "sha256-Szu2dJCatwcjPAkTwxdGHvq3y7LYbYUs1947zlNNo0w= sha384-xG2q7P+/zjfgU88XTIZ10ayn2FWtmZItMHJ5yAgeD0BpjHLFaxnjnxWzSYrtV/gZ sha512-v2lHDm1gGxZWuY9vaLyAvu9H8N/7led42whhfR+tsvAZAq/B7hbYLZuiUMFuVT6MZIcVEQ/OLVnkgnivc4OJog==" + }, + { + "href": "img/icons/mode_edit_black_24dp 1.png", + "size": 216, + "integrity": "sha256-nmgemZ5iKJfuiZMwY4fLLwVzeSdcm51tCltJGPM+prw= sha384-NDR0q7+JNEp/uxuCy4C2VPAYq4JhW+CFB9QKh06I0ebPY235GqfxwjAZbKu5Fz5B sha512-7Z/dFJ9JQvawHiA3BLzaDU7OwOn4dLOUN6AkWC/BfKslnDoG1WPCCoBnzUc90D9DavB0xd084G8nMju50B1COA==" + }, + { + "href": "img/icons/mode_edit_black_24dp.svg", + "size": 451, + "integrity": "sha256-GkJtYW4F3xB71hm2dTOy7pQhjP8++AWeaYzx21mTXFY= sha384-gOQ6bEktPr/tbqPefRpFgP/IaZ1vJpVbVMy7CG87k1P2uCMA8sj9r6daMfR18ODk sha512-k6kwi7Wzeb0Buzw/+yrCCcf5IErZWJdVcpN45LzyYSWF/0wVJKUky+lDdh1QrywSRjDXMoMkuWgTM598NBjwiA==" + }, + { + "href": "img/icons/mode_of_travel_black_24dp 1.png", + "size": 361, + "integrity": "sha256-aYIVeJKBoEAVSPZRZ7ETWcBgwnYTpYYKZST47PNZLIk= sha384-oB6+KSvEezRNwhWS/8YgZ/ZozG8Dylgc+eV6D59wB0GSEtcQzJhzh34wFpeLqcJr sha512-uR3YQC+wJKbcY2aoTendKIcDqxg35bxFIEOd1OtD4uUUzsLMTycnyarhb3YD4H3Tvi1WSVbkaMZxSeuOTRv6HQ==" + }, + { + "href": "img/icons/mode_of_travel_black_24dp.svg", + "size": 576, + "integrity": "sha256-713H4zwJ70Sqt4mJ79EZO8O/9wEw81kNcZY/17cLiYY= sha384-hYqbSlcBPvrT+PX4nVcKdrOfuwB9TbvlMi1DZJ7YDhWhHZbnF3xenDhrY7XttAtX sha512-5qC890OeqGnTOlKufPWrOyc8rv+kyX+m3JDEruJpO1KKLXHdRCCt/gT4PxsBsA6479Hqk1yXD2yfhwTYS09V/w==" + }, + { + "href": "img/icons/navigate_next_black_24dp 2.png", + "size": 239, + "integrity": "sha256-SD05zbTImsLtHnvE6HpDh/Pvgwz7RYjgrTqOrZ7ioRU= sha384-yFNQAX+SasXjihmCH5s2+DrMkbWhR0lfETE64oR2tkAN7kPva3Lt1zYde4fYS3tu sha512-EMBrMNIr+zIgvgXxxQFeKPscyM6Gh0RAKltvieNKwcKlsUfyofkR97qSHyjZz9utzds+g5rHq/txLPB7Jzyctg==" + }, + { + "href": "img/icons/navigate_next_black_24dp 3.png", + "size": 242, + "integrity": "sha256-dDWlIYUV+jOCdKOL9rUfKVeyi2KYYRP0K0d2wT0JFTk= sha384-DiGjc/kupeyZwcrt9aHoaubaZjMxJRC2am2Y0mpZkuhpmMxhIO7mdrmPjPzEzqld sha512-apqzF4jpehyPrSvrbdCrxCw38Ixmo0cL5rIzQjyM9q517qSdywZrbT7n3ovrhxdOj67MII7RbOvICdCGBuriNA==" + }, + { + "href": "img/icons/navigate_next_black_24dp.svg", + "size": 215, + "integrity": "sha256-tqdVRjnTKi9oNKTwlLqU9yfqHfgxDb13y0jv/jVGFtA= sha384-Wqg5PEXl4bKRc0+B9WeiOSxozqGLtbMO2en3g/xaAX1s8P5BmXeDS5Zw3Mll8RHd sha512-DIX7YGxZNfPWMsj3y44ga2Tc8IuwxgA07w32vU/94pmWINPvEPuOjnaBIHHeeRPy0PE8N5WxGpmjuklXyl3OwA==" + }, + { + "href": "img/icons/noun_leaf_3501175 3.png", + "size": 424, + "integrity": "sha256-w+TXRjsbI0cHpvhJzwokQGObELS4L2qrdb++BFY12Uo= sha384-8Nfj4Cx+vS6TkWyXNC3sxye6gzdqqzX7DTM4W8W7fiua7D9pfQ9SYbhj6qt5HwNu sha512-cBUZXGCU1UiC5kgnOQRCBXDuG3Zmlfh/Ye51mhe+NYowvoJo9sajpLdcTNZ+3n3EcQDff/xoCxw65nTckOs7uQ==" + }, + { + "href": "img/icons/person_outline_black_24dp.png", + "size": 330, + "integrity": "sha256-ox7pNI9LUv8Ca6i9ceb3Q+z3vIIRsaOHPqe2vrAaV1I= sha384-3VxYj1WrZBGWgefe18lj5c1Nhrv26c+pxmg8+BwpEwg17Bc1JjksdShaHWRbq/nt sha512-L/JECQIt6WaEkGbMk1dfUo1byWma8OfentpWJsBe2r/D7QDaU+HPAtuCdUcMtMMGoLd68S9h18rTER8/W0yMEw==" + }, + { + "href": "img/icons/person_outline_black_24dp.svg", + "size": 405, + "integrity": "sha256-tH0jxBWuyWog3gjLxwlskSfdMg17eqZNhvgPAxAMYHA= sha384-Xltw2X5kSk93dhxRbWdFqhZi5tNkCKoBZOMvu9ubVTpacwNfbZEcQzaSGkhVqgJs sha512-yCCs9fB+E7GpCn9v0Xpzgcy41K9x9wL9JFS4mhusjb2+zS4Jm8jmqMMNcRneYfkb2gBMCGVCO4+Z89ItoYP07Q==" + }, + { + "href": "img/icons/place_black_24dp 1.png", + "size": 646, + "integrity": "sha256-IGUpJhQN6VNkAR5QSN2S7Fi4fQa0gRpQOK70w+DH7+s= sha384-EbGI2ibXIKfQ2UshComvOjeQqSZ64WM9o8ogD7BK864DqrIVS+Ijf/Z1LqtWpfsN sha512-ZYz9RxMgldYN7QLjylA8vX80zvT8wxi0yWUUtBT3bflk+erlLffH0GRsQBPiW2lzeRFmL3R3lxwU1NUEOaJQMA==" + }, + { + "href": "img/icons/place_black_24dp.svg", + "size": 386, + "integrity": "sha256-yXdTgP/sHzACJmZD4cxISy1r+WpvPiir/gXZOVeq5/Y= sha384-OK0pYkoBQUOGYjQ2Ygdnf9jx9GNpZPZg51GKWQwpnUp48QlgumU05QXu80W4sCmG sha512-+5hLLm7Qc6lTnYxmww0YqMyEIowuioWFbZsgwrQwa6QDrouX6GNUtQEzT5kV9LkA62Vmz4Tg/NWbk4i9AnVCCQ==" + }, + { + "href": "img/icons/restart_alt_black_24dp 1.png", + "size": 346, + "integrity": "sha256-H07ta9GXh+DFlHYC1aGLGiKicAwue849x8Ts4+e55PM= sha384-icSCSUmmLtnd1qZzkp9p42QtEZgBBI+VImtJ7CDT0lcrbunRUDhPf35mPYwM6bXu sha512-iCBFCFx14gk5ahpO6g8vyt7e46yPS4xR+8DVLAEDVVOvBWkNLKAnYXQJceNT6QLqof/IHaozOQgmeBNvGTt85w==" + }, + { + "href": "img/icons/restart_alt_black_24dp.svg", + "size": 539, + "integrity": "sha256-5DO+wC6Ms4L4DqkDWdEGOHKAeovupAkG+NWmQk5HZI8= sha384-+1vReO/LrIEgcIDndQ8DKYfnq5oUnIbwb9v6qsdRWvl9yH7uvZzs1jqaRNUb9nT8 sha512-oLsWCeyhp+b8NezRFwX01/pnzgEl/gbrf+hwTlvLYzfQCKEPa4Y4OEg2VBcUvBDuHOFvBmO5hWEd0EBvOKVs/Q==" + }, + { + "href": "img/icons/signal_cellular_alt_black_24dp 1.png", + "size": 185, + "integrity": "sha256-WwqdxDyeGy8s+qIAEAQLeLpiyiIBMVmG6M5QaZFfexA= sha384-PPtM1qDCNVOqfp93W6XHeDmQlUsPHLWaJJSifZqOXrsROeV0N3iOQUOD0BpCkza1 sha512-42pAI0p7hDav2wJ+LHx9Z05gv/AcbHLtOMwFRadZo+elP/tKmtHq0xhktiAn2++MEevqwmqZRY1Ik25JWuoisw==" + }, + { + "href": "img/icons/signal_cellular_alt_black_24dp.svg", + "size": 205, + "integrity": "sha256-sQMHe2eFP93TrNH5BjkSbKoq7Sfd0hAc5p1BCsCxB0I= sha384-TOvsfo4Xld+lIDG91uXMofuGPqS1NUY6nWR1+6l7nwXpa0SF+0b86LmB1zVkW0n/ sha512-8ELiOX1JVfIOulP/En9fq9yn4HJ0r+V03pqElY6rqImcnTaD0ESTOe4JIIbwy+aiHVjbEhjImuHlho4qlNi+jQ==" + }, + { + "href": "img/icons/start_black_24dp.svg", + "size": 279, + "integrity": "sha256-oQ4sny+aogqUF/yD3q48sEiTbF/uxxm0VX6HQK42u0I= sha384-Jqa7o7osVvdmxiOuIVeQZwfyZcEtn6VWruqWZMR9RZj7k8vraOeQsMojX74tE7ap sha512-ovGxfvAeCVJ1iOjW0DXbW8+oCatzGb496ETgs7MO8nBVsuEI5uGNRuBMDTbeSSg3LOELtH4uDvMVMjX02S5mvQ==" + }, + { + "href": "img/icons/swipe_left_alt_black_24dp.svg", + "size": 412, + "integrity": "sha256-AI/ol0zPZOy0emuqG2sDqy2ScgClDEVxDMertXpFC1U= sha384-dmNXTuqfHoVG3KgWitZmx6C7XHLv/7bEEGyWFYofLNnplYTEW8Byk14gfHJCejR6 sha512-6JtQUxD8XglbEXRnawDUrjNuWL0yue8EjI4paWqT2QTEALatqSX/bHeUlS9LwHVFai/2/9PLNQjQSOE1wVpgrA==" + }, + { + "href": "img/icons/train_black_24dp 1.png", + "size": 325, + "integrity": "sha256-wl1ycfSpvekT2XN+RRBZa1x9xkgJXVtpPp18rVRS7nQ= sha384-SoTzjFRSx1TQ3UocwAd437fuu9PR0SN/iySfedz/fcu01yOSc1qy+HGhNQMbkr3F sha512-3tf2v5kJLpaNLKAyYWl4TvuuTNzq8x4jQ9HCj8666DKGLIKSGNR4YzrzQXZLJn7j/4TbCdQwps48aEd4SndiCA==" + }, + { + "href": "img/icons/train_black_24dp.svg", + "size": 504, + "integrity": "sha256-ETz5WnddupPmqJ7FmsMBQ23h2oQ9KQwJh55E9MCiRtg= sha384-Q8+bTjAJFiErrfQ1JWBUqtP2UduOfu0zL7lWzhXF96HCi//beSxqotgUenavQyc8 sha512-DLhJC39s700aBFiJgDCHHjjkAOVTw+aqmsp661VFDR0CoooBZJbt+wOV0M9QY+S9a5uDhrgWuAfJhYkA2QhtxA==" + }, + { + "href": "img/icons/upgrade_black_24dp.svg", + "size": 257, + "integrity": "sha256-9LTso6+RgA0CmhwR3q3ZGrZIl+jGNF/opEzR+CDCKZs= sha384-JmFzT0CkFeVCWDEtiQQcMyt2SzTRP6E+q/qPUU+MmgxpdAoqUwDJSzlIJ1VouFZz sha512-H2Cl4pu2/MNhEiloqMQUvx+hCTV5pADTcN5xx7lxZMkZ2ipUPcik1qrOE33Ybd7WkQCzTrEvdtzwaaVz6ejQzw==" + }, + { + "href": "img/icons/whatshot_black_24dp 1.png", + "size": 434, + "integrity": "sha256-og3zlB/PWbVqFekGv4VnPEwKNELE4b9vYtD83cPSTtQ= sha384-yMdUpF6Vm5jL8g7IPigc7nxk5oCLc5polqTrU9boPR4IC1iV9WfZX5xcwLgMjbwT sha512-zYXiJVgrWB3OcsqdvgNscslAOGwyAqnICWs+aVKcgJZ0V8E+/bM54Pd7wU5M+52ceM6icN12PjmA1ijgi5ykoA==" + }, + { + "href": "img/icons/whatshot_black_24dp.svg", + "size": 619, + "integrity": "sha256-AtvHpSmgy4d01nTVu3YkOZ71bUgwe5kPVp3b/mRNKYs= sha384-fumsVItL+TFf/H1FGp0whONloFdN3Hr+U+AR57sKbDytgqroTWv0PpmfgG2Y4Oj2 sha512-9t0MnVmCyRUH2ftTFT2pKzDCQHAh7RqhOTl7JmxhygdJrFKu5RlpOhGBGzOrpDW+Epojz0X3W2IUIfZrfFI7IQ==" + }, + { + "href": "img/icons/wifi_black_24dp 1.png", + "size": 530, + "integrity": "sha256-p/q46OIuqmJwBjkbkK+EPfp3VdlFFKexe5MCYuOgRjU= sha384-tsuHtT2pse/VoVEUiaO5fY+eqqZkO4LE7kL0mCtGZKHw/ZfpVRS/WcRmA0YBDoCk sha512-kVdzl1PYa4/lBkIC1XNc5VoluLUoAt4qeOSocXSD6qAjXgt6uKFSe3WooSJPPihuCPKoPNCCGLb/gacYkGYKSg==" + }, + { + "href": "img/icons/wifi_black_24dp.svg", + "size": 341, + "integrity": "sha256-L1PwQ7fD131pAN648DkEcZnFsPGKqpD55FBRs55sJTo= sha384-2jaH7wXKGrkXPJ89bDL4j/kxHNOzGxpSR/7w0ThCDmL0M5babMSUhDs7zzfgUJPr sha512-UufEtiekmlapqEjQ34A74owQvZjMfagvXbF6uzpxZ+rNgF88Hc/nqAXIOnaY9DnNcsI+jIq0x6/u2xJiGudV1Q==" + }, + { + "href": "img/intro/splash_screen_logo.png", + "size": 16599, + "integrity": "sha256-zHh8sOotrOCks5bGuVSdsF0B7nq0eAZgQP/libu12H0= sha384-aqyWvkcrav9irtivl4DnvAs0J62BIsOSShvOH6r+SB/0HVi1y7148RdyvDWRsDF0 sha512-JLxNs2lNwufrSWDth9HrackZWpPHXCzETHKWsyHYCFmhTLXyv0qVh2eWZvpU0Oo+3aFpMtCfgybIU1YQJfLmKA==" + }, + { + "href": "js/appstatus/appstatus.js", + "size": 630, + "integrity": "sha256-6I7fIH5aurl1Nz/so78Qcbr/0QoQvNNTR3a1vQ6G614= sha384-skL8oV/CLKuroJ1HFQXQUK4fKDZVJG4X9UmSXku/Zkbj/J9apFIWhQ2YwXNSADLF sha512-o/0G9Yn2ISHvCP1jCYpGYVAsRRvNAnmFIsYR3shogGqjgMhc8kbFUpXfTmjizCXwN2OTX9VdZz4dePvoDE3kOw==" + }, + { + "href": "js/appstatus/permissioncheck.js", + "size": 18837, + "integrity": "sha256-o/zaYFLG/8vqzNO2Go4hnyIPhUa49UiSlnGLe3RF6yw= sha384-1w62A6HUjupn6k7pjW4kkzSEY6GRhKLG2Hk1UbbxvwsX7jZ+C1lNUOqFLnOr+9o0 sha512-wzlpObVyAi7N9XNU2Da3+fFSFrUzEOd17/mslH8AEDS27OQNIXJ1L5G9BpweH5Gm9s3H3iXHal6lKf9ltsj/Sw==" + }, + { + "href": "js/common/map.js", + "size": 6899, + "integrity": "sha256-Hb7Dxp8jxBKzmGh7ObyTzdlGCYsvIAE+u3cb17q3iV0= sha384-D2jzxCMaQ8OuihvHLW86ZLNISzS+fUBBzkIodqovx6Jc4s2c+0FNiNx5mtxhK//P sha512-7QbwAsr/1DAC2OdxCA8CO+XTWO9+xbOUeRLjjwk/cImGTwOht9QE9X6Wv2V22SZH9LB4edwpvHVs2gHFvt4LPQ==" + }, + { + "href": "js/common/place-detail.js", + "size": 751, + "integrity": "sha256-u7G0l97n+zmdmom/VXbQWuqam2SOef+Js0FJ9XWnor0= sha384-rYZCrKrBrbuBp/4bDZIn3jS9LR57+HL7y9GjeqNX1cfyyXPwYaV58ApXl5Yx5VKA sha512-Z6omklV6a1pAuPq44DgGd3VtkekLvGXjUkDQCRvp/NCb89UpGlQdOVqbavcA358QeU8p7ZCumNfSa8y8ufJL8A==" + }, + { + "href": "js/common/place-list.js", + "size": 455, + "integrity": "sha256-IOzs3oJz/hN3rU/AXqtGglrREB/1y2jlSrPTdFKWeaA= sha384-eygnLvXBnJm9ix8se3kuntHD0FaocR1oX1SiZh6SlEFwALPhMamfHritloGOQltL sha512-JPm7Xk973bBtZKZZvNVOUAzNfLOIiWoH3yv6YbsLl+f8drC4v9CLvrLVOwR1O3U6/GMy56gxCYMFLDdbOpVgxA==" + }, + { + "href": "js/common/services.js", + "size": 13411, + "integrity": "sha256-oa92sB39Lr0fHkK+n9/aWKABYXT3MB+2RMSs1NcUYcU= sha384-EtPpSgAm2GCAncBjnn2twJLaYLxsZJFP2ITRBGUrCA1qlTJ2EmPDTRMsJRN0OcXx sha512-xwKK3Q3o1cLXjDhZyrZ780locc68R/m+unANIKQgITls8FdB7OLqGyfHoDihPPL18LHV/jC17J7bTTZcgNlzuA==" + }, + { + "href": "js/common/trip-detail.js", + "size": 4584, + "integrity": "sha256-lTyKPw3d5a9ystXCyFWEgmIj0m/nPRcU05PmJEKHlgc= sha384-pHLgmfn1lGSu2Pt03u5q8mIXjK4oRjwKQW9jWZmb11Z8PBeivZcyFPasR3f45+Qz sha512-TyMsqtSXgD2s7nfJN6MlRtAFGKnaBB30nk4WqHOqC1SnwMrnHHe/9W4T8JZqmcy7nN7WXxzbwNI6fEQ7JkgSvQ==" + }, + { + "href": "js/common/trip-list.js", + "size": 525, + "integrity": "sha256-hgaEDHRYwFtSiJ+ZI5kAaJiFCEBhhdgl+DxeM6McLCE= sha384-mRKx20qIlmfmN7fC8d8x5/4Po9Id+TLgl2eJLpXT/vv+NYJKcCFk1FwvSNSaUll9 sha512-z2tioHuVvsdrya29ReoUmSEH9MjNM1UUpfOxq13/kG4z0mAD1GvN3XiAQjY8KkowSk6+HJcegxoyvQFJGqechg==" + }, + { + "href": "js/control/emailService.js", + "size": 4637, + "integrity": "sha256-LGWkTbxKonzhw3XZI7E707VdZGaDbCujmdWHEOB4aAo= sha384-rheHfeR622Y1sodv6b5NYJsyWhONlKs7iiX8xI7E3GPGgPmunZ4pjpIEF2cNlNR2 sha512-HAiyOeivJeoBoN9338W2Q2rBQ4UmkXhBH7k5iu+G+wqSvoEHMxOLLALIy23CZnVC3x64VerxuBd1nElgsfom4A==" + }, + { + "href": "js/control/general-settings.js", + "size": 27453, + "integrity": "sha256-ei6oA57BfiQyTzbXr4jMWrdtvLu07L3hsPqEegdnDso= sha384-z/d7dNZa24XIhbAE/n42iNJRdUTLTSQwPXI6LJ/oQS+fuQYZkFgzkcltUZbvhNJE sha512-ld90V7GwkC8MtDwClHxpDqbKquCI17gREMBTX/uhC8hvqq58ArYwI6SsvaZ4gwZ75KPNaztwKUYkwCwya91qcg==" + }, + { + "href": "js/control/uploadService.js", + "size": 6990, + "integrity": "sha256-aZ2S2AwDvXXb73l+v/MhB92JTH0Ue7lZqqtVngIivbc= sha384-PQrI0DKb/XXd3UBmDF+eK+Ulnd9S7Oo/zK/N7d77SsL/OxSnnzkstZFCbg9wWnli sha512-yKsk/ai++O32aWnpUTN4rKojgIHd29xDdm4W4vZ9LIjAHcSvWHU2SAqZqHKnRmJh2RA0zh/ipnTW5GmyFPVY7Q==" + }, + { + "href": "js/diary/current.js", + "size": 11262, + "integrity": "sha256-puPVzqxERNlmWY47gkCLUl55upXmCatyx7RHTlCisC0= sha384-F/BCf/rjRU2Q6jKnp8EWXPJx+imVPCqK95tc+Xk3LSf0FCYycT0Qo6lQgnD2DQTq sha512-OJ2MKeBWvN+l8lp5d3kqwbf08bzCwogLFEGy1sg6dN3EE1PuBzIOud6ldBYg6WZNMTAev2H7MSv9Sif85Iwx9w==" + }, + { + "href": "js/diary/detail.js", + "size": 6660, + "integrity": "sha256-e6zS5k6GNLgAABUaN/uOVRXgtmGg1iS/4Epe7rPraIM= sha384-kNDlVV/i/n8O4qlcMo4zOXXlKETJViTavKVqMZVWLUXYyAgDgbjrVNnfNel8Pm9+ sha512-IFLuMmm5hOj+hxDDCT41UWJYTDmIP6429Z7Uu46FttepZupzxLhRDmnVq/MsQE+ZJ1yU9QUigDR8egcMO29yOA==" + }, + { + "href": "js/diary/infinite_scroll_filters.js", + "size": 2094, + "integrity": "sha256-vnR7LtNeIW3d8UPZkTlpEx07TCaav6W1aulzLAtotxI= sha384-t0QHOJJNd+QG0tM9mdqkylNXt4/dAq9yVZNSRn2o25QMFUJI0bLp1QSucvhIAtUe sha512-RUegfEYupK4opJR9lTTM81b5+cHCUriG9um1Hrp8xc9myhwazDqTt4v9xK6UMMEoHQfFC0TUtpDeYZ+NuZOemg==" + }, + { + "href": "js/diary/infinite_scroll_list.js", + "size": 38276, + "integrity": "sha256-+ckZXR3mamrP5IBD/xPbXIo7lgeiTwWm7erokm0RXZs= sha384-NqOzPCBpbRJ/tc+MZ2MzTUYTlbts/vkyDhB3k0btXiF81xjnwMnPZB/6MKqEt4Ph sha512-sUptMLecI70RzdYi9R3BJeczg3dVdfbAE9LrdRFILaEv6f0fe0/2TyPhq9LVD2RcwiBKmgyc9XA8ejO4UOznYg==" + }, + { + "href": "js/diary/list.js", + "size": 23825, + "integrity": "sha256-NDipWcQgQOvzwLjPRSczOhc6DsKLQQa8ak8KeEKobVg= sha384-F2S09cPD8FsbUYjcbsoCQvJ2Pd/laSRhBlmcTuuRsHh2fvhfYzNcKhKrSeyBuVhq sha512-b6jICmp/DC7gKj++uBiV+xPcTP6j4zh1+EhBzB/tbNkTG+D27VlpdPHwAZrYGY9mxao+abpES2nJGAre6u1J3g==" + }, + { + "href": "js/diary/services.js", + "size": 57161, + "integrity": "sha256-Q8snm3VmecXhATd3tFhu055A1x4ZzvYINo+qztawSaE= sha384-oSFq/JqKN+HiowoXcGpyjsHNt26sfuCU3tmsosqVD7er1wkn8HYyJ6HTUyQ7Vmw3 sha512-0+9DeWyyYdAf4pPwqeWwozlf+gYoopsi7NnRqro/01u9nVLVJOdS18mtDMj6Mw5W9YHIsgUdaIDz6bDykPSihQ==" + }, + { + "href": "js/goals/signup.js", + "size": 1389, + "integrity": "sha256-M/Y6u2rcCJFquZqTg0ZqOmnYNb/wZ+YCvc/7U4OY6rA= sha384-SURcUR0nEDvqVkehdrrjkEPclXSuNXyXeQVoJ6HJUMSN6d9PdLJ0xjwY6W4UgJ/+ sha512-smVmuoTUcJuzHui49svqFcGt90NsxZQotVMNo1rIKu66S9v0UMevjPWyvTIbG3Lkc+TJPpkmCznVwXkb9IScFQ==" + }, + { + "href": "js/incident/post-trip-manual.js", + "size": 19016, + "integrity": "sha256-vIsSB04Sz1q0/Fy0ZcI+80YFiZwIGna6FuYluMJljw4= sha384-JGi5iqkw6mN/g6BgdQlZdd1wNK4bwcBCvQwgCeAA64d4nGkMkt/6g3EdlFY1I8dQ sha512-dAKP9GJGuryWhZqcJt5oJAoffx92KKlLC0VL6tlaASguEFaVvnDiI8RsVUF9SSdQBIoBgynojI87oZvYLtlYdA==" + }, + { + "href": "js/incident/post-trip-map-display.js", + "size": 7554, + "integrity": "sha256-GiD9gFv+c6/9x5DiTO6d7/LGaWzUhdrn72Mjwr92B9U= sha384-M20qeKa1M81CxMyS98CF30t8ckhMALlRpmwwt5Aucbh5u5K0l/Tla/Kk9E6ffmgd sha512-clJv3G0DwDhNmJZrRbBGz2WoUnFPwkMKsHtcqALDErQft04OkLQ/4vCtSFjvsmPIbmAHEwgeQ281Xg7MGYxfgA==" + }, + { + "href": "js/incident/post-trip-prompt.js", + "size": 9875, + "integrity": "sha256-iI0lnXhPHc5+tR6mJVOm7FZBR6Su1GgaAOIpEullf08= sha384-p7a7uWpA1tgenC/4oHwfhmPT4ovtsfq0MQIVNBrQo3TUNpPfXs7EqTZNmsuUFAUT sha512-Rye2O6cdjLgyW95LTmZcLzQLmkePe+YaN+3aKw+PdeZr9RoYQfKkFEJkuOx0kQhrDoP4x76u6b3kiv3lrA5nuQ==" + }, + { + "href": "js/plugin/logger.js", + "size": 657, + "integrity": "sha256-KEAD7MHfzYjPQvSegZBeJxF2aBPZ993pSw6IwliXXWw= sha384-ixAImUAGw7/2m5zcdzlP8zR6tCIwa8tkoK0BpBAjnNN/W7mwvJmVIv2Dc1dfv+OX sha512-qFc4HUwyyXS6s1DRr72gYELQFfP7AOhhGx9VfC7mE14JjZMISyxG13LnWhxOz4IsigYFSCzIqydEHvRB5vtUag==" + }, + { + "href": "js/plugin/storage.js", + "size": 6384, + "integrity": "sha256-IRpQjPhKKDHDouFH1ce0DVl5zJXiQ5qT4E72HU3xnO0= sha384-G4l+yOBbVGeDdKXq5kCIrCfj1+rvF5McUr5+jxU9h9D5BWutjtKEeLjjIU2ujPUW sha512-VCjPYOy6J1UZDrPRleJVNgEv84Gzm+CcjcKjbpYsAhsKeH53qa5mRdZH55txg5bp9RHa+3nuSqlP/c/6D/HYhg==" + }, + { + "href": "js/splash/customURL.js", + "size": 1318, + "integrity": "sha256-aykAi2gltPU2gKHSjbM6aQC+dJt75U4sFVom9zgbfiY= sha384-afqlgv9HmNcjSRl3BMyZ6i4yPe6LfJNm06b70jKreglwSGN7+rxEafXBRfNBHe3h sha512-XCrhQksVMeV9xkR7puZuLklE/KS6Wsjbz8XqFqyYsSewF3+f98ON8pPq0NrOmkSQAqymNoPax7SgDUeiLuhskg==" + }, + { + "href": "js/splash/localnotify.js", + "size": 3466, + "integrity": "sha256-EbG1XYAqlDLhRo0fcf08Cmj1RdHlHIa6AYvd5EKXxjo= sha384-NxWcEqcj1Lnr4HMAHcpheyMV5NqO3y2C71OR0g96ymkjN9wT6qQY8vBbqtJ7y+vu sha512-eAxOeah4WovjlBpzh6rh2mBqKA3iBMOTR+Fo7XkrAVXVPHtvg2s4aN4QO+qf6cKm9cy84Sl199XLjBxZuAsagA==" + }, + { + "href": "js/splash/pushnotify.js", + "size": 6825, + "integrity": "sha256-pLF7PiVUubbQ0k5FPEG8oKt4oAQBFgDU1BDcEt71EKI= sha384-RBcKUc4QFnJ+MPLJn51SPzLDrKbF15EcZdeVA/W0u1MLqSmDmffZds3zq2or7a8N sha512-Ja4/BXyWrtH+ACEv91lLescJaVidO0hMosbRyIRArKVe7gWiEVkylYd55kKG09lwiOdymBgBVB+f3EZj2ivbpA==" + }, + { + "href": "js/splash/referral.js", + "size": 1375, + "integrity": "sha256-oshYmi9ys72b+7XXAkDvAbWr692JrGQoxfavgnR6h00= sha384-dWNTdnEVxOK/QvDdSy1e6uK8U2MgkQH3WcxZbkU0gv6ADYfX2BDO8AC01r3oYLbH sha512-Lq+XFX3cCOtXzPmvtcbspUlmethlayv6soFrG6gVOmAhNYppcYDYwKjmSe81jP6FTpslCeMPQRXILVZej7tbcQ==" + }, + { + "href": "js/splash/startprefs.js", + "size": 9706, + "integrity": "sha256-ZJxQuzZs3VCQBPF3/bYzfcHlANkovhcgqvtW3IFl2mY= sha384-GPOfmRaMsq5HMxOquPXz06ZwQl/HXNDeqNpbXxK8kdwCGXHXpdReGFNv7QsnSXW9 sha512-EwJaUSf1YDYE2/UIOhjfPyIxNqf50S9fqsN/KOpZmc6w63qXS5UfND0umfR8FzFctW2iK181prIceG3I66laaQ==" + }, + { + "href": "js/splash/storedevicesettings.js", + "size": 2519, + "integrity": "sha256-3pfegKJMy51bdLO8C9ZO4kABsS9j4W5nJK7ADHKo5vk= sha384-rLjjVFQtx8Lf4fgrt2qs/PytBQ0Dq7PAMHvrMkdDY8KqSg1VUIqyHk7JtG6JkveF sha512-tixnlQnZMpd8Jw0Gb+qQzr5x8QuZgykK4pRUhzoUevz3WrbyaYxfS4hVLrH1zWV3Dcd3rkgMyXyraRSh9I3MMQ==" + }, + { + "href": "js/splash/updatecheck.js", + "size": 6053, + "integrity": "sha256-T8Huyj9zTsWIzuFxfJ8cBtDtVZgebOVg3IYFQ2yeZR8= sha384-ZdXTynMNyDCpSl2j9NK535nBDJlG36eqlHUqZyUosBprWjbQDql7BFDonwYLQ7tK sha512-BT9TSlfO76ZMzG8KdjQpmUJzNkc/xTKshN0VHeNbybnIhnFeYcSlql4BXs/93d9zHSzSoPw2aEjhMDuKo0QX+A==" + }, + { + "href": "js/stats/clientstats.js", + "size": 2431, + "integrity": "sha256-elGqIM+yMHHvmmo2unUHTmGzlzejHBRUYCMLh7/c9qU= sha384-QBjXvdtog39Cvij4udwJdratdf0HC5FgPROkENdSI5tNN6fwMSVpSR57hBNNCGcw sha512-ep7fcbueqt0mQbsmtW23RQcnXyYGlsPUMbKRaQOq4anhBqsk2qDzdM7RjOA3GXkVndifcVoccL2QDHqWPNG8QQ==" + }, + { + "href": "js/survey/launch.js", + "size": 9762, + "integrity": "sha256-qHtKv5FNMVKV8I33IZ5bcM4VjqcpNWYnBA0rJeIjjCs= sha384-zccyAY/jeWzlJFZoNbYTf4CeyihYhbzBbUxov29fGelAkDKCS28YdMcMpo/UlCXm sha512-iT0tcYeHPBtz/a6GwdkC5A2SRvxiwzkxosiFKzilo+M4jxTSoOK6aXXK1nHUJhhXKHB++qZ+z0/oPaSFcWAhTg==" + }, + { + "href": "js/survey/time_insert.js", + "size": 599, + "integrity": "sha256-hr0vJ8ZSeu+289irhanT7jmuuGHC0Wmnknt9eEORox8= sha384-1Fk65W4D7KWEDujXaiDEW4wLcOahYvYSBEoot9aBL5WfKoLVUO4R0RIYlGOGffJ3 sha512-7NTCulHmd5BmENyRwIrVHArxEEhDeC8k6DLYsJHsu5Syklb0Fx50pyQoJTMQM1upA6Oqt63G1PHjAf6lEpKlyA==" + }, + { + "href": "js/survey/uuid_insert_id.js", + "size": 575, + "integrity": "sha256-QCbUDB42ENtOgstNfKBf/aKn5v/ZDiIWg7bY3q+7Vj8= sha384-86MxKtcj8pF8Wf/FxCQeKF/XSP1qtsaJfYt+qr2a/BN8XS2Jz8xytBEyQAa9z4Ux sha512-unRhcmPLuPIM96qdriZiHlWyaWnB3PGN8VfmCLiXLIGpV858TjgDfCV1MUPN5Hl8zKc6iP56g694FpMQmGNoSw==" + }, + { + "href": "js/survey/uuid_insert_xpath.js", + "size": 829, + "integrity": "sha256-CueTSeroL55tkomMCE9GMcISXfOk5RtTX6RFi5Ql+VI= sha384-a3+oWOCYZ8/0BTD5uWviSExS5wKRxV/boMfBCQDJjLkw0bwNMzgdR+VJnJxu8IOL sha512-udB0iM6I8afvHUOu5NZfvG4O/kceqgYSCwU2ww4zQZGEvovQaodd4Ae0T8sskllekTDHoihVwtcInGng9PdbrA==" + }, + { + "href": "js/test/ctrlTestEmpty.js", + "size": 702, + "integrity": "sha256-wn0N+OEiNBge0UFYlsnOye6FMit3Ghiwi7O+CZrT0vo= sha384-fg900dsYr+cGMsDyyNTb+gIZPOkP1r5t5t5iktKmrKjFk7R9yKgGh7Byc9TMqgVT sha512-19x8ERGuWKJikrRX6ThUq9WvdjxsBfqx526/S33LlhXenYkHEN9s3XkMqW2+wn57sN0NI3nQrjL/DX78+wOiVw==" + }, + { + "href": "js/tripconfirm/post-trip-map-display.js", + "size": 11985, + "integrity": "sha256-GKQ7C7c9M98B4dXxnHHIq++iZ+CFVA1AFX8RqwkF0IY= sha384-irumYYYB4qbl46Py7Xp3zsTKvijirCr0tqzFVeyMrJj4lPqwHx/piYYbhU4YTWfc sha512-2aYHSEQhGEvTChUCXz9ygEOqm/+/OvlUgXKSYLqpodlCiFBzWCI1oqqslhP4p7i5DhU5Jb09MKk/83xz+lRPJw==" + }, + { + "href": "js/tripconfirm/post-trip-prompt.js", + "size": 10427, + "integrity": "sha256-rS/BYO2Z7k0RQpUVSIoilbKq30WEVe4SD12D3F+Mxac= sha384-MtO1eqEvFu4F00b2CtuV/DTl2Dl1y/4TLwaVIHGeGr0FJm3rPt1EZ1gR37kyb5Vf sha512-Dk+AbLUETPyS9kt/JonW9bfmKxyiQuELJivZJkViCasSdvxUA9aOp15AI0bFCjnGOm04PpqqfnzICgKN4PQksQ==" + }, + { + "href": "js/tripconfirm/trip-confirm-services.js", + "size": 5016, + "integrity": "sha256-Hj8MkzUOyw/1mNgq4KgiZAYVI+3nDn6DWGz7uA4oU2U= sha384-u3JhoC4e5H0hZujSgru4698+iPNhm4z8mJNo33khzad9RycP+d8r7iPZt/cPQg0m sha512-CaqHHX4GoqWlU5dACR7wcKQwrTlMiQk2HOxWlJXbVBR6atNV9D4WZqMVpN9k7g3JfLqkgFAXBgvdn4C9WfwyuA==" + }, + { + "href": "lib/Leaflet.awesome-markers/.bower.json", + "size": 812, + "integrity": "sha256-ag/+XhBM13U8daiyVn7RglCx1OVwWierbiYD5QMWbdE= sha384-0skalxmToowIl1IDHGwdzk7jeD0xJUsMVY1QI5JMU0cxxROzeaQ9P4rXN3C/5Sxq sha512-3AAe5uc/EJGi16XRtDtLGXBOy628vcNQiYSXgy1/uv+oK8QKKPYnov4DJ7WbeE7MXQke2UbBEVNMIXk/eyCzFQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/LICENSE", + "size": 1052, + "integrity": "sha256-65y3q/1Rs9YKOQq1ckiHOM8CeK6XT6Bt8CAZCdHObdY= sha384-S5C/u1j/bBMBCxALKebIIPdeOU7GkVHlSSxEOxUFDDlL048VCS9Yd/s4Tgw31bo2 sha512-Iz/yQdSsK1KkbiUs2mPifMhCHhF/1afenUyaQxF0Sl9I1/+8hgF5JTegPe7IZg1dTr9FyohZoUQUGL/YSzaLvQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/README.md", + "size": 3452, + "integrity": "sha256-LDlu3qhzoyT62/dxW1BLlp7XHaOg17cPntInZijse78= sha384-3fyHDxMSmdWrCTbisxpuQemYt4hxq2KNagIgV1Nce2iaYiqJfYhd3MI2tIWqqbPg sha512-bomyo1r/tMC+w1rleFK8UKkLBjK22Az+6DaJtvF8C9Z9ipeFiZM63QMFxNLgoo52lofG9/uEHNZCpNhl5Hwm9g==" + }, + { + "href": "lib/Leaflet.awesome-markers/bower.json", + "size": 521, + "integrity": "sha256-RT8CZR798ld9aKJAI2XFJnV7ucftxR/oJspUUz1DghA= sha384-g7sMeut5vhFJH1nrBcLZjmfQzUnIYTe3kLJxmshdQq8I0PaRe+/pcI5WZrau9GCa sha512-O645Xqll5R5EnVAKBqkexMZdgEWMVfeURw0n0yJxW0uPg0tLyBaShsQzPmd1duZzVwzv8eH+EWlOQhvRNi67kA==" + }, + { + "href": "lib/angular/.bower.json", + "size": 450, + "integrity": "sha256-VI3lRIeYSwYWbM7nla4FNbYrnxGyyZj7dbPEUgKPlYA= sha384-NJtC87jX2gx+jLm4tGSWsJaeuzpmVvJ0K5xBd9x1qkk2CFjlZKx3v54azfdHm1HD sha512-n3gEaqc5//k4D3rvNlUCvYL4zQ2sYd4bM2XDz8Zv67E1xpxbeZ+MqRLgeMt2ETTjdyBWDOypHYGebjmHjKEsbA==" + }, + { + "href": "lib/angular/README.md", + "size": 1885, + "integrity": "sha256-GGaYGN7E8zM5rMNyXham1CLXU24g8Pf76KXyCyuz6EQ= sha384-lfvomXsmO/qbgJyTJUXFDLBFsHtwHJvaWiQ30wPgVv3KZsZV+OGzeQ3fNjAIrH+x sha512-NkfRMgBTZwlpoXn/DvcRNmKuixKqcY9/g+6QOy1hU3LvEpUUQfUVR05oXRAx9WauQ6dWSxG4JHDprLwOoHKyBg==" + }, + { + "href": "lib/angular/angular-csp.css", + "size": 343, + "integrity": "sha256-iA8LRZSohzASEevcfD3J75HJ/PRC3eF5u7lqWT+R5oQ= sha384-psEsJjLMXXzczATQr26fTAA6FkiMe5sYGjIKDphFe5gmN9xB/P06kj3Jk/2H4zcI sha512-R0vSAUUvFIDzN16dgha9gY1g2L1AdAC6MICZQXtqZG2h6ZPOZqHxl1B9aillJrKQgsw8qN1zwQSHZfmuuwLzQA==" + }, + { + "href": "lib/angular/angular.js", + "size": 1141759, + "integrity": "sha256-L/yuo6E3WLJSrxo6SY05vSNAJdyheLh8yU7DamHnQt8= sha384-ZK1EY3I5S/2ba3DjX2nz4TNrUWXprwgzv772lUptR5+KEcAMXkTuuBd9zOwY6SyU sha512-7js+Kay1d8NvT7QwLqsfzGCgrZJFXgl25MhtV8G1I6+yEP43WQZJlJiomnx8fWEznQg2ERCmmg6rhIUv8rBXsg==" + }, + { + "href": "lib/angular/angular.min.js", + "size": 155877, + "integrity": "sha256-cRg7JxXlZqMlv4CDxs+3ego77gGXj0UxaLT1xa5pmkc= sha384-J6HAcci1hnSKRfL0zv5aOgd+T5JqHueQThzXxeqNQ3iFlFnHfT9/lQixuiGBKJ1S sha512-2J3JEEO/NYZcmStMmq+oRlcKCz0mTOF6/OLwQxSc7y/WmhHgN0165ZAy/vuRBI0qUVtxYFOPv0atuXMxuCIZnQ==" + }, + { + "href": "lib/angular/angular.min.js.gzip", + "size": 54974, + "integrity": "sha256-8DS57HjUTPf3mms/gfacEZb2S+pXsOW7DnNCutXwv/k= sha384-p3FUUjkocO/3ZS3f01I8K2oM8uIY+M20pO0lp2YpiN5X2ofR3LhzRa59nat1Mgac sha512-MmVq6DcVhX5XaBGfctUWaaQXIjq6UWfWIUt4slO/gD0ugbqSwM5fZDctW/mg7IvvSxaOFxcoHF+NW6QN3ffIww==" + }, + { + "href": "lib/angular/bower.json", + "size": 133, + "integrity": "sha256-eWExYrvj3DgAV4OWF2H4gY3oQoxZJq8T/h5pUNZI1wA= sha384-N38Ud+g+tUJOmfPuvn28sZjLYQDU/FaakL8SZDzW+EafOJaGRcKNKS3LOu6On/+g sha512-pKFdjX5xXjr32uwP2njXjNK4v9jcv59r/qGKDbFGT4tERn/IKD1BljSgnbDhpTCuyhPnjMdBpHRJseKL27HELw==" + }, + { + "href": "lib/angular/index.js", + "size": 48, + "integrity": "sha256-1Gn46TpMNF8B2B0WKoAxFt4bxq/Uv+uotFlRRJlWtoY= sha384-sOZRS60jSbOnTAlsrFloV6Sia5w6CTlYNuXzBz42lytvxxl2gDsHeGBClMfLFp5B sha512-tnO5r9WHFrkL22bXXxbQkHqiE/FzGqGzlCtTg2Ev5IeXaWk3YVuncvblxWh0nZg8KcJr9svWvCob4/TA1P4zEg==" + }, + { + "href": "lib/angular/package.json", + "size": 572, + "integrity": "sha256-Xxbxh6xug81wJAfTewUbsiq3Zr7WHQOFftZVgq3q4x0= sha384-MK101/sXn3IIdp/Lm55cIHunzDM1rX50Facfdbnb1fg7U3zO/A7FMEYXayCdliOE sha512-ztLOeM3RHdm5ZQN49Wr1BGLvdSJf2SOdPLMoOPECbTBp3k4Y2UJks1iUUswhTMi7QgNUdQUI2bKE2OYiErysoA==" + }, + { + "href": "lib/angular-animate/.bower.json", + "size": 516, + "integrity": "sha256-0xAfyjtulyhJ2PZvjfr0SppMxVGbrB6mG0Arwtiuiyg= sha384-D3lWE/Op/mXJimTladHe6LWtjsJQfd76mG2T0D2H9Z8LD5gpSHg5a1yYm50XbN2I sha512-iwGbVK/kBkVIesEKUb9xVnorQYr2VQStQfXLMwEk/f1niRJPLd3Li6KEcwEqpUMFrMnODb3QBT8knhTnpDAlTQ==" + }, + { + "href": "lib/angular-animate/README.md", + "size": 2045, + "integrity": "sha256-FHxTE+z2Fzm3KM/jvOrpttTSqaVqWnguDQdXbcba0uQ= sha384-+vVEuqX2y0sKxsRwXpcgGMNTgIb/CTn2QUW5vbsYAab0/OcRCCDYbYnLbbJdim8V sha512-vapb0z9UepD2XQGR0LJdJYSjwW4rdM7V6uf+n4Owk59iWA1grjzcP19qXxsU+EpFj9dmXYZegAtFlZMnWxes7A==" + }, + { + "href": "lib/angular-animate/angular-animate.js", + "size": 149421, + "integrity": "sha256-CTExcoo881hQce8jYeOieNlhta3q97PF4v3zNN6Tqaw= sha384-M73HExfzKzhOLt9useLmZUNklat21HnKFYP9ILd+tu3lfv7SkknjucnEvKn2m3dp sha512-mxnWvj8nHKVcmlefC/dIo61vG8n227Kd/gjJ0Rur02mCGU1XHzGi7clcZX/eIl4iIiflVNSOGXYF7r10/ao7xQ==" + }, + { + "href": "lib/angular-animate/angular-animate.min.js", + "size": 25367, + "integrity": "sha256-ZbCA4RJWOJzJhSIqMR6RZ35Xji5snC2PXLNZNCsasts= sha384-bWAYmVsrxjYlTwtRayl1h6mGyAiS+I//G96DW7gLLJpqmykWj89k5J7ZUTAphQZF sha512-coBrcdx15A+Q5X1kXVjjR8qJUMF3psHVJBUQEmH/+Cb5HyjhA2HWo6bV2vrgNSBjP7X2HShMek1nYq1O/wWJrw==" + }, + { + "href": "lib/angular-animate/bower.json", + "size": 172, + "integrity": "sha256-PKYq7r+oOkMl/QjZql+Mvmi64q58TaKoZnDy3gfC+nY= sha384-iW7yVYP9Rk7OM23hxiWjHZZ4Z0R9vEnls4MzNpT1gc+bBt+7UCfjVO/gzPTD2bj0 sha512-fJLZFwsIe2vR1S+G7Z2siBt7LjfB5QFkcMLKAvgEIaTy7G+ESmpMqOl4qs5akSatCBM4LsAnod7Cm4iJEIxeaQ==" + }, + { + "href": "lib/angular-animate/index.js", + "size": 60, + "integrity": "sha256-fy+TUOViS/huh2DR3q4D+uRHeUkoS0lHHrZ+K2SYy30= sha384-Mkxjr83n50hv0xbbIEWVIOPl2lgmaTDbPHzEZVxss0VJymvC4Yxw8ve7zYesiE9i sha512-whn4pnteLkzMdLJCXtFt5QL8F8+8m/Hex95iRCDcglQxOyVUUqmMDolhGny8TUlz9eoCj8kgPpEnXgJFKSrQVw==" + }, + { + "href": "lib/angular-animate/package.json", + "size": 602, + "integrity": "sha256-UqQ86bjJXCsbrhNwp+wyZv20Vn7Kavzkb4MkrSZcdd8= sha384-Gr1CDLQJTyMl3xWfZG2kXo+zWEz13emLrCCIPlBz6GH/rCdyl10X63y2Vco/ZZTa sha512-M4MP1rlkz6BlqgMrhuOO5EfPUBlS5VAa9eWIi5yrgCIxxmkB5TfHmHR/vE8JHJUJeZFhFKQomVVEJb4xgxfYYA==" + }, + { + "href": "lib/angular-cookies/.bower.json", + "size": 521, + "integrity": "sha256-FvMqfGp60IY9t07Ote8CUXvFHaGDMY66FFjF6+O+3GM= sha384-1o5DlxEmq4TRfqB5Gg703suGE6y0YiQGRqwN6QgMEjVN8wHnStJ5M89tn3f+oDlq sha512-UwXxmlPXcyb4CSFPbPtjS97lhpL2OTJBPWNIH9QIJoHzuEkJoLPH0L0gOoiPijp/+dxEPEMjWFB5xoNvu/8ESg==" + }, + { + "href": "lib/angular-cookies/LICENSE.md", + "size": 1074, + "integrity": "sha256-9kuopR+mTX9GFuiNCFDsoqpDxMpzp5j/kvdEAS0P9N8= sha384-y1jCQIBjSlbyp3Vc1WYb+UoaFHQ+gkEH2XBrGmo41kS+Y1Ic81ickPbUxLIv/QVu sha512-iHlfNAjXD1p44Ew5k1FzH/FhpJ8HJ/DPPQSJZKiqFMui56ue9kJyPY8G8xgZ5moS0N45bMva6UnF7b6kLYbirg==" + }, + { + "href": "lib/angular-cookies/README.md", + "size": 2040, + "integrity": "sha256-iQHKx0qlnI3HWcgd4blsrlM/ATg5eMHtZFrLNi2I6tM= sha384-rDliBvSi+cc9cjIMxG+8hIGXScFS+wlld9JRc62+V9Kj/3luuRgP5VV9sPTnuaXx sha512-AH94wBOyjCP4ksl2251B6FDaQzBDtpPkkp6DYqnBy69eJ5JNnuglr26hBLvZLLD6UI/ZnW7M2m684IYNC49hkA==" + }, + { + "href": "lib/angular-cookies/angular-cookies.js", + "size": 9751, + "integrity": "sha256-jKLPqC1l4v7Muwuv0FTp7Z5BJX2NqouBEf+6ZSH8MIc= sha384-TaVL2PHm8XmR9Hza210J2LxLIXTTKSEwePBsXF4h6fSNYeJ6mvLH2H07qdW0nV3Z sha512-amg0XGOoV5lW9tSOF8q3Gg/43ifTI+3Fz5Z/XdtEnOBPZPq+w4MHfjSTh9Cw8z5DF8Nz6WxPdOLj/AluOTiD+g==" + }, + { + "href": "lib/angular-cookies/angular-cookies.min.js", + "size": 1445, + "integrity": "sha256-fOA3FEVyGOHT2jdLKcARErL8VujGjafk3z66lIia6VA= sha384-yxstoHXybetYu6kVmVUrd+2bBPsgay8hYCJjeQipMm+bGu+bMMCXs+oN4hz54DmP sha512-gu9MjGbI56uLO9shqfH/yB9keGbt8psRQgqEQFMq51aIIYZy3YpgAvLHvCbOAOurdlmDKrwXgjhK885zryE0BQ==" + }, + { + "href": "lib/angular-cookies/bower.json", + "size": 174, + "integrity": "sha256-oyJ06pq6417IphpIuGiUdUq0VOC6ZZxSNTUtgycb7tY= sha384-OMj1fDdkebbtwkkh5nu4tOBvbe8Ek/tBClu6FG8viFZ6HXXRIXQlVGGt9Tuax+7u sha512-YyhKUxwczchAnMvqg4SfrpNtLG/IwOawOuR3L+o86goQ3n4d+WlpTZ9nn2sOFXynKeBzwyiBy5/jBZ+pkYsitQ==" + }, + { + "href": "lib/angular-cookies/index.js", + "size": 60, + "integrity": "sha256-sbjVTthADU+ZfaDy+mcuhyjUdxp3Ao2fSVzxcy/LHm8= sha384-9x6ussVbTvT1hFp/N6AHfKE9NbZXypfiPiTmR3rd0k1cGuELxK0MWmhgChawkA1k sha512-xCRWOB32aiFDgTI3t2kDg9weE95o2WnkWpryWkOIXYAdkZjqy4aP9AfAagKAHwYuXd11N1vbEYeIl0dA3jDH7Q==" + }, + { + "href": "lib/angular-cookies/package.json", + "size": 698, + "integrity": "sha256-znQ3Gxw3+AhCJplm7rlNl8CkigB4Hn26h0nwUeolOhg= sha384-aPefH2aPwdT7drBOOHILf198XzMQBF0hDk+72RxcZJDwmftV9BfGp2/xaxbW7yia sha512-tJBqilfOiWE3QGVijgM/J3flhGF6bMY0aOhOhBa8Md8AZ3d0gZgLfA47zvpKkJKMl0zkrRHoPYunJPuqVQPjtg==" + }, + { + "href": "lib/angular-nvd3/.bower.json", + "size": 1044, + "integrity": "sha256-vmJIm/voj7VmQVL5H4XHdXOaTkOZEQNfumrB7oqQpP0= sha384-ZnSXECKk2cqvETRDVhb4Xv4ZbsFYR/9Bo1QPOsWMSjyIcOfVParKwJFhMpOsCV+N sha512-YR+8UvWcrR52uds12aiTcpzHvTaFZFdrq4hTgnjbtmlzdeP4vBmnCMd0zmdq3zPBQzR4Erm7MPAYybi6apecmA==" + }, + { + "href": "lib/angular-nvd3/Gruntfile.js", + "size": 1693, + "integrity": "sha256-A7dEmUUV70kK1VL5mKyuE+eSOIfA0raA4Svkq3l+bkw= sha384-GaKj26MLXeZmhjmoeBOsrdxe+X+kpQ09WFY/bb3ugrtoQh5ARpvegBYJt70pZTn3 sha512-x4y3FLYPqhU6uJXz5cKYOpctsD0XHAdB5R974IqcE2mYvkX0+9UEBVgw4MdIRedLCeWFFLKgjP/O8lDEsd7IsA==" + }, + { + "href": "lib/angular-nvd3/LICENSE", + "size": 1082, + "integrity": "sha256-CT7570yX207xdNaxTvb2crKroLam7aPy+u6q8W7ZL/U= sha384-CeoijZQHwYHYNxngiOs56Vfb2SHUS8Gw4xFDqZSwi9M1XqGUkORBWPbF75+uCr+F sha512-OGUiPkBWd3Wan0stibi7/MBOq1AlkR+7Tb3///3gLf62bBonHJJSvi6+MNS018d7HrvnsGLPD7KxQWqsCY0JUg==" + }, + { + "href": "lib/angular-nvd3/README.md", + "size": 7555, + "integrity": "sha256-30oIX4VTHLYlrzG7Ny8cPojlBVFbsHFa09WDNTojiLo= sha384-9Y0L0l1Xo63ffhUaenzLczhwspIAY2WkGORuB7pLIw8fLpJY4SdxWAXep2g+E5VN sha512-s7L+BXAG8alL5aXM+zs+M3x+9lne2E1zBfLzcbm/iKANBgBAFqLt7kC09hyi+6uF+fKE7Ay1zQt24uXVcpA3EQ==" + }, + { + "href": "lib/angular-nvd3/bower.json", + "size": 902, + "integrity": "sha256-Mg0z1NuLdb2zHdK18qNLsAS5YccmaSGK8IPVIMtHWaY= sha384-Jx+4c1aJXVeZLlWAOuoofX13fwrkI2W81gTfvArnuhgcrDDfWdBTd7glkbXOe+jt sha512-mPRgMuAUnerVYfTMmd1JutRWzeXhPbisj7X7oi2Oc4MiIHU6Pl3vk5Po/eQc3K2h6wDP7acF2XMYFstm0+k0Cw==" + }, + { + "href": "lib/angular-nvd3/index.js", + "size": 56, + "integrity": "sha256-+q7Q3A2I7ffWsU5cWIFUs7MQi5q45LzJ77hI9o6UVPw= sha384-v/wCQSYGwV+XRAYCtDl+xkrXNBjftA/CYSBFQz3HUgoGLrMD9dI9wM/twU5m6JPi sha512-Uncdk/1/AS3NyL9MpqMzuAsZQVQv7YQU1CKeQtWS0VlzG3teVOsYA0tfsVS+WtzEEGPz7NCyHUwEcUHGjYs98g==" + }, + { + "href": "lib/angular-nvd3/package.json", + "size": 1237, + "integrity": "sha256-oXUbRmHQZPtRuTPrQCPWAPYG9JXLw6lG2kH4xlq1GyU= sha384-CY2CrXFc1ZQuGOI25U5LWIMRTR1rjRf6yUMsu69ezmqa6chc+21BID9JxwylaljC sha512-Sa4Gmipk8740jZOKTlCSLFy9OUlwO4OMl+xzve33qKWliTgBNAV6XmA3fbGQYn83ZLjAh5hXVzdlV5e8HAieNg==" + }, + { + "href": "lib/angular-sanitize/.bower.json", + "size": 521, + "integrity": "sha256-E3300l9h8Fj61e6dm8z3ssDO5sXDsFazzJnj++yaM+c= sha384-hS9d4UWfCvd4vJtMCnyjZVpT9DAaLSZUrnd/zjrxHux1j2du2HkIYq1vnprATiTN sha512-KILjMu+0OQotPTJeNjIVYPlZOIlHyxpc0CGTbrKwGRRViDMYSEqHrUCaKLFDSpFVLP4gCaiLTwExLg9Km/wSbg==" + }, + { + "href": "lib/angular-sanitize/README.md", + "size": 2051, + "integrity": "sha256-Cajh173/eWA2UgSMIuk7clKG9m9tcmLf06L3HuxyLPU= sha384-P7BIy1v/oGLdopHK3e5sTfLQniMELZ88jpKRF0MJ6SFdsBMSj/VFnRMBRPDoYeiU sha512-/LIfjf1IGIk/ifHMa5fDVHKAnn+GyKHBxl3A0ViysVY6kV+dBoSCBTHO1PKit7tfdfh3voQOwMiufno7AFy2lg==" + }, + { + "href": "lib/angular-sanitize/angular-sanitize.js", + "size": 25655, + "integrity": "sha256-jfb+WqKe3P+5rdl1C+0lNgxdx/07pVxUWNW87w/6Ax4= sha384-xQO+RIEzgnahj1O/ynHzy7leGJMI/ZjbEAn3jYgBrLjvN34Qcgnqu7PSJvEh2V06 sha512-uayaucTOZonEERxtwOxOLGzklGEDajPDp6lcSqhrOaAXdf0e6/fDOJdM9O3YdjcY3vweF2fGmJeeubONsjYTLA==" + }, + { + "href": "lib/angular-sanitize/angular-sanitize.min.js", + "size": 5828, + "integrity": "sha256-qdJ/XEO7hFyTrOIf/JYX/XsaBfUn1totknrlfmN0tZY= sha384-SgdBDTRey5nFJzqbVey87D0oYv6YKSg5otYVWfRUoK+e+KxVRbzwcurpaQMxNg8g sha512-BWyrnJUKRBEpV5jbDM1FOQlrbDJvUF9cuBhnqMkA9Q/UrcIolxtg8opGb9IMab+szb6wLe9vq7NFuPsri7b1Tg==" + }, + { + "href": "lib/angular-sanitize/bower.json", + "size": 174, + "integrity": "sha256-Ciwv2JKxK0Al3z660Ywct5ouvdZoem4rRhvH3ngUDiQ= sha384-6yAWuc9lXsYPPBEn5S9fjo+HTsZ/noKHCkdf+DbWl63Q95+5OflbTGry2lR3w88b sha512-AP/angKkDfR5CZ5UJwMXtvn6QpjyYfp4efHpYiohUz1XOFbIj/VEAO3hQuyCT4pBqj5lHS9ePR5qK9+gq9swRQ==" + }, + { + "href": "lib/angular-sanitize/index.js", + "size": 62, + "integrity": "sha256-RMvYw2w+KBjQEesNx9lSk3MGZ/pamKI0Sem0rdNp9ls= sha384-2gSqqksJ+PCjkMoFXPDC1XnF1zNIq+U4qJVDIhIB3h+BZG3PpwOIiN2ApNsnQgJh sha512-fObkEjG5I2gePqAj7dwOuYsKZq2HZzzSAYs7Brxz8Tixas/HfBUC71fpYcgyHIxXa5oheaHJKznvQxFWPh0RhQ==" + }, + { + "href": "lib/angular-sanitize/package.json", + "size": 603, + "integrity": "sha256-XcCV19W9MO296Farbk4T1ylG7uph+Quj4aVggALkNjU= sha384-Xg6RSa7YUYU7AxTNvHqvR5T9Ry6tUj7Vr1a+MjCEqgooWowMpicjyJ+Kqr/0U3Ut sha512-2WKSA0Bkj0qSQ267E1C88Y15ZbXo8ATd95jVaZ6QlPSS2OPMAtvt0I9NF6VCe9pjpb2ykaK/arAMBv5AcG11eg==" + }, + { + "href": "lib/angular-simple-logger/.bower.json", + "size": 1097, + "integrity": "sha256-VHyqPTE42Hf9lvjY7VieN1SQh5IgjRR6rLX2Xg2ngl0= sha384-kZKr6DU8UXiifze4Ht/6r6vmlcuDYSac5tTGTbg1aj2EQZyVJO5x98S4Xc4QsCws sha512-YIVbS2szj61E9WcGcVkgdOJVYIKF9qcEj5MjszlUYRnHnVSZ+4QeIYQF/6288Rg3Zgv+j08UUMBPQktpKsbg6g==" + }, + { + "href": "lib/angular-simple-logger/bower.json", + "size": 811, + "integrity": "sha256-5kwe0cV3YQfWHACv0X0LWv4SxTHZqUjsgJhGvU/kwB4= sha384-8ucTjUD/qct47Vjsvvl00zzDGCpvG11dMi2AclEOl/9BtKvvvaei1rVpkFQT/RRf sha512-/VaIaibReMSntks4zWgHmOrdUZAOgbo1C6SoDL1dgtilr71jQkmrckQutaQ3Q+S5hmkvW4V11Vm72lHSM1khqw==" + }, + { + "href": "lib/angular-translate/.bower.json", + "size": 632, + "integrity": "sha256-PyUIMWe3a8kjOao+rvrY4XQQO2FKHepUOvVbA4BU5Hw= sha384-rcDmlfdz9ZZSKKW49htEJLuDfFZ72vON7R24bAkGb+GU+nbFyY8wNKE7HmgjShXi sha512-ofF2GU9W5VikNgLWDwzMl3f9KnNHmKNJ1kS/pB/nSFS/Vvz7fvOmo7+Ksr9FAtOt/QMRMQban+vkER384ilbDw==" + }, + { + "href": "lib/angular-translate/README.md", + "size": 618, + "integrity": "sha256-8X86kBTTwnlanbJNWa7vB/Q4x9Ypc7lWolMhIeqaURo= sha384-NP8HyIp2gQgGQmsml6M1lODClVeBjmnOEzNj8p9EM7wtGcsL/eQtTM7CLqxJLrfl sha512-zqDr2V8CpKQkQdavmqlp4a/EadjOywQnu1Mm7kMVRD7FlpyyIcj5iq5qLievXBBSP/yRkNpRdnVKrnhtflScMA==" + }, + { + "href": "lib/angular-translate/angular-translate.js", + "size": 133133, + "integrity": "sha256-t7oBnVJm1x7pzymg1DeeYVPJKpkhAaj17Fznqkp3BYI= sha384-Qqgc6dwb1FKY1wsvcUmYCVh7gxv+qLDPkEJIxy2MLdrJLgTfSJK74IpZU3FonfsY sha512-37svM61Jk1tNvCgJC5E6igggwfVvMrtAFgGlXK7qrmKzTHpw3pyVFbcCHaNtwfp/Ftp3IvHMojkhDJ54sMRvjw==" + }, + { + "href": "lib/angular-translate/angular-translate.min.js", + "size": 24450, + "integrity": "sha256-Q98/JuSqhxN71wdqO+Por6FKcZV0lSCQP3weQQ/CVH4= sha384-wb0bLDkzwrquuteUcV+kY8Sr3JwgFMCNq322117/COvOj1eT8kjMTPMI9eUv1zLx sha512-a/Saqh9wa0rRm8gEgTqGYgoIh1Jki7htgcbLo6R9R990l8TqdIrpx9yWuTLJ+lMsWpQeLbrkbKvkTizrOuCI9g==" + }, + { + "href": "lib/angular-translate/bower.json", + "size": 269, + "integrity": "sha256-cHE+uraX4Tof2tliZJKB22Nsf3npb5b4VE/50w8myvw= sha384-zwpILUzmRdSiagzKhavctJNk06ffYPoWL2CkWWmOH0YEk9+R99OdowsFTxzNQttU sha512-R8uM5HyCmRAUYfGel7aog9rbw8dYAo3HEmyg4qAwK2IA/NJ7vtjdOH9NqatBGMyUWfcrLW2VmdVUXXzGY54N2Q==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/.bower.json", + "size": 803, + "integrity": "sha256-YgZAO028HJjKY5ezNDYbxcYvErJiADuF0CXC9zaWrqU= sha384-cIBVal/4ljZIGjyEtbm8GJ7t9mWD8ugOWJlX30SY9y3Dj8rioAJB6EIove21pJQf sha512-E4s6/nxuGHZGZkeaDN1N9tf4ddKkNwucU+X1QMwEqTpwZKh3Sncj0a7sNtK1EYAUn6UeVE3szOx4sXQd7o66Qw==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/README.md", + "size": 816, + "integrity": "sha256-e0vqrG04ZmWYLTSZiifjlekyxzCNasILEwyyzhqehp8= sha384-oPBKwMIroaHnL2LWxlx4zNfspkKhpRLutkJnRd4/TWiiEqol9zeu5pIkVcoZ58jh sha512-SdzN1Bz/kT/2L50pKrRPJaWm+DRIKLTqnBOSK+adaK7v0SzkjNwQLA6zyg+YTVheyN6kXhjXtOtD0SxvaK3b7w==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js", + "size": 6541, + "integrity": "sha256-F/fMky/zY91rQTdQ1FIWQQLI0vfutfPrXeb7ZPu4xIE= sha384-kt9+qtXPw9L6l9tJqoZN9ekUuciharpnGWiTFnTp1FzO+PHVBBVKsoXcO4qvt3sX sha512-veguOy7ZzckXH0zzy178ruwZPkrrPC2qu/CnNBBtAOQBY12v673KCeBsYaX/Nm1Hf0JDF/xt+z1IKCaWpm+L3A==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.min.js", + "size": 1447, + "integrity": "sha256-X69MJFWqndYl7oJp7Ji/vteK2re1exq6j0427wsmMn8= sha384-VqUbkuepVqSuiC/08YU1aN9mO9b1BRCrQhDo+cGJTJnzT7ojRH1tkXEW6Ri1ppmI sha512-W+sZ325glYJCGrYopmqLkq4ycCJEs9cC65nallAuxf4j/RkC8TzJ16Hi7/+9a21nsFBQiXNJu4EB/c8YvROeLA==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/bower.json", + "size": 356, + "integrity": "sha256-cXDzZOuHEZuXv/8VV+rcj8BvO8a/chfnGKKpAEvVaiI= sha384-eRbnTqO8M19zI/7u3JJS4COQEo0ht6IFyIaW6pHhHkjzyKCekO/UdjWa/4a7a9MJ sha512-WcVKbW84aao7qQWvYWzGhfmy9MyAjrTreidd74ha7FWt7oVUc9NokTJv4TynX68P389T0x6P1ee8N4s4gW44ng==" + }, + { + "href": "lib/angular-translate-interpolation-messageformat/package.json", + "size": 739, + "integrity": "sha256-NovwKv4SDnpfPr7VxmuLywnTtADP8p5anF+yntd6wPU= sha384-8Te4TV6a9iVD11KaknycCkwn8aX0OnMBk0yJgXkaBLRG6JUlGqkEcBmYv+llGwq2 sha512-rRyfwPuvkrVRPbmjg0mF8OOunDXN6OyTKmtUt0qYA9gq+4yNq34qCEiAEM9tWWvC4KLDsWwynZMXPQtSJw7DtQ==" + }, + { + "href": "lib/angular-translate-loader-static-files/.bower.json", + "size": 732, + "integrity": "sha256-jopPJY0X083TAcwJm8r4tPAv1+Mc88MV/opeX2aai0o= sha384-qVmbbVvkOXfqVTHF2ZYsLqEFqlAz+sjoutCVFbnGNFIKabB/NgJ7uasM2dDK1LD8 sha512-XOT45D4dZsTDulutHqliOzUDuincd6YojGFSajRzlbRIen7l5+FYzJZYnrxSUYpfhI6fMWbD0L7XPDoez/cZcw==" + }, + { + "href": "lib/angular-translate-loader-static-files/README.md", + "size": 776, + "integrity": "sha256-fT0cnTeyAwCh/BbGg742Bnv2TprRGX6rSEbfqg++f9Y= sha384-5/Ua9lmSB7kPy3v8eOGKSQza4PAtXbynnaecl97Mk9DBVczWe8S7gf54xYnMDqhR sha512-1YuBhh1ks8hnN7sndN5KQt2Rhb8061ditjCOvSHhPKvn/kTFIS358xhKwZKfuxeIcHxqQ9xWUFiw9uSFVjuEdw==" + }, + { + "href": "lib/angular-translate-loader-static-files/angular-translate-loader-static-files.js", + "size": 3080, + "integrity": "sha256-Wp/RXxNqhxlNYymzy+ABIH8u4i4d4gwSnFccr/ak/AY= sha384-ILyf4kkSHA9dSjV7TjWDHnUIbeVyYJvSF/NL+yNHH3AmIml1Mb8Ame39jCotkh49 sha512-zrJTB3VkziIateyhgLI0De3KBGrtK8uK9bR4K//Y0TxqcRXMZAP11m0U12YvGjAv+PlH4jPfVAZyYnao/ecnEQ==" + }, + { + "href": "lib/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js", + "size": 1373, + "integrity": "sha256-GHTBsPdmxs4UG80rEg1+DQsGZNc3m+Ye9EPqdSKMBeU= sha384-aBUw+l7mGUs0Ep+iKLcpvaSItBhmDu5nQjRAr60sxwzakG7IIE1e7YXkVEdLJ6nf sha512-L5AdgFYPjTX6NzrSbKLj5ZpT0bO6+Dhuv+Drw8AaY9oLKYlqElsSNtSR77o4ivyWiUDUW++nYTpt4wzG5U3GJQ==" + }, + { + "href": "lib/angular-translate-loader-static-files/bower.json", + "size": 309, + "integrity": "sha256-kKiWRT+v0x2YjfM8PsaR6dGMelaRkPPO4wecun/b4rQ= sha384-b+nqGjdVYa6kIeY4+UD5WjDgQL57ybemcc+gD+ywCqED7X6ThxWmKB4KedPjnjYp sha512-r9Qw2B0mdUPm1qRldkBAcSz5bfX/WDECGS53nBV+kqhKNT1g9cwW646PvodmsyVlH90Q7mn1FG5yriqmonTZxQ==" + }, + { + "href": "lib/angular-translate-loader-static-files/package.json", + "size": 809, + "integrity": "sha256-7otAkn58/flV38NfhTfOUMSko9ZLjM0rI7luz1KLzdE= sha384-xfxxqRFFPI8iKIG45HT5MEc5grRyQv7o3l+qvIKBH67DYcCYjCJ18jFBU/csrpGz sha512-vDq2vzce4lLjBxSe/meleobg2QCNWc682T3SH0Ck0rBDOKTnxumBDNmYRnATI2TbD4jOTyMn7BjsRHJEotWy0g==" + }, + { + "href": "lib/angular-translate-storage-cookie/.bower.json", + "size": 747, + "integrity": "sha256-a9IoR0huSR/5ti6+PzaTmfYDqEFNCLowPAfkR315sP4= sha384-KjdY9EB61PdTLI93fqm40oTTTi3SmsKT18KRC2GNrdutcfOBkwprb2i3nJRDITh5 sha512-o9wTrjryjk+li0Zc2zGpPskSpa62DzTgYUbktRHUKch4tlKv9HyBGx1M3NVH44ak3W6VYyPyM7vF32/zHZr/yQ==" + }, + { + "href": "lib/angular-translate-storage-cookie/README.md", + "size": 750, + "integrity": "sha256-5EWzWVXoQ4vck67+/NRfMaY71o+8uOS7yrdJ8ah5U8E= sha384-RluGYN/UPxeIC233zqHjdMzbtZOpO4qwjQ54xAUoz+NNJFlSra3qWAKiCwmZ+OoG sha512-pcLzFsvpKpw8Hx+7bBoMdUiKo+unr52GnrS8qotCcv/uDr62FDLrw4anKazGGnUkh1yFvkzUcBHTYB5sk6v4JA==" + }, + { + "href": "lib/angular-translate-storage-cookie/angular-translate-storage-cookie.js", + "size": 3199, + "integrity": "sha256-+Yz5bQwFfvPDrjYIG+0oEdxnjREumyjR4ifaI9UHcwc= sha384-M9nBoGWBZXXoblDtHNZEsPUaIgsMwzCilQgwJ1lxLwUXtCHJxn3pWA7xmrtSN86L sha512-Ry9rNh/SacNMBF8qgX6Kz9wckPMtmMxvMu4q27VkYxIlI5kP2eSJ3A6NEBrR5eTleJGDXcJqyZeF645Q2e4opg==" + }, + { + "href": "lib/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js", + "size": 872, + "integrity": "sha256-mclgBn7yVVICwZsZrO5qSYz1Y0c5LjjfyXX9fUdZDWw= sha384-Vt7B3MXQiuswcesTorOYwQTXjWimIWY5r6cSLL08Mqz911XH5DV/55If1JJQRQyh sha512-CUC4LT0irqbeXBxZm4mhYid9rjXJWJALuy8xrhH8Uxw3ish2BxQbEiHDWfZcTgsW8FKAG52eoeICTHZZfl7CZw==" + }, + { + "href": "lib/angular-translate-storage-cookie/bower.json", + "size": 339, + "integrity": "sha256-qAH8pIiu6DYH4jzxNMpNTTLt9eeghVz6tgoHoFcMKSA= sha384-5GjppoxCmgnZkb6d1nFai1mrVgsOzuennjCF87JNMJSeRdcX78qj0JITJP1he1x3 sha512-BYsPJYfj0vnz5wdnOaZ4sotsf0fOXdHwq9vB2mqstg2abaGYHBvVFAQsEjlpJikfkwyGv9bIaqtvtk2RksmY7w==" + }, + { + "href": "lib/angular-translate-storage-cookie/package.json", + "size": 770, + "integrity": "sha256-CQ/YFuaPo086s69Vgvf0WQXxXBfhmYRnsIsfc34H8uQ= sha384-Xm5/RbEFXbSDeoiW98wpvPYNl0cL0q6W/UONff1k2hkUNlNERrOt1XeztUPIDyFE sha512-k7RgV8B6xxG8TLWpMu0pbK+aySjuWOYdYqaRKZ2pCdsEgYflsc9suUzarh9DXONIK6ID3hTwI8KWnuOwhdCR5Q==" + }, + { + "href": "lib/angular-translate-storage-local/.bower.json", + "size": 753, + "integrity": "sha256-TEDDB18m2w6CQZNkVvd98vgr6xFBRbgwwnFGurjG9ZI= sha384-mLRkgGlYjAk1R2LgT0wLmysEJ3QTIyDfsi1mfRUxs21Mc/vDMh5pJwDX/aAyjG9R sha512-ThRqX0e0bNBWMUts1XuH0rwLdhORX5xNcUQ5xjda9qTNhHOujxKybhgsIrm6RhRUztbxbnq4gIt6mOoObBGzEw==" + }, + { + "href": "lib/angular-translate-storage-local/README.md", + "size": 747, + "integrity": "sha256-Sk9nevM/P1KnlZI1bfQgN1V4cgnPLcRdlgrVtcdjrOw= sha384-BfkNr1iejO05j/1KDwqvo8ofDpHqEguF88MR2Tk0A8gjzD4ZjoNwbcdddXgty/uD sha512-6FGjR3S6mOjjMSQGUjAdKHOCT8aEOWp7c6/HhlNGxCDWyFVIwB2A6CnDrhHSzPDhB1j4xOyAbJl9CLyDC2Obtw==" + }, + { + "href": "lib/angular-translate-storage-local/angular-translate-storage-local.js", + "size": 3637, + "integrity": "sha256-GPfqxanzijLeob0tEQxvu/ks8QHaoSfo8MJ9wqUY5/4= sha384-KVQAnCpSMaYM5sWyoGy8Ja+/GbxEBvrAKGywQAyuaAm8QoT2QBQZI4qSjF66M0az sha512-xDehfX8x8RCV1CpGIBJnCSth3EYHTE7XQRDmWihLt7Z4jelJwl0KYcsuqIzjtGmlhzHD+3R7sk2hHoDg6+utKQ==" + }, + { + "href": "lib/angular-translate-storage-local/angular-translate-storage-local.min.js", + "size": 896, + "integrity": "sha256-94nHjm/JKXx0AMSTQYRDxsFmvMc90KhOSYrmr/WOPRo= sha384-iRjl2KrRS/t5UhfEHfb/VQJYcPXPaPoDqVPNDNUzkEIsw8w2mPYkAbktcHXlOII7 sha512-qA5jJVDAvuz6hkU52JxQ3S5OY0RKRoGPVNmYoHyxl89B9/S5mnlEjyVeR46/UZBtOx87MQ2zA5IffpbvWC9Y2Q==" + }, + { + "href": "lib/angular-translate-storage-local/bower.json", + "size": 348, + "integrity": "sha256-Xrywk8qXYZnhtChJqikcWed9/H/JYcaERIkq/QaFvoY= sha384-VI1azK7eDVelRkRQPuet73dw7egUFqjsCD6f+yFhGXj6tXd3rEXpo+F9xiNf8P02 sha512-lRIBPIT6Y1Uu9Yltf0lQR3dMJgpQozKYghQLSusNJ49uqo0NOWJhDDvDEPH5CjrRcwwKfvMD7l9GqvjWvTClwA==" + }, + { + "href": "lib/angular-translate-storage-local/package.json", + "size": 785, + "integrity": "sha256-EZp741wlDOp2Md4RN2ls6doA5GDKqLuUy6waTFyJIOQ= sha384-0h6MPwoJIX9zxh9wgWkiLaUTbR+jnsWZLDlORgXj5TjhO7ocHQlskIDj4xbboVkD sha512-TwXbqFapd7WcdKyP6MjsD+r5xqNCejrzS8Pi37yHxhlna2asKEcn1NrC16ghp0hVgyGwTZcBWuuZ1vckHwChfA==" + }, + { + "href": "lib/angular-ui-router/.bower.json", + "size": 747, + "integrity": "sha256-8Fx+uKIr/cwxubsJXI3motx07LTNj49Y2utXPhzYHvA= sha384-MACTu+pPQd0zPukf1qaSAqOUinOw+iHjUg9PUwQD0Irsa/+lHmx/KnbqjUpcm1eX sha512-9Kzgs7QMolG3BOKGh1TgXcDlOuUhUnnEV7hqIGE7O/qVKW5vkmybNbSoCnS7HGzuJiFUIHFc6QquQc/a8+RHEQ==" + }, + { + "href": "lib/angular-ui-router/CHANGELOG.md", + "size": 19667, + "integrity": "sha256-8UeLgaTjGaJrUyFkGEwKbAg6EPtSnH9Bq/aPe+ir4Us= sha384-du1nS66ow2srTbtc2tzZGzn4p6Gz1u3A2/6XxxShEX87wl409Ayur7lAHU1+cXHE sha512-HrZy+21adcK6AOyUTtnHuPD7SzhjuXN7bqraX1yclOOgiL41IbW/q4UHT8NGKtN0ii/9gw+VcA5z425/5Vp+Rg==" + }, + { + "href": "lib/angular-ui-router/CONTRIBUTING.md", + "size": 4190, + "integrity": "sha256-Np6myeR0HI2opRajLpJha5nPqcAhexs5ELZy6rZbalk= sha384-JqdzmekLG431VStrVZz1ebYt67S0FmrZWSeTxUwshRtyTvj0IKxZo0aCU5PGi272 sha512-q05yd7YRod9U0YvyCIP4DXmfWXR1RplKY5dSXB7KO6IkuI1DOz/duDEy6OcVyRgaWlPn6JXHJYQwffzQn4Raog==" + }, + { + "href": "lib/angular-ui-router/LICENSE", + "size": 1097, + "integrity": "sha256-gk21612D2EFdCfOx7wdT7Hz7JFOzTrdn9KIAJS/Cmfs= sha384-7/WSvOycQ8J5ZcXy2AXJkqk7WwKwrPgKfpPK3tPgN0zRpXsWiluvqXg4afEp6Utl sha512-KUGqPviHG74lCw78sPQr3IDx9h0WxVlKhqGSMccZ7LsCArRWKrUkj6huFonaI48CQ22DeDSZQ/ldP+uNoKfNfw==" + }, + { + "href": "lib/angular-ui-router/README.md", + "size": 9139, + "integrity": "sha256-Tg2qGZvHjUx1M7bUe4HQfmlkMQEaQ58seOREM0CY1Ao= sha384-gfhAzdUZ8goZZcOC+GxeosMT1R6uHWpGA14jLeULIhsLMUApQnJeCqx5rQ/kTHfL sha512-X4hFF0+16LdCE2Jcd5pzCHHdQ6DATTPtap/l/jZD0DxglGv0BWnaOVdgFPTQKb4+CWLIrPBrhxmcnlvXyu4eQQ==" + }, + { + "href": "lib/angular-ui-router/bower.json", + "size": 389, + "integrity": "sha256-PNzw33AIneAtGk8/yq2dovvzz0/5b5hYceKLGxRj994= sha384-eCjxURkz6OK/7hKVxqAJFuk+W8X4w0O1kuetZl5NBk/1ns/wrVo7Ey+RwhW/Lr+5 sha512-urfebl9whaq2uMHCpjyC/fcquKH2TYsKThZIVksA7NVVQKupJBODXrRNZ40bOamTLl3mHcy4dl+qpTlHea50hA==" + }, + { + "href": "lib/angularLocalStorage/.bower.json", + "size": 947, + "integrity": "sha256-gBpCuregDLjaOakK3JHkXXvaTOJsv+ggADHtEUWaxmM= sha384-PLe/FKV5ab755eU/2RxIjAuCyoCciAF9NYrz6urx+mwgFMMZGwppnLlvmroXAjP7 sha512-YS22U2l0r1Xk3L4bDG4dWkuOAT3jlhvnHbUnmtSP3LDRDXAe3Nr/AhGXGuxazRiq0/0i3X0oO2ElnaP+C1lHTQ==" + }, + { + "href": "lib/angularLocalStorage/LICENSE", + "size": 1098, + "integrity": "sha256-DLd9qI9nCagKfYXMPis+6N8/lutJAEaXQ/Vd/otz8kA= sha384-1Xawml3BHDKq+8ulONwpD1cs44ou24SyhR3FMbMN5fRXMp2lWVkDjudlpdBQhJiN sha512-19/98Muj+rPTq0OQRQd04g3cFGgEFhCutoVPpZ6T5goX7ayyytNQ+7IfaZeMOLU0Sf/ZKYZ5rvc2wktid77uBw==" + }, + { + "href": "lib/angularLocalStorage/README.md", + "size": 3155, + "integrity": "sha256-pf2I9TpgvBPtm76xucUosgXknp/Ld6UcEF/3uZCbVWY= sha384-0S2HJucQ72ZAnXHn6tbjQGzAz+a6ipHEyA8KcSsqzBwwwiLHLCkERuDSpL9Zyt2c sha512-Piodp643oFiQSYUHqY4KZn9JjIPOyoQTHyV6k9EqpsmbXw7Mlm0mGY/VB34UiZINYLUh8g3rc+hFuSvho1vqQw==" + }, + { + "href": "lib/angularLocalStorage/bower.json", + "size": 666, + "integrity": "sha256-O443vh0KVyVy/gEJp7SMjNBCMkJvJQBpjTglf9MYYsU= sha384-LbSD1RqQBRNoaZH15Hufc3XwRzDPXSuzA3vnFNgA7woBv8XBlvKlHHf0i/dqvI09 sha512-RCFe/MbH9/Ng9zv4TBpYngto1AdUkP5dZQqrBR/5drhL+mRxJc2ELwEB+J/tUB4MeptL9cSG4sZPQvJKYQ4wzA==" + }, + { + "href": "lib/angularLocalStorage/package.json", + "size": 521, + "integrity": "sha256-GIfyCEpd/KXKYX7XeFRrZxoYAsijYxWcBmHYPUUrpPM= sha384-cWQ4n/NhNORFoTYNn2dLWSLzf5Vj1b1Nsin5SnZeEq/kMwn7KpIBUIplSOdwGsJ0 sha512-dglECfjZnJHi/Cqb1HH4S9DOuU2SmKmdP39C7OJ5/mUZk+DyG3XuAe5Mijm3tRzEUdcxxptTC/v2ct/bXIOW6w==" + }, + { + "href": "lib/angularjs-slider/.bower.json", + "size": 923, + "integrity": "sha256-l2xxQ8PIijxzdhNqbtq3idsWJyBY3mgODkfC1LufFXM= sha384-hmG29/FWPO+JiHczXhBxm8NOJvN7EUA3coXYJ2CvddqdjC+5QLhOXgciuGxvTewD sha512-QsHvVGelP0fYhTZHL6bxg6QI/lZeFGY+Hv66ZCPU1bu6evmuvqdDPahcl8p2nYlYcigRJE3Dfi9YqReQiGq+Kw==" + }, + { + "href": "lib/angularjs-slider/CHANGELOG.md", + "size": 12598, + "integrity": "sha256-lPPLFep/Ig8rHkGY9dHJMDgRLqAue3tqw7AzQdwTK88= sha384-aozcQGTjj/ksJaBDYOpCA1/hZxFTWg0KPai4d9jTAXQory3E3NdKMBhV4nItYfw+ sha512-a6mAdBp0z9S8T5ErX0X8itWvhtAKVPKq97i22a3KO7U9er9SG8LvxSzfknWGMYbBWp5KUzu6FuWpwYSi0TAQ8A==" + }, + { + "href": "lib/angularjs-slider/CODE_OF_CONDUCT.md", + "size": 3214, + "integrity": "sha256-PejuiJcItJYc8/yjhSrOFEy5O9NaMgOvpNFnTzYlS5s= sha384-0C3bKRqzKRCeoIvBw6p7AgJEi4vdpbqBrS8ZCaWQra0jP+Y0LCZbAIRW/dcxkJtO sha512-tB6HxqzF9r5AZDARLTG/Mw3ldF3zhjEkpUAuC8spZnJl8MtHHvfeMmyO0rGIfrF0f5K4dBCPqe2051BrghgJFg==" + }, + { + "href": "lib/angularjs-slider/CONTRIBUTING.md", + "size": 1802, + "integrity": "sha256-kGmGehDmdBfDtdjmzD51bS+O4ZHXuW3y+1q5lcmaP/c= sha384-aks3Ftyka3UStPArFZz0E75l+BkLZudzBCR/KiufZPlc6zsMfu9IoEhxpgTez3Kx sha512-stubsWtKE4W9vcA9ekPIEpSKhYFxkMcpIB60RmzERQHbP8+cT4huPdvjNM776m1XzA7UAgxyIuUCYfIwv16Ctg==" + }, + { + "href": "lib/angularjs-slider/Gruntfile.js", + "size": 4813, + "integrity": "sha256-kP5Y+M5mYB1rnywdhhr8lBaEPauxtwl9rXsc7wjwbug= sha384-pb2iW5+ePeJKb9BGpu3Inf/zkeUGeAUOO4O4zTLWgkfKqot8VdW4xlshJ666gpBF sha512-q4KtXppqqM3WHNLdC103dxJPnmhRa8x0Mt2HJXaPSW1zI6S2/E1tVaB0bRmmmqgcfXBucmdYPxNYp0Elk9LHDA==" + }, + { + "href": "lib/angularjs-slider/LICENSE", + "size": 1097, + "integrity": "sha256-jTZviVVJLjEG4jTmrFO+gdlo+qfDYXYewyzJikGlM1U= sha384-lJPy+PKXl31oh1oMu1k/WMNSD+HyOEO4voMuf5r86Et5wgusfOixF+WXof/NRslJ sha512-IfigvM6k1LJh+DATcrqVARfpAy1bYe/faV/Pq2fLzNscdURwTTItxF5xOhvrniozkM55WtnYTDxA7NJ9HVg8Eg==" + }, + { + "href": "lib/angularjs-slider/README.md", + "size": 24605, + "integrity": "sha256-Hqc2YidbY/N0AaXwUVZt+1yDcrsiZoW+DbYuGFke/v0= sha384-mpQFMzgyQfDWs+op+GD4HRGdZKMsIGz0JrcwI0q9P2isHl1UT+qQNaZOaBOxWwEx sha512-J4EzvCr4NLviLrO7mjEpyIwTKZ48sFW4rlnhG/DHLow3DJcwXplFBkSUJFlHGrs1ZMh472A4dxUZMnnrWoMvpA==" + }, + { + "href": "lib/angularjs-slider/bower.json", + "size": 606, + "integrity": "sha256-vJ0mh1Yy1qkMyoF2p7hHDcD57PUGgzguhcDW9sdNAzI= sha384-yOqVCS2QKyfAg0qLuiLifLLFj3/8eBdSrDKkcyRHaxZYFNtANEr3XOz9bJ1/0jgf sha512-MhMreehel7wyRC8TLZyTnYzuCEvwfkvbKIe8Wi0PI5gMOCdtYyY2cjiU9CyuDkfc6XShC/wUXTcd5+7ruewCMQ==" + }, + { + "href": "lib/angularjs-slider/cypress.json", + "size": 3, + "integrity": "sha256-yj0WO6sFU4GCciYUBWjzvvfqrBh869doeOC2Pp5EI1Y= sha384-aa2pOjyGkOWdUDx78GrRC8Bk/k2+/qhHRXOGWfm1YaqwUgpoOJCIr2yCuLRVoEm7 sha512-yktt77itzAEAULyLG7j4CSxJKLig+6MhRqvPslbk2RZy+IyizfYhDnVOW4rF4j+wI4BszXSayLcB95ppHwPIeg==" + }, + { + "href": "lib/angularjs-slider/issue_template.md", + "size": 214, + "integrity": "sha256-9oiAiwXdUd/SkCNrS2eqKP4yXpGUHaqAZ2atH1vqINA= sha384-B3FMGxYW4wPeF4BHh4MKqLIe0e+8Of4Byb4kbyFq1vt/Eexvw0Dmlkh8a+SWf4wV sha512-2ath3Net+VdieTqRUKi/oFAwthrHQobm+dAW5OqwCt/aGLMnHnXJ2ZNkgB23siV/UIXJia8xICtEnIkkwdmkDQ==" + }, + { + "href": "lib/angularjs-slider/karma.conf.js", + "size": 1819, + "integrity": "sha256-F2rV1N1chMlVOfmOlL13DQG+Lm0Hwz+H8+JXmbq1Odo= sha384-G5sqir5r+WxlbQjfe+FkXDpA287lOPlmiB/czCdANsjZgDp+Qi5qLiEkn/vWlR3l sha512-ATxSWUQaPLyMXBEURU2j8oSIgbwg//uejGJWc/iUgWQFnCDCtzy6dyQdt2mKS583iJU/9LquzBVMNWM3s5Hc3Q==" + }, + { + "href": "lib/angularjs-slider/package.json", + "size": 2510, + "integrity": "sha256-1cBULbRY9/MpDSx3J4JrPyFJ25qy7mrx411CWxkHHy0= sha384-9+CWSVoe38Cse/wjLSK23dRD+sTvifnFlAsCwK0evHHFZE+x2V2F9jSWVssz91v4 sha512-aeTRaqTIi8UDOS+2Hrc2thNiOUFv8m4MWp7ovKpCqFmCYEQIhdftepel5AvEOV6Gq/ZLmQNK9IAWeFzi2/2NwA==" + }, + { + "href": "lib/angularjs-slider/rzslider.d.ts", + "size": 15816, + "integrity": "sha256-IXsxVQVc4p+WuFRm99semoz/vuP1rx738msJuxx/d2o= sha384-CIJP55y1/tb/n//2c1VKiSm0VZCIqZ8tV0FbdjiwZEoqnTohICTcDuwAn3vfKNC9 sha512-CcQk04Vku9nI03pIOpFr4G2Ey3phSmTKp4TeZGN9Uu9Dxs/ZSqktMiLuEVzylmm80/HygZBT/qr5wZEjCeR2gA==" + }, + { + "href": "lib/animate.css/.bower.json", + "size": 485, + "integrity": "sha256-L8zDHRb3WF0eY+hTHn7ta7hDPaXBYYNhLRiOEAKL+js= sha384-qIlvUl5uQ8jv+WnS55wdy+9x8N2zhFwigzjr2bWUyX+VDXo0ztnXP77Dhjx9yw+c sha512-/ywVd4VbuIM1PxPkcrfsDJpqJBnLmFFwLlgpNvWRMWoaxAWQtnVakqMwaagFgnNLHvc4p06ZFPJ6H2u+/bEGLg==" + }, + { + "href": "lib/animate.css/LICENSE", + "size": 1078, + "integrity": "sha256-b8y++OYXa/JkmA5aZvdEb5OgotwR9Xl4nam/LYI1Z4g= sha384-5YNeioBx8oEPHCGDM/GpZEJvRv87yfquKWI5JaBK80gVXrvqs8/7AOiVngwwJykz sha512-7zZo2DJMZVoO8wXYS4nIiWiem+uTccK1zB6Nrnr87VPKilo2qT/Vw2ZaQDDOhAL/vLWKEBZm1o1605ChEc2SRQ==" + }, + { + "href": "lib/animate.css/animate-config.json", + "size": 2275, + "integrity": "sha256-UljkcvoSTRDwtI7ETHsz773QPDN9HPW587XEP9eHX3I= sha384-3Hnb1sC/Meia5e0ePmsINi9jCmgb2EJnhAT0zn2Qo95TyDnsw4L5stX9/pdaATO3 sha512-JHwpH1XGrU9P9Woqy+HKlFj0zGy4INRNWA6FuUEaEAkK4lupSzN4grNxibQicb1n5m+Dc1Yc9ZsNezfS+I28ng==" + }, + { + "href": "lib/animate.css/animate.css", + "size": 77907, + "integrity": "sha256-a2tobsqlbgLsWs7ZVUGgP5IvWZsx8bTNQpzsqCSm5mk= sha384-XZ2Bzj0cCb470mg4xfD3Huv/bexV/oe5SYudHGCukgajpVGLqlWlaAcXk/zqi6X3 sha512-kHUKImNBR9mcwQ1u4RILtsiJmC6u539bgkRapfGrbwXbkPxfapkzAXvdGnrTu3blGNXHPCX0klrlE7zAZhr+jA==" + }, + { + "href": "lib/animate.css/animate.min.css", + "size": 58129, + "integrity": "sha256-PHcOkPmOshsMBC+vtJdVr5Mwb7r0LkSVJPlPrp/IMpU= sha384-7/Tl0k65OTvDSvtuq7aPR7aa0aCz7ZKqHsbMRLxhzueldW+9MZpCe9LB1c5UBuNS sha512-doJrC/ocU8VGVRx3O9981+2aYUn3fuWVWvqLi1U+tA2MWVzsw+NVKq1PrENF03M+TYBP92PnYUlXFH1ZW0FpLw==" + }, + { + "href": "lib/animate.css/bower.json", + "size": 119, + "integrity": "sha256-3vd8fGRhuBlCBpx/yCkjJs4+j8zLGZUk617vh/4OVYU= sha384-5WE4/30ofkcdIoG5ptJ//XoNLf8db97fU6ai7cgJvne7dkqWdNJ+58E8w52HrSXM sha512-XUNOZP3nkftfiGQh2KWOaYCQ89lKu7UpiKY22h09ZbHWTQgO7KsXMpEuxqwToINQ5VunFCaWmW1C52QpDtlT4Q==" + }, + { + "href": "lib/animate.css/gulpfile.js", + "size": 2595, + "integrity": "sha256-+1TZq2saBasXPiVxIfoq/CnR4ypXEcpMPi05YtsQzIQ= sha384-hXwcEF9Pwb5i/5Z9XVDT+IW7G9opYmKTP4WBLSNo8mSdawCnzakDKylU4SZGUXZx sha512-yG67DkLzmvSW+ay9AsNapZMK64bNLoyLeRGg78ismRTHYcjp2AHFsBcKIiPt9QtRqMcCmyvPdoCGOG/mHkYvyA==" + }, + { + "href": "lib/animate.css/package.json", + "size": 1270, + "integrity": "sha256-OOoQxYYUy6ejRjfA3o2TzZlGZoLIWi/mPnW1kPZLEEQ= sha384-sUtxDlWxavxe7Ard6v1CaIbOwmS73RJqlCSDe1VARRmST0HG1m4bTQTjbSzQkl5N sha512-7ASVEzIxM54/dYRkk1I8u920V5PKVoE5bEEOWfgrLji/etfEOYHA0qMAWJx8oVau5WzRt7n484VwImj/62uYmA==" + }, + { + "href": "lib/bottleneck/.bower.json", + "size": 804, + "integrity": "sha256-voOotd3rvSTv7wgo1R7/0QeC1acydf5p6hWPKFNiTUw= sha384-3TwrmzIbN4fUNFQONN6U3a6WDvIl3Kwlu5FHbu9Kau5X+M5S/ml2PiNavlayew2q sha512-uxpbgXwJflBjOKRTrPB23ovoTatPIZNnR+N4xPUtNxWd+9JnzUk2XRHvgr2YmD7ivmfUqF+zmJB7xiv7X6rrlw==" + }, + { + "href": "lib/bottleneck/LICENSE", + "size": 1080, + "integrity": "sha256-hKCO2xbMmuFhwx52yeWTcC89kZIGGrxnITmOAie9tec= sha384-bfPjqkJbu0JSdPTTXJeqrtk+wR1VSLxVzy2x7fb5++FQVcpUDdligsoJh7TiBVlW sha512-GO6IgtO7nsiigk930exlu5aAHhbqa2hHVc/nY5bspFVHG21JbYSmbGyruX3p4uTWlTZzvmd4vr2Ldl2gk1iL4g==" + }, + { + "href": "lib/bottleneck/README.md", + "size": 43693, + "integrity": "sha256-ZciSvccizsVt8B/yWM+5uX2Z0LRx3A8MxSIpPo2eJRc= sha384-agcdbf/Qbgip5hwjMsekNTBdy5rN3mJppXav3kE3S1HqR7CCdupDtGQQakSoPTpA sha512-a6nWeRjHvXe2w/X1DESAftlsZNKecrVZ8t9relTJkK8kcSISvAPQ0T8exjjbqtnfg5j6mJL0E0Z9GBd4q92kZQ==" + }, + { + "href": "lib/bottleneck/bottleneck.d.ts", + "size": 36317, + "integrity": "sha256-X4CP8r8ty9V8wXB07h2l2VhwS+lCsKesEmquSapFPBQ= sha384-qrGCKS8fu1xyZq9cSRG5OwjS/JQvooloeMxPBaCeOqeYyUqDUY8G+v9qN1V+jL2t sha512-EHV3LmawtuudqwECePPkZXJvH97Yi1IZk3fqp46iASWW4YOIWIMOWBBAYz4ETh5ND0xzxTzOatl/R6ahjWrXYw==" + }, + { + "href": "lib/bottleneck/bottleneck.d.ts.ejs", + "size": 25750, + "integrity": "sha256-rp7nR0T8xk4Pav+o6zyCqrQuG2WsXqVdGf5Q0P6CHdI= sha384-BhU5w3oi/xpOtBQVmPulUefl11m4sR8ZpuRW6/wJOQnCjyXpU6dA2HeaXlt3WdOh sha512-R8mt/4cG/p3HQCUL36EMTYdLCIljK1r9sFTHI6247hPxiVBluDXzkOKB5eMmz91yM1VM7hSIj1VfrejLQdjR+w==" + }, + { + "href": "lib/bottleneck/bower.json", + "size": 537, + "integrity": "sha256-jTbID2Agtj7j7LgINy2BcObSAiz+ZHTaww98BeM8qps= sha384-VXs43QWFcYl1NwWGzycROCuXEZh2wtJrciikjXS6qE/CXprGy/upwql0I6bZTABq sha512-BnleIIsW22844Kw1fGqQHcoJ7sky1AhZNcRR5izcsPnLLXmQyAEOfWwaeJcVba1dZknJgEHh/8Y60uxNE8oAoQ==" + }, + { + "href": "lib/bottleneck/es5.js", + "size": 172002, + "integrity": "sha256-tcapltt4Vd+lSsrsoxvgQZXcNzNZOcafl5fWr/PdMG0= sha384-Cs3HgHOxUhu7SIMhF9BawzcL0a8ArNXzibDhjkD2ETbAsbTj41OZwfrNgWgxWBSw sha512-HTJ9pIc2TelVApnipdJRWsLdBcfllO2WO1tmjFFA0MH+1AqhJe/XvwIL0Uen+Qn976ZAZ9yb+IOYRcEKkDrT7Q==" + }, + { + "href": "lib/bottleneck/light.js", + "size": 43167, + "integrity": "sha256-eZsk2rIgwVDrHJ4XNRjqm1XyfWlGtQDqhUwiLIu0pSQ= sha384-YnlFONGfv9a8FZjnuL3B/kiv+FydnJw3jOKzDlBT69NBu31Xt5TADujVbg0ZHprm sha512-vZJ0YFjS2Cm0TAQQ1HIrLeSJ+2hsHor/s/881v+UOWdQhgYdYxZo2Nkjq/bdimTN0Q1j0YPak7+TlBPROmM4eA==" + }, + { + "href": "lib/bottleneck/package-lock.json", + "size": 149894, + "integrity": "sha256-zIHwdR8RX4/Vp+WztjoYQ/9PKRqUTRgAJTUcifIW5ZU= sha384-pvvUs19r+JePZQzUbMg1U8073KTXyUIRnAyorscOU86owqtQSJKj2enog5p9gOK/ sha512-xw2osM78f4/Na3/Uey++vh+XWaZMl0650p+1c99WIqm+SLGuJPZU5mo3YFiJw4GaCdYgphTVZ12x6NP2s19zqQ==" + }, + { + "href": "lib/bottleneck/package.json", + "size": 1315, + "integrity": "sha256-nnPv4JT8eALOIojx40Lp8owv518BcAKpajWkeOsd9Nk= sha384-KlQ2RQC0GLBkgXQMtZGt1RxKMZ+FxrF3onnwvxKxb7fVu2fusimBcPbHsb2QSVfz sha512-CRIIJzhl7qq34AsiUxmJuLRZDsZhUi1UV4EnALYU8oBoWsA25F3q8PvFd+86vzmk7uqCONGpu2GrovrHnQWA6A==" + }, + { + "href": "lib/bottleneck/rollup.config.es5.js", + "size": 997, + "integrity": "sha256-85vwpDEiEfgPpz1lkwLdQAvwSNBC9AVl0JcGaCLV8tM= sha384-PruHvX+whB+KXVHMtncm3+Kzn6V85aLyUXD5nVZyoz0QjW/fJDxzIZ7+NDbc7IHr sha512-24AOTthBUL30JTPL3ls0b1uehfhQ0P7lrY/J6E5RUDcf0CtqWrNqi5FaGmbiUnPtDE9K0L+QQi5kflqfVnki8Q==" + }, + { + "href": "lib/bottleneck/rollup.config.light.js", + "size": 1088, + "integrity": "sha256-wPcdjTtmQt3no5+c8UBjMK67cui7zvuDDC7FywQABMw= sha384-KabqAAkm6tEdexXFsVP/DWXtwhaay4bkIsJzPsGq6WgO92/LseVY1bywNimkqP3p sha512-Jp0QLOGKa6wWSgGcyCJ+cNcYmprPAvShn92117hDrSGU8k9BZg+hVEHrLTWevit1qVZQ8SFDkTGkn9NP0l/Dig==" + }, + { + "href": "lib/bottleneck/test.ts", + "size": 7913, + "integrity": "sha256-015hLxAWxAp8HbZdnYsLQ6wZb6MF6BUmaoOcPtKLmcY= sha384-EvOm/0AXlKF37NQklJ3Oo+zHCwYjhCSxa+LQJx4dCaOySs1WDq8/ynvmOUGYhHuF sha512-X8BFsFcFivjSoAws49CUqeZP5KyE5/6SPAXavWM4YOgF5hIVHG49tPc/bTMdSaO9jEJOUx9mUeA4h8UP6gQB9Q==" + }, + { + "href": "lib/d3/.bower.json", + "size": 502, + "integrity": "sha256-JyTbdctK50Zcw4KSe6Lro05TQO9aaG1a5KhNF6E0wrM= sha384-Hj3jQHaGUi1CLSHp8IQ+qZfJpBjgdeCRST64RmCDLP7CrrVnm2OF1y891QJQOT+T sha512-73Air3Cd70/CuMi5qXhCruYzToK3rICNOb67rooMRWy/sn+a3SSs+DBiVGGJq7BgW7Pn1dkZsIgPwBtrHKWkPQ==" + }, + { + "href": "lib/d3/LICENSE", + "size": 1429, + "integrity": "sha256-5Hlr0f3AngajaDlXoXfVmziuxBQ9+BstJUckOPV2NII= sha384-6Q64qs5tmKfCxhaoKbvHkm8RPxsjn5IO8l3lHH5mmfE007Flfc70XEGMd3v0kZf2 sha512-JxgJjYhRpn9NdUp2k+JIafG9Traj62cfuF2D54ragztcZkk5GqXci8jmn3FD9Tsf/sJSz5IDokBqg89MLMmt9Q==" + }, + { + "href": "lib/d3/README.md", + "size": 949, + "integrity": "sha256-lkR4Frg0/jHwrLOR+lU35Eajy8+AQFGqKGWrgf/+hBA= sha384-i6WZotihLpf57RID+jhzkkNj/7V8R0MJ/ztwLhBImdywvL2jH/iY2MTOo4FreQVu sha512-yn/kBODRZ5WtzuQC7rkCgPH09Tl17MoIccZwFlgpH8PqC95hpd900AUsXZOvkRGMYEV6oAmwDkzLn/KToLKSCg==" + }, + { + "href": "lib/d3/bower.json", + "size": 156, + "integrity": "sha256-QN0rYQrLQ+7IHTjifDfla6ciFhSuM/WqhOjADMguDfg= sha384-qnldJ+vkCAJYvtouNh7AAcsYrVqqDimiSSvFapkANS/nfQcMvMZ79lKJz7BS69VN sha512-YUtxvpxNaru1VePFT7yK6bg5nYdJ8UC/BYmaFtEYNk59TCzH2l4t7pWymnd5G44EBljTuCpgDwkvi+1eYkzwjQ==" + }, + { + "href": "lib/d3/d3.js", + "size": 337945, + "integrity": "sha256-gfQwA6PlkZsLqWu4bU4hXPrbTqzixm0B5MdvBLI+Oas= sha384-DYPaDteZpWU4XS8q5a8eeBRmWHK3zisWfLJxpF2AKel3DnhPsQTeZdz1uEDkuDOV sha512-ilnmzGTqmx3gXTbd1eLUf6LTgAFEULf1d1Pf18LR3o+IQjt1j+rtlOHX1upJUSdWlganBwNe0E7U4U5iWH+uYw==" + }, + { + "href": "lib/d3/d3.min.js", + "size": 151725, + "integrity": "sha256-dsOXGNHAo/syFnazt+KTBsCQeRmlcW1XKL0bCK4Baec= sha384-N8EP0Yml0jN7e0DcXlZ6rt+iqKU9Ck6f1ZQ+j2puxatnBq4k9E8Q6vqBcY34LNbn sha512-oJp0DdQuQQrRsKVly+Ww6fAN1GwJN7d1bi8UubpEbzDUh84WrJ2CFPBnT4LqBCcfqTcHR5OGXFFhaPe3g1/bzQ==" + }, + { + "href": "lib/ionic/.bower.json", + "size": 1041, + "integrity": "sha256-EAP42ndoEsL4mega4PEzXdhBcZVVrhoh5q0S70eCWMs= sha384-rubtZiSKfmUFrIyeBaju3D5wXPjwIlbAbfoOUyfY1T2cc/tp/tuAp8w7QySafmAz sha512-FrPLUFlvUKv0D8agBYdBcIOFoMEeduQUhNjXdQfBubZ2XaFnVzTZhN6ea3dtN5nc5sP+KR9XDgCTBSZpvykjjg==" + }, + { + "href": "lib/ionic/README.md", + "size": 437, + "integrity": "sha256-sqjvj/DcQ5HEQvT+pUXasT7YJ+UhKgFHpwNv19LhLa4= sha384-njQo7Pt8dtRwCpvpjAYjONy8cxNDmOA3aKxinkVEl/Q16OQl2NxDWKFtUZSulu46 sha512-qb4gz5wuQ8ejU3yLwTI89H4r4/Rp+wIFfePH8xdMwLe8k4U6yTQMd4Fn7KTSo+6USH/hr8wKkJA7QsRJ0/Ljbg==" + }, + { + "href": "lib/ionic/bower.json", + "size": 767, + "integrity": "sha256-jM97CyYlwM6DTrF2Oa1PCyHG/o+ZFwGqhWTtaeNU02Y= sha384-uWmwPUPzn4Azxa8X2OGhpaesDUUVMcCVIPKjiZDBOK5KNn5uOh2dE5TKwV90Vmjp sha512-Xrh9+oMM7kAAouIhT08VVlpEFm98lDYWPU0zGNCdWWMjgnwhLjOAmuThGYaDtao8nYmq9LzoCd0ohI+cdpSVlw==" + }, + { + "href": "lib/ionic-toast/.bower.json", + "size": 908, + "integrity": "sha256-jK58JHvQcBz8aKtxxRq8puNPRUlVWrHAgZq8VFORoCg= sha384-bWFKm7hRg5lx4q6ExgO2xCRXZ2ocHPnCs6bFHe2Mbt97MLZZE2+Fznhw75kB756Z sha512-/gu5d2uajLmKP4OoaaSLkBR9E30Klcl0QB0qegu23r0XDZmo6mESFMudSstJr3+UFMHfIBBb/r2l2R0emKFLGg==" + }, + { + "href": "lib/ionic-toast/LICENSE.md", + "size": 1084, + "integrity": "sha256-RhmkdVkeA7JaFMTSZNPeFdXTqEEjqZRSitmrZA5rocA= sha384-paYW8q+64r7QhnpfXWrHsFwqL8cDULemDwX9jTz5e9BgxliP7oVaSw22Z7YBOlDW sha512-IL7e6rkNn+6G1kaKasCvjkSyXtnSYvCh2+LfMaqMn5hFNk/u8qhkbjHApoZ6Tswj1ujKt8Bav3D5ZVDOj4eQaA==" + }, + { + "href": "lib/ionic-toast/README.md", + "size": 4084, + "integrity": "sha256-5CXuesLX9F3Ne2UfA25XN14TAq2kh1vagvlF/ipt/Dk= sha384-FRQ27vqXjEedVMnHD7vFr9rmJ599XznhJXVETG2Yo84jccy1jWaI1eXydET3arLi sha512-hC+pU1LZ7n9Y1bj5y5Mbw1sdZir/PgEdn5BT6JghComB/pEE8Di8/7W0dkjhmY4vzqdr1dz/OfJLez72lk6mhw==" + }, + { + "href": "lib/ionic-toast/bower.json", + "size": 633, + "integrity": "sha256-aOsfnM/bl1R/TRrLEGa5ydFQfCulKkRb/tUHaCeZbEk= sha384-eY7Ttoqx5v7GdFnuVHLdiSQTt1SfyfN9zpJ0c/+fMlzElPUdCWhvKsxAMPydhh8N sha512-iDgY6SKFZ/ZF5esu7ThbZg8d7KU/L89s0k879C5lDN+xST7IzfqtDKTZsRnxSJYE17aR4NzUA0zBt/UyfObzng==" + }, + { + "href": "lib/ionic-toast/gulpfile.js", + "size": 849, + "integrity": "sha256-+9C2n87I7Z2IqndKRb5wFg4krTSo6EAgqU5db22ijos= sha384-nCOE2o9wv5MxE9e9Y0Hbd5A2eYH32aD99CEUZujr3BM9Q90sFz8gRk+YgYYJ9t64 sha512-RMrReVc+x4NTOTOXAHAUE0m4M1VcElRNTwMgmTh5CikvHZinLQCFFAlDynwrEgAngc0+oVj6JeJUVy3ZATgacA==" + }, + { + "href": "lib/ionic-toast/package.json", + "size": 532, + "integrity": "sha256-/k2iQqYwEh6Pj+cKUXOwn7yJmTD5dNpHotTjZyZ5Y9w= sha384-qrrqIdBqK6/Wus9atZ6Mh7SRqRTZF5hjfLbQc5NOzDDNoAdBIGflCvu4s9Yxc3xI sha512-WrwDntmjsVJyOUCrhClKq9Cgwb7UhKjrOhOUySLDswb05sE0eFH/eMWhHcHFwvPU5F19vILNGyY2QRqDt1sDjQ==" + }, + { + "href": "lib/jquery/.bower.json", + "size": 526, + "integrity": "sha256-AMq24Rhzb4zSSf7ELDNgb45y0RW5kG0/n9cI1R/9Q14= sha384-3hDlytKBqRjeqWvgV7j0yyED8354J/8vWWzTX9YmXTnNqC0PM60TjKcvP2cTTbXK sha512-5e5jQzdKoLFlwQzOo9m1noRUQaM3PHRBnnkGxmls4DcCW8LJVIdG4g+vXsq7izO5NpLPbKPIwvV2ovWgBRKyxw==" + }, + { + "href": "lib/jquery/AUTHORS.txt", + "size": 12448, + "integrity": "sha256-+e+lrsW5i7sKvDmE0SHWJLRgrTlCM8nIiMrhY3p3dQY= sha384-KUDtv4ahKfBphE3PMszsdvbv1PDLwmpMQHKjAYnwUmR3QRT3hyCGz/0zKIfurpd5 sha512-KOecdL0g6vVFJ7uM6mKNJhYt4hTpy0TXkwaOSa2KwKlAADyPWgUPKXPHv9+CSQ1vSS5kAjKnIumGDMAukoD+ug==" + }, + { + "href": "lib/jquery/LICENSE.txt", + "size": 1097, + "integrity": "sha256-1Nuevm8p9RaOrEWtcT8FViOsXQ3NW6ktoj1lCuASAg0= sha384-iQ68UgHWhwvcjhIRVPevtz2dusU72A8a5u09CcJAwZbmg2g7kHfAeAE13VDwMXEW sha512-I//WQZK/IcsrwOx5Z5e2wHu5wBE6DS0Z9u8OX1Tp4AQuMICytxU4jfKhjFRTO7gyyS6bmB1zp+vC8PsvIR49GA==" + }, + { + "href": "lib/jquery/README.md", + "size": 1996, + "integrity": "sha256-knN+GRLbaoFC6zaIuUwCByQel3M8qn/kkU5yvOAeLNk= sha384-Jd93EB9R63/gr50RK7w3h1cidAcloj7PLdc+binOZz3n21F8/OqYif3aMq+oP8eP sha512-BzkxheVLik68IBHfLauKKvcar4wRcPCcb0p/K+4ireVSUKRVrdWEz+zRT4K1aVJqbaDq8YyAY6pVV1/mk+ZR9g==" + }, + { + "href": "lib/jquery/bower.json", + "size": 190, + "integrity": "sha256-gOOJjukzNHufmoTD2V03ez88xkQj+aVN99PG1FpqrVo= sha384-WYYFFSATtCOYBpLomONCs2zfvuhwa2Gk6fgP3tVwxFVLh2tvPxM0T3ElOATG7Qlz sha512-eoEuRZaT5LZJhG5NM9MlfOvi0YX2rdaQOmv7ZdiBDHRonN0CRYtmceGdp1hyyOhHiNV8/xJl9i5ZWZYaV/2OIg==" + }, + { + "href": "lib/leaflet/.bower.json", + "size": 784, + "integrity": "sha256-7ccJ65Lx5NxebbRjzl2bkvWVjkJf+I0efzEh4Ae7iZU= sha384-OgbpcLroVwM+Bq6C6jjqWGlUn1et0XPNAQKNr0cR4K9HT+k6QznZaQjuw7S3Fr12 sha512-NgxbULfvkQhfKk7jRnLJriM5s82pO5Lg3HhPYwkcmAFUYhphV0tQrDFbutcNsrXTBvsMveGngZn39z2h8UDuaA==" + }, + { + "href": "lib/leaflet/CHANGELOG.md", + "size": 109287, + "integrity": "sha256-w269qX3BgGFalijwFsLWO61PRG8ixzeIHiKY1SP7TQs= sha384-JeCjeXrZmjvc/WFCXs9I4EvFJ+KuszAP0yETUnRaUp0x4Hl3Iizlteyqrct+3Edu sha512-GelVOZHk7CsZ9miXnSpLt5jPWMGcxkOpgiUHyo105Es/vfBqxB42lxG4ruL5KyD8kasXSHlHr+PGu5mhU5MoRA==" + }, + { + "href": "lib/leaflet/CONTRIBUTING.md", + "size": 7279, + "integrity": "sha256-f21gyHKYUYx3nwoql0MnPthFQE5bnjxNoGnsYvBWBaY= sha384-JlLOr/zcipyMZZXdIjf/k0/GrhU5VGrtILWC7Kidhh2Pq4jDJv7eyyS440zFEmEs sha512-bSJm9Mey2NgOVJHdb0KGHZ1vC04MllNSVwYm+A70ZqChW72suRWXlo3B5oYDhC8Glaj8kwyEcaq256mckqI9og==" + }, + { + "href": "lib/leaflet/Jakefile.js", + "size": 1300, + "integrity": "sha256-uJF2MORk8fvvHgAZmHzVEe1FzHAQFDRGMoRSDNeNMM4= sha384-C1zOqbe7Pv8Tz/AlXQq56RXMztASU5fGJBYzm+Z21RdN7MTOUI9XjnDcN5gcr7eM sha512-BEpI0HVuOAlAuapU/qmNGmxUAqspXIMcrvEjqsCcP+JzWRFY9AnLU7/s6yAPgdSBapfui5r24l4Y53eLUXfGKA==" + }, + { + "href": "lib/leaflet/LICENSE", + "size": 1384, + "integrity": "sha256-bx3n7+JeVZ4qwySqvtfuoN8g2jgotU11h3p24MhxVJI= sha384-h9BwPqxszD28MF0dWWvq3WycfobrQyhhuG+w+fCQGUiNkbiQMzSt4PyyzFtv1ykU sha512-HkDkLLqzNZuahm1hOh9PbA6/7yUPR6lSEaMilPWz9NQDgBXry+Gqg9DD89OKlmvB3u17PCp8xu5dlorOVyk0hA==" + }, + { + "href": "lib/leaflet/PLUGIN-GUIDE.md", + "size": 4522, + "integrity": "sha256-ERW2iFNtFodWzZwwJgH9/uUCRQA/cHV7qn95gq4W1pc= sha384-q1znIL2Q4+y1tCIGe96DQuC2nF+q/ZYt+xWLFZVm8yIUWBtK2tQFJeb5SqL33GZt sha512-5PselJvkmPLP0QBLdWOQL3vSHbn627j2ieoi3uITji9FIuGeTBL1TVzwmacAx0pY8RAG+Agt9Nn/xWg8ase2jQ==" + }, + { + "href": "lib/leaflet/README.md", + "size": 2068, + "integrity": "sha256-RdxCl7JnrDHJlZ7Wik5fIOcbeQdHVgySO8715BbyIkk= sha384-iapbkFfSzjgpta548+9ATQpoxshNlx6Gy6THOCcNV5H/sjDWJanBs0m9qSqoScE4 sha512-rUjkbqjx1/q3Xsm1ZylXxAlUJOUgRCdmdE5V+axWC2g1zgAxpZ9h2KdvDlut+StChhNqE3JykyulIVZYZ22Asw==" + }, + { + "href": "lib/leaflet/bower.json", + "size": 475, + "integrity": "sha256-2p15qtb5aqrPdjBd1L3JKnDWtnIjR49WcfB2d41+NLI= sha384-8UaxAJ8cYV++Lrs0jwIKCAI1xDRZitrdxc26vMb0p2JvpzNfnEfQ74fc9GyovSrx sha512-z4fRB6NVZRDiBfOHfPpKk6qcrj7hThfyRfdSB8gDgR9L0leSbUjgbTueCZuG2nxSI18C09doeAIxyJMqtXXuag==" + }, + { + "href": "lib/leaflet/component.json", + "size": 457, + "integrity": "sha256-v/i+iIc54ZKsH3EcWSmNpZLU9ZGJ7jRjTI3TtUy94Gc= sha384-L4igPO0ctFDt/xeR7GIieunioyiF5G1OuU5sSoZmtJMr+n/rJASjRFKv8eN3/lan sha512-/a7hfW9D2u1w4rQcLq5OIDtcfQb3jQsZN5S4S7iwSrftWXLAOzpRyji2JGiniOZnhl30V3cveU8LBjjW2DDJYA==" + }, + { + "href": "lib/leaflet/package.json", + "size": 760, + "integrity": "sha256-abVVEXHtJpPScNzxkkGBerLHCeSrLHQaN+jaua5WdfY= sha384-WGurGUufpCXvMMIdtEBX1Qt9pYa5mjakXHRFgh35XM03Ib8QBbEe4svmGOCb1yXi sha512-l9+I9P09IxuEUXvd4vN+yN5xGHBlUoQA6aK8aJtc4u01YziHZHcTlpdvY25BGRg7++fabc5QDMrtEFGw/+6OhA==" + }, + { + "href": "lib/leaflet-plugins/.bower.json", + "size": 386, + "integrity": "sha256-ZdpK6/3UL72HnWxZpYDilxHeGZfmxMgGOPXExhwWD7w= sha384-rKEYl+/m++10hoK8YDluWTKVx8q2ZyWkWqgdQwB0/7AWDABHptJAUvZMjmxxF1Zj sha512-KhqbS1G5wD08jVSjejMaJZUAQkfxhq+3L89vDFx11+YLuFhu6KUn/Jrr/2+8rNAGmWSktIXsmqirqcqNrg+OVQ==" + }, + { + "href": "lib/leaflet-plugins/.eslintrc", + "size": 717, + "integrity": "sha256-kWS+ktQzEUN8u+gk5GCPXZkTzIrWJKlo1wql68Pt/8s= sha384-OlCcZtN4hs5bLJSg43p3xOvQnjP/zV438Qm8zlN4OtllBZ8KzYkvIg7qLMdGiV3f sha512-NhMJr3q5cxli4gLIGKPvhpAOpU/2Nkm2I6I6nrAO16TBewhozylolAP0QYRdOvw+ZkzMevN7fximWXJzr10QyA==" + }, + { + "href": "lib/leaflet-plugins/.mversionrc", + "size": 136, + "integrity": "sha256-h3ygP7qcHzhcbpkxDidUvSrV0zQEcEPE1Ihnyr2C+dU= sha384-4jPNX1b/zOvhzK0AZQrgg/DvjzVJ3hiWArRf2Php7ouP51QCvSWPTrnMYohrIZWb sha512-awc6EENnGV+YTOzyJi3Gl/G0QqHQ2oaBLqejs1Ucf9FZFEkBXnqBuIlfvcOinrbLFiFdg+NZVf//4fFxEzSdMg==" + }, + { + "href": "lib/leaflet-plugins/LICENSE", + "size": 1096, + "integrity": "sha256-G2N3kFgWZCbX1UV+7RP/WTqnpE/Ohe0qgSNprmZj6Z4= sha384-zRiYaB4WCKcTcKH6f9OAM9gDBSKefd7on2IEo1qqGKrto5AcwGARzN/ORgGywEUk sha512-pTrNjGrJKyi7LoUUl/y9LgSMdfqber6JBrupWeznuZLjflWSKEtb4S7reALOYEUljkjhFPMUZ+QAJPLyL+hPfQ==" + }, + { + "href": "lib/leaflet-plugins/README.md", + "size": 1108, + "integrity": "sha256-tg6FedlZdtA5wyykRRJF6SOUnJem0i755GRxI4owXxE= sha384-0o5EDe/xjcOICpE2B6/DID0gbegB6TJFKJwkQbCipdI5517ILRe069R+jmEV/akk sha512-o6lqbaLBczm9OGBMmgxHyYbT354YNbUZUt8akiXtgAJ5eFXFEs/+0Z7zB937g/OF8DGOZFjUTEsP6rChRPoV8Q==" + }, + { + "href": "lib/leaflet-plugins/package.json", + "size": 711, + "integrity": "sha256-5rhKnjMD78V0cDAcMtspMqhDtrM53yGc5BUQIvhWGUY= sha384-StOLKV3/s6VUBbN7yIJVWl8vsGuEihfpL8yBAzM40U9Qeil0uEQnTigBgYkz2roz sha512-6cusU6ArP1con/1s0M4/j524589JEVOE4MsYxKuT9u3QsR0yZkN10dBUzBU++Y2LnWBF3kLs/DVXgRQIKC7Rmg==" + }, + { + "href": "lib/messageformat/.bower.json", + "size": 1053, + "integrity": "sha256-C0omQnJQGtBrkHvfOj3xoFq13oth+BPC2u022TYI6HA= sha384-DB6osp6yiTuDEVIfzFFXZqWb+Jr8fgTSmIw8vugwCIaIwFRg0ETqlMVsXXoKErCT sha512-tJTw+uRA1+BJYa+LcgwuAn0vddZWxDGz5ZjjCzeMOAKDrMABrnrEVU38JCSdDdNR7YiW1CsbV/U3odlNdSaa9g==" + }, + { + "href": "lib/messageformat/LICENSE", + "size": 1086, + "integrity": "sha256-zV/P48cMhk5tXbzS5sWiMiYRxgFeRhu8NSbAAYL/mqI= sha384-KQZXBF8J+U+qm9RHRSeGrgAExJg2wJc6rRxAwlgL4ejKepsFI5CAxmwFlUrtFP8X sha512-YFu9AHshAE+RxRxu8c7eLj3IWBQjAT50i9Giopzgl1cWzVSzKz/ohh2I6gfGLSJPbYpreeE18NKu9O/9/EOgIQ==" + }, + { + "href": "lib/messageformat/README.md", + "size": 4871, + "integrity": "sha256-R+p0QbQBwlpvv9GBRfICF/WKqc5cjbGTwp35o4NfSOk= sha384-AQKQFSNzCd2WK2gsDU0t+Two2lBNCdkrtIpURm4/cD5lgZHfdAXSypFEuMP6wRNW sha512-Yb/wEUfkvTE0wDjXSFv2HCSUMeXENYkWt6VjcE3pWChjcJkyMGjAkk8CeqxcXOmQ1+wEsGzTWeHlaM1T+E55zg==" + }, + { + "href": "lib/messageformat/bower.json", + "size": 702, + "integrity": "sha256-wf6qvZ3lvHwQrwtACIshcq7kR/6Ij0dnrJjqz7p59gs= sha384-cWbX2yQVeW1mx01PQw9furIURbEwi9vrjCT74RcRKgdMVmjjCC86/TKIeWRQLBpL sha512-zuF8tdt69JzDFyPTRm1iKAqLx12pCsDGWnu6xo5sVDub8jjPQcITPjdi9zjJ/FudlPf7tdGhyY0EqYmfjM3DrQ==" + }, + { + "href": "lib/messageformat/messageformat.js", + "size": 136494, + "integrity": "sha256-Pduik/QNNW3tNFm+zvlwl36IP2TnuMKo2ZJCwgsTPMQ= sha384-RhYIoBS/gBuQy3OKW0hYOnDXpN7AH7pfVqCPIzFeY4UzXBE8XvQdfWxGDmH6rqGA sha512-iDL/HxTNZrAcQQZbNFNSB1XzC228aKFrcOTDGig1lSZm5TMKkQDPqWTfmFU1RFD/9W41BKwdQ9Bkwj54kpraLQ==" + }, + { + "href": "lib/messageformat/messageformat.min.js", + "size": 49280, + "integrity": "sha256-lrkP+lkSAIJ0OJUm5o5/m6mx26Te9mcOhoUjWdup51c= sha384-/eeAdnXUZeuRg+Iq5ZnZDT+GJNKn3qLr7ySqYZJIxWj5iyFf5PMy9GrmjRCkDi9n sha512-diTuq0l13sK31op7ubtACoEOwrhGBYAMStrMWLVBis2pd8JsCXNwddP15q9I8xQOicb2piPVjTx2QDV04QMTlQ==" + }, + { + "href": "lib/moment/.bower.json", + "size": 771, + "integrity": "sha256-TE4ERRva7NMt5I2Ut7oT21ZZq08MPIjS9S3WGZyh+zg= sha384-fti7FZ9K93OeanTv8csVyIrYNXWG6rNYQcoaLc5YoK1IjH1jHaKzd5Jp/XjINC4o sha512-whrQBDsogBC16TP0LR2tgFS8NKvsPOzf0qR9k6HP2yIDPu/vEBRvEF2yaNgxCr03RKy0uWIPk7CLAxEwJjFwMQ==" + }, + { + "href": "lib/moment/CHANGELOG.md", + "size": 45589, + "integrity": "sha256-SysiaFOMfBH//XD5PKvauvLnRe1o56h2j7MEvIfihe8= sha384-/yuCpHJJ7hZeeXvFqDrrISygeH5Z0hAXHrYjePtj73kSObux8AH/2QcCj9oFk/E6 sha512-c1zcLaeBzCy3atjI4Yn2hdkQ5d5TutNlT/2ENrK+b3aBND52z2o5/I8ZoY33vLaRRToRjvXFREehNMq2JEXs+w==" + }, + { + "href": "lib/moment/FAQ.md", + "size": 945, + "integrity": "sha256-BoCdHe9pMSyI0i4raqipT4LDJMg8FFg53GI8KPFZZ7Y= sha384-65il4DbymDWFGliQ3Hni/UmVFvLV9uRLg17pNK716mpUiMvuDDLa32ueSTtomWXk sha512-dWrUY2JKbduS37OVLGSqkmxegdA83UEHOW4ORNdXGAzA8oLK/GOK3aqEKS7CSblIwY9OCNFiwb5N3Av6Q2OKsg==" + }, + { + "href": "lib/moment/LICENSE", + "size": 1075, + "integrity": "sha256-jzjzILv164TAjghnb37h0iBOvleX9qCQ0HcynPIS/KM= sha384-9UPZt0Y63fPDtuHijKK2jppdE4TzeQJn4XqtzHmqwT0wk4ivIKDq2nHjPdbdU2tw sha512-XwmnFumCZHSaTanPvs0npbvWMBbG865pSsLLRZtjWQxyLcQV16gdpEhjFy05K6ynGON4kjnfBCJiorIkly+9yw==" + }, + { + "href": "lib/moment/README.md", + "size": 2468, + "integrity": "sha256-Q217/8VkheeilWdfVB3e4eQz5D7mXvEFiKHNWjiQA1Y= sha384-xxsy61dcF0Z4euG3j1MFrmEE7wAu6rRy9gXOTAP1bqA4FsJAaI5asBYa+Gp+0pQx sha512-jPdbsAofd/jgSPB9wFVawwHufPsMxNPiPlV8ZeqgtiiSeURceo2Ne0NSrhzxg9qJvz4RLXiwPvLxZexPWilwZw==" + }, + { + "href": "lib/moment/bower.json", + "size": 442, + "integrity": "sha256-OVI+ZD2dWmUMZZcY59dAi50oc9VQK2TaPiDeyR94INg= sha384-Q7rZbA05W5sNFw71brdfpYHrZkDhx3CD2T03EZJcqzYDgUK0sS+Cd3LLgFYtDIhr sha512-M7gGxaUDMAHX9FAbNpXrk28/iL6esxJyh8WxShE0e93PaqbszWQ2CeoFhjeKCxylGKMlJchnHl1XYqdYzD1EvA==" + }, + { + "href": "lib/moment/moment.d.ts", + "size": 23820, + "integrity": "sha256-8iFTdC0+XV8/BXV9bhKxW2f1O8HkrJFrd8ER984mUvA= sha384-N9e3rBkhs0WRRbJ0Pa2ZMAVbqY7+GAnOeSsfvHriLxK7A3O1CWVt6tr5pNo8Rqoy sha512-5bG09m+mJY40d9k9GO5dHyqW/yyqpzH0fJe8ulY0b/gdR+UQNiJI41qR0YQ6IhcM3UopjH+rEA8j8u9zL8uEtA==" + }, + { + "href": "lib/moment/moment.js", + "size": 174603, + "integrity": "sha256-QFUAPBVOV/hHtZxyDylXJ6v4jNIb121Mb3qbGpp/4oQ= sha384-Jid/MRJ5T05nyGapKRhC3miLI6UQdehcSnGdXZyHUsfnR2UyCLFeuR7P0hXvbRYP sha512-bqapgtfTAZwLEfvkONLanNjF3avvKbrcB55QT5I6FDx/N0n/oqpn99bjJVvHdYQsVEVY22ViXJdtdPJYWuY9DA==" + }, + { + "href": "lib/moment/package-lock.json", + "size": 281177, + "integrity": "sha256-vodCQty05bzZhoSA+Ulrtz7pYd8qFgPqKCPiKFjW11o= sha384-Fz675ZvGy6UyfxB+5EHIaQS6/+wqaf0DJ+SJHhbDxspgq8fTXD57VMFsB4uJn8Ac sha512-MTiuQ9uwCvOUgiOVd2Yt6GY66MiqrI6WiD0bOuvoxmpbn/xhRt3Vhk9n8rn7qyLAIj8ojdaO/XGj2r6nfV/nIA==" + }, + { + "href": "lib/moment-timezone/.bower.json", + "size": 746, + "integrity": "sha256-D586iTcH75eukq4K6jf8gC1iONu5u/loMcFX1hdPh/s= sha384-/CRhiO6l5TB2H3/ggHedgqn5Vu2jvv+ZvXG/0DiRSBlgASrXV/W117xRAiDE1khW sha512-SRNGL/PNt8hxscsY3iPrltqRJpsS72RN0xdH0Ex7jkkmjOs9CMPFzVdGL6wHKl3fuwq6ndkAzYTYxQKARPOHSw==" + }, + { + "href": "lib/moment-timezone/LICENSE", + "size": 1097, + "integrity": "sha256-s6VQeV9BzczbXrJSNQXOVNxKej4NOm1FfSl1kTQXlec= sha384-7AX8Ny7qxEC/7wxzwXmEUSkm5xUFuE9+8LLpmTvUH3kC9wnP4Ph0Q+x6+yOg8DTA sha512-O7t3AgydGit/Y+oh92T+2LQFfFzHmmujE/Q6TkD+ca4NH2hnGPPAoF8lmTOqivHgM5ZXpWhjyI03AZIKxN4iTQ==" + }, + { + "href": "lib/moment-timezone/README.md", + "size": 2988, + "integrity": "sha256-VmgolW6GfNlkNj9SVL5st/Uhqth7GoFV8dHO/2hawPM= sha384-sCX8P+jeixkCeYK0vBl4O5xys2TXZGkhJzeoqRUOkyoUuDQLxZFUllerMvbEkMGi sha512-StRrVJeovpztrwyhEEC9lgkrAIfAzITK0cZvlyTeGk0e+DwvWp4IQJtt66RhjGtWvcQ+fvCuH9Bk7jy0l0PBVw==" + }, + { + "href": "lib/moment-timezone/bower.json", + "size": 395, + "integrity": "sha256-LDaX+N+RzUQPUAi8p5Emer30n+K1FHPun0vinDYHCrg= sha384-oByI8mWz18/qKmwGJsaDo7cb/zz2qskKfLoahSSHLDFPiPbAImSumKQhf+StdgbJ sha512-Tawy7Qcpgb7RF7nT52zLgMDoDw61oHUq8URa3MFfttOVDJPUb3nW+viS+AzjtYGJxRxhSpD6o0SDm0oLH8/H1w==" + }, + { + "href": "lib/moment-timezone/changelog.md", + "size": 12847, + "integrity": "sha256-zT1eqMtVZ6KMjmsZY9qkpxhpAWHn6Vhbqbz+BQk4jJQ= sha384-vBm2/SCSIPOa2HT6+Nu0Pa7m/uZ4LpEnv3YQejqJnbMZXXVNr93BbzPzNAx4NMP/ sha512-nzZvw80cFkzt1h9iUEdsOwK3sa4SZxp5+W3rmxbf/WNV+D7K0Ves2LJY0ySihtrFhZZP9OBCshOWFvG7LNAL/A==" + }, + { + "href": "lib/moment-timezone/composer.json", + "size": 862, + "integrity": "sha256-r2nbf4o+i8t9gVVBVHBFgap6czEShSOk/3Qo2r1M7X8= sha384-iDwddaVgr5KZt1BxNSV81VWxSEZoIwGGmLSvK1KPDSRNqh9/598tZfh/m8hfb9XD sha512-B8nIHukVCqUDU8ZR4vJAyZDMDiL0IYXVejwa67MwLJGEf3si/2kRtFLEg44kK0JgMBiCrJO9PW2m7HE2+nUelw==" + }, + { + "href": "lib/moment-timezone/index.d.ts", + "size": 3057, + "integrity": "sha256-P/J6JkMldn3VRhMyONlo9knRN23BGeeQ/NGiVmFoXec= sha384-aLBLRW3kgi33GGpFAs3VH+Un/x2okkttF3AprtXeEtXndz3LELzpfflxz+HCKad8 sha512-SMXHAt6JUZrBRendXqrmYWiEYHzkEZ7RwWa4T66jSttE2nGMpdd+GLLxxE2sZ8CqHNGNan/kNq1ipn3+4+lXmQ==" + }, + { + "href": "lib/moment-timezone/moment-timezone-utils.d.ts", + "size": 2657, + "integrity": "sha256-1smCQdeXlWN66rrybeg8ZYkN4Qp53RgDn8MtOAIS9C4= sha384-GtXzsnrJ+6lWAs1wOVCLNyfnEArfgK03ek4x4LYuqKsjgB055alcMDu4Bpvew9C4 sha512-JrQgAFkzY24WPTRkUHcEoXykWb3yRe1lxM3bM/bS3tbJ/eEWn4ih4/tXKFjSfhlgzUM0lVnnt9fraO268vJVkw==" + }, + { + "href": "lib/moment-timezone/moment-timezone-utils.js", + "size": 7787, + "integrity": "sha256-lP/8/++V4nSqWnqI8/HkjdNRXGfbBeiYqqC/aU+atSI= sha384-q89ZhNgTlNubO9kTJ/UEoZEi2IZWky1D8r3CgmzLklkT8PHsHqECXul7riSdNBEx sha512-iI9i65smxuQifs0mHfRwD8p6FRKvJ7S2DOLbSxl2onEyHHR5EFob767idfcxomRBJkiU0QWeiBA/qyLDBKKvAg==" + }, + { + "href": "lib/moment-timezone/moment-timezone.js", + "size": 16340, + "integrity": "sha256-GD8DNS8eZdohMLibztDgLVm9/4og64RNmKgDRi7Jm0w= sha384-WvOd+0PwDdjrKa/0QkJDG2FFBmhp/ak6aF68QjJ4qHrg5dlSXIFB6+YBreoltoA7 sha512-0Tvw17rFEy6e5+3nzTWogJUNmWbe8qpFfLQ8wlsnYfaSXYsvZPA7F7yQpXs8uPKw57sOi/7BCk+ypRvr8ySrfQ==" + }, + { + "href": "lib/moment-timezone/package-lock.json", + "size": 104225, + "integrity": "sha256-ChdazvkoFxjpPMNIpzbflkN2uOdHyLHfjsS9RPyETYY= sha384-SCMKHASp26Je5cfQLq6ZJRwPWRVLDOmfimlWdJv9Hs6KwEeh5dZlF+qmSyrBB7q3 sha512-pnniifyUFm9qAlSJaPs9FcxW/91b/IPat6KqnhJzpNunLbqjcKV2Z5FlJ58zS44d5GkChGNzMabpuoTPaKtn+A==" + }, + { + "href": "lib/ng-walkthrough/.bower.json", + "size": 1481, + "integrity": "sha256-UrYmSlzJNwb5hbY5qigawvvdvXSL/4jDTEfh8L3uAm4= sha384-vSrA5XL2H3pHlUxn0ncHZlzW1kI711ZdP5E2HhFVSo8oh+lbaBy0d5TnSdXoBPi+ sha512-36SYdSDWKnYWt57bbUS08+TwLzZrSYnEFwWfACgbieqKanogPvOfUQK5S3Px5pujF38RPVAkNOZgmu9C0WSN7g==" + }, + { + "href": "lib/ng-walkthrough/LICENSE", + "size": 1079, + "integrity": "sha256-HlY7vibyOqTfIB5ImhkDXjEZ4ScIAqJR1Eqd3qkc9FE= sha384-8KBKv0VFoz2jALcQbofrr8LykNnzimLvTaWBvvGh8knRMZWnK0ltCKV0h51MFAjM sha512-iJVro0RntTt0ManIXZi8JZlmShmVsFMyT8ZObZ97ibSutsDaBilUUK8JD539EsfYpsVJNE+UBT6aVksO1VEYpQ==" + }, + { + "href": "lib/ng-walkthrough/README.md", + "size": 8000, + "integrity": "sha256-DAmNazsaY1sXf/EuBUJTkOt9ffESk4SwPn9pWuuZ9dU= sha384-kzMUJLxRwKWwZAOiEp/bn0rsOG++4tSQz+tLQiTVlKH0hofrUqG0wB1sYDLyyywv sha512-282DLh9JgmEoqvRnevrqfkUt93Vvf4mmBY2t1mBM3ssnh5EyrqYnXNdv/htrqwK6nCwla3vDYGtY1W1MW4+UZQ==" + }, + { + "href": "lib/ng-walkthrough/bower.json", + "size": 1211, + "integrity": "sha256-Qm5a6Vx58bEm4GlEHvSay0gdNLoqmhdVNtZy8L8JeEM= sha384-/umwxZjtUbyzxXhW3UWP+vyFruUwdycce+kmjPRaVmFOL+QDk5BreeBpN4/WjxlJ sha512-1Pc4PPLojBT5w6wfW5qw5kRYk0tSS8SS0TF46m5+cI8r21CtZbGGKI4/psi+VQdIeXgZqXYsdLYw/+9dn+GFtQ==" + }, + { + "href": "lib/ng-walkthrough/karma.conf.js", + "size": 2764, + "integrity": "sha256-VZrSnpMAhQz0nPquDORFZbAispvpM9YlLUcwZDzFAhc= sha384-MdW8GyJjXTlRmzjPS6XwsAVfsK4HNcDaetwPAuRqilanYk633GtDDVCc/HRLwMAi sha512-qUyru3fvHXKXDezZ57pExV7+ot07DWuzfJ86ba7mlYGhw/Z80emAtxiNLVagdp8BJLDELhFX+4gWJYamFB3yjw==" + }, + { + "href": "lib/ng-walkthrough/ng-walkthrough.js", + "size": 40497, + "integrity": "sha256-lyYSgwx2y5Q9ZWo3qIq2P+5f0mw11NgArJpygqaKzms= sha384-IPgMq7j176xDB6pmPFrAIj4QDtpICaF+CLdjnrZ7pvS+DYy8RPcOE0BOMImT0bV+ sha512-pH8AtLv/pyXdZ5t+ZDF0Q/IWZTNhL76G1tqOiwPvSz5TvfOX+0wfswDfgvKbo5MFVD9GLYZPgRYvwwsjBt46ZQ==" + }, + { + "href": "lib/ng-walkthrough/ng-walkthrough.tap_icons.js", + "size": 312029, + "integrity": "sha256-52ydaH4guyBhDgQzTAOFYMTO0DoOD3ozCPPRoZ2CUew= sha384-883lYn58X8eLs39u3mPv7ZTwtSkTLLhhO9UZ2V28zAHNeaTD0RZ+3ZgSNlxPqKXz sha512-JLmoo7zzDqzZ2U2TgUZ1YNQhy8IfHBvPaZy5BOIP2f6fGzdboF795lFWz0LosCIJxhTFYn3qJxlKsoYxXzDrMQ==" + }, + { + "href": "lib/ng-walkthrough/package.json", + "size": 1443, + "integrity": "sha256-4Ogl/vA30arUQOucADRXc44Tzm4ckFzZzOf+XMOfqVs= sha384-uSCrCV3RUxdwGAPIzm+5OdMoQdiUvP/47XpsB+JSHxNOXWox0ugOcl1qqxUbCoej sha512-ricgUrMuLwBwHf6k9b3899lyTs9ibPoHkRoEj/Xn98ZN5WhTz2/Ou4K3OPgfPLr0M8b9ci2rJnqbUlB0fORExQ==" + }, + { + "href": "lib/nvd3/.bower.json", + "size": 914, + "integrity": "sha256-e4F/RVGkmwFGG51kdWvgMc/IYfm8p6fzk+VafUXCv+s= sha384-hisP0N4hc5thswiK2cz/dt4CC0UGICf5sra7S1z/n8qp50dgguTTrSj692wRlF6a sha512-pBpPK+S3ZQMOt3qfq/SBryPjwYc6XvmcrUQuyj1J7P387VcqK/0Bj+3BmimJ4HThzIC+Sl5iSNYfahfNsDl50g==" + }, + { + "href": "lib/nvd3/bower.json", + "size": 643, + "integrity": "sha256-ygh/rbZnciN5H0zHjsRHTPtuHSo1F8+V0UlpflMQOB8= sha384-SZuYxekd0oTfj0leTnY+E0nf2DZ9TYQ5Th9SE7LZY3T158a9w2xvFCKZCVHKnTnn sha512-sRX76f18hX6yKOzaiSNmZXZV7ipnL2vRqh7LFhtlbn07x0AjzrVUx/cNSRsvI25HOtAyrONxBwAdL/NraT704g==" + }, + { + "href": "lib/nvd3/package.js", + "size": 933, + "integrity": "sha256-wAPSy5CTD7N0Se2q5VPgQ1mA2M6frs5dEmTCgT2nmIA= sha384-ToIIwlDwmW/opMv96XHarACmuTGbAmd7Z5tPAlq/Hdx6oMWtMQ4LZcmgzJtVf6B/ sha512-9eLelIEa7qafSZNeXIZLFXZpsWlVFMUxBSkAkC6NAL12v1YM9HuM3aYWbxld1BR08TOoc9A48Wr+IXkPY7tECQ==" + }, + { + "href": "lib/nz-tour/.bower.json", + "size": 866, + "integrity": "sha256-EBsh8q/GZ4WsnX0i6pRth5o9CmDuBUjrPdA839XcTJg= sha384-Or4aq3OsrR2k8jsJ82mdNRM7UiCoUFgVULCa9igVfAv1Le46QNLS/ZTkPD6PdCuv sha512-QqrciVhdOXD1vj9D4covhpk5QW5tLj+0dSbLzjq9fucDU7WypS6Kbu+e7/sWA/XzHtW+4m41MnXJ8WHsBJ2IrA==" + }, + { + "href": "lib/nz-tour/LICENSE", + "size": 1074, + "integrity": "sha256-Q0SRNgYt6C3YABWObKiiEdHClasGvh0EeG1cXqfGEsI= sha384-g7Wf/xHxzxTyPFE1GdvVUYEtJVvBLZR+e/YVw6TWZp1rtO4bzs2/JlZV+l8/f2QJ sha512-pW8mAKW7waAUNzt0ZZE6gLB11o8SyeoOxPV34pZYyg6HLj71TIZ3LPR03ohGobYtG42xutAvH90mpot0GjHi6w==" + }, + { + "href": "lib/nz-tour/bower.json", + "size": 611, + "integrity": "sha256-h+xjRUZLtIPzZERt3NR+pijIywR+Xpojm6Cob4OHNLQ= sha384-r7HnCmM0qq+h6WXQKyW8STkJiSG6o7bEG2uzGWpR+k4HwYRck62ahuiywm+i2+IZ sha512-SSpEEUW7dVn7VbNf/XOyf3xdPELXWqzbbrEWDMJjOMGdyOUzchttXNUCnrLzvt6LEj7r+yBDxRj8kFmbiomyRg==" + }, + { + "href": "lib/nz-tour/gulpfile.js", + "size": 1189, + "integrity": "sha256-kUnltLTp55+oQ3yQyJulrcCxOMmfshAVHjDF1cDSEns= sha384-gdxz5E9MBlmE6cnGJhhC5Z7KAgjv3rfuOvLCb4DiTi4jIxlXdDaSZ442MySyI7iv sha512-K6Nc9SUx7+wH0p/F3rtfwViqodexHVhAoDJXVyOlLIPx3x386HjFxsUNe8U8NqE0fsHWBWfU0b5iLSvoFn14oQ==" + }, + { + "href": "lib/nz-tour/package.json", + "size": 728, + "integrity": "sha256-5kiTGniMYJ//LXW1x79LcZxY4t/78IERa3lB6rg2Szw= sha384-C0fs+LosULlFpapethZ+iDSVqwSt2EpizoeDdOPjXoBM5u9a+HJEBnYXTyioT3+W sha512-KpNj50Q5lHdCqrwgLkQ79HjPiP7nmDhliSNUkcRn6X8K1LKtXBd9+ArnvPUUNST/X46RaXZb+TX4PrsKC6hemg==" + }, + { + "href": "lib/ui-leaflet/.bower.json", + "size": 2293, + "integrity": "sha256-B8Sj7bVGDcRSItePbxHUnFj2W6Z2NQTuJzUgStKZK4U= sha384-PvWcMj8iFOQLddD+6H109+5W3jaxP1y1xi0+wj7F6YvRo1Xb95oqh7UxD6DMQW2U sha512-BQROKVtlAOlHJvoSV8a2DVLDKOkMVfkjhYXrJ6U3wujDijXO07ToPlVvOC/wgJdGLp4AVOcJXWiqOey9foRIPQ==" + }, + { + "href": "lib/ui-leaflet/LICENSE", + "size": 1201, + "integrity": "sha256-yTe1DRUqQZuC0o7RCZSaOxgcybTJAC1+/j6QlZqXAJA= sha384-RF0PUDO09LRkyeMl8GJUBeGqouV5SfKKNs4bfHRzftIcpKPiO4zTZ9FtLLv6XPUy sha512-b1O7vUYKmH260p3DncbUylpiE/ClLMCCGd1G3+3+CaA8f1ou7nOzp0xRkyJNm5mF9WTCLPa0TdlVVXH0A7zeQg==" + }, + { + "href": "lib/ui-leaflet/bower.json", + "size": 2027, + "integrity": "sha256-Ukt1JDxMbddV85Qh6T+p01Wd0t8pRx1IHcFO3tADHTs= sha384-9oEaspw4vm47Zb20LkAunTwssqyX3pnyMghjeFu8svIok4/aAn0X+N3KID9w1e+J sha512-7ziWGjwUMoC+lW4zvnCr3An8A5+YDy8S0+LUO5TCBMBvg4Cowgl5fA8sheqg0Yyno8/A3EOVmBX4q6iEXQzVSQ==" + }, + { + "href": "lib/ui-leaflet/coffeelint.json", + "size": 2745, + "integrity": "sha256-/4b9vP4tHOaSTmPhL9i2jXc5t5VoeDEWn3B79EHez/I= sha384-5Ef2GsJaDQEJNXONbSDBMc9MnFf/N9tIggRLqCFevXWDSqRd2KJxyya0D6LoOASS sha512-yDdCPjkmz1BJkYC1/IquwnR0+idLU2lBEQfQvziSEnCJiRADwe5uJ06bzbi4ro0wKCAtigwrY4Q3pdYvPEn7cQ==" + }, + { + "href": "lib/ui-leaflet/generate-examples.js", + "size": 6112, + "integrity": "sha256-3OAhwjgBV+rG+WbQ1cNK4XVqIUEIQjMWqT3ZVE0Vo94= sha384-gEeHzL6CL5aRE3ZkjNcOGX6zPd5gKJsmESyFFrCdQNmBbPnAZyEdsHyO6cku/uYY sha512-CR7ydRCWvc3vwjrfq0ZMMkkdd0AD/xvX9gRL2Rbxd624JnQhaLrNFkusczwYCKhE+36hB7ZUt6jJOQS0OPivmg==" + }, + { + "href": "lib/ui-leaflet/index.html", + "size": 3712, + "integrity": "sha256-jgOE/nq3POJiDz0IScG7BZwqxv7O4adwgWZM5RDvzHc= sha384-sQz2v1dZv7m+PcMn7EN9gNfAzCFKQ2zKDV0qvbVouUGxC2FwAmUlU1/+9ETutP3m sha512-rVPf8akDTKi4taxpP0bGoFc6MKf9OcZSDnjc+gE6GtKEBh9RlzZyP+N42ZY9yP339f4nO5pbiy9wtZ/CIJ4Z3A==" + }, + { + "href": "lib/ui-leaflet/logo.svg", + "size": 10870, + "integrity": "sha256-MG+oIohPrLj/+iDOQANIjyzTHmTtCWRHWaGzfT94Sro= sha384-IJp0Q2o9+pVpyOETedJs3FtkcR/QDGdzNmbVmXULn8ouKDUvN1XGYJ31EOHZxSC3 sha512-nqwfKqBdxEGxca6PWJoZEXWB7fS0CkPhNgqXdrT7P4I1EdWp68EcyKqPbLNlF7+ex7/hFA1ROk2b0x8cQXKgZA==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/.bower.json", + "size": 1029, + "integrity": "sha256-NEIx9yfHAUuPuguzbeCi6xOTBkmpOovaofPP40Yo4q4= sha384-tbC1w6Tb/vR0b5g3i1dBJgd1J5YdaJlGIcing1V2Hf5OH9rx8WEuhysBL+8z8NLR sha512-5SK+U/OaHJW06S0oDl3EfhRO9ZcQL0OduiP3ope0jL0TU01IeQn/GiAQ6+ggp6gi5neS8m0cwdceSB56SCnQKg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/LICENSE", + "size": 9143, + "integrity": "sha256-lrby+LWxRzIwnZ9U/9BP2IGLeyPqTlwu9eGl+KqNHO8= sha384-i1CxdppSOI7fPFJ3KM+JVKhhPM2mja86yF0Wc8hOzzQSIOzrMSBRKrLm/Nz4JLX9 sha512-DMGawXST4xZ7PU3Qn0uNomrdhu/qO3SCDGTzHQpUO7YSaPNQwuxzo+2n/wYf4R75GZ7abiXN1KdNIpwo5skvOw==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/LICENSE.md", + "size": 3809, + "integrity": "sha256-hYlm10cBu0LGYqhuvFInmMZmvVXfoaH9SC/z2s+2iVU= sha384-EwgbwruN+z0d9PqypIt5XzSX+E9A5QjIZyNUwyqQdzPTeAD7/6hMIW+dyVtlfiLW sha512-xDTwF+lsDyDk0l/SSssW9j7cELOflIpt8XqvxkMq41m3U21+ZChqvJu1e0OXLNEQ7/k18rsSC3oTe/TOSpSrIg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/README.md", + "size": 8996, + "integrity": "sha256-7zGTNojync1K+hd/ZnyeqTPp0cH8Ot7qdsfxnzLGaAY= sha384-8f9eUkrq2kSbfZag3LqfN0y4zSKqhlklENkTlTs7UaoudtipWwEAT2a1l4mM5cCb sha512-JFLXQJfzMp38w8jtp37Fg9AflCg1yxofQCaK81wOKnN3L714Cjl+31FDk0ksNm35V1/K9BxbjU9jw+FKv96FMg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/bower.json", + "size": 719, + "integrity": "sha256-izHPhG9ryKva3dl5l7gf0c4F7u7AfO5sp7kdHP2ef00= sha384-ialRSEIw5z7iezc4/pqiR4A+7juydCypedc0XxDHz5my0APl91h215j9C+Yor9BE sha512-Jtn8YCFxPtuGHMsU8W8TaZi3JOv36tal+u2NCkZoOqxlAdmVAw19vhFmGblS8JXZyyekmxYVSNgyIq065igL/g==" + }, + { + "href": "manual_lib/ionic-datepicker/ionic-datepicker.bundle.min.js", + "size": 16381, + "integrity": "sha256-gCrYcbyvAdCCb6yIyaczE0D39Vrx21p6Jlbh1oUXRNI= sha384-87/yMiEcw0VhjM75E34xOiQwBYZj/Q0j48Uw5QBZVdhAB+Y+g9AXx1p0iyS7xRZV sha512-Gv2RDFm+NlTPtiPcAF1YVWhIeNj14sH+9KMt6mvDSP2Ck3J5ymA7a+HU/vB9AX7wP5PqkxYOSAyv8cRXAPtcPA==" + }, + { + "href": "manual_lib/leaflet/.bower.json", + "size": 801, + "integrity": "sha256-/LHUKWO0I/1mWhlK8S0LrSJCwrF+WIxg1oZtfinGXug= sha384-m4hjrGvor6hLnKNMv9r16HCkqsXYBL3+Vl7lN2pIWCmXVaR4juQ/1M8nhuBa/Ejx sha512-jj3MBVVtwJ8j7wubAjGbc0O/FaqkNbBjSPZ4s7mr1cireh1TISvXnzqkiOp9S6Acvr/hre8QvlNqDHIu5AbRrQ==" + }, + { + "href": "manual_lib/leaflet/CHANGELOG.md", + "size": 109287, + "integrity": "sha256-w269qX3BgGFalijwFsLWO61PRG8ixzeIHiKY1SP7TQs= sha384-JeCjeXrZmjvc/WFCXs9I4EvFJ+KuszAP0yETUnRaUp0x4Hl3Iizlteyqrct+3Edu sha512-GelVOZHk7CsZ9miXnSpLt5jPWMGcxkOpgiUHyo105Es/vfBqxB42lxG4ruL5KyD8kasXSHlHr+PGu5mhU5MoRA==" + }, + { + "href": "manual_lib/leaflet/CONTRIBUTING.md", + "size": 7279, + "integrity": "sha256-f21gyHKYUYx3nwoql0MnPthFQE5bnjxNoGnsYvBWBaY= sha384-JlLOr/zcipyMZZXdIjf/k0/GrhU5VGrtILWC7Kidhh2Pq4jDJv7eyyS440zFEmEs sha512-bSJm9Mey2NgOVJHdb0KGHZ1vC04MllNSVwYm+A70ZqChW72suRWXlo3B5oYDhC8Glaj8kwyEcaq256mckqI9og==" + }, + { + "href": "manual_lib/leaflet/Jakefile.js", + "size": 1300, + "integrity": "sha256-uJF2MORk8fvvHgAZmHzVEe1FzHAQFDRGMoRSDNeNMM4= sha384-C1zOqbe7Pv8Tz/AlXQq56RXMztASU5fGJBYzm+Z21RdN7MTOUI9XjnDcN5gcr7eM sha512-BEpI0HVuOAlAuapU/qmNGmxUAqspXIMcrvEjqsCcP+JzWRFY9AnLU7/s6yAPgdSBapfui5r24l4Y53eLUXfGKA==" + }, + { + "href": "manual_lib/leaflet/LICENSE", + "size": 1384, + "integrity": "sha256-bx3n7+JeVZ4qwySqvtfuoN8g2jgotU11h3p24MhxVJI= sha384-h9BwPqxszD28MF0dWWvq3WycfobrQyhhuG+w+fCQGUiNkbiQMzSt4PyyzFtv1ykU sha512-HkDkLLqzNZuahm1hOh9PbA6/7yUPR6lSEaMilPWz9NQDgBXry+Gqg9DD89OKlmvB3u17PCp8xu5dlorOVyk0hA==" + }, + { + "href": "manual_lib/leaflet/PLUGIN-GUIDE.md", + "size": 4522, + "integrity": "sha256-ERW2iFNtFodWzZwwJgH9/uUCRQA/cHV7qn95gq4W1pc= sha384-q1znIL2Q4+y1tCIGe96DQuC2nF+q/ZYt+xWLFZVm8yIUWBtK2tQFJeb5SqL33GZt sha512-5PselJvkmPLP0QBLdWOQL3vSHbn627j2ieoi3uITji9FIuGeTBL1TVzwmacAx0pY8RAG+Agt9Nn/xWg8ase2jQ==" + }, + { + "href": "manual_lib/leaflet/README.md", + "size": 2068, + "integrity": "sha256-RdxCl7JnrDHJlZ7Wik5fIOcbeQdHVgySO8715BbyIkk= sha384-iapbkFfSzjgpta548+9ATQpoxshNlx6Gy6THOCcNV5H/sjDWJanBs0m9qSqoScE4 sha512-rUjkbqjx1/q3Xsm1ZylXxAlUJOUgRCdmdE5V+axWC2g1zgAxpZ9h2KdvDlut+StChhNqE3JykyulIVZYZ22Asw==" + }, + { + "href": "manual_lib/leaflet/bower.json", + "size": 475, + "integrity": "sha256-2p15qtb5aqrPdjBd1L3JKnDWtnIjR49WcfB2d41+NLI= sha384-8UaxAJ8cYV++Lrs0jwIKCAI1xDRZitrdxc26vMb0p2JvpzNfnEfQ74fc9GyovSrx sha512-z4fRB6NVZRDiBfOHfPpKk6qcrj7hThfyRfdSB8gDgR9L0leSbUjgbTueCZuG2nxSI18C09doeAIxyJMqtXXuag==" + }, + { + "href": "manual_lib/leaflet/component.json", + "size": 457, + "integrity": "sha256-v/i+iIc54ZKsH3EcWSmNpZLU9ZGJ7jRjTI3TtUy94Gc= sha384-L4igPO0ctFDt/xeR7GIieunioyiF5G1OuU5sSoZmtJMr+n/rJASjRFKv8eN3/lan sha512-/a7hfW9D2u1w4rQcLq5OIDtcfQb3jQsZN5S4S7iwSrftWXLAOzpRyji2JGiniOZnhl30V3cveU8LBjjW2DDJYA==" + }, + { + "href": "manual_lib/ui-leaflet/.bower.json", + "size": 2178, + "integrity": "sha256-6gXjvzjnp4Xm5U6t2vZK/rcUGDUPjODUgamLggil3ng= sha384-hSJh6l/zwx45b3YXnmqfSCgx1TsK1gQFGC/45INXQrIcxIOJ7suyxLbHeA2U4aV+ sha512-WwSeSo2zwq6dEUtttqnBGFJ2ZJQqGUWlJO5qYtaWIQWJxdu37NaTzHP7Jqvmi7NwVPrg9L1D5w8cVYNSNfAJJw==" + }, + { + "href": "manual_lib/ui-leaflet/LICENSE", + "size": 1201, + "integrity": "sha256-yTe1DRUqQZuC0o7RCZSaOxgcybTJAC1+/j6QlZqXAJA= sha384-RF0PUDO09LRkyeMl8GJUBeGqouV5SfKKNs4bfHRzftIcpKPiO4zTZ9FtLLv6XPUy sha512-b1O7vUYKmH260p3DncbUylpiE/ClLMCCGd1G3+3+CaA8f1ou7nOzp0xRkyJNm5mF9WTCLPa0TdlVVXH0A7zeQg==" + }, + { + "href": "manual_lib/ui-leaflet/bower.json", + "size": 1914, + "integrity": "sha256-x5qSI8q3ff20lwpO18jjYwzILadpZT4O8QJyBLb398w= sha384-GuDf3V6EkDcL42EsyE07rd4U5+2Tb4/DVJD/gct63noys4MFNyMxXceWwQ6eRJOk sha512-2t23seJSunKY7pscnY5i1QEykaYs36CJ4Ef3Qp6Wk1++86NamWVQ1fpdWU2+I6pRouMbnuE/273y61rSfUK/VQ==" + }, + { + "href": "manual_lib/ui-leaflet/coffeelint.json", + "size": 2745, + "integrity": "sha256-/4b9vP4tHOaSTmPhL9i2jXc5t5VoeDEWn3B79EHez/I= sha384-5Ef2GsJaDQEJNXONbSDBMc9MnFf/N9tIggRLqCFevXWDSqRd2KJxyya0D6LoOASS sha512-yDdCPjkmz1BJkYC1/IquwnR0+idLU2lBEQfQvziSEnCJiRADwe5uJ06bzbi4ro0wKCAtigwrY4Q3pdYvPEn7cQ==" + }, + { + "href": "manual_lib/ui-leaflet/generate-examples.js", + "size": 6112, + "integrity": "sha256-3OAhwjgBV+rG+WbQ1cNK4XVqIUEIQjMWqT3ZVE0Vo94= sha384-gEeHzL6CL5aRE3ZkjNcOGX6zPd5gKJsmESyFFrCdQNmBbPnAZyEdsHyO6cku/uYY sha512-CR7ydRCWvc3vwjrfq0ZMMkkdd0AD/xvX9gRL2Rbxd624JnQhaLrNFkusczwYCKhE+36hB7ZUt6jJOQS0OPivmg==" + }, + { + "href": "manual_lib/ui-leaflet/logo.svg", + "size": 10870, + "integrity": "sha256-MG+oIohPrLj/+iDOQANIjyzTHmTtCWRHWaGzfT94Sro= sha384-IJp0Q2o9+pVpyOETedJs3FtkcR/QDGdzNmbVmXULn8ouKDUvN1XGYJ31EOHZxSC3 sha512-nqwfKqBdxEGxca6PWJoZEXWB7fS0CkPhNgqXdrT7P4I1EdWp68EcyKqPbLNlF7+ex7/hFA1ROk2b0x8cQXKgZA==" + }, + { + "href": "non-bower-lib/simple-leaflet-plugins/leaflet-heat.js", + "size": 5158, + "integrity": "sha256-65UqrlgGoRAnKfKRuriH3eeDrOhZgZo1SCenduc+SGo= sha384-mFKkGiGvT5vo1fEyGCD3hshDdKmW3wzXW/x+fWriYJArD0R3gawT6lMvLboM22c0 sha512-KhIBJeCI4oTEeqOmRi2gDJ7m+JARImhUYgXWiOTIp9qqySpFUAJs09erGKem4E5IPuxxSTjavuurvBitBmwE0w==" + }, + { + "href": "templates/appstatus/permissioncheck.html", + "size": 3461, + "integrity": "sha256-Xfq426UP6kW1Ju4bBltLcHWQCA1hzmUmKpxdF4YLVhI= sha384-KpeP4OGeErL1KDNJiznvQB/8/nOwVCaVOmT30TdGmzEKWtZkm6EABN+RsUoVnQ/F sha512-MGDvLAoSOtl7YIGE+2+6gzcjcmntfXiNWrt2vlfb9c0++wVK02N4xxmCAkl7CYTDGXd4bdYZ680yZ7D2z7DJFA==" + }, + { + "href": "templates/common/map.html", + "size": 820, + "integrity": "sha256-4ljtBJbgsAH9lm70+YPljZ5Z4rmX3V2JXbCVs/CJjT0= sha384-6IXdmgP3mhRiovMjiEWW5ajHVmbBWvyTbGDTUH7xmDhIKASqxjUTLKSlNB5eDmvN sha512-T8bceOEBuTqyQpZ3lY0l/V+0AUuzmGTVI5BigMYKsq8EFnDYswKetiay51ZOt2kfZDj+MMnWzVo/L3viXpZgHQ==" + }, + { + "href": "templates/common/place-detail.html", + "size": 1734, + "integrity": "sha256-DAGvK8p5rY02BJNElD5cH2aHLdd7mJA5xdEnC2IEVxQ= sha384-mZfFu+ryiTxR+v6QPlvdWPHRiLmYuLTlvq/a3rWUuRWnQedLLWkdhjydmkAMDl5j sha512-IVl+8iw9bmwEC4Z3yHc9iaZhIf4b+pYvWMwMHolxUPR/cHJ/dYpM7B85tb/5oOBb0f+6IEtwpUE6bT6dah3e+g==" + }, + { + "href": "templates/common/place-list.html", + "size": 1499, + "integrity": "sha256-b6Xcii7Y3xV/2GkfbQa4L3SCfIvVrqCnlQWgRyfW3Q4= sha384-tF4cV6UPXElTUmpfhmjo4l3VLX0uT0Wg+ptDU9hmLiP2AxH5zgmrR0+kMQ8r1YBY sha512-XWF+qS/8hWscnnkmgcSBHLEJrL/Rft38ei0QnGudl+PFuFDN+vokZwcxsY5xn1kKGuK4xg8N72UWwLWMfEkSxg==" + }, + { + "href": "templates/common/trip-detail.html", + "size": 1465, + "integrity": "sha256-ecrqK133vtwoJpB8ivU0SBdm7V8Y0pf5NQdHr/0lXhU= sha384-qGg7qTKpYDMZ38KjKHNDgMEbM7DUzbqYtCrfoLNM2cyAofA27zP3e9RzzXeUvvoF sha512-5alyizMCEOp3o6O+s0gv+h4tbS6BAgzVUlPJjo53yGZgae/+oV2P9/m5p0Eq0oP6j8YhX61N4/wqVPkD73cIuQ==" + }, + { + "href": "templates/common/trip-list.html", + "size": 2216, + "integrity": "sha256-udYYRPfySNBhG4gxvo4/2JKY8M7Zw0AKxcPI042jmoI= sha384-eihHjxzujm9V8+Ri42oyKBTHukXvbhzX3jm++hPCxGqinyLtiVLzy2R6inJn5Jal sha512-xehsViDSr0P37f8VXgSlcje9YMiE71GtIP1SX+vmug6q9q8375+kUJbPvk88tEuI1bLX+M8T5fchwj+JoPlivQ==" + }, + { + "href": "templates/control/app-status-modal.html", + "size": 580, + "integrity": "sha256-BCbwXC9BlQndK9zlS59zn0c8mAwAI7aWMKNFVZ852xI= sha384-Fx7Kq8dPRiqeh9Hajqso1SA3dR9wSF8Ch+IrzwcsbaG2Me31B9wZz3HLuNAJOe6c sha512-ZKxC+EMmddxfe+AQ1jp8D+PZAVm2zqWfi2CEcZNh0EjumwHItx8x7kgV26o0dxMLGd5fwfIyOacClqlXkjD+FA==" + }, + { + "href": "templates/control/main-collect-settings.html", + "size": 2424, + "integrity": "sha256-101USQzseujKptV6JkmeFhSvEh1PKKr5oTtSvBh3xC8= sha384-+KY0B2s6GxwwPQFmdyJ4HIVI31Il2OiyaLPBrsOw4RChqDATTAZfr0phmNnKRPO3 sha512-nLjBJRpEYqx4c7fmM9IqNgYPk6mfYL7CUY9UDARmASI/ZVOZtkQc44x9+ax8IPLmmKnAb55QFtnRk64Tq4j2BQ==" + }, + { + "href": "templates/control/main-consent.html", + "size": 180, + "integrity": "sha256-ZeIprZni29A8L14xnqSGNIDXxE4KJ4Wd+lhT1xtclcQ= sha384-gAFdCwb6xg99J2M3hny6mOQvgt8GquhhSoc7fAzeL79hil70t8PqDF7mC6nNx4Rb sha512-z4qgluzHd/D7L/ONY51W9Q2OHFwmQkqmzYQJ5j3eyROW38urxCqLdpyWOOUg0XApUSh/md/dVrYZnI3ckhIwQA==" + }, + { + "href": "templates/control/main-control.html", + "size": 4857, + "integrity": "sha256-D8uaEAy1zDieXNOTMx7T8q/eA2hNmSEtcqxFlJG7VhQ= sha384-bEzMb6JdTPJUGqUXEmwlojRiBMa3LZsWzUWEbR56rH74fjRGodF4jCcoT35t/aGi sha512-2ODt7MdXIRmrbFfE8zwQEcFt/9M4RgaIloVXbr8hFtJu0iniSKY9oVMTy1IFYK4DO75cyUGQi4/LQYhIZvDeIA==" + }, + { + "href": "templates/control/main-sync-settings.html", + "size": 731, + "integrity": "sha256-ELr19xh5EcRd48iFod3/6smhfXn0hHA+oSIcvOeR07w= sha384-Szwl4ghk7YJZ+W9ncDHOOUNmXwrvAd0fMnEPagUcSJlCsyfDwqBpPkg/K2Npsbzz sha512-WiDKfcG+xFfoc5BDC6glxQiQs8oG8QZXr1NiazCK8FdZuhAYOsb60yXpbHYGQ/hNXGHNX+N3byX6QRcj1wMcgA==" + }, + { + "href": "templates/control/main-transition-notify-settings.html", + "size": 831, + "integrity": "sha256-WCIQg2SXPe28EKzq61GAnU/7va/Sih4uySzCRXZm7Xg= sha384-h/hnw99aNfkusy67BYkV38Tt6E+7QukY4YFy27p6ApaVxO/SwHoleTJPq/fT81iZ sha512-ULMTNMasckrKimf+mBxu333BZty8gHPqufBPRKWA+etrX5iFHunrWN4ZWZkCBv6j60maYgoRcwhSnhoAV9xbYw==" + }, + { + "href": "templates/control/transition-notify-display-detail.html", + "size": 396, + "integrity": "sha256-K8InCuHAB7RjqltMqgo/aWYkHqGD04bl59u9A+zMs/M= sha384-KkyVL+nQhtk0fRCaAPunzM6MI8dtDt7el0zHrFrDpl/X1JcVHiZ4kN1ji1Th5bvM sha512-FX8mKtqfk8T1OYhwgf0N0PK4rF9uf0PYKEj2FTYllFobPIR/UXaXgyQAhYpZtK7a9bfBYrKhxXcDRNrRoKteXA==" + }, + { + "href": "templates/diary/current.html", + "size": 1411, + "integrity": "sha256-fnygCBHSa051qG1T/7QVpA+uOBUg0AfnJOtgmoZb5VQ= sha384-1AI6pMGOZgeE1BVTP0SmAU1IEDIi8dcIGS+KcenCIge3DrsKjpaG2JkaN4ie4Ny0 sha512-wUzt6B/JNR/aZTbePwezCh9Y1YHCDUaqqShfr9lBUzU9wHHRM+DKBp8MCr1/19GhuKhoCkMQ9va7EZ/AfnGLeA==" + }, + { + "href": "templates/diary/detail.html", + "size": 4700, + "integrity": "sha256-SAlrW4+M0eywgwiSy8DDdSt9QO3wZ0vg1pP6Xbl/eMs= sha384-aZ8eIJJJrjC7G/Jjt23relxEurcaHBai85G/i5ZMg4+6VIcrmabaJqKw0Ea+4jhp sha512-b15qdJQwl8TLfFS3pqe8D4xzqY9ilKE94i1K17p5FZvvX0Pt2YDyZ0WtddlZrDypvng45NLZxp/7EjhRNhPjwQ==" + }, + { + "href": "templates/diary/infinite_scroll_list.html", + "size": 8347, + "integrity": "sha256-xhll524o3ftqwDPwi1nhnEUHz2ETqVABqrsRZU2VhaA= sha384-1FBK9hWvv0R9SzLpBBKaM4k4yYUw19x+2+Qzgvesff7B5XMKBaK99dGWgZHm2u0l sha512-tD4wkrnS9JvprQbmSFbsJ0GbA7XQykHxZqZftYYrtibJzqjHKz9GSNJhp41R05MdJLkv1/ujJlc0+wIJiGcd6A==" + }, + { + "href": "templates/diary/list.html", + "size": 4954, + "integrity": "sha256-IOr6tK51SS9ZQUkHa+omhJT3Kfcihvm31DbeObQAuww= sha384-jSiDwOg+UoJwUk28v5KL+aRAg+U+wsIGlzOGBajG9dJaczlrJqb3kwGU8NTVZ73t sha512-D2yyUY4oDkytiuqNKOu7+TL/Bz/7ws1VNBR68Gxd8EbcUPtOu59snS0utOAPw6uAWlhH6IHNZNQIkBnCtT0CJw==" + }, + { + "href": "templates/diary/mode-popover.html", + "size": 410, + "integrity": "sha256-rL7sSP87kg2gT12d9gYllDzs1GX3XT7WCr47bJeiihk= sha384-CASS0Fsb4lMs6AHYecRY+crwH5XUbU+KptOOleyuWvbuaQ/VH0OMilXqBX5UcBP5 sha512-s0r4c9hjzr6nqIEtkn0D64CcTfr1l4VVVO6M+/LRcHfoSSZz+Tp+QubHX3bn63EgYCoYPKxGNlafjcMzP9Pzxg==" + }, + { + "href": "templates/diary/purpose-popover.html", + "size": 431, + "integrity": "sha256-+AC63e1SFmxSvTwYt/ddp/jpFhFfojyWjxCFhaLRulw= sha384-YQtlAmitanAPuVOkmPSKcgWeX7lhsuKSFPmpSW6e6Zn6Fz+w9yDptXIfb2x0o8X8 sha512-Wi9LMX2v16IXCbirBE3O+w8nL9LMkIXMjyENXrHLMKjKyD0ebkwPT1Zxee5JIGd9SAETl9RZp1ZajmIsDAK29g==" + }, + { + "href": "templates/diary/trip-detail-popover.html", + "size": 2678, + "integrity": "sha256-HrulQ758Ybuod/jyIDxfWOAoIHQL1BugpUDAQUctHVY= sha384-nD2WE1oHazv3AKL1ujUiQT7MK4n+ifWokFvRt7ecQa7uaR9+Ut9tpqxJhEnoFcLR sha512-fmnqAHW5BOWBhI9qduFj8+GmsNCqQ3dQyGhqK6OQy+KKCkJYcnmacL2bUEKe7q4/wk43+NlwoSSIcLtS0tNU1w==" + }, + { + "href": "templates/goals/challenge-detail.html", + "size": 1878, + "integrity": "sha256-K/Bxq6EWtS2zcCy3YsUiMLI1yQKSV3phfAFWTVqJ0Vc= sha384-dpC03dFP47A5ENxzk1fygInkd7r5e+AMuyw5FVltS1RUPhZvbXBb9vSaAHIAiKX8 sha512-HgCAS+9M00cvYrGt5ynKnsw8omI6uIf2AjFFhh8pLE7MZ5L9jHe0lb5HQ+bbZoBqh7NveElKQv/iEAQs86hUag==" + }, + { + "href": "templates/goals/challenge-join-detail.html", + "size": 243, + "integrity": "sha256-98dQLIfFyR7LzomW9BGduIccxxFTwMeUsHOxHNf8ASY= sha384-RfTxCABqhMuBCfo5XxOvjuga5q+m7YVoy5CNSRriUrpbVmRE//RJDv78DHqJg2cH sha512-8Zp3zU/GuB7KE5cChPGV8kLg75oNISzfFnx/Lu7VutA9C5Xz1V8ewV/eIyT0cXRi9ecsueW9UjDv3kRQ0CpPnw==" + }, + { + "href": "templates/goals/challenge-modal.html", + "size": 1290, + "integrity": "sha256-40Yxa15dPWcRKFgW1wkziXaZeURN0xesQqZuuU45Fls= sha384-ed6MSyK7uU6VhRGz8oeeC1GXMSQh3aRvz7n608HbYOIFtyLNxU/fsYKk3UAKScaw sha512-y+5ewBGQKd1yI5F3wsrIBRXZzexoNx+JchLiRaa4scJ4C9HxMM+fj1UkrAl4Ge4YANPw9LaEAf4gfLQFWgElhA==" + }, + { + "href": "templates/goals/creds-modal.html", + "size": 608, + "integrity": "sha256-FTD0kG/whlDfK5p6tiFAmCr49DLedB38Ds2oAN8VNI4= sha384-4M0ZvyQbQjFKeu55hyAZmEMHuXFqurnuCchN/pULPVTFVAXuye7SSd+golu/gTmZ sha512-wDIXGbl4+qZP+dZHQQ3mXxHbdsMDumNAh2WXt0DY2fyRfyQZ8c2oPN3qb9/1pOFoIVTIRIMjLEbuV1TkR5pCpw==" + }, + { + "href": "templates/goals/goal-modal.html", + "size": 1186, + "integrity": "sha256-YaxKrD3Qjm4GPKx/uqz1IpJNNFF2aV64QENI5t6BfQ8= sha384-S0OSJs6plnN1uHJVXnf7/Tad8hKSXMdWDTMFfYgOiEhtSG9UkPTF0TUa5fMNpO4+ sha512-JfWa5Mu2sG18I5JIrN0Fx0aotZI9oTut4kCTN9bdaDcXObaAn3lOCGeLvlmZ+4yBx3phdmGpWRq0stGiHmxOtg==" + }, + { + "href": "templates/goals/habitica-signup.html", + "size": 373, + "integrity": "sha256-Hbfioe1hndkdURgm9RamCM71nJZnJHxHqizp2Fwr9f4= sha384-+6NFUXL9rnGvlMbEWqtKabHNciLL7hAZdZwLboZZo+lNZjspfuD1o4TdLmAAn3KR sha512-aAiiCd4OrP+W+zfFGGISbhBOewwFoEq4/Roq0YljxEDnr6oRb7o0VLcjmTNSsEIqQ153e6nQHmF7+yC9B/1muA==" + }, + { + "href": "templates/goals/leaderboard-modal.html", + "size": 15612, + "integrity": "sha256-Y/dWOk0rqms/jj8ZQlFv664419tgFX91f3XsEtYvsaQ= sha384-SoEhdmR6BctY/3k71aYAuKRPQ83o7K6YsQgiCnwtQW1giUGlr1D1+piSyCbUZVmH sha512-3KnXNYXqtMQaPAsiQsOXNO3IDD90IucPNBrEqn5plFPDL3LICF7pD/pjtsXRIemTGYn22LlCw+FSVpqy7EqlSw==" + }, + { + "href": "templates/goals/party-members.html", + "size": 5211, + "integrity": "sha256-nWeYaN3UMFN4DSYAiul1bqQFUaTMEJnGfMI/HLIKIaM= sha384-7oZdU3qw5n5KH3rgwagqZYmAwNoT75FMHBsIqhDn6rYwd2p8BqqE0KaJNHwpntEF sha512-JjvXH//r18V+uDmRWhopwoxQICG4OL2TVEDIfBNpUSz/Wtdr7tPGOjV2tI15iWd3cdbJVN1AHMLj5IbaiikT2A==" + }, + { + "href": "templates/incident/map.html", + "size": 1586, + "integrity": "sha256-vUpc2Pnt9GdBueODefbfHA/OWsBO76l2x7Z2olq2SSE= sha384-r10WwNJUO0WI2GoWtwjpsQ+1hbgAiwK3Md+UfY4GfhNdXYuIIp4ljnRU2pTmedNs sha512-LK0IuLH6VzxEvvOTbf0uuRZzVJQp2sHt0tfTXp36LASJdlK93K+ZQJ/Dlw0QArFtEbz4trQBpjc3bs8piuG+DA==" + }, + { + "href": "templates/intro/changes.html", + "size": 777, + "integrity": "sha256-n2asNhjkTMokaNau0o35VkWfZnCH3G8MYZunOHknoEo= sha384-UGVZnZ+G3tqy6F1y69kH7HKt3sHR2+qq3L3dTpymmgJiQMy/BSq+Tu5LMKeYYtOa sha512-z/5UkYJbzexfNLSzOXC7vm3G1J1um1j7YpwW7m3qZDCl2MPxsyshxsCMlMoownhr5Ap9I2pgmIJEnoSKzq18Eg==" + }, + { + "href": "templates/intro/consent-text.html", + "size": 24315, + "integrity": "sha256-4qXKE7z+jVCfCQ5lQ62+PTlyqjY96vtpk21WasT2eS4= sha384-IGf9uyRa7klpbZqTaDPIXd4UiIuSlYFl1Ct9ohE19wmdEGW0zX5CL0W3Eo76hYli sha512-f0gnSdqLB5oeW6pUHyzm02qb+ybxgpPlEBi9PE+Nn1qCyMrdht5WnLVHimBSl7oj4J9zuTclCg3wNhnZB3kKHQ==" + }, + { + "href": "templates/intro/consent.html", + "size": 1138, + "integrity": "sha256-gcOgHuPLF5C1gtc22I0EVFaYwIPQuVCgwHpB8rBPkeQ= sha384-cMQhYHawxVxmouuiqzZJ0elajrGq6QQBQiyby8tLtK9JvvV1CiedMHqwEwtV6mHH sha512-G327ZySyMcGas2Puoa9I5Vukl7UgAhmgROba2Qeah/7ZAnpqyejZRomHdp/TSjuJCB5UlhN+bjgFKmPGwH7hnQ==" + }, + { + "href": "templates/intro/intro.html", + "size": 561, + "integrity": "sha256-vfABBImAjUS6+nIpU73rAHrA9JNimFZrcTHVL776L2A= sha384-tCFfYQ9XkVrRlV6MZGjTEhCDx6f99WbAKDb2SZQSpbr115YoN51xU+bZKJ4AoAO7 sha512-sDuzDpVb3aFzOlPXzkpe4KMBsPmjyCXWw6/XH5F6C3dxGwuVk+ILn4NtiQakxcXE8FR/RLsWsUvQ+QlJFMnDYw==" + }, + { + "href": "templates/intro/login.html", + "size": 511, + "integrity": "sha256-xGyRNiFMsROhgj1BjjRR6vWgeI+otDclLfafqZpGouc= sha384-TxWF1QhznMMXnsjgfIbrL2mVmRfMfNvsfM1TQN2VbVbcXes7Px3hC+oxLmhRGNmc sha512-tw/8dmwzVKhvUj6XFcnNE83zgLcuL8ik5sU3WluGSpazebekK5oqPAXSgWM8tt1N/b3tk3uAp9IYO2ibz+lj0w==" + }, + { + "href": "templates/intro/reconsent.html", + "size": 388, + "integrity": "sha256-CbabRghiKT3IJh4CnXiaBlHpawC/CYj+egsl9uHzV6Q= sha384-51YbMHA7M+BYjaGKiHSL4HEt9bGix5ZstYzLA1/AyAjxjfPCpa+kMMmMW3p4oA4l sha512-fl2KHweo4tiN2tphIfZo9c8Qhow/n0BsEKn1vJdOs+VhTltxhoMNLT8F8td1WCbVxjj1QjQiUNoKMdEPoMjzyw==" + }, + { + "href": "templates/intro/sensor_explanation.html", + "size": 845, + "integrity": "sha256-I0fhhpWhlFJ1azVGQUWvX7h+FHXv1utufIkUhjhysHU= sha384-ZvULwW4eNX4Vh6rrytxWYTST8TUop2T0Ge5EQnqDxOdrHDmrVDm44Gt6k6CgLDUF sha512-dUKXIma9+9gE+yvDGMZyzCp4hujnkUJoXJl1zX8M2rrCb5vx20cmGZridsGRAbnabRkDZVlyUQIQGPoF02duvA==" + }, + { + "href": "templates/intro/summary.html", + "size": 963, + "integrity": "sha256-Eotd90okR5QydComY7DXSPcT5fF6b8hwWXIVNbcxk8w= sha384-Vz8OOw1bF/sDMAI3DxCpaEDaYxA9MCXUzIatNhh3BvAHrQL0Aj9iE+z6+DVBUHTi sha512-1Ebp8aud6XYPPfVoB/Ysz8EXhCFT2OCvgVO5g6w1fNnQUiZk+Bpjt/3DB5ALauPYpxbMFQkKis8G7XBoP1JJ5g==" + }, + { + "href": "templates/metrics/metrics-control.html", + "size": 3839, + "integrity": "sha256-qWEg5iZgk/uAOoWaZdQfN1abou8eb5d+KwKBAsNrfa4= sha384-v44cokK2lp6K3TzXg2XJi8dUdvsC7YCO+qSfuVHZRjtG0vJsDV/kOE631X0dhIC/ sha512-/njbnmoZjp18iApvQyP/X/0XV84of2JSZhL4GoIrn+Hc9b/XE+Mk68DHNJ+lmHIo6AQeXfXedBIjhsXTtRfnAQ==" + }, + { + "href": "templates/recent/log.html", + "size": 1069, + "integrity": "sha256-msdb/M/jeO2dzmxciF1KHoP3NqxYB+ctULJlbB0veHw= sha384-Z74CRwbCvE7fvZnNXWQs5KkjeQXfyyuUS01ZyjBNjj5YP5M5ovxmIIdZ7qk07yLd sha512-eOIHmEd8JFx5kkyG1D+SOHlbMpdtXJVon0gMDzjYa1k2hAj4jT5HgVWXNGTuM2ad8FC9Bd2o5bedLvh1YkVCbw==" + }, + { + "href": "templates/recent/map.html", + "size": 620, + "integrity": "sha256-+VGxXVyVwDuqVnEmX8ZVW5/+zSOns6JXtKbSXHYNthg= sha384-fn4GYN7lKLWS/9Sjw2AzWyPv0UZaHzvUZjpeFGLaFoo0a5Xy3GcyhAngdVGFoa/6 sha512-BpyBq+gvlyYH7NyxG0PDE0mlghVFj6b4R+kfvlQtY8++BWakJ0NW7rW0KQ7aZTipGCqUrjwGMqvR/8uHToJCwA==" + }, + { + "href": "templates/recent/sensedData.html", + "size": 931, + "integrity": "sha256-L5lTeag1zm88asSKCLouP6PVuFUyNkfOaeQ03e0L08A= sha384-VRTbBwKjxqfynMb7T6IRFDxKxbUQ9C6IUxV1HjvuVXKPXvFB5YxzD35Nl6JNfgKz sha512-VvURZOY8eXC70zL63MCPDiEExjO89wJJQ58zBs2xu0kHifFbUCJPP5EAJyFWPWAUnIg33iQta6HA+eErXppjuA==" + }, + { + "href": "templates/splash/release-notes.html", + "size": 110, + "integrity": "sha256-085yVKhkKHryOSpljK6dpzXyR/qNiqE2++6sRvz7TNE= sha384-93Svsuy+w1wD84t1WTMA4qwvG/BirguQog5mS+2WVziPzbCbVLBmW1Ufk4y9gsiY sha512-aiEUKIqsafADDClOxVK3pyj0eJ0Xj9ArRvXDwtegNuV91tW4cLlw4GTQ+OcPRdH3XkoiOaq6gIovZ95n2AoyYA==" + }, + { + "href": "templates/splash/splash.html", + "size": 135, + "integrity": "sha256-agIofs8W/ZVilFrcbXPkEFqKGCpPC3WLwyIaEsrxcEc= sha384-fdBGRI/taBkrWVtylgM+vvCIO/oLqqB0bMoiOwvxUpp7v2F+E+v1tjEoGXjaeamI sha512-loR7s3FljmwQX0EdCANzG9usTh3PzZyu88s8YGXfBjIHuhKMFFO9IQFkrFUamC6cEQO1Xji47t+j3F92RorHnQ==" + }, + { + "href": "templates/tripconfirm/map.html", + "size": 4084, + "integrity": "sha256-fwX0mxK7j4rJ2McM86dC6TBGgUx0O0ryjOZPB2t9ASs= sha384-9iuLoVKjgC8QoNwZu1mnddfzdFjRZyt+lLi3R30c/LpfGbnBI47vM5IMRK1GxScp sha512-1NRvKVzjsC0mr1a9PZ/KaEH5kZSSHRYKW49HrZQOek9o8IGIzOMW1HI5+ufyWl68IHoidphlc0SkvV6C5ni63A==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/leaflet.awesome-markers.css", + "size": 2225, + "integrity": "sha256-EFpFyBbuttUJtoocYzsBnERPWee2JYz4cn5nkUBjW0A= sha384-AHhmp36MxTYxqK8q9BF7ifcAjDEpcCT+OOmZrBb8vBP6At1I/htDyRK/M8wgzuqx sha512-cUoWMYmv4H9TGP4hbm1mIjYo90WzIQFo/5jj+P5tQcDTf+iVR59RyIj/a9fRsBxzxt5Dnv/Ex7MzRIxcDwaOLw==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/leaflet.awesome-markers.js", + "size": 3789, + "integrity": "sha256-iwOC2Y7nazcGcp6/ssCIuZviWKow9gVN5ntSdgI0jQc= sha384-p96PkhiqMxDcor51hgckjZOJvsNNKl4Uy25L8da4p+suI14Ftn3sOuFs+IPN4vFm sha512-Oj9plGLST4IMXFXDfqMdTP+gSInbodkyno117PSjo5R08eu6TdzY9WPnnwQZGx2O2lG/kN0MzQk95ulWsRFuLA==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/leaflet.awesome-markers.min.js", + "size": 1775, + "integrity": "sha256-IqiRR5X1QtAdcq5lG4vBB1/WxwrRCkkjno4pfvWyag0= sha384-e3K/MgD3PfLJJFhUTg4y1zJciOSfdvRZpcgb0IBjxmbvyyyZuuQTKvs3x27hZpLr sha512-8BqQ2RH4L4sQhV41ZB24fUc1nGcjmrTA6DILV/aTPYuUzo+wBdYdp0fvQ76Sxgf36p787CXF7TktWlcxu/zyOg==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/basic-example.html", + "size": 2865, + "integrity": "sha256-+99zyD6d10b0bGwAhpYfjP2kJ52Y38uUTBOyZdVwy5g= sha384-HIsHGzLg50+9TJbOmJOhK8o3maypY+zNp3aqrsRZHx5LyklO7DIHavsVl4zi5dqj sha512-BewjfmE/cW+fKZau6N+BPXs1b6va2eI/9xQWPsIWkXkagc2YYCzD508TWPWbZUEOtyDH1+KxCKkEKNkAs7arCg==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/random-markers.html", + "size": 2143, + "integrity": "sha256-nBUE2LAxA4UUBZCvavRJBNFqXWB99uF3/HuTNauyvbQ= sha384-IAmczmxR9+X6Laqjf0XYC+5lTct9U4RxItwQnJgT6tiPasoGtdavAOWL+3BUKEFT sha512-c066/tmur6cTBUbhcwT0tXq6S1qgnc8SVDcU81uoeVgJq0h13DNLBEiiPxZShxtGBOaAdZtjd6WdLFLVR+uFNQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/with-bootstrap.html", + "size": 3027, + "integrity": "sha256-F9xYjdAop6tciuCq9aw4fhbS6vSX78iGGJ4k47Jci/M= sha384-he+j3pd93q1gSPzlctOXLcLKcywLVF/Yvw9/wGv4a5OgY//szPsBWyLZ6ZpAJoNi sha512-DpKOEEK8LGxwUEGfz9AQLl0F1ODg9+LPfLf1YdReMVe+Es7iVsdL7MLDMIZcy5xxGTdTPVj2Gq7OiTvUAfNjkQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/screenshots/screenshot-matte.png", + "size": 197696, + "integrity": "sha256-ATLNfiByXUoQ1eGQpegdaLdCcj/guMmY02NH4JQ2LEI= sha384-31ud/b1F3LEoEMnuk/Kcezc7qZsVz7zrdvmE2rXIDd0X5y3YFF3RDzKfmtTeIGLQ sha512-YDKT8DjZy44hdbzhkOfWD/EAMeMjJgH0tLyLjHCekFGXAaFi9ug/Hn6xTXVZiaKytPNQcJk8a2+X/8YJKwB2gg==" + }, + { + "href": "lib/Leaflet.awesome-markers/screenshots/screenshot-soft.png", + "size": 218197, + "integrity": "sha256-JWQrYlnc26VTXjajbndVjeO+/qVNFydXj+D+5hUPWuE= sha384-54eM0hmvXhYTTmE0ynx2G+/01Fm/GMO/0BE1ToPW2dOylUTWVwfEuKiFGGCG4U9t sha512-1IKS8PE/ULTstZcWwk0+lfjTGJWgMus8BiZa99g3/sc9HdUMuG9cRSTN6c84l3hXqJ5Oo1Y+ndBOzwa9PmCM2Q==" + }, + { + "href": "lib/angular-nvd3/dist/angular-nvd3.js", + "size": 32406, + "integrity": "sha256-5rYgyjhIzeDXms5E8P2/7a9Jx1SyNT4V2TBzaKIEGU0= sha384-Fkzo4cSL8Gh+Bide9x9nZHu9jNPP9LgAQe+HodMJi002syblVdkdHJyvvVvrzEVG sha512-vWwzB4JpIznimDp7J01IDlMwPayFcHsz0+ZlQ9rqeWTRvhXfpZH0pR94AbdgV7jizP//K7H6g7v+K+GZ4oGUNg==" + }, + { + "href": "lib/angular-nvd3/dist/angular-nvd3.min.js", + "size": 11469, + "integrity": "sha256-PAY8BCwt+idlG8V+2fyooEUzQ+ENaY9RCe9/Z9xn0nM= sha384-J8/c5MzIr1wox348T+c6UM+bfiCZUduY+sGII74V8GCzPBvL8XxETer+MRaddJTQ sha512-wr+Fu5WtTcmY5dhd0dz70iZJ6ZbooEIZKk1Z4JGEIHlw1qQ97FUL9Ko/mC87Sfbmk14csKXosGhgYVRXb2sWKQ==" + }, + { + "href": "lib/angular-simple-logger/dist/angular-simple-logger.js", + "size": 14872, + "integrity": "sha256-FpRUa599LEs/jPQplmRd/ulLuUJP6W2OilZVpg0AHmQ= sha384-mx9Xn1EHPXsvC5X4Kqt62KZzogYyRhUOrrak+gkDENpGI4Km4X6v3/C3N5G3perd sha512-IslJDGaeL0IGHM256peNRfFtWOeHP+VLZ0dhAafCK2v7fU2N2UJhwVCh7wZGFB3c1N1ifAq5Miq7EKWOVU0CDw==" + }, + { + "href": "lib/angular-simple-logger/dist/angular-simple-logger.light.js", + "size": 4202, + "integrity": "sha256-qe4MU5MrTjvrbHowkzI/W5wsUt+f/Zc87yifyTlbDWs= sha384-roVjt1BxMV89vA0BvyMP4GHokI7MhownleDGUVDulnRIMp7ccz3uHjwy7SssDQKJ sha512-jvwFh10G9b27TvWE9Oy9QRc6ho2muVwFdoneaZG4ZyX/hTNWI6yy7NExz47Pwa4S3aQVEBdIOlmKosUz2cACNw==" + }, + { + "href": "lib/angular-simple-logger/dist/angular-simple-logger.light.min.js", + "size": 1697, + "integrity": "sha256-QwZ6FnpRa5bhvmwg+m6MjM3wSt1MqaguvktuQMiFToA= sha384-NIWqWYOpfWI7iDboU/9DiSzBfOw7HEnYph+Mh1rooBGZrT/59QVdRaSS1kbqSxI0 sha512-CFBzgVbMiOjVLkBoXoWrikskDl7PdiBDHXIXKT61e+snSom5ZJPmP1hkxclT7y/zpAl7iwLvOJfZogkp+cVn7Q==" + }, + { + "href": "lib/angular-simple-logger/dist/angular-simple-logger.min.js", + "size": 5857, + "integrity": "sha256-pCSPFdd2xTyAjqQUAaN4amj+x4uAeTpn3Qly6nfXrxk= sha384-GWgUV0jAYk4XtOlYnoquSEj/LKw7/0p3vEOfU7g2/KBelmIGZGOAM7bL/NdUuiBe sha512-VFZk5ZmmVOtV6fdYZ6Ls67VApw1M3ZMxc4lqnRq8f8MPrXd1Xu0D4c0tiT+fTIMUAdw3vsvh4mr+dq2MYRP4uA==" + }, + { + "href": "lib/angular-simple-logger/dist/browser.js", + "size": 14872, + "integrity": "sha256-FpRUa599LEs/jPQplmRd/ulLuUJP6W2OilZVpg0AHmQ= sha384-mx9Xn1EHPXsvC5X4Kqt62KZzogYyRhUOrrak+gkDENpGI4Km4X6v3/C3N5G3perd sha512-IslJDGaeL0IGHM256peNRfFtWOeHP+VLZ0dhAafCK2v7fU2N2UJhwVCh7wZGFB3c1N1ifAq5Miq7EKWOVU0CDw==" + }, + { + "href": "lib/angular-simple-logger/dist/index.js", + "size": 4213, + "integrity": "sha256-2Wy0Zop9y3jWwc09cSzaJiNceHPIf6AIynZyNIpZZ5o= sha384-hGITt1oBjlRH+yhBJa4Jmuvp3PdnfF7wEgxVYjRzm7A5ErzoonJIuqPZhhVu2T6A sha512-YNOfxkKHUqorZLl9v0WTmZaCrKxFK/yeYFvU/jfe/Y8YfgJQFkL6UhRNsk4VBiZzNKfepeTWzrznLNUbupi3/g==" + }, + { + "href": "lib/angular-simple-logger/dist/index.light.js", + "size": 4202, + "integrity": "sha256-qe4MU5MrTjvrbHowkzI/W5wsUt+f/Zc87yifyTlbDWs= sha384-roVjt1BxMV89vA0BvyMP4GHokI7MhownleDGUVDulnRIMp7ccz3uHjwy7SssDQKJ sha512-jvwFh10G9b27TvWE9Oy9QRc6ho2muVwFdoneaZG4ZyX/hTNWI6yy7NExz47Pwa4S3aQVEBdIOlmKosUz2cACNw==" + }, + { + "href": "lib/angular-ui-router/api/angular-ui-router.d.ts", + "size": 4352, + "integrity": "sha256-J7aFgYhdCiU3lra0qDlp9MbBRTnevl6EiD2eeqpAdYo= sha384-ZjKP61l47Jl3TWbqol9YhTrcYDyvERyBXePEK1b9KYthWkF7jdEB+Rrij/DbHjbN sha512-HUpNrRoijrftCAylLmU+Yj514fizsTq9WZKuMfuB6reMHSLU57+umzLVD3S7ROGReASR21Ib4ZB8QGdjtLBmzg==" + }, + { + "href": "lib/angular-ui-router/release/angular-ui-router.js", + "size": 156740, + "integrity": "sha256-8w7l0513LvFePJ/wrAi7Mlvxn7EAZjcaSDlqm8EbW2o= sha384-sNc/h4fY/r+3GrGSSRG7ERURnNJLFOdUMn32YIey83gZ8BC/pZ6b165rNF6lKoH5 sha512-tMkFPGrAAW10I0m95uXEVfG6f5sIc+vRhhqZvTVn46N5YbRI3QvmSIuB92FnF1n2HmoD/gmq+ZF5kw6CxapEOw==" + }, + { + "href": "lib/angular-ui-router/release/angular-ui-router.min.js", + "size": 28684, + "integrity": "sha256-GmWIjq32HBb/l6xpFVMaQRhFrtbM3iHzFIgK6U1Y51w= sha384-eQ5kXqq/YlZVjbrEac4Y6CUj4uT9tB+8Fk1nOQ/1Zp6xTvsssC65nXWQ2x5hbbuK sha512-rVtt5MF4HMTRn87EXr5i0njGxx7WLC4A+zvy0bt8tASmGoSRbxbYRRQx24VkZ11/tKjBkURlAfngExqhaD4YYw==" + }, + { + "href": "lib/angular-ui-router/src/common.js", + "size": 7991, + "integrity": "sha256-jIerMvSsyGaE7pRshtPSLzXZr1oMBOZMfpDnQMUgijA= sha384-oBXvxvShbUKhCh9K6BroJlUflMiHI+UmV9oES5dv/GzJedv0T53zk72qc5//CiqD sha512-9BeB7ipmCEXfoLx03JxZb7XwZp8D0ASluQNnVcoqbKEiFkStrTB9Z0FxuaShTxk96SXuBSb66Gme/k/ZhfoGsQ==" + }, + { + "href": "lib/angular-ui-router/src/resolve.js", + "size": 9740, + "integrity": "sha256-9/5NuWpPps0ih+XS+UXbu5IH4fFgFLxvId/m34RRPzY= sha384-TnEOd6gNhiSc9vSdGV18IdzkLwlNjAF0AyQ8fCnoCawCnBqkASGE6jdwa22TUaDG sha512-XL2JGtRcPjZZLK1z4PwUy6DMTtcCHMKeUMW2T7VtK72VOD2077bm/tesfhTWvIAjK6E742uKWmW+2n+JQz8HiA==" + }, + { + "href": "lib/angular-ui-router/src/state.js", + "size": 56565, + "integrity": "sha256-8MzEaGiXsXE/3GkT6rG/Lb4GISjoEorsOhv1vOc53ws= sha384-E5OJteCGWWOqDGgkiimCDOwUtISuBsV+9DEA1Kn4JNbIXc3/uih4wjnU44KHP0TR sha512-S7U1MVa+S8iYvcBClwJ64DlYFjRAcEbx1JdoELM1wJGThXY+/jhrilVyKb++ArpVC3H50wVCEGfzVjMLcU9EBw==" + }, + { + "href": "lib/angular-ui-router/src/stateDirectives.js", + "size": 9442, + "integrity": "sha256-0sbb5/4NjeHuEf8RWGVGBNboUd80cYjG/NbxRrxjLo4= sha384-BlOggLBFQ2CNnCAQLjovT/xPVe6FMfkpyQGKfNW4Dr3FC2T+pp8Aouk37y1TzhpE sha512-6devkMKIvGqQHCeDnoet4ClABuB2c0Umym01lRQ+jUiIJyhj/DGBs9/b0cKAMAeJXusXeWY1sS3skZgsC1flIg==" + }, + { + "href": "lib/angular-ui-router/src/stateFilters.js", + "size": 995, + "integrity": "sha256-h1KZIjjjRtdYAktK29ywg0VhOb16CWzRKN1xZbbKVas= sha384-iJNKxEVEvJfSAR2rRweLtbDU7qbM61n3bNX9GXj7HiVxHV7IwdB4YHMJJXe+bJc5 sha512-PnPKRPUt5II1GBqVDiCJpOihjUaXU4w9VO3XNj/pWnulO7svTMjtjmUdcujqxqc//+zCvnGJLt1SX9G68HZjVg==" + }, + { + "href": "lib/angular-ui-router/src/templateFactory.js", + "size": 4196, + "integrity": "sha256-J8ha5Be7JasARJuHV/sNfkm1Qt2KkU0SJIelKN06w2M= sha384-y7OlL9+lLs0jbfwEBZYvcBarfeIsUN3Snkd2hYvB5fFQcPuN/8ZpRIYTO+iKY0fI sha512-YSq3UGZmDL6juLcOClJe542oAppsNmeVDDvvC/TwnMYTw+eM6r8ChGOg2yq+Nwq1zW3GIsJmEpa9EOF1iYPv5A==" + }, + { + "href": "lib/angular-ui-router/src/urlMatcherFactory.js", + "size": 40083, + "integrity": "sha256-QiA+SyJktpEGv2Stepc6ytdSnwT0LFhE/M5AyFiDGdE= sha384-/VPHCfmb1+SqN6VmLStper1IC1uFVPoUByCJ5i7oK1WT6w1XAxcA4tm/sObUYqph sha512-YZNvT6WizFEkBwvliT4iPcrVxD7lFbcyOhLFx345U/NB3YDBJSX4pcn2c5iYUzd6MOIRYLgo+/0BEtzdRdWYpA==" + }, + { + "href": "lib/angular-ui-router/src/urlRouter.js", + "size": 14421, + "integrity": "sha256-oRo6iEp2z9oXNPLOBi6JLMpe9XEhjvLVgzgKEliC5RU= sha384-C7T69qjo+zEUAh7FqlcEMoOW7JQKxAxGa/ZDCu5mWvbeBSPxzlsx6qZzZlv1R/Ty sha512-REOwycp12SgIF/70QHY7MuW2++JvKlcJpIEo2EX5D6by1lV6WIV/PSoDtDUNfK+aRqtscWbzveozUlpYSZquGQ==" + }, + { + "href": "lib/angular-ui-router/src/view.js", + "size": 2129, + "integrity": "sha256-NxTrppZRMKcDayXjl6Nh4kvECMVPyDpAmrHIRqfWMG0= sha384-lY+2LpOKq/cTzZe699mXkN+ZrAIxKpbllUGN4bv4Q4MWYJLxkxkENuCpdbz3mqEX sha512-yc8Q6POQDzojDx2dRKeXNVP65F27gagRrjgwk0el5NrAdu9yu/eobmmgxCxplz+YptwzWM/kBdeyh5Wtf5Xivw==" + }, + { + "href": "lib/angular-ui-router/src/viewDirective.js", + "size": 9218, + "integrity": "sha256-WoGlzOFqH5XBOaD0Jn2jC2Z5bbmEkMpmfbEzwsLOtPA= sha384-hBZySHSiSw3c7KbKzSXGrU6g5IjKOSSXl/CKxi8vgm4Fn6Z7Jz6PZfytmZMQAKkL sha512-Cn2SSG+hlQXOTxJEgcRQIU7GG1hF9LCgnpwut0luf6I/FIZhTJdsOxW7rRbe6SsSbqV6ASInHOk66OtyMSR7tg==" + }, + { + "href": "lib/angular-ui-router/src/viewScroll.js", + "size": 1522, + "integrity": "sha256-TYOLt6siiPDXbyVydweM/JWVhoiRGD/IUn8WXJ88lPs= sha384-1PZ5A7d3wrKo/BZ+XSDvpSjjG5G39JteHtFoBsDqsvvhuCUaAbSMrnv4JnV/aCsT sha512-oRJMBJ8bCbZAQydu26KYyg4jg/14lbMFht5CAjda7JZYc/+tLV01eFSyU1WhPSZRNjr/1BC6c7DEdVzBCDAlPQ==" + }, + { + "href": "lib/angularLocalStorage/dist/angularLocalStorage.min.js", + "size": 2860, + "integrity": "sha256-XOJLcam9PMSNKrPydiQuv/9z77sfPfzGEvW6kaYEVYk= sha384-xHrYykwzxC3FSvxi2EVsegJPFzWB41da4CMbPB00B+tK+3hBYFvKFT3q90cCtORd sha512-0Kl5aDbYeACWEp/xKCRix2jcFrwCMU3vciyUZ+09bD6i9MgCl6K24FZ1xejM/jNu/DZsMYJm1gy833pBw0LHcA==" + }, + { + "href": "lib/angularLocalStorage/examples/index.html", + "size": 2411, + "integrity": "sha256-6qPUYBXlM8lrMuixpMHNaNLo48ojoxRsWB3w5HCKf28= sha384-Yqwh7un1yD6wzAZMUhukl0DjO1094R4QtNFlAUnXxI4P0LI3gl3wA5XoHORY0RoA sha512-bkovgX3iJrOC23leSf9FRYPrYZexEZCcYmV34Y59aM79moLgaVmsaEJpbOP9wZiif6YuEjYZTqcCw1/0kM8X7w==" + }, + { + "href": "lib/angularLocalStorage/src/angularLocalStorage.js", + "size": 7950, + "integrity": "sha256-OhCERBvXn4nj+pHQ9OHUFQXLOHgvZHGjTm6d0uasTHI= sha384-cUEmp1TKlI/JYozx7BaJKrBfPq4RvqzdxH/+BaI7hgJgWAShc1TKFcy/yt+v5L7/ sha512-3MsxMvzdIlswZ1fxMClVVZm58xfgGYaxu1MoFywp6xdOpao8thmWxJvaLGPn41XBeJE/A+kd46u+aLFCGHlw0A==" + }, + { + "href": "lib/angularjs-slider/demo/debug.html", + "size": 955, + "integrity": "sha256-Rgdk7ERRP7spx+a7kycJLzZv9yirGMoFlCE63ii367U= sha384-Zpy/F2XMU6F9RktaSTB8GL8p9NIzkM6Ok18JHVQcyaVuPRYeJJ/uwMqEeN+vgu4L sha512-0fejaGIWwsLrotIFoPyf585blrmqw6P84ilAYliIZRHkEGRFkviiMRiqlQzMM5cXWseMNdBFHcQBdQnltxdbWw==" + }, + { + "href": "lib/angularjs-slider/demo/demo.css", + "size": 1352, + "integrity": "sha256-sQ7Qz8+bGTreEfV3XHzdlDIrDyz6muye3kkQzRyBDYo= sha384-kFHNhMXWDjKQnxAt+Xph6y9U9cc2YDTa28tVCl6kPO8HySRrwGGj72zU3lAqBzl5 sha512-HH00XPlcyBTMwjcHGDRLX4DRqJpi+De9pdejt2YUQmSO3DrmiYW68EKpkOrprBmEGDK8n5114hrFaOFdTyUz+g==" + }, + { + "href": "lib/angularjs-slider/demo/demo.js", + "size": 14126, + "integrity": "sha256-Q75jyvUNaNB6lG46L8KXfvnCd1bJXd/B3vT6h6P+eQA= sha384-0eZUsufgOiLI0siL4nISzT8ZDxV+b9zHriH10P39a2jXXmuYpK3gchovefPVRkX/ sha512-kB9flCe3/VzDPR4kiduRKzveaBJnJ/naxktzBNVky/SY/jE9F/Fa+Ot6OGathLTF6C+lod4bcvfZ+YmOI+93yg==" + }, + { + "href": "lib/angularjs-slider/demo/directiveInCustomTemplate.html", + "size": 1769, + "integrity": "sha256-Pyszt+8sq3r/rZkd6UwE7DJ5jBep1271A+T8zi1fp8A= sha384-nb++ew25ZDxkaotJJeFUKlXfJWpfiqB0VgI/Fav5mdLxsX7EBueo0zYL+Uu33rUK sha512-nbmaOscT1FKaMEkq/XahqLYtfngOTVvBzitcjAKO7AP3eJkLR7XAnLMwZAdHXZ5p8gBbaaC+zlJ6Ou9iGpGZwg==" + }, + { + "href": "lib/angularjs-slider/demo/index.html", + "size": 14916, + "integrity": "sha256-b4CIGIN6EmZZ6fQQKGAHNZMQbCD3LLUklAEyV2osIkQ= sha384-XFmOswWei2KGJOKloFXZFVNREPZm17LIJiR/6kf4pe3OIZiTBzulCK5G6RxaVT4H sha512-XifE/uni15unQZtmoj+tjbuLlW+5oVu9gr5ErB9Xx7ruvt5rk7ddhwtjgrYcSDTi9MJl5S9+z7wDOuHRWZjt+Q==" + }, + { + "href": "lib/angularjs-slider/demo/sliderModal.html", + "size": 977, + "integrity": "sha256-nkpgfoltp6X4N4S5Y5HWjrABRvUyc8rE22666DYirm8= sha384-cdJ6ZNCldXfK/r/ofOdCq77bZcKVrNTB6+m74WH9dYO9UFz5yX20a0ySALyxdp2j sha512-ZBtxoLi4eq63gS7JhOxPGFBDevvOBSIo7qGAqhIseF0OlWE66S2+TCAfueA3TFT0GT6cpD2E1zniGcn/hzNVXA==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.css", + "size": 14228, + "integrity": "sha256-y55k6s/BtONDzCU9ohs9SBTZKFfiKf83pI9ChvNjXxs= sha384-ywXFgT2oeUvAm8nzdAsr9cxlbr5pevw9Sn5fY0lFwjtQd3AZzY1p85Uns6Y55qgd sha512-b8Wk9ngdjBQdXwqSEziV9fI7njjQSeRTVTSD2mA6EaYdcXuSinFc0YkZEksdxFa3X8r/kcHyrOCIFs2rwiwXDw==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.d.ts", + "size": 15816, + "integrity": "sha256-IXsxVQVc4p+WuFRm99semoz/vuP1rx738msJuxx/d2o= sha384-CIJP55y1/tb/n//2c1VKiSm0VZCIqZ8tV0FbdjiwZEoqnTohICTcDuwAn3vfKNC9 sha512-CcQk04Vku9nI03pIOpFr4G2Ey3phSmTKp4TeZGN9Uu9Dxs/ZSqktMiLuEVzylmm80/HygZBT/qr5wZEjCeR2gA==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.js", + "size": 90316, + "integrity": "sha256-BjsnPhOA19g0qInUiOUUb6rz8K1ykpPsDR+0JmppnE8= sha384-tJRwsv9usRNbWDExiGOnecZ9KIOj1B5HfH/rC63q0e6LQeNvAW8ynn5Bfo/2EfyA sha512-rjrhwSyjxhRw0fDOH9j0LCCiWwYFWRww8BWXErlRCKaE7eCeDLcxFiBbvgLnzKM8InqYjMLs1FGynR7R0KGsoQ==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.min.css", + "size": 3860, + "integrity": "sha256-Sm6x8tzFHmqJZ5Q0rls+aQx2hNQi5DySaqaCrmiG57U= sha384-OtuXHjakQCJv5ZttDB09I9sZLjuqkeHaN0WdrLB/hkBX4VCPxZDlX25uX70+ftnI sha512-gUF9Spj2GYGjdueXwhX50dVi7ndlzBMGKEVZlGnXlqnM5TUdKhp9Nuv77XtRS/2UIQ/qp0Nm34oPGGNnfR5aqA==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.min.js", + "size": 37457, + "integrity": "sha256-fwM9OLO+1iRTJf/THDksogy/oyUzRWkBxfo9bx0Jgnc= sha384-+enexJyEKaLEM/Culwnxf6BnwTI6VY4d0TFfT1cdSnA5tVBSc/EzJPBxd6x19hXc sha512-Y+tX2S/DR3Fy77p+t2fzDdYTm6is1j6bK8HSi465npxjW2qFzd4VlDU+G6GqqDO3q6ePTzRy+wL3C9EVZI/Htg==" + }, + { + "href": "lib/angularjs-slider/dist/rzslider.scss", + "size": 14228, + "integrity": "sha256-y55k6s/BtONDzCU9ohs9SBTZKFfiKf83pI9ChvNjXxs= sha384-ywXFgT2oeUvAm8nzdAsr9cxlbr5pevw9Sn5fY0lFwjtQd3AZzY1p85Uns6Y55qgd sha512-b8Wk9ngdjBQdXwqSEziV9fI7njjQSeRTVTSD2mA6EaYdcXuSinFc0YkZEksdxFa3X8r/kcHyrOCIFs2rwiwXDw==" + }, + { + "href": "lib/angularjs-slider/src/rzSliderTpl.html", + "size": 2054, + "integrity": "sha256-erxo0I/m9rgc0GJz2VW9kE9px9Dh8ZvnEcqBjj6gwss= sha384-+fr2llUdKI/PwBlAOkvBIR/g0FpWbLehV5einv80LdQais1I3D5Uuc9zG056Bfwo sha512-5sCQ0H65EqZADv7zrvvqA3igO848dOnfqe6cJoGq2atiFMmG3lrLBRl75qaMTk80qgsR/FV3LuSWyxy5pj2HXQ==" + }, + { + "href": "lib/angularjs-slider/src/rzslider.js", + "size": 88588, + "integrity": "sha256-pWpaq03nrbY3pFzLt0FVFAd4jfdvc6K+Yq1cvuzU800= sha384-Oj5isWVx0vGBTaV/fpUET7TfJPyX6NekGGSKTESVwp/1Fne3hSuSzskWY4ipKXcw sha512-1lU9stnyMq0SfMVECEfJBn0Fl+tghz1xNvuHMs4pp98la6Cyejd/1vTDEexzYwqNE4lpvW9oe4RLpkJfZzSdmw==" + }, + { + "href": "lib/angularjs-slider/src/rzslider.less", + "size": 5395, + "integrity": "sha256-o7/UnDSD9H/ZXS2wnSlsTXU4SZu47Zv+bpCIlKCSx4c= sha384-X+/uSe2YIiysRRF7VpIz6OzTYV4PiDvC2Ouax4onXcDY/Eqii9amTAV3pK8hYHuV sha512-JBQSHH63OiKLSdDOkCNWNsI87jiBwJZKkzCd6RAMk4G51H4bSCRBkWSlYNVVOCuB08UqhfcPlESh15K9HFktHA==" + }, + { + "href": "lib/angularjs-slider/src/variables.less", + "size": 822, + "integrity": "sha256-mT0/whpCNpSP0IflL8bxosGDV7K9h5JKZQaKwzFiNr4= sha384-QaLa+0jL75f2LKCtIlqExRTJi91AIxNVihUbWg4dfLU1KRCFJmlLzfBfFpmccXh1 sha512-Bcm9f3XNExG4iRxIKViW8E0S7kqfBsSnXGTze/T2hQVcnP3oVBgMga0mfYjmFyH/hW4OkXyjRWeP4QhMuIVWaQ==" + }, + { + "href": "lib/animate.css/source/_base.css", + "size": 760, + "integrity": "sha256-T6rY8dP1VmdMNp6UN+gOaR+nfXwn8//VPz6I9OsXljo= sha384-o04dgn1HMglTMs6TQQIunacWBNm/MpZMVTDYi6Ut/zVgGb0GIwGCmQPkg97YvKaM sha512-o7RriBJ9yUcS7uGBlvwLUbyaqjLtwnzZQiPZZjtjH8Jxzz7GmN7I8Sgz0oD6B6DZ2JdJGKIXYtLIJwqm1PnXGA==" + }, + { + "href": "lib/bottleneck/lib/Batcher.js", + "size": 1282, + "integrity": "sha256-0Gk3AkzufiqHsj45cjFU6hXKOShlGnuf1CFP98KlscI= sha384-7yydfujM0IT4CZhaY74UsmK/ddXdGwnjSOPIEqGnFqNtzT0k2hUwOwua/vaBlCbh sha512-yWI0futuphLbygMaIiKYCSBszm4mYPi2jgk2lKqHxHn5y8XLiiv5bH/rlmdOcASXZz67K6W5YA/SpMAOE8fqlA==" + }, + { + "href": "lib/bottleneck/lib/Bottleneck.js", + "size": 18041, + "integrity": "sha256-3oI3vpP1QQ6FGd9jHxBQPTvkdmJeHdtm7hbSQkhjsP4= sha384-qpEC7JzOT9w/Q6JYRFu8mdhtkYimB4wP3yFmJPkO5VgJ9xtCk9XDatfm+HLalDMF sha512-C7p7jUu3J3reuzSd8tf2Lm3rcjKtfV2pTDkoS2xwjquyXxsTT8CogdcOAwS09BGSivt9whaPeAylK9pqCKnflg==" + }, + { + "href": "lib/bottleneck/lib/BottleneckError.js", + "size": 127, + "integrity": "sha256-SMi8As4Fc3sFrOJkLPKrITcdd1PhD/uqW8Yk1gX58zg= sha384-4mHhlXS7GUEX+1cM/8YWnRJSsm09BHs5EoUGa9hhCJCVZdPcNbUYp7QvpGKTAS8Q sha512-//N/HqwVxaFx98Y1ctLvG/4SZ1EToLH5ztrJOAGOP40dkibhZSqTsRb0pJ3XmfocggFiZoLUS0qCX3c2fD2MqQ==" + }, + { + "href": "lib/bottleneck/lib/DLList.js", + "size": 1775, + "integrity": "sha256-2SmcISRsTl/CNxlDqD+xyG2LbEyhRPh7O605Sl/jJ6I= sha384-L/6SAeUJsSXyVPKbYrqsaxCmMCGB2bgodYY4H0UheIOxf8jCK83b8RMqLq5ieKbA sha512-NFQ6QJk7ZRxl1TFid3hr68cUBwPNQAT5lV1NE7q/ipY6PpjiQhyq+EIPmK23CdHvLsBoIQifvyFuBQljVDPk4w==" + }, + { + "href": "lib/bottleneck/lib/Events.js", + "size": 3471, + "integrity": "sha256-CqWOpzrTywa6Q8Em8/TU8oKYoaSjUQo2S9/xkYOrOfQ= sha384-td43l7S8r6x7WLYVpEG1kt/7mJrmH/Ml9ZF0Pok9LQhG7yZRkWH+74C/oLUMRPB3 sha512-+Yq92F4b+OHiaZscYu8cTbTqHKlY/OGTMjuM3GtvLyLeo+9ebSNLdkoiENeaHnn6WbKDkuZ6yXXVU3xfcmeboQ==" + }, + { + "href": "lib/bottleneck/lib/Group.js", + "size": 6132, + "integrity": "sha256-kJ2sxYfX20wsWq6fGKZXYbp/FFOsHo10iSJTrvu1TTc= sha384-hNrBU/LOc3nhGZxPF22e8mEojTqXFmRD5idyCuP+XQGgovD8wezaX9Xe7pA3CWgI sha512-prCnioc/eJ5AnUN/3BfthX4yaHs4fXFTFgQaG+fOzcqeLCM1SMQOM8nQ7vy7oRxomnlszHGFwauNbi2MuxfTwA==" + }, + { + "href": "lib/bottleneck/lib/IORedisConnection.js", + "size": 6036, + "integrity": "sha256-F6Y/xn5+LYPGpkA1jG115OFEkAK+s07NSHRFoGubzVg= sha384-yrpPreIJVnQY45D0CAS7dh4srr3KnEYdYHR0S8OPInIOTBVI0cgnkLmAqeg7/xCg sha512-67V/CvInV6WHUcIOIgLJ/6UsUCDQAhVhi2VW1RUaqgadjXCELcYErV8BPd31TK5GA10C1RW/ewE2RqANSY1TJg==" + }, + { + "href": "lib/bottleneck/lib/Job.js", + "size": 5878, + "integrity": "sha256-dFUUKduwVvqLQ0HqFgBs2KKkdTMMS/296FSeRtrxhoE= sha384-JHBqPrGAbK4HmncUjatP9j9auGpJVONWA4X+MNm8RJGYoTiHEPwi6ItXd12YzM8B sha512-c4ur1FNfpTT/DnKRE8XdoQhZyqCybkCrwYw/nR9fPXtIN/qzsk83kYfHV4oTw38fchXJxww/pF9kkEu6XzjUDA==" + }, + { + "href": "lib/bottleneck/lib/LocalDatastore.js", + "size": 8422, + "integrity": "sha256-IO3ntrng/agop5dDZLvJnz7ECUY+5FZyGMdd7Bkkwg0= sha384-du/4lruh/KRDeYY2WLlZIYknb5GaGH5cLBOSHcIDXTNW3VaQuuM5fek4SqqmZ0SO sha512-UPeV07nvOCfFM7Abpci9jWXZV5rdjdv6qH1xAf0qGgBmMDipF9VuNQlHFL+Mfxsoa1CSuMICO+u63JGcM4uLnQ==" + }, + { + "href": "lib/bottleneck/lib/Queues.js", + "size": 1473, + "integrity": "sha256-NliiKnEY2RplsMIGBAa8RliAJZwLHcikra/jB2PXYU8= sha384-ITIrqwWf4pgVfnVD14biKQLoXd5bSE6iN8c+EEV2DMnSsGzQI+oacneT64Fbl+tW sha512-QfnarE3Hd5u3sCN6RU0tceFPw+KSGdTboYTgFFX4TDIP9toykJe5fUliq8znIS37yYuMflPvIGmnXqGmkjiUYw==" + }, + { + "href": "lib/bottleneck/lib/RedisConnection.js", + "size": 5734, + "integrity": "sha256-yBf7cLSXzLhaZqW0z//E9+sv1+qDzGomrY/ghbWL4nA= sha384-uW5BVExFJaO4rCPh8vW+pH9jW0nYljLQpa6F4DkmmFse3xk5d2LxS2Gjhcqo+loJ sha512-XHz4LGxfLBIdVhTlGO1l6m9s1kVFeinpF+U8DaGhkN2N1GsA7H+KyGS+CNe80MrkEuBDQBBqDdOZ8WF6v9GbxA==" + }, + { + "href": "lib/bottleneck/lib/RedisDatastore.js", + "size": 11377, + "integrity": "sha256-e3+AtT9SaDm2yTykUnGpO9HI2+zONVT7ziXkmUZ4ABE= sha384-/Bq47hep4LcnG/mImXBxEFzprZ3XdOmLhT2c7SXf2Qyvyl3PnlGINhgYApe32gnf sha512-O6ZDerZgwlIPRhcHjWYxIXqRJitDRF8E5S3CJUdMyWX8rRkAVcgee07tCvRmulCWby4tNe6QcxNvms6VVs1GpA==" + }, + { + "href": "lib/bottleneck/lib/Scripts.js", + "size": 3943, + "integrity": "sha256-hKGvCwCgLOiQ3CLiM5LzaKKWAIzSiiYq1bxv5FDjAco= sha384-r1buCkq6V04ktgELLAfOPttenR24F8Rv7/+ztCZTlJKY/s/i0X/QXFVdzyZ9YbhF sha512-qAdA1LqgGgmKbrqjrzA35cwwt+Ox6+AAIb7KL5TOw61Kh5nBr+HzbvWDxGth2UpCEtEiqc1ox1WSuu7Vmuy/wQ==" + }, + { + "href": "lib/bottleneck/lib/States.js", + "size": 1668, + "integrity": "sha256-6PlxzfMVT6Px58en3eFJ85uuH7bj7Wt5MlYVzHf7Fiw= sha384-HS52JYnvBYB3/+mDT6LnruQtUQoIE+Ng0Na5TA7XNKoo0rde/E9SNexO//x1p4Wo sha512-cVEd0Ds1XunZIP98s8xy8WUTHizYQ+kwLUt1Xtnq6Bg0YpydfiB9J/fx9cXSaELopfMWu8jPJ2fvC2d/W3kMNQ==" + }, + { + "href": "lib/bottleneck/lib/Sync.js", + "size": 2282, + "integrity": "sha256-tVZroOVrfZ74utCCOWAO0tHBTLzBpO5NfK6lvB9035o= sha384-h+PGahkuT3+INJp0gKYJGclipNfgP6XCQGGSJd3YuOdTcK30tilmB5ET2imkEG5Q sha512-XB08Mh6cffzBp1Vq6oax3cBTm1kN3Un7ttSLso7TVO6cY5nn978xkkm1ny8OPFFyxLvI5LCyQIwQDcivPWj5oQ==" + }, + { + "href": "lib/bottleneck/lib/es5.js", + "size": 97, + "integrity": "sha256-kpHaJzqkD/+drXZOHO9teUkisFeMWpFLtnfIEq1pOp0= sha384-Fwar/Gg4yv1hZJ+a20oZuonNnl9svOWiICxvURkdzge+cNrF5/h8eFPxvzz0+1GU sha512-7ysumPdOkmiaUANfFZJ2NBghXsdYCZYxQJKy19k7zWVj+48lKdBpNAhWQ0uOS1xgufHaEBk7ShNTCY+jkNLKaw==" + }, + { + "href": "lib/bottleneck/lib/index.js", + "size": 56, + "integrity": "sha256-l66z+FtJ0xeSuDMF1ydf7UbhOsOKHkr7DdgNPKcWBoY= sha384-jLNWmSOZ/Xsz1OP9p9imhjyE/H8E4l17OvVz8mPXUrN59Pjkq5endgs1doXbDJGI sha512-MP2fIm2VGdsJEamI+RqLk4OwHe/10fYvCUuGpKjA7842vFHPtnwBtzlKzOgbb0seIuE/62nujPVgLhB4AdbcLQ==" + }, + { + "href": "lib/bottleneck/lib/lua.json", + "size": 18619, + "integrity": "sha256-iimGt/m0A9wzdptOddUH7YtuxVB4biyFvf0EHJImfWc= sha384-oar9FO/axtgZ659ONjnurdEo3K/HzojGbhesBwTrr9NReSMrj/psL5Rr6YlrdMaX sha512-hznK91SJVYNig7eA0Zy/1WuHs4T1Nk9ThhG+WmIQSTEt/W8JgvI49jOGZHzm0vn/y5Mf/pfhPWRszEecCYNQ8g==" + }, + { + "href": "lib/bottleneck/lib/parser.js", + "size": 416, + "integrity": "sha256-eDUq0LgQHvQ+a6VpYnx7B0hGa8Ka+Hg40FMNg+lqFPA= sha384-3FqfgE/ET/qmW88wNWWFzjQtiMIqQU1pi/A86bw/TnZdSYCYS9S+F8DcMvVJvokE sha512-8ApNv0CgqhbuUDUtzOJQahaMyaYB3L1K3J8z03ZMwxxpiafdonKZA5w5HwmDDCEY4lFehWtQzjqBASyKovmrNg==" + }, + { + "href": "lib/bottleneck/lib/version.json", + "size": 21, + "integrity": "sha256-QzdFTZ0WvjBvWVA8KHy5ZHNi72lEYPWxMip35soke6A= sha384-BMcwR72b1B5DpTy6xdiiqywQUrvntBQ0vVPOrRgIXCKvbpPTb0RSIzI3/0Rkih1X sha512-vfmQuT3ZJeDB0EqaYGE5hdEWmkMhPUiuKNqrFKRG1MhuW6+xkPEzwFt3JgvNh5WXX3E6kS1DYvGukplHT0CQ0A==" + }, + { + "href": "lib/bottleneck/scripts/assemble_lua.js", + "size": 571, + "integrity": "sha256-m2BbM0qSsfeIDYhpjPa8p06UJ0p8lXvoGSaH/VF80tc= sha384-paknFPHqy8U5e+nDUAokx6cj6NS9jg1ad0JRU+dCHG1R3poMprfu5C87EzsUyU/1 sha512-nY6m3G7pJL3/KjrkxG/I4DoaEA4nDlmZSqZKuY9f8BsmyHoFHRdzn7ITR94Hb/KaQOwmken+sjZJW+PCWI3bMA==" + }, + { + "href": "lib/bottleneck/scripts/build.sh", + "size": 1421, + "integrity": "sha256-MbzT6Szy2Tqb8EUsWHLJBC0i1pn5V1NhW+VirhaedJM= sha384-YwQu9XxmBl19lNg4VgUPQqnan+uPJIwhAJjIfBYmuARatz8soVg7RBol5ourUxKy sha512-f9yZDMOPboOZP6KiwepmP6mCfyAx5ASPFtTLC8DRNN0aXL2x4bPXH9Olt5eKPv0RUjbe2cFQZ4HeVZ/2OqaOng==" + }, + { + "href": "lib/bottleneck/scripts/test_all.sh", + "size": 260, + "integrity": "sha256-k07j6ZDhdw+BPwo3sU85UQQkxC7Ie6JqO1nEbe6Mw5c= sha384-PrN8g5qjZ9vLcbig3eTD0zI6Mx9vvk143jCbCpXSl2GJm/prXelPKWz0Hm3fSMr/ sha512-0J1Mmm3APAYKsiWuyKQnHPaTsXVMdidS3xfKmt6pbjFktjt+AEN7r0zYEmnb7vubVSy/900+OMx0Ds6Bpshb1A==" + }, + { + "href": "lib/bottleneck/scripts/version.js", + "size": 108, + "integrity": "sha256-6MV45+E8wWaATBc4dFpcX7cUKdIm7e1njRn4LYoSZx0= sha384-X23hATQW3Sk57zNmgX8US5FfF50cC8E5wjMo+5BllioohJbOu+lc9c16oUw9vWk9 sha512-ckePqVenIiTwvYhNK13UofOIMGS+iOxJH05W3mf6M5Ibao3EhL5PdGvqvELpCwrA/m9JTuLKQQZcT4x9hjAAig==" + }, + { + "href": "lib/bottleneck/src/Batcher.coffee", + "size": 792, + "integrity": "sha256-kOgcgNYKYZli5T5bgZZ+gp1H3m3ZicslPdlvt62f+Hw= sha384-v4DKTeEubY+3cuw5ykUXkp8I4433TvuIcDvs+fh7msMgMcWK0L3mp3p2PgSg+pFQ sha512-SYw70/NU5gXw5hkckNu7QS/UrXpGWBQlRHTg0JLpn46hp60jACrtRJsCT2I7Tz1cJbMCY+QVP0VBoDV+BI4RNg==" + }, + { + "href": "lib/bottleneck/src/Bottleneck.coffee", + "size": 10255, + "integrity": "sha256-HJQ+8R23LVseIUcB3funcUGvz21LlQ6zeCZ30HDng04= sha384-JquQKZTQxU40SLUO9Sw7lEFgJpQY1XjRfZWZ5JAYqQ2N/kqhZI4/0KEo225N2VuP sha512-MvXdd7meoaR9xu7CmgYuwEdrXGANfbKtfr/BPnAZqYt2Hry50gbAv+vGPGamEmy2O4QYMGXffq16R7p+CrDv9A==" + }, + { + "href": "lib/bottleneck/src/BottleneckError.coffee", + "size": 70, + "integrity": "sha256-z6SsMGvVMw7RkpiRTtbhCpKYzXRbVVYlFhfk8gRjJ2Y= sha384-O5RxlXb2PBv7yqZJnn6OgeJC9l6a4bQbLBSEcpTu1HSVnkF9bd/ZdLREOP3vASYR sha512-yr3mqwrO16wFovC6uGePwXamCU7IofEj6X0oHXTHoMxNFDA8Xx4RY1UoMbM3W35uDfIuyb9062Wwh7y1gvfbFw==" + }, + { + "href": "lib/bottleneck/src/DLList.coffee", + "size": 941, + "integrity": "sha256-AdNGkWSLINhVuGtDORRJKY0FokqEDk2bKWUKjkU6gFs= sha384-EjUNALNJTxgb9I0sNYa0hiSO/Hu8kSfmTNmOPaCPig86KkEl+DB40a4x8QNB4g14 sha512-m1M4990wDmD5ZiynKYzX7foPFfiB55r3w8ZS+gGvkluP2E4vVz7L80IDRvStMa27hZsrrZp/WJsJSNRceDXWvg==" + }, + { + "href": "lib/bottleneck/src/Events.coffee", + "size": 1444, + "integrity": "sha256-Y8qXUWDzdf6o6g/yd+unXKuQY5wKAp4eH8cXRZJpcxU= sha384-2p92aHOP8YIf040R+AcR0AgeRn2jY5R4ECLFsycLPe/DhaIbrg7YoJiIqnOA8mLQ sha512-m38WonGV7RCmKCIfyQ+75OHJoeOZPRktuzn5r26+EBTGUhmC55Ru/UjcXdEtq/77+BkUAWOiUiIzpt8p0m7mmQ==" + }, + { + "href": "lib/bottleneck/src/Group.coffee", + "size": 2440, + "integrity": "sha256-PpztHn7puHNBljYPjxs7Lbv/Rze/QQCXfhmn2yaMjyU= sha384-n2OW1/tm5EEiO0xgs7KHqBj6vLEjPsEF+rb266jC/dZYhrvgNLLzh53o+XChGdFZ sha512-GES0/gG1pGhJXkZUictxgsxMQ5N9NuBAw9zVHcQ48S3BssmkaKuBHJFqeOZzIhaeLUSFqtk4MzVsu2gnYmrwBA==" + }, + { + "href": "lib/bottleneck/src/IORedisConnection.coffee", + "size": 2719, + "integrity": "sha256-MXCCAI6u8pDBVyquyAyvqSmL5vd0IjgmL2UMLRyOdMY= sha384-yh3gUm/JD/FnsfHL5WsLGfzM8mjzYBZJrQfBkoyG6s/XBOxElqs6jyuFRUqSij6S sha512-7Udd7Xi/EFabDofRqJAh/Fd0R5k4XCwmvbYPwdx28p9N7QZFXJrxw0mn8yUEfpBLQ9vcsYqQQ49uQBnFHaoNAg==" + }, + { + "href": "lib/bottleneck/src/Job.coffee", + "size": 3425, + "integrity": "sha256-GzGG1G+Txv2pwbuSmd0FSz7IU/ZFwmr6VJcbPZ/32iY= sha384-qc7OgUezmH5f7YQNcCGaHaCUGXQ03uV/yHsx1eMB6qaDJGtYi5IZdUG+qeh0ODwq sha512-DRo9I2g+wDLYTCYsF8SK/2oysMsGWmzdW7+rRozqZh73aMHb5Enk2TCHBHEfhf3kun0ZUtKj+nadXDMl0OyI8w==" + }, + { + "href": "lib/bottleneck/src/LocalDatastore.coffee", + "size": 4712, + "integrity": "sha256-5ARnNO3VfTQa5S9wlYig1IgdP2YJ4ZACJ0EJ2P66XjY= sha384-2dOfFCkwV6hIKneLfHE5gAAmPfINb7zL1y1/alVcyf1lTjl2RNLrKtbF/Ts0uR84 sha512-r+wis0oLLpod/W6xkE4liqqXI1kB387QOhIgAJbXRsoUvg+Xg9guDyHdqsy5i5FCQkf8krL3XZ+V8wMZIagt+A==" + }, + { + "href": "lib/bottleneck/src/Queues.coffee", + "size": 765, + "integrity": "sha256-fDmyBZnuew28cJYDG9oC9KhmTnk3F9qigmV1TCcBOHY= sha384-ezTq/7b3p0llWTr6dG5Jv/g7Z78Kmcbl1X+q+xvOp8lCKfzPoezm5qXvVoobsluZ sha512-9R/ibFj4VBmuU2xb4PCR3EsRbSbffLnPyMDST7/JzR1AyI+HU9aZfJooKYBAqklu5Kcf0e/7zlbhVBQ5pmaCqg==" + }, + { + "href": "lib/bottleneck/src/RedisConnection.coffee", + "size": 2985, + "integrity": "sha256-ldWg/Wv4ES6VbjYlimvxaP671rnjKqF9Plb7yjfw6Do= sha384-EDU6n3pieZsNHt54JfS+UtZRXxDWXA0p73U4S2vBoBuUXmXs8Oj6CKy496E6Bbye sha512-C2XIexd8m6ilZuPvTEtpa1ZZqrZTwKvGOz8AqOz7zQC+eobnuqiy8i2MH3bjRXSYWMHWw2PW4II08FKZg1avdA==" + }, + { + "href": "lib/bottleneck/src/RedisDatastore.coffee", + "size": 5934, + "integrity": "sha256-NYNsvwYQEZ3GwwAOKJFrB+czFo/k7T7z0TgdvX/xFr4= sha384-VviVfpc2IMrjwVA36jRRiK69CuHylUf1CHVjIP4sICTnaLgXYXikRqehzy4vwq9B sha512-p/kaEhVUf1qQ3vbdf7cIM+3w8ncOqhm7oXSgzQTAmJxSPixDZwU6aLeC7FKZ/uKupCqd3akXz4iZ4e5ccrD33g==" + }, + { + "href": "lib/bottleneck/src/Scripts.coffee", + "size": 3674, + "integrity": "sha256-s0DTtk3m8PQcYKmO9EFlXFbu8Aqc0ISomoVP76AjVJE= sha384-iuiEgJsaOs3t1cJDqC/DalvAkWgpf3dq+OspE9x38M4mp2s5pVwOSpGrC4XExvdH sha512-zwD1mI31jtw5aRFDpzwKYaE+vZfXEqxANeXipJ75h1n9S6iYB9PAYMdExUrxD1HigDx0b06baBmRnuJdmGvqTQ==" + }, + { + "href": "lib/bottleneck/src/States.coffee", + "size": 985, + "integrity": "sha256-qmnhi3hi1SCA9roig5I10JLOoFom2F93uK8Ar3ugwgo= sha384-y9AJOa7FurA3NebvCU+jjlswUiA3IVzUfagqMMDWzIyj4v/D9bxw8gS/0YvFogLX sha512-M3BXDkR2vUCsgD7FJegHtZ5U6i3kSqpUBhsoXEt2JNPabGHMGFGa/6EDzRRZ2w388N9OpvbknVxRLQia6JO9ag==" + }, + { + "href": "lib/bottleneck/src/Sync.coffee", + "size": 725, + "integrity": "sha256-mM+wkAXTQI5M/dbqO45Ghdcryde7ZMJWpep1s7DaJdk= sha384-mqyy/liEBEKXdZSzvPlmCF7WEF11MhWbut6mHF7Z3SklPlCjCKoLGc1+w9JY+aVS sha512-jF/9ot9BTm6EUCOCT5GL40HBodbCi5ay27FKeFS1wMsU3uB7vZLRJb+peDpJGDkCZ4S9Ni4+H0UKCgL8t0hOlQ==" + }, + { + "href": "lib/bottleneck/src/es5.coffee", + "size": 80, + "integrity": "sha256-FwbUcmaiR8uWupcDZqSTKWa/SdV1GprR5gT6vdQo4A4= sha384-RAhumDRe85Qpq12r5RZrv3Q9Bgl3N2LF/IIP/NMWy8tDdmQdpW2/JK9siwsheOgO sha512-3fgxVjdk1mk+wRq1EdY4NzisVJnqJghUa3ql+dv0t4pdJoq1GT+iQJu5mQ2qzOf3F44i5Agu0ilCIK8FQ3anRQ==" + }, + { + "href": "lib/bottleneck/src/index.coffee", + "size": 40, + "integrity": "sha256-Cw7hJOIm5gezs1G1jwzyl7iHQsR/7NrtgQhyesn5Uq8= sha384-28gakGyY+nGIe6ODsd1IISfepf6LQ7YaW0+4Nu0y4OVK8E21ts1HKa9EKPOwxIUU sha512-bnliv96hssP0OHXzVidpZZq6XXpgCQdXvJhdrLnf91niKfz7UuBi7AA/3tW+lDCgnKpSQkcDcOMs0Q5tmpVKLQ==" + }, + { + "href": "lib/bottleneck/src/parser.coffee", + "size": 242, + "integrity": "sha256-SNgZ4YECzWM8WlUEFBDCDHhL4g+tQo3ZKilB6ZpqDRs= sha384-79LS1Pc9DvisbK+PstjedjThIGXF0fuJf/FOFVLBl1/b00Uyvkyxxnd9bt0tnHRw sha512-nACTVfMGIdJZ5ZyLDk+9XjjeTev5wOQFfrP/Qccwa8W96kJhm5ZJBGT1XtQjHOJ3YbqfPnLJGpk6+beIKbs8zQ==" + }, + { + "href": "lib/bottleneck/test/DLList.js", + "size": 3978, + "integrity": "sha256-XyAD2Hfbk+tVMtDagjCsDQlXMmKx5z5Qvo3/ZMNyo9A= sha384-DZUuFO1DdateHoMwLSfQ6CfcHzBbE9O/4N1t+2Hc7MlyjtEF2A4b53oPg0pKxtqF sha512-kyXVeI4Kn+5WzXgS05+PYE0jr0C6HQeZIDEkVYFksgRJIq2PyNFUiuwuPSiXNjUiHMTNKvTdglSALtnI3kPCeA==" + }, + { + "href": "lib/bottleneck/test/batcher.js", + "size": 5819, + "integrity": "sha256-zIfhhapeY5hN6JAyD+Hj0F+lVKJm+QniAWSqIRtwbNA= sha384-oH55gNlU5r3DnezQiBRx9hPjkyA0V3XjI6OPZX6OCEcV3SkfW+LcVfo2Zjamg1MZ sha512-xIg5qvH5Rdjo9HiJ/qsYYkOkYBKgPpwsBtFYB4p9BrgTcRyggfIYifx1pL4iRUESNUbDJx0uQYZBaVB0Gfow9w==" + }, + { + "href": "lib/bottleneck/test/bottleneck.js", + "size": 218, + "integrity": "sha256-9AoALkN2UZZF7w+1WyLclMUtxz2SyBygWDgru0H79yw= sha384-fLbyl3GPbh6UW2f7e76xeqC7rKxbZNyVSstdW+i0+t7Owa7Ved+yGtWIXMYU9dFX sha512-HnAk12sSzgcYU07nFulw/w54zzq7B56+wKM5unMype3dCs5XZylQqQ8cmPgLhmJCBMjL0zXqIQbE31//QdPx7A==" + }, + { + "href": "lib/bottleneck/test/cluster.js", + "size": 49655, + "integrity": "sha256-0+o+Zs+9xZvn6fMAk8LjvbYslpVDUDcChIX6YkNkDik= sha384-MRTMeuOo6E2QdSscfFxpxS8peFt9S4yobAIC8SvxwmZulW2Vuz0B9HQ+ztaqf51l sha512-Y9nOnW3uXQ57GFFiWVp0l+4X9Ina7gA2ekiihkKCagBgNvG9ggf2mxUFUcPkfrD2hMT1mXCPcs4sRHSgkx7Egg==" + }, + { + "href": "lib/bottleneck/test/context.js", + "size": 4630, + "integrity": "sha256-KalIO6Ew2/oF2pRKkmeKJL1UAjrBkxWqe+a7OAMTQyA= sha384-zjPTxybbf0Z/kdhpZ4wyl2vmGzfk17TD6uUBz7j0KTRCdzk35GEGyoVsVO89jfD/ sha512-eZ7YFtetoFRhuADOukxYEGW5Rz+kxDOYgZjBU9t+NRkauRqJ0b14GRQteC8V45VWBNYvFB1NUbYhcnycHEH6dA==" + }, + { + "href": "lib/bottleneck/test/general.js", + "size": 30147, + "integrity": "sha256-QpzyA/ScQtPszEAkVFA0EffoydrBTWblB8d9w1NtpNw= sha384-rR9y3luXOObvEqDwVZaEJnH1IObEZkvYJlf0EoyYtVoUo+TvipItmHxeos9QPzeB sha512-WCEzwZ/MbHMR6SASAYXX88CNGzfqbJb+iDoUuhIe7FILBQvB3DenTPWbirhYbyqilPcrQpC/Fjg/z3txZrIABg==" + }, + { + "href": "lib/bottleneck/test/group.js", + "size": 6687, + "integrity": "sha256-RAE3l2uqCTzaJcpkXFzNHpttQ/MdA4bpYb7/P6NXKE8= sha384-mC+oRGPY9R0iR9SWkRN2++7/7n7nCJDjbODEYYenbbkw9+coO4QIKkcvO1q2Zn0c sha512-vIbpLaFZwHefZ7Ck+QY+fN0J9zn5TVsxzveWQlpjVP4LztyHfrdh+NF/5R3iHvPYSKGLkqfNb+CJnCPyFHGLzQ==" + }, + { + "href": "lib/bottleneck/test/ioredis.js", + "size": 3964, + "integrity": "sha256-dENZoZ8i8jZNPMomQSCog0eF/DdXBEkesUpwyuo1tjE= sha384-SR0gU5a7mFRLZ9Cp2V7cUu3RUx7VQdYic+o4DVDn7RaTBnluZb2wjdosf6mla/DB sha512-3Be4Q6uzF2OHGJprwuCIa0TjMt6eVJbod3Thir/w2ktzcTZMnrDRL8nAJAax3ascT3bnjoMjC7B6yVArqbuTCg==" + }, + { + "href": "lib/bottleneck/test/node_redis.js", + "size": 2899, + "integrity": "sha256-3hzTCEcWAG6xS/+DPURcfwlJbn948VFSqj8xSfNHRVw= sha384-wOqpeng7xzqwF3aq9VijFARX23MTpJO1WxwuFBXsC95GKefKxY3sS+pYqMqoAmre sha512-PiCFdq2is7wiZDeW7I0KCYQ2ukqdfJoiy+ISe21A9dsNq6SNzsUCPz30mLdy/IZ8KOyIgx9L8NI+ZZplLqbj8w==" + }, + { + "href": "lib/bottleneck/test/priority.js", + "size": 5736, + "integrity": "sha256-A8vdE3Qn8hAzHUD3drjkg4bxTpoTwqb1fQ8Rl884oec= sha384-x9n5O3v5UAg3o/9Gxe3JJJA9E2nvzr0cFQsRtJ2zl39sUrDVEuXJorimXSf9GlLP sha512-W62c0Wbka3nRqv10dKErtfZ5Esr+MCZ9DiZXNoDeKCNmzQzjLBS1JBXqbmN3+VpRuJzCb0dmv/JqwJFjPGmG0Q==" + }, + { + "href": "lib/bottleneck/test/promises.js", + "size": 5752, + "integrity": "sha256-PCnoRHJ1IhLOprulaIKdLtx/WlHy+czNrOg5VHOEwl8= sha384-ace7F6qniL0YakV7ezPOkgFhD/hZtF+yYFmjdjRPcbIEluLn/hDLh8OhxFLaVeIq sha512-q8N1xHPuc0wGUZ/hwc/ugMNpj1+UYe4SynrVrnJ7Y6wULm6VgWVyphCz7DiclvIWizrwUeEL5TmoMgR5vJp4Cw==" + }, + { + "href": "lib/bottleneck/test/retries.js", + "size": 6475, + "integrity": "sha256-9lR08qbNaG+ujnIYzFcjYa+AumWCZsIcnKtvLlKXj3s= sha384-qdUGdmBnOaLulzTARotgV7ekVTvSn68VhP1IzLXYuFsf+GNFpKyvBgLWTMq5eNxg sha512-SRGsqhs/19KD4THlgF+NGXKEDm3AiIaG4x7pKNti9tJfE1+NSzPYx6BK9nCgKKqftvmqZcsf/Z+efgfvkohYQQ==" + }, + { + "href": "lib/bottleneck/test/states.js", + "size": 2764, + "integrity": "sha256-uS8OaStXRm1kwJ2yC84bmDzSq2vOtW0WU2XVwqBq+dM= sha384-tFYM92cAM1/wPgmYw/ZBM3sLLIlSZ2RohwGrgI3R5oFCdcrT/Zt66KWT1KbH8q59 sha512-aNFrMXC2HqQJ4nn7h9uGKgtFIPW3gbA/HQboGeyB+2yGVZfNr7RRWgvr/TIzuFIsj9Undleqh9pgQXqo9QjKgQ==" + }, + { + "href": "lib/bottleneck/test/stop.js", + "size": 5789, + "integrity": "sha256-N38PK5cp+pteMaRz7qF2ogsOzOJXbJyGJRSFXDvst9I= sha384-XHiz3rdob2U7xrsASAcVOFOHDMWwM1cXId+opFAu4j+ylD5+RARlipir/2Bzup70 sha512-gND9e+2p+zi814rVc/MCg6h6pJEQCZu/BujEAnpG81tLHG1yFWzgSNtAymbPyS7tof0Q7TEQ2rUEQFI1urepDg==" + }, + { + "href": "lib/ionic/css/ionic.css", + "size": 252620, + "integrity": "sha256-hnhB1ujm+ggDICUmqnimDH7ROA9Tf+hcoCdZj3N6jiQ= sha384-CKAiJcPVy4sDXZYVoUQ4rrETBflp6HIRv+HXZoimMC3IfF47GeR5BfCmbT64fNCx sha512-AicAquQMgEfxGNyckhTziYhwKzTRJavjxwt8PExFoxyh0tz3KZtqLHIpBnicrDm43kh+i00bGJt5CoaiK2k7BQ==" + }, + { + "href": "lib/ionic/css/ionic.min.css", + "size": 200034, + "integrity": "sha256-Odwld6XTMcscU3xRkmsOIAeIij5IENuEjsyeyPC90/8= sha384-8ze5mnqNzj9TeGUl+lz9JP66YpojgLkTBv7rU7yci4kIdiJuwcmLITvkEp+0qq45 sha512-kj5ZPhy8pQuLP4U1ufk77rYQ0ulkuzkBvwfb5LMtL2pBM3OyYKc+l7JWmMNzbLjQ01PgILUBqk/GIyfrsUFBOw==" + }, + { + "href": "lib/ionic/fonts/ionicons.eot", + "size": 120724, + "integrity": "sha256-pIA9e960eKW5I4/nTYqqmNr+Lo5o/MvQ4/Tc7YI/J/A= sha384-/Zx7vdYfO/EvMfouJhw0JMQ+2iIfqdsVJuLN1w/kvh7PcMlmtAIOWVq+T6ZW9WPg sha512-pOdE4Neh4TWrrvP6VoXqNloRTEPg9hSk80xbDqDqEgH7Mcl/46ZrJtwDf3jcFYZN3rP1wh5A1NX1dTc4XgGWoQ==" + }, + { + "href": "lib/ionic/fonts/ionicons.svg", + "size": 333834, + "integrity": "sha256-pifZBowSNdmzyVxAXrbstkopCxWc9ekmwNltibJM1fw= sha384-uTC4qcWXRiQpuCCnfMqlT0Z0qu/uLId5akbbOyG9+Rxi/6Alqpkt6i2UCTQDV00M sha512-N8d+zK7KAOAFz1t3h6tS+xpFxaj8C54Xbl6vEvwIAImg5jT47ut/2itVyD3Pa3tqQCgbrQ7Z8kiWjocl5ie57w==" + }, + { + "href": "lib/ionic/fonts/ionicons.ttf", + "size": 188508, + "integrity": "sha256-K6fyCx2JkOF6R/49iOTHZmKKqiuvHdMPygoNtZg29fk= sha384-bxoX09gjlCz/MmUxVyAi/oX7k9U84XRAtp6rnrFcScxxY5d/IZ+Uavquy5rDdzF2 sha512-5h2ZCVQphh0zW38fpyDWPOOl54earQwCk3t6g2e4EH5Lh0Y3s/pPVZD48+WmitjDfWRubLMVgVr4uWLe4c8ndw==" + }, + { + "href": "lib/ionic/fonts/ionicons.woff", + "size": 67904, + "integrity": "sha256-cJ8nidqv9ECCDruXXTrkCa9FEhvexH456DUjSQsbwPw= sha384-QMbweUe3s7PrWtBof9XqNAl7WGbmdsTjpNiAy7EjAVXG4N7r4RzfWbuAJ1uWayHj sha512-t5aJhCKcx9R1YDNlS8Zs264pMyC6GXoS/pm1PLtAeoBF1NkcHRJeW7Tvh5X1545HXF1hYx708o5owBzGI/BTtg==" + }, + { + "href": "lib/ionic/js/ionic-angular.js", + "size": 459874, + "integrity": "sha256-nLZbixese7hoorptT93lwgzfH59Vw/m/HR5YQj5e24s= sha384-82g0lUJznuidjsh6w0dmHVEyCEkltp5MTEXA587WIC3n8VWiFwlsyJBcmrxO8qb7 sha512-WpHzzzbad1Rk1nZO8PyDvs0Er9vcio8CoTnwffHx6XatpJ7efRvaPMkiNyb2a9CD6MCmL1xc0hd4Lif7B7feTw==" + }, + { + "href": "lib/ionic/js/ionic-angular.min.js", + "size": 125363, + "integrity": "sha256-hkfxHDGLpJ5o0Jl/DdUnkMCr1PHrepMkTMTPu1J1Ro0= sha384-ck19NsZFZDCmthu6BdIRwxKpIJvUtpIypflXIStit/llrVu/xf0FbmZvMQ/702YS sha512-OZXzUEnWo3M7pdK9rrmkIivapC6StfLBy2HHkWlH61ogwEyjbG6RSZYxxffIiXNl40lzp+4kVP3/yg69wVNB+g==" + }, + { + "href": "lib/ionic/js/ionic.bundle.js", + "size": 2405986, + "integrity": "sha256-64zpN8zjXCf9UJrarKghwu1okuuGbeFIuNDeaePB3Nw= sha384-fx66IuHoVJid8JVOc210S6w5jhQVveFYDS477sMbqWrytEOQqcpvqpw+T9vSzFqN sha512-4lkB73HrpAfQk5XyIAGMPv5LtmwV1CFKd72n/2IhEmoeFH4lQmVhfZj950tE3AXUhIKMUPPmJ674NCyM/EY/TA==" + }, + { + "href": "lib/ionic/js/ionic.bundle.min.js", + "size": 509257, + "integrity": "sha256-nzZgP9agvRmgmHAnn9+BSJDyxr9TVZu23+WgrU893hM= sha384-erj4HzdRIzu3i/GCRPxgMnzh1Di2TUfhWTJe/Yfa0C95zRxp7ohXlfqfrbcZZmTC sha512-BFK1ZS3ya3P/ZSNoJWz0xTxqMwHmNlTS/DC7EM3vohLXaE9W8rorrQRmIqDKu6pzgG1mJ6DSrgfZ30wHGzN6tw==" + }, + { + "href": "lib/ionic/js/ionic.js", + "size": 471536, + "integrity": "sha256-oEO3AcmlkPuocutFS1e1UaMvq39KrGRMg1aMyUUbQZM= sha384-vmZ3Qgz9RjLSm3YEOFEGtOFwpltY7pgSWALzmgt6IZcyKzckN0MFBhzzFww3AIZf sha512-wbx0xY0Qs35Fci3uZ83XVymXjYExAtFev/5CfJfHfIJBE0mYp+a0Osdq5uFAffwZpBuQKmQoaUJkZWnDy44hQA==" + }, + { + "href": "lib/ionic/js/ionic.min.js", + "size": 167137, + "integrity": "sha256-e75BU9DuFqq8QzfFEK38bcsJeSluLw9nPlelo1zQe/w= sha384-C4JOA8i4iyHV70s7n3uePdDC/tSmUTqrHAd75/BWOvxWHaREs1XIkxBVuZcYywNy sha512-eTT7LkP6sSGP3eEbX9vb6k7NTujipJuoVQFILuVF8b9Y9/fjT1900sRdk+F5dkp1fg7eULadS1iBeSxRPpfsow==" + }, + { + "href": "lib/ionic/scss/_action-sheet.scss", + "size": 2815, + "integrity": "sha256-UBn6VDaqLs7j+QKFCGyzp1IhIYwF0pyi5qblXvYGLLk= sha384-O9xTbcbVt5FPldLYwThtFjqo/3vI/G95q9kaDxXp9U+VjlD561kI0K04X3s0PTEj sha512-23V71Jc7KwdVtHNcqru7nm/L5zgR04gXCwl0qgNAuuQlBE7PRlLXBfLSMko3vLCn2/Y3RfXOYIxSApUM4EZBtA==" + }, + { + "href": "lib/ionic/scss/_animations.scss", + "size": 1153, + "integrity": "sha256-LW8WhLFw2tP82MIULIRrM+NPIVFyUKU2ATM6+DMqv+A= sha384-8EtRRfuF+sghOWME4q1e2jzXuXOsMPXHKcHxMzZwcGRX6Lz2Nb6VbJUg7YY+shqD sha512-hInwG7+f7Hvxk6EYB5h2KnnFOoQ/Ni1pKsDb4lrtigZRqF3PhFtJ34S1tphnUikP50CkXpEOxgddeIfCB8/5/g==" + }, + { + "href": "lib/ionic/scss/_backdrop.scss", + "size": 354, + "integrity": "sha256-WMbI3zyAi6rVXwHYyBCGYhldtiDaXLuT57Uarkg85Bk= sha384-/ckFOhk/vB/e/4F89ZbMZpHiMeJPx3lfePLCKeu+UVn7KRJ/L0fIGo2c5WvAP4RM sha512-FxNVgXwWWU6vvlwOLrE++bpPa+faLLuKPdZg3q90hwwUp3DWlhgIKQiePIZ/7XX8ONs5daA3tPytqVMSTxa4iw==" + }, + { + "href": "lib/ionic/scss/_badge.scss", + "size": 1507, + "integrity": "sha256-Ze2aofLadl28gBFCwFzMM0eIxcXUlMS0Lu8ewPEkYuU= sha384-Au39tLyA5yJ+A0MdgaS7l6NZGKr2NazLBH+UjsTdh4exA+oHB3S/5KtIEZBnyYX7 sha512-YP4LlO2wvJi1i+il4zjF0/n2meT1KMW/X4JhxGTlxl22UADw2cF2L8AwsERFCU7OtpvzFPYJZCbKKUYL7XoFWg==" + }, + { + "href": "lib/ionic/scss/_bar.scss", + "size": 9986, + "integrity": "sha256-2+Ht32mz4chTJ02PgQXlN4YeXzWsmGNg7VaOlJslXss= sha384-bhTRR8Bhhf0YV3uWrylfe0uPFbqqzNJ8IAFuOysA7NQSkYfvzbZ6cWQdszBDZ+UF sha512-TDrZ44U4AmHOH3iMghIFVh6kiOCrzwU8NYW3NMxL9Svj/1s8Sa0CH5+9f8Mm7xqFm9IqWEHXZsedu2cX+SXrNQ==" + }, + { + "href": "lib/ionic/scss/_button-bar.scss", + "size": 1666, + "integrity": "sha256-OKz/CSOan0gZrdxzuhepFedaP8/agBhm9osGERLW3U4= sha384-OOmdgLJWzeSi82I05c1jXF/LBSMVAkJZUNGUY8PYwKVX0RD23hSX/5jXnpvbsy41 sha512-gDnF0koTDt/VrOmDH8xNvomAEzlxPcbmw4Z4i/GqjuZ/mL6IfoA+Bjv9s20bWL46/6RA3in93D1bSxLkpdTQgw==" + }, + { + "href": "lib/ionic/scss/_button.scss", + "size": 6440, + "integrity": "sha256-IaPy0O5g+j841R2CiN9x9PTMbQ0aYZ+WpDkt0Pt580o= sha384-okv3a9hwzmYY7WPDFetQXPrzgOwR8FZjepaDcxmBzxY0SggKAuKauXp7HIXnO5qZ sha512-yBoJCkHl+f/eBMnYroF5Es2ZT9dyhQMIwsDpQNknWiru6NqvL1M5Mazt74xwcN+CovoaZaR/nSrScRJ5e4GLlw==" + }, + { + "href": "lib/ionic/scss/_checkbox.scss", + "size": 4721, + "integrity": "sha256-NOwn8RdmKcp1/alYd7rd8AE1EdL64ZkIJ0PZ1eu6Ihg= sha384-nLgKTC3ECzZuXDvvtmFN5RArhQLdlXGLtERx60b8JqXVSVK8jmXrZ4oEYZ47n0Cn sha512-hgXYnbqG2i8/bRymlc/ccOa6/pfl3IE1nYfkqDce9MLNbAB804+Ui0156UuwOJmMoKcUwHlTB/IpZkQZKwaKpQ==" + }, + { + "href": "lib/ionic/scss/_form.scss", + "size": 6233, + "integrity": "sha256-dTfF/7J32KedXfUQpFqGPafDk+xp0KI9u/QLxcUFQ3o= sha384-5rlwG7IPY/QDHPCJJYeUizOn/IQco173UMGSRP3Im1pLa9m1IXcPulk8lYjPV07D sha512-0uP8HypJRZwpYveOFuH2z1O/CygKzFs3CR2L2ra1rb6uFC0g6XrSjMYbDf03v7kQOa4kc67k+34AOy2BEFmDrw==" + }, + { + "href": "lib/ionic/scss/_grid.scss", + "size": 3022, + "integrity": "sha256-YM8Nl07ja5bh0rIkYQt7gmwu1Z4jdfkZIwB+6D8gpwA= sha384-xe91FuNsPpoG6Nq5K72Uelb7weLQp6y4MSqQDQF129RNMPJPE6v0sBQEqxRwd0Iw sha512-r0zDNcyhExdePLT/MwO13B7MkT//A3euEjKSMDhGsP+8/vw9HzGWG5prqu+EE1cOpmsHrUPIbgTotSFuVKnKWg==" + }, + { + "href": "lib/ionic/scss/_items.scss", + "size": 19420, + "integrity": "sha256-A9+KdPvxW40xqTiky9jiNQ5PrLRj0iUDEXYHvNone/Y= sha384-Xh35q1LAJEfJpvJIw+OLIrMdI9TNDREm4jkPEjOYyElRaKqh+UAQIbQ8lfWKUBZy sha512-9i7EZRM+cWKB3XdNBM4xHN1ny2g+id2vcnhV3fzc/ktzujfNGTfu84/MVfZa5yTC44riIaIZpNvhvdGuBMSlrQ==" + }, + { + "href": "lib/ionic/scss/_list.scss", + "size": 2383, + "integrity": "sha256-C6x+bmhEzCuAqc/EZnUj3qsCCdqMNe/blMjJZDglONE= sha384-iZ2kyLZCS+jkGbcuanzEQxxjNuTBYQ5tcQwTdIJh9GWXN1oD5+YEj7euBVv+g4CY sha512-pj/MWE/FwvuFg39ktiPiVit5llWCz6nqXdUaoSzRctbeqQmyh1PYXy8M1iGYz5S0MbBjWNQSdgzipyUkNN+nNA==" + }, + { + "href": "lib/ionic/scss/_loading.scss", + "size": 852, + "integrity": "sha256-lKY0XqJLPMU9g4v3/Ef6cQzOx6OyskHSIp/Uz1IzpA0= sha384-RFDWnjb8t1KZz2QXgR089UsQikRe4uoeU7nnA2e3+NHpN4YUQegQIctwCJMCumpz sha512-uMOoV0OtYMNcDKr+WzyE3CMuRiIgBmrAkCdcnJCGYqU6m2KrEy/mz8Ik94r3g2MUPATLaYoXzHt0k2T68CONcQ==" + }, + { + "href": "lib/ionic/scss/_menu.scss", + "size": 1164, + "integrity": "sha256-yky+yt6Ox3pqYJokPPgufzMb9hr2U744gzIf7tozMHk= sha384-90AyiLBV8Rxur7rSCbuaoYXefMBhz9OEF1pKEqhU9/uxJdovrJFeBToIUI9/3eRY sha512-mcvmqV2X/rE/LnvE4cB8XVp0qXju0BOZblfIGusTc1ylsX+Wgz5Jdf7cPUeIP4dcwGk0E1cmwSUA3p2lMJPUkw==" + }, + { + "href": "lib/ionic/scss/_mixins.scss", + "size": 15708, + "integrity": "sha256-SrZ76l8swd9NvrJPmmwQXKJos4ileoYao33GaLPT/S8= sha384-CLsPJA8UnKk8XKhuYOq/FFL+U/8Yq53kR9AGRrzv9wiH/T/A4tCOKGGS0qZELLTC sha512-69tdPggCUEHlGTZ4yDtiJnlhlZTjVKGlA+v91DFjrA7s1ByabRjdzszyx7i+aWxZo//ImGNxHSVYblP9fFGCiA==" + }, + { + "href": "lib/ionic/scss/_modal.scss", + "size": 2129, + "integrity": "sha256-vbwfs+pq9woCupDIACqn9J8wwFa9j2bF4kMwr+UFw5A= sha384-tvO7HWDRk91VGYUkQ2hAV65cxjykwebKSl7g327KVRomNlOVdLeyewNH7QDklkmW sha512-lLyxaY3zq9M4QldnZRXpCpGn7P7cwNvIQ+d997fLnewtMxgp5Yh8hZMvyo7PydMdR322SAl3ffhmA4qH9vucnQ==" + }, + { + "href": "lib/ionic/scss/_platform.scss", + "size": 1929, + "integrity": "sha256-K1bmSQ8aqnJYWUNAtT0ASMnagRI1fw1oN022RvsT2PQ= sha384-u/R0evoG4NMe76Ne4q0fRVEFjDNCHx94igyWDq1mpu731bTroJ/2bQkbqkT5TKiK sha512-OLQK2uw95XxpoaKsICMRc2XkgloKrGQoIDAoQVAFjXWhCf3vkF1cJhEJo2jr42Ch2oazkwloCkBpC1rwsHK1/A==" + }, + { + "href": "lib/ionic/scss/_popover.scss", + "size": 3042, + "integrity": "sha256-6AEwpVrsz1jSl6HkwYzBBZgSn3/OWLIekbo5UF8B/nA= sha384-2/jbvBysO76bmXkECjYqaA5Joy3T3M/0GtejoPzv16DntxTlO1FyZIbXpU0XiEp3 sha512-ZOxnMP0yW5SzvYtV1ksXIhg//oCOQNe0Ht8sUUeMnvWhzH3od/gliIFC8zcIVLO+bDTbxXpgLqWPoVn0r4qayQ==" + }, + { + "href": "lib/ionic/scss/_popup.scss", + "size": 2014, + "integrity": "sha256-rRLRtTykkDndrrMMIwhaIc/j41kllusQvJXOuuebcZk= sha384-z7z9PlLhubrBh6prlJbqBdr+ESWQnf7FSfwkQ5ZJ5OOqRrNL8wegakcSmOUsoeuY sha512-TFgY4rH6y1QZD6tKdcM0Xhyk8PsgBgKj9y8b5DmANoDldhh4TwI2NvZy52Ze4qZJIIPaRgVm7oapuPmwcB3CaA==" + }, + { + "href": "lib/ionic/scss/_progress.scss", + "size": 161, + "integrity": "sha256-663rTwpsrE0ddtE3RAYJZ/TWSN8NBzfxbcn9jyi6438= sha384-hglgKr6zaFW5QhCeIuXYTxAIO7JFoTMiTm2cHBdGwl5yF2jPIOkjbv8cHWk7coc2 sha512-xvBc69wPsV5/rBB4YwUQrvP0VaEg2zGMpf6Vip67ekY6rAktPFgBNRWvk9OAO5xX7jT1x975QOKEhhJVou++6g==" + }, + { + "href": "lib/ionic/scss/_radio.scss", + "size": 899, + "integrity": "sha256-eFLj8ig6ZBTyO09xu3Q9PzR0VMfwKi0MyBFzksjGoxo= sha384-Ljis5Bn9SCnBKGq5WT2s6K4j5xfPKGUkikCmEKIBd08d9beIvD7eutgUtAEOaf/5 sha512-ydh2vaEJ5gLM4tgHzZzgvzNv16PJsuU5tgLSkZkFRsf5qwwkRNe3XhNBUzM+kVipeOqOexxSUPJ5CNZiOZ7+5g==" + }, + { + "href": "lib/ionic/scss/_range.scss", + "size": 3718, + "integrity": "sha256-JuXgsMgkK834dFCoOmK+UgY9BlyV0DLLLihyJ8FVZPk= sha384-QYbjtc1kIow0/FUWnx8QZ85pcGzgNmZ+kFiBsKicINDprRdA0yZsZvrfuFFgjjdr sha512-1kHtL1gMQ+mTe/O39jURxjchajf4jb6KXaMkP5n2KmqWqzRyRGxa8tTKiTvtrlca8bvqIQy/ViZdszzMhPUS0Q==" + }, + { + "href": "lib/ionic/scss/_refresher.scss", + "size": 2666, + "integrity": "sha256-FEbsUzzNgZPeeb9uJUJ/gmTdHuDR48S6QxqUSxwXZCY= sha384-ln4FETaOnzjnCM03BvOLUC5ioCXVcZjhqzPl3XsJFyHGJWjy9ju5Q5m6+JNHtILf sha512-FaAEDP14z7gDXT9bO7YGRYXxlFB/my5ozi0ijIXagPyCsNe2kkNR3QviPdX/2/TnHh3gO9E2n287dnfluA/o5A==" + }, + { + "href": "lib/ionic/scss/_reset.scss", + "size": 6919, + "integrity": "sha256-XvHFc7/fl6JMaS9ydjIIccH3KYgv+BqqLphnAS/IcI8= sha384-BbUTYutch4ntv93kyt1vnKpA7LQxjPPD4WUtwZXRXdIuyVd4Ko5dXWbtsDMUxJsE sha512-EBBrsm/abu910X8aoCnWsEYtmF4Ccl6HjcEa970IU9I3rAYBHFm+kOhHiPqe/K0FcoHnnSzGlQPUvkvAVtXOsQ==" + }, + { + "href": "lib/ionic/scss/_scaffolding.scss", + "size": 5561, + "integrity": "sha256-Rvc4zRiKbPAhSTqxEGTJrVYKrj6DoIx2w9crX6SFTvg= sha384-U4Ptb/3ApfFyndNCrxW4gg3R1AiaQcazRw6eMlvgEamQcTKojEqt3UiwJ9pYMikZ sha512-97lhHepy4nDAZTOGLIqytRHf3BSf1gtkLPT31OwVKmuxg7ZrlLXvFuVrS3z6GkOYIaHNecIX6g8DDWNncgKh1w==" + }, + { + "href": "lib/ionic/scss/_select.scss", + "size": 2580, + "integrity": "sha256-ENnKCBp4kUipKmwl9L9McPEFXi/+RJo269txuer0Y/o= sha384-eLfc87uDa8Jm7B3QQdXyEkwqKMnJZ6FvYn+q88RTg8lBh8wDpu4yi6AcpM2oe4Nv sha512-uYAnyGuMTg0v0ExOSvlVILxDsP9vKY7WiAA3DiXhyZmvZMBJxBliF6zYxhyBIjypWL6AwUEA8JGGNYavyTsfYQ==" + }, + { + "href": "lib/ionic/scss/_slide-box.scss", + "size": 1104, + "integrity": "sha256-PG5g9S0CgWfmk7jVYPUgNG/lrjujZht5uCxMlJPNh3o= sha384-NZc68ICB8jsfZ0lJkKbxhcdeQujVrWPrvHsIpJWN6dCX9f0PqOiIkrHkydzoqBT7 sha512-tfx39qOyTk9l2c/ZNYheRdHwcvnOpmu+AcoFtHDLI1PMv0mcH7THoRrklv7/0uce8e1OETeDQcItEmVoiYG5zg==" + }, + { + "href": "lib/ionic/scss/_slides.scss", + "size": 18493, + "integrity": "sha256-dp8I93WVjGqS8lgLkAki++DrfpMKahfBGlIgrXBTOxQ= sha384-hlFax1PmMGSlOeE1RvROp3hSKTZdzYvi5Hk81ng72uvcNPAZpD95cI3VeLj8OzMV sha512-zcwQTtzWIMG0P8gQ9lfx0RAm6P8unk2h3rGieBm3KV/TgDoMNe/q5moKZh6cWys+hQ8AB87doeAWBLRapptK/A==" + }, + { + "href": "lib/ionic/scss/_spinner.scss", + "size": 1978, + "integrity": "sha256-HSRLz+o3St5Sj10uJpus33DizZDqiDLBcPdpu7WyHKo= sha384-1EYy66nDtSADtOmUhC/+KAvf/At53JK+SWcI9Lg7dQhr1K3KjGhTLqh66/0NQB0s sha512-VRPz83rNEs9NqjS49R3I/nSdrqrgFXRhvTVeaANiovSpJyVmrUlVpYuxzQGSQ45jOLDVysAdkTxDrNEkmkTrDw==" + }, + { + "href": "lib/ionic/scss/_tabs.scss", + "size": 14058, + "integrity": "sha256-3CTT7b+CHcRNU8CgcRR+0qRrJTj4/1AUXavsMAy2/To= sha384-s7dB1TfiQ5qipPGcwNpL62ljzUZscRCu7tmiFbXvfDCjqaB8ZHglIuIkMp0O1ldF sha512-OFz50k24OisGBrbjxLnV444xudMD3p5WHrZfYUKS9Qr7W4g5b6U/QZRIWngGYnYBuO59XqVzWjZiveFYRF+/3w==" + }, + { + "href": "lib/ionic/scss/_toggle.scss", + "size": 5101, + "integrity": "sha256-wIAJJWyJ7/c5cCgAAn2vHbdEth/cvV0ColNUgJKkvq0= sha384-UxKpscTVrq4hcrsujEyezJkY/GPgRJ/RXBkjhem9hqFCx6KnCqRisk3QplAtTXOw sha512-ntBGpgFbC3s1HmRzbZRNgWzIrFITamdXmH/2FAc/5XMBn5eIkRlHYJOrFiuFt3kg87a8I//3ami54WtUY+Mhww==" + }, + { + "href": "lib/ionic/scss/_transitions.scss", + "size": 3878, + "integrity": "sha256-7AMzqTQFW6qqfqbvsLlhXsxQ33HQEuGFhG04MpkmsVU= sha384-dckpOWRXeeWoJ0+q7KCjdK1h/wu2RxeoeFCdFl5XCJ/qpMYu1RpmTiGwBdb4rkOa sha512-GyqbsCLuywwz96acPT+RP2xT1I9jL0ryx7pzUTJ2nxFd8fXcXY8M0FL+q6RoSoU13DBZglC+JdRxTWdBtkKqMg==" + }, + { + "href": "lib/ionic/scss/_type.scss", + "size": 2869, + "integrity": "sha256-0BJQU49vzv+75uMCCqsIl+UztIvMfAhHqmmAXQ2sNCE= sha384-j8Wg3cZSuvpTlMyRQr1Hp+1B6x3FpWGyxKNwKl9vBpKXRMH5xHiVxAr9JnVLvPPR sha512-kLVwcPG4T2HBV+3IU8dJWIm2C6GdBxLZCSEfr503mxiXPIisBetbP1qXYIUHt+I6rKq68vjfJ7yMeyM0KhmKLg==" + }, + { + "href": "lib/ionic/scss/_util.scss", + "size": 5037, + "integrity": "sha256-gDB7QPE+/wzl02wHFEvFBGccrbuiceKBKmAyRkaZvuY= sha384-IVrRTULzvHYBIT/JedUpG8KApBOYGu9sqJzfBG0xxqMV1n6w1plpFCFcRRnUCHuZ sha512-NOKtOgy7OVq3SaCEqMaYSQAh+ORhQ0G9FTFuRGah5i6d9fNQlP5rDofKfAazi/HYGKtsjX579u38/Q8GffDmWg==" + }, + { + "href": "lib/ionic/scss/_variables.scss", + "size": 31887, + "integrity": "sha256-qC1CI5NYVKKnyS5dQY+wP0IrNJTfqgvMMO6rbELZ1BQ= sha384-tDZdrGM5wt60OchllvAcairum0h/+fer+WCj+Xa1E35n8A0lAng82ohsUL8fp8ET sha512-SYAfCf7yvOPtO70ykA7KfTWL377ibeWsleQ9teoBNKYRKEQG/A6QVHKa7FjQJxAr+94xGX9j6HPCnyWaet9QNw==" + }, + { + "href": "lib/ionic/scss/ionic.scss", + "size": 607, + "integrity": "sha256-TaklOp9Xi+pnRdrWAwP68khJyghFZUdZ7+PbBBLEBqI= sha384-QwS+ffqhx1eZnC+RQiqCQy2rKxU8HXB5p+1uPgvN/5MGC1s6AobT6akZ1GFttIhG sha512-Jv/j1dT2Rs2S44p6PZtG2EOkc2GkxR1/vkxyXOURg67ZTkGUhy1JMPoDN4lN0cCRfRue0luU4OaPbM1aXlwFdw==" + }, + { + "href": "lib/ionic/scss/tsconfig.json", + "size": 419, + "integrity": "sha256-0vbftYpPUL/J+aXo5hC4MZcwglX+Hk1APRBuUUBQRLw= sha384-FqlAWPkwlvGBz5Vk7dHA6sYYEaDTWllxCL8nEUv6SCRuHWNUoiwA7uFLCnki7ygz sha512-To7Mp6FJVxqHlUv9dv0fZ/IadQlseLbQ/ihdxfAvzruxhqFPuMygiongqgM+av4t/Caj8RC2n6n44z0RUM6pXA==" + }, + { + "href": "lib/ionic-toast/dist/ionic-toast.bundle.min.js", + "size": 2232, + "integrity": "sha256-SzWWpk2ARPa66/uw97CXIVzpdjuhb6SAYXdHczOiN8g= sha384-iq8aKfZHEnNkqk+FAP665LzA08pe+gtKQSjQ4T1bOIQbRi13V8rx+KpQzlJCDoK+ sha512-WBQ7iJKMd4brW4x1yPb5AB4TqFAjKKZyEGF/zBE5RcItt/KS9gXjvskm2xeq8WQO7vFkVFEiWf6iiOkaL7xjGg==" + }, + { + "href": "lib/ionic-toast/src/ionic-toast.js", + "size": 2763, + "integrity": "sha256-QrHFkVLX/AgX0oi4degrLErptmQXNPPI23ReBQh3pLY= sha384-pHm4NRxWGEQMqIrZaj9Fhwpd648zIoCWstBA9xqhwBiV41BdMugyv4NobMHR81ko sha512-jgIoS3nfYe7wu8emVHcdmuiHDuMpf+E4/EMpWSjYzFPaDckiH2RPMliQxHBJXDJ+deV/RPbX1gMUQ4vZ3OZwWQ==" + }, + { + "href": "lib/ionic-toast/src/style.css", + "size": 753, + "integrity": "sha256-7yMpAK50PA7tNLMTVF0Ersyvx2O3AZokhxv4ysXNgno= sha384-s4ksnWG2H7hYM2DHM4wzWcl4J8dUnOkncJhefa48OUVSC57nzxrL2x4SS9awi9pU sha512-78HUPxh3oV0CCuavaeUEOq3oTrmzanxZMHqGuseSuDWOnkASUouiU7+wgB4HFzVkhpL1UQvOQGCcAPUtJjreaQ==" + }, + { + "href": "lib/jquery/dist/jquery.js", + "size": 288580, + "integrity": "sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk= sha384-S58meLBGKxIiQmJ/pJ8ilvFUcGcqgla+mWH9EEKGm6i6rKxSTA2kpXJQJ8n7XK4w sha512-n/4gHW3atM3QqRcbCn6ewmpxcLAHGaDjpEBu4xZd47N0W2oQ+6q7oc3PXstrJYXcbNU1OHdQ1T7pAP+gi5Yu8g==" + }, + { + "href": "lib/jquery/dist/jquery.min.js", + "size": 89501, + "integrity": "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4= sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" + }, + { + "href": "lib/jquery/dist/jquery.min.map", + "size": 137960, + "integrity": "sha256-h3kHBWvsN5koZRCQhj58SLMjDtMYV/BDyY03foi8uwM= sha384-ZF+BwccC9V550hOghoob+6obVQrQ7jxb05gOg65ot8o5s7rFPj0GnSJWyRNWROeG sha512-s/BrZa2Jz1rmFHur4fWqoPBZKSu0x7hpWPBy/2iT+rNGYnd9o/ag8JV79R957oNslrTUZOtwDkAlQU1rq3RqFQ==" + }, + { + "href": "lib/jquery/dist/jquery.slim.js", + "size": 235341, + "integrity": "sha256-HwWONEZrpuoh951cQD1ov2HUK5zA5DwJ1DNUXaM6FsY= sha384-fuUlMletgG/KCb0NwIZTW6aMv/YBbXe0Wt71nwLRreZZpesG/N/aURjEZCG6mtYn sha512-HNbo1d4BaJjXh+/e6q4enTyezg5wiXvY3p/9Vzb20NIvkJghZxhzaXeffbdJuuZSxFhJP87ORPadwmU9aN3wSA==" + }, + { + "href": "lib/jquery/dist/jquery.slim.min.js", + "size": 72372, + "integrity": "sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI= sha384-Qg00WFl9r0Xr6rUqNLv1ffTSSKEFFCDCKVyHZ+sVt8KuvG99nWw5RNvbhuKgif9z sha512-6ORWJX/LrnSjBzwefdNUyLCMTIsGoNP6NftMy2UAm1JBm6PRZCO1d7OHBStWpVFZLO+RerTvqX/Z9mBFfCJZ4A==" + }, + { + "href": "lib/jquery/dist/jquery.slim.min.map", + "size": 110315, + "integrity": "sha256-t03Zb25897OIoeFTkVzcbt/KuVlMjvbCAAv8FVqAboM= sha384-cIixYSG1TtPZ9Kpk4IPhB9w2bsMOZ4OJEGvkKH26N3lTDofGRirJrcaopyPCxk9D sha512-qm2O74LHwp7PEmDR+lz0HmylNau2H/BDdvGphxVJxs2/r3Iy+Rsp1DUxyDuFANf4W2UH4UGGw4BkFkYAa/8gyw==" + }, + { + "href": "lib/jquery/src/ajax.js", + "size": 22888, + "integrity": "sha256-N0/UQC8VNfTsH1IA/cZtbrnKCew80OQYKrbCrnsDVQw= sha384-xm3KF6NVjOGaXjwqJEvwJw4jR+/DUXkd1zFTpHIUUc5b/CZRGZl45NY8w1Zmtq1n sha512-78ncUSOO5qrc4l0DlC3scV18JVLaZ55zsvAO+ikdC/UH7mr+bTaCzFcuF5MHDAvLPscH9SSZGGXT/UHVbiy7yg==" + }, + { + "href": "lib/jquery/src/attributes.js", + "size": 217, + "integrity": "sha256-mE2ygHkKZyKTqrdtEvX4O+gG8kAAVMny3B18lVC88iQ= sha384-jlWC+7CRoYEr76G7mHmwUgXjrLtPJYdf5rFUPVTIBjq6aWH/NigGoyLVCWXe9GxG sha512-hbyZSFjpvxC7MTCF63yF0qbfOt0KTnPxZqOtkznNMKbOorEbEwqopdb0fkHjqoSvstBYi7e4cIdUMTKpv0qJ+A==" + }, + { + "href": "lib/jquery/src/callbacks.js", + "size": 5552, + "integrity": "sha256-4tvMCMKre12/X1YtVa6p+qsRKAuX3DF9cwVO0Yh/cmU= sha384-uJp8PoxCRwdYUb1zgKCY5ikbKLKuhQv+tLiS6VK2shUpbRB7KmOsi3SQsTWXJ9CO sha512-0nvA8nI0F67qRd73D6zMKZsr5D9zMt47Is1Nv07/YkLyfoqpd8MpsNOkKsE4o8jZiTkft/GgOHh0vgV1zkt1KA==" + }, + { + "href": "lib/jquery/src/core.js", + "size": 9183, + "integrity": "sha256-/regcEi339wpN7nU0VcM5L6gIWmCJ0+2S3uxAxxsBKs= sha384-i1taMl8xbgU7zk9w1oHOos6OQED+l/6LDzjlc9527N4pKWXztuErdQT4y3oFTzMq sha512-mKIaoGig+6YbI5X8qf8y8zWCQ6tB9mTignL6EQ8cJkrhy8Cx2iYrj/+DWtMOf6cknj9AafnQRrarLCOVsiSqfQ==" + }, + { + "href": "lib/jquery/src/css.js", + "size": 14165, + "integrity": "sha256-35sumQ0cCXRGvUxC3hJO1xy7RoCPRU6RdCv6WI5FUIM= sha384-iAvnDWPN4pi9qU/S/BwIzRVNyUmKfh3L955ka5wKBc8DIwdrhlGe3cFNdiKIvXA+ sha512-az1MKDekbCtqm0DlEE0U1xGFLIWaahtM+Fi/XM5sNkUL2ADLiPNrGF5pNQMSsRqhIbgcuilpYuu2TU8U5kDFuA==" + }, + { + "href": "lib/jquery/src/data.js", + "size": 4321, + "integrity": "sha256-WBS6+BnPLe2oxrxe5FldPiAa328dKTP1sGqC9OMYS0Y= sha384-VFEte3MkncFGu5PydKyWbsBPgy0+zfpOIk6Va5xcXqiUXNLRusyTqYt4/2Mxaj8o sha512-519DWcl/0LgmS+MOvgtEfnn7DH3P3QfAItrtpmpwOlJSc0R+Iwl20f53AEk/rkXdgjnpRacUeorWOx/PNdwDkQ==" + }, + { + "href": "lib/jquery/src/deferred.js", + "size": 11007, + "integrity": "sha256-FSybpqPJE7g8WbQ4Erqc93zkexZK6eZgzyjkNMacfLI= sha384-U4AmcT1UGS31j7S4YzMlo8/QrsfRJjeY746ufcM9xNM3yr2RC2/h+X8PQZoxDKOJ sha512-x/o3oGU94XW2A6vevfPGk7LJIAVqAfovVKz91u/XLf2oS7RMpVOORC2IXu5H6CyoBBXZvBqb5h++Er1S18Ketw==" + }, + { + "href": "lib/jquery/src/deprecated.js", + "size": 2227, + "integrity": "sha256-q/dQeYhpgEVfMZpXdeuLmvWV0ibbEXvIGxvpgkYuHp4= sha384-kGHCp4RxygyXo00R81UwU4W53SCrxoDWjx697cokPv82vOfj7C7P4hdqiHgMs7Lf sha512-NcwC9DeeLoZoI6GwRBiVY0Khh1nskHiF010p5bIFfjEHfo4EkR9trPZdnuFP3LOAwB0WedHBIxXysD/Xzu4siA==" + }, + { + "href": "lib/jquery/src/dimensions.js", + "size": 1756, + "integrity": "sha256-izggf3FRXK7Wk9fayGxsSJ8D/xhlTyA2uU6mPpjvIfI= sha384-BRtpuiW60/hlZ0LCYh5uPGb4MOy/P5iUi9XYm/ruXvjGTVGAwT6nCVbr531U8Xr3 sha512-Y1r218G67AHNdSxDLV5XsVynJsx/zFd3RQVglBcwHU5OHDyKMQzPw7KgOb/C0THX9Xc+d1G8Q70tZ5X8c3Q/jw==" + }, + { + "href": "lib/jquery/src/effects.js", + "size": 17413, + "integrity": "sha256-HvnCcQCF05yjBXY3zlm5MbqHST9Urrger1IUfbA3SbY= sha384-hMqz+l9MgYQBeAjS3goAdSMEOnELQsauj58sucT2e3PcJqs784DhZe6hVY8UqwLK sha512-aYn38pVzUHAja5JJ+BJHrRvaLqlnjEaW7tcBtxp4NX6pjVvMvYDkumfkQgHGHbpDBTSy6u0cLbmdxnme42UzSQ==" + }, + { + "href": "lib/jquery/src/event.js", + "size": 24426, + "integrity": "sha256-wkbSpWwgBe+skWO9BDvPCrFVxqzda1TEFSzvL0uFAgQ= sha384-OD9yBpRAAUej4+uErrhTje49FbmpM9hBDPVuVvgISZ2DP9x0uK47V0m9RQqh77P9 sha512-B+KAjDE9L7Tb5jEfoFzzTIPy0MEN96Q6CEeVDeU17lFhJVvMFMdjWktrrgohwCFf1QS06zFMJkvuaNauJX0fVw==" + }, + { + "href": "lib/jquery/src/jquery.js", + "size": 646, + "integrity": "sha256-2T6Zw2SFqHlSeyDc1lUIfirDqIi/icjAIW1onq5IN+A= sha384-NoM6T3DZS58tX9167hUva2Ky6ta0dtswuLvR4rrJg1cXVXJI5Vl6k30zuP2uNck+ sha512-uhbAhKxQwwQg85/s+pMcW2Ql+O+Xm0JtCGA/c1sEogWVROiUVHZ/ID7aOgF5tYyhuCNIOILxiOB97t+SugsRqA==" + }, + { + "href": "lib/jquery/src/manipulation.js", + "size": 12318, + "integrity": "sha256-LTb+GRm99L2I4ORzQeYrLtTHim8VIp4liDEYjZ3HnXc= sha384-KbTS28jz8O6H6UXIxI5PXGYLvb8NuKhTm4lDieIBK0XUJZCRt1ZUZgSqWsKKW2v4 sha512-0tueuMjHb7HBB7IW1JkMkajxtKJ8MdndsTxwWTJiIhuL/umBjNoJsiDQXorf+tmkou9krzmOS+6y1ck+7Ix9VA==" + }, + { + "href": "lib/jquery/src/offset.js", + "size": 6828, + "integrity": "sha256-0Bap2860VFLOIlJaX26jqZ9PjueyMeREUlYHTqi3iJQ= sha384-2jjDQPZoDbdR3gGtkIQhxx69b3TOG88ByL8uHUBdqIAb+MbU6pUKroo51Q1uk+LH sha512-fZsEjo3V3n+TRXF56xLw5nKSDirViuNswhxY5T1fjEem6Cxhal/pmsuNOveYBwLtVyZDJNBB/VNkEtSD8ozttQ==" + }, + { + "href": "lib/jquery/src/queue.js", + "size": 3091, + "integrity": "sha256-lQp6mzg7TypmtdCCngVWqXUBJ6ka4lh4/t8hTpF6fmg= sha384-0pz1n5fNHpJTpdRGsfoLDTqRd+g30kNJAwoLgVmJBv96fHPHhPoHq3Nx37SUjYRC sha512-w1USzNutnPvQrXJEynojVandBDws3VZHtljBe9b8gis61HydNZm5vK5Ynvclex8OKtwMlbvg+VKfAGYSlI2mNg==" + }, + { + "href": "lib/jquery/src/selector-native.js", + "size": 6459, + "integrity": "sha256-XKKGFhquzpjKrFR7qK3wuOSOANGU798tsbbRVAFbIAM= sha384-LoUOn8PxLgyefrr9ls48An9VofVMWBeOY5UCrX47iVC+U58u1gCYks/ZFgux7qL5 sha512-PD02fzQia+ivn8KEBpu0ZRFmEPGj/jgHz57d4y2BmMfut4XKg2xkqB0iERCLJcw37GR1TTgiP7acZrnlF0xTnA==" + }, + { + "href": "lib/jquery/src/selector-sizzle.js", + "size": 411, + "integrity": "sha256-hZnNx+RdH/3RJgq+Bm/rLPLfKK+KC1HWdHXI4lZW5Gc= sha384-s/x1CSuM4Fgr0UUdMp2pUF2WCtAWtxCqUN02ZjhpMJwVv36MitAvCHboXBKpckDj sha512-bdzuDOwQxEvXfQdcD/Fqkqu+H3CUhKJ5erETRr3JnhakFEENPHr2qoCzqQcTr3BntTnwOn2O7jsdnhmMwPWyMg==" + }, + { + "href": "lib/jquery/src/selector.js", + "size": 66, + "integrity": "sha256-NHLf2FMFkMmwr4IjT49T5ZrTdvSGHzYzZZBlcXmYqto= sha384-seGVfVBM1LsGCJ/CP9eKOSsWrBL5Ics73Z6dbsfqij5hdV1aHRtCvhNynjioArno sha512-VD8brMjBwxb5/UCxz3mkf66GYqI/2bZRoOiSrdb57qgZiQNFd8x4VGrDpkaLI5p8gbts7LMqBcJ9Wj7KyFUfig==" + }, + { + "href": "lib/jquery/src/serialize.js", + "size": 3236, + "integrity": "sha256-2vCowHgy+xA8RzkiiyoxPYBDZLUB/gU1uXkKmel/Iu4= sha384-n2fCdgFt97myUW/+b520NIbWHzCsCx3SRLhozlbDLvu4D6NSQwC/CkR7Nc+T0pnb sha512-HFRk2T6AInemNhRlSOPcKDYqq+P2cnrYuNoDktp149k51yQp0j3czF1iy6iUZp7OUYvka4S1UvtVK9vlo2/0lw==" + }, + { + "href": "lib/jquery/src/traversing.js", + "size": 4692, + "integrity": "sha256-OLFn5XjEiUTBDHCWRrxn51OKNGwt7psV9O2mV3GW/d0= sha384-w2P7N/02YOO1m5308+PRCvUy1lR1dV7wWzY7XnV9A+LtnCVsQZO3NXo5WiytfvnD sha512-Zr7Arpu/4md7yOY2TfAHSro1Bh7EaZD4Udp2pUZ03cTdSHSLti0uUXUAzIp2XnESmq0wTxDnjl9HDh2QHrUoWw==" + }, + { + "href": "lib/jquery/src/wrap.js", + "size": 1477, + "integrity": "sha256-+VE7+oOJoDc8KAoIrsjCOvi4qOLRjeCs7WhDbWCq860= sha384-EIQcBgib5rM1pnYSVfmrdKzR1PZjlsNZVoIDSzWHNzfHNKh71AHSirZW2LL86qRi sha512-T3zFLFhLlAsd7fSbssckAdW9MZ5lw9Uu5Iy7e4Dwc0YM87TomBQTSzZ76KZYS3mO2LhYpv5dYwEqppt51oRymA==" + }, + { + "href": "lib/leaflet/dist/leaflet-src.js", + "size": 215410, + "integrity": "sha256-x1atEEGVVUoT4E3FQ2ZU7alopQsPtzMJl7sF28b9sWg= sha384-xiHValU1mcnMWTUXDUjdX7uJWexRsuSedeFGUYuU+quWmuCWttbk5pzd0z3VDDa1 sha512-aTLTO0m1gO6omM1Ves2DG8PIAp0Tlv440RakifZSlp6y+D7iky8VbHCuw6IrWZGr5xSagSlQXAn+aw4uCgCSWg==" + }, + { + "href": "lib/leaflet/dist/leaflet.css", + "size": 10183, + "integrity": "sha256-ymZGho+WjeQQ2jvjHInYJd0h20DI6/AE0fYq+BGYXqY= sha384-99ZJFcuBCh9c/V/+8YwDX/TUGG8JWMG+gKFJWzk0BZP3IoDMN+pLGd3/H0yjg4oa sha512-BjUcsqlmxCfopFFJpQr57VRWk3/N+csTp8cwWSNeOmBnz8QriGor88ZiHlLKPvutKvTpRU7HRT08E0y/FM0TCA==" + }, + { + "href": "lib/leaflet/dist/leaflet.js", + "size": 125709, + "integrity": "sha256-aReBHzIjoMzKrp0H4XnxXIm0mwuNG/F+00pKDiFuLxI= sha384-Lh7SNUss9JoImCvc96eCUnLX3HvY4kb0UZCWZbYWvceJ+o5CJeOJqqNoheaGkNHT sha512-e+JSf1UWuoLdiGeXXi5byQqIN7ojQLLgvC+aV0w9rnKNwNDBAz99sCgS20+PjT/r+yitmU7kpGVZJQDDgevhoA==" + }, + { + "href": "lib/leaflet-plugins/build/Makefile", + "size": 804, + "integrity": "sha256-xR1ebUi4raCJRZc5CHa/2aTdpGidwVBNH1JHMcCaPLs= sha384-oVQPp7MQesqbxX/M96C/AU5wWuFAsrDOOX3tvDZ9oJPXa0P+EuvFJ7wR65KGK/sa sha512-S2C7sadQV1CQh+FLZYa3ucIkON5zyLQbfulKvOT0dp7ITLQXAYix6ZSxEG3GBbelLailCo7I+GKLu5bk628Xog==" + }, + { + "href": "lib/leaflet-plugins/build/deps.py", + "size": 510, + "integrity": "sha256-J4wJIQ7cwrwGJi635lePHZD9dZkIWcTZuc9VMZDZX5g= sha384-+M67o/YH+3JV65XEr/f4u5sBRukYPvyHvLvjJt6YYh2UlA92BxwXFnO8GPHdbezN sha512-DBTyRWk9h7eeFjvNrfJjXtCI0CHbUjtaNshRdVQWKH6hI2n547E8VCmh4xJ5W+pS5WgmQWqthpy/bnJBllXbnQ==" + }, + { + "href": "lib/leaflet-plugins/control/Layers.Load.js", + "size": 1524, + "integrity": "sha256-BqGCN7d+99tujhhsL7EDR/uvV0HmWv+MI4onBSl4Njo= sha384-zeI2Ai+xIOR981yKTS+mqyRsTx79uWmAjk1Myl/twN6PRMAq64zNfYtjvZk3ns+9 sha512-Rau6x2P4j/JnoWNuulQmlFcJ6GU6fja4D7D1eArXal3FtjJGta0J41k2MNu6X5/m95G3f/Do0bS9P+GBkm/omQ==" + }, + { + "href": "lib/leaflet-plugins/control/Permalink.Layer.js", + "size": 1580, + "integrity": "sha256-FzOeUrmfKdYZus1FLg2d+AszFJ3E/YW8dGw0Mff5GeE= sha384-0U05PbmxS9JDkl6URJPOZf5yUTzTkRFfxnSlbwv+b2ZPDk6DNmHjmrbdRShUJ+Bk sha512-OaiBJENIu2XRZXgMR3VIjr0TN4WISB1SPuOXrum7Mw2EIpq/4bkj2T0ajwx+gZf+4E3rfANuR2yVqEKn7ou2GQ==" + }, + { + "href": "lib/leaflet-plugins/control/Permalink.Line.js", + "size": 1125, + "integrity": "sha256-X5MUPxvIiSvGujuEjfo5RrUwFW/pbykF7YIVE4C/u8k= sha384-U3wiZ4ZrRXxn4TD254UvwAYyrnu9SaFCSqN3M/VlfB3wLZCSjN+xPe8SAbwsFa5s sha512-mbN8+euSLFzP06NHLfWr7F0jxWAFCG+LXEMmbyfzREsTo3IeWoPNhSblYrrYTTJSy65GUp9uSuAt8t5q3e6utA==" + }, + { + "href": "lib/leaflet-plugins/control/Permalink.Marker.js", + "size": 761, + "integrity": "sha256-++YAVrXPOqLI4zINRODu3ZNcSTESGI0d/zuz1kOWTsU= sha384-NZHQA9BWYRSG/AU9iuCpuIkZUzZSocds1DxRB0zUNSAPqpZc0N/2zGMPB7iuyVsb sha512-45Yj3aW7tohUe5dQyRwbAV5SsS714KtlGOBkbd7cbZgwSeJgGgzcINc8bqTNXM0lVF9yaFUP8dFOPuxI4Z/VMQ==" + }, + { + "href": "lib/leaflet-plugins/control/Permalink.Overlay.js", + "size": 1648, + "integrity": "sha256-jDJuJCHEYKQ0MJXGRr/SVaysUSqIl3rSRcU97FmiiT0= sha384-NkHlxmrzn7/OaxoG4v6Y95KZSSG0E2zCNveB0dxop9s1AWTR5zseVnqTMCf+8GHk sha512-S0T0cxWucyuZ/NAkYQOZDnGTfk3hgXEZ7vndcq/xK+cQ57MSxQI0htUhjAiF9SGj3OLbh/I8xa9CfN8XF+W7bw==" + }, + { + "href": "lib/leaflet-plugins/control/Permalink.js", + "size": 4426, + "integrity": "sha256-M1ADBWzQOPa7sKtaIfeqvGD8MOcBtQEYPVC87psuMn4= sha384-3MsS8FZq4kOVg7sSmuLc27T6URHhvodg8y+MR6VaMXj5naizP8VKRGfRK+WQEZsV sha512-ZfbI4bnsFQJL3qa98goc3AfHwPiGvhtXsPp7WNilYrrYq+8Qj4gdpEJLll6223rGToRSOO43X6IIqHb/p7zi3Q==" + }, + { + "href": "lib/leaflet-plugins/css/cross.png", + "size": 1642, + "integrity": "sha256-amEllwaGECsx15e8FZRm9t9cw80pomb4QC0ILhimF34= sha384-JmVgMFnx3ME82JPWfHp7yabvGSv4vLhxicatdAHoI6bNNEY4991B70nB00K6IuZ6 sha512-dw8lr8z/jDMTRPMSQe+OF98eTru8CDOhnaUVTMk0AQ4fE+oCSe3M6Ske83ubG+0L9N+rRwxDyJJMI6x26mN6eQ==" + }, + { + "href": "lib/leaflet-plugins/css/distance.css", + "size": 1072, + "integrity": "sha256-fIsUSlj9as3qW13ayw/GNREp5/PFi0eH34CwDC+Mlxc= sha384-mLhALzYYBZb9Y52FPlCQRTvVaXEkjGASashJEjI1GbFTq0hODAxDX4nIiVY+kuJD sha512-taV5Q03esvsY6TU6SMWWke9uqHJwcyvG2dkaX3zgGgOZ1jmXHLCSWxPkhz8bcQk9+87qHEYqshK8Q75k6He6bA==" + }, + { + "href": "lib/leaflet-plugins/css/measure.png", + "size": 470, + "integrity": "sha256-ju9Nzl4k6QAPlJ4GAV5ak9AjY+Ba/MhiRKc7xIuPcvk= sha384-Zh7VuOw2GTNesp9yDGVS21O+0xjHMw8GT2vLq0sIDwNUL2/p8NRvcxCowlnprOnt sha512-el2f3KmYmEroRLQzrp3rtaa+UoYz1o0UyJ8HQMtO1PCKCahhRKTXmYS+NNOG9UjlZx/weBo+hsLiLt+CwuakYA==" + }, + { + "href": "lib/leaflet-plugins/css/osb.css", + "size": 2034, + "integrity": "sha256-g+ICEXswnEAcJxJyM0r51vvL+UlcHw9xU69djLAYwB8= sha384-awMBTpW+peIHxm6yElW/2bAVAu1qtiUaBekd9wh3mUO2ZMrVt0MaqhSftHIFpx6c sha512-KiBSBqYohjjsIXuQqJ84VJ3kqUuE6P+lSGTzdxS++KXYBGRDkARBO+auoqeQl5045+zo3+kCx/dOOEEp4FvrRQ==" + }, + { + "href": "lib/leaflet-plugins/examples/KML_Samples.kml", + "size": 35920, + "integrity": "sha256-HN4n0hjVkeaAUO6io5Dbw8wlPqClDkCpPMyEbB4Q2aw= sha384-xfDDe03gJpaxco3Zi+U5Z/0dEHu3gHiy4OSeeNCOXcA7kFD2t5aTlsER1EEZDkTA sha512-FIF6misllAF3BxC02wG01cE1ysUWN3YAAKRDy34hGOgSR94JCsKsWBH9HriZBmhaM6EnEyhGv8p9CzeeN2tLbg==" + }, + { + "href": "lib/leaflet-plugins/examples/bing.html", + "size": 1843, + "integrity": "sha256-Ki5J78UGIdSuZv+oeGk9HA4JpuRMFcWHxr4o3h++TJA= sha384-r5Rq04sLEkFv/CTtp00/V2HD/JnEh3ow1uZ6nQOSQO98B9gomnBA/64dsNMVDU1M sha512-poRKXFE/AJYvU0QGcrjh5jWYbclzghhK3drv2EhfKUQWgmNC+5rfZyOkDl3sBdMBxmF+0DC75FJ6pHe3Kc4wBw==" + }, + { + "href": "lib/leaflet-plugins/examples/country.min.topojson", + "size": 307788, + "integrity": "sha256-GWV9TRdXTPBu4/N9y5U/zBYjZDufrPvQS5AZsjiqA1c= sha384-pHpAxDqbYB4FNyH/IXMI0DfB5//UvXceNLtpNJOpNpu1itWcrfIuj5cGLHg2aO64 sha512-5T50+zTKIDh3lt6gbCuxweFGV4211+/yeAHaaXLZ8dCNnkmpz3L/HaYHgDGsD95PMgGC2kQ6YRuNH5ziL4CDKQ==" + }, + { + "href": "lib/leaflet-plugins/examples/deferred.html", + "size": 1912, + "integrity": "sha256-jfEZxeqyNQZrBbZOafZ7D2hwa/S/IyX5wLaY7GyZKEM= sha384-D/punmaxIhZqgCQY16C0h34pd6aEdqAeeXYafZVfKgYFSg/yrp7g+VRaFfpwkuc/ sha512-jjHIcVveuRuM7hOZ2s+VUXPke75Atw8vGBIDXVoRrR9Fcfh88QB+2yN2lVpbyJRlCX7FMWBHw7SH4KymWTc71A==" + }, + { + "href": "lib/leaflet-plugins/examples/distance.html", + "size": 271, + "integrity": "sha256-nRB5Y6V66SFSOtETYDef5jAIy27tELCYnGiRiCI1IGw= sha384-j3unvCiUD+R8qUnq8qOSrBIPl30Id538u5MG1v7etjx3m/lcVKBj8oAC4d8KcYu3 sha512-jbmdxSmOYCNhz50T7TuUerUGl9pCCtK32QQPoCuPiDX7qne5G9cA+lilGCh/VlXtxVlnTCvC2ylGCHOXSLQp7w==" + }, + { + "href": "lib/leaflet-plugins/examples/fells_loop.gpx", + "size": 29893, + "integrity": "sha256-yuyP+55/7EGXqfnGTOFJs/tt9S1k/Nnq779OtjCv4ac= sha384-D+vMauKwqqtvmQn9H6EBlcNaJpCO97P0ziepQVy+1R9pOEftRVslUG7O4UJ1uEf8 sha512-HKD3YhKV0IdG3V/sj/NYrwGRRXmCVrpedzB7ZibwLF+yXV9RZ7z0B4Ozx2Ns7UK6w5wVWfPDa9N30V4oRao2qQ==" + }, + { + "href": "lib/leaflet-plugins/examples/google.html", + "size": 200, + "integrity": "sha256-5uGPXliv2ZJgc2dVnezfC5kxIQZ4ZY7MpiATqJjSI8E= sha384-tpv4ETyRA/XXN7bGjl0j1xAZ1o5Pwp4MjeeEypr/PK4fczV/eRFbHbBP1v6tKny9 sha512-dW8axq2l/CU1kzDsjUnLatPWgooqER8vDWD9eLQ00HYnhawmOZi0o0VYv477pC/JhGRzxIdobSt4LJTgxAkHXw==" + }, + { + "href": "lib/leaflet-plugins/examples/gpx-no-wpt.html", + "size": 762, + "integrity": "sha256-hbiGcDf1w6xgFWTTCn4lTbuHjstsXuubs3avmWs3ZBI= sha384-5xJ0PA1sXBKtj7h3auWu33S726FhbkPpMrWVmSkAlR7Phf3JN+rfurb6z0aP+4a3 sha512-wd5349qF7mwma6U+oFq9ewwhPmq9PRjXCcjX0N175kGrP2mBSeQoLQEbggT713sjDpDWSIHcUGHMUx8Vaydfqg==" + }, + { + "href": "lib/leaflet-plugins/examples/gpx-speed.html", + "size": 814, + "integrity": "sha256-lReT65/4ecMpQrOdPXWzt5/StQcOdR1zV+uh5AlE36A= sha384-hS1gfVifaTsrwUc7/O+HybWTtnvq2W9PdXmi1mSD3PVx6Tia2pXdZgFsQ1QDMKHn sha512-viOpNNoHbFS4r96NoC6cwZah5+qdID9sGug1vYDqjqXVAtVo/opXAd6Rgt3eiK709a9ws7ImcWu4f0a4K4tlLw==" + }, + { + "href": "lib/leaflet-plugins/examples/gpx.html", + "size": 1257, + "integrity": "sha256-/nLV0GmHpu8kSppn+rgwqIl9a9ONO/nXQdmmCvSqEzg= sha384-/GmqpI3lh624Hs8auns58qFPZB5Kw6bvYML+S3Iyzl3s7Qmtvsc4hiTwttjgfo4F sha512-z26DlhHKcZ3xVvw4GfUopb6m4lADdx7ZMdESBXwHI3bf0P0hnqg1Zp+47W2YwTzRqNauFiE6Y9hAdjkl8Ukw0w==" + }, + { + "href": "lib/leaflet-plugins/examples/kml.html", + "size": 716, + "integrity": "sha256-cbsMyH2Za/0EWRo4M4VBiaC4/jSJ3oQB25w8NaiFwhs= sha384-OPT1f0vveQnOKr2c/2hsDljTSGGAEKIQeAyzHljbnxi2nVuLQIWh2BEFly3L/VAx sha512-NjllAOo1TO930E2cP6xB+p+BvyF+ahJI0VT4PsXi1ll6o6WwqJMPoEWZzZG25TZGIgo5KMnOy1oCMwcXcMQWzA==" + }, + { + "href": "lib/leaflet-plugins/examples/marker-canvas.html", + "size": 1033, + "integrity": "sha256-CAJTP35DikXaFvwrnKlVF4cLAqXVRMZKhDAKLdddA28= sha384-h1X/T9j1oM1L4ers0tu6wHq2R0MC31Wyh1zj/gf7rMq/DCLgY683U/k/WCUnFeuK sha512-rtHGuc1e5fnMK//lXnAKUpdE3XsGlqbiEPaskCTLJ+NQ91vTWqV3iPPDZI7e+xg8CEmiTPGRvZbtBLAUTY0fYA==" + }, + { + "href": "lib/leaflet-plugins/examples/marker-rotate.html", + "size": 898, + "integrity": "sha256-MbXbPFf4byeQwmoOkhQGQvhwX2/cdQM2zIiWegt8zWg= sha384-4r9RGv2SOQTx9jCuoimht/cGlx8Tlm2qTdG2aAknQBqbu9ZuRzRlR7Ek5nVcnsmc sha512-3aPWMTfM3Vl/hG3yBcNwzuJBfYCojxQbSfN8Kx0lrJVPcLR8jOndm2Ohugdh6Z8qWfXjp2MucZVuaP5XL1bUqg==" + }, + { + "href": "lib/leaflet-plugins/examples/marker-text.html", + "size": 631, + "integrity": "sha256-2+ve/+oYRk7yfmDOtQzfAXPaT+YhyFQxSCa/AM5vk1o= sha384-QqZK50jkXgXHtwq4H4jE0RqYvyEXItLmxik2V1zKS1xjBZdslS2Q4FIDH9hX2l59 sha512-FljPsinxa+of7/5QHR2mHNC7qzmxHdx4R32nQtCAlvNL5Cs8Pec6WWqIPz+oHvPXVUAchaglYUIZqlepO7+eYA==" + }, + { + "href": "lib/leaflet-plugins/examples/osm.html", + "size": 706, + "integrity": "sha256-CY2E9GE3MeVL4Qh9J4T2uXbWPP/xEIhqQyL6XB9B4iE= sha384-EbhADlglVemGSdQWgw2v3j+wOn/wMzAxo8g31eSv8RX/xtO4Ueyqbg92aQw81mGZ sha512-Sp6TZcJPmCpI0Bcj7qsQK4i/6r5fLcAUvNpn2mntXY1ulVDa/torLkepMC5vipBxfta9iI737GE0TZ9dyA5uBw==" + }, + { + "href": "lib/leaflet-plugins/examples/permalink.html", + "size": 1493, + "integrity": "sha256-68NHDTOMR8pSY2RxvDaKT2yT22Mo2S8QhEe36EsokIM= sha384-zYlv6uknhp74XPeRAuvkZpn+wqjiEO/doj/GLPP8dWpqXY6pEfmL8v4RdEUTEq1D sha512-ueuFKUV7nuMcAugy1lupbM+wcCldvsWOPaazNkTAvolHBwhwoCTlrx/o9fazCIcH0Ft5dEzKWYsdLVD9hZMPjw==" + }, + { + "href": "lib/leaflet-plugins/examples/speed.gpx", + "size": 2425779, + "integrity": "sha256-b3JelMRk2U8Nsy9ha/Pqc/yMnW5V/xIzkNuS+lOZpzw= sha384-416xwx2zN4qJ8d6XVKLeKQ80pXJ4CgFP0jicqSLaJNgtYtOYdt/Sx3eA+IZjqUCx sha512-sezXVcTUcOsQwBDEr5aO84ryj4Pt92AU5zWP5pjn89MUJSjXrGvy/HLnGP1si8jbkxrSDjBQ39LBbgqqLCkumQ==" + }, + { + "href": "lib/leaflet-plugins/examples/test.osm", + "size": 26320, + "integrity": "sha256-flkTt9G7owueMg7Vd598fHIGwENZmvBqWjq0Ra0FHnk= sha384-h3JP/ZrWn2k/3tia++vEH7yB8m5pCZ5PtnSRpRU7okKe6LZm0LQbc/9gg5gd8v2X sha512-CSV6dhegUs1K4nd5hzFwtgpwXjCB/piuBoIGvE9fSIVbd4+UWT+sLj2aynVpSXVapVf+d1Lmfd+GbOCZ2PFHOQ==" + }, + { + "href": "lib/leaflet-plugins/examples/topojson.html", + "size": 1123, + "integrity": "sha256-uIJyUZ+gBkQQvbf/SrV7oEUIJgsVBgiIDyR9K7eTirc= sha384-AdNCsAWUkFVD8oVxDXNLbzmO2lo1W/BrJXMZ6VFodVwP8o2LUcQHL8pF5sIsnnJU sha512-oMcWxZFBmsKrQyqZe+z3irRaHa5q90FlvkcUonHjJL8vL/wfe7HkS1dnrYVBuWRmu1hgpw03FplMRih2gJxkzQ==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-controls.html", + "size": 1624, + "integrity": "sha256-F7ZaOoZJDK82a7AMe3MX5he5cYCm7qebeKbMy0vQbuw= sha384-Pcoq27Pxb5Sq18600k9Hj79+FoY5C8hqfJPg0iXrfBXaq2C4QLHcqKKI3eJ/4LXT sha512-YP/DqBIeTJEM5zXg3i9HSqcbDhnPezm2llJW02UmSkQB0K8b7VUn/1VX3v1BvUiHm9jpr3zUAyHkh7tYjM9bPg==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-fullscreen.html", + "size": 1309, + "integrity": "sha256-hnTOHku/vJSvilUzZ/RAOELLa+9klddtE6YoHWMxLfs= sha384-61LseNmDUE4ASSYgULacNgbg1uuE3EXDnLXYqMhbMOBTPO6Lx3WfQgLrvhplMmsr sha512-0mF5wZG7axMrso2Y7OwPS5u14W+4XaLUXYeGOwdfMV0908Fcx6oQMI6JSOpLAzJNI9t5gbpIK+y7ibybpYdUpg==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-loadapi-deferred.html", + "size": 704, + "integrity": "sha256-6pnwzPIVMlCVKehtfhj4Uw3hN8vwmvjx0vcUxo1KhQE= sha384-e+8RzcRbxc2JVaVQ5WPY36TIhLQI0VJltyj/y3S5XCkGom208m23CYYZKyFjpsKq sha512-Uw5yqjGUHcMDNJiyNrNbzOUz/zk2LfNRDlcHz0RGSli9gdlaf3eDCcC5V5SJUIHhF0ehlSow7DOEQ4DC/0OCdg==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-loadapi-dynamic.html", + "size": 705, + "integrity": "sha256-mDbBAxAyX0BqYcSyau5nuqLekIB8ihBYWA6/ED9iUcM= sha384-qLPq3Q5SF5jdDnvwbbcuhkEDnRafuSmPI5KIE4OInonW0vF57L1qYqkmaCAjdv5s sha512-7h8HtuGuovWcL+jI25vlSG72zIJ7BOIxdU/gQGKQZ+rdfHMQIlPFWHNSure1uk3E4BOxQJvxnCwM608WTGoY8g==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-loadapi-promise.html", + "size": 845, + "integrity": "sha256-DeUrVhPgcWnk7bmqWE0jC1ndXau1mgQo1g2RxyzYRF8= sha384-JKHFxuc5UAAouZbkevbUmMaaTxGnuVhhz99kyDjKxs1q0E5kvekmMCT/xTsXJHkm sha512-xFzTrop5VGYtCSHm0oFKad19bhrjNpJBF+t/svwFDiiycE4WtLMguBab35ND0i3ods9SpP8Dc0lNarF8pSuwRw==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-addon-panorama.html", + "size": 1645, + "integrity": "sha256-7tVCYK8uctH1/VsCkCyzTpK5f5u+qM7AhyPnawe0MOY= sha384-lp/NdIqKBSmxIWiIJ/WiHJwwAhADqDBwTiziw20yJKcjgld34mFahnxAu8PpLqnt sha512-50uspYCXmH08d9AC2TC5NU3gflC1WuiZeuy++URkYtJB95IHU7qiRK1L7baAoSvk0LzxRW/93KNWbo6ZttX9DA==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-controls.html", + "size": 2252, + "integrity": "sha256-fH6y7Sk1922yUqQuh6v1AMf6punrEonq5jTMiQx24Tk= sha384-hv2hNmZtm4P+BrUoJv0WxYtbl34VrifxRu2o88mNiWpOczyU23EGpV9BMAGcsb1x sha512-jHRvJ16JhcKdoM4CyQgQFMx6DTZ4qW7YOggEoU87n4HKJIGC9TWaAmmjNRC90ckO3fd/AouNMnvsSSmngtvLoQ==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex-kml-gpx.html", + "size": 3266, + "integrity": "sha256-uGCX04f5OuVqHRNNTVWsZOFGjICccnFElo6vaK3X6D4= sha384-oEa2SFYoNFEYV/LPiGexz6th2CZZMteaM6Ml2s2B+s7dWKC5DSxJ0VNOouKDvIIn sha512-4x0o9LbX3zqHuyVlyyDKrXI0xdjcLiU8R/JZYckxyyGaMp5ShbhxVdgfOY7nCWIW1WaVdHsMWz1jatKBPG1H9g==" + }, + { + "href": "lib/leaflet-plugins/examples/yandex.html", + "size": 1793, + "integrity": "sha256-MDhBYLp5W4B+bShgm1Ik5WFzp5e3xppo+8Gke0kejKM= sha384-CxG1h175I72HB5gvYOQsGpCj330BPq/dqkBnL8ozr+cJeNxSXmSRGP8Ii7ciRUaw sha512-6M1RaZmYPxkcM1FRsLc/y6zSsZ1rbhIurUQTnjAsC61+rPIiMFE9rFdd3vc2QSAcdWrtSgqIYF1kUYbA1RcLuQ==" + }, + { + "href": "lib/leaflet-plugins/layer/Icon.Canvas.js", + "size": 479, + "integrity": "sha256-I1I4HGf/uHUnl1QEYZHGBligYxZq+hSUY/mAuFNA0Dc= sha384-wCWJo+bvWz9Z9wzahZ1X7WeImlYf4+3Klndd2Gkkj5KFRH1t2qY2o5nEvtwupQPb sha512-Mp3UlHsCsccTw94JnwB+gC1xKWmABnxLd2+HpOFoAMq66Q7aKyvQG5Y/Smy3n6s59Y0Vuit9+3OjXyKybikPCA==" + }, + { + "href": "lib/leaflet-plugins/layer/Layer.Deferred.js", + "size": 1286, + "integrity": "sha256-c0BG7xUtOEvc6Kov1OHFJZK3ioFLLd7kJGDWToo5Puc= sha384-71jziI9XB/6mBxyJzXGXPClFt2yRFerZ0m7CuFajgjgKUThGis4BFJkuV0F8Lexi sha512-e3VjlIqqujS1bGYdBOw4FpevzgpxjIFq16NCopXQeyOFxTSWiJ/VTJNq2uVoieFRMF9keT1bxnQnKQRoKR/etQ==" + }, + { + "href": "lib/leaflet-plugins/layer/Marker.Rotate.js", + "size": 1993, + "integrity": "sha256-5Pkzykd7QscD1NL8LVWTN/Jml1uQdcPROyO/Nex1cYE= sha384-EuBZtnrPku8uFv5ywsAL4bZTlim2nGqPH96QrueQQmkyIABM58GMuHP6FOD5vpkL sha512-6GkiShFQsqxMNRZb7D0AXnQKJ8M6GYA9RqlNKkHBYoSJzotXq+eb3ihgEVcAaF5GukoG9gu3ND3VrX8q7JXIFg==" + }, + { + "href": "lib/leaflet-plugins/layer/Marker.Text.js", + "size": 1266, + "integrity": "sha256-W36SueuHzLBCXxH5750VoPdqQEgGyOIzQuI0ryPdwFo= sha384-DXClwmJubUR9xAQUHrDIq1ydvzjHUaPmLrPynnCfzitBLgc7QW5sPS9qGDn3bYQv sha512-q/VC/6oyenV8mzuBU7n8WMr5iuHP4UDFvf7ICFv/8O52xQhBV3syzxVQiF2Ej7rnjWWj2MInZGEBw23iHHLnNg==" + }, + { + "href": "lib/messageformat/bin/messageformat.js", + "size": 3846, + "integrity": "sha256-jS/2hOWScPbIU5ExDh+6kW7kqmKriwTs8XVp+HLb+S4= sha384-AJiBXy4twRD5Rd8evaKV29YAtJ0LoAS7W+SFPcaj7yHuVeQm4pKKIkbIpMnJQdBv sha512-WjoPXLX2Q0hmGVypZxXktcxYZSM257c9Lpclsn6lghkZVc8hdczJNMgPEurwyzPld5bPeUxpOzrPlj8EGAfWgQ==" + }, + { + "href": "lib/messageformat/doc/Compiler.html", + "size": 9276, + "integrity": "sha256-I2G1idL0a6pkKPP9rv7bmbZCYds14I3UpycFJIr92As= sha384-9242K7bcac3eNaRyRamwztbuxzKbRPjelrp8QukfobB2+0oLbY6xDiQmuR/HiXEU sha512-8ngDlJk2bB8S9jepnc3Imv8wE/GE8j6cYz24cP6Yet0eLek6pmMFSF+HljMnnyWdq4t8lJsuO5IOgrSyOwgzng==" + }, + { + "href": "lib/messageformat/doc/MessageFormat.formatters.html", + "size": 11783, + "integrity": "sha256-Twb980hrgHiSFiqNzQ0j1YB2FSbNgEdYsa5Px/kNP58= sha384-Ho5lbd9pm3eZEZNuEVlP6DArc3e7Yjeif3giZC9mE9wsbieJO8nu69pTSio0Gvtj sha512-Dgm6eKH6dYA/nIOIfRLOahqWHPc7OZVPbQbTegb/7XBGADsAtulBkvUZbnKCQdEdWNjQljTGt/CbwGm+MJYXkg==" + }, + { + "href": "lib/messageformat/doc/MessageFormat.html", + "size": 24947, + "integrity": "sha256-Djn/vOKuIZo+/pWLOuYc+Dw6iTQ3ZmLGRw+rIB5sgFY= sha384-NXkpiWaUqKdcQ9gO8PDPlFPM+VAPORYoyOtWQ9uDt9x1rOJBazKHGnltTAwB/BD2 sha512-LevQRntOKHZ7e0ePzsihrTd5K9jY6+h3VlpvRjIlNe7FKMHwR+Iz2EdXRXUnQbUhDK1a5OTFJlzXUx9lnXTXtg==" + }, + { + "href": "lib/messageformat/doc/Runtime.html", + "size": 14341, + "integrity": "sha256-deWAuw8Gmr2b+tldAkCoGpTU7TdCAiNt6Iq7CHB4tMY= sha384-lH/4kaozoZQuMSqdzRWxtRDaGY7CI95mL/VC7yvlUqwRl7rKHkGYRjWsvfuZ9xN3 sha512-STZX+MtbR87Qt9LQdlU1Zw+WURubqoW+1aRkrstdSm6886auMDOoS+d7TI4TqBVgAxIDUaC3i68u4vDHqyrboA==" + }, + { + "href": "lib/messageformat/doc/compiler.js.html", + "size": 7489, + "integrity": "sha256-Npow5p9gA8e/eZkf+Cw7a99RwpV8W86+mzYRlyAz+14= sha384-gwJ9o3J4/FzM4KVe0GOLfpbQq5XOx+mTrEhdr8vrba8Ou4tA/Yzh+detM9cVoNi+ sha512-7usyIXTDjLZUU7AMYC6e/ja3MGtzTfT/IlyfznbY+OYODGBKtHLGQ3GDntm4lcTonm6PTwZmntM/W9Hpt+r1jw==" + }, + { + "href": "lib/messageformat/doc/index.html", + "size": 2534, + "integrity": "sha256-rYq/c0Cv4j6LgH9GGrVcVha6/Amq9swNpzZ6uH9yAhk= sha384-c7OmZJSzz5Hm13j3LcfUsjamimfTyrVByRkl7V8Zx/Xaxp7nrskMW6yPbssdTijH sha512-ZrGXOURt1Ieb0s3e4twymhAWTalgZKnoLsIBN6MYiNsr5hUl2pXhfJALjV6wb1WwEJBml0GN7E/k7s93Qye4jw==" + }, + { + "href": "lib/messageformat/doc/index.js.html", + "size": 20264, + "integrity": "sha256-kK2i0MrKGuyKXMnY2Plvlg2zHElBim6btLwdYBmLLp8= sha384-JG1VEKywwgeVB1D1kTA9fom/mC/sA5Xx3Xk9IX1dGER0NEyNySu05hzWaDytDIo+ sha512-tPk0rq4FTsFNIlCOGNXGjwJfx8gPMyy57hx9IT4KyNWzy6zUfYoV/4oP6AeV+jxpXhgk7vZfpRlJKBoV7b/8PA==" + }, + { + "href": "lib/messageformat/doc/runtime.js.html", + "size": 5739, + "integrity": "sha256-7xU8551QQ+4qQTjIUoGGPsim/hZJy61mIEx8pXPctZA= sha384-oU35Sq46A+7++zaax7z9Z62MyK5PG5aGWytp2HzfU/9fEdY4zXtFgihJDpf/FntG sha512-8JBBhTZhf5c3Tu+jUDlNuHqpDeik+57xIkAProyidei6CiPRIShloavMsPrBvSjwNo0iu1p6JGuvJBRfA+VNIg==" + }, + { + "href": "lib/messageformat/example/i18n.js", + "size": 2020, + "integrity": "sha256-1ps9Rumtx8fPfqUsTSUDw1pjT3xQbHd4u9PxOH17fVs= sha384-9+4z1zw46/H5OS90EvafP73P/BT6jkRdLuObFKyGzI/f4QqKZplcz2w93Iacj4aI sha512-icGPlOjJezhwaBznKcNzlwP7EyW/RCngbTGAfvEPTb/Co9q/tzrQ66GpdhSrD5TTKHOqh9yynzmm8o9PF0OuTQ==" + }, + { + "href": "lib/messageformat/example/index.html", + "size": 813, + "integrity": "sha256-/+W2u0ulRmCLu0cIJpz4U+utstHIUY87Ptl4Hx+fZgg= sha384-+aFnPbGdNQkKJLB+ru/G06bI9emOswvgti2nOiu7+HIsOlqqxHVN4JPVal1OvU7X sha512-L+un1I+IhgALnIs5RoTr2ErlFdgqqAwtu0PN0xwBNj7UYcbn4Qs7zOnolQCzYFFbimAvf4/58qKhgQ92oniA1Q==" + }, + { + "href": "lib/moment/dist/moment.js", + "size": 154670, + "integrity": "sha256-O38zy8IHPyjdXH96JoQjRZuiXp7H2hTOG7dIU6nauTQ= sha384-uCagwHdHZKcXOPbVYux6Y4aaIyDipxjnrigFIJtsMVyKGp1A4Z7/SbY710whXQC3 sha512-XOWfsk4BrpwrLB1xY8ArPw+wNySjfmRT/pA81YMd5roVm95m6XZv90haGIiAv+jjuuTzoFBBZQydEyJL6cRzdQ==" + }, + { + "href": "lib/moment/locale/af.js", + "size": 2753, + "integrity": "sha256-xZ4vLQkJiCnQD12rhebsYj9qqecChewqrBIDCgFOQWE= sha384-Jag4V5iOBMBW0O1HWXhaqbokmZEeapqPeN+ES1GctnrqIuzzOkNBzVycDosgjZyR sha512-CpH1ueJiaFOZmGJLB8Umn5wuRdUHlczYil6Lk3BBz5PF/MsPbOA1EfEw6TnJDmev3i3Z9hHsk/k6IdQTjmif/g==" + }, + { + "href": "lib/moment/locale/ar-dz.js", + "size": 5377, + "integrity": "sha256-L88UZa2fyzOh7gAYjQ2MsZ4NkJTanif1ZES2flDGgQw= sha384-y1/TkMT2t6LyDIE+P8epSD0nXTF8Fk7PItvmWrM1nRbvBhLdVQHRy11e5HbRSxct sha512-LciQXl3ZIms/0BOD8MUOUw01e/xVa+d98MyaAhg4tDcbxJc2aWwbBjia79o0ksFooUFHPMCBt6jsd5Z4i2MEFg==" + }, + { + "href": "lib/moment/locale/ar-kw.js", + "size": 2478, + "integrity": "sha256-680q/RKYkOSaqRy9ZxiRbOt0MSKk0mTGgaUz2AZt5nM= sha384-A2qeyKAz8+77hxcfns6aQSXQfiIrxo+IU4FtpSpyPRgu5PAEFB+aG+rZTzb/hDMD sha512-9BvmJKVy0SGNES5woF6NLhIoehW+pvg+5qrj4lZrsMwU3O1zeYFJdkwuVn6AFEXr12vVGk4TN6iqasXh3L0pEw==" + }, + { + "href": "lib/moment/locale/ar-ly.js", + "size": 5652, + "integrity": "sha256-CnC/P2awdNaEU68SUFnWDxzk1altNAGwu38BP7elZpY= sha384-4aCsq2yXXH1f02pK+LaaK/2pNsDkG754LZM1a6Dr/kl+/z6RsGevhy6BnqhYOnUm sha512-Vu3Z9GBTnBgGJaDbweYbCRwNG7iruNtfgTF+49SB200aXdtJcP4Rl+KAzu5QI73qkwGdC0u/rAhjl9d0FTioFw==" + }, + { + "href": "lib/moment/locale/ar-ma.js", + "size": 2533, + "integrity": "sha256-riinxNmUodQFny3B5jhRgvPVqrJi1jemvfyA8+P1Rx4= sha384-T1aT0aiSzL9ReUx/yKTdBLoT2nR5HmYnag2z23/hOxWmL72IApzrPTMG5kkLOCI5 sha512-72mBTYQGRR0N/u97JVFLhK5G28EUSwFOfD37cflN3IgMqu291r7AEmoatWGMrX6/cZ4kDs16a3zdOG7lBgVUvg==" + }, + { + "href": "lib/moment/locale/ar-sa.js", + "size": 3782, + "integrity": "sha256-SROQCjgO0ztmL8Upn9oFz7p0NnhwuiPz2dtd/Qd1yHY= sha384-88i6uxQ6q1Asj4g2Jq401SWy+zTpSYNBDG5f82g8IY6TZS3Iwtw6BPTJdrmXFRAY sha512-U4X0UaHSk38/KhAqzPQQyGws3FdRyoEGie2wTujDJpBQGgaq/jNmaI872ecyRhZUvxDnvv6bc47hpdfLJzUcVg==" + }, + { + "href": "lib/moment/locale/ar-tn.js", + "size": 2480, + "integrity": "sha256-K2phH30hoHUtkQE0eyKUPc3ZEpP34JrBHDsEzuQfWU8= sha384-FvDP9EW/uvMchW/h94TbKhFV1D0WhSnkeP4FATACVHL6eUGotZjvciYk5A+ZupKz sha512-1XtQbpbodEn7i0m3Go7oPt1RZdb91oMldWO8WnOORMZKQxSi0doDDVuUHDeuERgqgqDvHdVOsmBphsE8PwrA7g==" + }, + { + "href": "lib/moment/locale/ar.js", + "size": 6136, + "integrity": "sha256-c0hfFsuTF/FWurBbqKMjP6h1E88ctSco/vxTcD/9Wz4= sha384-dbavgxRAW1b3eX/ummaui3kDgD3otir28bZE/qqQ1Av3buElwf09ReSmupGc8lPP sha512-UpNMSOGy4gUpq98IPaBYX4ak/pWQudeTTPY5eKdcmUXyW1a5Ue98tIKJ7dL+6cAp0Objz+FSqOZGYI0z/hDNAQ==" + }, + { + "href": "lib/moment/locale/az.js", + "size": 3570, + "integrity": "sha256-Ic/hTpILPtxLw5RwmSn2GqXy+eUdPKDG7dHlHynX48k= sha384-BlqklLeZ9Bj2ZOgbztloeXUb4M+zNHto/QTDLjhPQ2bawEvlmB2822pd1KEyP9Hi sha512-Zm6NkfK5C+OYY+mOgMF44PpawmCLZ6lqgeU0o4vFlZMAT1XIsphpghtn/YSjopkKfNjjSq2cLQnWCNsCpSHwcg==" + }, + { + "href": "lib/moment/locale/be.js", + "size": 6030, + "integrity": "sha256-qgZX9PHp+e86POKJvIgvWXEZXkaBSZ8CQJSG7ZheFAc= sha384-xIEA3Pvpw03Rmzrh9HoX4vy4UmhTbi6sRoTICYr4mcoE2IgSG5N/UclJ45AO4N53 sha512-vdwLYbFRSRbrAHwutLpfOksAwKwgwqG/kFOWdrwd4FlW6xM2PtQnIvRZSIK2TzTM7IpbpWD+K3wr2rD0hbKuOw==" + }, + { + "href": "lib/moment/locale/bg.js", + "size": 3623, + "integrity": "sha256-DQNDCe7b0D8X4i29ljyMyNSQyOh385xsQIFjbRzSj8o= sha384-dmPFJyPY+JfH826t9JGJUtZOdewANsG6q3Ad7BVXjoGaTAvNonBmOmP5e2AGn6YN sha512-14swHeheXKSTxNsJBzKoh4RpzPwkqHCQILwahueDSBYL0TFOkKa2aHFheNTLl/VLe+FkXN/TvEJyItH8Eu9O2A==" + }, + { + "href": "lib/moment/locale/bm.js", + "size": 2233, + "integrity": "sha256-HzIX1p9lEuo5hPt0KOGv4Md3nPOCJYLFLm6qiYKsI7E= sha384-wkKTTl2tj/WFhVZ2eh4WKs+uX4+aj2RUxqBCT2i1l/xY1XdWG1oyosfWVMtAjOjg sha512-fU4cMnRQw/f7Pcu0gPGaon7EC6VPNn6x7d4E+dhfEi86TAi+ypISaaV61Bk4jSMn+td6pSJ587oRbYLxdjgASA==" + }, + { + "href": "lib/moment/locale/bn-bd.js", + "size": 5177, + "integrity": "sha256-hyls2LkEtjPYmwpyt3mq8E6NYl/Y7XcuMicEazo6z4A= sha384-+zZ/MJzD3RK54mvLfvB28T5xrCfwKk2nCWrfVJnRvG/xLOxDJj1XXps7C9dxfpdW sha512-5PkQqkPRrSgz+TDxl9jCUpykkm0723B+zdy43lXijfXEmpPLI2/YG9VJmb8Rg61gUyFM8JfK28epnPq/gNPlyA==" + }, + { + "href": "lib/moment/locale/bn.js", + "size": 4690, + "integrity": "sha256-pD+XTsFfY45nzsnXPLM8M5znyzW7cEG0eKkwGXl3qJA= sha384-O+bYDKJ1KPMjp7RjQRggBZeJT2CHhRRPLspcQRGzgOSkPn1piPB+pd7PnWVINbVK sha512-79S569USAmtE40/VTJnrQzRz5s6WbK8y+qezx45mAVlJJVShBg2bUG3aC6ObUMtsgu33RoXXNMpft3lyzIWbdQ==" + }, + { + "href": "lib/moment/locale/bo.js", + "size": 5211, + "integrity": "sha256-2/g9GWq2kUnV8FaitE4GRBYm8eXTw6oaMA5k3FFQVl8= sha384-IxcexMXkvMRhZC2Wvg89iRFgdIp/0aWzneVCTtOD65713InC8kmAOLS16tAco+8v sha512-GLE8YbnM2W8gAFbOzM+2SalnmLMAU2/hGU3ZZ/Zz1SqiXJDx9IaStusoV9hFT9lvo6TiGgPTrveUt94Km93Bxw==" + }, + { + "href": "lib/moment/locale/br.js", + "size": 5520, + "integrity": "sha256-NbQRP3VSQAY53HbqQNVfG+b0SvLq9CiefDfk5ldSK6Q= sha384-3UQK6B/IguIbdRk1OBE7nWx0Bc2sV1H+BCHGE3R6zy8qtpe1VVtqlqUTYHlX84Na sha512-muCBLByGju8Gnq0vT2GKMyrjhGL0Ym52GFT0NiAIhpgUdfDJIYaOkPTgNVCXLk1MdjTy3Tm3y0MxI5mUG8NQ6Q==" + }, + { + "href": "lib/moment/locale/bs.js", + "size": 5387, + "integrity": "sha256-HRhfK3HBi7FNDl2wY9WZEjltQqBK7JfPu+wZpbuLtew= sha384-oW7xN636RfQmmm9XpDuTzE6PItp2YZlqJxkqVF6Y3ttlLrDvcddZwF+ZbX9pVEnW sha512-5Fwx38w3zXf98PwqeTG7a5xNYe/EsDF4YUh/f/CDrcpbBCfepY+3p3DNMOs3opDoq91Xggj1+jKR5PODLIDQVQ==" + }, + { + "href": "lib/moment/locale/ca.js", + "size": 3751, + "integrity": "sha256-wOvjuwM86PgsZqRt0pfBmzDIC6ZANschrKNqf4bxsjQ= sha384-+kjW8NykmISotesA5F355em3A5NsEJ5SKAVaInZXEL35b17lAjhT1pJTXw5xQ2BN sha512-AKxOFExY34GBCumt87Gw12B9YyWw+anWi8Tp/i9TFuvUVLDY6+V2vTmHll/mWmYI02E7WENVKHDi4z418gkyyQ==" + }, + { + "href": "lib/moment/locale/cs.js", + "size": 7750, + "integrity": "sha256-Dc9RHAb1ZakX5HGMzkZzkr+Ji6YK8rP9sDKxkQWZ68U= sha384-kFwn+WX/sUsWIr/3vWs/CGmR9KWPFCdWQXm+XufvUE+QHtd+h6Ha2p0HG3XwQqOD sha512-jUefDUS6fQdQts2eVwegex0MjJfsNAgo6Lyp3Q4Hay3n0GmNHidY7W6g3fJd3NMqW/HxDfUr+hHtiZkT8lyHog==" + }, + { + "href": "lib/moment/locale/cv.js", + "size": 2913, + "integrity": "sha256-Ixs6ZbxL601vCSCWLa/IJhFAPfSXllXOpT2XQNKYaQQ= sha384-KV9Pvj8vS62RBihDR3YmQzkibhFAmrxupqtOb1FlWHeLT9key0LYrNyS1HCzvAdD sha512-uEuQ2gIlNoLS7sAlS+hDfWRlFBB/1ib/eIkAlQvDxYMlUQpqZcT+KrvVIITbB+baa8KulLXKg6wygY7VB6KwXw==" + }, + { + "href": "lib/moment/locale/cy.js", + "size": 3542, + "integrity": "sha256-BdEAaS6M3UprOw61brN8nGTayrMlSq66GMJGibGKbPg= sha384-XDXHwKSaDiLy2l6LK3KDZqWab7gb9ocfiboJT8YqGYA0Du9OahAIMTyB3MLiR7VE sha512-0IyEjbfkyQiTRad9/Uwz9YCVACX0nGuRhAEz8SNVLxT+D79mPWJ5jFBi2TJfUYGpoV785H+tBrT8vr/iM5Z/NQ==" + }, + { + "href": "lib/moment/locale/da.js", + "size": 2161, + "integrity": "sha256-iR6QVE0QYepXi1EXOi3EY4wOmvlcwphvH4mtUAjjAec= sha384-sjhJBFEJl67bojcXr4QXBgyK+uCQisE4SdL9tm82nRkUnDJC4oD52xu3tK2uiwey sha512-22YurY/WjtgvkvOit1sR34nJroPzm0WdkOtPah/bv0TKqajxMVS2SLKxeSwwbBp+NlsUOItFS2Bks5tWWdGzhQ==" + }, + { + "href": "lib/moment/locale/de-at.js", + "size": 3259, + "integrity": "sha256-BXXIumaXTy6z19dOFqJlxA2/54As797MnxlvksDs7pc= sha384-GXOO5wqRYKi/5Hmd+W4mcPjiCouYaddy4w279PuhSVfMiCmH3AXAhu1tYmzGXuQB sha512-FVXZjacW9gvhZ1McIMvR2YgXNEsEZwJUx7hV6Z7r6q1xyDTu8XbJDd8PSdxIAwIwWY/LmSmxsXbbFGS3j7LKYw==" + }, + { + "href": "lib/moment/locale/de-ch.js", + "size": 3094, + "integrity": "sha256-s8PXGryYIA1XnLvvidRwpsuycsT6px4xIypo72RR7dQ= sha384-bRzfuKFw31IZjJgkuk2GSFgoEIRtI/LdZw+BLALDT7KVoML5zpiYryXAABGGq9pe sha512-PLyFYsorUpZ3sAuZl+jBZlitKVi/bbD0ZYQA7dZGJzJ0rN2fowdG+R5FW+gzCLxblIrTWbvXSK7ZnwbcRWNwaA==" + }, + { + "href": "lib/moment/locale/de.js", + "size": 3182, + "integrity": "sha256-IPsNCWficg0TWmiUFlv5bjJ7Qr3ty/Ramy+eRNp5htw= sha384-Z7YjBNvHR3qOBK/Tb8huQ8TE+K+Cgh54CN7QZucN12L0/4xgt0FOUgAB6V6W+nZo sha512-P+evn76KrzpDUzeeOa7sLmzWhdE4yWud/Hh8Z0qSTnUuKzAPPdDrViwOIJtWG/9kmZdXz4KPJ3wcJchPkbsJmg==" + }, + { + "href": "lib/moment/locale/dv.js", + "size": 3140, + "integrity": "sha256-lKFWP6q5/mHzWaUVBC9W4mcohiAOCE3pi72Ydp9xumk= sha384-qHv5kHNMOXJl9yX5FU0e3wDMHKh+5o3abrLrzBNxBkogCgOsVBF0x4V9Og7f2/VC sha512-ub0HgX60EZ6Gj0XApekgSVzI1/haf1dsiIWZ0naVbhOJBe4Oth14uOYlXNoOjlThecRHn448S/hNyZV4Jyr2Yw==" + }, + { + "href": "lib/moment/locale/el.js", + "size": 4617, + "integrity": "sha256-pz+otZ3QmdKKeCSYBXc3lDcnP27zWpBAnPNkkrwrNgA= sha384-oK/HRjiB7LQbs0R73vIOJ1brMBWiiJ9Ih1YAYNS//gIKCsnNbLoSdF3UoE5dLb4F sha512-wFWEQsiK5gIBKSCsTfDPnulRKYtpvb6p2dGeT21LTAgM5B8s+TWnj2Ui2Srqzn4YYbZl6530J0L/NhsxNz2Jsw==" + }, + { + "href": "lib/moment/locale/en-au.js", + "size": 2625, + "integrity": "sha256-aoTYDpnVfxyh+qHcyp9I6ZJd5AE6xc6rUsvyCwWc/4w= sha384-vYjgs0yg2wmj0enDEONkwKU5Xrx2Azl9BUxvYkWKdkUwsLl4bPLldeFtmaJ/pvbs sha512-URUhaqyj94wyOtqff9mnf6f0/IqYGF8pXdOzcKsGfiZDkLQfzlkNfC35o/c+yVXSGcenbci3e5k2Qj2zPBd8FA==" + }, + { + "href": "lib/moment/locale/en-ca.js", + "size": 2458, + "integrity": "sha256-17R9cc1bY6DNe8OUXKF5nZNFup3D6FNWIx27T2vs3QE= sha384-FOmmMcOOisBDHpjW4rw2dyUO5U5eZmbpyp7VHwNI0RLVIeMdFxtIhv9W7AuYxD/V sha512-KsJMwj2jQu+JOanlYBKY4e2YzMLDUBVSpnQVy0JQxmnWxi9YIE+Ji6tEacoR9nnKuZqdQbih6XkorQYigJ0x7Q==" + }, + { + "href": "lib/moment/locale/en-gb.js", + "size": 2631, + "integrity": "sha256-Ruhr/Yc84rphiF+qnguirhpRBXT2mNajq6faSdFQXrk= sha384-GynDVEm8ReGeEQ9QJIUQxPLd27IXfrc8GZsgCHGv6FZ/GySOJDW2BP3IWhqVhqzV sha512-jI2txqAkLaiVN5tUU6tlJRL4SEqkY9SB8YVTEdd6oow7JhQ3+Qtho4/5jjXURaRuYt4gQa7nod2+Cfiz3zgc6A==" + }, + { + "href": "lib/moment/locale/en-ie.js", + "size": 2629, + "integrity": "sha256-QaPQP7Vh2zfcHjpjy6EEZ8C8q7KrfniDKfhra+b3LZ4= sha384-x/XlQ+38c5y3tZTlrBr5BrCw0YBME5We+RJiIySFsG8mry7b0oilLkaiE8DaaOKi sha512-b17YmFVJ2Lj5Y9GSDUHCTmG0cT5v0/VAiWX17l3eYMZ8TZdjcXK2mCzlj3TMFWVAWBAaDzTVRu6gdYFGF8MNgw==" + }, + { + "href": "lib/moment/locale/en-il.js", + "size": 2451, + "integrity": "sha256-SUxfJtChbIwWRdcM/DJ+GQhoMc54vJhZn05avDIdt9c= sha384-P+aSBhncpuyQNTIJraRxux5DXBy3peAusits/GEjkgqGiMADXBRn4etoOiBa9nOi sha512-yyhT72V7trNfW5/UkmqZnkXPR76dN3tv1qUs2zHJkyZ8rLcBb9PRtdOr0YBX+WJTOvGGan19ZC6dZA0M9G2QSQ==" + }, + { + "href": "lib/moment/locale/en-in.js", + "size": 2625, + "integrity": "sha256-KQ3VPLYmLPwiyWH6+WmFGt+ow4swyAxJa4yPGSMqE+g= sha384-k33uq6OdTdzR4vvZUxkHvo4WqKbzqnZmYxyl1OQFeQiKUyeq51Ag6ym/VQ2GBpc5 sha512-1Flay9mwUWc4Fn/r7/XjJP7/LxLNJTHbaDrwpVI3qVMbj9JWl3um0RJ0vW67iFWKyZl9JzfjlqgzQPGO2BBEzw==" + }, + { + "href": "lib/moment/locale/en-nz.js", + "size": 2634, + "integrity": "sha256-lZDPYdKrG4P3k76fB0NAOX5jn7sRKoDIu30uOnfEVEg= sha384-xXHZp7paJ54+l5O4LhXenSVVZrH4OArE1g6EU/57gRCrbtYu561UD1EyKRsEIj39 sha512-WvFaw/SWPx4TeSP1zzEEKSdq50/9e2pa3Q1CnMp44e7eNIgxujJc+VodB96u6UgCnToVPbKxaPwhTkcKRS0KRA==" + }, + { + "href": "lib/moment/locale/en-sg.js", + "size": 2643, + "integrity": "sha256-47KUSdZ+XVPTQgtfTsIH29cPZROAVztZ85ruKxucpS0= sha384-7OEbmLku+jo1IA4nobh2oEvAPsh+VPJEACl7WkkRPcys2SA06eV32+1+JjqfaI41 sha512-xilgKWLrQfEVyX7o0gnC3DnplKmitee6V0rAtvPJwJxu80qHTi3ODa897GEjY4RMt12WmLZEStXo6BaLG1CGTw==" + }, + { + "href": "lib/moment/locale/eo.js", + "size": 2918, + "integrity": "sha256-gj0+IfhfnTgB9wBMxc3oLV9F2Y6XeXkyJUOmWQhBHkw= sha384-IFNQpFBe31bjfrP+IlXA/upVE2LGKABu6hExrkaHfHNjKo5nzqbp4d+bjYenM5dn sha512-KLtk8zmSieXNg5ENcTOa0J69ztXhZl2Srah7Fqx2J4Xjn1hPobHgz49J6uucNEflPXS2gfIf2xlHh2bcPA58gQ==" + }, + { + "href": "lib/moment/locale/es-do.js", + "size": 4197, + "integrity": "sha256-odKQGdz/DOKhHN+XAYwg6Z+8tzkWPAWa2L8kCPd9MWE= sha384-0gjhOHma3UkvDyEp8PZXNuBsu/EFjXisSSbbwzHKuX3HwjLEQwJ0LsONJ0WQrATj sha512-71aPWnu9fOR0qV1gsaBPZ0FVfw0rcC/4M60EsLlXuQFdsOGKYLlc5uD7SpGkKdiMPqEkfzLmNRBrnFil4IEIbQ==" + }, + { + "href": "lib/moment/locale/es-mx.js", + "size": 4270, + "integrity": "sha256-ojNXP2Qcyck8h7VV/FVkwuXruX4lEzjpcbp2501RJkY= sha384-UrWsqD8DYDYL+Bu6zVAOH+Uv+BCtJ2OW3X0NI/pRPFZ3jTBiTRlXcmC6yEY2Txuh sha512-kT4EIbiERRJP5XJ5TgYPVGCFSnJOEM2GBNmPA73MTf8g9O4e60wJWcPKu2YZQxKt5C8Vx1DW1njg1hHQoYr3Nw==" + }, + { + "href": "lib/moment/locale/es-us.js", + "size": 4294, + "integrity": "sha256-OSPGvWE3OH1e3GL23AF0zJ7vg2MjjBbu94vZ2cab+vw= sha384-HMVg18nDTBX+LeR7UUNEapT0Ul/ytdVbDUFDGna0QoHQEkzl6jbMi7Qjq/vA8SLF sha512-oGvr+bknU5cho0+Dgu7rnUIkeskGtTDHUTGyOMcHqBk9nu9aY6+iY6flaVTLyFUJTGVIrL8nK94EKqZREqDy0g==" + }, + { + "href": "lib/moment/locale/es.js", + "size": 4254, + "integrity": "sha256-Ko8XkNSS/DOJM6AyqGL5mZjzG8r3oOT8KYtqPLBM334= sha384-bcq+kxS5MtvmVwy9SF7ksbM/aGz4cfyizyqRawShW5h4oqIyD2K8WPwCE2FTTZiE sha512-s6QFRCQyMGG08XZfvbslrB9i/mqG1UoeOR5SB5W/FI5KhkEcxXwQQvnsYkhQPwlrW+EUELrheTbWzbiPt0kudw==" + }, + { + "href": "lib/moment/locale/et.js", + "size": 3255, + "integrity": "sha256-lcl0Z526QZt9g1+lE0DEML0AZr3DinoTnKpXW2c4nX4= sha384-zah6shvzuVe1jpqy+xc8cq207y18Ykxzm/a7nUyRWa6gPC/mvyuhwH1B8kgn9emn sha512-IIXE07DMFshTKTWhSX2BPrjNZuvdZFoh3jV0CVsOjb/LVTMimDTWPV3QFBlBnUg9GYJwTCkzH1wdueFx6c8EHg==" + }, + { + "href": "lib/moment/locale/eu.js", + "size": 2544, + "integrity": "sha256-7LwHzbIVz5mWQF+lbvMGdh7GqTg+GaU8K0XWocXE3Gg= sha384-oNuHSJ59U0E3I8TyfgwfPyGEv2ywkdi92TskWGkSbDQVuiaYi6Mz6KLF6ihHPKgF sha512-Va9MRPtLQPkrC2q4ZisbB+OeBA99JVoU+aOOmzZibqSx4os1agitTHslZL34XbVHNribrzd8a0lYyhtx4C1P4g==" + }, + { + "href": "lib/moment/locale/fa.js", + "size": 3998, + "integrity": "sha256-Fcpmzh+qhlxomY/MirEWAgdja5FhrXb3z3rNDXwOvR8= sha384-kvOp4j1w+7efUvIJ+dmO5RPupRdA/QqFC4ToSEfvQrc5byBEG4U3c4Q/N+IFq1Zz sha512-TLaPcx2VcpoBz9ezBvKrOYz8lOsAsszGpjdPEu79D1YOEqJykwOow9Hr4cjNNNaUM9Sy8jayT9p+46xz2U0Bgg==" + }, + { + "href": "lib/moment/locale/fi.js", + "size": 4444, + "integrity": "sha256-EznUFwAZWIpnZKViNsKnxbI4ms5SqexejAnxmXk1dB8= sha384-TYdGagSB5mCcP8BrViC9bTZf1NCVgybkfudt+K5Vp+WM9VQmbpDfZ6zKBwoSDacu sha512-jxwCY54EXTROnegT4faikDhuWlKkPcRF0yqh2xM3Q4gc3O+Vx5jex8k5rGQmHNIPn7Tpdwz+SU6zyv2xk5KIsA==" + }, + { + "href": "lib/moment/locale/fil.js", + "size": 2326, + "integrity": "sha256-0kysDQBp2JxItMjO40zdy345iSyR8HuIRXT+DK+2bvc= sha384-C3WdAWDK2KXMbdGV1/iSaiaWkyJjv4LMnUEnNkw9HnbuVWz968w96dq5qcS6DRlZ sha512-2u51Hn8P0l89Zkv7M247VNcnnpebl1VyoZO66ora7jpBdG7tXHT70np6dIKCvLQi03ju/Jtzw6jxp4dZwNth2Q==" + }, + { + "href": "lib/moment/locale/fo.js", + "size": 2316, + "integrity": "sha256-YzjeVzYB4zADCRhWm40vgPmKV3VOdIoD/1bjZy+iW+c= sha384-1YIuP/WnuDRPA5d0ZtBKs0u7MMX7IN1Rfv2oolF0ez2gh7wbmIcRUTOTNRLjo5vm sha512-8xuJaICIIQvpSP5KI9QlWHHBAfLje2s3XgTlcgbsgPMtuBEQP7PwGZ5zMKtyY+4AudDcc3Ex/FfX4hOa6HeW5A==" + }, + { + "href": "lib/moment/locale/fr-ca.js", + "size": 2704, + "integrity": "sha256-WcWs+6VgX6ZBchvxYSMwAWTMwEP0utYAmqjYgLFZEko= sha384-xmHpapGc1t9flGqLS+rkuYCwt5biFFcP/jImrGLAxcTnrlvLupr891MrW6ROdiQd sha512-KiwcUzjdaRKDZE6RbEeOBff/CgZ8DdmEc2GAZrDZahyIuMOs4AIDf6C0IJ2BDzX24StlAleHNE/x55BOD0r3Qg==" + }, + { + "href": "lib/moment/locale/fr-ch.js", + "size": 2879, + "integrity": "sha256-sy9Qqj0Ue6VEHXcopFvOWSEl/QqXEXykuTsyxjk9hH0= sha384-/3NY8qOiQWCX4YquwQT0labCOf/b2EcvN849QLSILUugNgFzhlLlEp+oEun8eDTE sha512-WBoai1rl4oDtq+Ak51yGmbGGZVH2f1TqFwocjLQSW8iThaeKw7B7pLWwuOjGh0sYk7XwOsss/0iI4duDZZ9BEQ==" + }, + { + "href": "lib/moment/locale/fr.js", + "size": 4211, + "integrity": "sha256-2HtOuFC8d0LBBFV0UNCnDRikipFzNSIa8I0jhQZnUj4= sha384-GyNGl6lakS09XjshIVwHg2fGacbO71yFrlvbRZya4eThgSH27lkLVqG+zY3oRE2m sha512-ayAOICTY7D1MorjvKUTiOlqox8o0dh6jE4lRfD8E0kYp5OepLSQBelDWizEN89AUc3P4l/4OD7ZnsIEV3V0hBA==" + }, + { + "href": "lib/moment/locale/fy.js", + "size": 2891, + "integrity": "sha256-wzrlnZoFrKDb6G10v/JetE0E7pe3OANPy3KiG3PsHPE= sha384-xkyAHtl699oUGcPLeeIXIkt80syGAiQK0IRSgUTBXlZgOunGsAY+3RWoKwQrH+Ph sha512-0dKRfURgaEM6dB+Ca8zeHTuqYRZClA6Xuxod1FQHrY4lXa+fUULeR5wOlzP9Vx0B0Z4NhmXYhDgj222zJVALSg==" + }, + { + "href": "lib/moment/locale/ga.js", + "size": 3056, + "integrity": "sha256-/G1dRBVTsjtevDx5iWSZoJOjKF8eYTSmgLiJm1zKTIY= sha384-+D1yRTt6D1/k+r/91RZVbSnpXu4XyQ8DwQwcmx7VpHwg4h69C/kASkgSxcSN0CK2 sha512-kSua5pAs4stJnKqGLVfCPZAWE1Dk0pM65xBEm1J39CNbvzLtNwNCOI5OJX5kc+5oNXbu6qkFzdVVRjj/Rg2rlg==" + }, + { + "href": "lib/moment/locale/gd.js", + "size": 3076, + "integrity": "sha256-76HXefZWcYCaY/kAR5xpvtGcJi8v55Ngdnk70T3toIA= sha384-p61YdvQdiF5cljZzRoFwr50MQ8i1WFJbmKuUNRvH/Zob2io63/xImSmVOTz9JI0w sha512-roQXcZnUK/b7vv+XhVvHHVb2uY0mq5zfeVYNmBiHaqyCj12u4mGjpB0JJw5dhXIGxANTdKq+H1zJucj44pGerg==" + }, + { + "href": "lib/moment/locale/gl.js", + "size": 2967, + "integrity": "sha256-gl5vrVUJTBMRjSytoLbFlFqX6ptkdobCsA3GmAvqRgg= sha384-jCdfw2VP13t4PWqfqk7may+84MqrxkulTuUTvhBVp6Yh6BKP2yG5UTjkwNassn78 sha512-xwMrXfE/7H5QITmVqEQmcBk5XOvNE80KDpNGueijgV9+6bAdCZvs+AgErXt3AVufJ3U4OXIssJRSkciBSgazHQ==" + }, + { + "href": "lib/moment/locale/gom-deva.js", + "size": 6336, + "integrity": "sha256-/16/ANEA9hDKqVbqIsRVhONAZ/diwumBEybVkDzNgZw= sha384-RcLZfMIv1/LO1KnPjbOfJ7wTwyvB2d+1N52JeJKAGSG1I1QvkcTlfxQcrSWjJd9Y sha512-JF87QT3YG/tdoakEMt7xeXw1a/r8vkzW+0v6Ue5CDvOdjGjXIg9ovGyy9v1MBIeba7C9atc6Sk2BOwmzgBFDNg==" + }, + { + "href": "lib/moment/locale/gom-latn.js", + "size": 4952, + "integrity": "sha256-yqazyvuNRjx8sLR3g7hNf3Y39oW40z0SJFSPf5oSTNU= sha384-TCSokOjYH9RygTJFslY60h3wvZX7L+68X/wEIRcvTZ/bfAqVE83s6blxeYio8x7T sha512-npTcMr4LoF/bSV1yEnzIx08N9kxtGDINd8x3Asx2rH9nQSnCdKuED5vZuW9Gc5jylLQwXVzOoylHDZu2diVkzQ==" + }, + { + "href": "lib/moment/locale/gu.js", + "size": 4936, + "integrity": "sha256-UVXzql/kOxjHsGzwL/bp1sFX19qCLGWPvY4vDtzu8WE= sha384-MiD9AWwcvzsxeISgF9rCpRtIYpexkm5NgME6mYNWkasXlUd3RVX9qeTkIN1WHfxK sha512-Jm3arS9nBtVaBpY33ezFWHgYwCcQdJVzUolSRAAKk2kZCu9w0DI18nLodiUcU8qq3JM3LnaIS/xkYsH5EJsWDw==" + }, + { + "href": "lib/moment/locale/he.js", + "size": 3899, + "integrity": "sha256-k7VA1PG8IdVmiFRHXo79LW/KovWWcEdSpYbOB9Rx1HU= sha384-DBE0hyIiVwLIuXU4WYg2AbemdPmZfo1yy2lQuUUIbfz+qQD/lKzhb4GrFPG3xkbH sha512-vN0SdqeLmWvcCoFVw0X01n4NwAYnGbDfcz6oa6TAgqAEaZlvjDSf2+VO99hncWMwKfYo0TSQ8yxxIpqd5ylmOQ==" + }, + { + "href": "lib/moment/locale/hi.js", + "size": 7385, + "integrity": "sha256-SC+SiYUcxa3ReJV4fUJyWaz42UZ9s3AA04MCGqCXoeM= sha384-0/ROh0yWtBHxV4BHn+lePwx/ob/fdBRTsPxcSOo0Yy+bHWG7T+GqI23Clj8dMCiD sha512-wbpdx3El7l3vippMPLP9qyU2bzjJBd0E8kgAxEAfA2ppihNOSBtC0sD4No/8lSdp5p9+P31QVswh53GvfhZdgw==" + }, + { + "href": "lib/moment/locale/hr.js", + "size": 5658, + "integrity": "sha256-SvN8xrSYpMNBjwtdkO/lNUQis9FYaBRU3C7t7jHOFGk= sha384-LrAOOD5uhhHWeokBiusTkYTtOVY/3bWoye8oUpu33KYP2+Q2aZ/lvhwwBHXPYix7 sha512-xo/ogHzV2rGWy1JYwOnp1mNNkcWv/g95GWDEJ71bSPFLcMP9DKrIPGRGCBJIy++vQCkwJILuMYRBiq0W7A4M8Q==" + }, + { + "href": "lib/moment/locale/hu.js", + "size": 4599, + "integrity": "sha256-UYw8G4SdQb6e+Wc3Jqw8cSkAlqcn/ynJ7fsPdInjJT8= sha384-iPov1kZ3DVMkzg9gNYettKTKiGQ054njlHqFESGkxOyiTvkC2/r4wvFlQ6lIZXva sha512-S5fOvzLo7Swp5S0fsbWhJh1OdA0XENBFPKPil67AmwrHI7J8yidhE6UGIHvoCp8DPzzLdsR97EsslkvJCCgGyw==" + }, + { + "href": "lib/moment/locale/hy-am.js", + "size": 3936, + "integrity": "sha256-LDv174xRYsfE7QzksUT60k7v1pGRHXyLhsIcq4Tzv+Y= sha384-2M+ogK3RTNKzMxEgyVcm2gaosbJ01FtOumDejm5b2laQpKIJE4sQJfu9xX4P8D8M sha512-Gwjv+Awv4Dk7XZAP396ZH5CcLwbrHB07GRIB8BaiHXHBV/iJw/uRAxAtzJlLZPO6iUka/V+OXufv1QNYuNifXA==" + }, + { + "href": "lib/moment/locale/id.js", + "size": 2995, + "integrity": "sha256-A2FUZBqky6lKyKZbmK910voOwpFWZ0lH0RSPoUZoncM= sha384-B7AWAu1sTZyaLx43aM+LKMGReW5knJ3p4E90KofTpIE4YUqY/nlWmd2QMdyEKZfk sha512-PNCSRPER1OHI/CxeCFE3uZ3FlsZS7P4KRAIVpBdPeRuP3fpDqYHysQ9ToARpKp0JkU90j9JVO4Ul5lgyH62RfQ==" + }, + { + "href": "lib/moment/locale/is.js", + "size": 5334, + "integrity": "sha256-aUPIU+4K1lrS4+OLrsyQ3ICIBx8QQG7opa2ZXXz19uY= sha384-P5Axvyf44xJoj9KeJcNhs9UYNwtveUimURCKMySXJwhQ6v4XGlo54zOC6YT92UI2 sha512-+rTlTKY5KlxMH0cfwJySvvMJJqVTlWZtM0oEqvCxxJoCodYh4l0b/EkEdVPgo6vpnogQRMdwi09UedBntjaKxQ==" + }, + { + "href": "lib/moment/locale/it-ch.js", + "size": 2521, + "integrity": "sha256-lnDiJE3WNVZAj8IGcf12P7kb5SBB7ukpNHEOdeKzt/o= sha384-Rut2+J67+9ZsQutIe0dk9WM16sNt+DDj7jkbktZA/GxYRTAzAc9GAbcnC1RFBM3p sha512-n7WJlDyTfwI8S1eQkhRB1Ou0uu7F7UzFND9B17/s9Itp1NyHq0s8afR4wkCwdTF6VlKtVZELXWTWbauXK/dC+g==" + }, + { + "href": "lib/moment/locale/it.js", + "size": 3987, + "integrity": "sha256-L+c0a9b98CruGf3na9LKC15lkD3dRdCXviNC7nsLlHA= sha384-VBZT8Nu1FayByQUGY6LEGT7wJqm/ZhcrpibgZLGp0Mjvi7PJ5v4JYzSYH+nG9Idx sha512-0FMsMeq0bN+DWmJllT2mpS1Dr55gamulMgu1Bi3YQgURv1L8XMTmOPE/uzd62aMEnO7rJPqR5B9ri65WPUbl6Q==" + }, + { + "href": "lib/moment/locale/ja.js", + "size": 4867, + "integrity": "sha256-lyDeRZLdlIYfL6u1ERBTP+RGIPUX5QRI3YKKfy7vcAk= sha384-meRuEmneNljULV9cSOCY86Le4iI+j4dSvYlhMeki6uo3i8QfU76xYUdsm13Wyfgp sha512-+kDBg7kVWtqkl5zMxjMjC+tKL8Kwrojo26IuiHNDdOGOZjFBpNKBb9sFG1ZzvnNsieicUfCvd+vo62bNMnBciA==" + }, + { + "href": "lib/moment/locale/jv.js", + "size": 3004, + "integrity": "sha256-cHYX/qrHRZ5dXDn/PqSl5doM85g4SQLBzVl1y9GhE80= sha384-70qJrv+bWzxJkAZuRgua0yKcMxnZyDom6f+mGverk+O6PyL6cURIYR3Oq0Yaqhor sha512-WVlhXXFIaoLdxTBGOuQSYyT9Nm0+foAfGbWyR4duLNzBXWwWmFmBI4jy3vZJlf9O4HmtuL3gm7RsOMjNwPzPDg==" + }, + { + "href": "lib/moment/locale/ka.js", + "size": 4192, + "integrity": "sha256-LBUGjSzrHzTkuS+VcQsYG9EDRBC4qWrhXdEe4k0P8Po= sha384-HI05U5oSQtKb3BjZcZ3Almkq4NHrOUSEGHWGkFwRX3tdcMOl97Vz0RNz3uAj63SY sha512-ryLjYn65pa+248hDlAggeAClKQvQeeBlomqhr5z9OGlz+NRVGRs6PGPwG/kDykewwhgFtl43Ur/FQJ9UKC8hJg==" + }, + { + "href": "lib/moment/locale/kk.js", + "size": 3139, + "integrity": "sha256-QwyG9sDqAZnYYiBFiDBIs1h1vqN7REJGY7vlcwVuyYE= sha384-V9rZtwtg8BDokRZQjykbcwVLUi5KFvWfC8DkSurv1UKc4E0TWpYLJch8XKHZtCjX sha512-QMamdYKFog853L97yPBIRwkHfUaatwvvT98CvAwsSSO0s6scrQIvnKyqbcJObUeNvPtd7ndHMxvodRHv3m/NvQ==" + }, + { + "href": "lib/moment/locale/km.js", + "size": 4090, + "integrity": "sha256-Abg3QJoe4D2CaYhpFfEK4blGCyzELMX2+shi9zYLoQM= sha384-fFPgevi0JLsrp7s3z70vFgA2I6sVl1CX2SlPcYYWmycxDcrd2cXQPLijbYssWIHQ sha512-2C7WaryU2hUCiZU9cOuOSAY3HzrHEq1aXlttTPzcxe+cAro+YUoRLLNTnZl0b138U3cdQ4gQFErG//YgBJZF5Q==" + }, + { + "href": "lib/moment/locale/kn.js", + "size": 5064, + "integrity": "sha256-lnP216EAhs2oIo8cCA7AMujzTjo94vFBNYLgpsxvISg= sha384-d2GWp5/SdNtu8eLBZF1DIwO+tQygTMHzEaUznZwaVHzxzKEnc/vLhEuLxC9AdMof sha512-x0xfcWDHZNYFtYdwxjeyYFCXiRd4twqc/6XaqedJZNxoNWQe2C4bYJc22YS7KTahAB/a/BYDo78Hoy7IJni65Q==" + }, + { + "href": "lib/moment/locale/ko.js", + "size": 2839, + "integrity": "sha256-8V9ZK119W7vQYcWtMdTEX0Yq1DrK10gIxqcQWxCOwOs= sha384-LJ6V+CN8QcXpthXB3OtWW9E81wtn2SYbRHk+OsfK5PeMUW1vTjh4qrBBne5dolDg sha512-vc0ttTYMdTkfbzZ2pebbD8M6kmEC0FuR57mRDuftdDDDs59fhtCpED+rrmp6jKfVcDVQEg+xxIwzW4MvoYzIUQ==" + }, + { + "href": "lib/moment/locale/ku.js", + "size": 4118, + "integrity": "sha256-gWycJ/Qjfx+llcW+CmC35cWOwDNtWpCOA/c/2FluHK8= sha384-jHauIdGMI5QRaIAjcXwcDt31c3+IXPhiL7uNOd+C9DPTV/XRUoXV3r0bP0wWQCrS sha512-OvskWFbqrNlQGrehseG5768h2UGmOGE1AEshFtve9Ie7MKmG47Uv8IGe3JDc7Fl23/x2u/L4/c5jbhTgY5Qu0g==" + }, + { + "href": "lib/moment/locale/ky.js", + "size": 3173, + "integrity": "sha256-08NfLEdhDHySEmjLmM85hZkGjSTVHnqJFncHEwyFrVk= sha384-ecODX1iziCQBy9cEVJNlCP1u3YOKCYonk9VWZmsl97mSx8Y2sbTxpg4U+hDLmJej sha512-GqvF8HOyh/nJPuvPsIF7x+sM9GG8WkePuqacBaPScIMP8lEl1DvCTarox1C8pOMpviTKtF5yFH4Ek1VaCVPHlA==" + }, + { + "href": "lib/moment/locale/lb.js", + "size": 5129, + "integrity": "sha256-zs1S2k4/Onpp1M3haSyQ0ACjcmdy+OAKnCMvr01v+YU= sha384-RKFk8h3Fxhnv7FFWiIQxl7PTePolFbXGZfXjCcXFhkpsG9xv16GHrd2o4GjDCpSH sha512-G86DgV9pY0Gojd1DU5vhC3ityI3w6ZwNuHX9UaQ+94e/yhSixz1xO4MkEuvTg8YPeKnrLY4cSRLGuYdcsSCrFA==" + }, + { + "href": "lib/moment/locale/lo.js", + "size": 3169, + "integrity": "sha256-g8KE0W1A6GHNAcKGg6z3dHWBOZOyoXIB8XEn4jjlvNY= sha384-o7sx363O6MEIwNTPSefPBGXvQ+9rzMqGqUj0iaXjYqgCR8gYc1e2CCb9YoUABfIM sha512-NsMqilDYoa7gu0MDq3MBy5EUPmK1agJX/Bt8lpm+Hp1D9qfE+9UN+1l7/vahVFwFyeWbeJzRi6mmVHtw0vGJMw==" + }, + { + "href": "lib/moment/locale/lt.js", + "size": 4825, + "integrity": "sha256-oCzlAgPkzJ6F23djLUH0ifFMiT+YYZnI3QQZEZmSQJQ= sha384-RdhnbthAF9Ac8ylW9U83D3GOorJzqVGrTWrXCM3esiokiUgDIorYl/F6wxlrH9pV sha512-GjaN9PFVe1gH0cayYJdyKssTzGjBpGP1hEQJdtCRq7JXiMS61Zemj55pdY4g9Z9eBZmck9WrIsz2e5wD6vG7rQ==" + }, + { + "href": "lib/moment/locale/lv.js", + "size": 4137, + "integrity": "sha256-5PaNvnFHvcdtdhQQLrUl+aXY2sxpDdZhCRQSsMlQXLE= sha384-m8Z3fIjijphSW099D82LJQbpCJkWHoLasuUHCAGA/hiAnycEI99K9u8ys2xk79Pk sha512-P8w6tiRb//NE/Avt2KbdvP8RHxfNcn5JjvRCJjNTthoNHLmqMWLBPKQlkESpDMTXVMkdRu0hGebHTWuLfgFEdg==" + }, + { + "href": "lib/moment/locale/me.js", + "size": 4441, + "integrity": "sha256-JBA98elVALP9xKpguTPGbSzzOqT/jSQBroR8UWKFZ54= sha384-1OZqvKqr6hKzDJISa4jOGHTI90DYzzv+ybmHwWo+13BZzkJDWZTEkh77IPhpPkJu sha512-dvMELcooHhY1xGqdWGVctajLSuSXfjJZfsICYkVVEfuplZqBJ2XqqDo1fXnFj/VzKJzZ/FCUxfb5ntVxcaXJaA==" + }, + { + "href": "lib/moment/locale/mi.js", + "size": 2583, + "integrity": "sha256-nMZ9zmbPPw+aV85zKvaHjMI/7c8lb9UwLGz1ffh+rDo= sha384-OMg0ts+Pb6qcXI41+xRuk/QXA8qE24QHZxSohatgV9LnRgKWxRoJ1/2WVEVs/1Mo sha512-AIAv+v8yV6QEFTqKuq/MkFQ3iC73MR+D7jhFWAbuB8ZyJp8v44MIEaCvtO8FwjDklGtvsR87M+Usq2Htde/UNg==" + }, + { + "href": "lib/moment/locale/mk.js", + "size": 3682, + "integrity": "sha256-w4FAtUCKkdljJ2XSP0No8MyY37aq+w/M5FK2tL+pPv0= sha384-0QnGcfofJsYKxF/GaGBAkM8wgS4iqIuFkFpsbV4pTUjYcyLm99aFky1/miMUCliH sha512-/YQ/e+We0O8U5tPnjhbXFIdm/r9VV07PDXtoDTl0IhsMVTjowYRwbNzSAbHJk5So9+123ynAjPE3SPSV2qvt3A==" + }, + { + "href": "lib/moment/locale/ml.js", + "size": 3935, + "integrity": "sha256-1FrFlakYOTro92g4aI/NVpyRe5RenFOGHsSh8R8grtI= sha384-avxpClDQUEPCbtUuH4ix23N+3xCLd23He77c5TXDy4TFzK6vGz1WSApWjRuBEYhf sha512-HvjyEyN1Nm0LfkZ8pTPa5HlU4YFiKHsjAq6/+cAJD5g9FmiQsEKqKqt9oeC/EEZ8n07lQLpr9si5dOQfUp0XNA==" + }, + { + "href": "lib/moment/locale/mn.js", + "size": 4130, + "integrity": "sha256-Dx9bvJ6vAgkx+MtUrgheUcQcB2H/x/0mXbtgy+fYQHY= sha384-3z+I7aaHYXIf9OxyZMcuEzIlEIkU/3kBUYz0eLWj5z3ERHbM9OtKA1PQZHFuftxd sha512-uszkut3kYAbxEymHqHUdZPAennVqN7/QoD28hrw6pxpVoEvZ0oHNtBaOaL4maUo5tWiF+L8X5sHk5ySD46oF4g==" + }, + { + "href": "lib/moment/locale/mr.js", + "size": 7694, + "integrity": "sha256-9jR/RCKBhEogUkViD55Gn1LKy33UFkDvZ9MqlPLFg9A= sha384-YLemprjaWexW0y9ADAqbCG4LXVwNx10nJznj46J2C8fwXlU03qeGlYMRFhqkmxfj sha512-OzlylhXNo/nVWMMJnDwxHv35oy6GKR11zQX0wicVHS4ZVGVxwKOfSk/PoCQSahZN7zRiipZmB4pKNzd3AONEEw==" + }, + { + "href": "lib/moment/locale/ms-my.js", + "size": 2954, + "integrity": "sha256-+nf2sjiErOQxmdGJpZbIzUNqsgsraWZZndn9WJ5RVI8= sha384-8fn4js2nNJysJ213yqYw1uucvYMXu8wYUa3x7zJRBzYBpEsY5Ms4Ffz0VVY/wLi8 sha512-mAUSICIWXbBQHLwq9FaX/RPFIZ2FdY/syS3o2GmKmZ4oAjQ7F9rG7ZoAg7Nhfl/S3jLe8RYLhuRT0LeWkmcJDQ==" + }, + { + "href": "lib/moment/locale/ms.js", + "size": 2897, + "integrity": "sha256-a2MB1CVEKBoH5R5RehrNLkmOYomynnSBdDOoZ1F2H3E= sha384-FHvwhLgvC/lkfcg4wBZyQOwjyHkHrkSPBx4nlurULFNZIJ2f9CxaWuzQ+5fnn1Lo sha512-K0cxRPBHJdN8bx6UYDPJHpSbdLORq8KSPhLqvtfWdUu1rIRQl6GQEZ4uC/bYNGyW94wi10mACmcsOg1ObYr3eQ==" + }, + { + "href": "lib/moment/locale/mt.js", + "size": 2228, + "integrity": "sha256-avHTZDvSGJQfMNoPa6e9ZNTC0MSTNodjCK868Dh7BEA= sha384-Z+pxNShbdaHET+ckMtL6pgaW8rkExBH1jqbdi3F0jW8SQS69r8NfG7KRSmAINF5y sha512-iNytYcCNihDsasq5CVCUgXFbR4rFH7jlxVgWUCbPqmlYF9Iz88XMnFdQDKwL85qc6MuFwAs8S/SVvDXRa0GlWw==" + }, + { + "href": "lib/moment/locale/my.js", + "size": 3762, + "integrity": "sha256-knMssmp3S8PgScfiEtjvFCVBPWNSLMyh+xsGloVNpK0= sha384-knRU9mn5WAyuOireniIJVsJes7ngIlJBRESm3I6FjZV/K8Se/FsTxfcgPGJadz30 sha512-J+DIxVW+qm+FzG2d3RAi4R+0VWdbieE4as1TLoTCaq7h/6pJ4BzaLo3F7sUHQa3177Us7EbsHUYCWXyUuTcIsg==" + }, + { + "href": "lib/moment/locale/nb.js", + "size": 2451, + "integrity": "sha256-NvCI3OZ1OJ/xsSr+NXA7bRZs7434ok4eHW7Pz3voT9U= sha384-t+c6T+7ECvWPRpDVYJGWJ+4FZXd71wQ5bgcOUv6Eu5yKRkiqUTrW6L/H2wzMpV22 sha512-eHcTo7EsdluXvLKmvrdXPvVwp7+l5ireo5Q7lBpUxuz72lv9b7NZfYfxmPq/faZPZxnsztYiXEZA7913PAaXaA==" + }, + { + "href": "lib/moment/locale/ne.js", + "size": 4831, + "integrity": "sha256-gEu9bDDcO3TecRpE+QGdsGIQMjoNsx5TznMP6rXqYnU= sha384-thk+RVdadgMI9wy1jhG2fwqZO8g5Wfzmx7g52eDscukVbCGs03nrpMGYdHep7Q3d sha512-eO7g2+KkAn1JElo8OhksuDcmwi2uLZh8Jp7gQqz79h3ql1bu8HDC2IlJImCyDOT0wkCEUPkvpeNQsYy/IuZraQ==" + }, + { + "href": "lib/moment/locale/nl-be.js", + "size": 3881, + "integrity": "sha256-K9J+GIEcc2OhtGuBUXPWJhAlI6L3aFR5KIUWb0qZ618= sha384-WZfpzOwXDj9IPoV8k1emS/iIIG1+zCHSdKxeMZntJaScEQppVCpwSK/TI7BAoS1D sha512-kEek5q7vq2coYs/RE3GJUNciSTkFSxEDg5pN6urSnTq/+HF+ehWusf6ChIeEKG43+HXERcjplXD/W5rINUZYzw==" + }, + { + "href": "lib/moment/locale/nl.js", + "size": 3918, + "integrity": "sha256-A34FWxi0N2ES2FPj01eyF9zAv9OZDgFVuYD/YitP+Nk= sha384-RVrYa38eq2YwjmOH2rCKyRkqvHgWI1uBGTAX+F7No5YEi5RwRu4xNerz6o72OLc6 sha512-8By87wKRefVU0s6ivW9dFTYY6TbFIiFc9dBWYybFy3X/2NSfzTBp4WeOcKpDVbuHDXSiLNX1WCQK/7PdRm72ZQ==" + }, + { + "href": "lib/moment/locale/nn.js", + "size": 2380, + "integrity": "sha256-ZgB/hMlFo0dRAKMCTV+j1DDW4R5k3oGEnlDqc+PzkL4= sha384-M4VsRxUaLScFYa2QHWuEXl9BZ0Sjc+KQXM9t7GiQnd4fj19yT8whUcAlhoRJLNQZ sha512-MeZTEv3FCByVyGUdla6pG7yUdDa78+F83KreJIQgaMUMkyo4MQIS/HcyKC0MGJugJkSTVHC4UAaAOcZspr8OCw==" + }, + { + "href": "lib/moment/locale/oc-lnc.js", + "size": 3138, + "integrity": "sha256-HgPNWYxJXk3KO65W44IsrN5XMzq1qF9VXFguEE9UJhw= sha384-eJgHtWNsEETLg1GBgiemW/ZQp2D58Xm9Bv2sX/nTnRibOg3SaWOkiAGTNnKw3IUs sha512-dVVQqEgHX32DYoAK/qXPjGlj8DcS7wLtFrFvfz6le7C9adIVREbvcXkdRYEJkuiakobEZbGk9SefjNqbu85VMA==" + }, + { + "href": "lib/moment/locale/pa-in.js", + "size": 5006, + "integrity": "sha256-W6VIunhEocXEp/ADM3I3+UC16KpnJU+5DhoFpm8rQ6w= sha384-/S4COfi/LBOKB/8PKJBuPIBwei0yz7FWNk7GpAHAoG4SlcPoPTfehgaZt6xMUU73 sha512-OLvspd9DTh4MfZGRXXs6MFeY+D37fBQLaekpZyoB64OxhPYRBxCUFaUJGCTEvqlBSKFiP/WegAO3/FmIfGiqmA==" + }, + { + "href": "lib/moment/locale/pl.js", + "size": 5026, + "integrity": "sha256-VDWhJl2swmlAPydQleJKY/87i7D5WQj3oqmH++KrnkM= sha384-OfU9yPHLBNWbg0LWqGIX0ztqZZ962DvKLGyr/tpXDOvZG4keOQzSynCTr35OYZZv sha512-ZWS2zWZzB+cCAtU35j0fLJhECeDLCtb2CmS9KjTuCBXTyUBiXdFRp3iqQUoMonY8NYAdpoM+l9XClGKD1Nf35w==" + }, + { + "href": "lib/moment/locale/pt-br.js", + "size": 2410, + "integrity": "sha256-iosWW+QnldnpRedJTzjqNT7i9+7n6rEjBz86Qs51Voc= sha384-2EaF5JuYSxX7acuiVtJNpC73C5O1Ye94txl98n0HsV5lQMz5jLNEZN5PP+JVS1g/ sha512-eWf9BlyRJvL40mm8ZxRuUFdfgOw8xWklMu98mBY5EaKOdKX9D+ptQ0QLpu61K2jrrFBQtHMLQGnBotnKaUjSlQ==" + }, + { + "href": "lib/moment/locale/pt.js", + "size": 2540, + "integrity": "sha256-ieTC8tNRrX4v7+yTMneLFs1KMYWN7ZrW/s4S/Z25SsI= sha384-7s37VsSmJZU5SmmvgHeGay1IRi+Ez3y3hcayY5/x+sbIJzPQFQb/3l4uFm2pMKqB sha512-XmezGzRRirEAs8jq6Jj0W4BRljdS53qb8zjvDKa/Iv0zQdGLXcehf73pD1Nv6q4y2slqhMHIref/or+T0at7Ng==" + }, + { + "href": "lib/moment/locale/ro.js", + "size": 2931, + "integrity": "sha256-9mvKrd4UAY/7O84m6o/8PONsxlxMHp757WyzIbeulIE= sha384-G/q6oUpQzfIb6DOweSugjOMoI3FiQDucop567nU3UxXPPR2aNQb0yW+WwZF7XoRj sha512-wdrzQ8tT1KnE+JG3ZaDQormsH7vsWsKtTAGFekafLGo+HHcXp4IV3o9woGIlfpQKfOt1fw7CzbluCZVFTSXdHg==" + }, + { + "href": "lib/moment/locale/ru.js", + "size": 9562, + "integrity": "sha256-R7nJjZBtzcPXt/QOYE15P/8uFC99eI9qwN6sUDBFjvU= sha384-PrdA5/cTJuocxrjp/ktWR1XH9rDpuoTboa+Cvg9shcpdf8d97moOP/8u1kE7KfQ6 sha512-d7CtTh5xd1y5+58n6jv9Vdo6sAgoBGL6EMk5kj2CBzQjlVN/OfOXrjK2OTROhXNsqeC3aemcucQFc1AaZYDJ4A==" + }, + { + "href": "lib/moment/locale/sd.js", + "size": 2793, + "integrity": "sha256-5fJxJ5J6QeuC5FSR5SvWpSnT215s1RnEj3RzJokJ9sM= sha384-avS/aC1dIWwfl3issQDTUtIRr9t0D7TNt8jisTjWcyt+42TrUoRCQ1JPpDqDBlcI sha512-qh6iOpAq7dZnrQZKmHeWAhXlQhUElUQcukwGQDatx5al85duNtTOzvlsX2El0aQ3nkp5N76IQRskAh0V7uYHIQ==" + }, + { + "href": "lib/moment/locale/se.js", + "size": 2397, + "integrity": "sha256-Qk7RCAXQBPIXtE/2oNpbrVHY87JVdzBvbh9Zw4dSXaI= sha384-OE/2ZzIkQGbP1Wbsj3EftXCZTcwlBByDr6Ywlwk9DisXLpG0leNVCY3SFMRt8AFF sha512-HI+dH+Hjhx/u7aBlo13P1oMewAPkdfomGHvOcFw3GIMFt4bFcQ2d8jY02PLg/WgYBLuDWBHnyQvJlmqWg4y+Fw==" + }, + { + "href": "lib/moment/locale/si.js", + "size": 3277, + "integrity": "sha256-jnWC77mf8Au3rrbeC/pleSWSpbToGubKp7+M2MsxgN4= sha384-oxQ5JYADfLtYRcpwGZytHRuZOTTqgMyojxmC6lCTwiRQ4Z7yScR0WhXP5+YIMhfl sha512-N8IGXp6UzQoYU4N/dmDb8rAOygFkrveI4ocZbjbOtOGAf1fMyvpS1sJM6Kw4BcmVVpLup4DbQSjYiduppdQBKg==" + }, + { + "href": "lib/moment/locale/sk.js", + "size": 6065, + "integrity": "sha256-doXAdrcf2ONsLLhMZFuzp12EVm8mw2gqJ5LwETtNmxY= sha384-zjqt6jGCdl448fRGU9S/w0S7ThW5ttLb0QAFsN6OPs8tZr/PnJe8YRmQqRXGM3UJ sha512-Wf9lx+c3pA+3d/T9Lj06LI8MdxVmPnnazXYD8QoE5mKpS55TlDQCVg22sosmokYlnpxQBYx43m6fDxKhV5Weow==" + }, + { + "href": "lib/moment/locale/sl.js", + "size": 7111, + "integrity": "sha256-/y6DUpYsLRPRFDVshjcB8kc2UfZJFjnhgmq0F9A3f5A= sha384-KAKSML35Nr3XpXZ07IpdUS9DGSZHYKWyl9SpWWDgMYm/g/tzdnk6cvXp0Shj9eZ/ sha512-4X5UATNN7mRl3ELhlgium20qBHRDbhmkvOzm45qDTrTTibNTRg9k6LanrlPLhGzOnWaKjmARp9AbTNpXmacVTA==" + }, + { + "href": "lib/moment/locale/sq.js", + "size": 2559, + "integrity": "sha256-nX0GHCRTSdaJdzLJCtV4QckTK5tVa+B6JNx2/xfPdaA= sha384-A9j1ZZhp4DHBLW7WZGKS0dPkueGPZJId1jtDrdYeFMkxF2/B9tMLYZ0HSreMXs4u sha512-9jP1+uPE3WlzJfaUDsBvK2eIGHLpBCaZ0Tdw9XhX7IWHGTSptoUXUYNCRb0J0Ryl36nf9cnMXxnmqTbaUpgjWA==" + }, + { + "href": "lib/moment/locale/sr-cyrl.js", + "size": 5578, + "integrity": "sha256-5iVn68tkNPhlKxhnOG1zJMBtHyJv6frQUX5lhQOrSWo= sha384-e3kTjJb6wY8r33oVYX38KX9tbgzVPsV/tuwZ3kdLHL/H2WPTbq8Gvb8O1HWcHMHm sha512-U67N3sEhASg9B1gXAGOzOkHy5JE2M8GXmX+/akbvS3FoHpb7PirjcCFlRKj7k6kxHeVadpEzjbAYYxQIsRsbQw==" + }, + { + "href": "lib/moment/locale/sr.js", + "size": 5025, + "integrity": "sha256-MH64voI6KZfOiMWtjDyhnnpjRfEWMx/jhWZZZl3g1FM= sha384-rQQ75aw6Y76gXfrXmth52aBfqRcnkHVEMLsdpmjgPGCp1OaR8VesT2e0d3bchDmK sha512-5ExZ51j1eLVfmbhMHlbYu67RZ5GsUX65criY5sOUG7XOCYpxNWP2/eWGiyFJqkZmJMDxd0eWva2djrcuf6X9Ew==" + }, + { + "href": "lib/moment/locale/ss.js", + "size": 3228, + "integrity": "sha256-DYoIV0zChgJzispyvtY2Tojdk/shMaIMBmMOPddWWUU= sha384-YfAFnGOZ1H1NsZYXFHj16NOelqXPar+XuNB7S28AYDUf4I+7Y+OB80W+df1xmK5+ sha512-rgz57MbwFEs7uWxLaGnJA8hIaqJBGNJB5TBgIBlkl6K0btQvR7kBQ+9NnmHrSOeEGLlsyw2xcCG6ByMHv4TJWg==" + }, + { + "href": "lib/moment/locale/sv.js", + "size": 2658, + "integrity": "sha256-CPjbupcLiVIq2qvmCfR6PyCFfAmFlniIEk+SBPTD4vA= sha384-nxAhOdzr6DmCFDRUSlEAMJi2RvgZcb5IdYLFlHtbJdRHAON+oXOS2SmRCfIEeXuu sha512-RAEJlAvLnyFlgMRNadtCspAsnmiSnFDVMvKqIIlY7fgU+8+AymtDml1CrIHsw9aLm//G8G8MQn59wdsJYjVE1Q==" + }, + { + "href": "lib/moment/locale/sw.js", + "size": 2191, + "integrity": "sha256-1gVqx5BxqfYHk4JTV9rD7PNcQ6zxDgKmXxiS8f2cwME= sha384-7PdwdJaCoD8F+qj1Z0qbrPue+RbWW/JkMzhMJ5mxc9gvAOVW45J6kvQYUbum2QHC sha512-hPEwB+XE0LzghZE+NFdlyRWD1SX+gwlg6C2YeUZtZ9ClNURRBCf2AAUcPFY+lLOZnikx8QONYlZ/dXyw9lTGpQ==" + }, + { + "href": "lib/moment/locale/ta.js", + "size": 5640, + "integrity": "sha256-La6IoxOK3aaf3sVJFEYewo1Ppecg12Jt2z+5GnSiq2s= sha384-kqLf8Lu/xDWV1WoPP8vyeDbEUQ9KG8/p8+fQrLqqWHbk79gkSIIBDSmPbuzOe04u sha512-goFmmilVw2efsPSAe3oydMJdBVE0aJE4Rx0jpGCbOTBTVBQa9KO3mn3O0B6Nozdr/JDgaCdP8wPTHpeVOh0q6g==" + }, + { + "href": "lib/moment/locale/te.js", + "size": 4064, + "integrity": "sha256-LMBykqKrVwLY4ehJrjsozKXGGU0NFQ7GN8YonZ2GTjI= sha384-7b+gRuXeGOnGJJwbcnm4LH2au/jGGOPqJ1QIxC9hACheimzCye+eVoXd02sFdnBl sha512-K5lslDpqILdBM37N0rmOLZXKYZtAu8VDM4rhimDcdxDVpbyNQSNHdN9CtNjb7bWPWZBwHJ65emCi+lEfVD8vxg==" + }, + { + "href": "lib/moment/locale/tet.js", + "size": 2741, + "integrity": "sha256-2A3LI2xnFZSvAxyT0y7Yg8MipvMr0lY31FTXudnoFZM= sha384-cv6SH3evJZr3QiYknI8g/MnquG4Lq7AaEawuJPPdtJgjzSGK0OfmcyLZ5WvOVFr+ sha512-NAwhgWcKDXkMIH88gmJIcNwwO509b5ag4aeRpUn0ipd4XcyzqJuNpJ0Npz8zN9GVQcpjzHwCzV58+rl021Gsww==" + }, + { + "href": "lib/moment/locale/tg.js", + "size": 4388, + "integrity": "sha256-JMiShhnEcYMUZ6/AWspvApnkC0GLeLswtNZpQthy0rs= sha384-N2E0ZIBtzmHavf1rlBo8BQjDPomGYZRI37k4UtzPWA0ZFdtCoNI2Kn5MJhESKSBf sha512-ecQVVMCUzSLpLcrJ6iz5MnMqJN7eRmPbbHVtxyLKR0x2VpubrKPWuoTEKHDntHrBL97BRUoq/nGCiRbm7ccdpw==" + }, + { + "href": "lib/moment/locale/th.js", + "size": 3316, + "integrity": "sha256-mRFjTDU6fOY6gROfkUVS/ICkmQKagDztizK2r4jFO/Q= sha384-3H4VSt2GsZVrv8X1lPJvtEDdxOCVQaChnWu8POGlVViSKs6VFvMl3q7pW36qPbDR sha512-mLziuQKvxo8X48BJhpEPUKz413M+5rRqN+YGouUZPGTjz84A8ZZ5M+xhl3hkfA8AQi9Tm1IUZL0JzPPNRJl5JA==" + }, + { + "href": "lib/moment/locale/tk.js", + "size": 3168, + "integrity": "sha256-/GZUIpzz9ua7KutbcNxOat9/MHV1r50Vt6Maq4l6mYg= sha384-m5t9nHTAnqUmuqapUxMcqBvJQpyPVVaGdx2zTXJ/Wtr2MTHpfWwZ+OyYvD9FhQ4D sha512-aho1Aq25wWvYlROP3+7xKhItb8dSfkbYScOX9V5PPS22Q4NJ8O9awiVvqTFY2YVWjMV2+fo1bmxDuwzPtIs2mA==" + }, + { + "href": "lib/moment/locale/tl-ph.js", + "size": 2287, + "integrity": "sha256-4yTxeRQyU0rzraNsGFY32wLq89Ptj4jd8UNTjcSEzDo= sha384-ldkj3wfvwq6M1AMjhbUd30u/nQJDw6kTIdgH2ZuIPZH1/RCWYGgt3u0OQcqvew0g sha512-VDAuQN8OHuwYFKhepxUcgCjYLFTbYYBYQHETAli2OSBVL318KeZk8jwG2sMN5JUDd5ASa93pI1BnYcM6loycUA==" + }, + { + "href": "lib/moment/locale/tlh.js", + "size": 4553, + "integrity": "sha256-3M6hMZouktm/Nz4dja3NShMOH6JFfXpm3QNcPLk2Ac0= sha384-33kdXNfEER9qY3yO5tTz28Llww7LxZqCr9XFV+B987qila8ShNZVIRfvd3Kb7a4R sha512-utvQA+ur8CvQzjw9qx5SXOI0bW8qPZvkbMGwHmyx/xwdu61WHGfcxaA5mW/GoLS0tuxLhl4+0fPhqXd0kDhbZw==" + }, + { + "href": "lib/moment/locale/tr.js", + "size": 3663, + "integrity": "sha256-6K8SWwvbPBX/XvLrFxv+aYUHoCapyrVL7bB3DNyjT7I= sha384-gjdfFraG7lLIcQJ/dAVDgI5d1eQ0JPcEaTeqjbmtAcKa6wlKBXucjb/UwhPILqeD sha512-NHLbaj8uQ1/BtJzjnyLXScjmFhYUGEtknXBqRhucN8IEgiBZUclNwAhg+zcifr6NiwqTkMe9jelwZ+ulD5kSjQ==" + }, + { + "href": "lib/moment/locale/tzl.js", + "size": 3779, + "integrity": "sha256-OT5kJNSY/Sq79kYhehl7YcTFdwbmsp7ChzqyDnvfaXA= sha384-ea4sKL2Z3ADKRBrSEqWMAyEpm+C/rP79rfLLMDlwGt0gZ8X9YNeMsq3GqH25FCYf sha512-+nUHy3C7h0QVs/owpcdjy1sXMlJO4Hwhcze9aMnS6W94QJsXmtrpoXjDnJk1+mnDver16MQXy9VVsid5XTCGiQ==" + }, + { + "href": "lib/moment/locale/tzm-latn.js", + "size": 2237, + "integrity": "sha256-eQnO8OswgFmcJHlMB54FugevVl8ZhFDfCtQRyFvkUDA= sha384-cgiYKtpAEfDdpAA3X0Finu15pKOACJzPO9iWYGqfkEzp3jQdp+UO4phHmymyYCRy sha512-nbQHYBo2YdB+GUhtC+fTZFsm3Y4j3zmUKehJuf1KXcBG5Xu4shmBCIsxy4jU5UM/xl+Y6PYQbN9z4Wr0ynTS/A==" + }, + { + "href": "lib/moment/locale/tzm.js", + "size": 2860, + "integrity": "sha256-5vOi4uPKhpU+LAbKViYHqV0rUSnnUeXgkFJw8+VqH1I= sha384-NhD18mPxkQoMAUp9ycRhmavywJat3QILt+I1T/R8zw6xKC3LwkKjYlHBNmv9bmsh sha512-hJ04Bt98Zoi1MKeDS5vBWtRVhvKdbDTN83I2YKyi20mgWH5qOEL61GSkFqTIpHtISZsj0kWYD+pQsn2t1gpodA==" + }, + { + "href": "lib/moment/locale/ug-cn.js", + "size": 4644, + "integrity": "sha256-WN4q1lOHax6yfOr/sAN92w5Pt5F+ER+nqI74qwH9BB0= sha384-iLjkiHHEPDkVRzZXDnKSbGwqsj8xX4Tx+1tgrrk9O98ASlzwLfV8j5765YBZB/mx sha512-fcEY3XqF+OUsTPgd5vvc530qXun7UWzwPAICnIpDz6zpRd0fpeJFyzqknB7RXpFJqj8Jaq0XUG2/OHbniQVGvA==" + }, + { + "href": "lib/moment/locale/uk.js", + "size": 6927, + "integrity": "sha256-cldksoUdPbedj7ILls53CM0dxgxspvN7rE3yNQ88y/Q= sha384-R6nU+M4gZ9CP4drbqBQCrBOjXJUCMSi8kLtMnrfUHVJAgMnx8pQDGbx17+K8f7Td sha512-zV2tw7E6BTz4dyEDTwGoFrOpZ9D+fVU60IEkpSvdYR//7oKI3Zx3jukAdyOCaVSkFgCcnPo52x4twzC+kSsgRQ==" + }, + { + "href": "lib/moment/locale/ur.js", + "size": 2840, + "integrity": "sha256-yJ/EhaFMsgwFdv8gvD0VfhKW8rLd+oA19x6LWPYaKaQ= sha384-P8zVZ92P3FhvK7AjRlmaL4FKSdY7jBwNXVYwaj+vK0c5XtHE8PU3zYEN/KGWC6qA sha512-HBN9V4ek87lu3BrJ7OM59Hkyv61072pY+IFD9tAxT/M+8Kog6zmEPPvUbOM7aNFq3nYGLd1isE4YNFQ8do1cZg==" + }, + { + "href": "lib/moment/locale/uz-latn.js", + "size": 2183, + "integrity": "sha256-OUPpRvytnJZfFHxQ4I2nHTJwI5F13lMNH0i+b7RJVu0= sha384-GATdyAVuAx/tAW2K2qvxl3jMy3y1CcyZNnbjdcODNjCCe+JuHh2sing6nUVKW0N3 sha512-6OBl2xJKJ0r4nfZeCFn/hRylt10lSCl6QBHHqI8d2Ug2d2Fy0HTB8o9/qqkAwxSxvm3+Co4PCTRs7kn8Gnb+6Q==" + }, + { + "href": "lib/moment/locale/uz.js", + "size": 2409, + "integrity": "sha256-nyI0T5/2mxz1VGyXX9iEeIS7AyIW0VBU6iZ8uWSgmwg= sha384-GQz5jafYN5lKlMURfsG6tcM/jZE9+X85TuCwqcxKVKhExqnK1z1pc7htKTBoN7FD sha512-aQ4fkYN0FU7mmiWXlCcnffGcMZ4b1gHB7ki7LmOx8G04I0WWrkf/dO3N9u+O1SbVlAKe0SS1wUJrt1pEP1dHsw==" + }, + { + "href": "lib/moment/locale/vi.js", + "size": 3066, + "integrity": "sha256-xdsDrkOOTFWm7foARUCq8d7xT+CWj57T4D/n3Xw/rwM= sha384-z7vhoqjdIW4a0w8+JseywqQ4WumC3/sldE1drYkWnHJQrfbF+zwHIQjNiQRSe+eu sha512-0w39BOJzOFAwiX2nigZwnRRRBSPsOAAltQPKV/dYbW1JgjCr3/FAANDlCrxWdUAsSAWeNlcTbpMHMHvWaujAWQ==" + }, + { + "href": "lib/moment/locale/x-pseudo.js", + "size": 2970, + "integrity": "sha256-yoqwUqCbLzIFdMccRyYJ4Ca0qnLIegbyBP8zZwJJ4r8= sha384-qhN3VormGtljLmlmtoPCftkYkpTusC+/cf2aVo7Lt0wgMPmBj5OkA2kgsCYO3egw sha512-QBxj5ZymvJWhk3m+E3KFDvDDDC7fB+CLteNFKhot3pk7GjEsMaULjI7O0DnSErL1PCH4uV9bSWaHdhFhJr226Q==" + }, + { + "href": "lib/moment/locale/yo.js", + "size": 2419, + "integrity": "sha256-2AZVtgRVivKFX1tnshso7FdwmFtn/eWelOEWjl9Hlcg= sha384-VOSPR1By+pST29/LshkuWpPTiyriY66t6FU/4aX/I2LqZFm18w3VFqayH0Q0NiBN sha512-I7idU4SQwD4M0Y1IxEzbgewsSmLzvSBaUy84fxKdfvJ/FGOsqFDH9MZg24CfK0maMYCbCCSlRpmylmqh4cisGA==" + }, + { + "href": "lib/moment/locale/zh-cn.js", + "size": 4507, + "integrity": "sha256-UxOFMqrXxXGvEM9rF6Z4VS6ann71AU0lD5evjcYa5uE= sha384-UboblwH7XX6/zya9g7CNTlTNdofmAQaQTnXRakElM7HEO5XnZO2LHPeZsb2MatPh sha512-U9Q724EqlssYZ7Re3xkmvTFK2UwgNjEKRrqUY1QDlMl8yn69MhI1u39Te3epY/rynKGicoutEXDNJZ7BIFtTGw==" + }, + { + "href": "lib/moment/locale/zh-hk.js", + "size": 3832, + "integrity": "sha256-xtfeDR9VRKHTu2TH6ydIGzAxZ2bxIU+7Wxxr41ikuSE= sha384-jEL44vH00+BDC/VlEeyfIRXllAf5n0mBUhKR30a4J38a13Jh0GRqtHvjwrhsqh6R sha512-6dKD4fmlfOeRGxmHKMHim751eJ6tmWt1nKI3RqN6C6afWccf8tCp9o20e1+85YNglfTyvq4bfhTfsn17OjAYVg==" + }, + { + "href": "lib/moment/locale/zh-mo.js", + "size": 3782, + "integrity": "sha256-h0yjgG9VbFgJhCYTukEMllER6pRB+5SaMqvip8O/f4o= sha384-QYUh359P+4xUKu5N+UCyZ5WhlU6BCxolPcMzDpyu/c6gJCUVFegZkE6Fxfo/iTCZ sha512-HyMlcS3HN6C97dBm2jLKdrvn6QinbhkPENVm+qlQ4mOz35pR1Wzt9+Mw0kEV2TA8mn2t323jvit1vXe0xko5mA==" + }, + { + "href": "lib/moment/locale/zh-tw.js", + "size": 3729, + "integrity": "sha256-YvsbNtJAUBIMrfgHuXX/6deYautBoPSsIYw60jocmxo= sha384-I+yLBxQZ9prENF7nkxJ8WgWkVQimbzr6ei45SBRl98INtYpMrDQklSXwGarI0mx3 sha512-cM7wautmrCa5+SL1CtRABwsQNa0P+3pAH74wqCUDSDRyi2cOaG7/kkryr1co9PXDfaIP9vvHwVWkqewNSAJWQA==" + }, + { + "href": "lib/moment/min/locales.js", + "size": 448027, + "integrity": "sha256-ptjTQa8qEYRj+NvsaX87UhBVKZfvUeDZp3yEI18ust0= sha384-vw7OXLrdu550k9I4Br6OJQQwges6c2y50Gx/asn/mv1rP28d/gSSUfDulJeDmigv sha512-ywFbGTH7xUapnOLOrhlDFD2NqeRr6sg/F0vHYOiaHwkCvrrqpf+DjMys/hiEkH1X8FMaXADYFGlB8CaPPw1fYA==" + }, + { + "href": "lib/moment/min/locales.min.js", + "size": 310773, + "integrity": "sha256-GjIks8q8oPqSylbhTaRtfyCe0ozmjtUJQLT6btL/0lQ= sha384-mLvm0gDivYFReWxZ7IsMyQ9/4c6vi2A/8MtFfJriRT0l6BJMFe8o1mu7AyqMs7l4 sha512-SU8clBskLFpQFzSi2R1nSLyXI+6i5+PgzKP9ZPhLIDbAn0ae7qi5CEJ4PsEKxv/szzYhwSMRL7FHez+aQk0C8g==" + }, + { + "href": "lib/moment/min/moment-with-locales.js", + "size": 622044, + "integrity": "sha256-1Eva0ykIHBW9NszwcQkF52d7Q3MGaC3wdSKuS0OzNDc= sha384-jCkxSkIE5mTRlFVwPUhXxif20GMo6lWBYKp9JUx/bSlcHskZNc2oSk+QFYrCPyDA sha512-VnJVXpOlJZ9qp7za6z7yzGvoNSIzHpeLfGlg7LoAqiMSkglhSUDJrxeUmKBPH1LtPlcypv6NnNO4Bbx8fkBD+w==" + }, + { + "href": "lib/moment/min/moment-with-locales.min.js", + "size": 369018, + "integrity": "sha256-7WG1TljuR3d5m5qKqT0tc4dNDR/aaZtjc2Tv1C/c5/8= sha384-jgLkMXFx0q15S2smX3Vcj/3Xbv6gtrxx39uHD2FOfvaYSW8iSOgN5vrfpc7i8mZn sha512-vFABRuf5oGUaztndx4KoAEUVQnOvAIFs59y4tO0DILGWhQiFnFHiR+ZJfxLDyJlXgeut9Z07Svuvm+1Jv89w5g==" + }, + { + "href": "lib/moment/min/moment.min.js", + "size": 58102, + "integrity": "sha256-tQ5QAvt2Bxv3J1gg8P786OP97VYM1DQ9ylmZZ+vv+10= sha384-B8Dd6IYyZo9ga+OAuqPdepTkhup8W9P61mnj3IY7cNOr+LR49nWChBrSblLCbl4f sha512-x/vqovXY/Q4b+rNjgiheBsA/vbWA3IVvsS8lkQSX1gQ4ggSJx38oI2vREZXpTzhAv6tNUaX81E7QBBzkpDQayA==" + }, + { + "href": "lib/moment/src/moment.js", + "size": 2694, + "integrity": "sha256-NE+jrJLZW+vgjoG/dOJQ1jnuX2a5jWB+bCww4agV6vo= sha384-b7lKce46KjjyC1Uld+wsLeibutmBaM1lTQd4jaWVAF/DBdqSo4f2thErQcDBomzF sha512-sstsyxAutP1KUnobjuNnk+SPGCKb8Pww3HxNvCwOcuX0RIS7ExW7mJ/QKsl78b3sViP9JMkeuf8lryYtjk6Pbg==" + }, + { + "href": "lib/moment/templates/default.js", + "size": 261, + "integrity": "sha256-RSP+ktErVR53HIwhtGsIgC1xHqTgcGnke+l12XdSTH8= sha384-4N0t5hrKe3kUI/zaO9D3eeOkfP7pUJ8Yye3AEG7DvogvJehK4Y+C5k5Cu92f0S9R sha512-Rw2XaPMvIqOR9qCJXA378swmW4AN2ywLnZfWdhjZnI+YTZjnEyS+OQBGkYdSuNKw9c6zHXjK87/VxT5z9KeYAQ==" + }, + { + "href": "lib/moment/templates/empty.js", + "size": 0, + "integrity": "sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= sha384-OLBgp1GsljhM2TJ+sbHjaiH9txEUvgdDTAzHv2P24donTt6/529l+9Ua0vFImLlb sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==" + }, + { + "href": "lib/moment/templates/locale-header.js", + "size": 319, + "integrity": "sha256-cFs56dWnklQLPZZUKSpII08CcPZIxYa29br8T+izs2M= sha384-JpGWfD2/XuIhvYRFSbpsoby/No6M5MfMvixs1Dq7A8iUOq0VuPraHW51a8yQFltY sha512-drFi34pjl7EXX4v40X2WQ65HYx4sOKQJRt4aQFMs/TmGiO04gw97lsnl4kPZ3RzNUst2nvOhOC2VRPI8Ut6wDg==" + }, + { + "href": "lib/moment/templates/test-header.js", + "size": 325, + "integrity": "sha256-7h21t0qVlLi03/j3E06j6vov+V5wH20CVjcCn+faFb0= sha384-3naIYMzLg/WhoRdbhrcY5QPpXVF4UFzrcT75PlNLi7yovBWfm5P20+Wx4MsoExth sha512-CxdOnPs2QmdAbCR9gTK9g5I5YEcioO8qTQkXrM5BR0dYQuXZUsbX0xJJBW+BoZZMdSeRd8evOvbkN+5a41H/vg==" + }, + { + "href": "lib/moment/ts3.1-typing-tests/moment-tests.ts", + "size": 14760, + "integrity": "sha256-oB/LwSaudfBonNpnSMhomBg3FenNhZZg649zW+eJcq0= sha384-0W8yQ75yy4chnwTs8G8LJTI0oovMg8pPtQ/2PCMc3wAg5rDFS6eyEss4Hws1dnod sha512-Vn0AJlPbj/bfw+LSoT7eidrq1HfCMsjRY1wIA7Bqqc3Q0nRKiJ3IqdIhBP/SD5M8wYxojZ0ZjOr0p6tR+WaBVQ==" + }, + { + "href": "lib/moment/ts3.1-typing-tests/tsconfig.json", + "size": 262, + "integrity": "sha256-oOyCC4urx+t6TKwHfZ3CUb72ksAohScxEmld8yFh0jY= sha384-UkO0O4ygd3PEuBIfs3kKXgKZHZ0uiIQGMh2TJbL99T7xqHGHaS9Drj18BxY2vN1A sha512-+hpMr2C+arv+C2JyYLvzYJydCaD0RvZ9rqGwTQzFCm4wZLZKo5/AE1+f4MMeyoQNCi6Uq/GMf5/nUoLEUPSg5g==" + }, + { + "href": "lib/moment/ts3.1-typings/moment.d.ts", + "size": 23327, + "integrity": "sha256-QFH2MR3rDOYFIynusc1LGxBDeP5S+IL0gxML6nX5IZc= sha384-dKczfGcN0T8Kj2skKzPkHTld+4Bm4Jyj+H4UAQdj2lzWCjFBaUHk1ulx0Abl1Owy sha512-5oG49gaxivkZJujcVcMXXQE8JynsAK28O+9uSvFzr5lSi11hXsZsfLECZy6jNXqsGGlk/TeQwFkrgkdUXNGCUw==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-10-year-range.js", + "size": 55126, + "integrity": "sha256-KUYKRKDszgAjtliYBVfI9PJs4k4THPnkY2HFAD9XpEo= sha384-L02TxErQQYuY/sDpuFTSi4RMjbYyvhBJU4MNKEcfIGnJlevJkiexuglDIXhW0NMH sha512-2PxSjpo4UvK8I5Mh1p3SvWVbAqdp7aYCTcGsupAWGuY0gHJqeMIBiyXi1hJbxw2j/nGzk001Vgajwoo92Z2xbw==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-10-year-range.min.js", + "size": 42484, + "integrity": "sha256-ftF3dXMeyZ+UDALRfIlE0xw+L20ohDaa8CXkcoVGhyA= sha384-U88YDmPjFo9NFv/tOOXgMFc856dZ9CavT0KKbtEmU01JNsmxpXzmqbUx2fX4iAS/ sha512-d11VXfxQMn+sZuIgzHITdIuInr4cVRGV/uLiSI643WH/J+p4gPFYSHXRMR2v+w4Rn2TSyzJjsZjc0M7+Qd+UXw==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-1970-2030.js", + "size": 152444, + "integrity": "sha256-1gTvu55GYueWUOVXjgsZpZGo9UpEkkDrTu+4byO8xuY= sha384-cFIfDu8kESWjs5QQs+7c6ps8a/cdKSO0uNebnkZ5OKScKa9KQiyC0zm1uGzrp/eu sha512-XGJ/ji+bxLaF8LMjuEDtaVnomztLusj4KmEa+TB8zJOZpwART2aiGXZvLO2k5ttrjlfj28X/n5iPPgZr21lmlw==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-1970-2030.min.js", + "size": 139802, + "integrity": "sha256-V79c9dPY6jKT2KQ126E2Kvdc6U3LSOdrZKR17QqVHBw= sha384-0Xcaq/nOiCMB1nGBXSUoQeetc/xBiKuimGxmb5JPCwlAVDqjQ0UCxvESHz2hK47J sha512-HrzIlTa1k5W3mxabXMBdKKFMaDKTs91JrU+iXK9X1bEON72SvRxLr5ZQD+f2vDJm+zOlHzWNDfz4/tLYAuWtZA==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-2012-2022.js", + "size": 56065, + "integrity": "sha256-leJ4WBdAFN01LjGjea7UKhATX/sFVSGEwa/Zn5vQk1g= sha384-S6wIPQC8qvpqr3z2M0rjLF63SunFyFsIsvu5+BBecCHVwzSjpxHjDwUUVx0rSwj6 sha512-Xw2tsL9LtDJp5Cq4lc2QNjQdj2ZL4uwLDBCsYzZuATjyrz2xngVai/AT+vvbtK0Mzr9UkewHmpgZMsLOHVxZ2A==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js", + "size": 43423, + "integrity": "sha256-YmA7PoFT1+w4E0fjWKhHKR2WlyfIOznXhLcDnLnPWx0= sha384-ABx3P3HxKCChCD3ubnGwBZEUJPrRMUw+SW7jbUx0rRWkktSJgTrS2ibYEuKd6d0Q sha512-1u6FXVDpf5bF6+9QyLnaTE3J8do9wILeZoCAb3ldvrecPmL9F0mjF4wUPvAvleHW35/L5pW7Xjr1VQhdVzCy4A==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data.js", + "size": 206418, + "integrity": "sha256-5d2gBzQcO65Zya2efs7kEHpiItCy+XiQoMgckomtSCY= sha384-dDRHdOQ2M4qgN9AymrUHSi/MG9LTPb+qR41Q8neP7c23jf9YOaCJduj9o49AVHxD sha512-oqSECbLRRAy3Sq2tJ0RmzbqXHprFS+n7WapvpI1t0V7CtV4vghscIQ8MYoQo6tp4MrJmih4SlOaYuCkPRi3j6A==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone-with-data.min.js", + "size": 193776, + "integrity": "sha256-vfoPHEia3DQCyR1jROWW/OKWQTIrEZXdRuiTIN68h4k= sha384-4T4R6wauU1dYdV6ff/fhqj6qoTk3dS4XXzX4JA/aA3Efh9piq0MzdoZn5mcFVyqi sha512-fFkDTD3GpiLXZBIrfRu0etHZkCdWPkcNy4TjDqI3gQFVfbbDRFG5vV7w3mIeeOCvUY5cEKTUFiTetIsFtWjF1Q==" + }, + { + "href": "lib/moment-timezone/builds/moment-timezone.min.js", + "size": 7088, + "integrity": "sha256-bH15V9fDkdM1VeJrb7ELH9inCQ90UU8ECJr1f6+tCNU= sha384-jnp3I3iB3/ZEF1t5tgzqVpIqDn5ALlDyePJeCNVL6wX6B/3A1/RnOfBmje87heIo sha512-VjMwx7AzmdKY2lsKnzeHEEHjblZeHODMv75DWWLmwyZpXwWn9qRjefCratY66ZwJbzZwEPS56AOWsvRx4s6TyQ==" + }, + { + "href": "lib/moment-timezone/scripts/compare-versions.js", + "size": 2547, + "integrity": "sha256-ggyqGzbDtNBxDdUn5PiLfxZUWFV9rIqjiJ04sO6Wt+8= sha384-+pW5blVXDZXn4gLpV+xVS93jja6WnUFqXl+ejfO97MeSkL9na8Rb4gU/mYl0DUyf sha512-zVIrtW0ycBUPChVf76vFTBz+5bQ7unYSBe8N3KGqbDbxjIcH10eFruM5UvyUFqoeSn9dLp8ExEbnDMhWbDzVVg==" + }, + { + "href": "lib/moment-timezone/typing-tests/moment-tests.ts", + "size": 10404, + "integrity": "sha256-lSCLvTSQQplwPrBldKmVZl2+q47o6QwO6ZV+sBkcoz0= sha384-rZx9oKj5d70mtMHjoN9QjOxBF/rAMtxO886t0ur3tkFOu/8mEN0JmL08hK0AkOA+ sha512-z470CaSo61grsnYoi/91KplihNu0W2df9UzCNqdMqzH5HNeTDAiX2CBTSWHZVw8WdGWwmQ300O3vVRxNhiy65g==" + }, + { + "href": "lib/moment-timezone/typing-tests/moment-timezone-tests.ts", + "size": 3473, + "integrity": "sha256-eS05U3xJ2QoeuIPWFQa2XGDI/SOqs+OsLZ72YbYoiSc= sha384-N2jdHy0QQZ+ZdD5yI+NmKoOcmG8Wf+6NuOivRX/Nll13GkvarsVhy4rLaF1a/Dod sha512-hWCStsp+W3vL2MhKNtAZGtcR0tLAu0O/UbQcM9ERLFh/V6Eg96H1NK2K3PUv3maxAG7QlqDXPPKWkrNCyDYaRQ==" + }, + { + "href": "lib/moment-timezone/typing-tests/moment-timezone-utils-tests.ts", + "size": 595, + "integrity": "sha256-4dRLWLrucE0NmpqOyXDiqEvq9dFLlAt9sseJyzOiX3A= sha384-PuvimtPwXNjjS0FQDc9vPPI2Rav0DJK8d8FTuBw1D8O4pq/zn91WabTDYa6VmT8I sha512-CJais5wx2pZN/FOdXPjC/q2ZHzY5hyWJPh9gUU0YBgQeo+Y9r3tLoUOylBbO3MEq8h1wlCiSkvu8dQZJ+Jz8qQ==" + }, + { + "href": "lib/moment-timezone/typing-tests/tsconfig.json", + "size": 297, + "integrity": "sha256-UDs4w3rE9FdsWhdhs9vaNMRByfF0ZKvauxA5O4lxVBM= sha384-5iENSPlI4hx9XblvToaqBgdKp1HgV/4w0YRJPmmNlki1a4ykzTVmvPwTiWJZf4Ok sha512-s5m1NSTGwbNlCPH38Hes/TgI0hSdYUmTBObj0xhvRAwV8MQZrgvNPD7vbqwGxxF7t2ykeJ2Da6/38J7kqXpFGw==" + }, + { + "href": "lib/ng-walkthrough/css/ng-walkthrough.css", + "size": 4168, + "integrity": "sha256-ZCyxYSQdR8KPOU6aeZxBd9vVh7UBS/WnoOxcuWqgBLY= sha384-oE3ef+4gUiVBevb7ltWleYYJN3jhDIP6hcGzw2X+BCyUsvuU+yW6yV1x87Vftjnf sha512-FB35FGo2utX6NEXUDX+/zScVVIgMaiaFTx4cMqjkJprggh0Y6bViH87OdrzlWxBm4eU25OiXfeXdNDxzbM452g==" + }, + { + "href": "lib/nvd3/build/nv.d3.css", + "size": 12011, + "integrity": "sha256-CxAE6nXt9rp0VZqXPwtFPuHjagCC925Pj2ABpayLtak= sha384-ENmgqzvIT7sGLK65hXZJWQd1lm8bV4yk2inZGa39B2AZuo1pJnR3D9Tk0SEEpm63 sha512-sE0lXJVucHTljwWwIjHMf0dUV5EQ+S3FjCsTqWRhXieDW5oJ1ng0bGjLGer6xYF3yRISIptJ5ds64xFG9KSLJg==" + }, + { + "href": "lib/nvd3/build/nv.d3.js", + "size": 647867, + "integrity": "sha256-Prwofa0LmErWH9R0dHxaOvN8O6o++xWbk3JSfippAP8= sha384-jRARDwpwU37U6ZSXCpTZ76cMZzkj09vrzygIvQqEmjT7vLaySCbOS097ca1m759r sha512-qglBnWFLpYt6hsodUuJVkPp4m63LxEwr9Y+RhImqLEnrIn93pGi88E6Yk8SYOZCpjgZOS47xR0ezSKjOpuaR2Q==" + }, + { + "href": "lib/nvd3/build/nv.d3.min.css", + "size": 8419, + "integrity": "sha256-bmrwGjHOoD7azP+ZpGcOOitUNUGNRjwzjK1bZeTK6fI= sha384-S7g6fExmN4+nyxlqiYwg8W2lFPJ3HoVPl38GACU7kOHoNdWqDGIfRkPJsdxoyp6K sha512-5HktH3p+qBNLzxpOLnpICH2uwArYE/Fi7fdKCQee15piDqN3X3Q1iqo8D43oc8DJgYP4xxA7sdEjNCfmeLLYeg==" + }, + { + "href": "lib/nvd3/build/nv.d3.min.js", + "size": 253352, + "integrity": "sha256-Eg29ohiE9Hzc/t5whG/QK/B8MGmrO4wkF6WGuSsx0VU= sha384-eJmrpXH5ZpbFp/vsQwP8M1STpsv3XNcTx8/dcxMrxJnsY8SKfZWzCkWiFd6DxEZ2 sha512-ldXL88WIgBA+vAsJu2PepKp3VUvwuyqmXKEbcf8rKeAI56K8GZMb2jfKSm1a36m5AfUzyDp3TIY0iVKY8ciqSg==" + }, + { + "href": "lib/nvd3/meteor/export.js", + "size": 158, + "integrity": "sha256-YHbmgLpv04smbTmkG440G59szFVdh6Rc6ZzD68VGu1o= sha384-mjXx/TlGF/zchxXM9rlTq95RyX7tygxpr+dSk1woBWGifPfQzGAW2SPImZlPxVig sha512-A0lqAJ2qtkABlB4JvrI82NFYSJumbve2S8gef8RMpGOSzUNB52djeyw3Waw0IHx1FpBIjOHt3XkUI4BVMnj51Q==" + }, + { + "href": "lib/nz-tour/dist/nz-tour.css", + "size": 6527, + "integrity": "sha256-hZBlkU6k4xegMfR1FyePumtBCREeXIMsMN777FMn7b0= sha384-J2vHX81XNR/S+HNZBJvKEo5NhM9KOMmI1O7GROnzxonbjjcGY7iK/1BmaCzA5PCx sha512-mJNtGYKxE/++36Gr4fGI8cOOIkqu0qXXHk5PHKWL3fyL/5bHvsmph86j8ToH5k0cScgOQZNDm2+qnEafJ1HdUQ==" + }, + { + "href": "lib/nz-tour/dist/nz-tour.js", + "size": 43148, + "integrity": "sha256-7JCmaSLx6H8pOjwnRaLua7QUkKWfOwnResO3+/dQP+c= sha384-UuLrDUmFPI88l81+0r4WWSFYZuEc+VjQtDvi2xDywDqkNUrJYp9nTIHzAfEP/4SA sha512-6D4HixpWDn+rLC7ZoyFfqUqdvS8tMmFWIfjqmij8JjmHkIn/BWpdQ+Hq/Gb2s/0/8//aLBp346N9lKsnsQoILA==" + }, + { + "href": "lib/nz-tour/dist/nz-tour.min.css", + "size": 5586, + "integrity": "sha256-eoLNb4CgtHJfkuYDZpwIRuNY4oA0NT6A/QxDBznZyQU= sha384-Vspx/4iatn/nv+wPmER9fMG5eGtmoHcUizUnZGaBtT5i7LFPm0Qc2v7/JkrpEBuU sha512-KCAt1IA7wIA9PCPVjxx7vQycx0wxsVaq2A1oJBrWnedAe5aGMjxRyUgtp0/4KEdvrhRNfFD0BdR4zaj6d2RcEA==" + }, + { + "href": "lib/nz-tour/dist/nz-tour.min.js", + "size": 14953, + "integrity": "sha256-ITacM6j/4Xb8Cg5RxkOXE5VcM6PT20w+bU3jznAzOFo= sha384-xWikW80Bl0QOxFudRcc1UaDNsV4Q6tqKasdy6seDTbSYXqGFiiOKC+TULLiKqRUY sha512-JSXMMQ3LS42bNO4i+K1BDcAWCV/hqVcGq88pGKMjVWeBMRZbyQ1TXhQn2tmBYdFEqpNQPQTrrVnDyCHXv42YoQ==" + }, + { + "href": "lib/nz-tour/example/index.css", + "size": 8641, + "integrity": "sha256-Bm2As01Mc5iRKjvYHqOe+q+H+IMMPwYFuTZC/g3iDsE= sha384-riM+T1WyFObGgI+SVZP83aH25GOh3WOzK7f/pe8xbyUaIVut1jWLp1H1VPL+HuiT sha512-VklP8XQXcTuZyyaagFUoitejFFV0Y7ny/kUQNuwfRq6UffJxgK1yikDNu8IECJ3rkupxGayMJqxmFgFnAGT8xQ==" + }, + { + "href": "lib/nz-tour/example/index.js", + "size": 2988, + "integrity": "sha256-5iplqxsTBfVSzpfG8pUICfnhGYTV16XYJL6s/7LRMR4= sha384-n2hSYD5boDT41YjONtfoD15XjBh7EiZANbBh1yWkQfuLL+QvKZo4g5ZX32i+Wr6p sha512-lD5PtmzQrn5dj1L8E2LP7vARc97T9kxRqLPKxaUQM2Xd2dbpqbYyhepRf3TCtLXd4tLYCwwprpOvHjPPDwtsXQ==" + }, + { + "href": "lib/nz-tour/example/nz-tour.js", + "size": 25768, + "integrity": "sha256-p0qGADqZNWhCDcIdlD5yEGVq0tP3LZEy6tPpMe71vWY= sha384-6syKdvdCUExdHi8KEeEmZ49XOrP1vy0Dy3Ird/mnBdzSjK0AEF2/Bl8tys38U5yP sha512-6AXVuJo3pTVZ635/rvDI3dpMpNl9CC7ChhLdUqYJrDrToKz2HlTHay1YwVDb1tliNKKnkZqoyrvReV8/GoAdvA==" + }, + { + "href": "lib/nz-tour/example/params.json", + "size": 2071, + "integrity": "sha256-UsgZ3LUV0Ui5YjYimGq9q36aVlpq4VtjrOw0ZXLDc6w= sha384-RYPr8XkDQAcY3YdMo/nqf+ZP4fWfUn87zG7vclAunFsba8xy+v32tq6toiEg3IR6 sha512-BCXdCrXANinJoKqqwIFBmo9KYv6VZaelN+qoi5Jw1oNVjwKnQt+GjEo68jIxK5GUQdFZ5loYiVdWJgJCisTQqg==" + }, + { + "href": "lib/nz-tour/src/nz-tour.js", + "size": 43082, + "integrity": "sha256-fEz+4lTMuX1zh5aHWm5Nh2Rhhg9OfiY960y4hUtwBIQ= sha384-Hyyh3eljhiiOIUJNFMUgUPoTBR/Y5QQ9PQYEz+IUIUlrGPnvj47jwWt88YpVGhn6 sha512-C9GBWP1SoRUQW4ji4bbO+dG+lLB6eOWuA9eVzwhgN3RjeLri8AweHyFp5fC2bi1l+afjmjuYLXBZDxyuwwztTQ==" + }, + { + "href": "lib/nz-tour/src/nz-tour.styl", + "size": 6581, + "integrity": "sha256-2vdNNvAe5B3SQmBseYpplQk0R5WCd8HQtHEwogmQowQ= sha384-MFvicECi6qjLWDTiXQrjhSffVUgjINZEoVnOprCrQ27PBfxpLP1aySCyNvutiXGO sha512-R2qDSwUGuh79WSJL+6W5o9JK2NXmjZrx3ZOEs4mVv7K7qERhsUlnDOO7TtBZK+smk99b4Sp48V3ZJY1/jANDxQ==" + }, + { + "href": "lib/ui-leaflet/dist/ui-leaflet.js", + "size": 232138, + "integrity": "sha256-5o+6ECU2srmbbg0Io+HUQJ9I6jzNl/d9AAgQs6n47E4= sha384-XzzE3lO0hk8Pbmmo6pMWQoe8lynXd5AcLZkPfmdACiH33xAoFUgAADJY0MPUQyAc sha512-hTQMlplfmfbCYIS+0QkU3rnAuQovZU55Imyh4NwK88E1xsi6waWHbmVZyAa7SHntf9lBaTujtQjt/JbmA5HaYg==" + }, + { + "href": "lib/ui-leaflet/dist/ui-leaflet.min.js", + "size": 84651, + "integrity": "sha256-6CnVHzpU3EXliKAxpZIQELhI7rd4TWthPyEmBEmcJOg= sha384-WeCs1BgxnwMh/IVD/00pzcFXzDXse2Re5t2O3RNDyaCD+aCwv7vTU0kpQZfefvQv sha512-nDjxQTB4dDNiXOtq/eK+EyTgwigqiHmHQ0WfOOrAhYtH5yZP/ZaJaI2Q/kLw7D9+YKdrIQxAsLemed5eMmEMrA==" + }, + { + "href": "lib/ui-leaflet/dist/ui-leaflet.min.no-header.js", + "size": 83260, + "integrity": "sha256-nVudwuD5PYYUN5IjmB4milUsxbCRL2t6gMN6VMtlXoQ= sha384-wEBLVF7iT85gVg0tkRDq+s8lZg4RpDk8+G0Y6eqmqLUzVb4AE/RVgAQnnem0LmHy sha512-8dNGkE8yLivND1ghGz5QrgtgLZXbVjxeMP2/FgMqn0f2kZks5KNOzCVF+qAoFjDxyTmieRrM8gg9+nHPvBpOSw==" + }, + { + "href": "lib/ui-leaflet/dist/ui-leaflet_dev_mapped.js", + "size": 229546, + "integrity": "sha256-EayzCaWxHOjdpE3/O/0QPt1jfgPthfWApTN+bRM5W1A= sha384-IztR3vYzWLO5DBJqn7EGJZqJHpl7MBkwQctWsqRm9HxkS3xW7l0bPahpy2W6CWON sha512-puHC+XFDRknnppt5Q41frKdxQ0Vz8TrTlU/5BPUpYxxNsNA+CW3R9z+mJTX6PgjWvPFZxrgDD9jTK/WRLL8CKQ==" + }, + { + "href": "lib/ui-leaflet/grunt/aliases.yaml", + "size": 1560, + "integrity": "sha256-+xUDMKrh8PqRltko/UCKqMV9TyGSMD390Mq/f4Iewpg= sha384-dUGfjsPwuuSdtYsl6+lmhHqJFpcxd10Yk17pFT+exTCJg2Q/iQ+MdqQLIPODiOMk sha512-L88dIumfBQYyTPyb0Age0fSJgvUBugmrqj2w8suNEWZy+RiIGyvI/bTtVxOaQAMIws0VxHiWBUDAra1zf7fGtg==" + }, + { + "href": "lib/ui-leaflet/grunt/angular_architecture_graph.js", + "size": 216, + "integrity": "sha256-0aDxHLMlSon6ZJ5+468PVIh98pvYeBXNmoqHfxRTUGQ= sha384-3pqRqcTXpqua5VUEJJMSJRe3SaYoQ3I9oGWHWXmkXerCyNQ7E8ELctOucVpey9tM sha512-n6KCurqZOy/ulZDK7t5GB1WxUUFw593mHisxX7qHJlMLcidfxJlh+T/EJEJ0roCAwe6tqiHNiuI95bDLKVCOyA==" + }, + { + "href": "lib/ui-leaflet/grunt/bower.js", + "size": 236, + "integrity": "sha256-62/xbjdLr8kc0J6i7T6+JBc5WtyqVDg9XrKRqYu928A= sha384-Xw9fDn/XZ+XvUfMkIkqqtVhs8IS1FTql4vf5zdTp6fM2XKS2WS8biob3gAQGwzCr sha512-cgUBWORbDdr/zco9q80foCdnateCdXtMMV4JuFkpqxdLmOwCbOOlDIenW/IWAebcjYFMbue0be3quqPxWWVqAQ==" + }, + { + "href": "lib/ui-leaflet/grunt/bump.js", + "size": 984, + "integrity": "sha256-He8QPf/RdhfN0oeIRFZ+ibN2xemfBmjzf6tMzSJnlS8= sha384-p3I7JCh/lCzZtOzzxEWWmPen+zobkMATgiqOjCuadeUMD6r57xSBF88YJvHExeTE sha512-Tie7attrzjo99aXEFHrqBf2qlhzELTkDpo6ql/Lh6KcdC0amKIgVptPDaJqQT3itjYxYhCDCJacluaI6txcWmg==" + }, + { + "href": "lib/ui-leaflet/grunt/changelog.js", + "size": 725, + "integrity": "sha256-EeJ9M7peErF9OyptYyBB0sQKxtIS2CgPD5MoAC8di7g= sha384-dxpPnpECEPY40kpcF4RFrRgQosaO4M7lAZmK/uuLiZ5aSQSqIROWqq79fwVmhCQe sha512-rTJpzNw+A2JMsZKNFhgPGcLYgHIPXfoadjCxKrQQ4HCQcTly2l46Dny5UPmQq8TMDsLuT3ceodnPYghPqD9jow==" + }, + { + "href": "lib/ui-leaflet/grunt/clean.js", + "size": 167, + "integrity": "sha256-9BVKnFbme35OQrsLuroVFK8HBAIWpr/gk1MORfKEomM= sha384-vj4lNLHndwt4QfWEc0fJzE1u+2k1GSag7UmBzxS12xRdjSGlNxoYHVApTAWcXpi0 sha512-TguGFub9pLGRFeQGH5evZ1z/8hntMp2i1hA9z1CRbflSPax2nTpYZRSyZyJel+qgynt05NSxJ1hLu2/l5Cg7Sw==" + }, + { + "href": "lib/ui-leaflet/grunt/concat.js", + "size": 1555, + "integrity": "sha256-021rFJwPBjrQZb88sDW293d+/Nr279L22unmGc6CRzY= sha384-ArW+RtG6QzFv+3zinRLw4468I0a57JMkUTHftpRDSKmxhrpfoqkvH7EK3DAejgyd sha512-5tKJgB02DiBRtq2ARnP3jKX+LHy7fKdGTiJ85ZOU4oyb8OAXFbkfXOSpsU+fCc9H9KCRplBnTHIzD3n/EoiNfw==" + }, + { + "href": "lib/ui-leaflet/grunt/concurrent.js", + "size": 932, + "integrity": "sha256-4s+o0QJikN4JDx3yzFcMSG59+wonBE7+K+wIy6BE6Js= sha384-EAGbt4B87fkI5oKaLT3IkQvHOz+IByUVBhM6zqt3NtSvGMJqYekWaq8HptY0f2kc sha512-XPOTu8NRzcGNsBXp8CRmO7/kONs17zHQPmL6Voo4US9aDoarut9mkng53Q29hodBKhIY0EUHcUiagxRVgNs6Tw==" + }, + { + "href": "lib/ui-leaflet/grunt/connect.js", + "size": 741, + "integrity": "sha256-zCw473GCMnxZ8NJFHRz0nJjJgmYoZPYzEo1BohwIlP4= sha384-C/DVhgdcu5E4e4Tammu1SEvanZz5ioJ1hftlFAtBqopj4feBKXPpkG1pMnrpQ9hP sha512-9d/3/Oi+Kqw+GAKibqzPGJACIgydy56HTIprj5KY167sW0RV8BZk7YZNbJ8iXoOKD7KFPRs5xAezoYtwLz/zpQ==" + }, + { + "href": "lib/ui-leaflet/grunt/coveralls.js", + "size": 189, + "integrity": "sha256-5n/aYa1kDD9VOmALXbkDoh2lGN4uf5FyhibxpQ9OTIg= sha384-xx3c0sYPTxa5bg84AwD+fYl9OGJWxkPhZJ4EcFB2x/yPzQSC+aK3+3CTE1jSASJ3 sha512-CjM3AdUiw69ixZVikpyh+FWRC/WIklt3CqC8avm4mdi5y7/YLAi3VOQuoHU4e7nreyTVkQNkvzq7FiEyuzTdyQ==" + }, + { + "href": "lib/ui-leaflet/grunt/jshint.js", + "size": 422, + "integrity": "sha256-jmuFmCpK1ZaGelo4H5qoREMdZWKsA2JahnxOq3DM148= sha384-AMrS4+0jg11j/ALks72fmK9BW4cuOEfKUFs1JlrBYvi5m3KrISlzmjmRmkvbr/Ix sha512-KrsBm1PjhceacwpDywiCka/rVBvukxsdiGT/G2Pa422kFsfiAqVXbfKJjHyCFLruhcosggligPhTVDHYza+4vg==" + }, + { + "href": "lib/ui-leaflet/grunt/karma.js", + "size": 1596, + "integrity": "sha256-y9nsBLPkwVmw7Vbw1pZM1fzc0regHs648LP0F8VmoUk= sha384-BJiYx98TiWJsww+mi4QGraTedwsjP6OEf50ZGK+f4Xu9HyHoeNgvi7lzhWigJzQQ sha512-s4hJFi5Cbig79YamlKfAgJyqTJs+uUUNBwOggLQ6Y29XlvLGTO+5EosYM2+ddxm5h2qAFLp3BWFQOCG6S9Cung==" + }, + { + "href": "lib/ui-leaflet/grunt/ngAnnotate.js", + "size": 262, + "integrity": "sha256-W0gNlpzxCZ1I6SgUrOHeUAVk0vS6CNaYrFnuGc7IDLE= sha384-PtJJN36lLukJhTfKR+LtF/4GGBfQxcfIj75OcIR5vFvq+j/SP/LHKYZO4aJZj9Pe sha512-fVXjEVdxzTG4PjywJtXw9SSPcOx5EA5nNZJqXJSXSqQ68xMY0lBDp1XkNT2xUy4XOGIUWr81Low2KMNd/SOrlQ==" + }, + { + "href": "lib/ui-leaflet/grunt/open.js", + "size": 229, + "integrity": "sha256-XAfj41ZTps8wyDh7Qe22YqL1lhlaqE/wyYTfZCuy1d4= sha384-A+1wmOIONcR329XdkTjj955XEKokwJ5pzt1dtTxtP3mxLrfkfF2wGxXhAPmUItiW sha512-IsgJibwdejOyNxFDvJbh179blk7zrEhiFoWnd7a1whnlqw402s+xUDg5B+1tUngLQ4bm/3OBFT75kr5ojCANPg==" + }, + { + "href": "lib/ui-leaflet/grunt/pkg.js", + "size": 399, + "integrity": "sha256-Hcmqme5n9f9lek98yeqfPlRu7peqXgGn4VtoMtgzmPg= sha384-YXOkdUGwS5F8luFITxNcTdZrk2IHOtCEWUxfDtIuI8doPzDoSM6HRUJsqHxkkAxs sha512-q4QbaqZrijTQ3HdezVxqTfTHZoB3DbHlXiBsZqQ64bjYE8ZtksCbKgVMTIwsioZ+n/qPy+CUCZx6EJnwlEZWKA==" + }, + { + "href": "lib/ui-leaflet/grunt/protractor.js", + "size": 606, + "integrity": "sha256-UJ4bZy3rK0czhnrW+bl/4rGjrDQBYE6xNwziP/xSVGs= sha384-9+JWy1R27QYqZEgl+dYsibu64UY9rosS4V7ztuVw2HOH83NZ6lI3aOt7Kwyr7KVA sha512-MMp26/9+K6d+aH8ciZhnYa2xd0Vptpe6KKLhHdvRBgAmMEBmAD0LZ9GUEnJxxOtfPI2v9xFIm4toUcB8fu5viA==" + }, + { + "href": "lib/ui-leaflet/grunt/shell.js", + "size": 614, + "integrity": "sha256-b7OCtA5Nw5QWZYzVZuTX5USKDkta5uRDdo1bqqOlGZ4= sha384-iPj7nbNk8/HoDSCVL7BoeTjCDMnDZb6ukvGSS8PaoieI4R7AwPi/3xeoquzKOxY3 sha512-xRbN18J3WywlZb0xc/jes/9JRfO8ZJkVjQZzrMmDG9AKtLqam8m2HrFiCvO+2cf47qUwK/GekAZRgbj3dGU17A==" + }, + { + "href": "lib/ui-leaflet/grunt/uglify.js", + "size": 305, + "integrity": "sha256-Dfl/HijuKqQ7iockRXIp3RoYeeYer7ZQwplJ1mTxtRQ= sha384-M5+pml9hhJxyVnlh1Ekg6tSvOHqeBsKiOYvL35J1njRoQwJ+9IlO58AL/pUi2JwN sha512-HI7VuREuEt1kt+2nQFixj1fjsQG4/O83HGFTQIAdobx5pqP/brYCaFRXB7KpAUT8SbQG4vr9ocGhc4pFHAa+DA==" + }, + { + "href": "lib/ui-leaflet/grunt/watch.js", + "size": 1536, + "integrity": "sha256-8z0OWKUrVHwA8zPzuBHMa2o8HYfCi7XeATXYyLKMA84= sha384-pK1UHlPdAiUFDcq/hHpxptuqwpuOabaJrNXkFplUA9uKb6m7EWv2cnFDNHz4+EJh sha512-1nw4iSo1CsG+I81PsM1zWsgLGOFKnrTq3Xw7x4ZI6QsE3WkuIZb6fNQT1bSk/JEwdI+Tm1NRvLACR0nDq+G0Zg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/dist/angularjs-nvd3-directives.js", + "size": 108409, + "integrity": "sha256-9cRnwGkU4PYL1LvS9BqU3O5mjoDvCKgWMrJ8OcCviAQ= sha384-qDOdFy+5TPsea3f94Yumsq6Cw/RlXuVNg1EKeq737h5SDrJ410uRSwhavAGPhgMH sha512-erzjlqw1en+kfCQEfhOC6kMRNh+bL8ORY1rIGdH8NeIylZLL/oIhrDv6ARS+YKTdPQA7DY/+cWDhS/AvLaYxeg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/dist/angularjs-nvd3-directives.min.js", + "size": 65187, + "integrity": "sha256-PYEUN1wrfJEhMewfNfRckudriEV9qyH9whkM6x6FO/U= sha384-Hd04U+mcT34BgQP2ARIUZyvBWp322szT5tQ6htuIUe0VmpKRapjotfUdCDEnl98F sha512-qcHA4wwJfuX3sroLU2VfLJWJN7hnM3FpkavFsSWxnPDolqnTcLn1Xa1IYnfwErTFE2qBnM9eK0S8KmEjRQZwVQ==" + }, + { + "href": "manual_lib/fontawesome/css/all.min.css", + "size": 55967, + "integrity": "sha256-UzFD2WYH2U1dQpKDjjZK72VtPeWP50NoJjd26rnAdUI= sha384-i1LQnF23gykqWXg6jxC2ZbCbUMxyw5gLZY6UiUS98LYV5unm8GWmfkIS6jqJfb4E sha512-q3eWabyZPc1XTCmF+8/LuE1ozpg5xxn7iO89yfSOd5/oKvyqLngoNGsx8jq92Y8eXJ/IRxQbEC+FGSYxtk2oiw==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-brands-400.eot", + "size": 129352, + "integrity": "sha256-kx0XM5C5AbhLEzeWouQuVLgqTWD8fwuqI+BXQq+Xk+g= sha384-YI2ROtudeNll/etjPVQEGgmVta8kSdozPfAj+4spcrR3y7jFoWLEbs3J4JZ9PIgw sha512-tVLRkoKtOg52lshHX9KFTSP6knusco1Gs0L/bvsI5KtWbuNpXXs9MqdJjGyah6yFNykitDji6l595aPUV6D0Uw==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-brands-400.svg", + "size": 689922, + "integrity": "sha256-he7hFWLKgzDdbj57cmMJq5URDgYtcsdZq8g/iXuO0HQ= sha384-D/uD/f9avt1d6MlSZezkkneuQQtn6EEFzmFRhuYEc2kUBMFfIS+DLQUSBMEdhgvp sha512-Jh+waESmLVtZvoB0m/3B0TdC3qeWAhgL/7Fw5MPB/a/qT5uHlk0DKD64Uu7Q+gm+sBfJCcn3NJrxztRTOKl8yw==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-brands-400.ttf", + "size": 129048, + "integrity": "sha256-13RtKWbjAyMmap9+okvoCUD3oCB6C5Hd4WafOzvezTM= sha384-VYKh3IHeqt8jB6jJqDWrAC5VBzB2IYCqyf8E/x/L1KiNjcX83XwPX2AkBIJsA25R sha512-HVAoiV31mUPN4IMWrixqYENtQ7FzuJdLVkPTmbjO5pWb5GfLsFrFpG+q3gIsOJMFmCgDlreF/mpdaDa9+j/WSA==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-brands-400.woff", + "size": 87352, + "integrity": "sha256-73I08enTA9LkKiCcVHwhe5CvpJ1gUC0E8bFMkG78AtE= sha384-ZqpJgsdehHxJ4m5zQO8EjuUH+L67lmpXuPsiOKQ7khVWX1eSOxu06ALx56X3NAu7 sha512-fIZCVxYb1uGi+22uncHZOhVt/OCPz0v9v2hhxWIdw3BTlAeFDMjLTAQwP5P1atY+Q1JAj+bQNuLt6egxqo5ExQ==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-brands-400.woff2", + "size": 74508, + "integrity": "sha256-H0m4cGVHaC4sXtZkKi8ty9KH2kWDFLlnxg13SqfttHM= sha384-FPhvBuG7IdDKqkMecoGGtX3pFUgEbnDWtclBHP51ytcKGcKEVaZfCxRl3a2unQJ7 sha512-OSymZewQX047auE6tY33x0oGubm0SQ2wHQxHEdIfyRWLPKYd6aUKiXpvb488fJ/NWhDc3GKUlCjkZPIOVw6UZw==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-regular-400.eot", + "size": 34388, + "integrity": "sha256-2gXl7nx1yWXvsVGm6Hq1WJuAI/JG9pjB0UlGQUvDHJA= sha384-ikKeGhNFsML/yPtozE0TN+TJM+RBxa5XYAARWmna959/XHWafvp4VexNZKWSuYtc sha512-dyZ1y9FecA/gUT2N6uLN2nceudsMyaLsoJzO1nmku/KXQnoDvqzLvUPk0XfaGpka3YfM8EvpnJADK96kQ2ph5Q==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-regular-400.svg", + "size": 144451, + "integrity": "sha256-4U3gQEvL4orEE71MmS9VKvJQ2jCCPmNauadlblDne8g= sha384-fMtBwf3E+u7+ECEGAicdsNoMfdAkxEEQHDpp9go1lN/zf9LUuwXHwlT5T1DhgVip sha512-kzbCJPM8bXUYZDSTxR9yTm+PtCSb+tkAa05Kzcq7V7AGkZMH5pIZ8y4I7LNir3iBFl/ogETq3CzfdK5IQ+gMAQ==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-regular-400.ttf", + "size": 34092, + "integrity": "sha256-Ti/B04KLk+fpQ8gBelQrCtAPYzPSh0hli7BpfeI/1S4= sha384-j9wyuTmY68ryn6qdl7VkZq9POIIXbiXBPth4l5PiEox8hgelSDU5dGYkkCtysfI5 sha512-LTy9Vd91aMLD4WpShjWkCBdlxRFhq8OLosL4vMejFqx1T9ykMnaNBCnL4K7BL1YqwEewW3brh03CK7VXjfvt7g==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-regular-400.woff", + "size": 16804, + "integrity": "sha256-aEFX5A9+4kKXB6I9W3fSxxxdI/JqnYKDknX/mE0TBTs= sha384-NcfHvVBaAzlNuup/Rlyl8krioBbyEzHbLUaWjDcW38KU8JWHUUNVS3yK5R2A9bGO sha512-TcluKdS1iN1y+92CnjsJ+ndebnTyiKTepb7VdBvgXO9yAISeBv6hcvVd65S+6Th9rA6QfjFyN6LUBsIczu1jpg==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-regular-400.woff2", + "size": 13580, + "integrity": "sha256-ahbAQim8K02iJuuX5o2U9JumQ3t7XhbBShAbIaKThOk= sha384-wr009TmQhrGm9CBoCNQGs9mc1O8M9hJ8TBgJuIOtZRekT/rOz9n2mT0KXsGtZg/a sha512-QnXsSLwkFDv3k9IIREUjHTVS3GQpa//fe5roNBfTZvBQaI3kXoc25yBN4ArmId554q1dX5mOdDtywTIp2iKWaQ==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-solid-900.eot", + "size": 192116, + "integrity": "sha256-1TQq5nnXBk1HVAPOX+BdgPGgq+WIH3Ke4OMnKpw1Xzs= sha384-3GLops364k02RfFbYIv4OgVpfC8JxaFA0NIBaquchvzIWmqVbcFbflpOAerKvtKD sha512-etXD8XwTTZmJ3uII9ZrO/MlIKPm7H+wNo/bC4VQ9T/vSlrpFMD7RlBQJbE70OD15kVo08TTb/6WGgxml5cvhNg==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-solid-900.svg", + "size": 839388, + "integrity": "sha256-TuGxcP9Rt/2hGs71UdHvSSwOvBr/jlcS0+MPy7g1d20= sha384-ZZCRwqDDla4mtEnB+afyoxP8gC1YDfQgHLW0L9Zfp5gxuMSYA1tGbxStzAEU2A19 sha512-nTuwmqgjwcHw6HRDCZ8hQKlaSaCIx3GG0PgSjDb2xiusp2OXVdDG1AhT4zxvcbBMdBxIjL+yc11La6Sr/JprUQ==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-solid-900.ttf", + "size": 191832, + "integrity": "sha256-kxPecwS+9FL/Wsk+D5ykjDlx0vu1AsP6Hiwuofka2FM= sha384-G4NMpW4aMiJj+CB4918E0eBshbdYKLPADjlvjtnudBsnPQ86u3OEDi+nhf1+s21u sha512-GEsLD0RQHDMQnQFOr3rEPLq5q5cMH0Chh5Xh6Hd41jHY/eUtrltxh67aHMSD/vskM4etMUKLLi4rcstWi3m+WA==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-solid-900.woff", + "size": 98020, + "integrity": "sha256-wUUM3f2YZo5uWT4tJvEbTEP6rMtfAzsLUOpvHOe/S1g= sha384-YLidxRIzSSUftBXtmmhi8R/6fZKivoVayR2+TwK0Lu4N/douYI3cFxOhpUqGfr2l sha512-0C0O2yGrd+tM91boBpQLqGJa+8ke6DofWWbUZcxA7nEfLgpZZooiNcFErVXgJ51MWU2fFge2UEOiUEGXZfXy1A==" + }, + { + "href": "manual_lib/fontawesome/webfonts/fa-solid-900.woff2", + "size": 75440, + "integrity": "sha256-zTmL4akYFxJs7xAiRzjmJDWO328IBDq61+YMGq7MyNA= sha384-uQ9hInTFTqFbsRgiUYWSEa9McsSPQgfcB/sQ6ULAIzZTOZoXXTxLNRRRUwVNjb07 sha512-8IuSiWlc9TAJTwdrLfTSsOGh2u3QAZDRI7QXmywaG16LK7mI2G/G3J7uEX2IpY3Vtt/naJWGwXBo9dLaAZBNdg==" + }, + { + "href": "manual_lib/leaflet/dist/leaflet-src.js", + "size": 216245, + "integrity": "sha256-kIHBbAJDTcbEN1ldWV/zPfGIOBHn1xlYjVE9ndi8Vno= sha384-K9AJVk6RC1QMx2ntH5GLhE4+o8w20QETk++dLn5iCJRDUqsPe1mBGuH3aMegnmGj sha512-Rf7EiHZ+o+3Qx3b/N7YryleHbc9K+fceV/JskbGldUietRENyRLWM1oN5SG4TgmdRCJjdNe472joBo8vjeBZTA==" + }, + { + "href": "manual_lib/leaflet/dist/leaflet.css", + "size": 10183, + "integrity": "sha256-ymZGho+WjeQQ2jvjHInYJd0h20DI6/AE0fYq+BGYXqY= sha384-99ZJFcuBCh9c/V/+8YwDX/TUGG8JWMG+gKFJWzk0BZP3IoDMN+pLGd3/H0yjg4oa sha512-BjUcsqlmxCfopFFJpQr57VRWk3/N+csTp8cwWSNeOmBnz8QriGor88ZiHlLKPvutKvTpRU7HRT08E0y/FM0TCA==" + }, + { + "href": "manual_lib/leaflet/dist/leaflet.js", + "size": 125709, + "integrity": "sha256-aReBHzIjoMzKrp0H4XnxXIm0mwuNG/F+00pKDiFuLxI= sha384-Lh7SNUss9JoImCvc96eCUnLX3HvY4kb0UZCWZbYWvceJ+o5CJeOJqqNoheaGkNHT sha512-e+JSf1UWuoLdiGeXXi5byQqIN7ojQLLgvC+aV0w9rnKNwNDBAz99sCgS20+PjT/r+yitmU7kpGVZJQDDgevhoA==" + }, + { + "href": "manual_lib/ui-leaflet/dist/ui-leaflet.js", + "size": 228415, + "integrity": "sha256-33BH/tsOC+bYQlxkV+hZH7WCim2crC64A1s2+gpljzg= sha384-C0uCicU1MFUPpe1vVBFK0mJFkCBLVsoc9S7OqBama6m9PxIUZFS4Kd4Nm5wkve0F sha512-s03kmErHxkXxIXWjDtk54swUHKpEuJ7hRC9s6oo7t0jIu1gkW7X8l85oIvqAYjTp+KdkDZuXtYMi+DUw+nXrlA==" + }, + { + "href": "manual_lib/ui-leaflet/dist/ui-leaflet.min.js", + "size": 83547, + "integrity": "sha256-XHnNLPUWj01kaVoEE3grzYDHGSQbvHLlcDSx07yF2N4= sha384-XgzHN1Ds1izxa4RRyMRBPduQaigUkxZr2L+phWstq9gwyvB0rqQqNgEm7y/CNDCV sha512-7FC+2pHGgQSdyqnjTl5TDwOO5Fqy4V2rgSWnHRmSveo5u9S5yhoyS0q1d3xhlnorjQVXqVh9CKvlZMvIsFwq6A==" + }, + { + "href": "manual_lib/ui-leaflet/dist/ui-leaflet.min.no-header.js", + "size": 82156, + "integrity": "sha256-XEILzlKEzORyYAKuH7fkhgVj4t3Dv8Ne9EvNPN7r19U= sha384-oWpU50Mdw3S0GGjScByc+Q+6HsECUvtJmNtywhv4XxWPuqSiwkTLAGqhLHFVUjCL sha512-nGNNX9cD9ONp7aKO71M5jppqUt3y3z164iSZ65nIiAZYFgH2pmmIDQTMmUKPvVYvZhXnMt7Iqw/94gHiPtArFQ==" + }, + { + "href": "manual_lib/ui-leaflet/dist/ui-leaflet_dev_mapped.js", + "size": 225648, + "integrity": "sha256-UhigeYjgco4H2gaKk0+VckG/3GF1cq6mOvLQXSug9b0= sha384-5fW+Ig7n+Covo6c2iRkmBaQrFsEYrbQHIGkYyBAFVB+wzF24/tQr1TNv4dRuEWHy sha512-CB4dEMF95bwrEGDRwVRNU7SG+LlLTcfxro2uthUrKglGjIjN/u3jq9O+TK6u+fnw2JJNSWxSk7Vpa3KTfWkf9A==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-matte.png", + "size": 14323, + "integrity": "sha256-SXgmVFqQ4JokBQTRRTDrpFgjsZ/UQXXgnifEfNgi3bk= sha384-utk8v4zTEYApFHXNQqlK2mVYlMCL/V9PCjsEq/LR361e85Rx5lrTAZKYSxT+a3hi sha512-g6+DyPotqQkvxA/s4D0uckegB0q4gfg51tk/h/lYNBuhb6hK+zc4BeMb/k5UM+1ujA49od1Q6lHOOPjddNWB1g==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-matte@2x.png", + "size": 31113, + "integrity": "sha256-lI/IxEJvBPYJZO0gOUJH9FsLYOV10COYubaBDnopqCM= sha384-ZDRDvsMMKoH5t8W+EGjZbX0WiV4Vo+1A2RS8Jqm4Z9rhkQOYJdmKZpuMA4ri/ut2 sha512-dARvWjsaaZ9DzbL7H5dpIb5Gei0dQrYI6l5mCoX/4AxAT2S4/V79oK7IsyBZlJHKuuutRtXV0WyPrJJDbUJOUQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-plain.png", + "size": 7946, + "integrity": "sha256-zyM0I6pE51rAAx53uLpXHNMzEBBRfhGX5j+3sGhWwf8= sha384-1MceLKvmAjoVtGtMhPDSKRj/WRClL2QK1LtRMfPyS6mz9tdIYKeZfC9t17HrORtD sha512-d6MrpWRRKV8NiFSWvZ52hda4tWs7VHmwtIHcsqWASbZWE4SUppbPrJ1IYkfPQrmkpv5h9o1jdG0PHma+ecCEuA==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-shadow.png", + "size": 535, + "integrity": "sha256-hwOiJicQ9ePSnmXSrN+Q1lEuFZ4RnSe4I0cx2KYgiiA= sha384-NpKHec8cDkrR95J2b/CVJLFO4OiGN+D0zeaiLfM+yOYRERIXZaCJ2/zeYi7u5Uyr sha512-dO5w+StrjR2JLjeGiL1b8pXTn3aBd9TEEGe8P2MQElyF03TTpExJvCMH4fptTuN9cgfUQsLXuM+ffQ1jifQfBA==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-shadow@2x.png", + "size": 1469, + "integrity": "sha256-shpTa+JzE/tQT2n1iZ/wsSRbJ2VxdprAjWwyw1Z25Ho= sha384-Y6LKsuPgrqBX+2goyCrOYDzMjKAdedK15N8Bjm9td9EYiQ3dOUBhChd931JX7kgo sha512-O6fn7lJnoFtf30dKPFFizHUhU0iH9qSaMCbz87jZIHwYPnp7cPBQ+bAC6+6JI8HWGe7jkgq+IvPuZzZdXptIBA==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-soft.png", + "size": 41226, + "integrity": "sha256-54eE5O1wqv/d1zwxX6tZAjPMTntyOI191HoUeW/Hxzk= sha384-J4DU90JJoSI8HJjr62VINP88cLeuUXO+P3YHjLvLPRjuOosZGdXcPy1mV6PGcN1Z sha512-+WQgtovzcUV//Gpk+z+9TzfGIQv0ihgsEYHQCAqClO5v1qtviFBcIRn8FNDKK9H0x/dWFAQ/rBBMlCmZaQ0Fmw==" + }, + { + "href": "lib/Leaflet.awesome-markers/dist/images/markers-soft@2x.png", + "size": 66408, + "integrity": "sha256-wedyU6i/vjDOwkiF1wRvRDt267ZvTJYfdwg7A/Sly68= sha384-Y+WF4QbOUuht97zN1VlvXIkAgAaztY4pIIvK+Cr/f+TNXKycY8LWH2DR85lqRfCy sha512-iQ5m1KGgnV9N2lPLUJznpG5KETHMVTq5xXoeyhEuNNpvcaMDntgUsxzj1S+Dz5UH3iNbpuBRog+Ju9uZSnZKfg==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/css/font-awesome-ie7.min.css", + "size": 25255, + "integrity": "sha256-L1ZMlEbU+Qgt06jw8XbwFBq/SPolj/JHR/uf8bLslMw= sha384-DbyqUVgPOzg43CPIDUv5biB4stEqbSihBeybadJV8rUe6c+VrEvrcnbld/rKil9y sha512-DCNM+tJBuuUjj7hnAadlsH4ibeUIpXr5+mXwdVk2F5HRMML4iO1/scIMmpXkkk8ArIvvXBcDwMJ1CJmIRbkJog==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/css/font-awesome.min.css", + "size": 15725, + "integrity": "sha256-ou/BAVnuyxKAoBXvMzTNSvqPmHtM/5XDESClqnjRGS0= sha384-DMwztVngw8BoAjfrBGYzJo21JKkpOp2D5DS8/6ywaLYwpWmCNLHv5RjbLAi2s+/E sha512-8JmjytQRBs3ZfZSZbPWtcIUhBeHfeCuWJft1HfZITst9QZ6z15X600LufOZy8c9IWBxg4Yga8sqV+nUOhpRQ4w==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/font/FontAwesome.otf", + "size": 48748, + "integrity": "sha256-5dcX0sJOUq/A4Tm0HYF1gFg6ytLjydcl0b1G8Pflyxs= sha384-DPE04SsBgAzseL5Vuy7MoQE2SUARbmnk74r5NZA+BoeFDKG8WMEBTnVlDnPeJ4Yx sha512-PO8VN8G5Xoi84ADKUaFQQKFMmCrTetf1ds4D6xJCNyU4aZTO2IRnEsoSEgpcEzmm10y1yc2oEMOeqBIVwi6ftw==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/font/fontawesome-webfont.eot", + "size": 25395, + "integrity": "sha256-4H07AiWtjpQ4knNB1jSF4Bx2ft8eKTCxbwoL+QeuDYI= sha384-ACGx2jzVTGHMDzUxm6y6K2+9h6uoLx29Hcr0JZ6EGtKgKYjwrQ+oUGp+TDVqqv0F sha512-Dgjztp1zvKP/15awNlZfcw5fVGvRQnjpaSf4KKP0czhcqIcBbbL9WyuQIShkFQ7sTZCwZfrfW3iBaBbkw2EI8Q==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/font/fontawesome-webfont.svg", + "size": 138488, + "integrity": "sha256-8rvVelgw0aENvh6Fb38Bkw1Dpai4xGODhyyANtw01jM= sha384-j+4UXQ+p6dUbRukyd3/X+vl7Kp8x+yBf4XMU9HW+T0y36m5vMmZ65B5bpMJ+UGiZ sha512-89M+Cn947t682CbR74juP72MavcEv/kUiLvCyCRyGL3sKptolTKXbxBh42HX4fxYtLktEZG4dWnPwQIDHNNrNQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/font/fontawesome-webfont.ttf", + "size": 55096, + "integrity": "sha256-HrdGYpPbk3iFjaNpTdEWIOycNR+3zv7xqUo4AoA+H6M= sha384-bpWr8IiIv3tumjkU6r7M5o3060yGYpRDj7zoGApK8cm4elqZOz96Gk/iSDIzNHxn sha512-mqP4pyNl/mQMP2E9Dfel43a4DfUjt56WcRqbvRHzGclmzJovEKVeA3BJrR3A9DauLKkskk5RsmUnolStDqpTyQ==" + }, + { + "href": "lib/Leaflet.awesome-markers/examples/font/fontawesome-webfont.woff", + "size": 29380, + "integrity": "sha256-pvuQaUKTLeU4Uu4kTuP+wnvKC/Y6lkIWcqpHhIUbjUs= sha384-UBEyXsfXOzxh+x5SkPcF6nPQpdANGySIzxLiUxk2XPqFRdmIaBLYGUbQyPqkgCNl sha512-U9it8+bZBf34GEG8ZnYHLZpHubh3B+/mqgjEZd8xlVYOfCRA63eL4bVYTvroBzEOcTnmYoRIb18UwH0IPcc9mQ==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/foundation.min.css", + "size": 163840, + "integrity": "sha256-c66JnVsQkTWI7cPiEl/rUDBMuLgdzFy+qudFQM5iBkM= sha384-z2we9jIg/GuHxzlc/zBxha+iyhQG96re2TYNiNFgjvofydfAAohbmFJE2TztChF/ sha512-hsNaiR3HMIGTKP5jrnRD3OMqGZa022RMEyrqBVckKKDAIOFWpAV1fC62P6J0FE9b4knLGDRWxIhI7iUnOYcD9w==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/hero.jpg", + "size": 41631, + "integrity": "sha256-UUH33Av3WGvmmplqwsKqqB6uvA16o+XUXjU42lWUefI= sha384-bL2Rxt7QR9gywGdhDtFIsYWT9WesbFmHyzfIRvDQWwQNUvAmThGf/nh43lrOpYRS sha512-6T8r1tay+9dBs5k6dPrBuGgqxed+rxYpmno0WH1lTg3QCtRsQFI7RkYYRnzz4MGfpg+4AgzgXot89BMHYn0tzg==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/jquery-1.9.1.min.js", + "size": 92632, + "integrity": "sha256-DPagTuNT9nPVRdhlX8R8vQzqha/iRjpydPg2QOW3iSA= sha384-CSV+EfkkRGboiyqzuDF5wg/1kBwXG4CpRZWb3lLMrJFBzO6YgKdNpy/xdIfNyxCP sha512-zA9T+XhU8HBmBYAbUWICQrY/EjYZ0kBO6WjyNh+uK0CSWvzWrS/VxVpDYllMn9XsmbwmO0MDNcrw0QGm5DL+7g==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/prettify.css", + "size": 678, + "integrity": "sha256-mYm9vQnZQknN8KBLEKdBuPFjJ5/qQA9kxnUOGVOuzMs= sha384-7o/BcTFgVnpWA2Udx1hxVFQP24hTxPl9CCsmZX7cuMbglPmSweyS1VAj8QDl2Ocg sha512-5TXCF/xlxQrSQOTE4Jz9xo8zbevnlMVzpOXP5xGD5rBojP9Ui2skJfrP6r3X2SoDRf0Srx5G1M06U3tiqy5/UA==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/prettify.js", + "size": 45121, + "integrity": "sha256-88hc4MhS6XCbNrD8jPRFr7rbs7SAnzNqWHhxV10DorY= sha384-0lo/M0/xZs067Dgxv+TCvwuavqEPYkXrVAvz/N9pyEVMM+bEKzE5wLRe6t4U3BIY sha512-UU4nUpPgPRx9fWF4qQI/sat+w7aVkOf35Y5XGP7FKVJlNFIOTpPaipmDzcodRH/eW8WV1DzSUubInAf0jEPvXA==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/style.css", + "size": 723, + "integrity": "sha256-5os3kxm9PRGGT3Hz91+H+FWSLfVzsLEg/qsuqsKVh0M= sha384-XABEalDDtwNtW1R79mBmYQDfBbHC/l61PoJZf80mL4qmwpq7Msf9D7ddxchVawma sha512-jaJHO/S7HJjwuJ1YGr3RIxEm3L3nOTkmgSechuP6gYuD8icSf2kgDSA7tmTFdkDYk2UT4XSOSbyRRxRLMkSoaA==" + }, + { + "href": "lib/angularLocalStorage/examples/assets/style.less", + "size": 673, + "integrity": "sha256-S/J/94teE2WtqAdkXczVFrDqLst7EGIgfQa5u/js8O8= sha384-NN/1jXSECa5XwxeQVafvFhpaNDg+WuSXaVRFsqKfNo8CHLIkol3aQkAppGUXVLcT sha512-wKqUn35uoA+lpE+aFDpLJ6CmqobrWOYCQLx5NhEBWXLMXUZyyur4luwhexglgFWKCVGl/qqnPyEFdqjonj9LwQ==" + }, + { + "href": "lib/angularjs-slider/cypress/integration/simple_spec.js", + "size": 253, + "integrity": "sha256-SEeMCup+PQFRUCgsywnd7/qwXmAggO+BZ9kplsq/sdM= sha384-+I9FMEuiwTepeqbDJXhiq5rxiYmGBgywgDlp9LvijpiCyAA+Y6LTBVTDamr4YJT0 sha512-f12UjmzSqzCeTjr6TlXrG4KKLS+EX8ewsCVVRKBuBheD9PyRw8g8+hb/4luShhZjUsMxDGQ6T5CaFv9JXzd9xg==" + }, + { + "href": "lib/angularjs-slider/demo/lib/bootstrap.min.css", + "size": 117305, + "integrity": "sha256-8EtRe6XWoFEEhWiaPkLawAD1FkD9cbmGgEy6F46uQqU= sha384-604wwakM23pEysLJAhja8Lm42IIwYrJ0dEAqzFsj9pJ/P5buiujjywArgPCi8eoz sha512-/5KWJw2mvMO2ZM5fndVxUQmpVPqaxZyYRTMrXtrprsyQ2zM0o0NMjU02I8ZJXeBPtrmrPO4IAyCCRsydG0BJoQ==" + }, + { + "href": "lib/angularjs-slider/demo/lib/ui-bootstrap-tpls.js", + "size": 285958, + "integrity": "sha256-MJSj9TkJw0iecD8vpBgmcyk5icSTmMJOQgS5flZBjv4= sha384-mMbaI56aNdxEgL5w6AWOCvKwmlPqfbLr+SzqlnP+Rr0HnhhViTMshJun4GoXl+MP sha512-uDLbkGMZLnAb5yUwXlhac87MijOuFLPWCgT+lKpndZUk+pzURmEYRwrUeQ7umx7pl5imMlfZ1MyG2k00ZQM27w==" + }, + { + "href": "lib/animate.css/source/attention_seekers/bounce.css", + "size": 551, + "integrity": "sha256-sr9DoA2MPSAsTfZHjsQy75d2RL6NoOVi2cZ2pQ/rpy8= sha384-xjSuNSp4Ziky0xdFIoMHALZG6KII/Nj0OEvapVdH9UfaCvHOBN5e9tSmBeUN42dc sha512-IciQWkoEVRj5bLFwXOlV//r3zxjwiVVs1bZgwzCVnlpk3EAE2c5IxPwvruuonpMhQZ/cOHVdd8otczVJdXgGVA==" + }, + { + "href": "lib/animate.css/source/attention_seekers/flash.css", + "size": 136, + "integrity": "sha256-f9kEtvHs0H4zSYlfea1ORitikdXvUVX5kchrzTdA6ZY= sha384-UF/EDwmyOiynUf3Eqnly2LlrhRIIlMVm+N4DcTpKcsuYhDuwDQuDAyu2eeZQ8H2V sha512-/G4hslF+S4tQY8BZLZSp4t+mbdw4s6I5U851cwhtEf1AZh77qzWPw9NvagCd01snGRNBSSuOZSxBt8gOQcFXqw==" + }, + { + "href": "lib/animate.css/source/attention_seekers/headShake.css", + "size": 443, + "integrity": "sha256-uanQKdD5dSrF9PO/FXvdNYebAnomvtchjqtgnv/v0aA= sha384-zxrIWg4aTM++EAVSYl2ybfEWacFvNA5/BGrQ5wwirdMwo+i8r3PJz8Y80cTQtSfw sha512-JVhRdtXBg0cwwxHSulWuNEl2hUZalWaYHu4QYj3dVtZoENK0WbAijStMNaiMNsG4yuh/guioU0CuD2t85wQPPg==" + }, + { + "href": "lib/animate.css/source/attention_seekers/heartBeat.css", + "size": 332, + "integrity": "sha256-bIc7u1/O2GFTS66ba9V1J/4f7voOb+ZvE+aE+vlOpIU= sha384-et+oFEOFRLFwqq0KJFIBb9tRpild4gGWzyn28WqHDhXRyQ+8/ltYT3HCZtpTA21a sha512-fC7uJDNaT7eFZtJA9d8m4V9dFeBPJn+QzkF1VQ7oLxqK4WWR//nIjmxL/OWylBb4yabZlN8cAAMJMD+3ZUnCMQ==" + }, + { + "href": "lib/animate.css/source/attention_seekers/jello.css", + "size": 616, + "integrity": "sha256-NWTAzIIMX6Zwj5QlXGckYX2GSjpoVrd99/kG/DlpY24= sha384-FhZmghuz7XSmYShzv6HajaGu89HA3VHdkJlz7HdNh90GWkq8mKEMeVbftKMyfM7g sha512-8EdOR/y69nIW63NJVRzFo4CFUbiaflwLEwYgcVH+GweMHf+wzjgKkB9st8RTTT3hFwqkrHlNjvLvxPxL2dmMRA==" + }, + { + "href": "lib/animate.css/source/attention_seekers/pulse.css", + "size": 284, + "integrity": "sha256-lLKjqkTYTzPYxnpe2T1Z6K8K5vunIhhTelYJXU8CG8I= sha384-cYEQa0XkiWdF0Q9vt0pcmpwBi1ZU3xFkBc/nHIcNQnqEioAxgNBDtARpoZvnHlb+ sha512-Cq4NPTPxOAWByOwvUVMDzfuCYJsO6Sb7kdNmFfN8kIjJIdPn9aa9xskJM86ZroJaFYrvmBP6FiNE3Eju9V//FA==" + }, + { + "href": "lib/animate.css/source/attention_seekers/rubberBand.css", + "size": 424, + "integrity": "sha256-0hRU09K44T0wPqu8K18GoDNXCNdsS7xrews62GhLcOU= sha384-ZZagnjNVDa5fWH3LqBE8EBPng8UCNVE7Gv+SMyIHBkWQKV7k7Y99Dc8H0LaFUxjc sha512-i2nbMIaqoUEZWtriEoNDp6wPq5Tm1ri1MLf6oVAVQhNl2Qacu+MskPso4ySunAJpLfDfX/HRZBoh5sfy7RKc9w==" + }, + { + "href": "lib/animate.css/source/attention_seekers/shake.css", + "size": 270, + "integrity": "sha256-YCLWcRIlAGvwcwBDH1OHnV1qrC0T82SYXh5A9NHrv/s= sha384-gLgJSrsw+jp36F6627/PozZ4rorAPX/vt4pIHcw27uz1YTr6q16p8Iq1AO29rM4l sha512-AJcxauedwTqswO9uKnZiChWp1F6UnuUNBk05wzJRkUS4Jm364gpDTVPW37ISjypn5c0zNYI2sCl8QPqAqw2RSA==" + }, + { + "href": "lib/animate.css/source/attention_seekers/swing.css", + "size": 357, + "integrity": "sha256-RsmtRkJ/PByLJX98oaGHkoHAqTc48PgprQKiFW5ohw8= sha384-/fW8VrBEbKzF35iMVZ1QyP4oZLm32p+WAZXbrWtonaqtXfSq4tOHkiGDl3CD8FS2 sha512-SqRL4BMp5priRo7CJTIGabBJavHaXBQOWIZFWI9xo6F96juvllHT35ZMqJ4Bi/gSPiFM0YLa1BoiGJZgyBQ41w==" + }, + { + "href": "lib/animate.css/source/attention_seekers/tada.css", + "size": 418, + "integrity": "sha256-J+4vuXwJY/EIj5PzGKpChpfddWqW88HNmV15G8Fxo/s= sha384-7mSy+g248P6ADYfCFreTrDLmZMzFNMNjYGThsFKBCs6oeU/pbSwpUKKNh65Zwg5+ sha512-LAR5R5Jwe1iRQxAJKu3/ejOVkXJ720+BCksWq/tiN/VeNke1x8KtxHWfcZBOiLjmzsF5+XVUGXPjDsOZmWkvNg==" + }, + { + "href": "lib/animate.css/source/attention_seekers/wobble.css", + "size": 625, + "integrity": "sha256-9S4OOTQeLoj3a3a75muOlLJF1nR590Y3t8XJP65evp0= sha384-6b27iW6z1b1O66uendg4pQ9jmW/bTEv4ZUA6urEg4RTTSRnr8TzTyDJj4/YFx1+2 sha512-7LTmnf/yVTMt4B3bRjK0EEfTKq31TxQi9BmiM4tB7pWlL0PfRidI56oedF52byQSSTPZpklgOyN/xiG9/9CjiQ==" + }, + { + "href": "lib/animate.css/source/bouncing_entrances/bounceIn.css", + "size": 569, + "integrity": "sha256-1wJl7QMCYOjCT2UTFUXVztr03Q1/bRt1jsqv5uVy+lw= sha384-oQ5L3HyPCx1yg+nsRb4SUvI3RrQDF7Y6n27z3nyC95/rBEBDWC+ZASg9eFGnU/fx sha512-snCwGIczbj+SNJYIq9RlavgQU2wXq4sWyU29iNzIB2/PJFhEFJHi638RC8EpmruB4m9E/8sAbNp3kTZDGlmvfA==" + }, + { + "href": "lib/animate.css/source/bouncing_entrances/bounceInDown.css", + "size": 482, + "integrity": "sha256-8reC1CkPx1dPURjLohk3ltvfyKl+EiEzUktTyNC4u/I= sha384-3VVvo33sF/kM2Y5FTLxqYA0Lp94r3m+8cW813UP9iDJnHTNAROjk3FWkIVtaagG+ sha512-W8N0KKcDSxLmbMVsM5De8URhyJwCn15MKPMfJvvFK/EOn9xfJqLn2YM5taxGOMHP9dR85ZlXlgsvSMc4tSF5hQ==" + }, + { + "href": "lib/animate.css/source/bouncing_entrances/bounceInLeft.css", + "size": 482, + "integrity": "sha256-G3gMypK3qiySPcQpwooG9Rui4+aWMaiFjITM9BDQZzU= sha384-KJtVGet1S9XNCdNo3H5ARNVekiov1oF+5vtxxM0H/yDAWGx4SrwGKatJDPU+iAa1 sha512-OUsgqBTnCiJ5Ra24Y00tafA+BmunyiMn9SIL8iDZEn8qlvWx4tF7rnnRzuW7WdrRDTmY7iY20A+1JrsdVXECFA==" + }, + { + "href": "lib/animate.css/source/bouncing_entrances/bounceInRight.css", + "size": 487, + "integrity": "sha256-GQnXW16kgQRAHsmt2tMBcu9z/0Q6d8iKk1usWmE7tnU= sha384-qJdUOfXl4WImcUtIpkb9Akr7DzlaQ6Ptc+Rk3UEmgrQRmYS+tCkn54r2wa/BZn0u sha512-/9Ke3vWF1Yi8g8N9IM5L3J4WV3mikSxRXvpqX4iBlI+lUpqQQiQ5cb9Wfe1QKBPHUWgvAyVUCMvmSPLz6gpPtQ==" + }, + { + "href": "lib/animate.css/source/bouncing_entrances/bounceInUp.css", + "size": 478, + "integrity": "sha256-2QIUuv3/9g9fw1MmfnKdIGsJBELYW7jaNV+aeNkupVk= sha384-1RforLq4Eyqi8tk0CKkCckROYWkMV+X9OBrLC0SppboC4BUG0y+Cp1vR986QN7nj sha512-fR9LvXgvpiQw92AzpCtH5sK9kuj2HA+ba0vpSUDGmo8UmfM7xjmNTV5MeaQoroEYIlGEZ52o919SQJAXb3AArw==" + }, + { + "href": "lib/animate.css/source/bouncing_exits/bounceOut.css", + "size": 292, + "integrity": "sha256-PqRxbFcMwlr6rcQauoPfeSqbQWUCg5bx9Ey8GsB/jiE= sha384-qg8ooQ62Zs077JZCZmmQwgKtPkUHR2GqNacBKXYsn/aKECvxul8BGzmsx+MpAm+c sha512-a55ElWZpCzxfhS3v7bxKx3Tv+tN3XAp+3/fuy9rAa80GehggkvA8wfsqpx7Ow+MKyEj9sz58qObKC0Avx+/7oQ==" + }, + { + "href": "lib/animate.css/source/bouncing_exits/bounceOutDown.css", + "size": 281, + "integrity": "sha256-ehqeMfiSDXdEPCUqA2CWZrnOlR2Ac9hMnDt3ybH8nEw= sha384-Wj4UYxH4+6RjJTtQMCRb1orPXkU2qhAocdzFMfd0eEWaKml8Aj1dxZJDc6dWKKvt sha512-7E1YUZxxf0QxNR8m1OeXCfEFs92ZFvv/AIpJeUAkHy1iPXK1mCogvTFv5TD6yvy6hVQmWnYi2+LpuCot2N4rIg==" + }, + { + "href": "lib/animate.css/source/bouncing_exits/bounceOutLeft.css", + "size": 221, + "integrity": "sha256-2pPh+jzDI6m7igtkVaI2/nF1xkwF5bSCuR8oHkjXpsY= sha384-xmmOywsrTJoby5d0chrnbKixTXAsHhgYnVim0FLnWYJ5Ne72yz7SsPAejMipf6Od sha512-aIKS0su46Q5nqoGFKdOZdZvr2M7FYrYNo8o1St0P11PDw5H85dDtRaVMvYRy8Kc1LD6ktMDAQ2JNcd2gPhfXmg==" + }, + { + "href": "lib/animate.css/source/bouncing_exits/bounceOutRight.css", + "size": 224, + "integrity": "sha256-1+SuwN+StiH5hIeQcoaqsr+cZcB2vWmfLjX0InVxVsE= sha384-jlmr9hPI5cr75RUOkTdm6SY7dD2GN+zqxTBRPvb17kPo6bTu3hd5lvpsjxF4p/Ij sha512-FXireG0JWOv6EMkqYwMMAF29jQ1hhq3uyn1UxPr/DXukpfvLtfCOtJuN61AdjCNy94P0xr94Q8mQo7tZFE4+aQ==" + }, + { + "href": "lib/animate.css/source/bouncing_exits/bounceOutUp.css", + "size": 276, + "integrity": "sha256-knNhmnzu1ZCL+cr/0Ma9Aq/UZnrmsydli5zfNe/KFOI= sha384-ruTdPKO75R79e69WRX78oX1Ydi/vlUt+CUgtDxHrZKlkPJb0bP0cIuZPQ1vA9BUc sha512-lRo259bUgPsGt0LyRmHpDPjpw0OxCdI92/0JtjaTwJSt65fCMUQG7d9DYtgSbsU0AOfaWkhCki8HVccyebOSNA==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeIn.css", + "size": 118, + "integrity": "sha256-ozYGnjkT2fWNv+w0gjVolzIImgbZ2dsbaycee+HYtNM= sha384-RsSdPLkkMHig946gf5ANjZ2iwxPVxCn2piHqxQssaefEEV2D/qgbgHlwW/34q5PS sha512-R6ZbrgjR2hQ511LsIKsXiCDfeMbMHOZ19q95jokrBOJ0HDKf9YpJD9/Z56cjIxK32Vd9PEM1yK80gpNNVEIycA==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInDown.css", + "size": 208, + "integrity": "sha256-A3tLkN177EgMVZTC5oX8f73SvhnLDPrdidLCVBIkoBo= sha384-3Qk+7yo54sqzzrp9X8lZidAfNb6Z4Se3AtIONarMw9Wvs/eE+iElP1/5DnCUapax sha512-LJNDHCtDmOCYVTf3QgGL6zvGrDFawgQ0rp6Oanc3YvTp+1S/nPoOTLI78phZ6IxxCMZVaEdMn7dBf73MqMF0Iw==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInDownBig.css", + "size": 219, + "integrity": "sha256-QZ9JzX3iKHJryrqdAUnLA83FuPVUa6zI06dTQuF2OZ4= sha384-Ijgkj82UPcMO0PRU9qq7SOH/ho7P97yML8idBDPcE+cVKtCitbAQm8EYpJBe+YBa sha512-qVVkUwc/eeJUDc8bOWDUYgVmGzg2cjz75lMHRDssJrSyU5lYSyzHQZoo0tWbeP2ZdrZuQSaGp6YXhZ+kuKr76w==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInLeft.css", + "size": 208, + "integrity": "sha256-KIO9JR0XVIolDpP3M5T2Ip6IqL+/Rtothn2uc2FGuJc= sha384-GutWBtQGOWjGRr9sA3r4OJDcoLBYsHTs7NBvMiweiKF700U3tn5dgZUeb82OmKNq sha512-ClcG0c1LnW0AdSygbe+E9O7ZgA3wR7hakH0MLsJgz8csj/V6Bp/Km1M12DC0y1aHcydGlOKeBHaE2QthBQLNlg==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInLeftBig.css", + "size": 219, + "integrity": "sha256-zhvfJ2bfxO7X7RDQO//r5A8GnLdV8DJx0PR6CTY1yeA= sha384-CFqpp/jwzrarAnXOHRfTMrO/k1vCNWRDX92Fxsqud+4mmHNX1eozetWoFQDTGeRb sha512-73sZpdsqAtfOo+rqPMdZ0aRmAKwOkNstgauuD8z0woVBuMwu2AkNmsX+j/0LNbcYk8lCmkeaxIvJnUMkXsvDOA==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInRight.css", + "size": 210, + "integrity": "sha256-XZtBBVMs76StqHvzVsEOxJX3hydYLuRzrQNysR90qis= sha384-sP1g8/PSdHDEm6Hl/lBAkcgJzdU8opDOOZRAkn5aQeUUyGK7x9gC6E/m4vJS06Tk sha512-PVeE79MxjtS28Ueps0gBj5LeHLuOesf9ZKUhxslhBxQTyHl4RSZImffa+j0gpQIACxGrKXfxNddLulqJ9/A1Rw==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInRightBig.css", + "size": 221, + "integrity": "sha256-laQYCuRRNvO9oKjsvT+nK4PXJlqLzMNImnXL6rwo5QA= sha384-gc9w/SGJ8Tts8bx3WW4zfETReemxseqs6LhV89DAnsjfEjI50+y4+MoKJfAR++9Y sha512-1BJvXCMtE+Kb0K9KIZsyFbQKP6jB+ksxp6vVaK1Ndo41yBFr1jn0Kl7yotRjr+/s7Oh6FIpfojoidnnwyVR4ZA==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInUp.css", + "size": 201, + "integrity": "sha256-9IR/j1KKFtqCggZbzYDtJPxDIZ7eqnZqs0w95S/Di54= sha384-SVD5sivVD+Fq9b1wFbmF0a/mA6w20vIyBM8keGCERaEMMaJZKhqn/Iqr4jsww9cy sha512-onAD6N8C8ene1LPsXmC1I61b5rtB6iD/7C+RVuAqRuaw3IBDLIHDX0BD7cd2DnJAlPp8BNP04MjRg9ZhAWoBpQ==" + }, + { + "href": "lib/animate.css/source/fading_entrances/fadeInUpBig.css", + "size": 212, + "integrity": "sha256-APlWHmD6pETEnFsgPPAuB+laaYm1ig+p+y7Dt7XBZdw= sha384-jr9SzFcuM7/8J89+TN7HqbBw925e3TwxdTww9JElYJtVeUfdc3nx2SxBJ5QKRNPp sha512-FvMDoOyiC1/P1M97NteBd48Mt3QbJpdwchtdDMvcXjH/blEHzUvk5pt6IcqNqLEQdGg3GbbIoGXdiWPBk7WyPA==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOut.css", + "size": 121, + "integrity": "sha256-JDnt4E3G9Yztl2BRIkZBLHBl8nKKBPZspR8tdIgbIWM= sha384-abEdjydp6vJ1CNBz2qffLyk82Uvv/1SInT3ffY2vXY2W+sC11qlygRHatVafS/AC sha512-8XK9IxOQ1Ug1ctdvvaI4S4D+ZjSidzXkIqd5RGkn27SIMk7Za4SRg0TO96qAw0bxOHKsBuoNHmw7kejKoy5o8w==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutDown.css", + "size": 173, + "integrity": "sha256-nF49hcP32zZakpiAldObCexQ0NWVtC80wUNFRruRiG8= sha384-NWSr2ihpmT5T4LdimuVK+DZglso89Q9GsnQu4V4A3q95JGVGDG73g4Gsso4ChSW7 sha512-ZpyJhx9Xc9W184MlbcjA0rPWr1Kc6vbhH1b0dO68GmNi8prjb/O05vS6tPsIIJWM9qCubXw9/eHLE6/XT6oKKg==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutDownBig.css", + "size": 184, + "integrity": "sha256-tWaDrxxQ87Bozp/PtejjdBdjuQ5DzTwysQjtdk/0dWY= sha384-i8uR04c/UQGDysqltefxfhGMrCCdYpsZeRa85RFepyQt546vM8TQTbGShSJ5smqo sha512-FsP28H5OZSRvBU8H3SEgVfYVdhQsVOfteSQQLyj88cg1RlTqrch4sB4c/j2+Btqo+7XlSoGx/WW9zQs/8ERcKg==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutLeft.css", + "size": 174, + "integrity": "sha256-BAQ6pLVq65aQ545tiSeuVZSNHwDsib/wz/CTexJPNkk= sha384-TRcirTxu8ms9OM6dDMZhKo8HToHh0Ia2+k7Ktf8nXTLdNseySPFx6GBhUUCXleKF sha512-mwD9uLiS3LDRL7nOwhsfrDblG5c4/xgYZvLJZpoxm36VauGQU/INx3f7Wzm9ww2jbyTGHVBefGZPgmMtKZfrxw==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutLeftBig.css", + "size": 185, + "integrity": "sha256-3nhdgNXxQXIzNsiI7XNZe3JV94ElDbNjAG529jxT8UE= sha384-2j6LjHhEP+f35pRdbOJAf9maqKrAgGcmEhGM05ohGG+BfDJroPIXfLJBqxLopSGv sha512-w9sHt3TwJIWOKAj5Pmk/ixefEFSrVlpYNR53kREUcU7vWBva8jiI8WHNTrQ+PUVm9UkwpPTuggS1tT39IxEHoA==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutRight.css", + "size": 176, + "integrity": "sha256-fLlJrwz35y+8/4xodLdh8oGyliWWpIAz1OrDWossmaw= sha384-Com2D6gbFAmoftm927e9p60YPZGJZ6SrRMQ82rNQ8wOGgrThfiM63nik/XFaRVi4 sha512-8Ch7JX01KcFJDw0S3XawnzU4R8epO1uWGpQeHe3DTwEd4DLH70ttTJH2rfD/EkLEVhD4e3cnmOSWv1XnWHfe+Q==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutRightBig.css", + "size": 187, + "integrity": "sha256-sgdxzt8dwcxuNttrgzmy4FtiI+kVBi3dpF17NTN6Fx8= sha384-HOpCAnzQEnbFLiVyebXxS0ND9SLujSupf8vCUU0HLO9h/z3AWIY8vXrVX3W9oS22 sha512-ECalsg3/zwcGJLBiT/jrgFIbFT2vu48wgQNdpZ/+ZacfN7HHZW6fmvM2CwcQLP9ZQN7HVFIn6LRPnHe99Q5hWA==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutUp.css", + "size": 168, + "integrity": "sha256-hi4MSzA5Fpvy+NBKx4NtdaUEs+ZqVmgeXpm2NbCazB0= sha384-3gAAOUyBq3EQ6Lf4vcyjcLZkmW/s1/FIghAAZ6MqX2NU+2bIVl8eJoC+uujCWLhR sha512-RZT3IEJHwUjDckyAbbH4mTpes5Fkc/4kXcCnDjCfCzcDzmXyvltP74Ma0QrwXrEqI4Imk+5TKJXkxwC34jj3pQ==" + }, + { + "href": "lib/animate.css/source/fading_exits/fadeOutUpBig.css", + "size": 179, + "integrity": "sha256-eoZxwMAFJdQQGjyF1uA2pmld1jaE/oocMdsrv1i2YSg= sha384-S0CIGM2O0O6cP6tjEbWE1mKFKw8O1PGzeo6B+ibnYh1FOkOS1WucGRab+Sm47oHy sha512-IhiuO1zCUKYOPxJMibvUH6NV1I1CAT/dPt24HQfSN6nXxDnzQYF9RRW0tZe6fdII4zCDvBh4C2Z8bEbB9ROhig==" + }, + { + "href": "lib/animate.css/source/flippers/flip.css", + "size": 891, + "integrity": "sha256-Y1p6l/sb0KY4yXUE0GD+m6HvyG0HPmgPPyzLa7J4jwQ= sha384-NDsiFBLpjuavXs7n6bU6avueu8ybMcM9Lo5XgFsqJiVkedKvZNx0OMM7BIuCZN/L sha512-/hcNtoBZ5l08B6H9NT+UOwKMEl9v09lHuTjihmS90oIIbbVKyUaTjWNOgEznjLv471STq6pEq7BUHmrbz9ONaA==" + }, + { + "href": "lib/animate.css/source/flippers/flipInX.css", + "size": 559, + "integrity": "sha256-0vc384oGGHZlYTWNGh8gFgqvqre9K81PlYCvCWx58gY= sha384-Xi1J/eNQRzYuHxLnnKESZQ+kyJ0eS5l7eaPcwDtfpIoNSYdaZcXqC8kwz8iW7Puh sha512-O26h8Sj0QJK7nUCULkCvWNEcoS2vOLjaH1TompDyUZhvYjYV4ZGlB7WBpqAihN1mZ5jgV5aw9t4VDYWt+qeCJw==" + }, + { + "href": "lib/animate.css/source/flippers/flipInY.css", + "size": 559, + "integrity": "sha256-UUfRTIcxuF0tXDvYTsgpW7xUWdgQhCwTLobe/AUJN78= sha384-uOV3fx3C8WBE5gt6SEi5eJIzcOGrC+7tswbnX/4G7t6F6gXP94HCi8glu1xWkHYQ sha512-uOQodaLL2oLIOfxYLeHDfrA60uKNlEn2FtA6T6DeepcwGfki4Zegb/YyPWQE+B1TVk4egzjNgCB1trNmUvM76g==" + }, + { + "href": "lib/animate.css/source/flippers/flipOutX.css", + "size": 365, + "integrity": "sha256-qIWHmX9E/QSfacCcsPehoYDVnHXCEdKKUfNkcfHRaUo= sha384-s48+wUlxAJn1pkIA3Pg1wt58O4F8eTENLWm8QrkoVPWn6wUvj+JkUHW38du3iS3/ sha512-DX+JhekSa5YD9eNdX92ayzNYmb65hE3niRxRWIKbrRfNtGvwHK9bf9ETD6/H1h3Elk0+l4BeLpah/OXbhF+jKw==" + }, + { + "href": "lib/animate.css/source/flippers/flipOutY.css", + "size": 365, + "integrity": "sha256-/dUXPKqYDT0PqwEs3Lh1izjGwLYsbV9eVC7N6s+Lt5A= sha384-qLIc7fBSz50SIPdVndt+M/mudn3Lme1nHq7c81u092nOifERfE819NuoI3b9+KSc sha512-zpZ1XhDQS3QJva2NJQx3rm29VG9TMBGikJT7LfmFpfRNjYyXKAMYKFRwFFMAqYUG0v8tuJjRCPN7caQwa94FwA==" + }, + { + "href": "lib/animate.css/source/lightspeed/lightSpeedIn.css", + "size": 350, + "integrity": "sha256-cjAAPa2zoB5XyUbVWEIiYB8EsPEQ7eJRbyWNJQiv4dw= sha384-bCf4sNH/H3dJ6PZ6I0WL5haBPet38RzboJSDfJBej6PeTYlhA3px3weX9KBrrqRL sha512-Ofu/vi7P0khbFg1hIvVrnEtpGVATcayRySq4k9J64rTXBehcp0YUuPKHnsqbyG9q5HJwg7nxSOih4QiQ243k8g==" + }, + { + "href": "lib/animate.css/source/lightspeed/lightSpeedOut.css", + "size": 230, + "integrity": "sha256-pByFLC7kgvqtAihUUV2AKWqjMYP47xk4kiwfhTuph0k= sha384-Oki3JZmnTHDMr8cyMs2R5xYnM1c5nXrLMiWq2BUBg701IyFsmUNTYKSiNXHFXgVx sha512-MC+/cc58MqGrFlVqtbZddMvjS7vt+vi/AoFunUbpdJ/81ngmJIDSlX+RthmdKOE2GUawMdBqit9B4TkpUttAXg==" + }, + { + "href": "lib/animate.css/source/rotating_entrances/rotateIn.css", + "size": 264, + "integrity": "sha256-0ptGHhfW3qwIdwGTclLqBhMP1ZID2k5j3VGa3RGbCrM= sha384-kmKyVgLc4dHOPKLB9gFExP6dKnFcOLuWY/76wn78scZ+H+lNqLTErkQ+DhkSU9h9 sha512-z+xqiZrjt+s/Rh8lag8nWayTse2Gz2IKAKjWTFzEpQ1Xf9Uds0Y7IxfVKaJfmBIQg3caf1NnwuWT92oIpJ4kOg==" + }, + { + "href": "lib/animate.css/source/rotating_entrances/rotateInDownLeft.css", + "size": 297, + "integrity": "sha256-68lf4aMdH6eRZ0aPbGypBguOvIxOCvJl48zblHfa17s= sha384-Qe7Gpl8RTHApAmk+xWN4wV0DYwYsJjB/fEB46mc3drnKWjfuhz7E38OjVWOqyN5k sha512-qj6h4FYs9j/dr6IS8imjVZX5dpIsVEljwpE8o06dlPWjxO8dQAwDZCEEeuAXWt2+niBHzI/rTybT5I921SWFsA==" + }, + { + "href": "lib/animate.css/source/rotating_entrances/rotateInDownRight.css", + "size": 301, + "integrity": "sha256-jhWbV62YVHC/88BAyDlT6SymKXohoml+4ODQqj5IQAg= sha384-J4v78V9gax5LRzdk4vW87DgbhZWmrZxOx+zQGCBOYw9S2lgkQmj6WMOytMmubmRc sha512-ARwgvn1CtzJbdGpGUaWnebdTXbfoYtPcFUo4hqC2IwyiGsqgzOY2rvFVBlszdEDYVFoUQhVHQemqSsLkwQEQUA==" + }, + { + "href": "lib/animate.css/source/rotating_entrances/rotateInUpLeft.css", + "size": 290, + "integrity": "sha256-cgJoXblZQ0accPwDtcyjd2fmYw9gm/k/IUKgmrG4CwU= sha384-+sEqpmhU+5yZnllbXPEGjTBXvjAQkf+1q1ZQ15Ogg4PfZi28zMXRUwjelDq2T+Yx sha512-2FyCCGDVYDWWrwh7o1m821ba+aT/HWFpyyZcYBvZymwhUdALtNhMNpVR6pwRLXrYfwN0VkD+MoB8ning5GSBGA==" + }, + { + "href": "lib/animate.css/source/rotating_entrances/rotateInUpRight.css", + "size": 296, + "integrity": "sha256-SrfxcrIMnw7xEtqAvT/VdnBew5k5J8wMPGmRLF+ZMo8= sha384-7tmWw9glMIZsu5Snf79zi+zEE+04M/ISfp9Mi1E0gfOdADGDftUS5+u9AcVKR5zM sha512-2NEUOt22Iw9BWp0e8IYZFq2sB+DcmDV/W6oFYrDxOI6r/Xc3MWIpaXf7reSTejHMedsonHzA6dAIpGAilHAx2A==" + }, + { + "href": "lib/animate.css/source/rotating_exits/rotateOut.css", + "size": 229, + "integrity": "sha256-JUeh3HY6UFcAKfJ329OshRNK2ty0CMR+mfrhD1gzirY= sha384-rB1INz4B0zP4uhNOiRtn3GL3BR3P3GohDluCfPyXI31ALi2ByvsUlcGRVaVd258V sha512-O3/lDFqQKctNcpvJ3mfbh4JHa1z/qBGdbsqsb5LpcLJUGrWOPQ0LXyh1CJ3ojrn3H2zDZW5BmMRZZ3um9ZTXCw==" + }, + { + "href": "lib/animate.css/source/rotating_exits/rotateOutDownLeft.css", + "size": 262, + "integrity": "sha256-G3NIREhtMmEz3BHOccykGI7rl7DweHxf8wNZhSOIqus= sha384-Uw/jo75GFIxTRihdIckO32osWL/6mI4Uzzp7qyzMergTBu9uRy0LMRyNbwH6mk0I sha512-8cpCJx0ZRrBpcoAcR0Wz3cTV4a03sS36O/cX5Rg6Qf1yMrHQouGAnN0k3gX1G2Yz3LcE5gePVTH0IfNX9CdT9Q==" + }, + { + "href": "lib/animate.css/source/rotating_exits/rotateOutDownRight.css", + "size": 268, + "integrity": "sha256-DE/wX7bJ62SUG0s0MgzWsOyXWdJN/SLuA874v8FZVXo= sha384-R/7m4dr4QPc8bF5JsqiZc+CoVicz1wN8bd91+YHU+NG4UnTBHn1vRzX13lTUeCL2 sha512-iX3J+PUlIpb8XuhCm/UcJFGx9FrDS1Jmw4zdr93B1KL7dNiv60SB0IqkJZt561qS1e/PWDk9al2x13gXWLD9AA==" + }, + { + "href": "lib/animate.css/source/rotating_exits/rotateOutUpLeft.css", + "size": 257, + "integrity": "sha256-ltSSNTH5MXyqqVhhp5r47x0j9srSRmv6dVToZKW6aJ4= sha384-B23ZaX6Iuy8gfOezufUgNVwy1T81OC+wIJPsFvEmifxckU8R9WzaLhnf51MKRR0g sha512-LR0+CRI2yBtszS7obaxR7G/LU7vg9XX47uI815tBFGryI/Yj4Ax6G6D3XxrQ81mUtU7WN7ptXd+mfQOanFhibg==" + }, + { + "href": "lib/animate.css/source/rotating_exits/rotateOutUpRight.css", + "size": 261, + "integrity": "sha256-k4WwE2WYGs+dsxEp0CTuXSmy70wk01CUebCY64zHg6g= sha384-dJ/IpF9ZkwIrrAynSDF0FmCLBdzKGTpEPeCEnUuOOgPVuVeiHYBlDogCLaNyGCHg sha512-vUmNcyvAW7gg6Vsg1nbnHGE9HjbGPDTUUbhLteyqmG2jHJeLvAcQfI+hswOpU5MOdijkA1FA4mVtasiisnGD/g==" + }, + { + "href": "lib/animate.css/source/sliding_entrances/slideInDown.css", + "size": 204, + "integrity": "sha256-QfOlcMSh7DRpuOtvJmx2R2+gtEO44hNyHbM68kNZy80= sha384-pTfKO46V/bqLiZCY7Phe1esUxWy84+s5Kl3fKD1h8nCS2Ti9zJFemv4Cu4T+cxro sha512-J4d0dyxKJyyhmO6sR0cEbp8gvhSOsNAMn+SZw3q5+V4zk/bA1mPEm1eXesxK9HjoSvkmBxqYbG5+lDkKa/rzLA==" + }, + { + "href": "lib/animate.css/source/sliding_entrances/slideInLeft.css", + "size": 204, + "integrity": "sha256-mdethqPfvs63kAcml2niX/jBJOfvzyHJsLD2Xmul1Is= sha384-7Tfal3n6kEW4OyEIXz3ECC04JamU209xWBkZSLaJMPE/ZchWyCh6GOm0scgTmtVv sha512-oLFcPTGp5MKfAO8q+3gF9NnZDlVorthumAR8jG2eh9ZrE069m5h3kPmHtR1+67U+uXTncNyFBvStFh9WmacXWQ==" + }, + { + "href": "lib/animate.css/source/sliding_entrances/slideInRight.css", + "size": 206, + "integrity": "sha256-UXvM18qGE6aYX6UBWF3LAs3WwpSMQ1qYTI+G7QuXtn8= sha384-v2AMY/a+iTnak72NUnyVFO1h2KDIcAWvvTPMfX+iEjspziQSnk7Zo8oTi5ZS0j0H sha512-ROEGoFxJMPsfHUtk/In+RAcHUxS1Jp9PXrhIEnask6gaAwOYqWSbSe/jB4pvsUpqIlDmlTLMHD5O8Iz8Ys6rDQ==" + }, + { + "href": "lib/animate.css/source/sliding_entrances/slideInUp.css", + "size": 197, + "integrity": "sha256-x9tHa5onmzXWG5sAtjT9OH/7TXVo3pnXkJFZ1BQOtj0= sha384-wshF9STJrbC+ogWrbNOLI4aYweW/UuAU9H4V9zaxq5/LYlVoQp3Bj/AIBEFhRk2u sha512-rFJCKMVVcp3qt5XDG2f68wyw4nIpxEZYCZZxEbci3QIWg8Zdiw7wYkHATCA69F5mbOif4vpyBatSptPu8tuV/A==" + }, + { + "href": "lib/animate.css/source/sliding_exits/slideOutDown.css", + "size": 205, + "integrity": "sha256-S7NPG5XiiAm+MXqjVwtnMGJEqJwyxKsxZLKwDsRuCek= sha384-d9b/frSjzZhtRwrayUsAK4jSUEsmLNdNSipNdRjRm5O28YL1RPgNkB3P6erR0alZ sha512-TuuNPdVd+jE4zfDGPpeLkv60slvNpRIjtejVv8CVw+jNFZcUvZWULvM+0dSWNLtpOETOk+NQIEOQzo+TuQYVNA==" + }, + { + "href": "lib/animate.css/source/sliding_exits/slideOutLeft.css", + "size": 206, + "integrity": "sha256-MmJE5cVS3dJGgwwD0rjvR4+yxLgBOWmg0XP4Q/AHIR8= sha384-O5mIm7mxMGt2dhBYJAgSRuQ+hGg8/mUr36GQzHVn2FSjVRPmyWJYSmc6qSetnNo7 sha512-5/ZtlvewItdb5Ot6EUpIoKafefVPJiMMln2QiRxALx6OUsC8DfTCQ1hyniTj9vMg6LRCRAuYyvzZEvhVqZtuZA==" + }, + { + "href": "lib/animate.css/source/sliding_exits/slideOutRight.css", + "size": 208, + "integrity": "sha256-MWnQ2Bx4vkg8lssAMtNjwvzr3yh6aj5WlYAaVmw6Zgg= sha384-qR42V8wo1IBmdjeROqkxQJ7JqJjt782bUu8RTnwsRclZM3XWE9FYHC/HUsXsRk2C sha512-QyLMSz0gLz/qhdN9szq+aBm6BEr7mwnaZE5yVxsvxTh8F0Kgd+iMuUOSzITeZlttqeKJmJ0DAm49WgMcGjtejQ==" + }, + { + "href": "lib/animate.css/source/sliding_exits/slideOutUp.css", + "size": 200, + "integrity": "sha256-owbgDZEltQ5zbAk37jdEzydnciUOsJMhm6H83qGLPyE= sha384-dBNSW2JV3qJRODiQpEyjrJmk7NMuwg5qJnbcyfYM8KxfoHEQC+8ExAlJD4A2ldWS sha512-Ui42sjx421w7uO+lrnjDX3ivPuvzAbAbgeol5VxKTBRP9g0Sf21C3BFVQejdp6KawbKsPXIMcRewq5kAff97Gw==" + }, + { + "href": "lib/animate.css/source/specials/hinge.css", + "size": 530, + "integrity": "sha256-COnbbM8StNyvy168O6FFd2ar/lYHOZMIYGeUfwLuGj0= sha384-9i+TSKjwQ2tiEWepg5ZYhnvZt81Q7sr9CCtFZ8QyViVxdu/9pp6nKQ8Un4uRsYyp sha512-ZP9+9GGtj+0KNgK9nJD0Ulmss9Tf856kC+R51yY2USU7OehGRcoPwuqXuE1+HlJ/61cfSekoGmN9/cZtLQL4Dw==" + }, + { + "href": "lib/animate.css/source/specials/jackInTheBox.css", + "size": 325, + "integrity": "sha256-HRr7Bov/sKAUxzLrieowpX2sad35hnZ22HnSpVr1yEA= sha384-wsqTSstGNm3giHx9zjEDqljPFrXVlXDWUT3bOUHtNjsWcWx55gJWYyinfVaSgA45 sha512-FG502BR/vGg5n2mZvE0nPaAFuhGmPKwbC+G3wNMuBeP6atF5PqlYgOfVCvAbR+gyf4WQI44ucTNMDfKwpfVYCg==" + }, + { + "href": "lib/animate.css/source/specials/rollIn.css", + "size": 303, + "integrity": "sha256-7rZoYnbxOBvKppNWtb+hbyipDoKyZmcbVvjc/ByYgy4= sha384-9EDSVyDk8yjVnSDiJA5OUl9V0QlZ7dQeByFXoa53f8YbeGMobBvfkNDC1lfmqgf0 sha512-deX1cy7/C5XZOL0fBU04VloLx+L8+givMM7s9L3cp9jsfndY5R7zyOhhVRnNMe64Rh38J5H6HFc6JqvqLouf9A==" + }, + { + "href": "lib/animate.css/source/specials/rollOut.css", + "size": 267, + "integrity": "sha256-MWY+rT1d2b7Xgc6afrJVNQ3tJC0ix2AH3E01ECQb6yQ= sha384-181iJdm/1aEaIWxkm7Z/rjE3DeWLtudPZv9wewGaQEnMMKJg9cqTUh1uQ56wlMPG sha512-duSV3Ef0e4y9TvY75nnaokc5BCPpVh99u7Q2MryOQ720v6A/L1gGZsXObFO0J9AWArZ1uHY/BqsJz+nEtV8gzA==" + }, + { + "href": "lib/animate.css/source/zooming_entrances/zoomIn.css", + "size": 158, + "integrity": "sha256-qJr/EVRhhApICoJ8KGTN/3sor2MjLDZf/ljtkWcrkds= sha384-RIeVCsf+4t9dcCpDMVynw8JRSMEfYJsgZpJPJTKAKtJmbYoaGLTKnddmz3nJ6+bZ sha512-6TPOEi1fZlgOlSBHybnkVnOAxrDNxl+5IoQjFmWogW3howQEnrQyx9AYSMvekym5JwniouuxtBuhW6zuGcD8GQ==" + }, + { + "href": "lib/animate.css/source/zooming_entrances/zoomInDown.css", + "size": 405, + "integrity": "sha256-5Iphnyx0EAJTxAvXWATpCiNgCHi4KzB9+nu08SMtFbg= sha384-ijcCaztSzlU3O9G8fTNssYVPjVQaUjV1pgOH1ul6DEiF0FbvnNC/V5oihG/nrNLg sha512-PbIpyQjXE4iRp4MFYOV7oNwn0S0lgcM3cWeH91O0WLFByTEdbf9/2yuZhiQQo/Yg9icuUs649wcrQi+FAn2PwQ==" + }, + { + "href": "lib/animate.css/source/zooming_entrances/zoomInLeft.css", + "size": 405, + "integrity": "sha256-0YujHAWHp8HZ1efsiLi4mMO9cpbrs+wre3z0ZIrcMps= sha384-jZDsPiNk7EbHmt5duE3+OF8qfalpjSE+ViZ7xEJDAz0Q4TENIWnsKFYu3HsZ7tam sha512-a4UPq9GIxGtvNzi5v5u5/KTiR/pPN90hP3jekcHWklw01n9w2IwfZRVx7DujrSs+/zGcgSjDThs10FRxMKC2rg==" + }, + { + "href": "lib/animate.css/source/zooming_entrances/zoomInRight.css", + "size": 408, + "integrity": "sha256-f2EN7Ha55tKmCbgeaFFrs6LYyua47qxogI0I/9Dw8+0= sha384-PpydcOdDzxAxN+hfz5kjTw0H1h7lQcE13NHQwLGr4hSmXr/uEm6J2C89rCSqgYN9 sha512-pEdwigw/simiBcJd4Y0Orz+29abi6eX51pF2CYxsWv9p22/AHLJzksT6XjYXJwpffxvbFVigZwfX2kvEDo5/VQ==" + }, + { + "href": "lib/animate.css/source/zooming_entrances/zoomInUp.css", + "size": 399, + "integrity": "sha256-CQWFPeFduysyGRGbEvHzdh440mfamKYsJJhFbHKgpF4= sha384-05bLksLRlOAyRYSz7PVSySd716FrDnwm+GihdbQ0FnaEuiEUymsuuQ2Yh7CzyXPa sha512-+ho1yS0R2eIv1jEE4Try2KM033QwGijKeMuZqXQTTQe4e6d9z5OtXsv3eQkipJO4rVzxxJD/FhbFzo8Cz+DY7A==" + }, + { + "href": "lib/animate.css/source/zooming_exits/zoomOut.css", + "size": 189, + "integrity": "sha256-xkhXaQ2CkSThJ0DLzcSvZDljFbKPIsAxQLu+/r5Yclk= sha384-/A4ScGDmJdS5mx+omIgOmmJgulRkYlUJFvvx/KsQA6/GuJDSl/zHxdZ0N45f5xVW sha512-L9AyBDvhteUHZsy7cxAuuG23zXV/Z4agOuaZjPuCam9KJFhTIyxD8xjGE51OdifDdJYR2lUVNfNFOsoknQotrw==" + }, + { + "href": "lib/animate.css/source/zooming_exits/zoomOutDown.css", + "size": 443, + "integrity": "sha256-QEu/x3ll+6FXInk0L5U43m8+k6WF12MtPMD+Uade+yc= sha384-RtgADjoXsd9hM4U59T8aIAm87egxVOsOVSMe2cokApNnT+l41d65mxVfkYveQVV0 sha512-vjJBSKrJTyN8serMOsvoyAgXOrEIrGJ396spqTbZEb8qaxSdvaCtwMHoE31UN64wXc3TnxY5HADmKDa3IWs1gQ==" + }, + { + "href": "lib/animate.css/source/zooming_exits/zoomOutLeft.css", + "size": 290, + "integrity": "sha256-hqfRrMN8abAAmydo/BY+knthIwB2i08jLC+o89fmtf0= sha384-0pm7iZ5EHBpavSlj1VZFHMbGPSl1Rf4N3emmhC6IdzpKZFaTe4raDClfQYs3AsZH sha512-1rhN4a9uHc5cr1Q5Me3Wq5TNLzoDk4w7KvNQtDCMoTSlLHKMr/A775YL7an3SjMu7b6O/ucLHTFqvqoFCxpbyg==" + }, + { + "href": "lib/animate.css/source/zooming_exits/zoomOutRight.css", + "size": 294, + "integrity": "sha256-4+BPE4I2TfRDkMllJot9RWdz2WvqMzkcWaNtll0yji4= sha384-sywYeK4gjnjt6bN55am6b7VHT9CsLFztZyaOs2iWSXjt7btsAzBmmvuJOu2fhkm5 sha512-7b7Huf+H4gfnKc8XpFL5jOlCUer2hxWyphdRLDMLwYQTs43yFT/gyAPsjkvkznKY41+Sf9+rvarOVJY/81FDNg==" + }, + { + "href": "lib/animate.css/source/zooming_exits/zoomOutUp.css", + "size": 437, + "integrity": "sha256-QUNPeUtM+PaQETpmMGPW6wik9Q97mp1yXCgwvlXO7xM= sha384-ccqeFUL85QYNfN4toft90MG86Kih7YaIiuZT7tdgsAGlf32kXWekqZqaU/zoiHXd sha512-67Fy/zQoivaVz69iAZZd/nUknw0YXX/Z7reE4MS3m3sgkmHWZBTV9jX66xn/+ioZCXJLOO+QzZsOiw92oRjHIA==" + }, + { + "href": "lib/bottleneck/src/redis/blacklist_client.lua", + "size": 180, + "integrity": "sha256-vmIJo0U/cnvJ1SEvrNGp+PpAMkjlSmTJR8DwE4HTkp8= sha384-u3GiwUxPmQR95jrBcuGBDkyabZk4SMHknCMHOC6A5yVO2GR7Jf+IqJgAiGdgVPal sha512-mgn7VZAiM5+obRCs19yc3EAopzIWwmSe+VnDtSlN/Qko86SLYiYaZLyyGg42wzzF709fkaFvwdDC9EfH1TsElg==" + }, + { + "href": "lib/bottleneck/src/redis/check.lua", + "size": 254, + "integrity": "sha256-6vCtSzGv9DepbGFEpvi+ObhrUmzS5vtbWpcJWZZ+dMM= sha384-RAdiAxH71idTBEabpwuzVb/au1BYn/9aS9G/gLlE8Uql7JJdn70kDlsMwnbvV739 sha512-w8CBqQhCcKJSmLzL5K1xl5nIevy8IQXTRmYiW3wgWhozrSfPgkpFJWiIBJ5DAsKJSrlVu8hudCONmhIwFmsAsA==" + }, + { + "href": "lib/bottleneck/src/redis/conditions_check.lua", + "size": 104, + "integrity": "sha256-qNEiiY7ijwiEVWfzdqskAr7TJES/1ske1K3J1UF1oV0= sha384-x7TR42KCnqRLM5AaOSm1zPqqHUddiLrM7baVugRNFTLDO/ZvGEVr64Q12rvvNiwD sha512-JDQY8meePlpuOpQnRKfbqOEkGUbzZ0PlbjtW7+9HuALqveIkDAZiNgdNkDkuBhZMYmIQWdtLdMavBVekAehWmg==" + }, + { + "href": "lib/bottleneck/src/redis/current_reservoir.lua", + "size": 45, + "integrity": "sha256-kKkWAM66z+D0RopvtVy1OObuYyky1UY/gPWfITgCRpk= sha384-lx1MGoc/TzfLb5StHWl5f97NamP5JvhqNhRK+2lZoZkNqooMtopBtVZiFd7Te2wb sha512-7rbzDUbdkMMDThgjbb3E3t4yAwfi4LCcnMSQlMfdENSTT2KyXZ+wLhHVbxNgyFh3UJBXL5G+Hclomz92gnzlaA==" + }, + { + "href": "lib/bottleneck/src/redis/done.lua", + "size": 84, + "integrity": "sha256-8l+02PoC6tF7DKfkNE22wHynxi7Q93XsxbyvQ9SdHUI= sha384-OLSjeGRLJnn5mtX3UgO5ZIIJtRGvPVcWhGVjh/A0hRVmqC7I92YxTtUMAyZWgGz8 sha512-sDGsC+cqQH6WKbH0TlnLnnkXQPfQgZzMyWUwImAwKWs+gshwCiptRMMlnXw3ypgDaG/fXIMYuVUy4fZ1x6ffMw==" + }, + { + "href": "lib/bottleneck/src/redis/free.lua", + "size": 135, + "integrity": "sha256-J2zqLe+PFWbbhDaPpY7bIU8vpBC70ArL1ujGnzo2MeI= sha384-xz66HX9DrHpD8QGuq1B6nnO6OgoYrQfUw8ePE6jQUtowUuQFx+AU/K6LJ0Appf3K sha512-RGN55FZDe0J1svq4LHIlo0WVJNw/8Lv5C6lHREcXh3+pl0halg6XdT8zRbHI37ABdvkhutW+gBxgO6yg9wcsFw==" + }, + { + "href": "lib/bottleneck/src/redis/get_time.lua", + "size": 150, + "integrity": "sha256-WVnBo6Ir7dRPYyzrswM+GH9/KlxNaqx/0yLiC4vNoAE= sha384-KDsOAlv1qUDcoyVEbtUDxDPPZtU/nbL1MSQiBSs1dJySrbrs+TZa7wDOcw0Pxcjb sha512-vT15NBwF16ORB2r1HqoJJPtssXMtJxBngZMqkEJpxjNkQKbp6x9omPyhKszxJHa/WrH74lkEXNxUzcDFyDUcfA==" + }, + { + "href": "lib/bottleneck/src/redis/group_check.lua", + "size": 53, + "integrity": "sha256-vZeXyOCAWsz+mJE7IEekRyBs0rQ+nHtHqpvOK8qp4BA= sha384-rJN4nVNOfmfMRnKy8az+s6il7OF30CySTzKcRFAL//3urw0p2QtYBS0+5A56jFWI sha512-AJCbFDJA+y1Krvt1QgH3jtjKMKpOFKeYVO4NbLQf2xqzORv3ywq9ZjSs4GRU3ESB6fjc2u3cpe0jPSLm4ecKBA==" + }, + { + "href": "lib/bottleneck/src/redis/heartbeat.lua", + "size": 24, + "integrity": "sha256-YqE9OWJtItLQBFiHE6YUu3Tu5pRrJG6iJWo1ZIODLD4= sha384-akYMoIcLXqA9gkDKrXxUqPnuXnmLUo46PHre4XOWF0qNVTo6sQl7Bak4LAs0rLio sha512-TvrIiFgXMRyMO3HSzKMHykL2KOOkhrCCDD8dj/w6DkUk1oNMzfYMpE3A0Eq6wBFZxvxDqUkOqm5llqW93jkaXA==" + }, + { + "href": "lib/bottleneck/src/redis/increment_reservoir.lua", + "size": 299, + "integrity": "sha256-BTFdcn2A+rUdDBB7714j5kh3liZA1xqgCeWXxuiE9dE= sha384-EogNezuVxqjd5A+mG18aiLmPxLpjFgtZ39BJprF+Rwnz+FSXaw0z0jgWeAC8T4K5 sha512-MntfhFzUNJFRDvxmGFtDuK74+PyDNG9ZI1yZao7ir+UEcqwmabnATQSulRugiidnKFqL/Rs8go9pPinI22wXZA==" + }, + { + "href": "lib/bottleneck/src/redis/init.lua", + "size": 3195, + "integrity": "sha256-3T6aNddV4Y88Fax/wECHuz1jGVPzMFuF1Yedl9t5dWM= sha384-LPWZeDa8oCI4HORl1T80t0OLE1nDbBb7bBqKksAxZ+PTQJwNY3ZWHingQeJb3YD1 sha512-31YkFXGQDCLQU4luYVw7Bwt4nLB90qZOX0Tcuo7dkPJBdpxYjaEbxQcwMnICUn8JIu3IBVQPYtMWVST1PApcgQ==" + }, + { + "href": "lib/bottleneck/src/redis/process_tick.lua", + "size": 7575, + "integrity": "sha256-0mWTTnwm6hSqfhKOMw0pN0Muq5BjDV/FWOx2aIdGdDY= sha384-pb6uxxqWopbml66G2RuNCHpo7q3WGX6Te9jBavHllkp4zKjSVf2n0bTgNoCV2dLz sha512-4hse6VTUrxM0TzekI0mpH30ii9ihoR1820kyr/BtW6IcrN1D7885kTupKky/2CDNaEJDnEC66yt+Gt9d4G51Iw==" + }, + { + "href": "lib/bottleneck/src/redis/queued.lua", + "size": 373, + "integrity": "sha256-/JYaNR9eVRfbjNZ5bNv0RLojwb4bCON+RmY/ZMIHemk= sha384-c2fyWCWLvm5SMZ6x+LA7o/XcCgJwLEL38UmO5BqwTo9Z/VGqXpxRRN//0XtlsGau sha512-1vy8xll4BbL3bgmoz2Bu7gt1m/Boy/xT0hIwcepkAj2NlnQsvgyTD0ZbuDUXSZCrN1woLW//8PbF3CwTgrlKFg==" + }, + { + "href": "lib/bottleneck/src/redis/refresh_expiration.lua", + "size": 237, + "integrity": "sha256-7g6hr5tUDmIiR91DPvZPvqndng+wz49OjHMs9YMJmBI= sha384-A7mK6gMM2rzorud8ZSfMlipLPHDjjm8zeng3y7JK6S5BilfUdPX4VIka61VAabm5 sha512-JSqjS3raJ0JDyN0lBP/vZ0l1Q2l5FO3xeoW8ep1MhdqftQC2Qqyoec1qBK0O2SO/+x3Ry0PkzDba+14q8naeVw==" + }, + { + "href": "lib/bottleneck/src/redis/refs.lua", + "size": 363, + "integrity": "sha256-ySXFf0yE4F3MwczhKN3YXLXvEfGewSvNhCT85N7bW/0= sha384-ZtMvxTeLjnDo42Fd9fBG2LyCVrD2qhp1WFYtF/TWGK2muWy4+DbDbNQ+Jd2pcXgq sha512-qdHgJ1SmSDZi4Sw8radABP4GdMBocmsYncG4Ve18GNyVeVWImYfFkTODSLS+dpwLL6lFHd2lHTsftZ+Sxn4aRQ==" + }, + { + "href": "lib/bottleneck/src/redis/register.lua", + "size": 1450, + "integrity": "sha256-BzqvNfhHPR6r9t0abD6YZ969EDOdPUa7FxA3HFB1ft0= sha384-4dA4nPmAaTPZXL0AzNZjYEVcjSyJUveJwcC8PZk69S81QqdHNzmgJgwcWS9bnc1O sha512-F3W8f5Ww538aar1akAbWBqJMCNYORc7c2ebAfAHOi2Yym89KgCxbQJrjqg9zRWwMiUXfNe9FhLSCY5+bzvZ7lg==" + }, + { + "href": "lib/bottleneck/src/redis/register_client.lua", + "size": 403, + "integrity": "sha256-BJJqU8KgwFOHR2mCjdea3ua5W62Hc2UW1GYEb01H5ls= sha384-kwd22S5L76SK9SzTomQ4EJC2bT9HWIjyqPK3Gukve0Q3gLqA4JaldNwiT6PtI4TF sha512-buH8tLDnYJxTk4eRvIjEEsytQX6qdZQ+OtzYDGRAIGQYqDGGKVRHCtgh4C4x6R6fGQJYUl709rJ7B8DWFgh3Yg==" + }, + { + "href": "lib/bottleneck/src/redis/running.lua", + "size": 43, + "integrity": "sha256-a2Fx3qVJfGmTNmFNyja4fiw1tKoBTcXYehR0MJWrpds= sha384-UAXBPvhh9DiKGtglXoj5QoiCIZZCtTDZaWKNEgXHJHmUcCASavtbExdAq1u49aQV sha512-BuW/dytoXoa34/L0ZrTDgur47Bshjw310R5nBN5TzHWDU2/QgxzqLk5+a25aT92KOx0XfBX0T2aQ60AH1x+kbg==" + }, + { + "href": "lib/bottleneck/src/redis/submit.lua", + "size": 1979, + "integrity": "sha256-RRMipthxJeCSy5TWRNcDYuP2fBLK/MLUf5LX0TqtjLA= sha384-Vs4s5WUZibN8QSyb8ZLhsnO+SXXzm8rfZ9PjKGeh2gwji4ioKjEbe4q4b2sfrRC0 sha512-f3QQVEQsqONkUQQ/8R4PJzQnjArhFlfJ0r+a/dJb/tq4fbK6Zq+rda3RivSNUmP0SV5876MUFNtnSVpL43SqzQ==" + }, + { + "href": "lib/bottleneck/src/redis/update_settings.lua", + "size": 292, + "integrity": "sha256-1foFwJA1LWZofq2GqVNT0B+WJjPAO23xev4HhGBiIRs= sha384-lrBeTDZNcBnab4/bK+VPi4sI3OavkSVDF28R/do5K2TZLxVf5mXY9RlVEQptWMnf sha512-3K/R9Ntu4d/D7D6Hu0wtAwrWIZ/XHBuukjCm9aq9+S9s3ZLFchTlzmpGxOv4msjXRnIBGUr/6r3FaDvJJj+pqw==" + }, + { + "href": "lib/bottleneck/src/redis/validate_client.lua", + "size": 167, + "integrity": "sha256-6dYpkjiGfWLbO181kkA/ZAeKfdtOV72KChyiYoqgbgw= sha384-s6JAAdkrYyzOawQe4CALKx8/KH6MlDEIfEZxdXJxhs5N21nXrAZglfsK5pekBWpU sha512-nzhN5PA2JQ0Qz3CIQ5Astn8CE0dlcJ8ieKpizWtl9aSAhoen+ZWFdCUzwhMUWo1vhESfwnkWFbnjNOlBNUB0JQ==" + }, + { + "href": "lib/bottleneck/src/redis/validate_keys.lua", + "size": 111, + "integrity": "sha256-ye2XhhmxFgWY4ajNcrrA9xyCl0bYdJd2Ai9gJ08y7is= sha384-f9r9ufccOdzkZl345MPfkjrJZRIOADhHJ9IaPvd+fow5tMFewNcV6oMH/NhkAmmF sha512-g3olCBKGY9RJaR5unXiMiTqBLRkLH5sibuLEDBhRZACZOKl/YmD2mhtqS9kxJY63J1X0d/znhOtfLLwaiXU/IA==" + }, + { + "href": "lib/bottleneck/test/spawn/increaseKeepAlive.js", + "size": 526, + "integrity": "sha256-swrkezmkJYjUzROM5Z+jDLCsvaUVZfF31HIgWQ7c+10= sha384-8Q82zyA7TEd0Z0Na3qPAYRwVZc8aWMtP9COohEv4WH6AgHRhpjDoiuC5Ijlphc6i sha512-d9CgKqDi7/u7h57qaEtzwl0Gi85loeK8+J7tsJ/Lp3yqUd1D5FlUJUfwspmrpLPYKNAbrbB/bOSzsbHQjTIclw==" + }, + { + "href": "lib/bottleneck/test/spawn/refreshKeepAlive.js", + "size": 524, + "integrity": "sha256-wInaSiA8lrYAfk0GJ6X2k/OYn2AdXiQaA81U67hGe3s= sha384-QcjbG3AyDE5v83AbZCYacXUNVm29Y36T31T+up5PrrL3aRk2HWvPqzSBAHExt/VZ sha512-1Ybh3jWyyMlQ5C7CI4tnpYmjg5ekuL+DaLHQTOW9ZEY8NbWYTdMK5A5Sbg+TL04fuuS+W4zZRM43j0O0J1KLAg==" + }, + { + "href": "lib/ionic/scss/ionicons/_ionicons-font.scss", + "size": 967, + "integrity": "sha256-x1gZIM8Ce/Ulvazx5XJJ9xYVmlqgPuCyU6p+ugcBOxk= sha384-mPtrhrcP1FS2VUs9iGOPXqI9v24ncMB41sOnwixwbNZVHBDyMGyPQNmtzbiviByz sha512-YzuN6mqeWglMPHm5u3B7E5jMMVfnhhsM43hjw9j89BDVR4YeqZHhmimrjgGanAaMTT8ttDd0Et+evxRUVOkMTQ==" + }, + { + "href": "lib/ionic/scss/ionicons/_ionicons-icons.scss", + "size": 91501, + "integrity": "sha256-VsbTKmT6Bmy2gLf+IkdrupCqI8gZ2due3HPHMXm7d6Q= sha384-QySAMrPYGrmokg4YpqEqqJWfZeGcWvyA8IcyDbqpt6t8okXPpUg4dbQ5+rsMTgSu sha512-lSmiWiE/nWSi+PgjIe638wPXEMWDcwA+zYQ68q73iUvNSNwHCqIbF0bBVzReaOyFbPQRVUO+OdWmyjbm6nN99Q==" + }, + { + "href": "lib/ionic/scss/ionicons/_ionicons-variables.scss", + "size": 27507, + "integrity": "sha256-4aOJrhqubWXRd7fRN3zlXD4GzzWPJvIdm5ccqIpgDo0= sha384-yHwQTGCc0kVarVryJaoU2N1J6sXjbNi8t8s9vn/PF8xUxmB93+Ze4D7EZTPk9Rv6 sha512-Ec7IDJxEYjADWnxZuKNzQ2ew+4MIvhFzJa5K9eWdNNCF6s7tT2ClvK/4y+n0d+8Rz0uyz8gplmXrtt/ewuV3HQ==" + }, + { + "href": "lib/ionic/scss/ionicons/ionicons.scss", + "size": 563, + "integrity": "sha256-zXT3hlDYJTsQkatCeUwDyVD734h9s0HBfBfhWNCorKI= sha384-vyGc8px+shdCKTOUBu12fC5a25t4Jv76iqFItIovX3/VTayVw+/XfXC0Pof4Hbac sha512-Tvfy3x/H3sjmbOcnzhBfZqNohyYaMzrmfj2nlY+vF6dU7me3Y5WW0FKAMMBgfQsbopkIGVSK313z566cRV0nUQ==" + }, + { + "href": "lib/jquery/external/sizzle/LICENSE.txt", + "size": 1605, + "integrity": "sha256-oHio+AAWQWBCwuXwTbt/SZ8Pbe67CGUR86O3JjOi12E= sha384-UtFHH390Bf7PhNnWlXVFEfDeWNbNv4WdopSYxuEUszpoTl1Pv/CnJp3yMpQxFirM sha512-qJhNjLJ21gvy5b25wx4lU8nz8h6KG4WPCofznAwVnLC9xgPKh8SBVngfw0m3wz8BS0gzFL02WcOgQI97ppyxjQ==" + }, + { + "href": "lib/jquery/src/ajax/jsonp.js", + "size": 2753, + "integrity": "sha256-VhbXyUs7CVi4zkt2vsJZQDrYL/fa97hPMmjk0U2+0SY= sha384-GchFN4exAjILY/PttsVU0y8K4rX3BqsDm07RcU46VbqgNwiotbbnWphHfBfyvhU9 sha512-YhAj1tIu30WYZnCxJDJ+w0/Pd956cP+W6wTlfQh/jRN2173rb2LqbESuHmsitn8gXIZnXOxKFfv1bY7SaxDx7w==" + }, + { + "href": "lib/jquery/src/ajax/load.js", + "size": 1904, + "integrity": "sha256-E/w7IKRRf7ScdUBFu4bqMuHTSoqbfR9n1oWWpe9pacM= sha384-CFeVaFJQhcebncHlFDcVmDHXFFUcRFKOS/1GtNWyFEyMMoUExhOMhEK1gajhJl7a sha512-O7wWFktKJne/Izob7pxuSg0aidP5aqzCAqVbYbjHi795mxIABDwCh8cuagn6NFH6+sy+sy1PmE/mXxFvFImNGQ==" + }, + { + "href": "lib/jquery/src/ajax/script.js", + "size": 1637, + "integrity": "sha256-93Tx77kab+4X8GLiyjLh9aGoNJ0SgBczEw2y5pRePpU= sha384-5AmU2OE+ypmIYcMBy4kHIusFrKwoG/fhdH3QsWch9o50K+NH4w8OUJ6fsrbPYvRk sha512-voNrXQ0VD2CQh6D1FmzVSH/4xV6p5GhlVx6EOFVaoSBG8mhmZytic+rrau8WTClSsKMQAcZBbe4V4NVRrvTqpA==" + }, + { + "href": "lib/jquery/src/ajax/xhr.js", + "size": 4339, + "integrity": "sha256-YiG8fR24RK2NNcyOc7fyddu5wpu52Ta3FAKseoCBRiU= sha384-X42Lr9nCUuHt2s3L+kaesmtAH7p9UQ1yYbxxclsRCtL92MvVOuPJBgAdX8Xyk0Vm sha512-TEoMJ/Hy3/uiyvVCihtR/za2kt+YUloeON5D5551akDj/B11SqaeQzvDkAsufZpKTeebZjswTS7W8kWttOnitg==" + }, + { + "href": "lib/jquery/src/attributes/attr.js", + "size": 3272, + "integrity": "sha256-59feTynWAT7CgZSWhHSyic7628bGiEUAS1bCKnK/+hg= sha384-TT4jMeXVUADqdu9m7yvsmTClYtoM49MGk/prUi58cUE23iBSoBzaQVu1wt9VN1ig sha512-Ggg7BeOj7wYI/WMeAVA/ZDftSIYx2H4KBZOvgu1NXVagaMIoHZr8nrHBuINKatI/4oo54KpK9vBclWUZsHX0kQ==" + }, + { + "href": "lib/jquery/src/attributes/classes.js", + "size": 4448, + "integrity": "sha256-Jb0tf06HzacbalPnjVrjl8zj7lRQ+FMWKJ+0+1NbuJo= sha384-eOjYE5W3Zvv0y7o3TcU3hUprVX7ZAuxOsa4tLD8kFTEg3uCN4NMtLunBe+2phvzB sha512-lhzzfw2ALkKcV+r09ChdF6iW+NwdbbgJLvbyb+mDHUfuAh1W+++ScrEQHlbm7QK7YNgKjbxObY5i0/MqqkJXVA==" + }, + { + "href": "lib/jquery/src/attributes/prop.js", + "size": 3004, + "integrity": "sha256-98PabMqvUTpMJLFBsMHZBQSFKewCgv3J8XUHqUTgrMs= sha384-n0urvgUFKAVX5IxMiJpcmG+H+PgHgwQX5jz9k1j6vj86IXalPIfcGVshshHxS/iC sha512-jTX+QLD1nQNVMX1wfsnkEqMF6+jE9YaIzyO7re876EKK0PruGl+9s0G1l8K2FVB2SrQ6fUNSeW8YX1zocZUQAw==" + }, + { + "href": "lib/jquery/src/attributes/support.js", + "size": 786, + "integrity": "sha256-rf7gspjppZWRRAFLjo37xtL47HF47KkA6y4ByDxCGro= sha384-/Bo9fNEgp1k54Z1/iJngvzscEkL1HdID4yZcGKCa/2iy64bZg33edatAQOoExmnG sha512-W1tZ/yITLG7ei3xFTTRNy/+k72Jme/wxWAYFOG681rzKTno9x5/2k8FXyB6uD0RGOmisS9PTQK2kxUAu+5byUw==" + }, + { + "href": "lib/jquery/src/attributes/val.js", + "size": 4249, + "integrity": "sha256-drGETcGeDrSv2kP7jsJLZyXMLxabFDOi1tIh4BS4s3M= sha384-vpLPGyorhWqz3GVa4ybzNCsBEbivMX4+2OE2kD4BPyRXcDSUB6RxQBqL7x3crxbE sha512-I4zX8BetNXqvsjrjMW8xVraOtWlXQSPo0j/OiVNGQNMtOGcXjeeZIR7MrdM30lOzHJ39fTRqgxt0KGUQOhxSOA==" + }, + { + "href": "lib/jquery/src/core/DOMEval.js", + "size": 1160, + "integrity": "sha256-0zpwvlD+0LU02Xat2fS0X908fEnt9s6aqJzNxfVkrWo= sha384-AjhWZrEpEuV50bNRwR6vr+v7rGUT+cCmjUJOgp6qnFSNGGChjQtkDmut9btm6w41 sha512-PqD+crjh9ur4VxSCl7TM2kOyZiPLFLCCiUbw/nwJSdUWix9RgzBWjKWE3uYKMX3qeJkRlSzN72F86ueTPPWr1A==" + }, + { + "href": "lib/jquery/src/core/access.js", + "size": 1314, + "integrity": "sha256-yL5IraumlPZeArOjnjHXxhmcEmlvbBF3YrEhg4nKhM0= sha384-0fGNd4k9nwS2pGrHFS1nJD4vI7WZ+5NBNFmioa4n9oRd+X54/abNUuqbdMK+3umi sha512-RD8E9+7qIwJFI6lcFM8xrEidCeeQw1D1sIrnv4VVpy66JFs9GqihVhr4WBXdcXFwOSpjLMeQwJJaQoOVr/TGVw==" + }, + { + "href": "lib/jquery/src/core/camelCase.js", + "size": 546, + "integrity": "sha256-sRjg8BlXav8IZfTFjeJEdiJNh7G+bknpGcMyB+QfZgI= sha384-WvrTHfMWY0EbuASQmoNNRlD/uuKv6IcvjAQTXPMfP+qY+kLDq2lj+4vx9a7e3rmW sha512-wYUMD40lXIBrm5IYbAUX4bRld2p6VH/FMTydISWIGw7UiuSE+QFwBmGkexrdwSc/oy2lRqEIyV34fNjrjc7TgQ==" + }, + { + "href": "lib/jquery/src/core/init.js", + "size": 3337, + "integrity": "sha256-mZLiQZ2u5l4HFo+HqcllSWA9XCdJL4ysYv2ZbG56i/U= sha384-WnQVZhwNSAEQ0RSpt4HOvq3x4LCmBMUc1nLpTpxW3B9qIv4aEZuWWJtfMH/ER0xi sha512-qA4HQF59DJ42wqXow6p00oZEOR+Hib9aLb810Hf/2lE5NSXWMddXdVSPPUzt53wCFpSZ8oqOOohZMVNLIxI/Kw==" + }, + { + "href": "lib/jquery/src/core/isAttached.js", + "size": 789, + "integrity": "sha256-7g9lqAvGLnQ+2WSBSPGSgii3rMI4VChaLk1ttbjYzt8= sha384-cyHUwvao1kUNPNOOfH2hhQjeFB7KRfl8KGSDYM/+zNkndPTzfimwbYJZKRcsRfmO sha512-PtlnepW59IpoE3K8I67vxB134l9CuTQrpl7/FIv+ga53eqi5m351CAt8gPuxg2TzRGv74kaksLOEUg7AkCC1PQ==" + }, + { + "href": "lib/jquery/src/core/nodeName.js", + "size": 176, + "integrity": "sha256-wr8FTTf4Xjrumc17c98zMwN+Foy2n9MjFR9FZ3LMPVI= sha384-eYFD8ltioEk/WxUmprtMP5YhQ9CRPPQP8BgIG+NsAzmICb1CE4SngzAaL2p7xeXm sha512-Yni00OGBDEE81TlraeeAKB2C9fTGIGDHb2z1Lk/spnO6hijkiCGiJ16ja7/BrKChZqkMofK+sVWogfUXwC3ALw==" + }, + { + "href": "lib/jquery/src/core/parseHTML.js", + "size": 1604, + "integrity": "sha256-wodUQ/n+zMpSiZPrEfVSdjYmFPztugB/fZ3yyg7+aeo= sha384-ZcUjGBAOG8vQ/n42v9mPSplYMbLK745Blc1DB56r5/tsd1Qy2WFThpugzo/+UYNS sha512-uHDygJ8ymfbNusvUs+WBI/TXCDgPu4GRxo2Dh2AXGuLmyKe4EtN0+4didwaRDpHmIwpYvmPF+xe3/vga/M34ow==" + }, + { + "href": "lib/jquery/src/core/parseXML.js", + "size": 739, + "integrity": "sha256-zdX/6jJdPXN0uLW0bTBO8rpE0WPcsKSVf8W5Av2jPvs= sha384-c4U9kcF8zXtpMES1vAFb9Q3D46HDCuNVmUO0Pqr0w6CLqOl8G5GaDwUA/rucARBX sha512-v48QKH2Ag/PHDOZ2SY6rEbPSuI2ZFUmP0+YWsHxQPV/BseoZeDYRCgN2K4rdEhxVIBJQQLen2fNcTVHUYNb1dg==" + }, + { + "href": "lib/jquery/src/core/ready-no-deferred.js", + "size": 2264, + "integrity": "sha256-6o7X1jPGVoo5we/xP3OBtKHgr05rp1CVHcDzrcP4Msg= sha384-aJ8ZrALKfcApldC6pdXpYShGi+CCN9LeSeZUbKtCdsqQqtpFq8ia5n0PrfvocZzh sha512-jX8BMRKnZ+5hwHz87Pao4Jfdt1EHK7FD07t1cLYQvjgKQ7jaz8ODZ5hf56nxGnhGVgAvBjF0Lkc6JT7smlMXDA==" + }, + { + "href": "lib/jquery/src/core/ready.js", + "size": 2097, + "integrity": "sha256-91Y5qZXJW0VcMFbzVHOXaw+yD6IXNB00m1wOV+vXtB0= sha384-aBI/Hi0UzeMGoufXgesmN9+x3AWi6LOT13TkNoIH8ydNdRRyfTQyyA/+RikVpsO8 sha512-pYixZLhr1ZMIttqIBHi14sBC3MkrfNIn7FPzZtQ45zkuJ65ctvhMhmRMmnYhjesBOen6oulSXGOyXiPVZhtLhw==" + }, + { + "href": "lib/jquery/src/core/readyException.js", + "size": 168, + "integrity": "sha256-LirlI4fo/drRWco6AIbAFGCkKr9DzSULnuMHXuFGASI= sha384-Y1R8KfUQFpES6YMedj6xN0skH7UGMp+hLHMNbYHCwD+PqWsbua6s8gYP6KE5x8fQ sha512-EXYjKNX/v7rnePkWbmnmO+6jp2biZDuCjqnA8mBNa43xUclOXynMPwm9gz92MbOSl2A+Nu/LJpOBJ3kF5c/Prg==" + }, + { + "href": "lib/jquery/src/core/stripAndCollapse.js", + "size": 362, + "integrity": "sha256-hhpC3nE2O3Z7+oAyD7VPZDntNrVASOiiewWtQxW/CnM= sha384-TYIGxUKTzO0m0vAjba6aQkH6wTbd9NaqD2QObsk+Z4uHzteh4WM8e6WSxug1s5Je sha512-Q0F6VTzCIn9REPytUDWxK5EQoOvs+4+91nhd79GzXHPMVoRRQJ/Uqf66oIhvAQDyTwvvIf9ddDm45BDUpAn2KQ==" + }, + { + "href": "lib/jquery/src/core/support.js", + "size": 631, + "integrity": "sha256-/LKKQwLjjtDPHLOhIIzldxHIU841KQFYR6llmeM/fpA= sha384-JizyBptPT49D7tY5Z7C5zuM1k5IFV2g/prp5fPApvNU5tu5iMDlXBxEIcSnahOpc sha512-GkUZJo2pbB3dDwmd9bkEkxWVol8L8nHMhrKj4qa4cS5tjMeQwuqLxgwA+h22rk+vkNXJFfBLCYUKi99i947UMg==" + }, + { + "href": "lib/jquery/src/core/toType.js", + "size": 379, + "integrity": "sha256-EZjmklhe/ZXR3Ud3Icu/W46ZhYZK1yf2H0g63caI2+c= sha384-AoPkomgwrvDhuAIaTEl6QtsDQSybkwPcrebLrTPIyGRqViYMUn3xi2I4zoeL2j7e sha512-xPIO7gBe09pl2QGswgtcCwrbZ5K6Gdgbe4ETcM+FmXyBsUshLc1075/z4zqs9iq7lNsndshsZPYz5mMM//Zrgg==" + }, + { + "href": "lib/jquery/src/css/addGetHookIf.js", + "size": 530, + "integrity": "sha256-SAsfHAPbzd+mgSmJvk0pan+zmiTDjq6wb2RRruZOk88= sha384-kq/4+aFRTR74vdzvtnx4jaco63KGQU99b05mE9XaEwFs5ffKuCwl2tj7hueYpr4F sha512-mMWycX6oQM4czClfXkNYrfwzhpATI8yeJuc+4nhlwYYDripWvAMbL3JcAiu8dCeg1OrUs+nKO7D6Jah1bi/UuA==" + }, + { + "href": "lib/jquery/src/css/adjustCSS.js", + "size": 2002, + "integrity": "sha256-1jOz14fz9mH8DdBlTvRFFvbpGume8Tw3l6cW2amu42I= sha384-6++LyiO3JSLLAPrk1sNkxxZpwY0re6Unt+dWoFUIUP7ZZNFl9dH+hDMxs1BNZaZt sha512-fXDoob1/LgNShvkc3oDLmEz2EPHwVT6taOZZne54jVIMjfcIsk10BzKriQwPHJ685HTtqp/pSAMeYf26LwPKyg==" + }, + { + "href": "lib/jquery/src/css/curCSS.js", + "size": 1656, + "integrity": "sha256-o78i6wxmKIvrWYfkutL1If2njY5zq+TQqbzB+p7lJso= sha384-NGKel9wsPgAlPldN3KlJyOu29XuLY/9v0DeTEYTIj2sgGCiIyTL3VLycLGAkdVaV sha512-t7s+4GPO9W2ISUVEnn0VyyChzpkQjKyPN7ynqLW5TCLX47a28WjVbRTw/kcK7TSkW8ESkObUgoY6fW1SYP+7EQ==" + }, + { + "href": "lib/jquery/src/css/finalPropName.js", + "size": 870, + "integrity": "sha256-HhI7kKfWyYuqgk3eK2xB2rf2nfaE4QN9hXKEPL9eFtw= sha384-5zzn7UKnI7KeH1HMKTFO0lgygtXLM2/YgnpehkrZnwIN+ywhwm3GNd6AodpGhU8e sha512-SgpY2bs720pIIs3U3gfCg9C4DYBlmWe5wac+nAWUiD7GlRmZfpqisv7akaKcsY+KvgesAwkrSCgWWvSoLVsgSg==" + }, + { + "href": "lib/jquery/src/css/hiddenVisibleSelectors.js", + "size": 317, + "integrity": "sha256-OK2VDpvtXiPtSfnaRDblna+WvlUGLyucjkRRvzVyjMI= sha384-dkgujjp2kaK9VkpSR8fhl+gFJvHzIJHkQqQ4ARD2PcyEaCp7YEbhfMaLHU4Pk/Sf sha512-YR9I3HHZdGUJFEgizzM/KdDhxSO7ZeY//pNOYqM1OBB8j3Po5ez9T7uFXoXCb6N84mGYcbPknt88hWZd7KHTfQ==" + }, + { + "href": "lib/jquery/src/css/showHide.js", + "size": 2304, + "integrity": "sha256-9r/4gVnvqiEZcEMLGjPOsK5k6Gsu1NaW16V3ExJNTww= sha384-8YdDDjOQeDHLtrf5hobGhcenpmWlb5I0zoQQazaxcKD71R8IVgiproz/yZWL83mw sha512-nfVrQK4ALJKl3fM7xb3HMbDU4RNP14WfvFspVC5npFFxevHozTL6Cmf1hE6PzrGPKdzmuFAWCmCTbbl7AonHOw==" + }, + { + "href": "lib/jquery/src/css/support.js", + "size": 4825, + "integrity": "sha256-bBGqt5pnwPgR8XdZx4++478RQu0fycFPbXwInl8xaCA= sha384-cDZdPW0Pfl3JQwCYcMHV2gmT9k4QBPfFQaMcgNHKg3H6gXAuNHNvwdU+Bpbl5dvV sha512-BpL/1/okteTw1PGcynR4eL5ELMtyQ1kcCbmk5bEbxJMlePsqqNCFZwQwHw/x3GnfEChk20d2jXTQq+YaJ9sMXg==" + }, + { + "href": "lib/jquery/src/data/Data.js", + "size": 3952, + "integrity": "sha256-fMPPbRR3QcDAc/GqMJVIJXH2tvoqg1plBUqp2r13KmM= sha384-k9556q1dv049k5/0qiAMXFVjtko25XTY3fnBFLQIU3B2GcO82O1gwcZlFRdONjMC sha512-wIoANFqQX3YLrp627tN66fcxzMma6yELsOBwIei8c5wetuyP24/ReBQay93f4SV8yP5BnQJWnhps6nF6N+dwRg==" + }, + { + "href": "lib/jquery/src/deferred/exceptionHook.js", + "size": 640, + "integrity": "sha256-udKs034Z/UU2hvo39yiZV10EfLxcgQ4Ydkfwdt7CK0I= sha384-x9oJMjzGqSYqNQOt2JsQVoJ+1OV+JUmQ+O8xW3qtE84pPVag7eFslJTaVYd8+kUG sha512-MWFcTXr2R7IrcsWdciLF0Ij95JkgYhb8XpHKX6hAQ8mYYDtxtnGHyLzNc7pMQoWFdL02NhGLKAWwlw8e0OLQgQ==" + }, + { + "href": "lib/jquery/src/deprecated/ajax-event-alias.js", + "size": 296, + "integrity": "sha256-LGMmobvS65SYvJ3qxWY4+PHlGJU/o7B0tzulUOMT0iA= sha384-EHAb8jdSIit5vbj1HkV7aHP7hM7wgH4IOBEgFchW4DdHeQYNU6xB9rb90pwPWd4k sha512-fHjKvuyUHasRY5ppmpMifom/tQLNqDbFQaEGQ1Z4KkW5VhezB1H6a7aaVnTb5GPra6LGm5LCtHqiJ0FaKuK0Jw==" + }, + { + "href": "lib/jquery/src/deprecated/event.js", + "size": 1140, + "integrity": "sha256-hVqgwlFPE/c9IHH59KaQ8whqJFJpQgDhh1JtLfbgWHg= sha384-XGvbhUpbEG5OSGJgiKmPGY7uFMqWkV0JcQmhccH78TK6fFeSvE6qjRdovOQHdd3s sha512-ccoQsWkz83Zf0q6cXIuHoxye3x9A3GyF4pnpk57msSCekhtTRW9q3GDETDJsqFHvkoMKOL7XTrNXhEEsS1sl8g==" + }, + { + "href": "lib/jquery/src/effects/Tween.js", + "size": 3291, + "integrity": "sha256-/yUB6ZKuBNHl34pYQ0mpyRvmwyysWmeBWMyueyk4nRs= sha384-r7sbwwoAQV3HLoU4ywLKapphFntQyVTy3hlFNBJE/l78l4Z42qK8vmuyKwEZ5jn3 sha512-qllBpJVJ9B25lzYCFmMUGbT/p2VoUoPyhje7zk9O07vQcsBJANnzyt1QcgYt2YzKH0fExdNnWTjWA0junGqrJg==" + }, + { + "href": "lib/jquery/src/effects/animatedSelector.js", + "size": 244, + "integrity": "sha256-UNp+ly+E+UZTulYgpD9AefrP4tJnzxuBbGe7v4AX6Wg= sha384-2V44jNorh1ePHucyJ3BmO0W8ULVeMG0Z/nfJLU3fjK6ZSLoDhySEiQ7ARdQK5vRT sha512-6ImOi9+XmR+axB227U8Ob14svR6mekA0tdriPvagyA2sLpYROT6JAAuq12/foe8uXXJlYiO7fIj5LeqbZAcEfg==" + }, + { + "href": "lib/jquery/src/event/focusin.js", + "size": 1665, + "integrity": "sha256-a+xyQIusmICMhtUFqmcWAf0zGxU+A/Qw5Sy/2XB4F3s= sha384-HiJUVGKENEuxhbgpez8QFzyBzfgcrhya6cBgK55zEEQ0BWattdXqahG7elwUqmUN sha512-afjvTuPoDa6EFVRbmcPC2EuLbRRE1zlIyjB3vaS9Ydj/X6DtOV0sCwgncdT4TJT5T8FZ7nAIWcIDi0WkAVeOcQ==" + }, + { + "href": "lib/jquery/src/event/support.js", + "size": 133, + "integrity": "sha256-cCO4OefxCNKsStLC5pglbD7P69YVFKDHHz4NEIBOhjU= sha384-Zb/rcUUstBs8HBMGs9a6UNS7MXSglzlQcauhnRR0sdzMRQu15a+Z02Nn+LSbS6q1 sha512-EK3d7dURKgiPxLBCZC4900WPrJGD8jWzZgxwa3xxjYsY5EYotppZDfJ03xfTIELjdlvBn0BvvzvVjlw1Hqw5lQ==" + }, + { + "href": "lib/jquery/src/event/trigger.js", + "size": 5426, + "integrity": "sha256-Z83h8gQlbjLUMH7ROys6O594S+5cBL/u9DcVgrBPKgY= sha384-K2eW8yq3TmoywJg3nF1JOoy0ff6NMk3jxPItIYoc1x0Mr3ADvH8sZTa3+gBffTAY sha512-NaIb5t49Oxs02eeWHFWprjoExNtXc/y+JbX4IhSyXvDPfrhlGtzigJWgrgPFIDI4cILusS4j8Um9l7znIZkuUQ==" + }, + { + "href": "lib/jquery/src/exports/amd.js", + "size": 1024, + "integrity": "sha256-QlfltqSbRAmFDQxEzYJo4hRtmiZIEPIUwah/R0Y666c= sha384-TA6dV/l6Xt1KXlnivX4hw0Pejrb2fgjKe6zrv864wwhdMOdSu/AH5QxLMXEFWQqy sha512-6rWVg9yB4H0PXCYdPDiMEj03EQJI1YFL77MRfNrm1m0y9dkIxoKr1EUi7QM1FjAojZ2z4D76pSd43mQAeZmSmw==" + }, + { + "href": "lib/jquery/src/exports/global.js", + "size": 620, + "integrity": "sha256-0gkJFEUOjO75likoApzzvw0T+OhWpktpGPMck2knhF0= sha384-7A/1lQU0RkwZ3LmqLoPymuFaO4I5s+SKFD9x+QafANagB6IYP/iKzPL3iG6Ec9eD sha512-yvsRY+fvjHWcfyjOfC2Rqi2gp4mYTGC3q7FFizQd4lXr1K/ICjDaStKRbyQQ1cq7S6040K8ZThb7ubFp902ABQ==" + }, + { + "href": "lib/jquery/src/manipulation/_evalUrl.js", + "size": 686, + "integrity": "sha256-MSm8lidjXsHCKpftqTiXMOa+oa/RVxVwMB9FdCeV9oc= sha384-QcchwmHYBq2HnvGAzRj8CopBNFXTx2RqFqbQ8LlX+NACpVFtTLrjmR4By8cJ1/WU sha512-fLArUuRTYA/opbFsilNSmZ2PinoKOY2dVeYqIl2hl7feJdILEd7DpVPjkuxaNkyYZWsTzcUgGW0sLFZQ44bCBw==" + }, + { + "href": "lib/jquery/src/manipulation/buildFragment.js", + "size": 2486, + "integrity": "sha256-+KJ/Pu29U6GZlQQU9rG+QTEYc+7Oe0SdFfhY60h0sDo= sha384-36Qblw6I6ky0z/NEdwuP+L+fh1lM1w4wl3Pzo3cMhDo9XPGz7K37IyBe2bAkLj0b sha512-8FV9kHAIF/WwkoisSCTpruKnWdphtIfjAjDlN9iYIa867Kw+g2oLKiRXFh1KlzrdM3qMrSeEooUwW0l0CFjrCQ==" + }, + { + "href": "lib/jquery/src/manipulation/getAll.js", + "size": 650, + "integrity": "sha256-raG5gE7KL3NBMnvgzNRw7+9VGSJlmRcPL2/wiiSWMtc= sha384-4eKrN08yp/cA4TOq9MQeMfMkq28+sL9Z5eEx99E7G8TKi2x1b0tYs4b9u6w57JTa sha512-GsCKYN5UaXCKhGfsBORua7gSpzib2r/gFsZUrQXlvYS7TR8mVPU+8so0yItQtwOQIgqYp7PTdyWH+bdOiX3X4w==" + }, + { + "href": "lib/jquery/src/manipulation/setGlobalEval.js", + "size": 381, + "integrity": "sha256-3L0phZ69PK1s3g+xxSf1D5X7nx+IiCnFEW3zT3ezDIw= sha384-J3GChTH+EQP5tsQDJuvvR5Pyl7OihtMUH9FX1T+YSiAIIMRm6Whh0YZXw4Irn8Pj sha512-5qjVb4NEc+JmVi5qoedhzXu5pZdcv+NSxUy4V3EiIbDk+a7rBb8/FBZrQhinitLk/4Mc93gYl7wNvCtzvHCIWg==" + }, + { + "href": "lib/jquery/src/manipulation/support.js", + "size": 1236, + "integrity": "sha256-AH6RZZcWrDujK95ZZPrcl5kC8OMwk7a+zZH5jvbFEKs= sha384-KDWPH3VEjxuGuRDz5R+hzMjI9xGx/MQnfnV8kROrDMMpbcgu/RfLqJ4V8VV1fRFZ sha512-LbwnIL1sMSrU4FDrdKPBYNqyuaU3CcjIP7adqf5snkeKWU/BXPkA3Vfc8ffO222FagXKNVDtjiXsZGcMbUH/kA==" + }, + { + "href": "lib/jquery/src/manipulation/wrapMap.js", + "size": 819, + "integrity": "sha256-xJtAwpxzFN7MxtUYo1eXO3PKZXS3t1Odn7rlmoQt4Po= sha384-LgTlDrOJ9JwugTT5TCSgIc8AYrGY4+gkL7dJ0FcVzNyJJBS0EF0moP9PnJFAB4Q6 sha512-g5/XrlbxnUbGRqtegIc8QB1SxOhTzzT+ZNh/QzqjPwjYgExGbY42d2l2ItOgD3cUWME2/M80Mq9XUGH7d+hfCg==" + }, + { + "href": "lib/jquery/src/queue/delay.js", + "size": 636, + "integrity": "sha256-G3+gyYUPLcPYyW4qLKx6dKFOh4vo4U/5ch0RP0IAz10= sha384-XMTJWG3YeHZ3p9n8jImfRSwWvC62VlcQsYhNE1Au/kTXTNycBX7cjppFCUwHt7ki sha512-6VBRLqVPzdOaDUNSMuYvZW2y6iqLwtlhYQYHNcmKz0TTdIFELCyIo8VDkvtOyHYOiRoEE19lRh2PKRGnjrtkbg==" + }, + { + "href": "lib/jquery/src/traversing/findFilter.js", + "size": 2352, + "integrity": "sha256-6JpaMMZHQjK5B1OveqKZgLVWPvbhxQh2D/2pVnmmsRo= sha384-blNeOmsvhGg7DKV7hBMVZdyAUQRN67ePb8iHhZFFo6+G0IhAfBk3jPbU02YtM7nM sha512-iOrnymE5jcgELESqTPFiyrgW1BVBfQzoLK37+/oHQijozYftiWh1i2L8GKZt6oGSivb9L4g25+7koAVDCoWWBA==" + }, + { + "href": "lib/jquery/src/var/ObjectFunctionString.js", + "size": 110, + "integrity": "sha256-8ymI7EWwkjEMYhd3a6kSAO5G6KzCub9YqCT5pkxF1Ys= sha384-f11rM/DFixaYCJukucu2PApdmC+SDrnY+Ky3dZYRsWHy9d2o3/iKFPHjvmjJchJK sha512-6vetY/6h9UAdWrlJXQ1xFH+gkCaWJ2coXv3myXlRMLjF+IAsSyHAM8h6e+D0qMtRusJTjvMJnnhxNCws1JkAmQ==" + }, + { + "href": "lib/jquery/src/var/arr.js", + "size": 54, + "integrity": "sha256-KqEQ5OYuLmuBJfEmhHxBnmpGpv1pR72PM0lNLMZ/CW0= sha384-XcrXMjmyTQeb9iK9QMWZltY3blSzokee9e7nB3LRVD/4FfRAraHM8yjBjRI3mhq0 sha512-fKMfm8KouZebqMghcL3S3VDak2LO41Wm7RdRFg1aqcUAHEbJ+Snj5emX3JyRwY8v5svdECA3ZaT84gtT4FE/Hg==" + }, + { + "href": "lib/jquery/src/var/class2type.js", + "size": 82, + "integrity": "sha256-MBPUIrJOxf7O2ci6pO1SDfVrDRjea/k2462G4VW2GTE= sha384-Xn4FGz4opL5S2oJLqQY4oeDN4Mi5lHANiUeG7crV/m6eGhw1O3zbGErG1S3MSikW sha512-F8F6U9pC5VXXRMKsezUKdDhGzfgCrUwPCFKTZkukHFppnO6qr2GitH5etqTUOOydUiu7/vE7D6sNYDdqNHRlVg==" + }, + { + "href": "lib/jquery/src/var/document.js", + "size": 67, + "integrity": "sha256-+gND7PEyGjy4zMBPzDjNx5L80bv+rMbglBOyjehkLEc= sha384-BkCGZxkXz63AkyaCvfoTGer6Lb9GS7EXarQFh2kssZHiAgpvRHyZkDSbST0JDtR/ sha512-ml2LDzPlbrHInIXigkzg4zJdMXDy611cGUm6v8KI4/3Z9K4k1t/hfxwCwVWSQfXuaNxQFNEmv/kr/LqPfYfBfQ==" + }, + { + "href": "lib/jquery/src/var/documentElement.js", + "size": 105, + "integrity": "sha256-UGnuEkSzjDDd72APy/FSv8HCuN4a6f/C3wXPIG0J6UQ= sha384-aHX+qaiskrz0cJjtg+vPAgK5gqR2sh52NXGx9S4sC1z5EnT1hDZhF2IdsUKrQR84 sha512-SO/QTYNmEFc9uXA5+CMIsl1RHUmnamJ3GZwN+3fLmIoWdwwMTeKzkvQPeL1Ncv5TZwtogQotwE9M3hOjPP483w==" + }, + { + "href": "lib/jquery/src/var/flat.js", + "size": 372, + "integrity": "sha256-1nOV9o4uzd1Wwp2V0cKm2MaYNXf7zOmZjV1rUanE4zY= sha384-THPhFk94ZTXLeABlC1SCmAkyWdW5vuQ0gvQstMsB3BnDJkRUyx4Npqg6SocyVmx0 sha512-OKhaaZze3TaI4nzEVl/Q+AJFAipoWOwo5BfrbZCXtaB7GOlJdsI8HQr6axa18dd9p+PARHCsIOschpgzn0OJCQ==" + }, + { + "href": "lib/jquery/src/var/fnToString.js", + "size": 92, + "integrity": "sha256-w2Smaz/FOStIVIVyE0Tmd5XPR1RS6P1FrdIYSK+yquo= sha384-nVHR3fiGtgnzdXuwEejrB5kXuiY7WdgVPMkcmcOtNB4BGNZj2Mu4sPoVdG0nZzSE sha512-ayW4fPqgsCxLkOMeRHv5pjK2wK7vbaL6grFSPk1dbyc5GQRPtg4dI4KhLZML0tmjxU3g5AHXaE2B6k0QaFl78Q==" + }, + { + "href": "lib/jquery/src/var/getProto.js", + "size": 73, + "integrity": "sha256-TkAAWmLMCc10fZJz/1iv0Q6oAYT+lzoGIjfex9NX6rU= sha384-pbe79T7KIx2w8MivOu9fmuc9Wbdwh+r9ck54KtUiwlvaeoRC9DcAAm3YAo1zu54k sha512-esh2GIBZToL8a5HFT4urIDzF73TZc7pdA9M7R+WKWx6j5ZA66xTy4Mx3fIlHtVF7bhW0zD8SvfoorisVo0jZjQ==" + }, + { + "href": "lib/jquery/src/var/hasOwn.js", + "size": 110, + "integrity": "sha256-sQe5oZPwd2LkibqEj0FCDN4m6E+OCg8K0dCZyrQZsgk= sha384-7u+ut+pflUYAngr7gC8wRENDKZz2uI5Zu8k4rX281XkhjQV34yuRQMSp3ZOPDemt sha512-5EhEkGtcUJi+/JseqQnjgKv4dFnIfrBaQmaDWRtzyg7IYSbi0ylVIXlLJ8LS3RwoJ3UcQq/KgaphqY/yW0qXqA==" + }, + { + "href": "lib/jquery/src/var/indexOf.js", + "size": 82, + "integrity": "sha256-QzhziawYimalbpg88AATiw4B+xiRGNLjRgKhv7FYKtE= sha384-Zv2WeWsPTR2qtm2bsjukFZGV71TStsCwZ76YP97l9I+pukI/6s7OzcTK7doOB+1J sha512-819sa17aGlgCiN5RiHDQD4bISf/IRtTU8qLmvApNMxPFkViOOBNEi9jH3/r8fa4Myji/cSSsgCZK1V8chCQkqw==" + }, + { + "href": "lib/jquery/src/var/isFunction.js", + "size": 674, + "integrity": "sha256-QD2bS0kCT2OWpZsh+fvTOiuSgEuI28ncdAi6ia9KnGw= sha384-ce5GCr8CyObJHCHsEGctWNWyieLs5KW/tC0JiOENe+yAO9NUBTFSuIA3G6InQzoi sha512-4rmX4+ULYsW3chpKrCqOkygloCzjlSaFOOjj/55lwz1TFM4PrRzRI0BaBMxwfNNwZeaqUCLuH9L/grjO6Jf83Q==" + }, + { + "href": "lib/jquery/src/var/isWindow.js", + "size": 126, + "integrity": "sha256-87bJYkMxAREhW0dXpBB4pgbRcjs3/b70wDmOCjQCBbo= sha384-Yctf2sHep9bgrDCx/4u6Pj8Fc7e2Ti6ZvxUpMBKItIBrVMOkPrV6mn9zcDBnikfb sha512-LHZ7GMayYGtg/3Muc7efhf60qnkYtftmDjsp+ifRwBrPdGDoMs5l2cK+hObWd1ht7mkGBipUXrqo93DLVRnIMw==" + }, + { + "href": "lib/jquery/src/var/pnum.js", + "size": 100, + "integrity": "sha256-Y403VoUQRLqYLZ1H953nd9UmAAOYNqril0kh0rVdR5U= sha384-tL2M/mlSt16BvFST9v6G6eXonL7YloRyxeX4P0xH9OiVxRAsLfsVcPMe2itAIjAO sha512-ZB6o4j40yGj2MGzn26xtVcMazU85uYIGnOfX9qjZtoIBzMeGR1ZOy2y9nLFt26ocOpYOq/D+wk8MaWsRP7EK3g==" + }, + { + "href": "lib/jquery/src/var/push.js", + "size": 79, + "integrity": "sha256-ck7pyeuPlYAyci/q04Mo2sVNY1yGEIDGHu3LpGm/tEs= sha384-Tj6d8jWrkc9tYKGMwk1m3A2OnlFQfsmR00JsQSu8HPKYSgckYyJGdWh+mucW1vRB sha512-q50MEltci5Nn8JfOhiasEobC3c62WyCQRR7TRgmqGxh6zxMRDiqP2gUdp6MCFB2oj+cXSJoQntipO/AVxAe5VQ==" + }, + { + "href": "lib/jquery/src/var/rcheckableType.js", + "size": 79, + "integrity": "sha256-849PQpl513CvAi45KAyBwZvQYuApovHVrzG3SyKDRWk= sha384-n/NEAuyKui3ccYHCb80o7Bz7TwS5iFWmrr42F+7EJC1b8LHD5oBCe/G+F06jCA1v sha512-q/IKxda9UJrmugt8vB4bouKBqpk0a+XJ/syTLOw8pC1ab1wmm6+OxyyFqslyz7H9JtWfkyxRCAkSUzeqxY0Xcw==" + }, + { + "href": "lib/jquery/src/var/rcssNum.js", + "size": 136, + "integrity": "sha256-nV8R+j8wlF0LiI89UHWox6X7xk6cUiHsB1nu3rkJE0Y= sha384-SmgytH80BzzTxnoJfVaiJSHvgQ89TvIejqFULUQtZ40/ucH4EmsxZNPFZhK4enqJ sha512-EXaL+5j7Rdl3rJGyAExKgzuB+pxILugHoaABVU9T+kLEmUqpXDh5pGX5AAtxhb1nx/Aw2pmZEQanSVZ78W42bA==" + }, + { + "href": "lib/jquery/src/var/rnothtmlwhite.js", + "size": 202, + "integrity": "sha256-3H4lGanl/njZn/e17m1k0Tf6Zp6XESWJ1mRWm+zyWg4= sha384-NrA28turqgAWTqex7dDUXg02R9dQgMIuSeI3osEJp0aEieOlqfirqCjjlVO/Gmn8 sha512-pi5M4jSVAPe0sRNHf2W8fYMTQq23yMuQT7Ejvq8PMefkrbvS55ORC1U7u51h77izQyKaC+5tqWAAu8xbP4iVag==" + }, + { + "href": "lib/jquery/src/var/slice.js", + "size": 80, + "integrity": "sha256-RbB/TiVS4EzuMeF4djnrI+R+rh5L9OeQBL3M7+TJT9E= sha384-G912K2zBQ0IU8ExDszGupZ1fSH3ElHYZq31j8+F8Het7oIQaArPCznLuSNfvlWNx sha512-jJrvDBxWJjUEPrnVCLhOdIC60r2Y1YwD5QZPk8HFyRkShp3h/qoAqNIMm2mpiLElVD0pdYU1aJKUYnnflQJqpA==" + }, + { + "href": "lib/jquery/src/var/support.js", + "size": 117, + "integrity": "sha256-XMPzWuHe844wqbTSY/bOQ3IZ9b56nPMk8ibURLfrL2Y= sha384-+9haH/mvVdauVzVyRxGXbFJbBfHmAgkhu4vcqcqTrWkmT7i5Ztn/TvToJ5c0hrdt sha512-D5saorhFm6Sa3nF+nsyE9OZ+0xYKRT5GmtqpRmFpkhKkiWK6AREO5tdpgAR1Hu2SYE2FZSUa6QevnwNV5H3UcA==" + }, + { + "href": "lib/jquery/src/var/toString.js", + "size": 104, + "integrity": "sha256-Hh87skomwwu+CRIhgHuB57r89HwLkosBnbCADzaaLe8= sha384-sZISq++xfdYoZ/budt5X8SdH0yyd9aAslPIr6S7FhPeAd8CeN9aSW/ZUge+g0igt sha512-JcvjZpxPyUf3aSQO6npfJPMwkXbkwzOAtQ3OVOec8JIoJHx8lrCUqrHGrgFgjl8HQzFvFacvQuBDnSWt3JhIMg==" + }, + { + "href": "lib/leaflet/dist/images/layers-2x.png", + "size": 2898, + "integrity": "sha256-DAKiOI9jfSH4bm1LMU7JqWjnsFrUw6AFKAo/dsD9PLg= sha384-UVGwNmVhFUX+p9GnmlJZyQRLxpmbt+KwvYssO2cYXURAkyjVGc0qJ9nUJB4lJelR sha512-AjQfrJ+7jPAxtLR4QnpAMWLwWMLrl7rOYB9k1tG5YPyyZGx8vvJtZJShzu/WP/etuvBo4c8iW6xjQTWBinix/w==" + }, + { + "href": "lib/leaflet/dist/images/layers.png", + "size": 1502, + "integrity": "sha256-CQiqKnKggvslY6JCel5PskdXGGK0SLgPtvcgrxEJkj4= sha384-5kKWCfWwV4F3Sse+NKjOIA2dpJ0gBFFhk0eoRIZCaR5OjGzWC7F1dxi0TG07f4gH sha512-0EKILr9/63Td6Bw5OmSFbVGduhKJxBxNXgaXF/iRM/qTZCaOyztlJv8Xm9TKsyFGwfo6Ywvzk/e7RxHTlH2tAg==" + }, + { + "href": "lib/leaflet/dist/images/marker-icon-2x.png", + "size": 4033, + "integrity": "sha256-RU3EeegrSHUptrk9apsprGnKe09anV/fjgGHH20hYRM= sha384-SGuZizGE3SVzNbkNLvSCv+WYNq6rS1c8HTIPo34mx0u0T1WHIrMEvyH2wCCzB3Pk sha512-sAWLfjSn54pJ/yEbGktXfzV0VzZIPLuGv50yDLwhFamr+GKAfqugdq3XzINWwG6LHlOYfPoAa6TKjrdCuNWVtg==" + }, + { + "href": "lib/leaflet/dist/images/marker-icon.png", + "size": 1747, + "integrity": "sha256-kV6Dpvx5jFmeXJ4/dZ1rwGXWUVEBms0EENH0cxvKr3I= sha384-3s0RN7OoCr0DZpr97iPbRNiN1nb7yjJhsT6MDt6B/ae+a8d78D+2QRQwOxurFQ/i sha512-b/WG7jyRDC7jYeGqg5MklG/if0N0lX9Wk9/64LZ3vkNTTwVpryfPPnNjdVhZhgpEQhsMGE+INanjLGzHqdwajg==" + }, + { + "href": "lib/leaflet/dist/images/marker-shadow.png", + "size": 797, + "integrity": "sha256-TzQNLWF0YzPf/gVuB0zhcErk5H/sWn3pgyL728/LK20= sha384-KsxRlq9jwjxuo/JJCo1ZPD12XOcEd7gecYGSz/fUNRshOs1J0xO8A2FeWyAckqZ2 sha512-Q7AWibmu2xxeY/HyTzxN1JJ7t91aWIcywesPJ+L+q+LyFlKpTom1hrFRYjJHDvSeExZRE/si1p93oRJusIQc3g==" + }, + { + "href": "lib/leaflet-plugins/control/test/PermalinkTest.js", + "size": 888, + "integrity": "sha256-oyoxytiLT5D9TuDERq9tZm0lqjL8u2Vk69c8k8k4g7c= sha384-fp88rlNYe7gWFxhGdb4j1+n+y37mu5Rdo8ztj0O35R5IaoBZVrxzZNNfWWtkqzXy sha512-EOT7dlA7pcR9NlfExsfTJSiosz7bdv3HIQSNow5GoPFjoEmEdv3FclIeexjwRuGs6usH+bsAR1yTqCYTyhSHCA==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Bing.addon.applyMaxNativeZoom.js", + "size": 3828, + "integrity": "sha256-+MXVHsEIHeoDGgO70YYELwYV0ElEjrrAgE6oj6g/re8= sha384-9euWtf6hTZoC60R65C2+8WNgnTmOEmzNiHrGa3r90FFsPmj0F/TIWb9FuHumwXIK sha512-TVDmw4cKdReZ+LHRwzV5kZDI4u5WNIuyNWVzYKG1bPQ+hHTgjV7RvueGDKLsIVbb4ZIxTPZV5AFzMzrETAnukA==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Bing.js", + "size": 6472, + "integrity": "sha256-19VbFKQXwKntXDHnGPwca5yiOzGOniSwnKJrkd92OuM= sha384-nwBWiyMsnZf88ra2UHr6NWaz+dOwve2om1zxYPwsRU0SN4L6r5aokq9zwyFGciW4 sha512-dyv1Syr2VFSdtaWHYZa/w25K8c7Z7q7UgoHt33Ibw3xwb1EojP3EQyT33kWIjlLkZmnUWaWBHtGHkFNY36i5sQ==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Bing.md", + "size": 3642, + "integrity": "sha256-khUOJGfWwYwDg2EYtwgwjSs2Q4WyoXBnRdNGSg8mI5Y= sha384-ZEwhviFKM+zwUlKNg4NcALwM4aGgsDn6o8mIJRKqWASgnaE7jCDoSwk+Z1CES7RL sha512-J+xtHo0RhQy7fBLXxm5Oj0r3rrRNtTI3E6Fc8eCmqtuGHOhj36scuHXTUcC+dyo9TefPyZwbQySCopjNlT8LLw==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.addon.Controls.js", + "size": 3296, + "integrity": "sha256-bT541DIWZ3SPv7chvMKQxK6ICjw9FwSbma0N3mKwEoU= sha384-60jDtPpZy/IFWP7q4g2lMx/pe2f5DLVglZyP0O5JGHsF4zvLoG90/csDCKB/pLE/ sha512-zccDGPfxjbth9pwgikqxdb3szTlz0pB+M5WOm8Jv/J2rZ+/EtUjRlCP4F2TbTDpOWgcvm6kEOALPm0zgMlUwkw==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.addon.Fullscreen.js", + "size": 1210, + "integrity": "sha256-n53yzwDwrTJ1srCmeb0ae/qBNC4ZZx4e04etZ/SxMAM= sha384-zGsrzZSTBIdIAG1nrcbnHza8htpMwDIjNzXZKnDiuG73Wr9bPNziDtTyAly2iOAx sha512-w1x1h9ZT+zK0zPtHkE2xzkn6XSx19V8TnWoBe8lv1QTVloSkiSp+ySuirziHS/dMRtQbqHO0wSGm2iX5snhO8g==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.addon.LoadApi.js", + "size": 3497, + "integrity": "sha256-kP28bFDFUA5AK9BqqBsccNU+jzHC2q6rH0ALnrwOyO4= sha384-61P6R68aQ8qzziNYgieIKt5JvgfePpFJxDrc2BI3pP89QNPI7E+tlP+tAS/vG7Rt sha512-3/U1U8M60SPVi/NXnaH6I5Gk+n0UlmRhnTfqrswbrlAuUQGi5KO/Fd5nJlD+JkNSwmWWA3mxungHsM1xbkbh0A==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.addon.Panorama.js", + "size": 1723, + "integrity": "sha256-cjft3SNHDLgYmaMncQzf58o2METLh8EFgyfNuQWi87g= sha384-yBLusEM6TukFyMOC8sTAFe7ibxUSZXY1qhZpbKmgzlIz3lFA0VpBalt9oqRgh1pJ sha512-uvflUlJY1ynEbiISmd71u+zzKUagHDimGrhd3YODFlZRjdmeFtDNKdzuqWwpYek3M8f0/ZvJPLSR6lSXlm/PKw==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.js", + "size": 5084, + "integrity": "sha256-X7juLrL5tK/yXV19jyYFBALH2eS9dKsPumdNWzsd51Y= sha384-wDaZPD7wcLFtk7/saX0XZnrTVDaYOj9JfNGbRru7caAqkTXd9NBb6M6b+iw26EN9 sha512-CtJ5MXMtBVpOVXM29Y8CVFT8S/UOurQT/fNUkIaAy9g88cYwzGi9y1T2HNBn1ApkP33qrKXwK9WVVTd81ipSvg==" + }, + { + "href": "lib/leaflet-plugins/layer/tile/Yandex.md", + "size": 3708, + "integrity": "sha256-DAIF9pc0/GEia+Ke6RLCCNNv9Jl7NdWs7Hl19nLQGfc= sha384-M7IMqZuNLbYbh5RhRMxi5SZuctaO3jInWeyYfe8BEVeUucCziSE2iWz//wsR9bvr sha512-iMsBLV1xyi7WvgsYczZyRs3Ph5P6igpdya86ZyQ+om/QFTm/QpHMIqsIDI+39/SjQ42g05N9NfGKoiqcxCvIdA==" + }, + { + "href": "lib/leaflet-plugins/layer/vector/GPX.Speed.js", + "size": 1857, + "integrity": "sha256-GS8BZir+EoTwgScbUX433j6tWMQbhDAPl6GE4M/yOMM= sha384-0g/sLnt8kAiII9OyoAM+yevUemhkRyDxwkeEI1xUgLY/T6izIbeGsjUEgsMgsrKr sha512-2J7LBmZstASTFjfK6Mej6AMHKlTxqg7eW+cf+vWc/GGO7WFzk0ojh+B3khYsB3zW9dKd3jGUnSD5Xbbi4F9Z3g==" + }, + { + "href": "lib/leaflet-plugins/layer/vector/GPX.js", + "size": 4071, + "integrity": "sha256-KUIAmjr6//ydw/xHBozNpwvb98r4dpGvVZ0Q//N/ySk= sha384-Zof3nmYCxi/zofYJWMvLqRmtIU6RKCTtEFHtC/V2gf7zAD3g1ilWvdV4lRVHJm49 sha512-kSOQqBp1rVg4g4t5CsjUGjYucx7G802zKUPgDJMS+DQvFj4SjTw8k3N6IXcwlxSwbQFKx0O0tz1wzUJxoLdvZg==" + }, + { + "href": "lib/leaflet-plugins/layer/vector/KML.js", + "size": 13809, + "integrity": "sha256-uVVAprftV7Qt2wzXkpeUS5CiJh6pc6xb5r6+jfXl/sc= sha384-H4n1ZmdZd9Kjxdw2+WH3O/dPIE6bgWvGIPHoqOsUo8Y2q01+hGjVNmMCuRfF4H8x sha512-m2//vzHcf/a3D6BRFGyzXtgLwvKFcz91ExgB7hqYqqn4+uH8RTMpwIjP94hqfRaWxDuWCutDaiSMTtmYehPf8g==" + }, + { + "href": "lib/leaflet-plugins/layer/vector/OSM.js", + "size": 4568, + "integrity": "sha256-SSDu1J0UA9q0mveMLqLQIEckUNTUX29quSKnxh70YA8= sha384-DPhVcwzGbC1ps2Z7RP0WOZuxacmW+IyTuYCyZPIC6du1zijnHVrG1IxAozjjrWfk sha512-8ds9UOjpFjyZqTSyyHPQ7BQasJViUVIcc0O3UUWVCR2m6qVGIOnrFygYPWJoRLCROT/47AMvg4LLPq+y55UgtA==" + }, + { + "href": "lib/leaflet-plugins/layer/vector/TOPOJSON.js", + "size": 17830, + "integrity": "sha256-KZ/vZZc74PFnFPh9uIHE/rCFn7Y3+7waVvQxtvAwvT0= sha384-j1gwyk9yU3uoHpqx1Z+tDIO+kUjkmPErO+luWjIhkOhpOvFoYQuNnAGoFV7WF6Hi sha512-nUpyXVskvLymYHFYwsj3y4ilnyfF5oAf9PwRtl3WHRxNKOV6Wajv/LjzSiyNM8Mx81O4gvCgJMyXN+pS+W1Zkw==" + }, + { + "href": "lib/messageformat/doc/scripts/linenumber.js", + "size": 674, + "integrity": "sha256-vMEFelUNCGXNj868DnUxt2Im0l1C69+oyrwR8jFMN4c= sha384-HVRjS57v1jL9EAYGXgWCU3VyVoNvtkNHqpkZpqKQUM0KJP25/Wvho/U7vCrOtrp0 sha512-wMQT+ilyfMWGE+hfya4aHTkRssI1sZ4CANq+avFb+SRSfITBRUUxlSgAZC11+ry8dr+eMW2CgVJggPXncHTwEQ==" + }, + { + "href": "lib/messageformat/doc/styles/jsdoc-default.css", + "size": 5162, + "integrity": "sha256-YZ5uqw/eTkEkvOUnoAFpV7kANZfKeE22wGqaw/gb5BU= sha384-6LTS6sVNihuFrhFWu87i6KZJ0wtBN/+zzTCwBhcPLrumbR6I1TXbXQVYvgZvyAFd sha512-8SccADJg5VyqYTfZOjPPKnA3+0MMOemZwu6F07VAKL3RniPMoAmuLAgpsMLj98MM2z/fLqkUnY16kO1cXsw4Jw==" + }, + { + "href": "lib/messageformat/doc/styles/prettify-jsdoc.css", + "size": 1535, + "integrity": "sha256-vKMhVjC6jCQ4kkt4zZfxz3vYWzRSH2hHkoBOB8dOlmw= sha384-nQvFB9OJdWFHa9YRLch/y8R8zgLKatAPGtgmXPi9Zg5A552kHRMNJDZN+gY4vYXm sha512-Jg7L2+qJUF0XAIetCOikHQZB+4SzKEYDmuF6bhfEuhCjXbUYTXk0AN4DaGQSh9XHgkM9gjiXqeLAzPzoLREgXQ==" + }, + { + "href": "lib/messageformat/doc/styles/prettify-tomorrow.css", + "size": 2026, + "integrity": "sha256-zInEqaMwHPE1XRPTqnMP2uZOEEYFQ2zjcasAv2R1nXg= sha384-EG4fku2s8YUSHMNU+FQBKB3pPz24iZqEGKrZHMUNVLq69kkQ8Ghwsmm7afia+BEh sha512-DNQDuSSkAzc46N+QWE3KS1L9bV0TmwsRxFLYlC6kX3SP8nJmMl/33DgpGRmNKkm+TppbqCWXPhhin5iHk2K+WQ==" + }, + { + "href": "lib/messageformat/example/en/colors.json", + "size": 57, + "integrity": "sha256-toBfev0tHMoPYShS/XcdrsSfBRczPHyGRjzLK0MsJBw= sha384-HnFDHODH/uDHO+8Gr4gSCLOUTXnWJvxFX0GkVLQOOVFjA9LDwBBCi10RQ5E6BdPT sha512-VweEZ5ea47/kEXVc7CE7tYFzPr7ml7968KlPfJO6V3C/hshYvTZ2n1mxin279XtNIVxMY8cYnEoOxtGJ5fO+5g==" + }, + { + "href": "lib/messageformat/example/fr/colors.json", + "size": 58, + "integrity": "sha256-zFvLX5C9zqGI+diaBr9Oie9ieC1FfB8nHQeeHxojyUc= sha384-2+d+vyhFlFSH4mZ6/T+K9faLGtphIqnj/VQhkmI7K6CuN52vcXuvFf4X1BfruCmS sha512-CBks3ybZVOllw68rCFskXcO9awO7k0tI7DkuCtjxn3ZuN44Ws0/XENGaa7ANzA+DP/WY3Q1bltRjQBgYx73yEw==" + }, + { + "href": "lib/moment/dist/locale/af.js", + "size": 2149, + "integrity": "sha256-ID4qiKo8fRrHPXOvXwX0XTjeXkqxFnVvmkpetO25ONU= sha384-ji3tzyHA9Z59Q+m/hJki6quJtg7NFOaSVTs0VbC9viiNxJFVYZ9SGRBNlbvGYUfS sha512-EmLY7FUVGiBJR20IKF+lvSndC/5qdGksAIsO4qiVu8i1XjRRJC4hYjmD5+wGAnJbPu//F/1qDIN24EvaEgmSEA==" + }, + { + "href": "lib/moment/dist/locale/ar-dz.js", + "size": 4449, + "integrity": "sha256-nKFR1dMtKu4lE7RvRWOvdTF8tryAyEos3QNtOwWD++o= sha384-9t1Wdcz7/5Yxk7wiikD6VgXbWz0NlMMzDsa0U7q2amTgeudLElgW2BPuRP2L3cPF sha512-HwnZCDYeMWC9UWqvpYUNf322jSMkYcUqd/N8iKS/sHI8DXwcnY3HEhIRQquaJg99DQIO1jA2pbYfN3UTW7yc+g==" + }, + { + "href": "lib/moment/dist/locale/ar-kw.js", + "size": 1934, + "integrity": "sha256-BdtSQz2xzRhN2G6hNidYXKoneEK4A8+tJN2XAOlaPZs= sha384-VfecHSyR0TYoqId/DBWUlwAJ5y8FbYI6x0gaW1gTA0Xy40s6BpeEe3NdE1gK1XWc sha512-PM9lm1ErmnHQQt01iTQByxTluDhVyXAsy+2bkcF+MLvliX/o9gTvLPDP43BDKNZNvq8U7CqAWM29mRJ7n3Dy1g==" + }, + { + "href": "lib/moment/dist/locale/ar-ly.js", + "size": 4648, + "integrity": "sha256-6zNGzGfrJoc3Sr2a+2Q6Z4ehi2ldFxdHtjRswlW+dGo= sha384-4HvraNQfeFAaiPwPXFTI0mXmOni7tsEHakF9Di4l5WoCaCV2XZYdO9buYk0EnmtJ sha512-UbXE8I31Q7QG6at1pXM3JIvWYA1jlhsDoSLvDiSc8GpQixe0FC6xPuqpDx5H2VODICtGmvBRB/gE/3WBi7B6Cw==" + }, + { + "href": "lib/moment/dist/locale/ar-ma.js", + "size": 1989, + "integrity": "sha256-PF4dfahZJlLZVDt8ZoP+U4hbUURKsCasxrGrEVVdQws= sha384-IQJ0O4MKZTMnDVKIfreSqZfjeVMY91R0DSCV9Ry0sumAyARtixnABwhrCov3M91x sha512-0eC8wmc4zC1GnrH50Q5JNKwaVWEGdxVnvDu4SS9QNfenkzGa2Z/EehIXnPNxgLJe6KQrE0ex2L/7oIyWNsxOUA==" + }, + { + "href": "lib/moment/dist/locale/ar-sa.js", + "size": 3042, + "integrity": "sha256-JwyW/eH4JM7oSpzqtVcNIoiqrMgh8oja8uouce2zf2M= sha384-9idg898OXda4wnfD83SX1XMTe8CKuRxW59cDRrPy/q8tMTtVg0U9bS3IeTj0QMsQ sha512-cQM3lgL/opfZ2xm/ZWWFAlmasS5Iw8UDko5WfVIhnsh+qM3s6rgmivoyuTaxj8hsqQqcxlTtsILVQYUhDWybwQ==" + }, + { + "href": "lib/moment/dist/locale/ar-tn.js", + "size": 1936, + "integrity": "sha256-58+nPc55bF6RWU9EdPqB8j8E8fPLdEyLz0WsySMeLCM= sha384-zg6TyrAA29OGMn0+A8TzP9oHs1JVnVz67mHV6O6NTY19rE3cEXktRJky3m96hMy3 sha512-TEob86Y7Xe9Y7z7qK7X/fVT7gwORpe/W7ld98I9tjZvmXaxjAsW5yExO/h0vyqhrnYsLFo7Jdd/Mv9JTxjgvUg==" + }, + { + "href": "lib/moment/dist/locale/ar.js", + "size": 5072, + "integrity": "sha256-52hO5hIT8tf+4CaeCkm0LjqC85EZPPRpq5gIQsts8Ck= sha384-fMCqQLvF5TiILdZgSQMo4Iyj2KEmrXp9Is1Vi7rLMrMiyURxCtGyb5ucBNyOVaCF sha512-AE6/wk4JSafGkOcHpBi1HNDIEaMkr2nt0gvlLVXRtyZ/N9eAACOyXplLTT+fqbHcClZHzUOl5K41da9p5sTy4Q==" + }, + { + "href": "lib/moment/dist/locale/az.js", + "size": 2846, + "integrity": "sha256-VM3eQ43i9d1/8d22hB+uejpmsID/YhZULKZJU4GnFcg= sha384-0xKb0PD0mIlmKubtJ9G4G8CBjQn7/zU3uwUDE48SKfY2t6xBf4fjBNFjWzIn1SgD sha512-lVyzysnThzGnrWmU/PArqBtSCGYeGcriGY6Zw5wu/F7NhtUqSDFTwWxtih8G3lLrWLD8COIIfP3NhmihsjAE/g==" + }, + { + "href": "lib/moment/dist/locale/be.js", + "size": 5154, + "integrity": "sha256-k718yQf+acNqaov7OuLU0+eHyGfT+h0KV0DD8SGCfoU= sha384-k90NcWEkV5dAl8qiTWxqAa81gBSJQb0Xp3O9A6zn6uihFSih22qowT2vF7r1fo+u sha512-++6kAzGY8PjYsI6sUmORvVbdYpMtL56sTFBC6T5dXQEGicO9BvO2b7UPnseg1IUFI99dsj1dhQh9zUEgD4rSJQ==" + }, + { + "href": "lib/moment/dist/locale/bg.js", + "size": 2955, + "integrity": "sha256-HZw7Feqrq2O8Tmvqfx9i3QwEyXYV468skb2b/M2dypM= sha384-epKT8VEx4oJvc85AWYQ9xLgDlF/dmZNNNITrvI57+CatlQyg2EGJ7eHA3t3ffReh sha512-CtBDqGBnu4xQq6uI8zLY1yA9JEqG+gn0aXfopbBRjqx6kykINWD1GfwfTn5z863s8NEdFfJuzWy8xoU91b9V0A==" + }, + { + "href": "lib/moment/dist/locale/bm.js", + "size": 1784, + "integrity": "sha256-0mTpF4o+d1AHJB+dRk7nu+QuU+4QXiA93PscJLBh6qM= sha384-YUgUMSSrJynveK7YLxnZMXvzgTJMI0L0SDsKsYwjrv5zn+CVPa5VTLp59tRbKj5b sha512-Ce9TrF9e9RfwKf6v7b0Xb9WvsHeqEaX2UzQPbcY5Ob9TexCoCIimOVBhfRw+9CBrqyyb+I4Q95GEaWTKguPLnw==" + }, + { + "href": "lib/moment/dist/locale/bn-bd.js", + "size": 4349, + "integrity": "sha256-Yup7gWJNKpPcI20csfY91koLgUaq+TuVySTFsDcxsfE= sha384-0bttaw9zsXy/nJ8IWnyGssmcksuOkTNleK7i+vpjYi6XN2NySVNNe54ogLoHdczk sha512-g/wsRvTjRmNo1Nr87WBDxkya6Y1XyjDXswt2VV+hSGd5u+K+liaM8sTq2KUHVUaGiuMi5MJwNUEY+7BdHmNHeA==" + }, + { + "href": "lib/moment/dist/locale/bn.js", + "size": 3898, + "integrity": "sha256-QxAYoPKfn4EfpwfJjOqRmPcDnPATUPsarrhV7M+t0Wk= sha384-Ck7XXAlaVFnScIiJvGltg2poBsNjqZ0g1SZdPKZbWqA0QiLKyjL8OSbEgxfYXlQx sha512-3qInpWMXqryY+X0xpycpyAHNTWgLk6Gw9e5AXdFijTy7Uq7MsuzFzNZFPjSHmmMDADf9KfVvfK89ar3lISzCzA==" + }, + { + "href": "lib/moment/dist/locale/bo.js", + "size": 4399, + "integrity": "sha256-cUtU/q7qKSGY8su29uRM6+T8fe7GNns9eMpb699vQi8= sha384-6fxyai/6L7EaHt4jKjlRF8W6dufH7vf87wcXedTynYLnXro46Vatckj+NegdzHUn sha512-jjCfhWDsN5TpCGIcJGsBsvXQ0jGCyFcOMQwCfgAfVyTNEqcQ97pcOBNhy6+MHtVwjxVWF+XGZTKOa+2eLyVRdQ==" + }, + { + "href": "lib/moment/dist/locale/br.js", + "size": 4544, + "integrity": "sha256-24aJxodxwe310oYnMz67ZZ89J/CmtWYdqv4fBtLI2+M= sha384-lHBlgsWE9/h+WkybGIQbGV12RgW9kXMWZv7ZC4NGcM1RwVLIkiKQQEXXX0RdLzPI sha512-Q5SC8xTpbhdo5SkQsPvg+2Yahp56FbiMYcY1Ewhh2VxwJsNCWzFshO7qZ1oNu5JCWGb7B9rYHg2EHX31wN9SNw==" + }, + { + "href": "lib/moment/dist/locale/bs.js", + "size": 4475, + "integrity": "sha256-kY8y0vboMxqYIET247OBp2w2sjPqG5R65Z5r91btzmA= sha384-czr6XqCEI1D3RjEn6/6OW9q7rhlVMfauazC3x5aXulXwVu/fb0a184kMvhMNzI2y sha512-014x/gqrfYxcyaX7Xs17wGXGIu/3x9KlcDvAYAz+XN2iDq4Tantprro0Ratp4DrQq1/EZlDSIiRqHN7O8MuZ8A==" + }, + { + "href": "lib/moment/dist/locale/ca.js", + "size": 3031, + "integrity": "sha256-iz1OxtXloqLk7amo/PuQVTr6dzk99S8zYjb7NHKG+84= sha384-WV4+3uQd/n3MDJ7y62G+Cnusu2rs5FIyUL+eisTORpzZhXEYLom8naJNMJoEQTXB sha512-d2r/XouLYH72LD7V6wAH9VLm5sTj9eHHA6AtFOH8t0T/TCM4raf9HZvhH4yS5n5W7olulSdUoxy+S3jg0Yz0Cg==" + }, + { + "href": "lib/moment/dist/locale/cs.js", + "size": 6718, + "integrity": "sha256-tuTAkg+nmNrqZbCDI/NE8bUNYzJe4jKY9fTtipjXKNM= sha384-XAgF9y+YTsVWtywfSzzE59hWLLCDXbqbXHciAcGjHaCkj7/1Er3w5xMo3ecHQIDu sha512-LGMc1LeVrwruQ6LOycXUdf5KbIBWX21T1vx01vpAvpQnMUCnm6KtHiOcTwPj7k7R69uKvhPZTBFOBowfViIAaA==" + }, + { + "href": "lib/moment/dist/locale/cv.js", + "size": 2341, + "integrity": "sha256-Yd58cg/yHLKtWOhsircqWvIcUtJS9vj1OPTmV+IHqyE= sha384-cO4CX3hGh9M60iMa4/85/ag+wU0XzlX7ghEWUsjV6PIN/BFs0DNMHFgdJYqtrv/O sha512-R2g9epdrl+mCnE5Y7y4DLJic8hTpzO6lRUTKfzAArbtFqcDYirhJjaF2XwDlRQhrJ8XgVsSyzJ/r69YXM58jUg==" + }, + { + "href": "lib/moment/dist/locale/cy.js", + "size": 2834, + "integrity": "sha256-xi+4IghWZpYnWpqE7GwULxR8Ey8dgPsD1MkqxbQ5j0c= sha384-vEUdQluyu4KSEPiJRQ0xDQrnvnIE8rn4EXbeE36D0iPhEvvBlt2CuUMn0/n4hqTn sha512-5HcRBd40wKL3RyXf9KGKkxuaBZyj3WaBMTQbnVW+WgDQ5tp085FdhOuEPEOG6ApLtKk4gpG7YcebdloSS1bq7g==" + }, + { + "href": "lib/moment/dist/locale/da.js", + "size": 1629, + "integrity": "sha256-6Ty7TzLBVYWt5Dgl9Lr7Trl1Z6UQdWxbVPLZdtRrQMk= sha384-ho18WyxEKBUweQqEQtw49R9UZJihzG3+bradwAdyrkTHN2UZ6jVPT4p3PikgTV3R sha512-T2ZDwfhckcV/4RN6qyOOXVTpo3KYxteNAYMxUWOcOTIiZ+twb/lsR5/r/w1rgqhPAn/Zba0eF4k4OSE3NdG9Hg==" + }, + { + "href": "lib/moment/dist/locale/de-at.js", + "size": 2635, + "integrity": "sha256-LHlHIVHcVYFN6mbGCtAFemFDCbY3ocP3WJBxYsfyxqk= sha384-ct/9G2QKdx58VGJpvdkuRRXS/E+86awAz/xOW6hVf8c+UPoEIWsXUQTRxjHpeTfi sha512-mv9Dc8v7+0BwO/E2HNXVuVnDADAV4rbbXgsSBihKXifYekzxYJ5I1eQ/f1il+c5Y6S8Vz+8lnznVHwhFKQsw4w==" + }, + { + "href": "lib/moment/dist/locale/de-ch.js", + "size": 2563, + "integrity": "sha256-w0zR5Fn5ZD5hbXdExq7UXYVt95U7OCFEHv9v/m9tKZI= sha384-h7Xt9qf6/gfLNlA2N3KViLkcfR1KR7EOlkwM6JvT2ke9+q6VoQihU/sT3beeAjwl sha512-QXgse1ToCgqEZb7uC1EvJD22xjDiZdG2Pg6T06cgGLem2wQyxg7zWIfIcwbbf4A5//hsOfj7+PVq9RfKbNqI9Q==" + }, + { + "href": "lib/moment/dist/locale/de.js", + "size": 2562, + "integrity": "sha256-uxJ9GFYoFPO4lzf8TL/1d04JznzFw84ZsJNI2U42pTs= sha384-YddAD4OSsOm6Nx3qCsWgxk5Lz9xAPZYqf0qy7sfbdcIw0aKSB34rX2iDnHBQVaxI sha512-BO0WelXTFO0UHfxCXfuANCJe/u3CImhP96S5MjujdtDEd7/F4ADnyj3X0reMqOwBZ5iQOegNLphwxFyn32pCPA==" + }, + { + "href": "lib/moment/dist/locale/dv.js", + "size": 2464, + "integrity": "sha256-oUPgK4BVDbyQcTeWvQCUlCoN1Y0jRJtx5YRthsm7QiQ= sha384-SbyqyrON3UjSdD2CCsOONOwKWcrLIFpzLwebyEiX+XSxYDPkQLJU6sYmmhwMnNB/ sha512-m8HzZcDRqKgm6BwrbiblCDB0bdtkehTbuo1zTziSInnHRfcPUCKsi6pa7EQIFXvBEhve8yJhQOol6yzKhvFhyg==" + }, + { + "href": "lib/moment/dist/locale/el.js", + "size": 3877, + "integrity": "sha256-bZR73o4ohJYm+GFUsRrlRG5Kjd4PWZA3ycnt1qJeQQo= sha384-ZHNQZyKD5yIgUnemSQ3B8+/OwD/lpdPkDZkxGadzIBQ6mP4QLU4lTqI84xVl6oX6 sha512-I8ux/WlsZzpouwa6yUu44qRmLRJaHice/r00PaNNmYERpRTgswG7hnlT0hSxbwUSVnw0GI9nQmDXmYtRszLYnQ==" + }, + { + "href": "lib/moment/dist/locale/en-au.js", + "size": 2029, + "integrity": "sha256-QJORszvF/B/LYbn+5IvaDjYI8VMj/AaYiuiA6s8CyAA= sha384-YEIHfn717kFPZgJOrMUCpfzkPtiQZo5XOlckneF7t8QYJnNbPg3L+KQOpZEalNyy sha512-J2se2BdpIU1YeAVOekzjpgjhLJRMyQ4XKMMfD7YDSv8brdBIIrssvWJmBSEpaBdVIRQ6UPIgymOEKIG2S5oTJA==" + }, + { + "href": "lib/moment/dist/locale/en-ca.js", + "size": 1878, + "integrity": "sha256-z07H+r8RWTo5gHW2OLsdrDB0d++BmhBoJdOxcJ0qj/c= sha384-k+0fOWtQDyHJEqWp7LyY3QnABhBbEGv0gve7bEhLK0FVdI9aQPjf/ObQ9eV+tVhP sha512-b1Q7SpxM0jXTzHUrgs10I5pwZQl6CfnsDzDBSFfpiWycPU6ek/Q2qKWx0f8eSSUhilizBr4l0dJ8pQ0ItC42HA==" + }, + { + "href": "lib/moment/dist/locale/en-gb.js", + "size": 2035, + "integrity": "sha256-xlKIdljChPPecS/KW8DBLMLZ/HGgNpGovxmarGKuTwI= sha384-PdSJ1davTqOVJYB8HneHJy/iMHmzKlsNl0HL0GGOiK9mBmt3Fq2r9Up1YN6lPmA3 sha512-VQGUZxFSqzA97hypbRQM0kbNk9+u937T+kmDSh9M3Zfo1Qi3u+zANoBxncJtf6j5EJcsHRZ6yp7qlkeiqhMC2w==" + }, + { + "href": "lib/moment/dist/locale/en-ie.js", + "size": 2033, + "integrity": "sha256-IWeOuSeWs1dsltymOzyodanig/BtxW07ALKfKGexRDU= sha384-7oxCQ9tOVFHocssLZ0B1caI3KTfbRTLZCWzWSi1w3z3ZVggU7ZFDLNe2BwIMFxtD sha512-RUv9unffTuPG8z+yb2ZD3LfdITMWI8KcKKz/sQI+QIo2ggG9df3UojGMGtJeOWHvtPDzaaihMwvCJJjWrZLhXg==" + }, + { + "href": "lib/moment/dist/locale/en-il.js", + "size": 1871, + "integrity": "sha256-K69UZxNsKxbLp5YQnFMRvYGwMaC5iVASGyE08SOv65s= sha384-k2D9vBqTtIkMWmBggNT6ehz86JG4hLpzs26jUnYqImJZwA/0VZOg76tM72Zhj0Lj sha512-BGRV3tUQUGiNhUYm3sPjMKvdGj8ujQJ7MJqw0+FIIBZEXbsKe/lchISA6PqrM+jZcMvSf2ak2kqitg6BZ6+onw==" + }, + { + "href": "lib/moment/dist/locale/en-in.js", + "size": 2029, + "integrity": "sha256-4EtW5QlEUWqvpqMISYjsyOS1GR4TrSuzw3YQg76m3ks= sha384-LgsSJmQAUFYQ0kNJsgGoq5xhi4T9QTqjd1vOWY75vF5lLzBeqE68xA/1PvrXrDXP sha512-YfA3sn9oo60QNuTNEhZu9q4dTHgbrJrSQ423Lz8n6okMW2Ze9RNg89W1vxvHsSFqVvLHGRg1/xHf4P8kKYf+Fg==" + }, + { + "href": "lib/moment/dist/locale/en-nz.js", + "size": 2038, + "integrity": "sha256-qrRO+e/Nk1GqKplD2nB/L16j1qn8VckZrs1wQi5zjWk= sha384-ndTvyWLRGekJbA3Vw0ZJY0UnrAkiG4BOxXnPPj5TQyafgw6PMBjlEVN2423bs1Np sha512-rTkk+MfycE193er4YV/UPM/h+0Ek46ZP3d53xXUZV+G/4Jwv+gYlIyvCHGf/8wI5Jtus2PjW73qbKqBlf8YEUw==" + }, + { + "href": "lib/moment/dist/locale/en-sg.js", + "size": 2047, + "integrity": "sha256-UocvMvKj8teU7F7outg5tCMA1kbqwrlUDUVL5hQ9wGg= sha384-AabTTovSEF23nRm+7W6RvBiHTiQXA0bn0mK+rYVdqJ9nN3UpxDTC6G98gG89XjVU sha512-HaPXjUSKEAJ+1k9SweUIfA2HS3RQhpVA+XQumfAeN6TibloFmL4LMwggSk+zjU7JqQ6eFNYQH5z23R+WH68ijw==" + }, + { + "href": "lib/moment/dist/locale/eo.js", + "size": 2338, + "integrity": "sha256-RDIYz2mArvihsyN/wY+RbeK4yEJGthr0Hbw+s07fSBc= sha384-RhCNs798ssh9an+1rY0piJcLpgQBsvlgmIUeyp8t/sTj/GsO+rCorNU2PPx59EIY sha512-a4e/lrIXa3Gl7mUFpK4JTcx2h6z+HWV3DsgAK6HqKmhrHe5VVtDpTsarClNHYmb71QW2ZYKtmTrla4CdgU73oA==" + }, + { + "href": "lib/moment/dist/locale/es-do.js", + "size": 3441, + "integrity": "sha256-qF6CVYeHx+f23LccLf+avYaKdNsff6r8DJP1rmtZ3Jc= sha384-CGA4M27+ioIftVPwumxcy5+FNPWobHaeXQi2I55tunjW/ZrxiVlXTIpdy+itGf4R sha512-EleKhuj3suYnCtrKUoeplGE3n4y+JS/IEx9RXsLnMcKjKAETBfp52o3GQ+U+0zaNwaSH+JFWFnePS1TTkMI5CQ==" + }, + { + "href": "lib/moment/dist/locale/es-mx.js", + "size": 3510, + "integrity": "sha256-U4xmzqsG+2uWNOvAqnKz17agSjC0lsLlPrlMkBS+b28= sha384-Dmunkk+VARPcaFx1LiNGHNL7DFJenfXwaAwY8JFYpHI9CG6OhCmrRxTBlBrNnr+k sha512-Sz7iy9zQjnSeqIAdNG1H146yfPGz1jNjg84A3t7NxemmuMt31ACGwxTMidc6oY9NWzBbOGiNWmnnKG5qunCs4w==" + }, + { + "href": "lib/moment/dist/locale/es-us.js", + "size": 3538, + "integrity": "sha256-592PfUfM4ECwQPVPiTabWNawTC40H0LR/mI5SNAZ09Y= sha384-0RruNdfwdU/X77omDAdT5nYtOKpBCnQlps63nlKF7+5iKv7bz0PWnE780Ht0Qgur sha512-1H2/OLIpYjDdKOFVk4YbpnpDOEo7YLU6u+lQUpmJLW+IicNiX6VJCeFY2jpsiDTFZlaiva652bQjvctXr3JMLw==" + }, + { + "href": "lib/moment/dist/locale/es.js", + "size": 3498, + "integrity": "sha256-tI2QhsAMjnqJaAHSsIfLn7LyOXq2wMTjyis5/DbeG/w= sha384-1l5jKvhkIOjSjhnQ4G7U5cnbV+DwFzHbYEUK+QuVnm7SfcIEoUcy+jG8ksqqyVwe sha512-APr6y7CRIdHxc/aSQakJpTp16Yf9egUhyU+CNA1n8wk4zvOZpgJudMnDg71bRzGyn2Sq7Ph+7+D8KJN4j9SZ+g==" + }, + { + "href": "lib/moment/dist/locale/et.js", + "size": 2631, + "integrity": "sha256-eym2syOUciuXsJfHwWol/qb9wC4hMlJSIf3IdTTTXDw= sha384-gF9ylGdy3mQaC46BRjYKeCBMEj8h/bJ0+ESw7W/lbvxzxpHWjOVtU4x8gGf5CrON sha512-woK85r9QvQqN0NtjaRqlUqERlxvyKCltoxTCvLzFtG01okfEqBrS2ZbhAriiE7rL0HE48SwIq9X/bJsF5OOgOA==" + }, + { + "href": "lib/moment/dist/locale/eu.js", + "size": 1964, + "integrity": "sha256-whLVYaodHTZrSvJVUMtpRHFwTXzu/bhlc8/rAbo7wO4= sha384-cRgx8eKqsw2ZAlx8mjiDsUsgkvkIV568aHqMvI9YyOLEFgK3m9Z4t6db4x6+kYA2 sha512-Kw7gEqAylOjhQfjK9e/TI/rQeQumnajpfz554+ACUB1g7N0YUwXRn1CRlZ/mQ52Ts1IOow7D7j/WhAcJ8BEGIg==" + }, + { + "href": "lib/moment/dist/locale/fa.js", + "size": 3230, + "integrity": "sha256-32AY2T1+uCTxtLV4F1foXssDynS8zqMUNXsdMIXAChs= sha384-HY2zi2l53nbHMX+W4Bf+qDHUUbzbluN9HF3pSbJXSreylI+WfEWHGc7icPqLM6Eg sha512-HT4pYKkryZGen6k9z2a3tHebUhPGjirbe1tFtNlV5npSbsrFODMylMZwKfQopG3e5Y4iIO+WjWYmLX+xEI8MBw==" + }, + { + "href": "lib/moment/dist/locale/fi.js", + "size": 3632, + "integrity": "sha256-ko3H/05rKrXRhtXSLIDsp1umwYJ7Pi6pOX07bf/Nf9I= sha384-erQSgl6sb5HFz0Jb10QhnDb7CqrrINtfziyofkgPCNJkjCw1YRiEy1D2eCNJXnaT sha512-+AO7zn2mCtKOvQFnLrxMIK6xAIZPr866xZ7kDJWEOe/hCksE8Jhsloy6vPwKLhNUVbYOhCcBn2kGz5ByAzVpgQ==" + }, + { + "href": "lib/moment/dist/locale/fil.js", + "size": 1776, + "integrity": "sha256-XPHx4h/4Lv3FNeIjpB5i4TX/t3pViA37DB41g+EturA= sha384-eydLFtdFC7HosNdgJO/tpv7VoJXFaDcnZxjaYQf3c1LWOMgbfSO2yZmNGntTuzy/ sha512-tc9ye2SLM5134UYVAdfAUsTsfndOesAiUvrraXGXHtMqo+42Y2jiRBg/h8c8HqMH4tU/+LKk6TK59rFSkOBJOQ==" + }, + { + "href": "lib/moment/dist/locale/fo.js", + "size": 1772, + "integrity": "sha256-Pj7TxSwoB2uXniIXJUoZc2YNSTVgoB/K5HjECCb/fRI= sha384-UYTCO+2srkF/exr+K1aGZofTRY8u3kyEeAYXSJ09s9wCtkqFf3tmZBLuhQ3Dp6sm sha512-FexOxAvTFZAhaGlTmwgHWrr32oyqS/86hODladtgg1ZHsENni7gAsyh5ovaIwE7v+aZZlEVp/4DRECPLN/070A==" + }, + { + "href": "lib/moment/dist/locale/fr-ca.js", + "size": 2104, + "integrity": "sha256-yU1KZT0qOtJ4AOkYtc5S8ekJh9hc9Tn1oAGLPM+Batw= sha384-7eh3GLjG5pJQjrgq4+2DF73+yBuzP2kbu2EWFEITHejuA6CAsDjdx7cPVGfmvyKP sha512-c0g1dD+urBeGnearZrsQ1iLRp0roO+sa90S7jMClSlLWo9e0wD1KikQMiHG+E+uGht6arYwcY4vWPyrB8l1Bsg==" + }, + { + "href": "lib/moment/dist/locale/fr-ch.js", + "size": 2263, + "integrity": "sha256-G+FuZKqKgx9YeprPorIIxVwZMLnGEQ5axNa4KvRPUfA= sha384-8SDNrVhM3oZKl29ZlSA0+xEmsLIZUOFBRsCeoB0Pf1f5B37m94zohZ8eP9Y8NAnB sha512-3o4CIYfL4YQcppmBE8r9nraqjlZKPK5P/xlNmFJALZnMdE7KTurnMQTUnXCXPXGirKJ6zvWHVhQZiDBY7hQzlA==" + }, + { + "href": "lib/moment/dist/locale/fr.js", + "size": 3471, + "integrity": "sha256-HzCCQcQIHHuS9oduQLWe0oGg7dtSZvCHxGAMyu5UUT0= sha384-buMQC9HUquTxqCbBZTz/hBacbqU5Vt2eEo4XhHEYKWqoWU/WH7Qt2yI/GuCWFyym sha512-V6ijR3ojjg+bEXf7oULEUUSE4lQR8DxXh9iuE+urQEWOT5D80VZOusL+Z+pkxnKcKUr7BlpDGVKls4bbmFC2qg==" + }, + { + "href": "lib/moment/dist/locale/fy.js", + "size": 2275, + "integrity": "sha256-9cExcP59LTISiIXjk/Vu/kMeJnvMdbJrEhwLqUk1mPg= sha384-1AWYCIRL//ROVGHCJYOdPUhzcX+jrRFFQDkx+ueYis/xkG3M7mLuchu/XtMLxjkD sha512-rUamgsXrjenAh2tKoinecvm+kHFLompZol7dZggzm3MLn92tX6LjjeqFxnjLo1MT2tPaPKHMuLdzOxUOV5YVLA==" + }, + { + "href": "lib/moment/dist/locale/ga.js", + "size": 2360, + "integrity": "sha256-qzpHqN94nNxx8sRK/BbN3Wefah4WjbgdpcJySlVd7H4= sha384-WgaUbiQY3+U9KS+eTAwncLhNHV/Nl3VAPNEbpOufFQVE5aGiSW6OVl6TI9mvOPZg sha512-Gn7vK1p0nPqFoBlCL3/B/mheU0Gy6e/d3kKtrwZQtWFym1TKUhD891t2Aku4hY8253jGtQAxOMOEKTr2IW/AvQ==" + }, + { + "href": "lib/moment/dist/locale/gd.js", + "size": 2380, + "integrity": "sha256-luIri7EYcXmjecOFCR5GtKpTDdw5ZGVsX9T+P3098mI= sha384-7Iq2bxOtQHLkDv9i9C8i2lPHNooe8Y3NQByj2rw/ra3bPbAiDDw5Hpl7OE192i8n sha512-wwgJ4fvvpAU4t7BHBnSra4UemT+KsJPLYRBq8FD5LNTuuaS0oR6JF84HqxpqWNfoRQD3ZH4ttGBTuk7usLpZfQ==" + }, + { + "href": "lib/moment/dist/locale/gl.js", + "size": 2347, + "integrity": "sha256-IlyKSDpNBhNoY/oiAvwgeKRT2cDDqn6atazB0MyYXuk= sha384-DjuUHbaCyZKkRSxrCq9o/r/q/phDi0qdhbWebw/BdfVVT1G+nuidHzziLsClshra sha512-9noKCuOfKNNSYQL75u1/B5935B4GwfZdXZlTUgYw6fGF2UiVFxCA5NbOtAM8URMdNlwtz3wr+M48oLBnz/ISGg==" + }, + { + "href": "lib/moment/dist/locale/gom-deva.js", + "size": 5506, + "integrity": "sha256-uknTRyXhKwxMO/fM48NHanYuigzqOoVYnA5ef+j+CYE= sha384-HbD2LRLy3W+O/u+c7kn4BQJkP3hQEhiNb4Ll4P5Z3cduLy2COANf7CzfVzwWz4Ao sha512-mFcGsS8qxXaP6TLCkMVkgII0i6bgnabg0XMBJpreLXMLKn/MTmraqcXRa1OiJ4CJVhAS+9xxOCBW+5SlM8nR3Q==" + }, + { + "href": "lib/moment/dist/locale/gom-latn.js", + "size": 4130, + "integrity": "sha256-hvyPZH18dScsjTTp1CuCtSqKKz2TjykSv+3V8XQwuvs= sha384-vrZ+/PJVyyhJWHo4H5vIC/rtiQOcEdzm+2rwRnZLRF4oCavA8qhu6QS7zq8oBmXH sha512-aYLdoYzCRvewwiS13Y46/wlKnUG7MTnyuQQGTgMOxoljp2dwasmCGw8U4rX0foEHC+gpgi/ICFaVpe+3CJ9OTA==" + }, + { + "href": "lib/moment/dist/locale/gu.js", + "size": 4132, + "integrity": "sha256-/6RZpAp6ZyJ8i6zF7SnPqbOqz40GBLEBYYzerSu11yU= sha384-M9tmAgP9O59WLZDfx7FRTaYsRu/SMJqhseujRlEZW9Zf4m0ioMtqFv6qSRDWXWzZ sha512-n9Lrf//Dcbk14o7yED5QEKAab3T5utLc9P6/U4YiHLnsCAOx23KiJtlXdtx1gjTDEI/F7pV73Qy0M995bxkoLg==" + }, + { + "href": "lib/moment/dist/locale/he.js", + "size": 3211, + "integrity": "sha256-Q6PYXMG5gzpV5HMEAenjJhoAq4YrWnZhcSaOa5zJjGo= sha384-cdMwTMOcuNwfuIqc10PPvFul+GQSPpz4TR2fER0bmE42fiFiy04khFjfyPoi6y9E sha512-Pq4TlPnu0a53FbGp8Za9E/5cjDwzckz0WNNkelcKk4qYT/r86iGys/ECiDRLs303ev0JOb9PBKj+e4zLTiLpaQ==" + }, + { + "href": "lib/moment/dist/locale/hi.js", + "size": 6421, + "integrity": "sha256-FDEl2Zq2jp2q58oqYv3FI+RGn9R/j56xbQpnQ/TqyT0= sha384-j8kWCdEWywWki9SioiHGvdS50mXkkcOyTXrAxltLANZy+eF8w7wdB1ZOH04+HlFJ sha512-zx9FAPCIN0uVSJu4KrAhVgAs7pOLSwhsq/fyKhD6rClWXmEP7W/JEtGGhbPqlCiUMndxmI9lWihhh5fRHZVK+g==" + }, + { + "href": "lib/moment/dist/locale/hr.js", + "size": 4718, + "integrity": "sha256-IRZKFZsKzzt7pU0dv1cPCRMwTz2rJ+8nm8vvbS3yuF4= sha384-vW80yLnxgArDdTK2sXAp75zxAR1LBwiJC3WLRki6SskUSNuNBX+qn+UshDJr3E+h sha512-nch1+uU9OG4YUL5IXC6ubrAQufjzunZ1v5QnCwBPx1ziNsT1JtC9j+yvKMVtQ/X6iwHn48SpTjIqdqsRQXvLGA==" + }, + { + "href": "lib/moment/dist/locale/hu.js", + "size": 3815, + "integrity": "sha256-mQcJiNV67QVbgipSZ3gvsbsA399QkYk2Z0zGLbJQpCs= sha384-0FLi/z8ZVLAJ24o6l8JfpeNgNU65Bhi9sk8Vm3ghRPnrKcQVkoxJKCV9wJoRaRXJ sha512-EL6hz/rVt5hEeYTNnBIeKOWXVYwBSAIe6/wiiuDyOttudiJ2whtayYIp2Vfz8YL/lP1I/YS5f1dDow93475sLw==" + }, + { + "href": "lib/moment/dist/locale/hy-am.js", + "size": 3236, + "integrity": "sha256-OnhIcm3RyNcDC7qvRnttRPZwSAl8o80bE3jYARzjSfs= sha384-aTyM+eMdlooVPtzohlf9/K4080J0GX4m9YFnrlvks9Kjam+QbRBFoaUdmbF3mMrV sha512-wpuTQoic662kPkqHBSNRNGKxLczWYJPD2hFuEwMWfXu54SQQ/xSmEh0HkMpypfcGNyjTb29HKS4hAqAqqWUnbA==" + }, + { + "href": "lib/moment/dist/locale/id.js", + "size": 2375, + "integrity": "sha256-uiRuJKBYvTYvz0eQ49zQwETFtz6QKfDLq1OcFiwj4GU= sha384-1+fFX7swhLHa0Y8HalQqPwrObU39Zbe+b6ZmYQfx56CEx5WdUpxaHIegWPFUQoXy sha512-SMhpCIDSYVSu3Bucamgfe1O6AxRjK/IN/ZCqUZJLI1gm2E+sfjzo4xSWoe8mzOK8VwiDdjS8hxAWx/PRyOY9cA==" + }, + { + "href": "lib/moment/dist/locale/is.js", + "size": 4458, + "integrity": "sha256-KYVpmdzBojz4lKYRzC0vD5f2e4nUzEyNLXPl/zIOmSk= sha384-exMOYKbNJOzpjriAW5Uz4mRulDqvbc7VmY8HIn4G4544r4FBxtSOjgQCWPrIyLvT sha512-Sh/iLMNLVrTrayplCoIbS0JG9jIigyugWscA4IVHmQ2HbqVoxJuTLJ9BN7vLngXwM8JWqxArkK2PCwuV1vtYug==" + }, + { + "href": "lib/moment/dist/locale/it-ch.js", + "size": 1941, + "integrity": "sha256-2avxbu1wNySYC60Jr1bD4Zxl1pc3GBZ90Pf5e1ibSQs= sha384-0/QRwPj+GuetQ4lj7IyfvFjaMNpDvPgUTa2bKxj8rkyFuMR8JbsHB9DZI6jubaT7 sha512-V+fllUvOXsH/VPX7ShjJYetX7GmnCUewQ9tYMo/A2Lzrkp+7oEk6Ig1lXGPhrkFV2M0y+Qt/ka88WaecBwkAbQ==" + }, + { + "href": "lib/moment/dist/locale/it.js", + "size": 3251, + "integrity": "sha256-f0oaT//OMrVQgcw8JOUjmxUicPeiLoYqRIzWyjKBt/8= sha384-ZLV9kK4d8XuSGrKlCxLUR8lp6C8V6jhHCN70yo1sBqgCwKpoWsOqHk/a/ZfYroUi sha512-grrPKTc7PQLtUFaNxUimYZp4pCQoTNl0vlBHc56EZeBo5DhOS0dbHLBKXzn6dTZ5tET54n2XGp4v1hZ738zKCQ==" + }, + { + "href": "lib/moment/dist/locale/ja.js", + "size": 3955, + "integrity": "sha256-SqTmV6BJg58B67/mC5CRm2WE8M55flteX3rXFX4rCiI= sha384-1tZXtt9X8bAAQad4uNUiqZFycgh6jGCFrK04G9BXScTnU0sG7vs8f1oTYxcmTya8 sha512-8TbbkQ6uJ05iYetXw9zWPoc4Su8N9jnOcxvYnmdv8VvLnE0P93T49Tb0deBLYwSnJ2dlieWqiKhiCemRX8KL3A==" + }, + { + "href": "lib/moment/dist/locale/jv.js", + "size": 2384, + "integrity": "sha256-zcSIeiSdKJRqn4+IDWI03arr1pUzuE0FeR9xLi6AF0g= sha384-uYVPbxzPI28+xpTIOcynTXirtsl7FXSnhDeyjNEA3LNl/tajb7XokNSd6qswpdpU sha512-gPEyzzZhbbQik/lOr3yeBmh7cbDi+TZ4xnWa9Hj7LIVE5MYlFxYya0QYBdF691y9LaRxJJKSOqm6W7ZJuOT+xw==" + }, + { + "href": "lib/moment/dist/locale/ka.js", + "size": 3504, + "integrity": "sha256-jssjImixOdMaDW5tpKzOCwWcz9gdcRwOc9sNmOJSTYc= sha384-qulp4CkC/GIs7xV/kihUbLtTQv0lx0X5LYfr54uYXBoATpuxrjBrjpZEeyl1Bhua sha512-lPW/6HFtE41n+No+Owq7fsLOp23CseP1qQlHP8wolqYsgLv+H1vGvy4b7TDtivQ6iAFdRZnD5NoGATmaxcN1qg==" + }, + { + "href": "lib/moment/dist/locale/kk.js", + "size": 2495, + "integrity": "sha256-JloR8zsVmIdUPRHSvTpwByQuXeZbBN74RLc6R/0LJ7w= sha384-hVNKlqJWqr2uqaIyIih617IUCbCiYRDJBk3IoJkUS1pi/EHEyDSLf8YJXVniyL13 sha512-kn8ZuVv5hiRHaz4tqQnAfFEN7pSuitfAQCQOXihvFbBR6aPaHCFBeXJuBSU+n9veKOi9YIrd6EdOL2hHuYCdsQ==" + }, + { + "href": "lib/moment/dist/locale/km.js", + "size": 3362, + "integrity": "sha256-oGeetEi7pF2WU7MB6I6me1lKviPZfJ01N55rUQ5U7ms= sha384-nTD8+DFqFK2FoUOx5Y89r3V9svu4quePfRTVaLtfF26P9mpXRpLxZhvD+yiLuZE7 sha512-JUcbFc9SsoQ+NTIYi+X7ivm5wHdj5LDG2nU+n3BXLBeN7ayzyKUpHwmc9A4D6dr6UiOCbunSrXKptyUwG6jFXQ==" + }, + { + "href": "lib/moment/dist/locale/kn.js", + "size": 4252, + "integrity": "sha256-wDQpzeWsfJy6Oaigd6YOsOP6n8Ghda5eS0Pfkao643E= sha384-PpjB/ZShcbs/u06x1+aUMKAzo7vN4KVU32I+jZEnhCXyZkdTycLZZ8XjaopdtBWt sha512-ClII395pmb+BY8E6RWHeCWtXC/0ZXulx633PMdr96z5oUm/ghjYwR64uwyFmwQaHd72Qiy3mFeWBR8xQZkgFpQ==" + }, + { + "href": "lib/moment/dist/locale/ko.js", + "size": 2223, + "integrity": "sha256-Ak9jvC0DagopWduqD/OOZ/sSeFaVvpeLPwGnz+bog94= sha384-E4yDUBhqY8oDoS9/57PgHYBZ0/eZ/YIyFZJRXFoOvUzEuvonPYRqTY8uSapf+GEz sha512-JzkvVzm4nBGHpC/BfaJZp2Pu/XxWnxkOzPx631+VLAmY21wdNpmKOQC9xhp89lz99aSuOIFj5Tyz8ekUQMJSjQ==" + }, + { + "href": "lib/moment/dist/locale/ku.js", + "size": 3330, + "integrity": "sha256-FRdUpwNDheRg/HdilrShPK2zV2NDlbacMYi6LVpnknE= sha384-i6zFJqF4AnqBjlYwehzK+YqBOvganA+BqVYv0c9b8pzMF+bIHSX0YEaBkzWQ0vAx sha512-jdEJaSS2EG/Ynlq9I7VbanB3VTVmsRt8tlHUyJg/fivix9DGB/ARhwBOb3ftsteqYbvLivX0Tj+7ZqxdocCEQw==" + }, + { + "href": "lib/moment/dist/locale/ky.js", + "size": 2521, + "integrity": "sha256-7Oxt27gt7C7auWR/IhpZQvJ0kMQT6UO+hcXaWdVeLUY= sha384-kAsnhGRepL5B1nnEYDulwI6c84G/MimqhAZykoZNUxxmSBfiwsnYBg2v0FqiFhwF sha512-29KCINmhiRrmaYGywwp+MgG2kF+sYuT1QvHTGq5/GA8XFCrcURzwy/oC96csDXlPwVAFjwxRrxlKvNQMpLZsCw==" + }, + { + "href": "lib/moment/dist/locale/lb.js", + "size": 4269, + "integrity": "sha256-uoxGASi9O/UKkM5MHlDWuwNkeoNBQdcR3TQawXyT7fU= sha384-asoatnJ68b05fhGnfEZD2PqDkMu2l17vc6AaEU40os6I4vpcZEqhFs5FqTnMUKwS sha512-LNeVrRK3Qv6vLo5UADAdohgc9YWaYwVm3gEflJM8u9AogsWARiM7fpWu997V8DmcTAu9g8ZeDGfLLs7xVEirbA==" + }, + { + "href": "lib/moment/dist/locale/lo.js", + "size": 2585, + "integrity": "sha256-kbATNxfqx2NxYsw5670GPOF6kYOEcC35MhbjeRVcE0M= sha384-nc110jayeLEWc+raQNgazAAEXrAet8DkFPqYi/+7ziI0OoVvWbFt/fNs8z1/9BRG sha512-HIef2LXZ8+/1yHHZ+X4QCuZsbR0mS2kyCS+etGGgeP0WDtiUU6ShRHxjRwLsX3mShllaM9Rlr1lKy0mUfilOjA==" + }, + { + "href": "lib/moment/dist/locale/lt.js", + "size": 4005, + "integrity": "sha256-wchALk4t59UXq187b6TRRXc/shGk9DWFwK51USHRgDg= sha384-z9d8NoVjPoAMiO4IpkYpjeH8sRBVTdx453RLW5SpxpkQrTocymPe6ih54H6SCavJ sha512-AO7V7a4vG3xbptdwp5PUzpogR8ZFRhvdySzrzO6KyYsKxBwAkhv1pSGEKSZ8cdPsErviW/5K39acziYiw1xY5g==" + }, + { + "href": "lib/moment/dist/locale/lv.js", + "size": 3449, + "integrity": "sha256-rJmYowfbduv0i4QT8+R0OVXh6ERhaWB86FX3IGwK2IU= sha384-fWxz3h6e/mmo75u5NkdwPl2qBRu+3jwYjUTdDvVeONCfzbBopmgkVEMEhfwGSeHz sha512-bx1BXuZoyeO1bqb1ZkB7B+VtZaXosfpOYAic2mlBlkWhig7Y6jdQMMXR609HvBJO3Kgv05ZjTj4StTpKr5uqfQ==" + }, + { + "href": "lib/moment/dist/locale/me.js", + "size": 3661, + "integrity": "sha256-iXek+VEtmqKPLXhKFzkQECUGOBLz5Q4aQkbkxzPdJ2M= sha384-Yy45WVTdtQGZqMlJgPxYFPBNsjW4mn8XDQt8qV1Q/IKvSmBypJ/mFJJ0aMWVN8mG sha512-/2Bx9QrNMM4PZF6uVbM9ZCDZi2unUxZuKmrHzlZTdIHjqM1gjADM+zLGWLeONUlv76qNrsciF+sKtWDsOwMIog==" + }, + { + "href": "lib/moment/dist/locale/mi.js", + "size": 2023, + "integrity": "sha256-MdZ7lex/UC7tYC8TcMQxgCsEaLVlHEQxc8pFtHKga8U= sha384-GfxccfePQ3fqlDa6awuLaC4oasRjWCGHBlGxIGgk3vzf6YnePSdLVKxVryO8N572 sha512-Nj+zk0puNSsq51v3T4wjlz1RuaRnO/VnW9Dd3Ta6GNf1pxGKHGPGWyHuWFCl80GlyL0fNdzSOBKOIZGek0W73w==" + }, + { + "href": "lib/moment/dist/locale/mk.js", + "size": 3021, + "integrity": "sha256-bTzcxP1yFqk17YChVeHU21AGObMJqv4i7s/JpJ9E3Ao= sha384-WG7CTa1NIbgpRZd85X74XXBNiIaUo+nyd3KEkH/21xN9SpEvdB2ftdBptawfzK0r sha512-pyIldXYNUlngOQWneTcLobqH+ucOAYkN3otdg2iS9zSNgkkaBIfJjPy3aGyEtNUddrcLa7W86BesLpWagTsgvA==" + }, + { + "href": "lib/moment/dist/locale/ml.js", + "size": 3287, + "integrity": "sha256-cb/1qsJGOnuTeCdHccCrrf8w+i37vwRWqOLeQZlgXek= sha384-oFgnts9hYo+NvbVZKWyuLZ+5W8AjGAtcaPURCejcGiYDTa9ecjQKy70qLKt5HP/5 sha512-zqZnmxfLQLhjEkMvefKC/wGejQRFvi3D8qUvCwFDtnLn1M7yS4O7rPxNeKVK/R/RzCjDAmD3lY4tPnK+2tp1Mw==" + }, + { + "href": "lib/moment/dist/locale/mn.js", + "size": 3414, + "integrity": "sha256-NMUnhPockq6VxrLUHbdIAixyV5lMjJPJ8ZE90/GMnzg= sha384-2PN0Z0KgSC+YPrCA0cZILsWSLhY4irFzoI0hJs/m13bm1hF0PbgLmOrQ7+l5s9LF sha512-K5uVMWnmRDr8vz9f/tdEuHI4sgKDZSjjN8Q6iWCkMGipkZdBttmQqSNPunFr2J4CrMrFZXtHmAh/CIhDezLhfw==" + }, + { + "href": "lib/moment/dist/locale/mr.js", + "size": 6574, + "integrity": "sha256-PGz9/DBG4ScAtIonwN5eSuboJdIMcp5tAVLkrSiwjYE= sha384-nwp3hZJeclSMCtLdY0AyUesEV3KWcS8TNclzJ6BadL165V57iFXSqo4wWlS9Spx4 sha512-lYFY2gJ8p0U1NWl+LnW042kujryijVXnhCamreHrK7LwCO3drEj42op05VV2WV19gO3KjI5mlzY4vVjFtYa05A==" + }, + { + "href": "lib/moment/dist/locale/ms-my.js", + "size": 2330, + "integrity": "sha256-IVjp/rY05f17w+DqKsv/O0wHYrz/awnHyY0rdTS/Hj0= sha384-Kr85a623VcIpjEQYt4ajvZ3de3wRrtAuyk1YarGmPYRA9Y2r4t4X84WbiDTgc0R7 sha512-9a+aN4VjHIedykf+BV0g4IBk+MozBGJTfdzGRUorj6NYXM6lBoQHLDuBVW2uiE/NTrYGqAtJ7dB4/NksjFMRHw==" + }, + { + "href": "lib/moment/dist/locale/ms.js", + "size": 2277, + "integrity": "sha256-Ao7ZSM9iGlfN/+8SbuSUtUIBZcBIG6/3mGe9U0lXbT4= sha384-+ogGRdzSOR2nObRkCZ+upG8XOGDt38C4W1nCKZNojE+ZZzQzlnRckz0baaQ6wPXn sha512-CTgSQg+OuSVGy5bFcrO9P78lqmk1QWCRBnOY22jGV3yA3ab6wk44YnFJWbT2TekJQXDWoPq49JZupGpIHYwQ9A==" + }, + { + "href": "lib/moment/dist/locale/mt.js", + "size": 1684, + "integrity": "sha256-AhNiEtBZqR2QuvtKbOZLPOUrdVy3mL+aLhWBUQa+IcQ= sha384-abBcn1+IRI8YdgwSv/IkMMRV0mYDmh4OvPjXF1VWl4ZtQdlknb23zESGlVB7BXqh sha512-QQ/LKRE+rqviAweyHcjWEl6b3Z/so0mAwUueZe8PkaWPcsTsbGo3zB3ds2VmrlDtRi6GjyJLAd2KsWDC5lEwrA==" + }, + { + "href": "lib/moment/dist/locale/my.js", + "size": 3094, + "integrity": "sha256-gv01Uv+dfuMcOD3LyCgl+Bin8dKT84DNSpLX1sQ9iHI= sha384-V2iz9wefGUOSX5mfocHlwoeex3MwoFrLvVdjLRVWbB0cj627cPx7n+W+JIFm9tqA sha512-1cFShuNloM+L5E/yTYN3YaLQc0ZPVEles7nSNEoFDSNZZlDN0UTAPhA3cUOtjhtd94KC7ZxBcn0Zz2qSw4XTtw==" + }, + { + "href": "lib/moment/dist/locale/nb.js", + "size": 1899, + "integrity": "sha256-lo2e8TU3C6t2rYIuz2sOV8PCBwJmh9Dwz4dKcsPglck= sha384-mJIhl+6x+3ePKFFbPlxLItT8tFFjbNwdZScBOHoRN3mfUAgkvaJ2fa3pIh6ZtfQB sha512-tBngVwZB2FaSs1OBku579dYA2xUbTmGpZPkTPutHg5m9MlncqD2KWKekyQxLBR2nPFiVJO2hyKKQJr/Brn/hug==" + }, + { + "href": "lib/moment/dist/locale/ne.js", + "size": 4031, + "integrity": "sha256-Q7fCgoo9tqkyZ57Ya+ivi2lRZx5WZHVipFOw22SbgfE= sha384-jDE0YCN6RGVDpXO8Uqhxk06/c6nFYx8uRTn8UzO8w7I7qfTbPFlJG/HqgFTsM3cL sha512-BXWFckNbaEPOAWVehWmWdZdGX6wo2EhhNwcitB7+Sj8A6kVo1nRxdaCXBfIJsjaQV5mg3nNFpE3OJapF9jordQ==" + }, + { + "href": "lib/moment/dist/locale/nl-be.js", + "size": 3169, + "integrity": "sha256-EWwjdb9NBZ1Fqc34b6Joya/RdUG2wwgYmgVwf9VmUVk= sha384-T460mxtCp+0kwJPT5/v6rmcviMWaDPFaND+/DROjjHv/FQZZgKfMZK3wwtz6hUJH sha512-U+XTks3rfLxZde4uA+Jn71QMpfvnQUNiDaClH3rO50XNmP4lf325Q8bKe22SWOyiTZa3u3vxDDxwX2GEAcwS1g==" + }, + { + "href": "lib/moment/dist/locale/nl.js", + "size": 3202, + "integrity": "sha256-x0hsQ2tVTXRu5tmj423GjIf9VpDvfWdyd0JjSHrj5T8= sha384-4vfNnYTrT/SDfjfc0ey6wC2kOpt8b6xj01FG2RsZv9+LWYUw2YLOpYDWumhABzmd sha512-K+40GvMM7hGiqJpw/88o4FgSJOTj4sU43PV2WbJTAEWQtbHW35WnMqiYQ/ZNuSPGDOpyECM4i+mxPtK8wCVy1A==" + }, + { + "href": "lib/moment/dist/locale/nn.js", + "size": 1828, + "integrity": "sha256-5++f+9F90FH/HlFHm9uTEDgvfy7uNFsehj7m6nGag3Y= sha384-Tz1/hhJJLsAodnHifNWEfthwqzmi2tH4WyLtHeseligCYMb0CK1nPGr/xNQL4r8R sha512-JEhLLUeQpR908UaKc8ZBH48wNAB3rOYEHCcMgLNwRJeSB6bJnH6f+SuULCGOa/3mCKhXV3yU7xqKHLn3MNCEKg==" + }, + { + "href": "lib/moment/dist/locale/oc-lnc.js", + "size": 2472, + "integrity": "sha256-BsJkxS2rv0TIgd1Hr1omhiHXRQ3r4vMEwiF1HiesO/0= sha384-h1227dzMQzeN0dZJxduBPjiliJelEYq3ghQSdUxu0NFo6hz66IF+SAmETIIDdEQ8 sha512-i8vwIylCIvWNY2A7E4ERY1o2HhDU3/SsEGL6U9vgTEEJm27ind9fDP1OUHCBSmzIWPTxFna8wRCOp/P9B4JNUw==" + }, + { + "href": "lib/moment/dist/locale/pa-in.js", + "size": 4198, + "integrity": "sha256-vWa5GF/QxXNXEy03knF6yj/OWm7eMjFv8cfAfQeZ9C4= sha384-bsku6bHwh6/Ae+GlUWtGW2UF22pdwuCiHfSSiFd96KBA1/EVwKW5ASSrSlaCDW6R sha512-E9rEb+lU/wL5+Y6l2Llo1IUIiSuME6Usqw9SS77tqJBN17QDLdFM7MtOCQbWvrnsQAk9du/+u7mqOGdO2Kdq7w==" + }, + { + "href": "lib/moment/dist/locale/pl.js", + "size": 4166, + "integrity": "sha256-S+UPoJNbCcoqQZ8V4DFzU82u5K4D+r2LfBvt7LGzLYs= sha384-VEeva+o04z4ySpHoFP0jZip9jRqGInp4a+G7u1jLXbsbdBITL0IXFCaI8xCNr+pU sha512-25aqsTYdQqGofjDqh7N1gp1HrNTvkRkIh4HJH1pmO9Le3IC5sRgjT08uK1TBMP2lwFD1dhhe2CJu0DDQ6NmHqg==" + }, + { + "href": "lib/moment/dist/locale/pt-br.js", + "size": 1854, + "integrity": "sha256-dCi2c3XLXDzAROdHcV4fIjsutlmLDV41S5Aqk7VqG60= sha384-UqNzW2F+MbgIQZ83ZKpnfnvP1Fiwk4mYSSl0Wqw3Bfer5mmNacLN8MTzCmnpXV6U sha512-Xp0JuMi8aQsd+2SZTNXbOEde4Gi8msq8KUbiQitXqpRW3GPgJnMMIpXKXnkOYYIK4LjYacXJtBwNAh1eJEwdyg==" + }, + { + "href": "lib/moment/dist/locale/pt.js", + "size": 1968, + "integrity": "sha256-YHNxM8rQBjvVw+MfNI7iAUsAuWH5GthQUKDhnLJjblY= sha384-3HZiAnR/XUX2d8N3vK1QrGM7v0Cawm7d1kxqdJVXcgCZooIpxJvV9Se2Uu6Vqk+u sha512-gIykeb6u0cPA05dXcZFZbvQe3aG8VI75UKXcQNQqvDAJLpBXAM91XjBhUHW5H5U6XpsYcB3aBV6afUbFnl6+bw==" + }, + { + "href": "lib/moment/dist/locale/ro.js", + "size": 2319, + "integrity": "sha256-dRUqLY0QZnu7FGr01lo+Wcaoj/g4YJf4D3bnU99QeyQ= sha384-MImws8oDOgKYSY+3SJK1xbX0gX277eSoSMTB4g/hc7M9+5w+lMsxtQW9qAUR5n2H sha512-xwig5ZLqO75wKEf2kzSTatEANLfcHYgHMGXVO4s1DgAWFCUico5vz2cIJaHT1ItfoppHiQdFeVLiYk0QqI6DKg==" + }, + { + "href": "lib/moment/dist/locale/ru.js", + "size": 8418, + "integrity": "sha256-6INkpXAAueEZBSerKhIDaEY0kdbZHg7cnaYjOubQYSA= sha384-jfW8SRRUpQQ2DrDMe9yB38I9tjCbDoRb8c3n6mA4TmGw1hMhKnDthJQDukCw+A64 sha512-wKYklBQUCHx9Cin2TDhv3E0xr5nah/+tvdSSgUTVQ4uV3HlpSgEFolj7Wm09hInVx7hmF9Q1L1SyUaIZxf9szQ==" + }, + { + "href": "lib/moment/dist/locale/sd.js", + "size": 2153, + "integrity": "sha256-R6YYQhf8/beb6MgQHiS13hkOcH7KZgzOvfwr0GywGXU= sha384-dKG2X85rtWUXXqPZPe8L9P00U0TUuquxhXcFbwHp1Sj+qeL4GPugRNo2zr9HAVG5 sha512-hJnawlkwFmxN0b/SmqqBc+wY1fBD2mJ/hKUmmYP5NhbGvfRP4ZZzG2UHze/w6nfVl/B9XuXYXhur+mbCv/+giA==" + }, + { + "href": "lib/moment/dist/locale/se.js", + "size": 1849, + "integrity": "sha256-LQoN43is/HrYCZGvjYAaXC4ytpwYq5Oq8T30ZCAtFeA= sha384-fy7p7iXtfB6QLBiE9jHplkFHDgaaoa2Dd7mPCjuhs2LxVXHdUHwNdHhbBH2t0Wiq sha512-fnKWlEgfcRY52QfpIHR+j2b3qf1HcyIuIvk6SrSrksV9Kup63GKVb7byBuESzluU7YOUzhBgCmDt6kp6d8tw2A==" + }, + { + "href": "lib/moment/dist/locale/si.js", + "size": 2681, + "integrity": "sha256-Xu/ObYVABSlNcI+BWeyyVk6Q1B1pezi+r1DaIKhmxlk= sha384-Q8/6cAHzfs82PW8UxyPBIIfxQgqNfH4YJS6PwBHkLic6HDA7WkTqdHFi4cXNexzU sha512-N49YIbNpk0ChRDA9XMio77xQG9YvyuSoXZbeZijcAnzjngRtu26rj0oQXjeAT04+CdR5iN5LWIpgKHFCVPQsSA==" + }, + { + "href": "lib/moment/dist/locale/sk.js", + "size": 5173, + "integrity": "sha256-skbl7kjpxss0jejnouuCxTTJNj2EJwjcTrMOz4nvets= sha384-hPuIgdSzywSBe0zRaZIlmXjYzy942ejIWgA3rC2Q2NoViQKA40JAWtjPyjFqwOCF sha512-/p0LKVameCqLBjiNxpAUQvRMl3dt4Sa3G36exqWJi/n4xdIoeIToVervnVgmbm6s2b+0Ekbos+amsUbm0oIHbw==" + }, + { + "href": "lib/moment/dist/locale/sl.js", + "size": 6115, + "integrity": "sha256-pPTlNYLvzzgrBybn7DU5pOtR88QVR7JhgTLPlKRkZBY= sha384-YRkc8zXDG7EL5gzQG53yBXXf+q9VliC4i8jHxtl+cQQXiPXJ/lpShcVrz/gnft+r sha512-Od4S3BkTKactE8HXLynF7R0tWjTMYENRUM6y9IYDgFJr5knbdSwXsGU6K0dCo7ATg4F7eBCwd8rZrTja/uMnjg==" + }, + { + "href": "lib/moment/dist/locale/sq.js", + "size": 1987, + "integrity": "sha256-kQm21NDs0cYTREgRSI4qFgfH1qodPmrPSlrSy/6ItF8= sha384-NZ0nj6Log/W9Ma/iugUl8tJtomAPV6CpcE2ZlP2dobcwCsbJbgrIqv7LNw8qyiNo sha512-2wgSZRTK4ZZxRhPHXGl9ZP6oYu8YP63mF+WVi/hxIw7+HY/Yigd1R/STGc94g2s8wZoe2ILmmzw8HVffZDFfMg==" + }, + { + "href": "lib/moment/dist/locale/sr-cyrl.js", + "size": 4762, + "integrity": "sha256-W42JY1uJYwjFAv+PInRrnBEAmrG4TVqdtbI8ztJww1k= sha384-/s7LmXebkOWjgKVvALP0mK6qnAwmJdgRZ7OJ9Je9TSc5t9Ot7AkjP5UaFHiBzZHm sha512-zYvn09a6Xwnwn06lIDLgO6rF9V8xwK8HqpzbxpdPNi67PJVm86BWTej6fVJBeqVB08Bt1dko3riLz0XZJAkjbA==" + }, + { + "href": "lib/moment/dist/locale/sr.js", + "size": 4209, + "integrity": "sha256-DfqkLiqddzSUvapFjq1gXHx6F8yAiofQHmrH1ReWjkU= sha384-UjujNMuZ3b1yiDy5UeeRlzwtCjo8t4BYaomM4+43cymBySIGUH3GsoXeYHVD/6VW sha512-Fvsi2wyVJtROk92NXSlTv4503tg8zEIhMlwQ/mZN2O8leGunhcK7Q8SKZeSCQ1eVkUpqZ+JfQnERLYfhTMY/qg==" + }, + { + "href": "lib/moment/dist/locale/ss.js", + "size": 2572, + "integrity": "sha256-Cj4/tLUWoHI/vp/akeZdeg/howB/zyST3xQVwZUMR/M= sha384-PJwn2ZPXOymIA0a0w/8HjbLUbLTMJFkArrWYTk3N5F6CICvkPZPYlqYQVXSjWa99 sha512-KPM4E6tO36PFM6jO0XbOM0JfT3rGngUkc4IKjWuz8dc0L6vBXWF6auV+bdg3XxHZLgBfvlsiM3NJDXbcoG+/Dg==" + }, + { + "href": "lib/moment/dist/locale/sv.js", + "size": 2066, + "integrity": "sha256-ha2F4ratpLQPyvs8j2mnSFrtXWdhtTIakBj0eo5tbY8= sha384-cKZMVLULq4qmEmt1A+zLGZ1gfaJROZlZp6nUG5sYHEFxRpod2xU0Ci/rr+jciYMX sha512-xk/0+pEYZCZT1R2hPO/nz9uBU+TvFC118YAsjEYvQtH/Yj3oR4MHwTuTQ/84MPqRpi3kZcXlF8pkHi/9nX9wgA==" + }, + { + "href": "lib/moment/dist/locale/sw.js", + "size": 1651, + "integrity": "sha256-g5m+A02gx5/eVfFW17EjGobQkhihcayXyGjtshMmbOw= sha384-vaVcuYK3tsB/xmbVwNKZCtvit6PG+lnIpob6oL/2Or09nWhd+76P9IACtPDw7TAQ sha512-jW2tWpO2qavTAn9y5Ly4jilrDTlPL+U6KdH8zXNicPUZJfcET9BKFB2/gZ8eribQlwAWHzB/K8iugLWhYE1GtQ==" + }, + { + "href": "lib/moment/dist/locale/ta.js", + "size": 4800, + "integrity": "sha256-3ykC0hTtS8phDDIwHonaUycK3I4moA2oemiiRLqQ6PE= sha384-M4ktIkxcIlMMowRpKH59Rf8z5xUw2/mcyAtcqFfM/8SW9oEhWpZGhsAZxz7JzH2z sha512-p4u5+bYIH2/Uq2C4UWn7DxbXr4kQL3qrcjozr0fEDqJFH2ZyDxOC7J2lPkbiMEYwH4v1qdbaz36H5CRtryB2YQ==" + }, + { + "href": "lib/moment/dist/locale/te.js", + "size": 3392, + "integrity": "sha256-4DEte+LZEpLU3miOYSpohBNUZqjVsDkaWHf2hT3SSm4= sha384-cbfTWqyMLQBUEuQoSUnysAe32jFRIF4vUWFUeDgCmIurXbJb72nlHXRAVfNaFldh sha512-KGWdnVcBQvM2BXW4grYJ/Kj96091qnrBEyguVhHqlA/KDiqRQ2ec0z1cPTAs12oo3Qq5kXhjBqNwhBs/vl1n5Q==" + }, + { + "href": "lib/moment/dist/locale/tet.js", + "size": 2155, + "integrity": "sha256-IdxCW8OT5ZqZr6SCMyxQhnO4a0vic72FTydbiMCOw1Q= sha384-x3EDItX8uW/OlcUahI+I63qlCm+Fucfnl5KCo+H789Uw7Yzm7YbM03T964JTzTUq sha512-tCrHbyWEqmjfVXxU3Qhamiy5CbhE63DEsDXibfCY6Z5vT6zeTLk7Q/WOrJ1glt9044GIZNQjAnXVkxRHBB23+Q==" + }, + { + "href": "lib/moment/dist/locale/tg.js", + "size": 3604, + "integrity": "sha256-FUXyHqz4DXdCJ5KFSIPEbIVQ2YaZXLBBFmb2ALaxg+o= sha384-MbXO6dbMXALvQ67OJhFL9shmrEM4DUtY7X9gBHXmJ7di4bmt0z0im3ni/sf3YjZk sha512-FqQHzsGJeP7I7+utcgpZjONzE0Excfx7/JPJfjzdqvr1nJQ9bsP+3ng+JM4Iw71p3I1Tn+E7NMvt9+pcOSAJ+A==" + }, + { + "href": "lib/moment/dist/locale/th.js", + "size": 2736, + "integrity": "sha256-GZe7aFcAabXxdc1O2zNJaaB7bK8aV2VkIdCDjRy5Wu8= sha384-Wg5MRkyujhh3aJWyFH52aMNpBnPBe0lZt7Teiix7YLRxp7MSwRsCsnA++BLFy4zF sha512-TxNSQFSbw3er3e6PB1YM+kggPBfo0hglSU9VbbpvEN7+i5ZdPasLutYdnTFeQftvZcheSc2+suGEJlLEFCltSg==" + }, + { + "href": "lib/moment/dist/locale/tk.js", + "size": 2488, + "integrity": "sha256-o63iIqQHM8xkMLDQyCT/hLjDEBsq8mA/62OB+F1LAAM= sha384-gYUHGdk8CRUfoqaCPXIg0YGLL26KUMG4f0jAe01ICg+jm/dbq5bl8HyptKsSOuRT sha512-34XMwEscjGNb5a3mZ0h7dwuJHUKeUmfWftsmjFy1hYiMq+4gn29KFiZE/qIOTAyxz1jzIWibYarQyaqEp1aNJQ==" + }, + { + "href": "lib/moment/dist/locale/tl-ph.js", + "size": 1735, + "integrity": "sha256-wDKq6HMLZzha8VamA63+/PThUjOx7xkwu3aAmxqrvSw= sha384-fw5Qp0e0SxM8q8lndVS8NIVqNLMaA36JZWRFoB61ExRC5hM4EvmnJ3zAkfEv6U9F sha512-IY20Y50G9Ls7/G6UorJbgs/M8QWAm6I2hEt/jcyDo5ISQkXIXfsc1Jm0uS/8fGFcM7h3p/ewoxqxu9TJrFhEsw==" + }, + { + "href": "lib/moment/dist/locale/tlh.js", + "size": 3755, + "integrity": "sha256-ltpFotRbI8TBYsQP7cBmUAn3n7DeFTgAhXIy0DvieZo= sha384-3J5KmiIMnLJVZ4Nl9wY8Lkt1fgfnRPYkfU63Ovcw2AMuSI2xBRjXC1+Pr37hlaCv sha512-CxziUekpRlq7YbcFWbiItGd0pp4kqL3Rkcp+T+xgMItboiramC/IqdErRWXXI/USCfIdGR2C+vn8KdiZDOoCsQ==" + }, + { + "href": "lib/moment/dist/locale/tr.js", + "size": 2927, + "integrity": "sha256-ruPkOcgqqoDllRcYip5t7fmD0F5x65dWobQWjwAiJLE= sha384-O+Yj+UWd/KH7tpwP/NduBnDNJlor+jIiScRpjM7TPOAXP2kxNfhKywx00ApfUlQL sha512-icdB4tH5UHVC7Q6zSqwJ8w7rTyN7OUOmZ7ZoPxM216HgY/+TQWxCP3T3U5TpHUCk3a+YjcshaF5jw2bqqsfj2g==" + }, + { + "href": "lib/moment/dist/locale/tzl.js", + "size": 3109, + "integrity": "sha256-GoYnyGnV+BXAndqRsliPPfnmkiliZ/W8ZmH6OZjxwPo= sha384-/E9Vu0SzYM9ZF6aRXaXLRA7F7okwf9HjKOLteVmnHGiGa0FjzNVCmhXgzzCun3Wm sha512-y/A8Z/VWpWHtjzm0+wLc5ZwZTqBAzajA08HVFWxRdbkL4ZxdKlvbVMdbUREDJYuOAhq3DsIrtGiCOdubhdPYfg==" + }, + { + "href": "lib/moment/dist/locale/tzm-latn.js", + "size": 1691, + "integrity": "sha256-G5ptT2U4+1UwAULxKW9bTHmv9tdhq7PtOVkDOoE/BwI= sha384-CaKsC6KkIEHXTfIICFnpqSNckALS8FTYry85d23gv8hXUy7/qbdjBpPJ1bnRo+JN sha512-ZwkSNY7Sk3d4k373d7YlzzyqwoopdI+jY/S2aWHzuRmnl2V/b0KR98NfwMWgSc/Ggq1xhE6/w6TNx0KJ7/miWA==" + }, + { + "href": "lib/moment/dist/locale/tzm.js", + "size": 2322, + "integrity": "sha256-0TnAs0AbkhhjFI9Wfu78V7LKMIiBKtvFjMnQnO/0Pd8= sha384-VsyDHA4LsZelvg46eMY2VcLiFFYgW5zpSWIFbsqiCY5DXEDn1Mb3d5vgShOOnZe0 sha512-CIzBtLc0PZMR0VkQ6hJOXboDntVZQmaL6EN5KiqwWuhMul/Z7l2zQI9GKJgcI08/o31Pi8gkch6AuuLrh70JdA==" + }, + { + "href": "lib/moment/dist/locale/ug-cn.js", + "size": 3880, + "integrity": "sha256-hvXl0K8a389FdUmAYXOPINE0sWyQm/nvxAvl+WbZnqU= sha384-GiyUjRGp5rOC58BGRi4evvUoWiuaTqXlNOO5IeXC0bqnGo2nvY9VOL6s1zjoNzvg sha512-AhGFSHt0qu1efjams3Z7bLFIvbrra6GEx7GyClhjj7GsKInmveVf2r6zZYDGcPE9Sn0OjATJGUc0WIJdhOnH3g==" + }, + { + "href": "lib/moment/dist/locale/uk.js", + "size": 5955, + "integrity": "sha256-5nclRm3W5usz/spSVAPQnIs4EugHPmLdxLsGNpuxOp0= sha384-yKmtZWC/VeNsTNLyt7h764WhZR7g2cdzpCAcZv1BXAoVdEZdHZDXXGF+foKBcMSG sha512-bZSwPmNJ/N74UwLUQZVO/zmBrM5yG6tMYBbcXAa+s9pLMBi2X8lNyovhkLIPL6qRNwOAklIYBCTtm5RGs+14OA==" + }, + { + "href": "lib/moment/dist/locale/ur.js", + "size": 2200, + "integrity": "sha256-SHDo7ihwJdd2BzEDgJPMgo8IvpHQsIsFCPkxyaFkU/8= sha384-VVRGuZlTBehf3rHo/MnhaguWH9qoWrhG0phFRqQrb6S2iWrXiT+onolvwr3i6u8G sha512-gKuAk/XOzCMBME2jLwZXymgVaWtw8o5YYw0TQa4xwkz/h9BbgGtt3+ryejEmOvbVcBvgkQs7FLmnM6JXxmH5Ww==" + }, + { + "href": "lib/moment/dist/locale/uz-latn.js", + "size": 1639, + "integrity": "sha256-zSie2IYLaX0guQGUwvWlXtVOhNQP7hXV1hSMeLHizp4= sha384-nCq7+8z8HnPzHhrX6OnR/oSM6xd/4gDqOc/cVosoz1Jfvpd+NEidueoNKapNbO+2 sha512-YRZ5/zAr2nvBrsjkMrL6G70Mi+NpuIYdMbpu4JIPgyghIlTgtqyNoYDBnXJnUGi6xv1DWgyDtG7LtXAIxMtphQ==" + }, + { + "href": "lib/moment/dist/locale/uz.js", + "size": 1885, + "integrity": "sha256-6bFb0j6Hef6T+jUqBNwzhZMgbNe+tNVtNV+NKRg1/NE= sha384-D1YalLNvh1UOYTufeioh9i2XcxMQ2VSPHSSzRjyxS/fDPmaN5hpuXfpdKfGTH0t7 sha512-2sqp3TlNg9qbfjUOionFMZCEC1+ZJp/dF1bqNTaxaY+glyz8tGJ6lx7rMNwGAgTkO12zCf8os9cGoPTrRx7xzw==" + }, + { + "href": "lib/moment/dist/locale/vi.js", + "size": 2430, + "integrity": "sha256-6ewtAagXHb1xY3v0n2y3DsVSbicFMRTav2B/GqE+2bw= sha384-jl7m4uFWrW8l6ZTDkLAG5Rvzu9AJgmjnmL/fKff4oPrikMNrqphJ8uzLg1fBI8+6 sha512-pFieNmBd088WmSVEEwq3UHzN1ejBgWMFWff1pCgg/xTmyyYoyxvoPJ53Wj8yZCMj/dI5Y53FmdGjEywYSQ8gDA==" + }, + { + "href": "lib/moment/dist/locale/x-pseudo.js", + "size": 2348, + "integrity": "sha256-mfJ/Rebeez8tR+FGu+/XTIgfsflEbfKeIM153Y99P04= sha384-FCFtmQnhSDMQrQEWKGzQdqvEwZeA4smIfEu3EJ0ozzEtRMH9zNe9EZUNuimbz95H sha512-fBYzZTdjKL72+1ibrb8s2wtYkjiMAP0uyp4sgAySeW88TeFYlNdo/Y8jAL2YMXDz7lXfNwv2GP2k4qv0Zm2UdQ==" + }, + { + "href": "lib/moment/dist/locale/yo.js", + "size": 1887, + "integrity": "sha256-VHCjNYcUiG0Ut4l9+GSnoO7Sclv/vd9dPpE/97L3mkA= sha384-Y4Bkn8ojHw6gqgGZzJiIFQhNHcwASD9uL9VzB+/WcjZf+iTk6O61P3OBAQxdkEMP sha512-ikSl7dy9KIZS/Az/aBEMvP5TR0ORQ0IDrxY55joV1v+XDy8KRHx+dcEtKJjsWCR99DJfsKwI4RlW1LkgQkQfHQ==" + }, + { + "href": "lib/moment/dist/locale/zh-cn.js", + "size": 3711, + "integrity": "sha256-n82xcVBq7RnBd29mgzDsQIMJTxgvF1FKoKY4V8kyMq0= sha384-qlhcnhpN1iC6chD7lcL5PdztqkoSQQsMGyat3i6dj9QPQjSlYcHn3NVhciRlKdqj sha512-Mm1OYpArYNnhqM6snbKg5siBhrepG7yCGB8Rbwz1DKJS/u6g0JCnLU3a9St5KEJWpyVBRDwg+ixxYYUEZXmO1w==" + }, + { + "href": "lib/moment/dist/locale/zh-hk.js", + "size": 3116, + "integrity": "sha256-OZbVZmpEyQ8WjmC893BKTzwcy847sUzbo3LHxN5mNnI= sha384-uA8Fin3PqNX8xhDRUSZaEFwTkH1Us7pEkElM+uRwiXN0rcjq6xkIYXnGmyw76fz/ sha512-Ua471UoksDGJRj7WU1QLtKAdyJHPPAtqtyljFa9nZI51CUipQSwD8ycebTOZERZ7HqCNtqwf3/6yPMdm13rszw==" + }, + { + "href": "lib/moment/dist/locale/zh-mo.js", + "size": 3066, + "integrity": "sha256-zLIRaP/z0weTLndtA5TdUYhj8Ic+fxGMkdjx95a0CEg= sha384-+AefynBJ6wqLLNEwmisDZRJol5eoYpdq/HGbVidgdi+u5yjY6tKeuZOle6u6Ks2p sha512-IiV9/MczWJl34n6BqxFcIDaocE48kU/UL75Z5Dvwi8k+3OEd2z+uiUMg5wZB6ooUxNT2H9xir0V3ffPiwAmSwg==" + }, + { + "href": "lib/moment/dist/locale/zh-tw.js", + "size": 3013, + "integrity": "sha256-XXd2MIF+G2y9rJNNQZJKxEB5CJ/9/IB9fVPXtk4fTrw= sha384-DfQMRMLrGijima6MmTDMzYhbga/fMcpRCEpdZaai69FO7Du7OrG3b/kQ2ZsSGzgj sha512-Rr/LAIcy+CJi7+fpHdtHQVPckgOxEgApZfeQHJV/4AAijonnzcTQYrE99fyQFOm6oTco8CzQcmydBL7O5edySA==" + }, + { + "href": "lib/moment/src/locale/af.js", + "size": 2149, + "integrity": "sha256-ID4qiKo8fRrHPXOvXwX0XTjeXkqxFnVvmkpetO25ONU= sha384-ji3tzyHA9Z59Q+m/hJki6quJtg7NFOaSVTs0VbC9viiNxJFVYZ9SGRBNlbvGYUfS sha512-EmLY7FUVGiBJR20IKF+lvSndC/5qdGksAIsO4qiVu8i1XjRRJC4hYjmD5+wGAnJbPu//F/1qDIN24EvaEgmSEA==" + }, + { + "href": "lib/moment/src/locale/ar-dz.js", + "size": 4449, + "integrity": "sha256-nKFR1dMtKu4lE7RvRWOvdTF8tryAyEos3QNtOwWD++o= sha384-9t1Wdcz7/5Yxk7wiikD6VgXbWz0NlMMzDsa0U7q2amTgeudLElgW2BPuRP2L3cPF sha512-HwnZCDYeMWC9UWqvpYUNf322jSMkYcUqd/N8iKS/sHI8DXwcnY3HEhIRQquaJg99DQIO1jA2pbYfN3UTW7yc+g==" + }, + { + "href": "lib/moment/src/locale/ar-kw.js", + "size": 1934, + "integrity": "sha256-BdtSQz2xzRhN2G6hNidYXKoneEK4A8+tJN2XAOlaPZs= sha384-VfecHSyR0TYoqId/DBWUlwAJ5y8FbYI6x0gaW1gTA0Xy40s6BpeEe3NdE1gK1XWc sha512-PM9lm1ErmnHQQt01iTQByxTluDhVyXAsy+2bkcF+MLvliX/o9gTvLPDP43BDKNZNvq8U7CqAWM29mRJ7n3Dy1g==" + }, + { + "href": "lib/moment/src/locale/ar-ly.js", + "size": 4648, + "integrity": "sha256-6zNGzGfrJoc3Sr2a+2Q6Z4ehi2ldFxdHtjRswlW+dGo= sha384-4HvraNQfeFAaiPwPXFTI0mXmOni7tsEHakF9Di4l5WoCaCV2XZYdO9buYk0EnmtJ sha512-UbXE8I31Q7QG6at1pXM3JIvWYA1jlhsDoSLvDiSc8GpQixe0FC6xPuqpDx5H2VODICtGmvBRB/gE/3WBi7B6Cw==" + }, + { + "href": "lib/moment/src/locale/ar-ma.js", + "size": 1989, + "integrity": "sha256-PF4dfahZJlLZVDt8ZoP+U4hbUURKsCasxrGrEVVdQws= sha384-IQJ0O4MKZTMnDVKIfreSqZfjeVMY91R0DSCV9Ry0sumAyARtixnABwhrCov3M91x sha512-0eC8wmc4zC1GnrH50Q5JNKwaVWEGdxVnvDu4SS9QNfenkzGa2Z/EehIXnPNxgLJe6KQrE0ex2L/7oIyWNsxOUA==" + }, + { + "href": "lib/moment/src/locale/ar-sa.js", + "size": 3042, + "integrity": "sha256-JwyW/eH4JM7oSpzqtVcNIoiqrMgh8oja8uouce2zf2M= sha384-9idg898OXda4wnfD83SX1XMTe8CKuRxW59cDRrPy/q8tMTtVg0U9bS3IeTj0QMsQ sha512-cQM3lgL/opfZ2xm/ZWWFAlmasS5Iw8UDko5WfVIhnsh+qM3s6rgmivoyuTaxj8hsqQqcxlTtsILVQYUhDWybwQ==" + }, + { + "href": "lib/moment/src/locale/ar-tn.js", + "size": 1936, + "integrity": "sha256-58+nPc55bF6RWU9EdPqB8j8E8fPLdEyLz0WsySMeLCM= sha384-zg6TyrAA29OGMn0+A8TzP9oHs1JVnVz67mHV6O6NTY19rE3cEXktRJky3m96hMy3 sha512-TEob86Y7Xe9Y7z7qK7X/fVT7gwORpe/W7ld98I9tjZvmXaxjAsW5yExO/h0vyqhrnYsLFo7Jdd/Mv9JTxjgvUg==" + }, + { + "href": "lib/moment/src/locale/ar.js", + "size": 5072, + "integrity": "sha256-52hO5hIT8tf+4CaeCkm0LjqC85EZPPRpq5gIQsts8Ck= sha384-fMCqQLvF5TiILdZgSQMo4Iyj2KEmrXp9Is1Vi7rLMrMiyURxCtGyb5ucBNyOVaCF sha512-AE6/wk4JSafGkOcHpBi1HNDIEaMkr2nt0gvlLVXRtyZ/N9eAACOyXplLTT+fqbHcClZHzUOl5K41da9p5sTy4Q==" + }, + { + "href": "lib/moment/src/locale/az.js", + "size": 2846, + "integrity": "sha256-VM3eQ43i9d1/8d22hB+uejpmsID/YhZULKZJU4GnFcg= sha384-0xKb0PD0mIlmKubtJ9G4G8CBjQn7/zU3uwUDE48SKfY2t6xBf4fjBNFjWzIn1SgD sha512-lVyzysnThzGnrWmU/PArqBtSCGYeGcriGY6Zw5wu/F7NhtUqSDFTwWxtih8G3lLrWLD8COIIfP3NhmihsjAE/g==" + }, + { + "href": "lib/moment/src/locale/be.js", + "size": 5154, + "integrity": "sha256-k718yQf+acNqaov7OuLU0+eHyGfT+h0KV0DD8SGCfoU= sha384-k90NcWEkV5dAl8qiTWxqAa81gBSJQb0Xp3O9A6zn6uihFSih22qowT2vF7r1fo+u sha512-++6kAzGY8PjYsI6sUmORvVbdYpMtL56sTFBC6T5dXQEGicO9BvO2b7UPnseg1IUFI99dsj1dhQh9zUEgD4rSJQ==" + }, + { + "href": "lib/moment/src/locale/bg.js", + "size": 2955, + "integrity": "sha256-HZw7Feqrq2O8Tmvqfx9i3QwEyXYV468skb2b/M2dypM= sha384-epKT8VEx4oJvc85AWYQ9xLgDlF/dmZNNNITrvI57+CatlQyg2EGJ7eHA3t3ffReh sha512-CtBDqGBnu4xQq6uI8zLY1yA9JEqG+gn0aXfopbBRjqx6kykINWD1GfwfTn5z863s8NEdFfJuzWy8xoU91b9V0A==" + }, + { + "href": "lib/moment/src/locale/bm.js", + "size": 1784, + "integrity": "sha256-0mTpF4o+d1AHJB+dRk7nu+QuU+4QXiA93PscJLBh6qM= sha384-YUgUMSSrJynveK7YLxnZMXvzgTJMI0L0SDsKsYwjrv5zn+CVPa5VTLp59tRbKj5b sha512-Ce9TrF9e9RfwKf6v7b0Xb9WvsHeqEaX2UzQPbcY5Ob9TexCoCIimOVBhfRw+9CBrqyyb+I4Q95GEaWTKguPLnw==" + }, + { + "href": "lib/moment/src/locale/bn-bd.js", + "size": 4349, + "integrity": "sha256-Yup7gWJNKpPcI20csfY91koLgUaq+TuVySTFsDcxsfE= sha384-0bttaw9zsXy/nJ8IWnyGssmcksuOkTNleK7i+vpjYi6XN2NySVNNe54ogLoHdczk sha512-g/wsRvTjRmNo1Nr87WBDxkya6Y1XyjDXswt2VV+hSGd5u+K+liaM8sTq2KUHVUaGiuMi5MJwNUEY+7BdHmNHeA==" + }, + { + "href": "lib/moment/src/locale/bn.js", + "size": 3898, + "integrity": "sha256-QxAYoPKfn4EfpwfJjOqRmPcDnPATUPsarrhV7M+t0Wk= sha384-Ck7XXAlaVFnScIiJvGltg2poBsNjqZ0g1SZdPKZbWqA0QiLKyjL8OSbEgxfYXlQx sha512-3qInpWMXqryY+X0xpycpyAHNTWgLk6Gw9e5AXdFijTy7Uq7MsuzFzNZFPjSHmmMDADf9KfVvfK89ar3lISzCzA==" + }, + { + "href": "lib/moment/src/locale/bo.js", + "size": 4399, + "integrity": "sha256-cUtU/q7qKSGY8su29uRM6+T8fe7GNns9eMpb699vQi8= sha384-6fxyai/6L7EaHt4jKjlRF8W6dufH7vf87wcXedTynYLnXro46Vatckj+NegdzHUn sha512-jjCfhWDsN5TpCGIcJGsBsvXQ0jGCyFcOMQwCfgAfVyTNEqcQ97pcOBNhy6+MHtVwjxVWF+XGZTKOa+2eLyVRdQ==" + }, + { + "href": "lib/moment/src/locale/br.js", + "size": 4544, + "integrity": "sha256-24aJxodxwe310oYnMz67ZZ89J/CmtWYdqv4fBtLI2+M= sha384-lHBlgsWE9/h+WkybGIQbGV12RgW9kXMWZv7ZC4NGcM1RwVLIkiKQQEXXX0RdLzPI sha512-Q5SC8xTpbhdo5SkQsPvg+2Yahp56FbiMYcY1Ewhh2VxwJsNCWzFshO7qZ1oNu5JCWGb7B9rYHg2EHX31wN9SNw==" + }, + { + "href": "lib/moment/src/locale/bs.js", + "size": 4475, + "integrity": "sha256-kY8y0vboMxqYIET247OBp2w2sjPqG5R65Z5r91btzmA= sha384-czr6XqCEI1D3RjEn6/6OW9q7rhlVMfauazC3x5aXulXwVu/fb0a184kMvhMNzI2y sha512-014x/gqrfYxcyaX7Xs17wGXGIu/3x9KlcDvAYAz+XN2iDq4Tantprro0Ratp4DrQq1/EZlDSIiRqHN7O8MuZ8A==" + }, + { + "href": "lib/moment/src/locale/ca.js", + "size": 3031, + "integrity": "sha256-iz1OxtXloqLk7amo/PuQVTr6dzk99S8zYjb7NHKG+84= sha384-WV4+3uQd/n3MDJ7y62G+Cnusu2rs5FIyUL+eisTORpzZhXEYLom8naJNMJoEQTXB sha512-d2r/XouLYH72LD7V6wAH9VLm5sTj9eHHA6AtFOH8t0T/TCM4raf9HZvhH4yS5n5W7olulSdUoxy+S3jg0Yz0Cg==" + }, + { + "href": "lib/moment/src/locale/cs.js", + "size": 6718, + "integrity": "sha256-tuTAkg+nmNrqZbCDI/NE8bUNYzJe4jKY9fTtipjXKNM= sha384-XAgF9y+YTsVWtywfSzzE59hWLLCDXbqbXHciAcGjHaCkj7/1Er3w5xMo3ecHQIDu sha512-LGMc1LeVrwruQ6LOycXUdf5KbIBWX21T1vx01vpAvpQnMUCnm6KtHiOcTwPj7k7R69uKvhPZTBFOBowfViIAaA==" + }, + { + "href": "lib/moment/src/locale/cv.js", + "size": 2341, + "integrity": "sha256-Yd58cg/yHLKtWOhsircqWvIcUtJS9vj1OPTmV+IHqyE= sha384-cO4CX3hGh9M60iMa4/85/ag+wU0XzlX7ghEWUsjV6PIN/BFs0DNMHFgdJYqtrv/O sha512-R2g9epdrl+mCnE5Y7y4DLJic8hTpzO6lRUTKfzAArbtFqcDYirhJjaF2XwDlRQhrJ8XgVsSyzJ/r69YXM58jUg==" + }, + { + "href": "lib/moment/src/locale/cy.js", + "size": 2834, + "integrity": "sha256-xi+4IghWZpYnWpqE7GwULxR8Ey8dgPsD1MkqxbQ5j0c= sha384-vEUdQluyu4KSEPiJRQ0xDQrnvnIE8rn4EXbeE36D0iPhEvvBlt2CuUMn0/n4hqTn sha512-5HcRBd40wKL3RyXf9KGKkxuaBZyj3WaBMTQbnVW+WgDQ5tp085FdhOuEPEOG6ApLtKk4gpG7YcebdloSS1bq7g==" + }, + { + "href": "lib/moment/src/locale/da.js", + "size": 1629, + "integrity": "sha256-6Ty7TzLBVYWt5Dgl9Lr7Trl1Z6UQdWxbVPLZdtRrQMk= sha384-ho18WyxEKBUweQqEQtw49R9UZJihzG3+bradwAdyrkTHN2UZ6jVPT4p3PikgTV3R sha512-T2ZDwfhckcV/4RN6qyOOXVTpo3KYxteNAYMxUWOcOTIiZ+twb/lsR5/r/w1rgqhPAn/Zba0eF4k4OSE3NdG9Hg==" + }, + { + "href": "lib/moment/src/locale/de-at.js", + "size": 2635, + "integrity": "sha256-LHlHIVHcVYFN6mbGCtAFemFDCbY3ocP3WJBxYsfyxqk= sha384-ct/9G2QKdx58VGJpvdkuRRXS/E+86awAz/xOW6hVf8c+UPoEIWsXUQTRxjHpeTfi sha512-mv9Dc8v7+0BwO/E2HNXVuVnDADAV4rbbXgsSBihKXifYekzxYJ5I1eQ/f1il+c5Y6S8Vz+8lnznVHwhFKQsw4w==" + }, + { + "href": "lib/moment/src/locale/de-ch.js", + "size": 2563, + "integrity": "sha256-w0zR5Fn5ZD5hbXdExq7UXYVt95U7OCFEHv9v/m9tKZI= sha384-h7Xt9qf6/gfLNlA2N3KViLkcfR1KR7EOlkwM6JvT2ke9+q6VoQihU/sT3beeAjwl sha512-QXgse1ToCgqEZb7uC1EvJD22xjDiZdG2Pg6T06cgGLem2wQyxg7zWIfIcwbbf4A5//hsOfj7+PVq9RfKbNqI9Q==" + }, + { + "href": "lib/moment/src/locale/de.js", + "size": 2562, + "integrity": "sha256-uxJ9GFYoFPO4lzf8TL/1d04JznzFw84ZsJNI2U42pTs= sha384-YddAD4OSsOm6Nx3qCsWgxk5Lz9xAPZYqf0qy7sfbdcIw0aKSB34rX2iDnHBQVaxI sha512-BO0WelXTFO0UHfxCXfuANCJe/u3CImhP96S5MjujdtDEd7/F4ADnyj3X0reMqOwBZ5iQOegNLphwxFyn32pCPA==" + }, + { + "href": "lib/moment/src/locale/dv.js", + "size": 2464, + "integrity": "sha256-oUPgK4BVDbyQcTeWvQCUlCoN1Y0jRJtx5YRthsm7QiQ= sha384-SbyqyrON3UjSdD2CCsOONOwKWcrLIFpzLwebyEiX+XSxYDPkQLJU6sYmmhwMnNB/ sha512-m8HzZcDRqKgm6BwrbiblCDB0bdtkehTbuo1zTziSInnHRfcPUCKsi6pa7EQIFXvBEhve8yJhQOol6yzKhvFhyg==" + }, + { + "href": "lib/moment/src/locale/el.js", + "size": 3877, + "integrity": "sha256-bZR73o4ohJYm+GFUsRrlRG5Kjd4PWZA3ycnt1qJeQQo= sha384-ZHNQZyKD5yIgUnemSQ3B8+/OwD/lpdPkDZkxGadzIBQ6mP4QLU4lTqI84xVl6oX6 sha512-I8ux/WlsZzpouwa6yUu44qRmLRJaHice/r00PaNNmYERpRTgswG7hnlT0hSxbwUSVnw0GI9nQmDXmYtRszLYnQ==" + }, + { + "href": "lib/moment/src/locale/en-au.js", + "size": 2029, + "integrity": "sha256-QJORszvF/B/LYbn+5IvaDjYI8VMj/AaYiuiA6s8CyAA= sha384-YEIHfn717kFPZgJOrMUCpfzkPtiQZo5XOlckneF7t8QYJnNbPg3L+KQOpZEalNyy sha512-J2se2BdpIU1YeAVOekzjpgjhLJRMyQ4XKMMfD7YDSv8brdBIIrssvWJmBSEpaBdVIRQ6UPIgymOEKIG2S5oTJA==" + }, + { + "href": "lib/moment/src/locale/en-ca.js", + "size": 1878, + "integrity": "sha256-z07H+r8RWTo5gHW2OLsdrDB0d++BmhBoJdOxcJ0qj/c= sha384-k+0fOWtQDyHJEqWp7LyY3QnABhBbEGv0gve7bEhLK0FVdI9aQPjf/ObQ9eV+tVhP sha512-b1Q7SpxM0jXTzHUrgs10I5pwZQl6CfnsDzDBSFfpiWycPU6ek/Q2qKWx0f8eSSUhilizBr4l0dJ8pQ0ItC42HA==" + }, + { + "href": "lib/moment/src/locale/en-gb.js", + "size": 2035, + "integrity": "sha256-xlKIdljChPPecS/KW8DBLMLZ/HGgNpGovxmarGKuTwI= sha384-PdSJ1davTqOVJYB8HneHJy/iMHmzKlsNl0HL0GGOiK9mBmt3Fq2r9Up1YN6lPmA3 sha512-VQGUZxFSqzA97hypbRQM0kbNk9+u937T+kmDSh9M3Zfo1Qi3u+zANoBxncJtf6j5EJcsHRZ6yp7qlkeiqhMC2w==" + }, + { + "href": "lib/moment/src/locale/en-ie.js", + "size": 2033, + "integrity": "sha256-IWeOuSeWs1dsltymOzyodanig/BtxW07ALKfKGexRDU= sha384-7oxCQ9tOVFHocssLZ0B1caI3KTfbRTLZCWzWSi1w3z3ZVggU7ZFDLNe2BwIMFxtD sha512-RUv9unffTuPG8z+yb2ZD3LfdITMWI8KcKKz/sQI+QIo2ggG9df3UojGMGtJeOWHvtPDzaaihMwvCJJjWrZLhXg==" + }, + { + "href": "lib/moment/src/locale/en-il.js", + "size": 1871, + "integrity": "sha256-K69UZxNsKxbLp5YQnFMRvYGwMaC5iVASGyE08SOv65s= sha384-k2D9vBqTtIkMWmBggNT6ehz86JG4hLpzs26jUnYqImJZwA/0VZOg76tM72Zhj0Lj sha512-BGRV3tUQUGiNhUYm3sPjMKvdGj8ujQJ7MJqw0+FIIBZEXbsKe/lchISA6PqrM+jZcMvSf2ak2kqitg6BZ6+onw==" + }, + { + "href": "lib/moment/src/locale/en-in.js", + "size": 2029, + "integrity": "sha256-4EtW5QlEUWqvpqMISYjsyOS1GR4TrSuzw3YQg76m3ks= sha384-LgsSJmQAUFYQ0kNJsgGoq5xhi4T9QTqjd1vOWY75vF5lLzBeqE68xA/1PvrXrDXP sha512-YfA3sn9oo60QNuTNEhZu9q4dTHgbrJrSQ423Lz8n6okMW2Ze9RNg89W1vxvHsSFqVvLHGRg1/xHf4P8kKYf+Fg==" + }, + { + "href": "lib/moment/src/locale/en-nz.js", + "size": 2038, + "integrity": "sha256-qrRO+e/Nk1GqKplD2nB/L16j1qn8VckZrs1wQi5zjWk= sha384-ndTvyWLRGekJbA3Vw0ZJY0UnrAkiG4BOxXnPPj5TQyafgw6PMBjlEVN2423bs1Np sha512-rTkk+MfycE193er4YV/UPM/h+0Ek46ZP3d53xXUZV+G/4Jwv+gYlIyvCHGf/8wI5Jtus2PjW73qbKqBlf8YEUw==" + }, + { + "href": "lib/moment/src/locale/en-sg.js", + "size": 2047, + "integrity": "sha256-UocvMvKj8teU7F7outg5tCMA1kbqwrlUDUVL5hQ9wGg= sha384-AabTTovSEF23nRm+7W6RvBiHTiQXA0bn0mK+rYVdqJ9nN3UpxDTC6G98gG89XjVU sha512-HaPXjUSKEAJ+1k9SweUIfA2HS3RQhpVA+XQumfAeN6TibloFmL4LMwggSk+zjU7JqQ6eFNYQH5z23R+WH68ijw==" + }, + { + "href": "lib/moment/src/locale/eo.js", + "size": 2338, + "integrity": "sha256-RDIYz2mArvihsyN/wY+RbeK4yEJGthr0Hbw+s07fSBc= sha384-RhCNs798ssh9an+1rY0piJcLpgQBsvlgmIUeyp8t/sTj/GsO+rCorNU2PPx59EIY sha512-a4e/lrIXa3Gl7mUFpK4JTcx2h6z+HWV3DsgAK6HqKmhrHe5VVtDpTsarClNHYmb71QW2ZYKtmTrla4CdgU73oA==" + }, + { + "href": "lib/moment/src/locale/es-do.js", + "size": 3441, + "integrity": "sha256-qF6CVYeHx+f23LccLf+avYaKdNsff6r8DJP1rmtZ3Jc= sha384-CGA4M27+ioIftVPwumxcy5+FNPWobHaeXQi2I55tunjW/ZrxiVlXTIpdy+itGf4R sha512-EleKhuj3suYnCtrKUoeplGE3n4y+JS/IEx9RXsLnMcKjKAETBfp52o3GQ+U+0zaNwaSH+JFWFnePS1TTkMI5CQ==" + }, + { + "href": "lib/moment/src/locale/es-mx.js", + "size": 3510, + "integrity": "sha256-U4xmzqsG+2uWNOvAqnKz17agSjC0lsLlPrlMkBS+b28= sha384-Dmunkk+VARPcaFx1LiNGHNL7DFJenfXwaAwY8JFYpHI9CG6OhCmrRxTBlBrNnr+k sha512-Sz7iy9zQjnSeqIAdNG1H146yfPGz1jNjg84A3t7NxemmuMt31ACGwxTMidc6oY9NWzBbOGiNWmnnKG5qunCs4w==" + }, + { + "href": "lib/moment/src/locale/es-us.js", + "size": 3538, + "integrity": "sha256-592PfUfM4ECwQPVPiTabWNawTC40H0LR/mI5SNAZ09Y= sha384-0RruNdfwdU/X77omDAdT5nYtOKpBCnQlps63nlKF7+5iKv7bz0PWnE780Ht0Qgur sha512-1H2/OLIpYjDdKOFVk4YbpnpDOEo7YLU6u+lQUpmJLW+IicNiX6VJCeFY2jpsiDTFZlaiva652bQjvctXr3JMLw==" + }, + { + "href": "lib/moment/src/locale/es.js", + "size": 3498, + "integrity": "sha256-tI2QhsAMjnqJaAHSsIfLn7LyOXq2wMTjyis5/DbeG/w= sha384-1l5jKvhkIOjSjhnQ4G7U5cnbV+DwFzHbYEUK+QuVnm7SfcIEoUcy+jG8ksqqyVwe sha512-APr6y7CRIdHxc/aSQakJpTp16Yf9egUhyU+CNA1n8wk4zvOZpgJudMnDg71bRzGyn2Sq7Ph+7+D8KJN4j9SZ+g==" + }, + { + "href": "lib/moment/src/locale/et.js", + "size": 2631, + "integrity": "sha256-eym2syOUciuXsJfHwWol/qb9wC4hMlJSIf3IdTTTXDw= sha384-gF9ylGdy3mQaC46BRjYKeCBMEj8h/bJ0+ESw7W/lbvxzxpHWjOVtU4x8gGf5CrON sha512-woK85r9QvQqN0NtjaRqlUqERlxvyKCltoxTCvLzFtG01okfEqBrS2ZbhAriiE7rL0HE48SwIq9X/bJsF5OOgOA==" + }, + { + "href": "lib/moment/src/locale/eu.js", + "size": 1964, + "integrity": "sha256-whLVYaodHTZrSvJVUMtpRHFwTXzu/bhlc8/rAbo7wO4= sha384-cRgx8eKqsw2ZAlx8mjiDsUsgkvkIV568aHqMvI9YyOLEFgK3m9Z4t6db4x6+kYA2 sha512-Kw7gEqAylOjhQfjK9e/TI/rQeQumnajpfz554+ACUB1g7N0YUwXRn1CRlZ/mQ52Ts1IOow7D7j/WhAcJ8BEGIg==" + }, + { + "href": "lib/moment/src/locale/fa.js", + "size": 3230, + "integrity": "sha256-32AY2T1+uCTxtLV4F1foXssDynS8zqMUNXsdMIXAChs= sha384-HY2zi2l53nbHMX+W4Bf+qDHUUbzbluN9HF3pSbJXSreylI+WfEWHGc7icPqLM6Eg sha512-HT4pYKkryZGen6k9z2a3tHebUhPGjirbe1tFtNlV5npSbsrFODMylMZwKfQopG3e5Y4iIO+WjWYmLX+xEI8MBw==" + }, + { + "href": "lib/moment/src/locale/fi.js", + "size": 3632, + "integrity": "sha256-ko3H/05rKrXRhtXSLIDsp1umwYJ7Pi6pOX07bf/Nf9I= sha384-erQSgl6sb5HFz0Jb10QhnDb7CqrrINtfziyofkgPCNJkjCw1YRiEy1D2eCNJXnaT sha512-+AO7zn2mCtKOvQFnLrxMIK6xAIZPr866xZ7kDJWEOe/hCksE8Jhsloy6vPwKLhNUVbYOhCcBn2kGz5ByAzVpgQ==" + }, + { + "href": "lib/moment/src/locale/fil.js", + "size": 1776, + "integrity": "sha256-XPHx4h/4Lv3FNeIjpB5i4TX/t3pViA37DB41g+EturA= sha384-eydLFtdFC7HosNdgJO/tpv7VoJXFaDcnZxjaYQf3c1LWOMgbfSO2yZmNGntTuzy/ sha512-tc9ye2SLM5134UYVAdfAUsTsfndOesAiUvrraXGXHtMqo+42Y2jiRBg/h8c8HqMH4tU/+LKk6TK59rFSkOBJOQ==" + }, + { + "href": "lib/moment/src/locale/fo.js", + "size": 1772, + "integrity": "sha256-Pj7TxSwoB2uXniIXJUoZc2YNSTVgoB/K5HjECCb/fRI= sha384-UYTCO+2srkF/exr+K1aGZofTRY8u3kyEeAYXSJ09s9wCtkqFf3tmZBLuhQ3Dp6sm sha512-FexOxAvTFZAhaGlTmwgHWrr32oyqS/86hODladtgg1ZHsENni7gAsyh5ovaIwE7v+aZZlEVp/4DRECPLN/070A==" + }, + { + "href": "lib/moment/src/locale/fr-ca.js", + "size": 2104, + "integrity": "sha256-yU1KZT0qOtJ4AOkYtc5S8ekJh9hc9Tn1oAGLPM+Batw= sha384-7eh3GLjG5pJQjrgq4+2DF73+yBuzP2kbu2EWFEITHejuA6CAsDjdx7cPVGfmvyKP sha512-c0g1dD+urBeGnearZrsQ1iLRp0roO+sa90S7jMClSlLWo9e0wD1KikQMiHG+E+uGht6arYwcY4vWPyrB8l1Bsg==" + }, + { + "href": "lib/moment/src/locale/fr-ch.js", + "size": 2263, + "integrity": "sha256-G+FuZKqKgx9YeprPorIIxVwZMLnGEQ5axNa4KvRPUfA= sha384-8SDNrVhM3oZKl29ZlSA0+xEmsLIZUOFBRsCeoB0Pf1f5B37m94zohZ8eP9Y8NAnB sha512-3o4CIYfL4YQcppmBE8r9nraqjlZKPK5P/xlNmFJALZnMdE7KTurnMQTUnXCXPXGirKJ6zvWHVhQZiDBY7hQzlA==" + }, + { + "href": "lib/moment/src/locale/fr.js", + "size": 3471, + "integrity": "sha256-HzCCQcQIHHuS9oduQLWe0oGg7dtSZvCHxGAMyu5UUT0= sha384-buMQC9HUquTxqCbBZTz/hBacbqU5Vt2eEo4XhHEYKWqoWU/WH7Qt2yI/GuCWFyym sha512-V6ijR3ojjg+bEXf7oULEUUSE4lQR8DxXh9iuE+urQEWOT5D80VZOusL+Z+pkxnKcKUr7BlpDGVKls4bbmFC2qg==" + }, + { + "href": "lib/moment/src/locale/fy.js", + "size": 2275, + "integrity": "sha256-9cExcP59LTISiIXjk/Vu/kMeJnvMdbJrEhwLqUk1mPg= sha384-1AWYCIRL//ROVGHCJYOdPUhzcX+jrRFFQDkx+ueYis/xkG3M7mLuchu/XtMLxjkD sha512-rUamgsXrjenAh2tKoinecvm+kHFLompZol7dZggzm3MLn92tX6LjjeqFxnjLo1MT2tPaPKHMuLdzOxUOV5YVLA==" + }, + { + "href": "lib/moment/src/locale/ga.js", + "size": 2360, + "integrity": "sha256-qzpHqN94nNxx8sRK/BbN3Wefah4WjbgdpcJySlVd7H4= sha384-WgaUbiQY3+U9KS+eTAwncLhNHV/Nl3VAPNEbpOufFQVE5aGiSW6OVl6TI9mvOPZg sha512-Gn7vK1p0nPqFoBlCL3/B/mheU0Gy6e/d3kKtrwZQtWFym1TKUhD891t2Aku4hY8253jGtQAxOMOEKTr2IW/AvQ==" + }, + { + "href": "lib/moment/src/locale/gd.js", + "size": 2380, + "integrity": "sha256-luIri7EYcXmjecOFCR5GtKpTDdw5ZGVsX9T+P3098mI= sha384-7Iq2bxOtQHLkDv9i9C8i2lPHNooe8Y3NQByj2rw/ra3bPbAiDDw5Hpl7OE192i8n sha512-wwgJ4fvvpAU4t7BHBnSra4UemT+KsJPLYRBq8FD5LNTuuaS0oR6JF84HqxpqWNfoRQD3ZH4ttGBTuk7usLpZfQ==" + }, + { + "href": "lib/moment/src/locale/gl.js", + "size": 2347, + "integrity": "sha256-IlyKSDpNBhNoY/oiAvwgeKRT2cDDqn6atazB0MyYXuk= sha384-DjuUHbaCyZKkRSxrCq9o/r/q/phDi0qdhbWebw/BdfVVT1G+nuidHzziLsClshra sha512-9noKCuOfKNNSYQL75u1/B5935B4GwfZdXZlTUgYw6fGF2UiVFxCA5NbOtAM8URMdNlwtz3wr+M48oLBnz/ISGg==" + }, + { + "href": "lib/moment/src/locale/gom-deva.js", + "size": 5506, + "integrity": "sha256-uknTRyXhKwxMO/fM48NHanYuigzqOoVYnA5ef+j+CYE= sha384-HbD2LRLy3W+O/u+c7kn4BQJkP3hQEhiNb4Ll4P5Z3cduLy2COANf7CzfVzwWz4Ao sha512-mFcGsS8qxXaP6TLCkMVkgII0i6bgnabg0XMBJpreLXMLKn/MTmraqcXRa1OiJ4CJVhAS+9xxOCBW+5SlM8nR3Q==" + }, + { + "href": "lib/moment/src/locale/gom-latn.js", + "size": 4130, + "integrity": "sha256-hvyPZH18dScsjTTp1CuCtSqKKz2TjykSv+3V8XQwuvs= sha384-vrZ+/PJVyyhJWHo4H5vIC/rtiQOcEdzm+2rwRnZLRF4oCavA8qhu6QS7zq8oBmXH sha512-aYLdoYzCRvewwiS13Y46/wlKnUG7MTnyuQQGTgMOxoljp2dwasmCGw8U4rX0foEHC+gpgi/ICFaVpe+3CJ9OTA==" + }, + { + "href": "lib/moment/src/locale/gu.js", + "size": 4132, + "integrity": "sha256-/6RZpAp6ZyJ8i6zF7SnPqbOqz40GBLEBYYzerSu11yU= sha384-M9tmAgP9O59WLZDfx7FRTaYsRu/SMJqhseujRlEZW9Zf4m0ioMtqFv6qSRDWXWzZ sha512-n9Lrf//Dcbk14o7yED5QEKAab3T5utLc9P6/U4YiHLnsCAOx23KiJtlXdtx1gjTDEI/F7pV73Qy0M995bxkoLg==" + }, + { + "href": "lib/moment/src/locale/he.js", + "size": 3211, + "integrity": "sha256-Q6PYXMG5gzpV5HMEAenjJhoAq4YrWnZhcSaOa5zJjGo= sha384-cdMwTMOcuNwfuIqc10PPvFul+GQSPpz4TR2fER0bmE42fiFiy04khFjfyPoi6y9E sha512-Pq4TlPnu0a53FbGp8Za9E/5cjDwzckz0WNNkelcKk4qYT/r86iGys/ECiDRLs303ev0JOb9PBKj+e4zLTiLpaQ==" + }, + { + "href": "lib/moment/src/locale/hi.js", + "size": 6421, + "integrity": "sha256-FDEl2Zq2jp2q58oqYv3FI+RGn9R/j56xbQpnQ/TqyT0= sha384-j8kWCdEWywWki9SioiHGvdS50mXkkcOyTXrAxltLANZy+eF8w7wdB1ZOH04+HlFJ sha512-zx9FAPCIN0uVSJu4KrAhVgAs7pOLSwhsq/fyKhD6rClWXmEP7W/JEtGGhbPqlCiUMndxmI9lWihhh5fRHZVK+g==" + }, + { + "href": "lib/moment/src/locale/hr.js", + "size": 4718, + "integrity": "sha256-IRZKFZsKzzt7pU0dv1cPCRMwTz2rJ+8nm8vvbS3yuF4= sha384-vW80yLnxgArDdTK2sXAp75zxAR1LBwiJC3WLRki6SskUSNuNBX+qn+UshDJr3E+h sha512-nch1+uU9OG4YUL5IXC6ubrAQufjzunZ1v5QnCwBPx1ziNsT1JtC9j+yvKMVtQ/X6iwHn48SpTjIqdqsRQXvLGA==" + }, + { + "href": "lib/moment/src/locale/hu.js", + "size": 3815, + "integrity": "sha256-mQcJiNV67QVbgipSZ3gvsbsA399QkYk2Z0zGLbJQpCs= sha384-0FLi/z8ZVLAJ24o6l8JfpeNgNU65Bhi9sk8Vm3ghRPnrKcQVkoxJKCV9wJoRaRXJ sha512-EL6hz/rVt5hEeYTNnBIeKOWXVYwBSAIe6/wiiuDyOttudiJ2whtayYIp2Vfz8YL/lP1I/YS5f1dDow93475sLw==" + }, + { + "href": "lib/moment/src/locale/hy-am.js", + "size": 3236, + "integrity": "sha256-OnhIcm3RyNcDC7qvRnttRPZwSAl8o80bE3jYARzjSfs= sha384-aTyM+eMdlooVPtzohlf9/K4080J0GX4m9YFnrlvks9Kjam+QbRBFoaUdmbF3mMrV sha512-wpuTQoic662kPkqHBSNRNGKxLczWYJPD2hFuEwMWfXu54SQQ/xSmEh0HkMpypfcGNyjTb29HKS4hAqAqqWUnbA==" + }, + { + "href": "lib/moment/src/locale/id.js", + "size": 2375, + "integrity": "sha256-uiRuJKBYvTYvz0eQ49zQwETFtz6QKfDLq1OcFiwj4GU= sha384-1+fFX7swhLHa0Y8HalQqPwrObU39Zbe+b6ZmYQfx56CEx5WdUpxaHIegWPFUQoXy sha512-SMhpCIDSYVSu3Bucamgfe1O6AxRjK/IN/ZCqUZJLI1gm2E+sfjzo4xSWoe8mzOK8VwiDdjS8hxAWx/PRyOY9cA==" + }, + { + "href": "lib/moment/src/locale/is.js", + "size": 4458, + "integrity": "sha256-KYVpmdzBojz4lKYRzC0vD5f2e4nUzEyNLXPl/zIOmSk= sha384-exMOYKbNJOzpjriAW5Uz4mRulDqvbc7VmY8HIn4G4544r4FBxtSOjgQCWPrIyLvT sha512-Sh/iLMNLVrTrayplCoIbS0JG9jIigyugWscA4IVHmQ2HbqVoxJuTLJ9BN7vLngXwM8JWqxArkK2PCwuV1vtYug==" + }, + { + "href": "lib/moment/src/locale/it-ch.js", + "size": 1941, + "integrity": "sha256-2avxbu1wNySYC60Jr1bD4Zxl1pc3GBZ90Pf5e1ibSQs= sha384-0/QRwPj+GuetQ4lj7IyfvFjaMNpDvPgUTa2bKxj8rkyFuMR8JbsHB9DZI6jubaT7 sha512-V+fllUvOXsH/VPX7ShjJYetX7GmnCUewQ9tYMo/A2Lzrkp+7oEk6Ig1lXGPhrkFV2M0y+Qt/ka88WaecBwkAbQ==" + }, + { + "href": "lib/moment/src/locale/it.js", + "size": 3251, + "integrity": "sha256-f0oaT//OMrVQgcw8JOUjmxUicPeiLoYqRIzWyjKBt/8= sha384-ZLV9kK4d8XuSGrKlCxLUR8lp6C8V6jhHCN70yo1sBqgCwKpoWsOqHk/a/ZfYroUi sha512-grrPKTc7PQLtUFaNxUimYZp4pCQoTNl0vlBHc56EZeBo5DhOS0dbHLBKXzn6dTZ5tET54n2XGp4v1hZ738zKCQ==" + }, + { + "href": "lib/moment/src/locale/ja.js", + "size": 3955, + "integrity": "sha256-SqTmV6BJg58B67/mC5CRm2WE8M55flteX3rXFX4rCiI= sha384-1tZXtt9X8bAAQad4uNUiqZFycgh6jGCFrK04G9BXScTnU0sG7vs8f1oTYxcmTya8 sha512-8TbbkQ6uJ05iYetXw9zWPoc4Su8N9jnOcxvYnmdv8VvLnE0P93T49Tb0deBLYwSnJ2dlieWqiKhiCemRX8KL3A==" + }, + { + "href": "lib/moment/src/locale/jv.js", + "size": 2384, + "integrity": "sha256-zcSIeiSdKJRqn4+IDWI03arr1pUzuE0FeR9xLi6AF0g= sha384-uYVPbxzPI28+xpTIOcynTXirtsl7FXSnhDeyjNEA3LNl/tajb7XokNSd6qswpdpU sha512-gPEyzzZhbbQik/lOr3yeBmh7cbDi+TZ4xnWa9Hj7LIVE5MYlFxYya0QYBdF691y9LaRxJJKSOqm6W7ZJuOT+xw==" + }, + { + "href": "lib/moment/src/locale/ka.js", + "size": 3504, + "integrity": "sha256-jssjImixOdMaDW5tpKzOCwWcz9gdcRwOc9sNmOJSTYc= sha384-qulp4CkC/GIs7xV/kihUbLtTQv0lx0X5LYfr54uYXBoATpuxrjBrjpZEeyl1Bhua sha512-lPW/6HFtE41n+No+Owq7fsLOp23CseP1qQlHP8wolqYsgLv+H1vGvy4b7TDtivQ6iAFdRZnD5NoGATmaxcN1qg==" + }, + { + "href": "lib/moment/src/locale/kk.js", + "size": 2495, + "integrity": "sha256-JloR8zsVmIdUPRHSvTpwByQuXeZbBN74RLc6R/0LJ7w= sha384-hVNKlqJWqr2uqaIyIih617IUCbCiYRDJBk3IoJkUS1pi/EHEyDSLf8YJXVniyL13 sha512-kn8ZuVv5hiRHaz4tqQnAfFEN7pSuitfAQCQOXihvFbBR6aPaHCFBeXJuBSU+n9veKOi9YIrd6EdOL2hHuYCdsQ==" + }, + { + "href": "lib/moment/src/locale/km.js", + "size": 3362, + "integrity": "sha256-oGeetEi7pF2WU7MB6I6me1lKviPZfJ01N55rUQ5U7ms= sha384-nTD8+DFqFK2FoUOx5Y89r3V9svu4quePfRTVaLtfF26P9mpXRpLxZhvD+yiLuZE7 sha512-JUcbFc9SsoQ+NTIYi+X7ivm5wHdj5LDG2nU+n3BXLBeN7ayzyKUpHwmc9A4D6dr6UiOCbunSrXKptyUwG6jFXQ==" + }, + { + "href": "lib/moment/src/locale/kn.js", + "size": 4252, + "integrity": "sha256-wDQpzeWsfJy6Oaigd6YOsOP6n8Ghda5eS0Pfkao643E= sha384-PpjB/ZShcbs/u06x1+aUMKAzo7vN4KVU32I+jZEnhCXyZkdTycLZZ8XjaopdtBWt sha512-ClII395pmb+BY8E6RWHeCWtXC/0ZXulx633PMdr96z5oUm/ghjYwR64uwyFmwQaHd72Qiy3mFeWBR8xQZkgFpQ==" + }, + { + "href": "lib/moment/src/locale/ko.js", + "size": 2223, + "integrity": "sha256-Ak9jvC0DagopWduqD/OOZ/sSeFaVvpeLPwGnz+bog94= sha384-E4yDUBhqY8oDoS9/57PgHYBZ0/eZ/YIyFZJRXFoOvUzEuvonPYRqTY8uSapf+GEz sha512-JzkvVzm4nBGHpC/BfaJZp2Pu/XxWnxkOzPx631+VLAmY21wdNpmKOQC9xhp89lz99aSuOIFj5Tyz8ekUQMJSjQ==" + }, + { + "href": "lib/moment/src/locale/ku.js", + "size": 3330, + "integrity": "sha256-FRdUpwNDheRg/HdilrShPK2zV2NDlbacMYi6LVpnknE= sha384-i6zFJqF4AnqBjlYwehzK+YqBOvganA+BqVYv0c9b8pzMF+bIHSX0YEaBkzWQ0vAx sha512-jdEJaSS2EG/Ynlq9I7VbanB3VTVmsRt8tlHUyJg/fivix9DGB/ARhwBOb3ftsteqYbvLivX0Tj+7ZqxdocCEQw==" + }, + { + "href": "lib/moment/src/locale/ky.js", + "size": 2521, + "integrity": "sha256-7Oxt27gt7C7auWR/IhpZQvJ0kMQT6UO+hcXaWdVeLUY= sha384-kAsnhGRepL5B1nnEYDulwI6c84G/MimqhAZykoZNUxxmSBfiwsnYBg2v0FqiFhwF sha512-29KCINmhiRrmaYGywwp+MgG2kF+sYuT1QvHTGq5/GA8XFCrcURzwy/oC96csDXlPwVAFjwxRrxlKvNQMpLZsCw==" + }, + { + "href": "lib/moment/src/locale/lb.js", + "size": 4269, + "integrity": "sha256-uoxGASi9O/UKkM5MHlDWuwNkeoNBQdcR3TQawXyT7fU= sha384-asoatnJ68b05fhGnfEZD2PqDkMu2l17vc6AaEU40os6I4vpcZEqhFs5FqTnMUKwS sha512-LNeVrRK3Qv6vLo5UADAdohgc9YWaYwVm3gEflJM8u9AogsWARiM7fpWu997V8DmcTAu9g8ZeDGfLLs7xVEirbA==" + }, + { + "href": "lib/moment/src/locale/lo.js", + "size": 2585, + "integrity": "sha256-kbATNxfqx2NxYsw5670GPOF6kYOEcC35MhbjeRVcE0M= sha384-nc110jayeLEWc+raQNgazAAEXrAet8DkFPqYi/+7ziI0OoVvWbFt/fNs8z1/9BRG sha512-HIef2LXZ8+/1yHHZ+X4QCuZsbR0mS2kyCS+etGGgeP0WDtiUU6ShRHxjRwLsX3mShllaM9Rlr1lKy0mUfilOjA==" + }, + { + "href": "lib/moment/src/locale/lt.js", + "size": 4005, + "integrity": "sha256-wchALk4t59UXq187b6TRRXc/shGk9DWFwK51USHRgDg= sha384-z9d8NoVjPoAMiO4IpkYpjeH8sRBVTdx453RLW5SpxpkQrTocymPe6ih54H6SCavJ sha512-AO7V7a4vG3xbptdwp5PUzpogR8ZFRhvdySzrzO6KyYsKxBwAkhv1pSGEKSZ8cdPsErviW/5K39acziYiw1xY5g==" + }, + { + "href": "lib/moment/src/locale/lv.js", + "size": 3449, + "integrity": "sha256-rJmYowfbduv0i4QT8+R0OVXh6ERhaWB86FX3IGwK2IU= sha384-fWxz3h6e/mmo75u5NkdwPl2qBRu+3jwYjUTdDvVeONCfzbBopmgkVEMEhfwGSeHz sha512-bx1BXuZoyeO1bqb1ZkB7B+VtZaXosfpOYAic2mlBlkWhig7Y6jdQMMXR609HvBJO3Kgv05ZjTj4StTpKr5uqfQ==" + }, + { + "href": "lib/moment/src/locale/me.js", + "size": 3661, + "integrity": "sha256-iXek+VEtmqKPLXhKFzkQECUGOBLz5Q4aQkbkxzPdJ2M= sha384-Yy45WVTdtQGZqMlJgPxYFPBNsjW4mn8XDQt8qV1Q/IKvSmBypJ/mFJJ0aMWVN8mG sha512-/2Bx9QrNMM4PZF6uVbM9ZCDZi2unUxZuKmrHzlZTdIHjqM1gjADM+zLGWLeONUlv76qNrsciF+sKtWDsOwMIog==" + }, + { + "href": "lib/moment/src/locale/mi.js", + "size": 2023, + "integrity": "sha256-MdZ7lex/UC7tYC8TcMQxgCsEaLVlHEQxc8pFtHKga8U= sha384-GfxccfePQ3fqlDa6awuLaC4oasRjWCGHBlGxIGgk3vzf6YnePSdLVKxVryO8N572 sha512-Nj+zk0puNSsq51v3T4wjlz1RuaRnO/VnW9Dd3Ta6GNf1pxGKHGPGWyHuWFCl80GlyL0fNdzSOBKOIZGek0W73w==" + }, + { + "href": "lib/moment/src/locale/mk.js", + "size": 3021, + "integrity": "sha256-bTzcxP1yFqk17YChVeHU21AGObMJqv4i7s/JpJ9E3Ao= sha384-WG7CTa1NIbgpRZd85X74XXBNiIaUo+nyd3KEkH/21xN9SpEvdB2ftdBptawfzK0r sha512-pyIldXYNUlngOQWneTcLobqH+ucOAYkN3otdg2iS9zSNgkkaBIfJjPy3aGyEtNUddrcLa7W86BesLpWagTsgvA==" + }, + { + "href": "lib/moment/src/locale/ml.js", + "size": 3287, + "integrity": "sha256-cb/1qsJGOnuTeCdHccCrrf8w+i37vwRWqOLeQZlgXek= sha384-oFgnts9hYo+NvbVZKWyuLZ+5W8AjGAtcaPURCejcGiYDTa9ecjQKy70qLKt5HP/5 sha512-zqZnmxfLQLhjEkMvefKC/wGejQRFvi3D8qUvCwFDtnLn1M7yS4O7rPxNeKVK/R/RzCjDAmD3lY4tPnK+2tp1Mw==" + }, + { + "href": "lib/moment/src/locale/mn.js", + "size": 3414, + "integrity": "sha256-NMUnhPockq6VxrLUHbdIAixyV5lMjJPJ8ZE90/GMnzg= sha384-2PN0Z0KgSC+YPrCA0cZILsWSLhY4irFzoI0hJs/m13bm1hF0PbgLmOrQ7+l5s9LF sha512-K5uVMWnmRDr8vz9f/tdEuHI4sgKDZSjjN8Q6iWCkMGipkZdBttmQqSNPunFr2J4CrMrFZXtHmAh/CIhDezLhfw==" + }, + { + "href": "lib/moment/src/locale/mr.js", + "size": 6574, + "integrity": "sha256-PGz9/DBG4ScAtIonwN5eSuboJdIMcp5tAVLkrSiwjYE= sha384-nwp3hZJeclSMCtLdY0AyUesEV3KWcS8TNclzJ6BadL165V57iFXSqo4wWlS9Spx4 sha512-lYFY2gJ8p0U1NWl+LnW042kujryijVXnhCamreHrK7LwCO3drEj42op05VV2WV19gO3KjI5mlzY4vVjFtYa05A==" + }, + { + "href": "lib/moment/src/locale/ms-my.js", + "size": 2330, + "integrity": "sha256-IVjp/rY05f17w+DqKsv/O0wHYrz/awnHyY0rdTS/Hj0= sha384-Kr85a623VcIpjEQYt4ajvZ3de3wRrtAuyk1YarGmPYRA9Y2r4t4X84WbiDTgc0R7 sha512-9a+aN4VjHIedykf+BV0g4IBk+MozBGJTfdzGRUorj6NYXM6lBoQHLDuBVW2uiE/NTrYGqAtJ7dB4/NksjFMRHw==" + }, + { + "href": "lib/moment/src/locale/ms.js", + "size": 2277, + "integrity": "sha256-Ao7ZSM9iGlfN/+8SbuSUtUIBZcBIG6/3mGe9U0lXbT4= sha384-+ogGRdzSOR2nObRkCZ+upG8XOGDt38C4W1nCKZNojE+ZZzQzlnRckz0baaQ6wPXn sha512-CTgSQg+OuSVGy5bFcrO9P78lqmk1QWCRBnOY22jGV3yA3ab6wk44YnFJWbT2TekJQXDWoPq49JZupGpIHYwQ9A==" + }, + { + "href": "lib/moment/src/locale/mt.js", + "size": 1684, + "integrity": "sha256-AhNiEtBZqR2QuvtKbOZLPOUrdVy3mL+aLhWBUQa+IcQ= sha384-abBcn1+IRI8YdgwSv/IkMMRV0mYDmh4OvPjXF1VWl4ZtQdlknb23zESGlVB7BXqh sha512-QQ/LKRE+rqviAweyHcjWEl6b3Z/so0mAwUueZe8PkaWPcsTsbGo3zB3ds2VmrlDtRi6GjyJLAd2KsWDC5lEwrA==" + }, + { + "href": "lib/moment/src/locale/my.js", + "size": 3094, + "integrity": "sha256-gv01Uv+dfuMcOD3LyCgl+Bin8dKT84DNSpLX1sQ9iHI= sha384-V2iz9wefGUOSX5mfocHlwoeex3MwoFrLvVdjLRVWbB0cj627cPx7n+W+JIFm9tqA sha512-1cFShuNloM+L5E/yTYN3YaLQc0ZPVEles7nSNEoFDSNZZlDN0UTAPhA3cUOtjhtd94KC7ZxBcn0Zz2qSw4XTtw==" + }, + { + "href": "lib/moment/src/locale/nb.js", + "size": 1899, + "integrity": "sha256-lo2e8TU3C6t2rYIuz2sOV8PCBwJmh9Dwz4dKcsPglck= sha384-mJIhl+6x+3ePKFFbPlxLItT8tFFjbNwdZScBOHoRN3mfUAgkvaJ2fa3pIh6ZtfQB sha512-tBngVwZB2FaSs1OBku579dYA2xUbTmGpZPkTPutHg5m9MlncqD2KWKekyQxLBR2nPFiVJO2hyKKQJr/Brn/hug==" + }, + { + "href": "lib/moment/src/locale/ne.js", + "size": 4031, + "integrity": "sha256-Q7fCgoo9tqkyZ57Ya+ivi2lRZx5WZHVipFOw22SbgfE= sha384-jDE0YCN6RGVDpXO8Uqhxk06/c6nFYx8uRTn8UzO8w7I7qfTbPFlJG/HqgFTsM3cL sha512-BXWFckNbaEPOAWVehWmWdZdGX6wo2EhhNwcitB7+Sj8A6kVo1nRxdaCXBfIJsjaQV5mg3nNFpE3OJapF9jordQ==" + }, + { + "href": "lib/moment/src/locale/nl-be.js", + "size": 3169, + "integrity": "sha256-EWwjdb9NBZ1Fqc34b6Joya/RdUG2wwgYmgVwf9VmUVk= sha384-T460mxtCp+0kwJPT5/v6rmcviMWaDPFaND+/DROjjHv/FQZZgKfMZK3wwtz6hUJH sha512-U+XTks3rfLxZde4uA+Jn71QMpfvnQUNiDaClH3rO50XNmP4lf325Q8bKe22SWOyiTZa3u3vxDDxwX2GEAcwS1g==" + }, + { + "href": "lib/moment/src/locale/nl.js", + "size": 3202, + "integrity": "sha256-x0hsQ2tVTXRu5tmj423GjIf9VpDvfWdyd0JjSHrj5T8= sha384-4vfNnYTrT/SDfjfc0ey6wC2kOpt8b6xj01FG2RsZv9+LWYUw2YLOpYDWumhABzmd sha512-K+40GvMM7hGiqJpw/88o4FgSJOTj4sU43PV2WbJTAEWQtbHW35WnMqiYQ/ZNuSPGDOpyECM4i+mxPtK8wCVy1A==" + }, + { + "href": "lib/moment/src/locale/nn.js", + "size": 1828, + "integrity": "sha256-5++f+9F90FH/HlFHm9uTEDgvfy7uNFsehj7m6nGag3Y= sha384-Tz1/hhJJLsAodnHifNWEfthwqzmi2tH4WyLtHeseligCYMb0CK1nPGr/xNQL4r8R sha512-JEhLLUeQpR908UaKc8ZBH48wNAB3rOYEHCcMgLNwRJeSB6bJnH6f+SuULCGOa/3mCKhXV3yU7xqKHLn3MNCEKg==" + }, + { + "href": "lib/moment/src/locale/oc-lnc.js", + "size": 2472, + "integrity": "sha256-BsJkxS2rv0TIgd1Hr1omhiHXRQ3r4vMEwiF1HiesO/0= sha384-h1227dzMQzeN0dZJxduBPjiliJelEYq3ghQSdUxu0NFo6hz66IF+SAmETIIDdEQ8 sha512-i8vwIylCIvWNY2A7E4ERY1o2HhDU3/SsEGL6U9vgTEEJm27ind9fDP1OUHCBSmzIWPTxFna8wRCOp/P9B4JNUw==" + }, + { + "href": "lib/moment/src/locale/pa-in.js", + "size": 4198, + "integrity": "sha256-vWa5GF/QxXNXEy03knF6yj/OWm7eMjFv8cfAfQeZ9C4= sha384-bsku6bHwh6/Ae+GlUWtGW2UF22pdwuCiHfSSiFd96KBA1/EVwKW5ASSrSlaCDW6R sha512-E9rEb+lU/wL5+Y6l2Llo1IUIiSuME6Usqw9SS77tqJBN17QDLdFM7MtOCQbWvrnsQAk9du/+u7mqOGdO2Kdq7w==" + }, + { + "href": "lib/moment/src/locale/pl.js", + "size": 4166, + "integrity": "sha256-S+UPoJNbCcoqQZ8V4DFzU82u5K4D+r2LfBvt7LGzLYs= sha384-VEeva+o04z4ySpHoFP0jZip9jRqGInp4a+G7u1jLXbsbdBITL0IXFCaI8xCNr+pU sha512-25aqsTYdQqGofjDqh7N1gp1HrNTvkRkIh4HJH1pmO9Le3IC5sRgjT08uK1TBMP2lwFD1dhhe2CJu0DDQ6NmHqg==" + }, + { + "href": "lib/moment/src/locale/pt-br.js", + "size": 1854, + "integrity": "sha256-dCi2c3XLXDzAROdHcV4fIjsutlmLDV41S5Aqk7VqG60= sha384-UqNzW2F+MbgIQZ83ZKpnfnvP1Fiwk4mYSSl0Wqw3Bfer5mmNacLN8MTzCmnpXV6U sha512-Xp0JuMi8aQsd+2SZTNXbOEde4Gi8msq8KUbiQitXqpRW3GPgJnMMIpXKXnkOYYIK4LjYacXJtBwNAh1eJEwdyg==" + }, + { + "href": "lib/moment/src/locale/pt.js", + "size": 1968, + "integrity": "sha256-YHNxM8rQBjvVw+MfNI7iAUsAuWH5GthQUKDhnLJjblY= sha384-3HZiAnR/XUX2d8N3vK1QrGM7v0Cawm7d1kxqdJVXcgCZooIpxJvV9Se2Uu6Vqk+u sha512-gIykeb6u0cPA05dXcZFZbvQe3aG8VI75UKXcQNQqvDAJLpBXAM91XjBhUHW5H5U6XpsYcB3aBV6afUbFnl6+bw==" + }, + { + "href": "lib/moment/src/locale/ro.js", + "size": 2319, + "integrity": "sha256-dRUqLY0QZnu7FGr01lo+Wcaoj/g4YJf4D3bnU99QeyQ= sha384-MImws8oDOgKYSY+3SJK1xbX0gX277eSoSMTB4g/hc7M9+5w+lMsxtQW9qAUR5n2H sha512-xwig5ZLqO75wKEf2kzSTatEANLfcHYgHMGXVO4s1DgAWFCUico5vz2cIJaHT1ItfoppHiQdFeVLiYk0QqI6DKg==" + }, + { + "href": "lib/moment/src/locale/ru.js", + "size": 8418, + "integrity": "sha256-6INkpXAAueEZBSerKhIDaEY0kdbZHg7cnaYjOubQYSA= sha384-jfW8SRRUpQQ2DrDMe9yB38I9tjCbDoRb8c3n6mA4TmGw1hMhKnDthJQDukCw+A64 sha512-wKYklBQUCHx9Cin2TDhv3E0xr5nah/+tvdSSgUTVQ4uV3HlpSgEFolj7Wm09hInVx7hmF9Q1L1SyUaIZxf9szQ==" + }, + { + "href": "lib/moment/src/locale/sd.js", + "size": 2153, + "integrity": "sha256-R6YYQhf8/beb6MgQHiS13hkOcH7KZgzOvfwr0GywGXU= sha384-dKG2X85rtWUXXqPZPe8L9P00U0TUuquxhXcFbwHp1Sj+qeL4GPugRNo2zr9HAVG5 sha512-hJnawlkwFmxN0b/SmqqBc+wY1fBD2mJ/hKUmmYP5NhbGvfRP4ZZzG2UHze/w6nfVl/B9XuXYXhur+mbCv/+giA==" + }, + { + "href": "lib/moment/src/locale/se.js", + "size": 1849, + "integrity": "sha256-LQoN43is/HrYCZGvjYAaXC4ytpwYq5Oq8T30ZCAtFeA= sha384-fy7p7iXtfB6QLBiE9jHplkFHDgaaoa2Dd7mPCjuhs2LxVXHdUHwNdHhbBH2t0Wiq sha512-fnKWlEgfcRY52QfpIHR+j2b3qf1HcyIuIvk6SrSrksV9Kup63GKVb7byBuESzluU7YOUzhBgCmDt6kp6d8tw2A==" + }, + { + "href": "lib/moment/src/locale/si.js", + "size": 2681, + "integrity": "sha256-Xu/ObYVABSlNcI+BWeyyVk6Q1B1pezi+r1DaIKhmxlk= sha384-Q8/6cAHzfs82PW8UxyPBIIfxQgqNfH4YJS6PwBHkLic6HDA7WkTqdHFi4cXNexzU sha512-N49YIbNpk0ChRDA9XMio77xQG9YvyuSoXZbeZijcAnzjngRtu26rj0oQXjeAT04+CdR5iN5LWIpgKHFCVPQsSA==" + }, + { + "href": "lib/moment/src/locale/sk.js", + "size": 5173, + "integrity": "sha256-skbl7kjpxss0jejnouuCxTTJNj2EJwjcTrMOz4nvets= sha384-hPuIgdSzywSBe0zRaZIlmXjYzy942ejIWgA3rC2Q2NoViQKA40JAWtjPyjFqwOCF sha512-/p0LKVameCqLBjiNxpAUQvRMl3dt4Sa3G36exqWJi/n4xdIoeIToVervnVgmbm6s2b+0Ekbos+amsUbm0oIHbw==" + }, + { + "href": "lib/moment/src/locale/sl.js", + "size": 6115, + "integrity": "sha256-pPTlNYLvzzgrBybn7DU5pOtR88QVR7JhgTLPlKRkZBY= sha384-YRkc8zXDG7EL5gzQG53yBXXf+q9VliC4i8jHxtl+cQQXiPXJ/lpShcVrz/gnft+r sha512-Od4S3BkTKactE8HXLynF7R0tWjTMYENRUM6y9IYDgFJr5knbdSwXsGU6K0dCo7ATg4F7eBCwd8rZrTja/uMnjg==" + }, + { + "href": "lib/moment/src/locale/sq.js", + "size": 1987, + "integrity": "sha256-kQm21NDs0cYTREgRSI4qFgfH1qodPmrPSlrSy/6ItF8= sha384-NZ0nj6Log/W9Ma/iugUl8tJtomAPV6CpcE2ZlP2dobcwCsbJbgrIqv7LNw8qyiNo sha512-2wgSZRTK4ZZxRhPHXGl9ZP6oYu8YP63mF+WVi/hxIw7+HY/Yigd1R/STGc94g2s8wZoe2ILmmzw8HVffZDFfMg==" + }, + { + "href": "lib/moment/src/locale/sr-cyrl.js", + "size": 4762, + "integrity": "sha256-W42JY1uJYwjFAv+PInRrnBEAmrG4TVqdtbI8ztJww1k= sha384-/s7LmXebkOWjgKVvALP0mK6qnAwmJdgRZ7OJ9Je9TSc5t9Ot7AkjP5UaFHiBzZHm sha512-zYvn09a6Xwnwn06lIDLgO6rF9V8xwK8HqpzbxpdPNi67PJVm86BWTej6fVJBeqVB08Bt1dko3riLz0XZJAkjbA==" + }, + { + "href": "lib/moment/src/locale/sr.js", + "size": 4209, + "integrity": "sha256-DfqkLiqddzSUvapFjq1gXHx6F8yAiofQHmrH1ReWjkU= sha384-UjujNMuZ3b1yiDy5UeeRlzwtCjo8t4BYaomM4+43cymBySIGUH3GsoXeYHVD/6VW sha512-Fvsi2wyVJtROk92NXSlTv4503tg8zEIhMlwQ/mZN2O8leGunhcK7Q8SKZeSCQ1eVkUpqZ+JfQnERLYfhTMY/qg==" + }, + { + "href": "lib/moment/src/locale/ss.js", + "size": 2572, + "integrity": "sha256-Cj4/tLUWoHI/vp/akeZdeg/howB/zyST3xQVwZUMR/M= sha384-PJwn2ZPXOymIA0a0w/8HjbLUbLTMJFkArrWYTk3N5F6CICvkPZPYlqYQVXSjWa99 sha512-KPM4E6tO36PFM6jO0XbOM0JfT3rGngUkc4IKjWuz8dc0L6vBXWF6auV+bdg3XxHZLgBfvlsiM3NJDXbcoG+/Dg==" + }, + { + "href": "lib/moment/src/locale/sv.js", + "size": 2066, + "integrity": "sha256-ha2F4ratpLQPyvs8j2mnSFrtXWdhtTIakBj0eo5tbY8= sha384-cKZMVLULq4qmEmt1A+zLGZ1gfaJROZlZp6nUG5sYHEFxRpod2xU0Ci/rr+jciYMX sha512-xk/0+pEYZCZT1R2hPO/nz9uBU+TvFC118YAsjEYvQtH/Yj3oR4MHwTuTQ/84MPqRpi3kZcXlF8pkHi/9nX9wgA==" + }, + { + "href": "lib/moment/src/locale/sw.js", + "size": 1651, + "integrity": "sha256-g5m+A02gx5/eVfFW17EjGobQkhihcayXyGjtshMmbOw= sha384-vaVcuYK3tsB/xmbVwNKZCtvit6PG+lnIpob6oL/2Or09nWhd+76P9IACtPDw7TAQ sha512-jW2tWpO2qavTAn9y5Ly4jilrDTlPL+U6KdH8zXNicPUZJfcET9BKFB2/gZ8eribQlwAWHzB/K8iugLWhYE1GtQ==" + }, + { + "href": "lib/moment/src/locale/ta.js", + "size": 4800, + "integrity": "sha256-3ykC0hTtS8phDDIwHonaUycK3I4moA2oemiiRLqQ6PE= sha384-M4ktIkxcIlMMowRpKH59Rf8z5xUw2/mcyAtcqFfM/8SW9oEhWpZGhsAZxz7JzH2z sha512-p4u5+bYIH2/Uq2C4UWn7DxbXr4kQL3qrcjozr0fEDqJFH2ZyDxOC7J2lPkbiMEYwH4v1qdbaz36H5CRtryB2YQ==" + }, + { + "href": "lib/moment/src/locale/te.js", + "size": 3392, + "integrity": "sha256-4DEte+LZEpLU3miOYSpohBNUZqjVsDkaWHf2hT3SSm4= sha384-cbfTWqyMLQBUEuQoSUnysAe32jFRIF4vUWFUeDgCmIurXbJb72nlHXRAVfNaFldh sha512-KGWdnVcBQvM2BXW4grYJ/Kj96091qnrBEyguVhHqlA/KDiqRQ2ec0z1cPTAs12oo3Qq5kXhjBqNwhBs/vl1n5Q==" + }, + { + "href": "lib/moment/src/locale/tet.js", + "size": 2155, + "integrity": "sha256-IdxCW8OT5ZqZr6SCMyxQhnO4a0vic72FTydbiMCOw1Q= sha384-x3EDItX8uW/OlcUahI+I63qlCm+Fucfnl5KCo+H789Uw7Yzm7YbM03T964JTzTUq sha512-tCrHbyWEqmjfVXxU3Qhamiy5CbhE63DEsDXibfCY6Z5vT6zeTLk7Q/WOrJ1glt9044GIZNQjAnXVkxRHBB23+Q==" + }, + { + "href": "lib/moment/src/locale/tg.js", + "size": 3604, + "integrity": "sha256-FUXyHqz4DXdCJ5KFSIPEbIVQ2YaZXLBBFmb2ALaxg+o= sha384-MbXO6dbMXALvQ67OJhFL9shmrEM4DUtY7X9gBHXmJ7di4bmt0z0im3ni/sf3YjZk sha512-FqQHzsGJeP7I7+utcgpZjONzE0Excfx7/JPJfjzdqvr1nJQ9bsP+3ng+JM4Iw71p3I1Tn+E7NMvt9+pcOSAJ+A==" + }, + { + "href": "lib/moment/src/locale/th.js", + "size": 2736, + "integrity": "sha256-GZe7aFcAabXxdc1O2zNJaaB7bK8aV2VkIdCDjRy5Wu8= sha384-Wg5MRkyujhh3aJWyFH52aMNpBnPBe0lZt7Teiix7YLRxp7MSwRsCsnA++BLFy4zF sha512-TxNSQFSbw3er3e6PB1YM+kggPBfo0hglSU9VbbpvEN7+i5ZdPasLutYdnTFeQftvZcheSc2+suGEJlLEFCltSg==" + }, + { + "href": "lib/moment/src/locale/tk.js", + "size": 2488, + "integrity": "sha256-o63iIqQHM8xkMLDQyCT/hLjDEBsq8mA/62OB+F1LAAM= sha384-gYUHGdk8CRUfoqaCPXIg0YGLL26KUMG4f0jAe01ICg+jm/dbq5bl8HyptKsSOuRT sha512-34XMwEscjGNb5a3mZ0h7dwuJHUKeUmfWftsmjFy1hYiMq+4gn29KFiZE/qIOTAyxz1jzIWibYarQyaqEp1aNJQ==" + }, + { + "href": "lib/moment/src/locale/tl-ph.js", + "size": 1735, + "integrity": "sha256-wDKq6HMLZzha8VamA63+/PThUjOx7xkwu3aAmxqrvSw= sha384-fw5Qp0e0SxM8q8lndVS8NIVqNLMaA36JZWRFoB61ExRC5hM4EvmnJ3zAkfEv6U9F sha512-IY20Y50G9Ls7/G6UorJbgs/M8QWAm6I2hEt/jcyDo5ISQkXIXfsc1Jm0uS/8fGFcM7h3p/ewoxqxu9TJrFhEsw==" + }, + { + "href": "lib/moment/src/locale/tlh.js", + "size": 3755, + "integrity": "sha256-ltpFotRbI8TBYsQP7cBmUAn3n7DeFTgAhXIy0DvieZo= sha384-3J5KmiIMnLJVZ4Nl9wY8Lkt1fgfnRPYkfU63Ovcw2AMuSI2xBRjXC1+Pr37hlaCv sha512-CxziUekpRlq7YbcFWbiItGd0pp4kqL3Rkcp+T+xgMItboiramC/IqdErRWXXI/USCfIdGR2C+vn8KdiZDOoCsQ==" + }, + { + "href": "lib/moment/src/locale/tr.js", + "size": 2927, + "integrity": "sha256-ruPkOcgqqoDllRcYip5t7fmD0F5x65dWobQWjwAiJLE= sha384-O+Yj+UWd/KH7tpwP/NduBnDNJlor+jIiScRpjM7TPOAXP2kxNfhKywx00ApfUlQL sha512-icdB4tH5UHVC7Q6zSqwJ8w7rTyN7OUOmZ7ZoPxM216HgY/+TQWxCP3T3U5TpHUCk3a+YjcshaF5jw2bqqsfj2g==" + }, + { + "href": "lib/moment/src/locale/tzl.js", + "size": 3109, + "integrity": "sha256-GoYnyGnV+BXAndqRsliPPfnmkiliZ/W8ZmH6OZjxwPo= sha384-/E9Vu0SzYM9ZF6aRXaXLRA7F7okwf9HjKOLteVmnHGiGa0FjzNVCmhXgzzCun3Wm sha512-y/A8Z/VWpWHtjzm0+wLc5ZwZTqBAzajA08HVFWxRdbkL4ZxdKlvbVMdbUREDJYuOAhq3DsIrtGiCOdubhdPYfg==" + }, + { + "href": "lib/moment/src/locale/tzm-latn.js", + "size": 1691, + "integrity": "sha256-G5ptT2U4+1UwAULxKW9bTHmv9tdhq7PtOVkDOoE/BwI= sha384-CaKsC6KkIEHXTfIICFnpqSNckALS8FTYry85d23gv8hXUy7/qbdjBpPJ1bnRo+JN sha512-ZwkSNY7Sk3d4k373d7YlzzyqwoopdI+jY/S2aWHzuRmnl2V/b0KR98NfwMWgSc/Ggq1xhE6/w6TNx0KJ7/miWA==" + }, + { + "href": "lib/moment/src/locale/tzm.js", + "size": 2322, + "integrity": "sha256-0TnAs0AbkhhjFI9Wfu78V7LKMIiBKtvFjMnQnO/0Pd8= sha384-VsyDHA4LsZelvg46eMY2VcLiFFYgW5zpSWIFbsqiCY5DXEDn1Mb3d5vgShOOnZe0 sha512-CIzBtLc0PZMR0VkQ6hJOXboDntVZQmaL6EN5KiqwWuhMul/Z7l2zQI9GKJgcI08/o31Pi8gkch6AuuLrh70JdA==" + }, + { + "href": "lib/moment/src/locale/ug-cn.js", + "size": 3880, + "integrity": "sha256-hvXl0K8a389FdUmAYXOPINE0sWyQm/nvxAvl+WbZnqU= sha384-GiyUjRGp5rOC58BGRi4evvUoWiuaTqXlNOO5IeXC0bqnGo2nvY9VOL6s1zjoNzvg sha512-AhGFSHt0qu1efjams3Z7bLFIvbrra6GEx7GyClhjj7GsKInmveVf2r6zZYDGcPE9Sn0OjATJGUc0WIJdhOnH3g==" + }, + { + "href": "lib/moment/src/locale/uk.js", + "size": 5955, + "integrity": "sha256-5nclRm3W5usz/spSVAPQnIs4EugHPmLdxLsGNpuxOp0= sha384-yKmtZWC/VeNsTNLyt7h764WhZR7g2cdzpCAcZv1BXAoVdEZdHZDXXGF+foKBcMSG sha512-bZSwPmNJ/N74UwLUQZVO/zmBrM5yG6tMYBbcXAa+s9pLMBi2X8lNyovhkLIPL6qRNwOAklIYBCTtm5RGs+14OA==" + }, + { + "href": "lib/moment/src/locale/ur.js", + "size": 2200, + "integrity": "sha256-SHDo7ihwJdd2BzEDgJPMgo8IvpHQsIsFCPkxyaFkU/8= sha384-VVRGuZlTBehf3rHo/MnhaguWH9qoWrhG0phFRqQrb6S2iWrXiT+onolvwr3i6u8G sha512-gKuAk/XOzCMBME2jLwZXymgVaWtw8o5YYw0TQa4xwkz/h9BbgGtt3+ryejEmOvbVcBvgkQs7FLmnM6JXxmH5Ww==" + }, + { + "href": "lib/moment/src/locale/uz-latn.js", + "size": 1639, + "integrity": "sha256-zSie2IYLaX0guQGUwvWlXtVOhNQP7hXV1hSMeLHizp4= sha384-nCq7+8z8HnPzHhrX6OnR/oSM6xd/4gDqOc/cVosoz1Jfvpd+NEidueoNKapNbO+2 sha512-YRZ5/zAr2nvBrsjkMrL6G70Mi+NpuIYdMbpu4JIPgyghIlTgtqyNoYDBnXJnUGi6xv1DWgyDtG7LtXAIxMtphQ==" + }, + { + "href": "lib/moment/src/locale/uz.js", + "size": 1885, + "integrity": "sha256-6bFb0j6Hef6T+jUqBNwzhZMgbNe+tNVtNV+NKRg1/NE= sha384-D1YalLNvh1UOYTufeioh9i2XcxMQ2VSPHSSzRjyxS/fDPmaN5hpuXfpdKfGTH0t7 sha512-2sqp3TlNg9qbfjUOionFMZCEC1+ZJp/dF1bqNTaxaY+glyz8tGJ6lx7rMNwGAgTkO12zCf8os9cGoPTrRx7xzw==" + }, + { + "href": "lib/moment/src/locale/vi.js", + "size": 2430, + "integrity": "sha256-6ewtAagXHb1xY3v0n2y3DsVSbicFMRTav2B/GqE+2bw= sha384-jl7m4uFWrW8l6ZTDkLAG5Rvzu9AJgmjnmL/fKff4oPrikMNrqphJ8uzLg1fBI8+6 sha512-pFieNmBd088WmSVEEwq3UHzN1ejBgWMFWff1pCgg/xTmyyYoyxvoPJ53Wj8yZCMj/dI5Y53FmdGjEywYSQ8gDA==" + }, + { + "href": "lib/moment/src/locale/x-pseudo.js", + "size": 2348, + "integrity": "sha256-mfJ/Rebeez8tR+FGu+/XTIgfsflEbfKeIM153Y99P04= sha384-FCFtmQnhSDMQrQEWKGzQdqvEwZeA4smIfEu3EJ0ozzEtRMH9zNe9EZUNuimbz95H sha512-fBYzZTdjKL72+1ibrb8s2wtYkjiMAP0uyp4sgAySeW88TeFYlNdo/Y8jAL2YMXDz7lXfNwv2GP2k4qv0Zm2UdQ==" + }, + { + "href": "lib/moment/src/locale/yo.js", + "size": 1887, + "integrity": "sha256-VHCjNYcUiG0Ut4l9+GSnoO7Sclv/vd9dPpE/97L3mkA= sha384-Y4Bkn8ojHw6gqgGZzJiIFQhNHcwASD9uL9VzB+/WcjZf+iTk6O61P3OBAQxdkEMP sha512-ikSl7dy9KIZS/Az/aBEMvP5TR0ORQ0IDrxY55joV1v+XDy8KRHx+dcEtKJjsWCR99DJfsKwI4RlW1LkgQkQfHQ==" + }, + { + "href": "lib/moment/src/locale/zh-cn.js", + "size": 3711, + "integrity": "sha256-n82xcVBq7RnBd29mgzDsQIMJTxgvF1FKoKY4V8kyMq0= sha384-qlhcnhpN1iC6chD7lcL5PdztqkoSQQsMGyat3i6dj9QPQjSlYcHn3NVhciRlKdqj sha512-Mm1OYpArYNnhqM6snbKg5siBhrepG7yCGB8Rbwz1DKJS/u6g0JCnLU3a9St5KEJWpyVBRDwg+ixxYYUEZXmO1w==" + }, + { + "href": "lib/moment/src/locale/zh-hk.js", + "size": 3116, + "integrity": "sha256-OZbVZmpEyQ8WjmC893BKTzwcy847sUzbo3LHxN5mNnI= sha384-uA8Fin3PqNX8xhDRUSZaEFwTkH1Us7pEkElM+uRwiXN0rcjq6xkIYXnGmyw76fz/ sha512-Ua471UoksDGJRj7WU1QLtKAdyJHPPAtqtyljFa9nZI51CUipQSwD8ycebTOZERZ7HqCNtqwf3/6yPMdm13rszw==" + }, + { + "href": "lib/moment/src/locale/zh-mo.js", + "size": 3066, + "integrity": "sha256-zLIRaP/z0weTLndtA5TdUYhj8Ic+fxGMkdjx95a0CEg= sha384-+AefynBJ6wqLLNEwmisDZRJol5eoYpdq/HGbVidgdi+u5yjY6tKeuZOle6u6Ks2p sha512-IiV9/MczWJl34n6BqxFcIDaocE48kU/UL75Z5Dvwi8k+3OEd2z+uiUMg5wZB6ooUxNT2H9xir0V3ffPiwAmSwg==" + }, + { + "href": "lib/moment/src/locale/zh-tw.js", + "size": 3013, + "integrity": "sha256-XXd2MIF+G2y9rJNNQZJKxEB5CJ/9/IB9fVPXtk4fTrw= sha384-DfQMRMLrGijima6MmTDMzYhbga/fMcpRCEpdZaai69FO7Du7OrG3b/kQ2ZsSGzgj sha512-Rr/LAIcy+CJi7+fpHdtHQVPckgOxEgApZfeQHJV/4AAijonnzcTQYrE99fyQFOm6oTco8CzQcmydBL7O5edySA==" + }, + { + "href": "lib/moment-timezone/data/meta/latest.json", + "size": 98784, + "integrity": "sha256-FXT8cNj9JVQDGu2QsUJDcdZ3W9nAyrXL0g4EdTmE9QE= sha384-oq2EkPSTwOBDdRz1+OOtZBZ3MOGpdWVgte25IUXMqEJte9QGNa2vb9Ne7r4oyB2V sha512-QA5woqdckivMyl5+s9BoWWudVzUNebt9xmKSV+gpbQuk4h3ByMUeMf05y6/hDKqhhYX7HMzr5WaNOrT7SK6dxQ==" + }, + { + "href": "lib/moment-timezone/data/packed/latest.json", + "size": 189231, + "integrity": "sha256-zNxqoE3xYRIulIuJ4GKWGAlKVf5+A6cM+IlS+CMnOys= sha384-vs6Aw7e/0i9v+jIQTuNMOqCUZScybt/0ZjzMsQ3ulMo2GrI6DiUJE+NtnASKxsZy sha512-vDZwb4vL40jKV+jWq0wPB8dkeJVKgmJQaIBqBU37M33+7G4no70rus8X5vvoWyxPH+fvZjWdG49SvNiyPRETtw==" + }, + { + "href": "lib/moment-timezone/data/unpacked/latest.json", + "size": 2181469, + "integrity": "sha256-5Ryn/AtA+T1V9ZdBWPh8LVF6pSPBE9zE/fZFoDXrzgs= sha384-4BFuDMVxeeuegogic1TTE2yCZ4xxV9y7yk77ZWfiVnb0/anSebIjRpOvlNNcow07 sha512-WmsYqywx3FyqJdqgeWJFekWsOpDP5TDHJrSobOiMhUzBSi8G5KQib5z/eAoD5eQ6eLQMMaTLjmJ+vIgP5LAq8Q==" + }, + { + "href": "lib/nz-tour/example/images/bg_hr.png", + "size": 78, + "integrity": "sha256-jDDFBYWrgEnqQaTWcm2ouLB7f8Dz0Yltu9gT0KQ/5sU= sha384-os9PMqlTgyEVK7sFCcgERTZUzknvtCyoan8WJA3JDbhY8XW8mSZEfmb1Bfd0fCpW sha512-5jVgBSgD+xeFRTcOCgO8zt/7s/QzwjwjUTvu1353Sqo6Y6RBA36fYSPerxY96cCS01ACWt2vfst9JwOoW2CijQ==" + }, + { + "href": "lib/nz-tour/example/images/blacktocat.png", + "size": 463, + "integrity": "sha256-+tnE0s0EfbHcx1uRUo733Y3koJLmF29q7xorPOii/ak= sha384-Txxmf/Hjje7MVcZNQQ4hk6yodg2TEZo9Srw8ke/oI1nhmZUIduHErn3Y44r4SX44 sha512-9pISLHWPM+hY0d3NoiQLctYVCnvjXsP/ifCvja/2PfeFMfBuS/1HWx0KFY3GJIoY+vDV4hM7bYvDFLTHC+2XDA==" + }, + { + "href": "lib/nz-tour/example/images/vader.jpg", + "size": 2567, + "integrity": "sha256-ZyPA7TUuCsQVH5risgLFBJQDBi3k4QXfVuLbJMdFqF0= sha384-yhQRWeRDcFD4E68E7Nxwtx3KjP9hD+kDcAexRPc7O92ceBENTJaDx3Br9pmp68g2 sha512-wFvs5FcBaKkZ7GmJHEIqRFaHVoj5qykYl9USjbqjstrjp8Yv7Sch1colIiod6pIY1np03xwFc4XAAzfq4gwlRQ==" + }, + { + "href": "lib/ui-leaflet/grunt/utils/banner.js", + "size": 247, + "integrity": "sha256-Gdr8zPbAqAJWifuyJvQMjtMTYUCZAWe2exPdILU6aqw= sha384-WhWDiJu8XL6gSUOjOGYVxzuv82UsNu0ldVODK6y4UtgUjGAdu0JaNKkOhxC9fzwT sha512-tn4LB+U4qkVKzJLzwtJVWVezry/0Kv9xQ2Im0HiLtnD/neUE62IRx735SuRmxQsYK9n6ktE9PLtLnSBt0JT8tA==" + }, + { + "href": "lib/ui-leaflet/grunt/utils/getAvailPort.js", + "size": 494, + "integrity": "sha256-NzXUj8hLu2ea1RoWv2jxQRAbajTCiTZmQDqstRLgIM8= sha384-K21VQIvGB6TTPhGLU/p1P+YFAZ9bHtHez9AmAlPiNVwUJN+HJuM9/3kPHxm6lTwN sha512-KfQ+3GAMT2yE8BTlwoBst/YW5Ok1ylc466tW0by5uG7WN1byMcCnV8ll2fSNmPUrIJgyANgmUNnzh+67wVzrQw==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/intro.js", + "size": 30, + "integrity": "sha256-mzuF8hOigzvpIKi+Vve9F7fpvwUl74O+dn7nGYpJV8I= sha384-jLhDTNwFmCOuKHo5NVlgNxcyjzTsS4Fr5rnYTj/PMee7s0LLwDP2IH9q9NudaRHP sha512-/sitd2WX/94lqguyr/zGDh+WZ9zMb7oOSvuLGFBe0TBVj8xYGSkn2Kf0UpIQnnK6hfiXV4SxqQITq3hG4TV98w==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/legendDirectives.js", + "size": 6745, + "integrity": "sha256-a5HIhUHijLke1XMou9QYUeDtI7Jp36UXVzoIPgtes+g= sha384-mS5oPObZaeUKUKoqcxk/+McaM8Jk/TWhKMfUhW4O30T6Aein4M1gZX7AcblNIX2e sha512-jroRPAdF2twKNHycayU+HAYqssmxSmkWByJS5nV0Imn4tB7e//HbYeBhwbZM/UJCSimSJouBELoinqjqfxLjOg==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/nvD3AxisConfiguration.js", + "size": 10835, + "integrity": "sha256-syECQ7+M1UlqvhdVTrFL3KHXV1MxcPohiPQ2OhXwVXo= sha384-m10JTgyhOfd2EaQouYdKiAgEn6VdhxAcB1uCNS2EMRImegZrKpvvNGyv9ryZgwEC sha512-C434LN774o8Nz0LzarUyvWC4Jq9raGFRRRAr32+yo7xzkSYUfQZLIY0deoX3kbpbNKo490FMP4LyqnpobPpUsA==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/nvD3Events.js", + "size": 5135, + "integrity": "sha256-pLMz7q6EUhxM+98CT/1Zeagc7gsN2WCVq3bLwKVXTuA= sha384-m9Pu2x9fdzZBA/UCNWa9nTDCc47E6tpvaMNVk4Yd26KmLLRnZ7C2qSeN5oeBz+Wi sha512-Az7klM4KwLO6FsTzsmjiDPHDI+72s2Dxun6x8M2dtPtXFChjeDM5T7OB3Vaopwmpdu8h5mcoPNwYEC3AjnKIvw==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/nvD3LegendConfiguration.js", + "size": 1383, + "integrity": "sha256-L2QB4/zngT3ZHWF/BPkIMWtvnwqpWS9V2neImwYdi2g= sha384-w+At+wBcB497QsYimqRKJ/SvrYkBnDFiD/PV2gOfE7FT0s3UbTFlMJcGV2029o8Z sha512-v8xVDNVg6tK6+8HLHh9Fpe2hxhQW2aFPd31+mecz8iUgFdoMho0L85/XZ4DRcdiWa41Rq0snJei3MeRGv9B3rQ==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/nvd3Directives.js", + "size": 109126, + "integrity": "sha256-zfnPjx+fKGg0kDmKeq4qKFXnvJdpOEVq0LwKqogPyFs= sha384-CFcAHR2tYogvcOqZqR2/cDKICyMhGUoT/ogVj2VLnNP5P5IngmOHYXEHLQukkfyk sha512-k9qe5y/J+DQLTaa9zufP8SxAZDHD3lCP46PFZITKd1X41SJLWtcBBwHOdDtD0zVdaDtejjIdU05OhqxJ8CqiMw==" + }, + { + "href": "manual_lib/angularjs-nvd3-directives/src/directives/outro.js", + "size": 5, + "integrity": "sha256-E1fN1ZOSbzSiKZX+5T1988AGgw7eU8PH6AriBa9nv6U= sha384-suIa3JLZCiCycFOnYlVtKtzBkyx4iQsk4OauVtgxYFyoCVESsnhYB2/K6t0RKd2h sha512-9EUzBK6qGXwxrOd0Fwv7RSjWtx2diUXNm6czMYhkBwC5d4EbUtVnmHE7VbgXpoQvVYHZZQlErHy8VVyL4N8TLA==" + }, + { + "href": "manual_lib/leaflet/dist/images/layers-2x.png", + "size": 2898, + "integrity": "sha256-DAKiOI9jfSH4bm1LMU7JqWjnsFrUw6AFKAo/dsD9PLg= sha384-UVGwNmVhFUX+p9GnmlJZyQRLxpmbt+KwvYssO2cYXURAkyjVGc0qJ9nUJB4lJelR sha512-AjQfrJ+7jPAxtLR4QnpAMWLwWMLrl7rOYB9k1tG5YPyyZGx8vvJtZJShzu/WP/etuvBo4c8iW6xjQTWBinix/w==" + }, + { + "href": "manual_lib/leaflet/dist/images/layers.png", + "size": 1502, + "integrity": "sha256-CQiqKnKggvslY6JCel5PskdXGGK0SLgPtvcgrxEJkj4= sha384-5kKWCfWwV4F3Sse+NKjOIA2dpJ0gBFFhk0eoRIZCaR5OjGzWC7F1dxi0TG07f4gH sha512-0EKILr9/63Td6Bw5OmSFbVGduhKJxBxNXgaXF/iRM/qTZCaOyztlJv8Xm9TKsyFGwfo6Ywvzk/e7RxHTlH2tAg==" + }, + { + "href": "manual_lib/leaflet/dist/images/marker-icon-2x.png", + "size": 4033, + "integrity": "sha256-RU3EeegrSHUptrk9apsprGnKe09anV/fjgGHH20hYRM= sha384-SGuZizGE3SVzNbkNLvSCv+WYNq6rS1c8HTIPo34mx0u0T1WHIrMEvyH2wCCzB3Pk sha512-sAWLfjSn54pJ/yEbGktXfzV0VzZIPLuGv50yDLwhFamr+GKAfqugdq3XzINWwG6LHlOYfPoAa6TKjrdCuNWVtg==" + }, + { + "href": "manual_lib/leaflet/dist/images/marker-icon.png", + "size": 1747, + "integrity": "sha256-kV6Dpvx5jFmeXJ4/dZ1rwGXWUVEBms0EENH0cxvKr3I= sha384-3s0RN7OoCr0DZpr97iPbRNiN1nb7yjJhsT6MDt6B/ae+a8d78D+2QRQwOxurFQ/i sha512-b/WG7jyRDC7jYeGqg5MklG/if0N0lX9Wk9/64LZ3vkNTTwVpryfPPnNjdVhZhgpEQhsMGE+INanjLGzHqdwajg==" + }, + { + "href": "manual_lib/leaflet/dist/images/marker-shadow.png", + "size": 797, + "integrity": "sha256-TzQNLWF0YzPf/gVuB0zhcErk5H/sWn3pgyL728/LK20= sha384-KsxRlq9jwjxuo/JJCo1ZPD12XOcEd7gecYGSz/fUNRshOs1J0xO8A2FeWyAckqZ2 sha512-Q7AWibmu2xxeY/HyTzxN1JJ7t91aWIcywesPJ+L+q+LyFlKpTom1hrFRYjJHDvSeExZRE/si1p93oRJusIQc3g==" + }, + { + "href": "lib/jquery/external/sizzle/dist/sizzle.js", + "size": 70555, + "integrity": "sha256-rJuLgQit3JTyw5pxWfjyiKyJSzrttVGL/B4CHxg3FQY= sha384-rToojiIOxmKzaeDSOEenBN5u/TJH22cpCTS8eLP9TofGUMMVn9toyrIeedSozUKA sha512-DKZ1A1/aMKNr0bCeWMtEUTVCZHBq7Z7QBjAYmQLx/y2LDC7+ll5NNZbpgLfJrZFae8sh2azEJy96kknAnhGLtA==" + }, + { + "href": "lib/jquery/external/sizzle/dist/sizzle.min.js", + "size": 20245, + "integrity": "sha256-6SpbLmMwqQetrgUAgi2V5Ym+zIOvYEyNyKU5lD6qWf0= sha384-HfLhcxqPApgj+lkyQnhEdVeM+rFlWUdXwXzAie4R/8osMpzJPARaHFkJEqRevXOO sha512-UajsXySzqTOTH6Ei7wJl1Hg2Cgw2DcHkolbyfxvWi5DcnbuoACP9mNiGiFZUbEdlWokjI8S6rS7rMAzN94FXjQ==" + }, + { + "href": "lib/jquery/external/sizzle/dist/sizzle.min.map", + "size": 31112, + "integrity": "sha256-oZ/Nv8enitncJbrMt1ne2YywwTqtbFBvUI807K1uhPc= sha384-p5u3ON87GJA3Ls24tVUQdn264kVWwaPOPMIZNp+sLyw8qcs5HPa8G/k4pgdbT8A9 sha512-eDXjm7IVhDhce9Sld+rSO/NZmQBSa7Vm3T+15Mef2EiJmoulRBKLzMhJw+9FNRR2RDDz+0O5icE/mSvgyGY2PQ==" + }, + { + "href": "lib/jquery/src/ajax/var/location.js", + "size": 67, + "integrity": "sha256-NDHedxtpSVFey+vX5TvRRJoD+G06/QcbDyh0s9SVHTM= sha384-jUeU80kKkqwIo/0VexDLG/MMzgqraInI3dTQnRswAri+uBv9QhQyTDLYmOg4ObA2 sha512-p/Omg7NjIdAOfZ1+FFjC5hXr5xavBE9g3w25HJZ26FhDp5+qnc5i+g06GOmbaxYU4IGaEpsGUfh1SGj6qb3rxA==" + }, + { + "href": "lib/jquery/src/ajax/var/nonce.js", + "size": 72, + "integrity": "sha256-QRkQqlaDsTyB9RjVD6CwFxRIvWQDiz6N6UsIkdHbuBA= sha384-4II+o9p9hwyr61EOI91vwirGwsZGeSV1Q/7MbK4JZLE+Gpk/rH9uAF8NFYbnOEaZ sha512-s9iEeX1dT5TZ9WOtFYKnfgo7EbRWT86hp3ZSC/KOa3JHxtnxyV9O5VMMzxaaWPBpPcdCPeUTuMh8BG4/3Ph5xg==" + }, + { + "href": "lib/jquery/src/ajax/var/rquery.js", + "size": 60, + "integrity": "sha256-YYVkpdDrXsZjhfFtWDCRTSiLpkr1vp4GyCkT3yM7cwU= sha384-VeA4E0CB0xgn8JGKiS3knBE5vbzif9LC0tz1xx4PA/V9DW/lJb+GWLc6+1vP/rzi sha512-shUN3IMDMvA+tAingyMQakGlOYREzFc1yrs4nK6COYpxTGOLTvsHWA990KPuoTyzz2jp9K9xVA6YgC/dTqq+vg==" + }, + { + "href": "lib/jquery/src/core/var/rsingleTag.js", + "size": 244, + "integrity": "sha256-khqMyBhhPHfIlvAExAS7hS1xKMWz19QwUK1Ce2wiLfU= sha384-WFAx+5U+X3PXmGjsXILrwOiVySZrhCfzwTR9NqU6nBXKfrif9+yc7yVqG5Z+mfRH sha512-rw5VvO/S0/EgThoHNUGtEtFilRhYkDmM79rsW0dH5Iyu5jeyYdPrTx34ab0lUOA0kgWGIRG+pbm0nz53FJncWw==" + }, + { + "href": "lib/jquery/src/css/var/cssExpand.js", + "size": 88, + "integrity": "sha256-pIru3vFVcHriTVkaJfRTIbpQad/DepyNFaBjiZ7FAz4= sha384-OcWq49Z+/fAyMoGmXHBRcKNo2Xk+/EEOcfzkxyYyKiovLGKEOCQH8Iatx6VXJWmo sha512-iB1y0NkNgMwIQo0P7Q1UOOSA2aswW0ELcKsQA/drAU7R3kmdYyj9l8Z8hmacCCFPKg0fA+yewzwXl4c/60asuw==" + }, + { + "href": "lib/jquery/src/css/var/getStyles.js", + "size": 401, + "integrity": "sha256-pXm6OhIemhdyOTv5x4iKM1AVszuqckMaSfwQe4ZG2ZA= sha384-pddsD+BMpf4nSmi5Ge1Jpxt/5EjzprL2KD9heAdnlWXzpF1AABCpkbHIQbzQmmw4 sha512-QiN4jTevh0Ly/9tSxBNX+UvDN7t+u6eVccgKqGu7TzCG6vQyWhCk0hccMLXkOoO2VFxIgZSbHFxIuUO3/eSh4g==" + }, + { + "href": "lib/jquery/src/css/var/isHiddenWithinTree.js", + "size": 1284, + "integrity": "sha256-+JafLo9iMfZyr/SWdAjGEjftUquTa2xS66ig/m18pUI= sha384-A/l1b99VeD8P+OgxvuVigMizTd+gTrKvDdt+1D/cs46f4DG4jMFnd7BEDAuTOjOB sha512-NQc6X5YnDoe50IV8hCwSwqy1k1Lcpi1coDQsnwXBP57LKb4M6277Xc4ZtcEWZ3dWv5p3vVGElexcuZNM0kS0+w==" + }, + { + "href": "lib/jquery/src/css/var/rboxStyle.js", + "size": 123, + "integrity": "sha256-zGVzgK01nEM+WhD1wDzh8661wnRk4PSC+/rf9xNrXhg= sha384-ZZRgDY0pqoZGjBIZPxPk9lkctF7jNn08AcTijDSzvdjcH5sUV246hDG1kl+9s47a sha512-/u0gEoxYGUKJlBTzkRKdZuoII/bFQGVggg4yaK07shya49S1b5/8tyyu3/ChgLz4BY+zOVXMMPfyeeAKdU5OXw==" + }, + { + "href": "lib/jquery/src/css/var/rnumnonpx.js", + "size": 131, + "integrity": "sha256-LRluEam5e7bSDtWkIOjy2IwvPnHyDrB6UE5D0DAC9as= sha384-7UPwLYDK+soJ7cxTafOGW36t/UBIjsv0cR24rywVxylzZi9XAvzwR+yrSv2mDiTC sha512-G+eitBQh4cppNDBPFm7LHZ4katEJ+OrWvrz62mMHN66CjCvq6xZ+HZNvZCTnzGBUF/BUfPSRi+I8vvkG55yjEw==" + }, + { + "href": "lib/jquery/src/css/var/swap.js", + "size": 501, + "integrity": "sha256-rnYr9PTTnladiC6GDyNB1IWx8lHf/zTCuv+ecEzH58A= sha384-SB+3IizYot22qHlnXZsHfA6NslvKyc4YlgJUA1XMg6gaVJrKsphPN6BNigy/E1BF sha512-brez0b7hwGsodNTDhRDsXHDXamG+/O5MaGI7k0AXbROnPJMR5jAamBNAU4ksPyth8wOVKjB0W9MC75rnToSSWA==" + }, + { + "href": "lib/jquery/src/data/var/acceptData.js", + "size": 318, + "integrity": "sha256-35uwg+OJk5cSTc7P7t5DWnbHmfRRVw3fma2nnvsfo3Q= sha384-27RZG10RTqrhfE6wYe91qImDcWqv/YmUI3cznR68MuhaMscAGcisZuo4vkE8kgDE sha512-ZJ/93YpIniBN7s0/1VmIPolbBeysu8BJYubMlfsj3+DGcTSj+dNjWo7z72YNH/U8iEWMZVCBwBBXgBFan+Lb9g==" + }, + { + "href": "lib/jquery/src/data/var/dataPriv.js", + "size": 84, + "integrity": "sha256-GYc6ClSbTNsgg7nP5rfdebXdUJ9n/b46cHZgpEJBcIU= sha384-UT/yMswXFD659KKLp310GrtClyRqOWDdplT149Hev6NVEQDKlxCsaBzsJqpdn0KV sha512-tosfQHIxOWOAqINFa+lzRtNvSVG1M0IK9ac+kWMDHjaYjzzKGKdu0zHwNB7NLT0J59YD1v7si1SHuV71iIlmIw==" + }, + { + "href": "lib/jquery/src/data/var/dataUser.js", + "size": 84, + "integrity": "sha256-GYc6ClSbTNsgg7nP5rfdebXdUJ9n/b46cHZgpEJBcIU= sha384-UT/yMswXFD659KKLp310GrtClyRqOWDdplT149Hev6NVEQDKlxCsaBzsJqpdn0KV sha512-tosfQHIxOWOAqINFa+lzRtNvSVG1M0IK9ac+kWMDHjaYjzzKGKdu0zHwNB7NLT0J59YD1v7si1SHuV71iIlmIw==" + }, + { + "href": "lib/jquery/src/manipulation/var/rscriptType.js", + "size": 92, + "integrity": "sha256-xzoVGObmf4ukpDZEvP9yMPEvBa7+PbQ5MskKlinMsVE= sha384-AimJV9LYla3Wvp9715xMrNWyD7/pnJOl3yQ/nYZA9JNQFlIbPeIHeKTBl51RBxqQ sha512-NGY11rUFWk1S1TyBRH2q2Q4AZxvZsUxzY0Y16qDMkY9kb7uMR57Fmsc6WPwkAOZh4FkzdRu6RZWol8fXfP7xvA==" + }, + { + "href": "lib/jquery/src/manipulation/var/rtagName.js", + "size": 304, + "integrity": "sha256-//ZK/tgd6BvYzYNxezDkOQ4X6GnSq0h5CrT3Z3f9zhs= sha384-roAK7JJ/n2oF8x7Dki+FtciGXSt/TzorHIiR5YAg1EFjrh2/ClY5UDU9Q00Z4R87 sha512-6tQKDH4rVuYz6bTzHDnFsLY9xDNsXR8kzSyCwU2VzxZslSbFajhf+zYZeXlLvRKtxZgtyGDqdDcLBSslvlRZlA==" + }, + { + "href": "lib/jquery/src/traversing/var/dir.js", + "size": 371, + "integrity": "sha256-Rjovcv9nhs+cmbOtOeoMt3c6+e47ehttatQUdJH2jgU= sha384-IyCPr0wcjFFCa2fVuwtCoKmKZLIC5mnyUdlTKNOuGMfewEzw25pIDM/JJcm3jwtp sha512-/FvkTjJ/A6u3DvbvmMcOomRshQCxwsj9OZtdM5AKHTHG6TlZvqUwFcX1O36MGuQxWuLj1SpCGlWjSOnh4gdIqg==" + }, + { + "href": "lib/jquery/src/traversing/var/rneedsContext.js", + "size": 128, + "integrity": "sha256-kMoDVjTLFo7G5Tk+NnDLP+9nrwiptZqHhe+cTZlivx8= sha384-OOT2VpIIgPE5kLl4W51eGtt8z1mYa9W7X2Fwcs2cdDqy2pvJQ6O6RW1NdZR7FDjJ sha512-sEAvn843Nmwu5h+Sd44S+Bn9yFQfHpuAC/lk3Ln6qGyPKFMasv5ZwYq4Clw+LM8zE0NOPFIK/psEJ1eck9xCHg==" + }, + { + "href": "lib/jquery/src/traversing/var/siblings.js", + "size": 218, + "integrity": "sha256-CPV8/Yh3Z5jQZ9Bjm73+hCLAVfihd/RaxGpkxfx502k= sha384-rfjfC4CbkCV1FpzgKBGwZp6oOIqGCgyeicn00VE7s+8Lemc/e3C5Sz/7i5x7w0fZ sha512-Wmm3lbr6blz9Yn6DTmQQgsaj63B4DVmpsD/MYXzn/qT+4cnGQc/yDVTffUUdrA2yfB/NfCDKXsXw4w+bbWrz9g==" + }, + { + "href": "lib/messageformat/doc/scripts/prettify/Apache-License-2.0.txt", + "size": 11358, + "integrity": "sha256-z8d0m5b2O9McPEK1xHG/dWgUBT6EfBDz6wA0F7xSPTA= sha384-II9e1ieUDl5AxyiVq3/FflTua1Sr0kMJ25e6imG7rXg7SiAsA2VemsvEqVsLqM7/ sha512-mPa3m3ePewoVQVvXUMOooJfWUFEctOyBFRiOEVxHBT/nAPV4iVwJcFHJvD37YZfCsToV3iAyc+GjIYiE+G6Q6A==" + }, + { + "href": "lib/messageformat/doc/scripts/prettify/lang-css.js", + "size": 861, + "integrity": "sha256-m2rEgwM7AlcnFOtNN+4ZkYXEEAjrKz9GoAqw685qIMU= sha384-ZVW4Q90WP44LAxvcmnOQ3FYYiuBwyy/plPaSRSP9g4z61NRCtowdPA4A2to4Ui9A sha512-I7qoWRmUBxiLMXpr0MqXWzZaRC7iYXw6t1j9IRkcGqaFQiOkRd4l8rIPpIvTtqB+IZ82fVjCAGGymC7nBXj/Bw==" + }, + { + "href": "lib/messageformat/doc/scripts/prettify/prettify.js", + "size": 13632, + "integrity": "sha256-4uV247xgfNF5/1EZRwEPZF00QaNTE67A29BsRDf4O3c= sha384-OEBAsJqUZwhIzTgP81kr7xTSGkc0j/xHulLChMvYSl3Iav3SPNJ0ccWyhq3heW2e sha512-cWK7m0Z2gnQvbYfqlDAAAAZPxU4VGTw9flpPiY8K191VutjwGTPrYlqxoPSoGR1wYuGsvsZRLuYQ0sDEE8CzSg==" + }, + { + "href": "lib/moment/src/lib/create/check-overflow.js", + "size": 1542, + "integrity": "sha256-7dkTnZvNT2hmpUHqr2QKwSyePVMbz8KybMeev5HrukY= sha384-k+69eas/f++bXH5Ams96xx0F8naT4PHnt4QqrPWlhnRGkPP4l8ff6Fn9e7q5MNcE sha512-6txXdtELNj0D1s8o0l29xw9vSJeFe/hcO01qS5vLWKqORbIKWUJaK5GKxoHIJemHL5cCn5nMhljeKEgiL8Sg3Q==" + }, + { + "href": "lib/moment/src/lib/create/date-from-array.js", + "size": 1076, + "integrity": "sha256-x3oh7M5QghDCGtkrGJVReV+5D4mCn2Ge44J7T4oUIE8= sha384-FbRPk/kaPCZaPCBapt5GAvXM2cw4OPQ8fwWy51HoJvEblBkksqmyJyhfZ9Xon6E+ sha512-zcGpxSCpeE3sUgyKeGTw5bNtyukvFci9WwkVaiR6/zma0nVXSo8SrQpmHLEusvcszp9IRKzWCQt4jo7kUEnfLQ==" + }, + { + "href": "lib/moment/src/lib/create/from-anything.js", + "size": 3351, + "integrity": "sha256-58uBEKjQBd9vmoXvI8a/8FGW8HKrSkPO8H8Bv2Ijeh0= sha384-b9WoUd/EApRJttfXjr6RK6E4pr2Qj1BsTacK0XQtu6GMylY+JussFY1hEB5zZzbI sha512-44/ykuV5usGzqm2Gdhw86lF37KEaYVTQQMv79QA/EIkZVpryAKvYB89WDy9LFLVC82oqhrZWnd8cKDqCcDZGSg==" + }, + { + "href": "lib/moment/src/lib/create/from-array.js", + "size": 5585, + "integrity": "sha256-kiv/Nh41ded1YoVYGsZDTqhPax3+5RhnWsRjPOBn+qM= sha384-VGr7hhKymLwQHDxvgNwqJqA4gEhzUDzQAjY4BtMvNlho2y3ldJrzpstPuqr5a71p sha512-Jf4qBgRMRKleJcclGO/dYdlbx8Ki1ECOt9/ZlXbtO1XPl/qBn1ycrs3Khs7nuI5lKqBodz7YdnWDhI7H8kOXRA==" + }, + { + "href": "lib/moment/src/lib/create/from-object.js", + "size": 549, + "integrity": "sha256-5UoHc3Uu7MqwkwB0ox9vHPYu7pfSLsFJK4ouS7FQrhI= sha384-TrZMCiMhqLPpqj1v0Ur5YdFGLQ3kI+uSoGMilFeXUHieWh30PxUKHTI3HsjK23U1 sha512-8pcdS0t8lw2zqbPTrRzXoB5PG5JcRx4ks1sPhz8LeE4Hm1Tt0fNoFNSArOhbcPYHLwHxaWFvpl0kBJ/Z4ETrkw==" + }, + { + "href": "lib/moment/src/lib/create/from-string-and-array.js", + "size": 2011, + "integrity": "sha256-j5hxIaVSkszudhAQqc25R8/tbwPBmx4Xrirme2lFYZM= sha384-KiDsNT+p+79LhCy8pPYdkjnMqFviznWwL/MvVGyU8L6q6U5yN7DWbWG6TdkCT6+A sha512-ho//OPkZVWj/cfwA+EiXzN5o8N399Q3k6hpaKcE49U2h0Iaypz22N1OUBwM8vTZz/EEWEu0pQrij9bASSjjwDQ==" + }, + { + "href": "lib/moment/src/lib/create/from-string-and-format.js", + "size": 4092, + "integrity": "sha256-Ck0pWCBGFI9sO5LiDaqFMTr47c61BkTjZEcRsp6URX8= sha384-LUoq9w42SX+tyat2MxnEr34Hm2OTfIGiD8f77cSWYLgbY0FpFjo2T3HiQc0XYdqx sha512-bzJjozH4z6/isSqVUvsYUy9Ni50tr8PxHmpIDpN2r1AXY2mL23yiglcjmTCnBq1sirWAxSwlnXgDgnBxqElVfQ==" + }, + { + "href": "lib/moment/src/lib/create/from-string.js", + "size": 8006, + "integrity": "sha256-DSBYIgvc1awWYpsvXmOne5SZfiE3vwdmxeNFUQX3omM= sha384-l3a0Vk8ZzcO3lWvu+IMT64W4R73U9atry2qBOOuM7u6v0in+jNsjg+Q0l3bPBG+C sha512-RmjhlMw2XFnzbVqJ7vkeOmQnI11suSmhM2KTiU4BJvp6rX9rLPHjt68jD5QehGAvJAndPa17lIQJuattCUdWLg==" + }, + { + "href": "lib/moment/src/lib/create/local.js", + "size": 183, + "integrity": "sha256-Axb1uXak4aoZUPwFnWLnhG+QmDN8hl4sdEc7Wd9BMPI= sha384-n+6e3entr294BHkI4yIA5XuoznTR3fR1eVlltf328hl4EqdFjrsl3Q8ohSCzRB2Q sha512-ZzXkMWE4xR4Xhz0fFsOTcyIPtsbpwlmrnW1gEINHg1sPTysPubX3ayMGmGWqnGBNwd1+cHbnn7xWB2D6TGPq1A==" + }, + { + "href": "lib/moment/src/lib/create/parsing-flags.js", + "size": 644, + "integrity": "sha256-Pn5qkXxNh5KCL8RcfP/aj14Cbd0pxor05a+TEynK8gw= sha384-VGw3nbMMGMZOoDyVRZjmAqTt93H+2x9zMRAuKS3rsKqxyYZn6owW0+rPzIxUGEn3 sha512-GZM3uFBvwuSYtAOhxjkXs93T2IqyA/dN49JZ/2plzwW0VfF6BmZODoFfKucJQZFn1Jb7Fw7/GqYZaQvSINUIkA==" + }, + { + "href": "lib/moment/src/lib/create/utc.js", + "size": 186, + "integrity": "sha256-qTM1J/ZmFHsQ81pCshbdVRNnJbNonnlc5IbJJXpqMz4= sha384-Pt10SHE+JUvLJxP731SfsLVF8kk70j3DgAxuo4C4+kkPFXqhwQT9UqsFbqoKnChF sha512-WPjw+HYsEyYQatDgp9gzlkyN59MarotQFIn0r2QcjpaLYDal423fxiork9criKDkf3qd1K/lhrVMfVcWl8QIqw==" + }, + { + "href": "lib/moment/src/lib/create/valid.js", + "size": 1514, + "integrity": "sha256-59IF6Xf2vYGAt/Wuto252hzZ26ORi5ad2zEEKEDXPf4= sha384-Gi7es/0+jXCKypWPv24VoOK33i4AXdNeEJw74o2BlgdWrowc5YpuY2ER9QkwRArq sha512-VUPLgYQLScNOBx8D+tZQeUpUdWqniXw2iSb15eIadgzaScNtuQZNyFATFmFOTmiBEZe3smbyIePDlcFScG1G2Q==" + }, + { + "href": "lib/moment/src/lib/duration/abs.js", + "size": 484, + "integrity": "sha256-WgWsKM5fHl5hattx68Zt5ZigW5mfPOf6aT3jkSCdewI= sha384-1BkitY/AdWzVEUtRMTHvCMobH0hAlFrHJ2NojWySQqWcxeF6B54R+9mb9LuvfBLn sha512-SRAOgmLWMrHLTSKCY265hqgRXce1Asj2HmfHtVuGjqE+KhP4HvOFPRSl4zkpC8jQs6MZKb9vK6zvUBWYduNOXw==" + }, + { + "href": "lib/moment/src/lib/duration/add-subtract.js", + "size": 644, + "integrity": "sha256-RIz2WY/T8Tuu4wRQo7JyexLcocFVF6z4llIS7CR8imw= sha384-w2KWVqnqaQUQlGcBpKUX5+VntplypFERYkcU8ZMawNypObfP2kBgMl/zFOM6ViWQ sha512-hZOEJLuwE8Q4HUsmSjqnr/kppzx6SZkYwqEhQq5GHzDFH+Doh8KKggboJDm9mohpyfi9UC0WBo+Xi3QWxXPW/w==" + }, + { + "href": "lib/moment/src/lib/duration/as.js", + "size": 2360, + "integrity": "sha256-p2ljv4iBXF2zFevmFPkIMLbfPq+/qUreh15+lG+j9s8= sha384-PFu4O0i4cTQqoCjCpCJr27eYqri9a130HPppFv85P3Lceb5KA/7/NM9ABfxYLEdx sha512-D0sYWiSXObM1/aepbmRgjHfNuFJ0TrvJs3H5znvrCk9K/eWadLK3Vmr4Qu3EgcEjVsKTOc6pwhiHWnk8MrPifQ==" + }, + { + "href": "lib/moment/src/lib/duration/bubble.js", + "size": 1774, + "integrity": "sha256-2e40aC0UcI33p6NTpz5qoAWbVscjGFg/42QhTfiBrzU= sha384-7sOlTbX9kAfT2RDHSyVN+V8e/iHFXqUUqnDLB4qnUeDleXIcijyNkDrFN7kV/nzZ sha512-ioQUl7wKYr6tUdYo39eYw117hgrvWgLV5MefQ+9AmYes8uVNTPiNbaqxIV1NyoGDMUoAj3HevDhr9v5D63l/NA==" + }, + { + "href": "lib/moment/src/lib/duration/clone.js", + "size": 105, + "integrity": "sha256-Y3pBCHPEMvpUari7C9yXNostKxV00uM1YPm6pZMxB1k= sha384-Do3KtwUE6sjn6j0kMORLbEwCu/us6Hv4FfNwmpDxS+dnc1PRI+DobDseoxgqWJAs sha512-5a959vb4YwvNN04/k/2zp+KJcY4jgwIo81UTZx7d3TBU47j6/UlYwjUe+r8CpqJ7CfVf/aOGGGHmSPREPGYKGQ==" + }, + { + "href": "lib/moment/src/lib/duration/constructor.js", + "size": 1593, + "integrity": "sha256-Wapd5olgiu51EK5By8WRim16t+qrO2poUSOlqF5vFHM= sha384-MjAWjpoVOr5gkMWNchcR5t1tUYjsunyxiwcOKk+TKlrgatQDeK9gzsbW7dK1mXx1 sha512-0ujO7l5TjGqq62AvoUEE8oq2LkgaWfBDVYAheAIXjmMosVu+wEX7C/wZPoQrq2y/pQhDuXI93/te/Dj2ym02kw==" + }, + { + "href": "lib/moment/src/lib/duration/create.js", + "size": 4335, + "integrity": "sha256-yO0PhZv8qFU+l7eHlf2v/PgIz3E2TMnJ0qBz2Bnlzfc= sha384-RASHDxEv+kKrX9yXfiFA+qOJFCXfmow28Ifjcs+Jp+gZSyMndOxfNf0pwLA7cXOy sha512-5iBoYODEUgfmZoA8WQXoYdyCoO9TFprQ4FzrxllC5MGztu/mEd+XRR4QfQgbVKgdVDo2KaS/mSHCV6CUVyqfmQ==" + }, + { + "href": "lib/moment/src/lib/duration/duration.js", + "size": 342, + "integrity": "sha256-8jeIo6PxLlSxVHr8Rkg61CDtWBX60FqAeqzSJorWnnM= sha384-3/Lf77UHnmYMp9fGcmdrb8W125ZBJVMUJv/8IIc5RDDH7y+/xCQzI8aKJc+OEo2R sha512-sE2JNBKft/1yZuuSbqhlRKJL3SmBcf+D2Pig4zHpgbxwvYmbK/sU463BUzLw20mEPMchkJXFGMI13jCAUcOTTQ==" + }, + { + "href": "lib/moment/src/lib/duration/get.js", + "size": 728, + "integrity": "sha256-sdCgKY/ghLp1NzGTYDy7e5B7KSmCYsxLuAk9/r0KWJQ= sha384-qXmLu5uHLakn8VKvh7i+/wuMEShwXG+0AiPv8KVujK1k3mfNvPiuJG7FWCg8OyA+ sha512-okSSU5gmYDZo6XKFcCtyYxBTc12PH27ymjLg/8lnTOTxozPZyRCjWv+groMyxA6uBajuxiXv2c12wBH0xRB+iA==" + }, + { + "href": "lib/moment/src/lib/duration/humanize.js", + "size": 3493, + "integrity": "sha256-JdYaexMFlqOkCg5hTC8uYyfnTE5VlLUpEMfHxLSNQQ0= sha384-6XERt19S7Z4C1vltfAMgasNWntdWdRPoeh2MHNBh9VuAYREuHMDUgnv2JoLJ1axL sha512-yss9zQZ8/6Gyplyp50Ybam8wf/WjElW08nsJ7+3qJ2F4X+Vif4KaFqMcY0im1m2ovkmUu6sdebXtk0JZ61NY8Q==" + }, + { + "href": "lib/moment/src/lib/duration/iso-string.js", + "size": 2078, + "integrity": "sha256-5OPbLr+KmKbtgKn2qAH+82grYaw26rgo91tvHvrVcEw= sha384-g8LYII2hlsQIUtZKcO3dwhmK71q+HBiYHDC6FNbwSDomNHg3lNZDPcpzUxWVJKvv sha512-zoVUCKZzxqWJplBzBvSQTW08pOLQ06nNXeEWs7hciLNAww7zl8APLFbqfGx/tqbZFgdvbbplWqu7fvwcRulOZg==" + }, + { + "href": "lib/moment/src/lib/duration/prototype.js", + "size": 1739, + "integrity": "sha256-/7dZbkFU7m+Afms/bgQ1FCt0Wf7fdOMFI8jbt60keRM= sha384-WOeT7cLceAiDZ/r4jB2nshakePE+p8QFDCXzndYa3HCAT+vrQLMhyX+eL6EQF7k7 sha512-2WesxzMfWr5w9TTgitP5cuaZ3D3ByMS7xod9w/deQEM/YxbE+4yIvn/eCQ7MUS45frQSicOJXBfNP093bYRgjA==" + }, + { + "href": "lib/moment/src/lib/duration/valid.js", + "size": 1184, + "integrity": "sha256-uU5/jHo6kNVc4RC+mHN6NlUjYUFzy/P3CvOE9Pm4M+E= sha384-LLnuEgiR78j3JUWZKgEmxwf94tHW8F/qZtoG9NkqhYtY6Dp7qEgKpUILKp/lDK26 sha512-n133ySaU6Re8CQUOJj3OxFsqXE8hFz2suFPphiNtlZm7041bMB/DFmJTSJPAfrKTQL/p8k+6gs1OmsHvvHSEqw==" + }, + { + "href": "lib/moment/src/lib/format/format.js", + "size": 2911, + "integrity": "sha256-oqLkW6CDcQ6QTvhJkrwjl+mwT0KFd5iASzNmvMid5wY= sha384-LUaXIZodVWO8dxB9NVUPrPYuvvbBM0tk743ZojHXBJiSkrEp7Ws28gKimRsBcZ1o sha512-VqSaXlyze+SwrZKKVENtcd1tCGTLGqB2YqF7CRX8LYd4r0wmWGZ/511ykLsmIVbNiFZ/nvFtEWNwf/hsrPznkw==" + }, + { + "href": "lib/moment/src/lib/locale/base-config.js", + "size": 1187, + "integrity": "sha256-LNTOt9aGcXCp7hHknpK1eCZZIhBoo/KDPOq/8dsg2pI= sha384-DMpKE5XHdJf2KEncbuct7/Vo92qpA3beWOWEJ07eX9HUjCGqaknsGMk4DU10Ahg3 sha512-3GO53AYpuQaRpA6uhl53Wo0Ba8YuSv67K5X+Tzk+HGeFTySKLGSdsMZCFeqZHC/XPa245ozDg/T8cEbV+sD/7w==" + }, + { + "href": "lib/moment/src/lib/locale/calendar.js", + "size": 442, + "integrity": "sha256-DqYL3OtYJZ0OKI6VOaetzdIrEKWgrNCK4M5XkEksQXA= sha384-/DJYd2Lk5S121H2IYD85RG/zVW2UYzW4u3pM0OD0R/C7BCdYIlZCkrU31EFsz8pj sha512-ADLO0v9BG0UXLsUD4PN237ikCI9bBKtpI1hzcYAFho4pcUc7GcdgiiajXkU7Oy9op9VFt2QZxeLNs/O4T0X1oA==" + }, + { + "href": "lib/moment/src/lib/locale/constructor.js", + "size": 93, + "integrity": "sha256-rXPIf+1R/ti429cZrI8HsRcp+c3DNYvWvLQyWADhlBY= sha384-9IWCjbO7/c6bedVKKlr+u0R0iGuuqfqEPMd8kj2P9+inA1UmiWYDNoiDebY4zkZM sha512-Z8ja7CEWxHXqyEhHHY/EhWF6295qybOMvQorE/sCTUuY0WnRbFiKYEawbfQELvN5StoM+Do9LCi4VSTlupHj/A==" + }, + { + "href": "lib/moment/src/lib/locale/en.js", + "size": 989, + "integrity": "sha256-dDgGKdmvfq6qbkN/eQJ8CjCoSnZfSWLdbEQAs6MdfE0= sha384-4Xz0d6bc4SbjhN18/CIQCYZ7btnjGZCyti08dmmEVxCBpHrejVTUq/ua2deCi6k4 sha512-3VISY0qfksGXvYHjgy1UObWzOEk9+n+O1pZcVy9ppN15Fh/SUHyWXwgUQ2xVdYgglo6IAK7ThRLi4YiSJVBRSg==" + }, + { + "href": "lib/moment/src/lib/locale/formats.js", + "size": 876, + "integrity": "sha256-YZMDiFmxjWMkhh3TxmqQkDIcdBww/7BjNc8VYVuvRzE= sha384-YDhoRLBu6B1io6X5VVa7D/ygGRiBFPZLextWppk6fLehiyaVP9nwudqWCR/R9aqB sha512-0z5Jt5mxdCRqkxxQ0pfbvraqQjHFIsmrIILbSAPoK4nNFrwMK7jHYuQ7zYxcSjC4pgA2xFfUWTh5uFy/IOGOMQ==" + }, + { + "href": "lib/moment/src/lib/locale/invalid.js", + "size": 113, + "integrity": "sha256-+TLj/BNiSrYYN56SwkNhgug9UzCmNVHenP1gas5tTfQ= sha384-qWm3cxqh6tfdIyLoQCq5IWDx/7HyEwghWoH5vhHw4qntO1Myr8VEExZpGeIYYLF7 sha512-gwk60X2HU3P3g9+/vXqhwwJXzpm2c7OzbVCgG+dKrJDtdkSVOTGU4K7FzfYs5WFD5W1OKtmAkroJMbCk3miWEw==" + }, + { + "href": "lib/moment/src/lib/locale/lists.js", + "size": 2188, + "integrity": "sha256-Mz8EK2lPqnoQ9SZ2n75g3+14e5KOwD6lZNR7XkkTpI8= sha384-uvtJfpxb0dgd3DhvU2D/wI5Axo5HtCRW4MI2oXvSxefJHT/vO21VyA8efbL0raTf sha512-lZ2mcjr47QZ4W01pyF2VDddVWP/PYW08NkkeqhQnM+dQj0UVNKFqLuGSnr1TyWcVwxjcq0iw6lsY6V8lL3G6sA==" + }, + { + "href": "lib/moment/src/lib/locale/locale.js", + "size": 829, + "integrity": "sha256-jonR0Ntge9/Zkqche3v83/Ld3sZ0YiyVgn4Zn2gGg+I= sha384-9KOsjq4fhGK9mxTVIcoFthNcZ59Iz+uN0Fqb05hPQeLfA8zMXxx1JJd/6tXjm16U sha512-YltByIjaxR+944BmIYm7NsM0mA9kkRvNmTZIzNUAa5vBKEtUcV8cKSX7gbqJsIzUCV42bj2WGncs9S5jzLzxFw==" + }, + { + "href": "lib/moment/src/lib/locale/locales.js", + "size": 7728, + "integrity": "sha256-GFpquMl5HHU7ermR9VILKCjUbIjc60eP9pfFpeISmuI= sha384-7T+58Oqe0qwsLyah1gbQPgIFWPlsY1TV7D7iAx2yjvtMRalrdv0lEPxz0bFHOJq4 sha512-3gDOVQFN0b9wukMoPs/dMc94WuupNX3cSj2TZwISE719yiULNPf4nd+vES5IWyEVDMTp8ynFaBXnDRzjrG26Xg==" + }, + { + "href": "lib/moment/src/lib/locale/ordinal.js", + "size": 218, + "integrity": "sha256-zz4J2lyJJqx7/sGrYd/Cj+heMYA2xjjq0IRSbmJDRcg= sha384-pAietPS+LXTQfiuCCh4bD0AXARUYQupYL/7DKRp4EDA+0i0Y3UvgXTa0zPhmWESb sha512-cvmc0hiWHnDy5zP7Fn1h8SS3euthNtKewrqb9oRuowVayEOSNUZ3MuPbf/4bEj7f2HGu7Gr1uMEaA7XHkEQEaA==" + }, + { + "href": "lib/moment/src/lib/locale/pre-post-format.js", + "size": 66, + "integrity": "sha256-ELJ3S7HYzbQ/KrLQM0XW7MKPaHvXM4/P7d+peyMAEK4= sha384-ZvhyUzdxdyIhYkAmHQSRxAKDyKmzceSxSgW6nHIMdSd8YS5yZeCqzODgds2/6TLv sha512-0vvm0vBkklI0S50Su7iAJO1fdu/6qax0YI6nctcvpk/CCsiDC8DjBvXTjp5fyApobtRrmdejheSnyWQo6wYKJA==" + }, + { + "href": "lib/moment/src/lib/locale/prototype.js", + "size": 2229, + "integrity": "sha256-StLjHiT0dXkEM+qocKh14xDnZtlejrjT0cYOBrD7bGI= sha384-7bpNIeBCeT7BRZOr+ZUcmRZuDPKNhc0NyI9p/6GOxUbxdoWfT1h35PLQYDHBRw1M sha512-pYQGo0i0nvRDhDA5bfKaHSWQqx6sySzZ0SbTy14K8ZcabKz2IFKsTKS9XKHzATtWNVqFYQlRuYk1cuvnPhjcPw==" + }, + { + "href": "lib/moment/src/lib/locale/relative.js", + "size": 842, + "integrity": "sha256-Ndqphj+T4jJN0KvUgwjRzLApCqPofeapBUB/LFSdbpQ= sha384-XKK+L/YH3JUgyvLTJRTVTKzPoENjihjWVIUvBaFMWUgJmd0i3zAq884T8Wf5EXN6 sha512-1pBLC8KAy/1h7uCkA6a1qlt/EITFOd/UX23aFdTz0LV3ESbXjEpnzDyRQrH5B90L1hpPr0r+5LadF45akbL/1A==" + }, + { + "href": "lib/moment/src/lib/locale/set.js", + "size": 1831, + "integrity": "sha256-s1ESFok0g0W7xN15XZFT3LcwlU75kQCktr0MRr9FOS8= sha384-Mf0iXbkF0IXE3lNSno5xxC8uLJtFc/+z6KUptqdjzC/dw4leSqNymhE/lAKq1q0P sha512-gncz5w2N6xxacUBKCTgKn0k0Sfdhe+Gke4zEB57qy/9Va3hw8Ck65j2jYUsXzQXQWpTqN8K8p7KHyu6OU633vg==" + }, + { + "href": "lib/moment/src/lib/moment/add-subtract.js", + "size": 1869, + "integrity": "sha256-ZS5OMV5bZIAfINv3f1xSjU+L9U8P1E4XsAO0UM+F5M0= sha384-NCnNiPSyOGoIDq3nydG5yumfPBJ6/9cE8GHHH2tDCPJF8r/zzpit/Uawb9RX1MU0 sha512-xrivAU5MFDCFiyY50v6V5OOSL9kyleImiURfCZnLHILMA3lrgLiyzKiTcHE6bajvMSzI7jH+2LOPyqBSHMuMpQ==" + }, + { + "href": "lib/moment/src/lib/moment/calendar.js", + "size": 1737, + "integrity": "sha256-MbVwhQ3dgI7qcjhQsbyQQ5Ef2kn5oDywxLMHnajfT/g= sha384-2RnDcvXtXQ3lsPjZG2gjF2oYDCeJrvVVFBtMkeTq22qeWR2DT52RQfUcEJdY2bap sha512-Bf/M4DIGkHi2IF0uZx8fyiOGnTPxNs44ai1hVaEQRLU56SrVCSXwDUDy5IkNl+EEZ1ztK+L+7GO6XyeyQZsVMg==" + }, + { + "href": "lib/moment/src/lib/moment/clone.js", + "size": 98, + "integrity": "sha256-iYh4UqBlbioyzWyj8etulXcp+XBs4jDNyGJqdW5I52A= sha384-grI5wtJ7ruUfLZ/PKgXsIaFbS9YDSR7Ao3X4nGwyd/5tm8Bb+ksETJW7Bjz3WMfB sha512-PLz4BbOoJ3ud6OZU9Cg30mPtyDbaEGHNcaUhwog9o2ckKeoQ4BswBRbx/3/2mDGnVAApDajNGM3UclAQiNobIQ==" + }, + { + "href": "lib/moment/src/lib/moment/compare.js", + "size": 2379, + "integrity": "sha256-jd0xlbbAeFA1aHWy7tvHTNZ/yS7PTQdCQ9BOmYx6mb0= sha384-ju7lEbAjSX2NnYgOylmcN7sJ/mxBAqpXkDnNC+5diky25+XB3NQSAkRsuTmj7W0v sha512-hKk+1mObO6Xu04V8/Vzce3ZYhcUXDiAzbCQb7r8cjnBiKV+ySz7nX2YO2/zFndFTs2MConvneZ66yW5CRNazDg==" + }, + { + "href": "lib/moment/src/lib/moment/constructor.js", + "size": 2106, + "integrity": "sha256-GWFa5JEFd299tpaYJatTfNp+1fmwxYiQudNpmiUXapg= sha384-bWuZRo8vbBhw6SL92lfFdG37UdiPN83voHxmW5j3vVn/FCJwMFvUaA01u+55M2b0 sha512-Dzzjrd6syAZdAXqh9HIotZTQa1MNgzXd1jfielK57ZIHmRYSPZg1FG17EozVjEFeFvR5XTxvlGx71Z2Jd8fiXA==" + }, + { + "href": "lib/moment/src/lib/moment/creation-data.js", + "size": 192, + "integrity": "sha256-fRFzTlXiwIrQESMbAbWtXH36bHOn0nQOj69RQPf9xZE= sha384-3ZJ04NLc+LZlxR88lC5BaatYt0lPwnvzMyTK69a6ZVpVNFzwew+th3dYa0MJpYGy sha512-f6hjTCnz7kvK/ZE0EwiTvV8sxrbUqjV8Vs6aeSdrjgVuyow7h5tl4vjqxmbPUqTPagYMG9SHPHyb+n+IQBXLVQ==" + }, + { + "href": "lib/moment/src/lib/moment/diff.js", + "size": 2345, + "integrity": "sha256-cDD3PqGCziLevNud31McGLKXiNII2cKucDAiJbw4M2M= sha384-sQIhRizjNC20nwc2YSlmYorvmMIfK3RLFzP8wXhS3i82RG3Lq75wb7ohJh5MUh2W sha512-+XD4hd4qnsiSSaSi2XS8T4SmXyD/UhNZytuBVrFcvF4Dl2Dg0peGY3jUCz3hkk7qe02YToEJ0Ck8c7rMFEw/vw==" + }, + { + "href": "lib/moment/src/lib/moment/format.js", + "size": 2340, + "integrity": "sha256-gIswwgG7FmjQnEgffrL/v+ln8aEtRDqGffBJ7B6351s= sha384-7I6T1Dc6CFObx+s4DCQ5ASJMYzb58EUnfsFEedQyi8B+RZ14jfCCzPZrUkOKgveG sha512-FKebAXLv6B1/+dcr2gJqZPzaq4LwLI7PW3VEpwKxUA3/Av2UcJFxOo3Ncrt+y+ipEsStQCoikC72V6D3vhFUjQ==" + }, + { + "href": "lib/moment/src/lib/moment/from.js", + "size": 609, + "integrity": "sha256-+ED/kdjzd1G92yRch0h9sni54Q7p1Zr1WLU4cnODtvQ= sha384-fHeelxxWdE4Yhrha+fgFy5Zlj+C+d+3EBmSZsFlohWuGoh9dZ6EYBD84GPlz3Pt7 sha512-79h2vJmfZXY4pSfTUHAWbT9DdAYSWMKl418tigHNaJBtDxvoTJDGorUTohFB8Fb1zAQfObXZEVknwlaXVCI2eQ==" + }, + { + "href": "lib/moment/src/lib/moment/get-set.js", + "size": 2041, + "integrity": "sha256-xmQWOIBmkZbIwAZj1BQ0l588RfCmWgoVXzWS9QKBcgs= sha384-UpfKdopDMNNthpGnL0mL3zJpQFCPpOe/Z3SoLGn8WZeOdZozcCJktvKU8Uz1xvWP sha512-gyE/A+xKip533ZRgOWJh5RC/Od1NXj/qEMGnfYEbAv4GfQheuFh5hiwWbus7RWTtGXeDqqhhGek3SRmzu44fGQ==" + }, + { + "href": "lib/moment/src/lib/moment/locale.js", + "size": 946, + "integrity": "sha256-N+kKyDf7cAVX6Q4+b5Ftsz/1Niyj3bpKMDLBQiCo4QM= sha384-Pcs6sB1oQO0reenYL6b7fz4r8jpUBJtHGDuOLoDEHuOfDvRoq/XQGLDZ/DROchp5 sha512-uY6dq3TMyupBbZE7YNjsmSv05VYHazrzqEQp7YTbD+gI+aONCWscz5QbrqFbGvSYVnTxJA6KanhNITnV3mGHLg==" + }, + { + "href": "lib/moment/src/lib/moment/min-max.js", + "size": 1922, + "integrity": "sha256-ECN9YecFKrQF0L7/jIbePP9GlsTNy5daB+gUggo6MI4= sha384-MS2CjUZvy5J2ogqEjEt61OzaTDHsy7yuTPZJnSwp3fzJUVp3QTP3OtxmYFSY3moi sha512-vjadnLm5FLjP9XM1O2CQe73ryBNMEgje3VDV+EqoytcfKNk4k70QzFi/W8qheQUzLxOndPnPWdGBJfvmaGn7tg==" + }, + { + "href": "lib/moment/src/lib/moment/moment.js", + "size": 609, + "integrity": "sha256-nym92g/gKzd5F5TXNDiSvTwmtBFZTgNPO0B50z7rMmI= sha384-KwU0V6pFx7u34gjE8+s3nklAag3yaPIHdqoAgEJOAMmnOCF9C4o2NDsWhKd/iTt5 sha512-nRN30et/EFl83NsJjvnKBGAiQRVBDQFwUxeRdWi79Fp6L1GKA0KR2wDhNwJlqkTrYf/flnV4jLHgqWLHo84vYA==" + }, + { + "href": "lib/moment/src/lib/moment/now.js", + "size": 82, + "integrity": "sha256-9vQkwK+aPrN588+T2+LAOoK4glTWClQ01GqDU1bEhuU= sha384-SK1Ef614GLWXkJultbjRFR3Yocu3kXJ3sD7pUo7O2woAvdFgrgcs2xwDrd10a58o sha512-pIQBIRET9ZzGNPw5YjWI5e5JdnpokaSxKVEOmRYLCkyiJ1JmTpUlWlDJ6uOD2ePngubMGGIr8Fw52nucMTxacQ==" + }, + { + "href": "lib/moment/src/lib/moment/prototype.js", + "size": 5511, + "integrity": "sha256-YzjqZdfABl0PROcS7Dc5MHQf/+ZyCw6cgJTytSscCE8= sha384-zdHBvzjIJ3zdAH2H0tmUwOOy18RCm4bUD8gTT6XuSBau/3+n+s71mp/OlrybVX5o sha512-OeUSO3YWI2QOEqUjtkeI13CUqVSI1YCUiYcxHO6sbyoUcDg5uoOiflnocdu0RKkVGUJ9lOQtxuK2t6iUULIrUw==" + }, + { + "href": "lib/moment/src/lib/moment/start-end-of.js", + "size": 4819, + "integrity": "sha256-iFT/+Jz6jQukEbOHihOiYlTv0lRdWGKwbOR2M/sbhrU= sha384-1+lAjJ5SH9D4T3pefsCkYrvHkmsXHToOC1m2+S4Bs8j+3U3ede1o0Ikmg8yc85mb sha512-Hu1VEQA6QuwiuDFOq+0TXwLJr9ouJYA0MbbArtPc/72pZaRKmTsTuklQ69NrdC5fXKUmTq23fnj8437QPqY0SQ==" + }, + { + "href": "lib/moment/src/lib/moment/to-type.js", + "size": 834, + "integrity": "sha256-8vWeMwp0LwSqMBeRHKdxowin0SAVNAFKzS+VJwmTCG8= sha384-xMZwg/fS6kdPmPMfU3PsEw42JN4rc/V6VlfngCLMGzYWfG/xCqdgj+OmpK7jHRoO sha512-+P70NBVgsDGkZjx5+ArvzAkgUkKyTJK3YVteptJuo60Y1hLwjZB8pkTqi3C4/Fk8LC9MTODH7QgjhcDliEbapw==" + }, + { + "href": "lib/moment/src/lib/moment/to.js", + "size": 603, + "integrity": "sha256-mTOYOxMd6qkbUjLFe/R2N4+7h1qdIO2+of8lS9eHJec= sha384-F7JcwUQWu6t28YBDFnkqvGICqEMNI3aGy8nsoMD4Pe63aI76MZEELyFVoQbOz8g+ sha512-2zcBdwwfNsYnhk9cEF/a8UmdXP/ArzZPBFOSz1zj1XaCgKCEfKS+7EEKSeD7UpaPwWTjw+BXGeCVosXGHPCpbw==" + }, + { + "href": "lib/moment/src/lib/moment/valid.js", + "size": 364, + "integrity": "sha256-vbAUI4HhCRCk3yBcY2DvAUqeVwhYk8Sa12mcPyVrw8Y= sha384-/+EW1R+sbNPWAooqMeH5pdwkOhlkiqB0v1NZoXabtc3DLulxXz39Y1brvQwn36aP sha512-eDGRp1tgZBXH+/lVftRoIfgr/470poWHA74ORmBAIugvJrY+/jAinXrusP/BSMKH3DdXFnGxJ1Jc52epG51gdQ==" + }, + { + "href": "lib/moment/src/lib/parse/regex.js", + "size": 2500, + "integrity": "sha256-awvQmrk+z69xD8pgDY7ShTc2HDzA5/zp5HZLnZoHAho= sha384-30zy4fPuOW0xHOm9nGKS8qtjSdh6X6Jl+wOC6Y428ystUSL84KHLS0eg3opAShU/ sha512-QSfVwOCRt7sIQg/MvbKpcY4grD3HiAWhrkZ+Ds66AGRNfTxTE1TEMVSPTfDOMtVhWreL55HWjoYr3UcfLny3pg==" + }, + { + "href": "lib/moment/src/lib/parse/token.js", + "size": 958, + "integrity": "sha256-D4nZn8tV5QfmBt5DMLDkMxyJzzs78LDgB707V8fVr6c= sha384-Ybf7soBTvXSzZGgNCnOpiUKICbx2aOmLOV+Yam+SHRykYVO6rEgFhQooO5yaK/K8 sha512-pyaRohGskcU3w+J21aqISKllAc+P+SEK9Dy/MURxZzjBBNPdAlrjl+bTF2OBjriIU2m8Mf0nnR4dXgi/Op4uJg==" + }, + { + "href": "lib/moment/src/lib/units/aliases.js", + "size": 809, + "integrity": "sha256-qdNZVqiHL1ACzufnOXWsWQpR+ibY/5N4kzWFQHTJXwk= sha384-nO9MQ0YRCtQ5T9Q3bcQ8KH/RBxCEZ9jrkuUZ/mXGpkMUxuBdX8eUNfTUilIXiM5m sha512-eV982xUqcwRRFDf29FGOQ/Y4qCwZr91O9ih558jK5j9gYkap7rqdj8rN51arlbJuxwA9Ipp3+tvGk/5BwDfdhg==" + }, + { + "href": "lib/moment/src/lib/units/constants.js", + "size": 148, + "integrity": "sha256-0BCu27nc+eT97wy1gTsqDaz+KKkLp98pzkfJFM6za9s= sha384-2DunZWWGFjKwbg/UH32lREH9eMpJzMfjWLJGYZvaMAF194EbYL6tIGu71gfLu13W sha512-8WZFLtjDlr2gZrzSMcJOLAIf7OKGMjwiAl0NjuTzakY6NmibhDZnJccCJ8to1FbVC2aS2FLsGkCCWrdoPizaNg==" + }, + { + "href": "lib/moment/src/lib/units/day-of-month.js", + "size": 1065, + "integrity": "sha256-nyw9+I2jHjLjFndNC3CCTb3adzrjx9BuxeeIzC39fRw= sha384-Hmmtn7dNl3fcs251qR82bgBjfdhF+jgSVA2wwZgMI3RZBozbFblgQ/xW3Og9PmVj sha512-qUH+NagqTmASPPWntsh/mbTRMsvgm8rX/+b7XbrHqeDl6NvXaEk9/kvA9vSrD5R/XUmZ/aMhKQv9c/9sth8pXQ==" + }, + { + "href": "lib/moment/src/lib/units/day-of-week.js", + "size": 12904, + "integrity": "sha256-SrzX22PrpCnK02SFg3xun8oiIRO8QRNb7eLqM9k1E3s= sha384-rs7vQ51F2xa6dQ3TRAbyWqYzObDqI1vAPZvDDQEnW7ROY6xIBUTfHP0N06nWO1R0 sha512-fhYibGzKGPngFhP9NB5ZXlPe91jrklmS1nbmhi4z8s9kgSGaTRreqg+LATBE65Epkipy+Lnpk0LqLFxXqHNUHQ==" + }, + { + "href": "lib/moment/src/lib/units/day-of-year.js", + "size": 920, + "integrity": "sha256-aynWnmNuGMxneARnBiJYpPonMLlHJkZFwJ9x529yxf0= sha384-EfRP3JqK7zlIRkw4jR88xH8oIceklwjmYFP6Xj5y30zXcPajZ9yU7JVh9U7abOF8 sha512-615H2cYLEo8a40cXQ+UXxDRuxt8Nz0aYoo9SxFqzyty6URn71WBICb/t15RweBKPtO5GlaeO8Hm12Htl34a3zQ==" + }, + { + "href": "lib/moment/src/lib/units/era.js", + "size": 7984, + "integrity": "sha256-z4+oC+opWNbn9wHIP/87BAfDLgbEWm+BhI5yTSNCBXI= sha384-ua1P+jc+gXH+g8ntK+4EzU8zimyf9cjSmqIwUbU9c3tlLZ2OdEQcmI956A6reEIN sha512-cKVhtcqqyiJf5pE/TOlTa00QqYwrl8ZJNGDLNAayYCndcG3rPMBIKAepfzbM0gpCGTEfulppnqCgFxK1G5m5sg==" + }, + { + "href": "lib/moment/src/lib/units/hour.js", + "size": 4475, + "integrity": "sha256-dnhzGXfgmwHqtNlcJxGDmYzL2KBc3ZI3y1nAo62IhsE= sha384-IYf/+FrpjcTcCLup4X/FL1IMgTk8ZN3MxwRyOYyvG530BzJxLCQt1sRB7/w7ryKS sha512-ZgUKcCbxLew8wPA5/ZgVJUTpG04Zx8SxBzZt6liEbww+7AnauzkTGJesR6hkOZvvIWUGZAUJU75ylFjwhFPVSQ==" + }, + { + "href": "lib/moment/src/lib/units/millisecond.js", + "size": 1870, + "integrity": "sha256-o/9d07UK2TD9HSlOCcMoZZX2ETEIxZtUCgHLOxsWbm0= sha384-WM5po0mxAUInZDTBxDrlW2Rec4asDi2Ve084m+eYPEVINfftT/aHxW/3Lnebyjl3 sha512-B1prJTsxruAFxHRWDsYDzvJccfXpNBS6KN+hDNqDb0ADb+z0mQhMjfGMGust1GRvmZ95xoPip7LsojuknL+XcA==" + }, + { + "href": "lib/moment/src/lib/units/minute.js", + "size": 679, + "integrity": "sha256-5ZV1SJfVm+lr2UAo50kgwAyA2XR9tm7fUqAIMBshpdI= sha384-b2US3JPH+ErMGYTFAK5KrT2NwG4kp27ds4dGHNQgJgmKFp0Ozz6Ospjf++moGKCI sha512-V03r48bV4oKlgA74h7fFlNx8HgiXJwpKUgXN3w5vYFZl8YRwBzqG2dRvPkTvxvIn9IJIefLaE19xGS1ihiCzjw==" + }, + { + "href": "lib/moment/src/lib/units/month.js", + "size": 10021, + "integrity": "sha256-anzZlHi4Tz72Ba7V1IVeonHmSyA7TyttuATvQ3KzS1E= sha384-uV4W61B0/3dDT3x8CI034pbPdLTW5lhQzWbsoR1rzhsBKOW8YTnABeVOHBubjaOq sha512-aACXR70Bn8QoXK65IGvAypgrqvCzgEWKlc31qEHvbsne4+FmlFier/RBGBqOcPHUXcE5he3OJKY7aVAMSFcm3w==" + }, + { + "href": "lib/moment/src/lib/units/offset.js", + "size": 7070, + "integrity": "sha256-aa6xZBAfT+bYkuUaMoSfHojAq5/7y7bIny9n0R9Q5sI= sha384-eaQjUAehNepYHCSDLMIUEGhhYG+aFj8/PM2drAZmNIOE6L1+gqoCb0i/xxMFLud6 sha512-9A6zNaC5BkB4cyXVJy3rclUIwTT5gGAHNx5e1KiMI6/TKYDmm5zMaDBXNGIBCqWffjZZ8Ad0r9Nx83oY9XcaRQ==" + }, + { + "href": "lib/moment/src/lib/units/priorities.js", + "size": 480, + "integrity": "sha256-6YkulOGzOmjpwERSqR5mWgTUO/vQTSTxKAFRGt/fiik= sha384-P+q1ge3zG7xRIGFX5SOZ+dC8nVmuATrUAxA2Ykg/NohY9g1Q79iGcWwFUAk9/4BF sha512-+RJNbcPVGQhPzvfgZCsmT+P/Po3EvnpOw/8T7p+W5oVCTzFdrjyQ3SC+JIOGj21vBOXtwSNf9ygZ9YgJdUG+VA==" + }, + { + "href": "lib/moment/src/lib/units/quarter.js", + "size": 780, + "integrity": "sha256-vR2nV2czhrxdnfS9z4bbK6xQTkt+6CKDGf52U1lENmY= sha384-W2fkZHZBoC6S3sR/NkA37aGphzNLk/pMhrfDBVSo3yNR7az6VEJZhg9IRxOqQEOh sha512-Vh63cDxdsJAUFlRGrbc9HMRfEtLucYJ1RaoOJWmRJgt1d9NqOOiOI1qs9++RMYaLUMaQdz/mc5pmNEL/Pv+3jA==" + }, + { + "href": "lib/moment/src/lib/units/second.js", + "size": 679, + "integrity": "sha256-wd4HXrRQ6X+ldZ+sMshCHzgaGvcyXtBkj7GJSJv0ZnI= sha384-iQIuvkKmP4EznEna2bMpJ42fSVOk8MJO11OGFBgzyvR0HOLtWKdX7b7hcPlGGvnB sha512-rSNtU3I59jcqxQLRp29QzEMSd+7XAroLmgvEf9PZl21WHrqU+kgqwfdMrGiQ+mKFUPSx4lgr8fhbmhQJwX5/eg==" + }, + { + "href": "lib/moment/src/lib/units/timestamp.js", + "size": 590, + "integrity": "sha256-xaCYIx44t+LUZh/+U5qWAFSWR++NryUSajnqdJhWAAc= sha384-3sqWKi6Oq5/jw+AJxWoZOmY9fd4vbukZd80l5NLSw5jsRnzy+wc0+JkkSsl0mXtI sha512-CprJN1Alhmpfi5VNgPC5FLR5QyGRcr15/q/3nrpHkeDpTEreHsb8RCaXA5HqYI274NroSRShjZ/CRHrnbVM+JA==" + }, + { + "href": "lib/moment/src/lib/units/timezone.js", + "size": 325, + "integrity": "sha256-Sb9dDTrkoGKe276VYa99/0dWSsZxTiqZy9Hqa0uCc2U= sha384-MJQ9t2acDuH3kz7zEUYRWeqPixgq/sfdpnPtzLCGrgVK6nNdkboS9I1AHywLhZk5 sha512-GKFc7AeVusZq7czWpHWgOtQww3CAgCwX1hujSVDywoJ/rzgeU+FEmicNg0NsSrS1Nw8a44vZ5Ot3ik4LLjk7Fw==" + }, + { + "href": "lib/moment/src/lib/units/units.js", + "size": 404, + "integrity": "sha256-qVVJn538i3dIu0S6wtmfmKY45ECpbbZ5Xe41Xu1ug4k= sha384-WIOwerumgviRoR/V43U6rfx3IGmDkanxF++ufnOoZgAlKTjwPJqZeVA4Lyzbu81c sha512-8qSKFFN4vR447FTgzOVN4KR7AdC+vyGUW+miBqPTMa9t0WlRc7JiLyTkR3xSX6yjc2q8vBeHlG2obTteRf3heQ==" + }, + { + "href": "lib/moment/src/lib/units/week-calendar-utils.js", + "size": 2107, + "integrity": "sha256-MZnCM6t1/oAyMhYWrQt2K4VaBkpzyGBi+jKcZZEeOMA= sha384-vf4PCHIhlBz4XJLCkHm25SRbb488ZQZc3EVGHbszo8z3zz5gqLE1EM3NwioyND2x sha512-1bEmtXpbF7u9d+HatGYj8cXFps6SF+JrdhNpsX/PFIHCKWmQkxL9tjwPpnTWkBh1QR4meYiuWyq/V90gqhzO/g==" + }, + { + "href": "lib/moment/src/lib/units/week-year.js", + "size": 3483, + "integrity": "sha256-7xffE2UhHJpMwVu8x4pr7bGYHiUnkjWOzrMMyXPfcxg= sha384-x4UWnCG52T4DmVX/dyYASQBtoHn3QRhFtDimnsMLS2PmsENccQkIxhHWGhBdvdLS sha512-0SwFFXErNJZFW/vu/mNKS+wLGj7mBkNnVdHdxJyYtMNTiHQw7zOOZpT4eS+x3NIGjvK7pITQAJaF8ZKce8xlVA==" + }, + { + "href": "lib/moment/src/lib/units/week.js", + "size": 1664, + "integrity": "sha256-eiOisARzs01X9Klg47f4L7dxafywY2lRlFNSUKaiF6I= sha384-C7Z6GBiZJ6c0OvtqzvtR/2+ZWcxRpMWyuqFfx20+ipVAwvJ8Tn8zAH/082LAfqQ4 sha512-x6a3PWkhNWeEzQTTXFbJEPDTrGu/Pv011svt1uNPPvQcKOyHvb10fL7JVvD3iqnfwCKRJFNnXCqq3p41RJDl8A==" + }, + { + "href": "lib/moment/src/lib/units/year.js", + "size": 2001, + "integrity": "sha256-Tv5eRAOLpQCdms2hVPE3oVerMFEMbHK1kiOndE+u0Rw= sha384-/EX/2y68yH3cZCXxrUQkFQBslVfwim7/ErElgpdmJYEcfeaVEhODnJGCQZ+R5er1 sha512-Z2+XZxr1eChDAW2l0DDoe9Af0A5Po+ZMdpTPe5er+pBFZYIH0jYrrWRfbdYWim9BnxS6A/yForLixqevRuYVSQ==" + }, + { + "href": "lib/moment/src/lib/utils/abs-ceil.js", + "size": 154, + "integrity": "sha256-2eZ24BYQ8wGoBTlMufQBC4mZQ9UUJXIT381nCDi2kxM= sha384-DI8Z5HzqnaqXYRys2Y6QnJAEmPKHm10njOdK/Y5mwEWGE1NhgWuILeqpLoMu4mT6 sha512-ZchebnkJRMiPEeRSsX3PWweNcU61POo7PzS+UN3qAWmLjZlM/a1D6U+dSSXcS38Va+ICC2Cc0j9HttSBDYviyQ==" + }, + { + "href": "lib/moment/src/lib/utils/abs-floor.js", + "size": 179, + "integrity": "sha256-1yX0klnesHifrNIND5JSD5L8O18aHwwxd1YmGg5/UZg= sha384-hLGxBPlEqD8yn+qeJjF8UqJkNG1Sm0UhhqOv2yQRau6odaMwQc1PHjPUDxBsjRoI sha512-Zvsp9doG5SQuHsUO4VhozRB7MYAVz0RmmRDGpLHlz6LyntqG/QYXq+c3wOil6F4uY91yEr7h49OXn5jMeucnrw==" + }, + { + "href": "lib/moment/src/lib/utils/abs-round.js", + "size": 166, + "integrity": "sha256-VDxR5Ti1gJENtJm97Tbg1oRHhpbeGsH7rrcxUGC2r8c= sha384-ZVDkbv+2tPVF9AcbQvX41i0bMM1zExqHrKUqW/y7R86mzQF+5OYHfqTd4wxn2TOL sha512-wtHRGYRYbVBKBkPYEf3dKDtmFwPnz+iTEDxx4srr1KTKwFS7mU6/RxwWSVPCToiKFqL4Fj9cLre2L9uiJjP4hA==" + }, + { + "href": "lib/moment/src/lib/utils/compare-arrays.js", + "size": 553, + "integrity": "sha256-nfUL/YIMZC8NRcDJVRVAQYw5UJNgIaRRLaJ1E2JFeeI= sha384-qqPyZvJlx53Wo7/R/QrJxGP2+ft+C6yO99tddD9MeWzclJ6eaqdMDkumfD5jJLfz sha512-EYKQbH6TTlFOUC2hezFAF/T9xaKGaLmnuyRSMCNKUsg1riJ81ywQp/SlzGHMcKIVmyyHa2wnQYcHo/9D8A9sbg==" + }, + { + "href": "lib/moment/src/lib/utils/defaults.js", + "size": 203, + "integrity": "sha256-S5GoyxsxVdYusY8otlcKOc8ONtphKl09enTSNhBOISM= sha384-rxD/fJ4tKV2M7FQpJ0W+C5rbQXFx6Pv2CY/KlO6i3T46kGkSgdaUhE+tiwFU/82H sha512-xQrwZ5zvEGooAMmkjP+RdJBbyqCpmckDwquMsAU5HdM8F0SqbKEGBZ33MXS2hoBbn/rQk+TMCkcgHz6RanlAUQ==" + }, + { + "href": "lib/moment/src/lib/utils/deprecate.js", + "size": 1946, + "integrity": "sha256-GSqz1ELd7TuuvWLhS3tI9FWO+6Tdv02Z4tMEcExWRQw= sha384-FqlhFG1TD4rf4yiwQ/K3TOXSL3VAllCSPtHP9csLKYxJGceFN6xZhHiOn80bQBBT sha512-EgxTY3SpH6SJwBXFV7dQQ30ZfnAWIXtSCnH19MhI+sPKxPeG+BhSlSQ0H/u55E0pJ0sDEiVclONUIasfV1M/Cw==" + }, + { + "href": "lib/moment/src/lib/utils/extend.js", + "size": 345, + "integrity": "sha256-xQ/GVHpHMTJG/0ynNItbvmNw/3+Uvjj4MBzh0vC7wmM= sha384-bZtxY7XaLdmDizqi0s9YTmIhu39hRGzqflDhpkbGTLTumYjqyoIBSaBJpooJ2Fey sha512-6tK/r743o3rv1BuI74Val0j06HhPpY2u0HhEjumDcBcbEhPAPbikByUyQ2rIoSAlgVoBvAIt/05BwkUu+8CyMg==" + }, + { + "href": "lib/moment/src/lib/utils/has-own-prop.js", + "size": 100, + "integrity": "sha256-o5YBVArexFoUVFqahuawu8iYnHBlg/3VeYlvJbfvw/Y= sha384-rlnSHV2GornMbIcWE1BCCZTPDAAzFfJ7DSDxUHAznftf5O90SSmVVjocuPo/BiEG sha512-+jzd6M+3ijXP+TtOn2K5/QqsOz0yAcxW5FXchf+y5qxU0E35yoKjZrS0s2vPXCINPZ6arXSskRHsd2orz+2kHA==" + }, + { + "href": "lib/moment/src/lib/utils/hooks.js", + "size": 296, + "integrity": "sha256-6ZAJGym9XFawPA82rWHdgBuZ2Il/4k3dFgeRKAFkWN0= sha384-X3Vmeo02AbL9VNh1emNogqK1SqloCXFu/aJZEInoXTyiY+vX66imdTeK1owm+n/A sha512-jXh32Kl6lTvItP5D9JgpiUOgAw2yEE8fVAVPzccbPsZzERTcQWQxWkk21I2UHyOSA6BgkDQg+x6bZGsc5iNqBQ==" + }, + { + "href": "lib/moment/src/lib/utils/index-of.js", + "size": 342, + "integrity": "sha256-yFEcTR/IGt7lGHs3Vvj31DmXO2KYK+nwzy13/Jf10yU= sha384-sfsqajlGFEkPabY6gos7Y54xEO4GGNkm5yVR2Z0zbjvsxrIYwv6f6iUsQeV9GSUt sha512-QmObeCJhvL14ApKRWJY2of4TWgLlLHOL+qv01I9Gzh1RCgkLyFDiaOMHnGKsJpaDNtUEK4Dm/nBlpc2J8s5gAg==" + }, + { + "href": "lib/moment/src/lib/utils/is-array.js", + "size": 164, + "integrity": "sha256-HWImduIls01YYt/+Xt8idJZYqETkYBZHVMWMJsXT5fM= sha384-l9p6Le/FbtPlH3UNmpWIFndFSOIWvYdySJ6u7OTlkUHwfFB7AnBe/3RM9x89GTxS sha512-T1QAvvDfCVQ6Ientl8Z30VGGiJ2beMWulr03Xocwffjam12Sg/WSbLDTK1Epi3fufr6IYAcaQeuc2EG3lgdWkA==" + }, + { + "href": "lib/moment/src/lib/utils/is-calendar-spec.js", + "size": 670, + "integrity": "sha256-Pmoc43E5LoriL9sX5HIAoNqQQOa3qus1i4sDQMfHX2I= sha384-vv7Z2l7h4QNY+U/2KGWH1Hgu40UHLmxXcrhXO/1HGiF/4aOi+MtA46uTAtw8eR6b sha512-oV2j122hZiRJps9U9C+4BQ99pGB6EgDAH7Y6TsdMM2Wn9ag+GvQ0PMQ02POqR6nkhuQdMogkRhPyRlMa1csGyQ==" + }, + { + "href": "lib/moment/src/lib/utils/is-date.js", + "size": 161, + "integrity": "sha256-OMqLHndJsAFZe4j8VwEXkWsWS4GqlyihyxCliNRc41A= sha384-9kuSCHn+PpkT8GL6V84vwf4jdSnKNZ+PwBwB9WEeT5NaisgyQbReOXx7dx7Bmm51 sha512-a3Y+BbO+2rZkvF9SjpYOIQv8evy8ixXpVLac7EFVsRiATBZqNCaSVViAS6ZUtOx6Pwn6sr7deaaPEyCjgSrCjw==" + }, + { + "href": "lib/moment/src/lib/utils/is-function.js", + "size": 210, + "integrity": "sha256-47CERZEJAU0adTWdZ5mhddWygBfDiyftyjICScgC/rE= sha384-ytJ14TFyijDj29OCAeGd+up4RLZBdDc5pODj+02zeuTr+GnE0blljDTp8uIxXnnz sha512-AzPR20KiKBBFhQ8bQOWiXxw4PgZ4+UKEDrsx+GxMTzowuzzpqLdYmS25j7Ypv6XDnKEG0Ttkc8n9DgZT4zi17Q==" + }, + { + "href": "lib/moment/src/lib/utils/is-leap-year.js", + "size": 106, + "integrity": "sha256-Lw69Xb7WJko0ise+bEjRW8zOV9xeM1qFI5qvz6R5u/M= sha384-L0hBiPJ2iWFPCa1TXKrtf6Aj907bSZTUqfiMq2n9Y8EhGrWPo4mml41NtdBAMggF sha512-2oZfuECkfi6METnfLuDbR2s0+4ziyk4K8/xShUqY25x3zK6KMrqR+FxrLqEyxP2eKvc7pM7wwHr/6iwVxdVQwg==" + }, + { + "href": "lib/moment/src/lib/utils/is-moment-input.js", + "size": 1988, + "integrity": "sha256-7VChnW6+UJeRBsNqtKJN0/joLMyLb86+l+YrmLKf1NA= sha384-J1QilwsG6z45eCh10U4E/DAfVOfRObqgZi7vujGaDe6EalC0wrmVU94zNbgsUGKH sha512-sQ1H3fPVoY1gaZHMaD0tDalQHjijT9KpeAeuxWiddvWCkYDnnBh/Cv/Kl2zcG86t8+2UlH+XM/n+//JCaOV2uw==" + }, + { + "href": "lib/moment/src/lib/utils/is-number.js", + "size": 169, + "integrity": "sha256-FH/f6n4rjzUw8ruYmR2vqrkPCaKFV8FYN58+fzy/yCI= sha384-hd22QixbrW31A1pvIznk3WxoZgYPBKOJnc2s8fD9eNDE6LrGstx+8s4KICKet2ld sha512-kpl3HvZJr1hH8AQNknebWlgHYUFJu/XZUHtF4zyfkiNNxjwVRqz14fJ45YmMJebXidUJJOhU+UFVbPw8N6vFOA==" + }, + { + "href": "lib/moment/src/lib/utils/is-object-empty.js", + "size": 360, + "integrity": "sha256-onmNrFSU30hMPo0kwidYtkhT8h5VuQowsGjqM5aVWcw= sha384-SBAY19qvkSfN4lFhlzPbmwRNBEfSgYmDcoIS/rEiYs+oCiNrWV6z/OdH7ucWP3s/ sha512-B+6evxF3pPHJyWCOtXpZAIai1KX4ZJpSYT/YtFd+rY0zSryIWpNiLoIFQ9oiSiKgqanZKG/Ums0qCf8NuqDOmw==" + }, + { + "href": "lib/moment/src/lib/utils/is-object.js", + "size": 246, + "integrity": "sha256-mmY+L3MALc5a3YJkfNOpzpDirN/NwRRNrB+rEpuKTCg= sha384-Ye+5cRbFjS3V3zxt3NlQyKm63hDte5FJm3qlsECgdfa2xpRFvCVJM8bDAU7KiuHw sha512-Cb63jRy9z9ETkSsxkqUi18ZcjUb5pBfNooiOqILFxF9TnCoG3Zg7R/lLpZQrGguv359GqKOYclP0ffNecgf3Vg==" + }, + { + "href": "lib/moment/src/lib/utils/is-string.js", + "size": 109, + "integrity": "sha256-03vtsoNeUCL6Tn4/xSrZwGA7jwCJfxCKOw0WNGqCrNg= sha384-k6eC9Q5ytVMkQxHwr7QmO6khQO9cjpe3A07F0N9ayWeGSMnP3J6pEwQPIIlVhNvp sha512-RTVhBcnONcJsR+P4NYZeoheMEd6xPSIEk2TVRvUKaIkywxMrwk0ZuiDkzc8UqHRJieCO/kBF5zGWxAL4C8OJ3Q==" + }, + { + "href": "lib/moment/src/lib/utils/is-undefined.js", + "size": 76, + "integrity": "sha256-SpC8xsskIoMSQEnWjcrOOJZIHOwxFLya1i7dwxLX0RY= sha384-ywnPgdQtwssletWE2Cp3TZbunRpXaMIwLW3INxYmeCkoWJ5vnhaqdtFWL/J6DLsM sha512-7YRChbQ4sIaH6AlMxNvqX9cj/sWeIDCwLfSvv/Nz9TddhsjKfTJ1BOZ5nxI3/L3UAhPrNU/1olGlMx+VRZXWNQ==" + }, + { + "href": "lib/moment/src/lib/utils/keys.js", + "size": 344, + "integrity": "sha256-mCvgxW0HKOi5hgwzLY7QnxZr8Hr479ZtuiPMmKFNNeM= sha384-6+GUsbIomO6BuXNdFzAORYM7o6mgOZPdclyvdhn09pXBvwL/L/ozouwDy66JSZkL sha512-o51VWL8ri+l9c3ZyfJnS9r1Si3WGzTtk+vNg39Qw9Xm5MolfKZ31blfw3bFF36xLFEsimehdsBxAB6M01whYAg==" + }, + { + "href": "lib/moment/src/lib/utils/map.js", + "size": 189, + "integrity": "sha256-7YwndiOKXSFXu/2PuMp0bBB9wUyYvWuTU3/cB5Ddfek= sha384-or6nFq106hWpbbpSm0PpSuvmZ1Sjc5GLOC88qEdzvy4BEewV994KwbtLTGdpahtQ sha512-087D6uqDuHfpUWZTPPbt+CXYseeWApB8KS9BN/KA7+r0qa7bEZ/gLIAhXypRyH39Czlu4px9J9kA2bDrg98AhA==" + }, + { + "href": "lib/moment/src/lib/utils/mod.js", + "size": 68, + "integrity": "sha256-JKY5yAeHsH453LP+Pm7hPhSQP6an0c8lLDxjyfeuubE= sha384-+W8es0riQHDYCi4H/erIJGXzrQQu6g7yq7C5dtRn2EbZBNATvJwc0QLoXQmYvC7O sha512-RpLSp10Fh4yTfbahNTbtaPVC/px4de+crpHJiLDaatcxxTBweCbPAFtzFNtRV4nPSFyNGiQ8JvgfTLIiDthcrg==" + }, + { + "href": "lib/moment/src/lib/utils/some.js", + "size": 394, + "integrity": "sha256-oPFNfrbybKG+ICSxkf6y+bVSoz91cQQ9jLekA8C76iA= sha384-caEo04VFRBQiqeHNd5FzOMexIc/016ym7sC/n/3WijjDJtrl/qttvLMn1LEAT3vV sha512-lAL5nLBbJ6NoPVd58qFplj+hqT+fg01uyocop60IoQQPfy3QhzPuuFJR/u/OUPvS5f89JskWB3ueYvRgtdjxCg==" + }, + { + "href": "lib/moment/src/lib/utils/to-int.js", + "size": 282, + "integrity": "sha256-ZU6ZNi9eh0PTH91ZPQXOfqhmMUEHBsRFgfLF3Ab18Ao= sha384-zQrrxRn+uCWOUFOcFrLQv+v7neENhRXZHbY42/eYlPrGd4S1eDPzdP2PhDgq+Y/C sha512-/R3XidVj3ugXIZ8ZCw5SO8qilUFr8qT5eFalSDMooSwpX41E36/uhsqpbff8WW9IkAVBxv9HOyMmAImamj/9KQ==" + }, + { + "href": "lib/moment/src/lib/utils/zero-fill.js", + "size": 352, + "integrity": "sha256-9ht1ynkQwA1VOb82BUKWI5ERHjcF8syB7ahf9lVavT4= sha384-AmX4MzSPLJKd0o5KsrfmRLDl4+NkdB/0gcin0hP92Jp+h+mwINoD2cTatB+HJmFb sha512-92NEMNqagzFdskxUa6Rvjqv7ELDsG4HAAdFMwKZnhNSyYr5r/bGtilREhmSv34hHYTKmuYJX2XUwqLIuUe5SKw==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/dot/all.dot", + "size": 19146, + "integrity": "sha256-Y9VOpexafTP+i5EfXhpkWEyCDikqbw/dJW+mqHoQmyA= sha384-nBMndIR/6Kzg9wU9mG+f9P3M+1iBK8kHbzp717tSElxjs6k2ROKZAjIkoafbGhHq sha512-UtfUkcxU40PHbH1/uzeZ4UUbY6M71zEW48B0ccuj6pTrl5YlNyeCWTK8INjBb+54EmnZMsfn72Vaza/mTGlypA==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/dot/legend.dot", + "size": 590, + "integrity": "sha256-scq4Hafi1nBBRs/K224XW+AaGNTL7ct63mHBuSgbVQI= sha384-LvGsPIUWp74vngv/kN0BSGZ14ofPNUXYrtkwNtcEW6bWbpdq9zqcNzWSAYj+qHki sha512-ZAut8qX75P2yCzbL9zQZ82EiDXLd4MQc1ZbSfZd7dg2JwKfNenHcKcyYUwCjS48szt1kJpjnzvRKZjodumlc5g==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/dot/modules.dot", + "size": 237, + "integrity": "sha256-M5MnIZbXpRnRfUjvfEKogxSLKJaU4sfJ9x+hika8EVg= sha384-xLiwUqSxoVpDX4O8blsBKe6eMT6Sv4gZr4ocUMkaOv+LVyjnzUxO2Km04B73A0OK sha512-zV0tGHFNFrws/OcaBU/c7PY4VqAnacEdz+I1cLKBH5u+lj9HL7UXDa7fuRU80/2aahgomLVLlfVkWSNyXBHBgA==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/png/all.png", + "size": 863973, + "integrity": "sha256-cw0uA9H6XCpY0bftkmLssDQ6vB0gVBrUa2033kBUh48= sha384-RZflXwB0/xy+f+WSnFX7xQZVN6S6C1ReiyaeqlyVBFsJAR1kJJAH01l3a9pyvoJ2 sha512-e1w+z9tuObY2OvqvY8xqnfp3BkQ3H7Xf4nMtHu13OqVgKF92AMvSXCQeEEzSwsGKrEG21NIdckCdurRD8miHNg==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/png/legend.png", + "size": 25369, + "integrity": "sha256-aOsRIyHAfkcYwVmH9wQ4jHRHIGOyi9BJ668q5mBOVHE= sha384-ykFbV9+ouApDH4ORbuyj7BjqP2lTFLwLBK0U4Dn87cJY7TfK9bORYIaZt7aNd0zr sha512-22TYNgPsN+ByIDW7Fk1RA0+zKwentyjn4la3npH7biJiFLTgkmfoZASGGdGrxecbL2+XGfN121/aCEEdeB2kMg==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/png/modules.png", + "size": 8165, + "integrity": "sha256-5kSHF14yYhpiAmW7FucSh7z6oyosdirByBp+qlGiPHE= sha384-VTmFptIOJ8e4SoDKq9MfdIR0KLQma0JxtCqXoV8LFdzFAoKzmuqLV458Zr9gYZ5/ sha512-+sfxOn4G+wNGY7naJVXTFdnf9umEsnY8KQD8+7gzb1WHFn8nsh/XRTB2IL2N6Wz13O7v+HEZRhowwkIPARimLA==" + }, + { + "href": "lib/messageformat/example/en/sub/folder/plural.json", + "size": 81, + "integrity": "sha256-qYYqUMK4uBIjq88+vQEMjW48cBqTO5Tgthr0N75V4i4= sha384-u3CCE86K9FdInUySFVKmOuD12ss3xGCBMInX4ZqY3ewPP/+NL6oifhMHS56fFF2N sha512-x3BEyxxwfM44sByrurCAgoLzNUYb4RdtmEtLU2jWQR8Tg/2uPTLfw4zpTRYoqWb8aEzk/xnzGBfWJ5lfYJB58g==" + }, + { + "href": "lib/messageformat/example/fr/sub/folder/plural.json", + "size": 99, + "integrity": "sha256-AYVEMQ/G4+jf4gP0gaF8PM2dE5kYY0+TyBfSBWPCe8c= sha384-1eegyWCOVmW75wEWuCj02k0r4bkyoa88qnOD9D9vY8UfmmMiofiVDUcktVxC+N2i sha512-q17BH0Tnrt3cShQt1nM7tck05JSG1uJBEVPiJq3p3PZvM+9mo/iMWKgH/ZHpUHPVQty054CeCZojnAVM4MWDtQ==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/dot/modules/ui-leaflet.dot", + "size": 17652, + "integrity": "sha256-lG7YDoa9fl/1NHhoDBvdqkuaLzdfBUqj0SiG6yoJ56s= sha384-L2eUo1kzCk5U78tUMB5gs/Wz3ld/X7aUxupag7CjpoFreyhaZqwlhiqC1zQvvxYR sha512-uovHCe6hLGtEPXz2h0u3dQjvJf5eZ4Ok5NltHk15r2u3f2Ur8LJAvgNou1UimWZpSdVisk9CnFu0SrGTaNNPlA==" + }, + { + "href": "lib/ui-leaflet/dist/architecture/png/modules/ui-leaflet.png", + "size": 896225, + "integrity": "sha256-pZ4X7Tz1RdabzUI6yUZ+Lg1W7euuiGrj5cY3hePk7L4= sha384-SuxL92a1cbSnFzRgbCcpieBb8fxlLR/lnJ2wpRDvziZxLWeln1phIxC9ba+kc46J sha512-606wXqrEeTTS2n3ByrHL4Rfta4PhK+Zfv1QYheR6Hk1xc277c9/6qM81DaQjYLO7hYisb5KrflaIOrDcX3gubQ==" + } +] \ No newline at end of file diff --git a/www/templates/common/map.html b/www/templates/common/map.html index df10b2fdb..4eba22415 100644 --- a/www/templates/common/map.html +++ b/www/templates/common/map.html @@ -6,7 +6,7 @@ on-refresh="refreshMap()"> --> -
+
{{'map-refresh'}}
-
{{trip.start_display_name.split(',')[0]}}
+
{{trip.start_display_name.split(',')[0]}}
{{trip.end_display_name.split(',')[0]}}
diff --git a/www/templates/common/trip-list.html b/www/templates/common/trip-list.html index 27c2c573d..6d1ff2882 100644 --- a/www/templates/common/trip-list.html +++ b/www/templates/common/trip-list.html @@ -19,7 +19,7 @@