diff options
author | Marvin Borner | 2018-07-15 16:08:23 +0200 |
---|---|---|
committer | Marvin Borner | 2018-07-15 16:08:23 +0200 |
commit | e0bcf40f8ba4be8760cedd54e3a33b50f8cdbe19 (patch) | |
tree | 904984b24aa5b0418bfe5271011a1c92c79c2a59 | |
parent | 693ea52ab9e080d415d80c19c4d53ddd21d6fcc6 (diff) |
Some fixes of nodejs packages for admin dashboard
-rwxr-xr-x | package-lock.json | 74 | ||||
-rwxr-xr-x | package.json | 6 | ||||
-rw-r--r-- | public/css/admin.css | 291 | ||||
-rwxr-xr-x | public/js/admin.js | 173 | ||||
-rw-r--r-- | resources/assets/js/admin.js | 664 | ||||
-rw-r--r-- | resources/assets/sass/admin.scss | 10 |
6 files changed, 770 insertions, 448 deletions
diff --git a/package-lock.json b/package-lock.json index 4a01aa7..f22a5e2 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1455,6 +1455,60 @@ "integrity": "sha512-3bP609EdMc/8EwgGp8KgpN8HwnR4V4lZ9CTi5pImMrXNxpkw7dK1B05aMwQWpG1ZWmTLlBSN/uzkuz5GsmQNFA==", "dev": true }, + "bootstrap3-wysihtml5-npm": { + "version": "0.3.3-npm.12", + "resolved": "https://registry.npmjs.org/bootstrap3-wysihtml5-npm/-/bootstrap3-wysihtml5-npm-0.3.3-npm.12.tgz", + "integrity": "sha1-5NhqEJYMqDYQpV7JTp44pxQsWZE=", + "requires": { + "handlebars": "^1.3.0", + "wysihtml": "^0.6.0-beta1" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "optional": true + }, + "handlebars": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=", + "requires": { + "optimist": "~0.3", + "uglify-js": "~2.3" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "~0.0.2" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", + "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", + "optional": true, + "requires": { + "async": "~0.2.6", + "optimist": "~0.3.5", + "source-map": "~0.1.7" + } + } + } + }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -7039,6 +7093,11 @@ "jquery": ">= 1.7" } }, + "jquery-ui-bundle": { + "version": "1.12.1-migrate", + "resolved": "https://registry.npmjs.org/jquery-ui-bundle/-/jquery-ui-bundle-1.12.1-migrate.tgz", + "integrity": "sha1-uTQ+LDEHQ1J2Ms/4vtsMXpYAsUw=" + }, "js-base64": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.6.tgz", @@ -8724,6 +8783,11 @@ "minimist": "0.0.8" } }, + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -10989,6 +11053,11 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, + "rangy": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rangy/-/rangy-1.3.0.tgz", + "integrity": "sha1-t8mnCuoF5djNx0qNTIJz1pcnGQQ=" + }, "raw-body": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", @@ -14325,6 +14394,11 @@ "slide": "^1.1.5" } }, + "wysihtml": { + "version": "0.6.0-beta1", + "resolved": "https://registry.npmjs.org/wysihtml/-/wysihtml-0.6.0-beta1.tgz", + "integrity": "sha1-j/oHO7Wi8i2NMH90liBboy3RW0Q=" + }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", diff --git a/package.json b/package.json index 51c40ee..a57d27c 100755 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "browser-sync": "^2.24.5", "browser-sync-webpack-plugin": "2.0.1", "cross-env": "^5.1", - "jquery": "^3.2", + "jquery": "^3.3.1", "laravel-mix": "^2.1.11", "lodash": "^4.17.4", "popper.js": "^1.12", @@ -24,14 +24,18 @@ }, "dependencies": { "autoprefixer": "^8.6.5", + "bootstrap3-wysihtml5-npm": "^0.3.3-npm.12", "css-loader": "^1.0.0", "express": "^4.16.3", "fastclick": "^1.0.6", "ionicons": "^4.2.4", "jquery-migrate": "^3.0.1", "jquery-slimscroll": "^1.3.8", + "jquery-ui-bundle": "^1.12.1-migrate", "laravel-echo": "^1.4.0", + "moment": "^2.22.2", "openpgp": "^3.0.13", + "rangy": "^1.3.0", "redis": "^2.8.0", "socket.io": "^2.1.1", "socket.io-client": "^2.1.1", diff --git a/public/css/admin.css b/public/css/admin.css index 80bad44..f42bebf 100644 --- a/public/css/admin.css +++ b/public/css/admin.css @@ -18,14 +18,6 @@ used under CC BY http://creativecommons.org/licenses/by/4.0/ Modified icons to fit ionicon’s grid from original. */@font-face{font-family:"Ionicons";src:url(/fonts/vendor/Ionicons/ionicons.eot?2c2ae068be3b089e0a5b59abb1831550);src:url(/fonts/vendor/Ionicons/ionicons.eot?2c2ae068be3b089e0a5b59abb1831550#iefix) format("embedded-opentype"),url(/fonts/vendor/Ionicons/ionicons.ttf?24712f6c47821394fba7942fbb52c3b2) format("truetype"),url(/fonts/vendor/Ionicons/ionicons.woff?05acfdb568b3df49ad31355b19495d4a) format("woff"),url(/fonts/vendor/Ionicons/ionicons.svg?621bd386841f74e0053cb8e67f8a0604#Ionicons) format("svg");font-weight:normal;font-style:normal}.ion,.ionicons,.ion-alert:before,.ion-alert-circled:before,.ion-android-add:before,.ion-android-add-circle:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done:before,.ion-android-done-all:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite:before,.ion-android-favorite-outline:before,.ion-android-film:before,.ion-android-folder:before,.ion-android-folder-open:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone:before,.ion-android-microphone-off:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person:before,.ion-android-person-add:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove:before,.ion-android-remove-circle:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share:before,.ion-android-share-alt:before,.ion-android-star:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace:before,.ion-backspace-outline:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox:before,.ion-chatbox-working:before,.ion-chatboxes:before,.ion-chatbubble:before,.ion-chatbubble-working:before,.ion-chatbubbles:before,.ion-checkmark:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close:before,.ion-close-circled:before,.ion-close-round:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code:before,.ion-code-download:before,.ion-code-working:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document:before,.ion-document-text:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email:before,.ion-email-unread:before,.ion-erlenmeyer-flask:before,.ion-erlenmeyer-flask-bubbles:before,.ion-eye:before,.ion-eye-disabled:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash:before,.ion-flash-off:before,.ion-folder:before,.ion-fork:before,.ion-fork-repo:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy:before,.ion-happy-outline:before,.ion-headphone:before,.ion-heart:before,.ion-heart-broken:before,.ion-help:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information:before,.ion-information-circled:before,.ion-ionic:before,.ion-ios-alarm:before,.ion-ios-alarm-outline:before,.ion-ios-albums:before,.ion-ios-albums-outline:before,.ion-ios-americanfootball:before,.ion-ios-americanfootball-outline:before,.ion-ios-analytics:before,.ion-ios-analytics-outline:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at:before,.ion-ios-at-outline:before,.ion-ios-barcode:before,.ion-ios-barcode-outline:before,.ion-ios-baseball:before,.ion-ios-baseball-outline:before,.ion-ios-basketball:before,.ion-ios-basketball-outline:before,.ion-ios-bell:before,.ion-ios-bell-outline:before,.ion-ios-body:before,.ion-ios-body-outline:before,.ion-ios-bolt:before,.ion-ios-bolt-outline:before,.ion-ios-book:before,.ion-ios-book-outline:before,.ion-ios-bookmarks:before,.ion-ios-bookmarks-outline:before,.ion-ios-box:before,.ion-ios-box-outline:before,.ion-ios-briefcase:before,.ion-ios-briefcase-outline:before,.ion-ios-browsers:before,.ion-ios-browsers-outline:before,.ion-ios-calculator:before,.ion-ios-calculator-outline:before,.ion-ios-calendar:before,.ion-ios-calendar-outline:before,.ion-ios-camera:before,.ion-ios-camera-outline:before,.ion-ios-cart:before,.ion-ios-cart-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatbubble:before,.ion-ios-chatbubble-outline:before,.ion-ios-checkmark:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock:before,.ion-ios-clock-outline:before,.ion-ios-close:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-cloud:before,.ion-ios-cloud-download:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloudy:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-outline:before,.ion-ios-cog:before,.ion-ios-cog-outline:before,.ion-ios-color-filter:before,.ion-ios-color-filter-outline:before,.ion-ios-color-wand:before,.ion-ios-color-wand-outline:before,.ion-ios-compose:before,.ion-ios-compose-outline:before,.ion-ios-contact:before,.ion-ios-contact-outline:before,.ion-ios-copy:before,.ion-ios-copy-outline:before,.ion-ios-crop:before,.ion-ios-crop-strong:before,.ion-ios-download:before,.ion-ios-download-outline:before,.ion-ios-drag:before,.ion-ios-email:before,.ion-ios-email-outline:before,.ion-ios-eye:before,.ion-ios-eye-outline:before,.ion-ios-fastforward:before,.ion-ios-fastforward-outline:before,.ion-ios-filing:before,.ion-ios-filing-outline:before,.ion-ios-film:before,.ion-ios-film-outline:before,.ion-ios-flag:before,.ion-ios-flag-outline:before,.ion-ios-flame:before,.ion-ios-flame-outline:before,.ion-ios-flask:before,.ion-ios-flask-outline:before,.ion-ios-flower:before,.ion-ios-flower-outline:before,.ion-ios-folder:before,.ion-ios-folder-outline:before,.ion-ios-football:before,.ion-ios-football-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-b:before,.ion-ios-game-controller-b-outline:before,.ion-ios-gear:before,.ion-ios-gear-outline:before,.ion-ios-glasses:before,.ion-ios-glasses-outline:before,.ion-ios-grid-view:before,.ion-ios-grid-view-outline:before,.ion-ios-heart:before,.ion-ios-heart-outline:before,.ion-ios-help:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-home:before,.ion-ios-home-outline:before,.ion-ios-infinite:before,.ion-ios-infinite-outline:before,.ion-ios-information:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-ionic-outline:before,.ion-ios-keypad:before,.ion-ios-keypad-outline:before,.ion-ios-lightbulb:before,.ion-ios-lightbulb-outline:before,.ion-ios-list:before,.ion-ios-list-outline:before,.ion-ios-location:before,.ion-ios-location-outline:before,.ion-ios-locked:before,.ion-ios-locked-outline:before,.ion-ios-loop:before,.ion-ios-loop-strong:before,.ion-ios-medical:before,.ion-ios-medical-outline:before,.ion-ios-medkit:before,.ion-ios-medkit-outline:before,.ion-ios-mic:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-minus:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-monitor:before,.ion-ios-monitor-outline:before,.ion-ios-moon:before,.ion-ios-moon-outline:before,.ion-ios-more:before,.ion-ios-more-outline:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate:before,.ion-ios-navigate-outline:before,.ion-ios-nutrition:before,.ion-ios-nutrition-outline:before,.ion-ios-paper:before,.ion-ios-paper-outline:before,.ion-ios-paperplane:before,.ion-ios-paperplane-outline:before,.ion-ios-partlysunny:before,.ion-ios-partlysunny-outline:before,.ion-ios-pause:before,.ion-ios-pause-outline:before,.ion-ios-paw:before,.ion-ios-paw-outline:before,.ion-ios-people:before,.ion-ios-people-outline:before,.ion-ios-person:before,.ion-ios-person-outline:before,.ion-ios-personadd:before,.ion-ios-personadd-outline:before,.ion-ios-photos:before,.ion-ios-photos-outline:before,.ion-ios-pie:before,.ion-ios-pie-outline:before,.ion-ios-pint:before,.ion-ios-pint-outline:before,.ion-ios-play:before,.ion-ios-play-outline:before,.ion-ios-plus:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetags:before,.ion-ios-pricetags-outline:before,.ion-ios-printer:before,.ion-ios-printer-outline:before,.ion-ios-pulse:before,.ion-ios-pulse-strong:before,.ion-ios-rainy:before,.ion-ios-rainy-outline:before,.ion-ios-recording:before,.ion-ios-recording-outline:before,.ion-ios-redo:before,.ion-ios-redo-outline:before,.ion-ios-refresh:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-reload:before,.ion-ios-reverse-camera:before,.ion-ios-reverse-camera-outline:before,.ion-ios-rewind:before,.ion-ios-rewind-outline:before,.ion-ios-rose:before,.ion-ios-rose-outline:before,.ion-ios-search:before,.ion-ios-search-strong:before,.ion-ios-settings:before,.ion-ios-settings-strong:before,.ion-ios-shuffle:before,.ion-ios-shuffle-strong:before,.ion-ios-skipbackward:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipforward:before,.ion-ios-skipforward-outline:before,.ion-ios-snowy:before,.ion-ios-speedometer:before,.ion-ios-speedometer-outline:before,.ion-ios-star:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-stopwatch:before,.ion-ios-stopwatch-outline:before,.ion-ios-sunny:before,.ion-ios-sunny-outline:before,.ion-ios-telephone:before,.ion-ios-telephone-outline:before,.ion-ios-tennisball:before,.ion-ios-tennisball-outline:before,.ion-ios-thunderstorm:before,.ion-ios-thunderstorm-outline:before,.ion-ios-time:before,.ion-ios-time-outline:before,.ion-ios-timer:before,.ion-ios-timer-outline:before,.ion-ios-toggle:before,.ion-ios-toggle-outline:before,.ion-ios-trash:before,.ion-ios-trash-outline:before,.ion-ios-undo:before,.ion-ios-undo-outline:before,.ion-ios-unlocked:before,.ion-ios-unlocked-outline:before,.ion-ios-upload:before,.ion-ios-upload-outline:before,.ion-ios-videocam:before,.ion-ios-videocam-outline:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass:before,.ion-ios-wineglass-outline:before,.ion-ios-world:before,.ion-ios-world-outline:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon:before,.ion-navicon-round:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person:before,.ion-person-add:before,.ion-person-stalker:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply:before,.ion-reply-all:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad:before,.ion-sad-outline:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android:before,.ion-social-android-outline:before,.ion-social-angular:before,.ion-social-angular-outline:before,.ion-social-apple:before,.ion-social-apple-outline:before,.ion-social-bitcoin:before,.ion-social-bitcoin-outline:before,.ion-social-buffer:before,.ion-social-buffer-outline:before,.ion-social-chrome:before,.ion-social-chrome-outline:before,.ion-social-codepen:before,.ion-social-codepen-outline:before,.ion-social-css3:before,.ion-social-css3-outline:before,.ion-social-designernews:before,.ion-social-designernews-outline:before,.ion-social-dribbble:before,.ion-social-dribbble-outline:before,.ion-social-dropbox:before,.ion-social-dropbox-outline:before,.ion-social-euro:before,.ion-social-euro-outline:before,.ion-social-facebook:before,.ion-social-facebook-outline:before,.ion-social-foursquare:before,.ion-social-foursquare-outline:before,.ion-social-freebsd-devil:before,.ion-social-github:before,.ion-social-github-outline:before,.ion-social-google:before,.ion-social-google-outline:before,.ion-social-googleplus:before,.ion-social-googleplus-outline:before,.ion-social-hackernews:before,.ion-social-hackernews-outline:before,.ion-social-html5:before,.ion-social-html5-outline:before,.ion-social-instagram:before,.ion-social-instagram-outline:before,.ion-social-javascript:before,.ion-social-javascript-outline:before,.ion-social-linkedin:before,.ion-social-linkedin-outline:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest:before,.ion-social-pinterest-outline:before,.ion-social-python:before,.ion-social-reddit:before,.ion-social-reddit-outline:before,.ion-social-rss:before,.ion-social-rss-outline:before,.ion-social-sass:before,.ion-social-skype:before,.ion-social-skype-outline:before,.ion-social-snapchat:before,.ion-social-snapchat-outline:before,.ion-social-tumblr:before,.ion-social-tumblr-outline:before,.ion-social-tux:before,.ion-social-twitch:before,.ion-social-twitch-outline:before,.ion-social-twitter:before,.ion-social-twitter-outline:before,.ion-social-usd:before,.ion-social-usd-outline:before,.ion-social-vimeo:before,.ion-social-vimeo-outline:before,.ion-social-whatsapp:before,.ion-social-whatsapp-outline:before,.ion-social-windows:before,.ion-social-windows-outline:before,.ion-social-wordpress:before,.ion-social-wordpress-outline:before,.ion-social-yahoo:before,.ion-social-yahoo-outline:before,.ion-social-yen:before,.ion-social-yen-outline:before,.ion-social-youtube:before,.ion-social-youtube-outline:before,.ion-soup-can:before,.ion-soup-can-outline:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle:before,.ion-toggle-filled:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt:before,.ion-tshirt-outline:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before{display:inline-block;font-family:"Ionicons";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:"\F101"}.ion-alert-circled:before{content:"\F100"}.ion-android-add:before{content:"\F2C7"}.ion-android-add-circle:before{content:"\F359"}.ion-android-alarm-clock:before{content:"\F35A"}.ion-android-alert:before{content:"\F35B"}.ion-android-apps:before{content:"\F35C"}.ion-android-archive:before{content:"\F2C9"}.ion-android-arrow-back:before{content:"\F2CA"}.ion-android-arrow-down:before{content:"\F35D"}.ion-android-arrow-dropdown:before{content:"\F35F"}.ion-android-arrow-dropdown-circle:before{content:"\F35E"}.ion-android-arrow-dropleft:before{content:"\F361"}.ion-android-arrow-dropleft-circle:before{content:"\F360"}.ion-android-arrow-dropright:before{content:"\F363"}.ion-android-arrow-dropright-circle:before{content:"\F362"}.ion-android-arrow-dropup:before{content:"\F365"}.ion-android-arrow-dropup-circle:before{content:"\F364"}.ion-android-arrow-forward:before{content:"\F30F"}.ion-android-arrow-up:before{content:"\F366"}.ion-android-attach:before{content:"\F367"}.ion-android-bar:before{content:"\F368"}.ion-android-bicycle:before{content:"\F369"}.ion-android-boat:before{content:"\F36A"}.ion-android-bookmark:before{content:"\F36B"}.ion-android-bulb:before{content:"\F36C"}.ion-android-bus:before{content:"\F36D"}.ion-android-calendar:before{content:"\F2D1"}.ion-android-call:before{content:"\F2D2"}.ion-android-camera:before{content:"\F2D3"}.ion-android-cancel:before{content:"\F36E"}.ion-android-car:before{content:"\F36F"}.ion-android-cart:before{content:"\F370"}.ion-android-chat:before{content:"\F2D4"}.ion-android-checkbox:before{content:"\F374"}.ion-android-checkbox-blank:before{content:"\F371"}.ion-android-checkbox-outline:before{content:"\F373"}.ion-android-checkbox-outline-blank:before{content:"\F372"}.ion-android-checkmark-circle:before{content:"\F375"}.ion-android-clipboard:before{content:"\F376"}.ion-android-close:before{content:"\F2D7"}.ion-android-cloud:before{content:"\F37A"}.ion-android-cloud-circle:before{content:"\F377"}.ion-android-cloud-done:before{content:"\F378"}.ion-android-cloud-outline:before{content:"\F379"}.ion-android-color-palette:before{content:"\F37B"}.ion-android-compass:before{content:"\F37C"}.ion-android-contact:before{content:"\F2D8"}.ion-android-contacts:before{content:"\F2D9"}.ion-android-contract:before{content:"\F37D"}.ion-android-create:before{content:"\F37E"}.ion-android-delete:before{content:"\F37F"}.ion-android-desktop:before{content:"\F380"}.ion-android-document:before{content:"\F381"}.ion-android-done:before{content:"\F383"}.ion-android-done-all:before{content:"\F382"}.ion-android-download:before{content:"\F2DD"}.ion-android-drafts:before{content:"\F384"}.ion-android-exit:before{content:"\F385"}.ion-android-expand:before{content:"\F386"}.ion-android-favorite:before{content:"\F388"}.ion-android-favorite-outline:before{content:"\F387"}.ion-android-film:before{content:"\F389"}.ion-android-folder:before{content:"\F2E0"}.ion-android-folder-open:before{content:"\F38A"}.ion-android-funnel:before{content:"\F38B"}.ion-android-globe:before{content:"\F38C"}.ion-android-hand:before{content:"\F2E3"}.ion-android-hangout:before{content:"\F38D"}.ion-android-happy:before{content:"\F38E"}.ion-android-home:before{content:"\F38F"}.ion-android-image:before{content:"\F2E4"}.ion-android-laptop:before{content:"\F390"}.ion-android-list:before{content:"\F391"}.ion-android-locate:before{content:"\F2E9"}.ion-android-lock:before{content:"\F392"}.ion-android-mail:before{content:"\F2EB"}.ion-android-map:before{content:"\F393"}.ion-android-menu:before{content:"\F394"}.ion-android-microphone:before{content:"\F2EC"}.ion-android-microphone-off:before{content:"\F395"}.ion-android-more-horizontal:before{content:"\F396"}.ion-android-more-vertical:before{content:"\F397"}.ion-android-navigate:before{content:"\F398"}.ion-android-notifications:before{content:"\F39B"}.ion-android-notifications-none:before{content:"\F399"}.ion-android-notifications-off:before{content:"\F39A"}.ion-android-open:before{content:"\F39C"}.ion-android-options:before{content:"\F39D"}.ion-android-people:before{content:"\F39E"}.ion-android-person:before{content:"\F3A0"}.ion-android-person-add:before{content:"\F39F"}.ion-android-phone-landscape:before{content:"\F3A1"}.ion-android-phone-portrait:before{content:"\F3A2"}.ion-android-pin:before{content:"\F3A3"}.ion-android-plane:before{content:"\F3A4"}.ion-android-playstore:before{content:"\F2F0"}.ion-android-print:before{content:"\F3A5"}.ion-android-radio-button-off:before{content:"\F3A6"}.ion-android-radio-button-on:before{content:"\F3A7"}.ion-android-refresh:before{content:"\F3A8"}.ion-android-remove:before{content:"\F2F4"}.ion-android-remove-circle:before{content:"\F3A9"}.ion-android-restaurant:before{content:"\F3AA"}.ion-android-sad:before{content:"\F3AB"}.ion-android-search:before{content:"\F2F5"}.ion-android-send:before{content:"\F2F6"}.ion-android-settings:before{content:"\F2F7"}.ion-android-share:before{content:"\F2F8"}.ion-android-share-alt:before{content:"\F3AC"}.ion-android-star:before{content:"\F2FC"}.ion-android-star-half:before{content:"\F3AD"}.ion-android-star-outline:before{content:"\F3AE"}.ion-android-stopwatch:before{content:"\F2FD"}.ion-android-subway:before{content:"\F3AF"}.ion-android-sunny:before{content:"\F3B0"}.ion-android-sync:before{content:"\F3B1"}.ion-android-textsms:before{content:"\F3B2"}.ion-android-time:before{content:"\F3B3"}.ion-android-train:before{content:"\F3B4"}.ion-android-unlock:before{content:"\F3B5"}.ion-android-upload:before{content:"\F3B6"}.ion-android-volume-down:before{content:"\F3B7"}.ion-android-volume-mute:before{content:"\F3B8"}.ion-android-volume-off:before{content:"\F3B9"}.ion-android-volume-up:before{content:"\F3BA"}.ion-android-walk:before{content:"\F3BB"}.ion-android-warning:before{content:"\F3BC"}.ion-android-watch:before{content:"\F3BD"}.ion-android-wifi:before{content:"\F305"}.ion-aperture:before{content:"\F313"}.ion-archive:before{content:"\F102"}.ion-arrow-down-a:before{content:"\F103"}.ion-arrow-down-b:before{content:"\F104"}.ion-arrow-down-c:before{content:"\F105"}.ion-arrow-expand:before{content:"\F25E"}.ion-arrow-graph-down-left:before{content:"\F25F"}.ion-arrow-graph-down-right:before{content:"\F260"}.ion-arrow-graph-up-left:before{content:"\F261"}.ion-arrow-graph-up-right:before{content:"\F262"}.ion-arrow-left-a:before{content:"\F106"}.ion-arrow-left-b:before{content:"\F107"}.ion-arrow-left-c:before{content:"\F108"}.ion-arrow-move:before{content:"\F263"}.ion-arrow-resize:before{content:"\F264"}.ion-arrow-return-left:before{content:"\F265"}.ion-arrow-return-right:before{content:"\F266"}.ion-arrow-right-a:before{content:"\F109"}.ion-arrow-right-b:before{content:"\F10A"}.ion-arrow-right-c:before{content:"\F10B"}.ion-arrow-shrink:before{content:"\F267"}.ion-arrow-swap:before{content:"\F268"}.ion-arrow-up-a:before{content:"\F10C"}.ion-arrow-up-b:before{content:"\F10D"}.ion-arrow-up-c:before{content:"\F10E"}.ion-asterisk:before{content:"\F314"}.ion-at:before{content:"\F10F"}.ion-backspace:before{content:"\F3BF"}.ion-backspace-outline:before{content:"\F3BE"}.ion-bag:before{content:"\F110"}.ion-battery-charging:before{content:"\F111"}.ion-battery-empty:before{content:"\F112"}.ion-battery-full:before{content:"\F113"}.ion-battery-half:before{content:"\F114"}.ion-battery-low:before{content:"\F115"}.ion-beaker:before{content:"\F269"}.ion-beer:before{content:"\F26A"}.ion-bluetooth:before{content:"\F116"}.ion-bonfire:before{content:"\F315"}.ion-bookmark:before{content:"\F26B"}.ion-bowtie:before{content:"\F3C0"}.ion-briefcase:before{content:"\F26C"}.ion-bug:before{content:"\F2BE"}.ion-calculator:before{content:"\F26D"}.ion-calendar:before{content:"\F117"}.ion-camera:before{content:"\F118"}.ion-card:before{content:"\F119"}.ion-cash:before{content:"\F316"}.ion-chatbox:before{content:"\F11B"}.ion-chatbox-working:before{content:"\F11A"}.ion-chatboxes:before{content:"\F11C"}.ion-chatbubble:before{content:"\F11E"}.ion-chatbubble-working:before{content:"\F11D"}.ion-chatbubbles:before{content:"\F11F"}.ion-checkmark:before{content:"\F122"}.ion-checkmark-circled:before{content:"\F120"}.ion-checkmark-round:before{content:"\F121"}.ion-chevron-down:before{content:"\F123"}.ion-chevron-left:before{content:"\F124"}.ion-chevron-right:before{content:"\F125"}.ion-chevron-up:before{content:"\F126"}.ion-clipboard:before{content:"\F127"}.ion-clock:before{content:"\F26E"}.ion-close:before{content:"\F12A"}.ion-close-circled:before{content:"\F128"}.ion-close-round:before{content:"\F129"}.ion-closed-captioning:before{content:"\F317"}.ion-cloud:before{content:"\F12B"}.ion-code:before{content:"\F271"}.ion-code-download:before{content:"\F26F"}.ion-code-working:before{content:"\F270"}.ion-coffee:before{content:"\F272"}.ion-compass:before{content:"\F273"}.ion-compose:before{content:"\F12C"}.ion-connection-bars:before{content:"\F274"}.ion-contrast:before{content:"\F275"}.ion-crop:before{content:"\F3C1"}.ion-cube:before{content:"\F318"}.ion-disc:before{content:"\F12D"}.ion-document:before{content:"\F12F"}.ion-document-text:before{content:"\F12E"}.ion-drag:before{content:"\F130"}.ion-earth:before{content:"\F276"}.ion-easel:before{content:"\F3C2"}.ion-edit:before{content:"\F2BF"}.ion-egg:before{content:"\F277"}.ion-eject:before{content:"\F131"}.ion-email:before{content:"\F132"}.ion-email-unread:before{content:"\F3C3"}.ion-erlenmeyer-flask:before{content:"\F3C5"}.ion-erlenmeyer-flask-bubbles:before{content:"\F3C4"}.ion-eye:before{content:"\F133"}.ion-eye-disabled:before{content:"\F306"}.ion-female:before{content:"\F278"}.ion-filing:before{content:"\F134"}.ion-film-marker:before{content:"\F135"}.ion-fireball:before{content:"\F319"}.ion-flag:before{content:"\F279"}.ion-flame:before{content:"\F31A"}.ion-flash:before{content:"\F137"}.ion-flash-off:before{content:"\F136"}.ion-folder:before{content:"\F139"}.ion-fork:before{content:"\F27A"}.ion-fork-repo:before{content:"\F2C0"}.ion-forward:before{content:"\F13A"}.ion-funnel:before{content:"\F31B"}.ion-gear-a:before{content:"\F13D"}.ion-gear-b:before{content:"\F13E"}.ion-grid:before{content:"\F13F"}.ion-hammer:before{content:"\F27B"}.ion-happy:before{content:"\F31C"}.ion-happy-outline:before{content:"\F3C6"}.ion-headphone:before{content:"\F140"}.ion-heart:before{content:"\F141"}.ion-heart-broken:before{content:"\F31D"}.ion-help:before{content:"\F143"}.ion-help-buoy:before{content:"\F27C"}.ion-help-circled:before{content:"\F142"}.ion-home:before{content:"\F144"}.ion-icecream:before{content:"\F27D"}.ion-image:before{content:"\F147"}.ion-images:before{content:"\F148"}.ion-information:before{content:"\F14A"}.ion-information-circled:before{content:"\F149"}.ion-ionic:before{content:"\F14B"}.ion-ios-alarm:before{content:"\F3C8"}.ion-ios-alarm-outline:before{content:"\F3C7"}.ion-ios-albums:before{content:"\F3CA"}.ion-ios-albums-outline:before{content:"\F3C9"}.ion-ios-americanfootball:before{content:"\F3CC"}.ion-ios-americanfootball-outline:before{content:"\F3CB"}.ion-ios-analytics:before{content:"\F3CE"}.ion-ios-analytics-outline:before{content:"\F3CD"}.ion-ios-arrow-back:before{content:"\F3CF"}.ion-ios-arrow-down:before{content:"\F3D0"}.ion-ios-arrow-forward:before{content:"\F3D1"}.ion-ios-arrow-left:before{content:"\F3D2"}.ion-ios-arrow-right:before{content:"\F3D3"}.ion-ios-arrow-thin-down:before{content:"\F3D4"}.ion-ios-arrow-thin-left:before{content:"\F3D5"}.ion-ios-arrow-thin-right:before{content:"\F3D6"}.ion-ios-arrow-thin-up:before{content:"\F3D7"}.ion-ios-arrow-up:before{content:"\F3D8"}.ion-ios-at:before{content:"\F3DA"}.ion-ios-at-outline:before{content:"\F3D9"}.ion-ios-barcode:before{content:"\F3DC"}.ion-ios-barcode-outline:before{content:"\F3DB"}.ion-ios-baseball:before{content:"\F3DE"}.ion-ios-baseball-outline:before{content:"\F3DD"}.ion-ios-basketball:before{content:"\F3E0"}.ion-ios-basketball-outline:before{content:"\F3DF"}.ion-ios-bell:before{content:"\F3E2"}.ion-ios-bell-outline:before{content:"\F3E1"}.ion-ios-body:before{content:"\F3E4"}.ion-ios-body-outline:before{content:"\F3E3"}.ion-ios-bolt:before{content:"\F3E6"}.ion-ios-bolt-outline:before{content:"\F3E5"}.ion-ios-book:before{content:"\F3E8"}.ion-ios-book-outline:before{content:"\F3E7"}.ion-ios-bookmarks:before{content:"\F3EA"}.ion-ios-bookmarks-outline:before{content:"\F3E9"}.ion-ios-box:before{content:"\F3EC"}.ion-ios-box-outline:before{content:"\F3EB"}.ion-ios-briefcase:before{content:"\F3EE"}.ion-ios-briefcase-outline:before{content:"\F3ED"}.ion-ios-browsers:before{content:"\F3F0"}.ion-ios-browsers-outline:before{content:"\F3EF"}.ion-ios-calculator:before{content:"\F3F2"}.ion-ios-calculator-outline:before{content:"\F3F1"}.ion-ios-calendar:before{content:"\F3F4"}.ion-ios-calendar-outline:before{content:"\F3F3"}.ion-ios-camera:before{content:"\F3F6"}.ion-ios-camera-outline:before{content:"\F3F5"}.ion-ios-cart:before{content:"\F3F8"}.ion-ios-cart-outline:before{content:"\F3F7"}.ion-ios-chatboxes:before{content:"\F3FA"}.ion-ios-chatboxes-outline:before{content:"\F3F9"}.ion-ios-chatbubble:before{content:"\F3FC"}.ion-ios-chatbubble-outline:before{content:"\F3FB"}.ion-ios-checkmark:before{content:"\F3FF"}.ion-ios-checkmark-empty:before{content:"\F3FD"}.ion-ios-checkmark-outline:before{content:"\F3FE"}.ion-ios-circle-filled:before{content:"\F400"}.ion-ios-circle-outline:before{content:"\F401"}.ion-ios-clock:before{content:"\F403"}.ion-ios-clock-outline:before{content:"\F402"}.ion-ios-close:before{content:"\F406"}.ion-ios-close-empty:before{content:"\F404"}.ion-ios-close-outline:before{content:"\F405"}.ion-ios-cloud:before{content:"\F40C"}.ion-ios-cloud-download:before{content:"\F408"}.ion-ios-cloud-download-outline:before{content:"\F407"}.ion-ios-cloud-outline:before{content:"\F409"}.ion-ios-cloud-upload:before{content:"\F40B"}.ion-ios-cloud-upload-outline:before{content:"\F40A"}.ion-ios-cloudy:before{content:"\F410"}.ion-ios-cloudy-night:before{content:"\F40E"}.ion-ios-cloudy-night-outline:before{content:"\F40D"}.ion-ios-cloudy-outline:before{content:"\F40F"}.ion-ios-cog:before{content:"\F412"}.ion-ios-cog-outline:before{content:"\F411"}.ion-ios-color-filter:before{content:"\F414"}.ion-ios-color-filter-outline:before{content:"\F413"}.ion-ios-color-wand:before{content:"\F416"}.ion-ios-color-wand-outline:before{content:"\F415"}.ion-ios-compose:before{content:"\F418"}.ion-ios-compose-outline:before{content:"\F417"}.ion-ios-contact:before{content:"\F41A"}.ion-ios-contact-outline:before{content:"\F419"}.ion-ios-copy:before{content:"\F41C"}.ion-ios-copy-outline:before{content:"\F41B"}.ion-ios-crop:before{content:"\F41E"}.ion-ios-crop-strong:before{content:"\F41D"}.ion-ios-download:before{content:"\F420"}.ion-ios-download-outline:before{content:"\F41F"}.ion-ios-drag:before{content:"\F421"}.ion-ios-email:before{content:"\F423"}.ion-ios-email-outline:before{content:"\F422"}.ion-ios-eye:before{content:"\F425"}.ion-ios-eye-outline:before{content:"\F424"}.ion-ios-fastforward:before{content:"\F427"}.ion-ios-fastforward-outline:before{content:"\F426"}.ion-ios-filing:before{content:"\F429"}.ion-ios-filing-outline:before{content:"\F428"}.ion-ios-film:before{content:"\F42B"}.ion-ios-film-outline:before{content:"\F42A"}.ion-ios-flag:before{content:"\F42D"}.ion-ios-flag-outline:before{content:"\F42C"}.ion-ios-flame:before{content:"\F42F"}.ion-ios-flame-outline:before{content:"\F42E"}.ion-ios-flask:before{content:"\F431"}.ion-ios-flask-outline:before{content:"\F430"}.ion-ios-flower:before{content:"\F433"}.ion-ios-flower-outline:before{content:"\F432"}.ion-ios-folder:before{content:"\F435"}.ion-ios-folder-outline:before{content:"\F434"}.ion-ios-football:before{content:"\F437"}.ion-ios-football-outline:before{content:"\F436"}.ion-ios-game-controller-a:before{content:"\F439"}.ion-ios-game-controller-a-outline:before{content:"\F438"}.ion-ios-game-controller-b:before{content:"\F43B"}.ion-ios-game-controller-b-outline:before{content:"\F43A"}.ion-ios-gear:before{content:"\F43D"}.ion-ios-gear-outline:before{content:"\F43C"}.ion-ios-glasses:before{content:"\F43F"}.ion-ios-glasses-outline:before{content:"\F43E"}.ion-ios-grid-view:before{content:"\F441"}.ion-ios-grid-view-outline:before{content:"\F440"}.ion-ios-heart:before{content:"\F443"}.ion-ios-heart-outline:before{content:"\F442"}.ion-ios-help:before{content:"\F446"}.ion-ios-help-empty:before{content:"\F444"}.ion-ios-help-outline:before{content:"\F445"}.ion-ios-home:before{content:"\F448"}.ion-ios-home-outline:before{content:"\F447"}.ion-ios-infinite:before{content:"\F44A"}.ion-ios-infinite-outline:before{content:"\F449"}.ion-ios-information:before{content:"\F44D"}.ion-ios-information-empty:before{content:"\F44B"}.ion-ios-information-outline:before{content:"\F44C"}.ion-ios-ionic-outline:before{content:"\F44E"}.ion-ios-keypad:before{content:"\F450"}.ion-ios-keypad-outline:before{content:"\F44F"}.ion-ios-lightbulb:before{content:"\F452"}.ion-ios-lightbulb-outline:before{content:"\F451"}.ion-ios-list:before{content:"\F454"}.ion-ios-list-outline:before{content:"\F453"}.ion-ios-location:before{content:"\F456"}.ion-ios-location-outline:before{content:"\F455"}.ion-ios-locked:before{content:"\F458"}.ion-ios-locked-outline:before{content:"\F457"}.ion-ios-loop:before{content:"\F45A"}.ion-ios-loop-strong:before{content:"\F459"}.ion-ios-medical:before{content:"\F45C"}.ion-ios-medical-outline:before{content:"\F45B"}.ion-ios-medkit:before{content:"\F45E"}.ion-ios-medkit-outline:before{content:"\F45D"}.ion-ios-mic:before{content:"\F461"}.ion-ios-mic-off:before{content:"\F45F"}.ion-ios-mic-outline:before{content:"\F460"}.ion-ios-minus:before{content:"\F464"}.ion-ios-minus-empty:before{content:"\F462"}.ion-ios-minus-outline:before{content:"\F463"}.ion-ios-monitor:before{content:"\F466"}.ion-ios-monitor-outline:before{content:"\F465"}.ion-ios-moon:before{content:"\F468"}.ion-ios-moon-outline:before{content:"\F467"}.ion-ios-more:before{content:"\F46A"}.ion-ios-more-outline:before{content:"\F469"}.ion-ios-musical-note:before{content:"\F46B"}.ion-ios-musical-notes:before{content:"\F46C"}.ion-ios-navigate:before{content:"\F46E"}.ion-ios-navigate-outline:before{content:"\F46D"}.ion-ios-nutrition:before{content:"\F470"}.ion-ios-nutrition-outline:before{content:"\F46F"}.ion-ios-paper:before{content:"\F472"}.ion-ios-paper-outline:before{content:"\F471"}.ion-ios-paperplane:before{content:"\F474"}.ion-ios-paperplane-outline:before{content:"\F473"}.ion-ios-partlysunny:before{content:"\F476"}.ion-ios-partlysunny-outline:before{content:"\F475"}.ion-ios-pause:before{content:"\F478"}.ion-ios-pause-outline:before{content:"\F477"}.ion-ios-paw:before{content:"\F47A"}.ion-ios-paw-outline:before{content:"\F479"}.ion-ios-people:before{content:"\F47C"}.ion-ios-people-outline:before{content:"\F47B"}.ion-ios-person:before{content:"\F47E"}.ion-ios-person-outline:before{content:"\F47D"}.ion-ios-personadd:before{content:"\F480"}.ion-ios-personadd-outline:before{content:"\F47F"}.ion-ios-photos:before{content:"\F482"}.ion-ios-photos-outline:before{content:"\F481"}.ion-ios-pie:before{content:"\F484"}.ion-ios-pie-outline:before{content:"\F483"}.ion-ios-pint:before{content:"\F486"}.ion-ios-pint-outline:before{content:"\F485"}.ion-ios-play:before{content:"\F488"}.ion-ios-play-outline:before{content:"\F487"}.ion-ios-plus:before{content:"\F48B"}.ion-ios-plus-empty:before{content:"\F489"}.ion-ios-plus-outline:before{content:"\F48A"}.ion-ios-pricetag:before{content:"\F48D"}.ion-ios-pricetag-outline:before{content:"\F48C"}.ion-ios-pricetags:before{content:"\F48F"}.ion-ios-pricetags-outline:before{content:"\F48E"}.ion-ios-printer:before{content:"\F491"}.ion-ios-printer-outline:before{content:"\F490"}.ion-ios-pulse:before{content:"\F493"}.ion-ios-pulse-strong:before{content:"\F492"}.ion-ios-rainy:before{content:"\F495"}.ion-ios-rainy-outline:before{content:"\F494"}.ion-ios-recording:before{content:"\F497"}.ion-ios-recording-outline:before{content:"\F496"}.ion-ios-redo:before{content:"\F499"}.ion-ios-redo-outline:before{content:"\F498"}.ion-ios-refresh:before{content:"\F49C"}.ion-ios-refresh-empty:before{content:"\F49A"}.ion-ios-refresh-outline:before{content:"\F49B"}.ion-ios-reload:before{content:"\F49D"}.ion-ios-reverse-camera:before{content:"\F49F"}.ion-ios-reverse-camera-outline:before{content:"\F49E"}.ion-ios-rewind:before{content:"\F4A1"}.ion-ios-rewind-outline:before{content:"\F4A0"}.ion-ios-rose:before{content:"\F4A3"}.ion-ios-rose-outline:before{content:"\F4A2"}.ion-ios-search:before{content:"\F4A5"}.ion-ios-search-strong:before{content:"\F4A4"}.ion-ios-settings:before{content:"\F4A7"}.ion-ios-settings-strong:before{content:"\F4A6"}.ion-ios-shuffle:before{content:"\F4A9"}.ion-ios-shuffle-strong:before{content:"\F4A8"}.ion-ios-skipbackward:before{content:"\F4AB"}.ion-ios-skipbackward-outline:before{content:"\F4AA"}.ion-ios-skipforward:before{content:"\F4AD"}.ion-ios-skipforward-outline:before{content:"\F4AC"}.ion-ios-snowy:before{content:"\F4AE"}.ion-ios-speedometer:before{content:"\F4B0"}.ion-ios-speedometer-outline:before{content:"\F4AF"}.ion-ios-star:before{content:"\F4B3"}.ion-ios-star-half:before{content:"\F4B1"}.ion-ios-star-outline:before{content:"\F4B2"}.ion-ios-stopwatch:before{content:"\F4B5"}.ion-ios-stopwatch-outline:before{content:"\F4B4"}.ion-ios-sunny:before{content:"\F4B7"}.ion-ios-sunny-outline:before{content:"\F4B6"}.ion-ios-telephone:before{content:"\F4B9"}.ion-ios-telephone-outline:before{content:"\F4B8"}.ion-ios-tennisball:before{content:"\F4BB"}.ion-ios-tennisball-outline:before{content:"\F4BA"}.ion-ios-thunderstorm:before{content:"\F4BD"}.ion-ios-thunderstorm-outline:before{content:"\F4BC"}.ion-ios-time:before{content:"\F4BF"}.ion-ios-time-outline:before{content:"\F4BE"}.ion-ios-timer:before{content:"\F4C1"}.ion-ios-timer-outline:before{content:"\F4C0"}.ion-ios-toggle:before{content:"\F4C3"}.ion-ios-toggle-outline:before{content:"\F4C2"}.ion-ios-trash:before{content:"\F4C5"}.ion-ios-trash-outline:before{content:"\F4C4"}.ion-ios-undo:before{content:"\F4C7"}.ion-ios-undo-outline:before{content:"\F4C6"}.ion-ios-unlocked:before{content:"\F4C9"}.ion-ios-unlocked-outline:before{content:"\F4C8"}.ion-ios-upload:before{content:"\F4CB"}.ion-ios-upload-outline:before{content:"\F4CA"}.ion-ios-videocam:before{content:"\F4CD"}.ion-ios-videocam-outline:before{content:"\F4CC"}.ion-ios-volume-high:before{content:"\F4CE"}.ion-ios-volume-low:before{content:"\F4CF"}.ion-ios-wineglass:before{content:"\F4D1"}.ion-ios-wineglass-outline:before{content:"\F4D0"}.ion-ios-world:before{content:"\F4D3"}.ion-ios-world-outline:before{content:"\F4D2"}.ion-ipad:before{content:"\F1F9"}.ion-iphone:before{content:"\F1FA"}.ion-ipod:before{content:"\F1FB"}.ion-jet:before{content:"\F295"}.ion-key:before{content:"\F296"}.ion-knife:before{content:"\F297"}.ion-laptop:before{content:"\F1FC"}.ion-leaf:before{content:"\F1FD"}.ion-levels:before{content:"\F298"}.ion-lightbulb:before{content:"\F299"}.ion-link:before{content:"\F1FE"}.ion-load-a:before{content:"\F29A"}.ion-load-b:before{content:"\F29B"}.ion-load-c:before{content:"\F29C"}.ion-load-d:before{content:"\F29D"}.ion-location:before{content:"\F1FF"}.ion-lock-combination:before{content:"\F4D4"}.ion-locked:before{content:"\F200"}.ion-log-in:before{content:"\F29E"}.ion-log-out:before{content:"\F29F"}.ion-loop:before{content:"\F201"}.ion-magnet:before{content:"\F2A0"}.ion-male:before{content:"\F2A1"}.ion-man:before{content:"\F202"}.ion-map:before{content:"\F203"}.ion-medkit:before{content:"\F2A2"}.ion-merge:before{content:"\F33F"}.ion-mic-a:before{content:"\F204"}.ion-mic-b:before{content:"\F205"}.ion-mic-c:before{content:"\F206"}.ion-minus:before{content:"\F209"}.ion-minus-circled:before{content:"\F207"}.ion-minus-round:before{content:"\F208"}.ion-model-s:before{content:"\F2C1"}.ion-monitor:before{content:"\F20A"}.ion-more:before{content:"\F20B"}.ion-mouse:before{content:"\F340"}.ion-music-note:before{content:"\F20C"}.ion-navicon:before{content:"\F20E"}.ion-navicon-round:before{content:"\F20D"}.ion-navigate:before{content:"\F2A3"}.ion-network:before{content:"\F341"}.ion-no-smoking:before{content:"\F2C2"}.ion-nuclear:before{content:"\F2A4"}.ion-outlet:before{content:"\F342"}.ion-paintbrush:before{content:"\F4D5"}.ion-paintbucket:before{content:"\F4D6"}.ion-paper-airplane:before{content:"\F2C3"}.ion-paperclip:before{content:"\F20F"}.ion-pause:before{content:"\F210"}.ion-person:before{content:"\F213"}.ion-person-add:before{content:"\F211"}.ion-person-stalker:before{content:"\F212"}.ion-pie-graph:before{content:"\F2A5"}.ion-pin:before{content:"\F2A6"}.ion-pinpoint:before{content:"\F2A7"}.ion-pizza:before{content:"\F2A8"}.ion-plane:before{content:"\F214"}.ion-planet:before{content:"\F343"}.ion-play:before{content:"\F215"}.ion-playstation:before{content:"\F30A"}.ion-plus:before{content:"\F218"}.ion-plus-circled:before{content:"\F216"}.ion-plus-round:before{content:"\F217"}.ion-podium:before{content:"\F344"}.ion-pound:before{content:"\F219"}.ion-power:before{content:"\F2A9"}.ion-pricetag:before{content:"\F2AA"}.ion-pricetags:before{content:"\F2AB"}.ion-printer:before{content:"\F21A"}.ion-pull-request:before{content:"\F345"}.ion-qr-scanner:before{content:"\F346"}.ion-quote:before{content:"\F347"}.ion-radio-waves:before{content:"\F2AC"}.ion-record:before{content:"\F21B"}.ion-refresh:before{content:"\F21C"}.ion-reply:before{content:"\F21E"}.ion-reply-all:before{content:"\F21D"}.ion-ribbon-a:before{content:"\F348"}.ion-ribbon-b:before{content:"\F349"}.ion-sad:before{content:"\F34A"}.ion-sad-outline:before{content:"\F4D7"}.ion-scissors:before{content:"\F34B"}.ion-search:before{content:"\F21F"}.ion-settings:before{content:"\F2AD"}.ion-share:before{content:"\F220"}.ion-shuffle:before{content:"\F221"}.ion-skip-backward:before{content:"\F222"}.ion-skip-forward:before{content:"\F223"}.ion-social-android:before{content:"\F225"}.ion-social-android-outline:before{content:"\F224"}.ion-social-angular:before{content:"\F4D9"}.ion-social-angular-outline:before{content:"\F4D8"}.ion-social-apple:before{content:"\F227"}.ion-social-apple-outline:before{content:"\F226"}.ion-social-bitcoin:before{content:"\F2AF"}.ion-social-bitcoin-outline:before{content:"\F2AE"}.ion-social-buffer:before{content:"\F229"}.ion-social-buffer-outline:before{content:"\F228"}.ion-social-chrome:before{content:"\F4DB"}.ion-social-chrome-outline:before{content:"\F4DA"}.ion-social-codepen:before{content:"\F4DD"}.ion-social-codepen-outline:before{content:"\F4DC"}.ion-social-css3:before{content:"\F4DF"}.ion-social-css3-outline:before{content:"\F4DE"}.ion-social-designernews:before{content:"\F22B"}.ion-social-designernews-outline:before{content:"\F22A"}.ion-social-dribbble:before{content:"\F22D"}.ion-social-dribbble-outline:before{content:"\F22C"}.ion-social-dropbox:before{content:"\F22F"}.ion-social-dropbox-outline:before{content:"\F22E"}.ion-social-euro:before{content:"\F4E1"}.ion-social-euro-outline:before{content:"\F4E0"}.ion-social-facebook:before{content:"\F231"}.ion-social-facebook-outline:before{content:"\F230"}.ion-social-foursquare:before{content:"\F34D"}.ion-social-foursquare-outline:before{content:"\F34C"}.ion-social-freebsd-devil:before{content:"\F2C4"}.ion-social-github:before{content:"\F233"}.ion-social-github-outline:before{content:"\F232"}.ion-social-google:before{content:"\F34F"}.ion-social-google-outline:before{content:"\F34E"}.ion-social-googleplus:before{content:"\F235"}.ion-social-googleplus-outline:before{content:"\F234"}.ion-social-hackernews:before{content:"\F237"}.ion-social-hackernews-outline:before{content:"\F236"}.ion-social-html5:before{content:"\F4E3"}.ion-social-html5-outline:before{content:"\F4E2"}.ion-social-instagram:before{content:"\F351"}.ion-social-instagram-outline:before{content:"\F350"}.ion-social-javascript:before{content:"\F4E5"}.ion-social-javascript-outline:before{content:"\F4E4"}.ion-social-linkedin:before{content:"\F239"}.ion-social-linkedin-outline:before{content:"\F238"}.ion-social-markdown:before{content:"\F4E6"}.ion-social-nodejs:before{content:"\F4E7"}.ion-social-octocat:before{content:"\F4E8"}.ion-social-pinterest:before{content:"\F2B1"}.ion-social-pinterest-outline:before{content:"\F2B0"}.ion-social-python:before{content:"\F4E9"}.ion-social-reddit:before{content:"\F23B"}.ion-social-reddit-outline:before{content:"\F23A"}.ion-social-rss:before{content:"\F23D"}.ion-social-rss-outline:before{content:"\F23C"}.ion-social-sass:before{content:"\F4EA"}.ion-social-skype:before{content:"\F23F"}.ion-social-skype-outline:before{content:"\F23E"}.ion-social-snapchat:before{content:"\F4EC"}.ion-social-snapchat-outline:before{content:"\F4EB"}.ion-social-tumblr:before{content:"\F241"}.ion-social-tumblr-outline:before{content:"\F240"}.ion-social-tux:before{content:"\F2C5"}.ion-social-twitch:before{content:"\F4EE"}.ion-social-twitch-outline:before{content:"\F4ED"}.ion-social-twitter:before{content:"\F243"}.ion-social-twitter-outline:before{content:"\F242"}.ion-social-usd:before{content:"\F353"}.ion-social-usd-outline:before{content:"\F352"}.ion-social-vimeo:before{content:"\F245"}.ion-social-vimeo-outline:before{content:"\F244"}.ion-social-whatsapp:before{content:"\F4F0"}.ion-social-whatsapp-outline:before{content:"\F4EF"}.ion-social-windows:before{content:"\F247"}.ion-social-windows-outline:before{content:"\F246"}.ion-social-wordpress:before{content:"\F249"}.ion-social-wordpress-outline:before{content:"\F248"}.ion-social-yahoo:before{content:"\F24B"}.ion-social-yahoo-outline:before{content:"\F24A"}.ion-social-yen:before{content:"\F4F2"}.ion-social-yen-outline:before{content:"\F4F1"}.ion-social-youtube:before{content:"\F24D"}.ion-social-youtube-outline:before{content:"\F24C"}.ion-soup-can:before{content:"\F4F4"}.ion-soup-can-outline:before{content:"\F4F3"}.ion-speakerphone:before{content:"\F2B2"}.ion-speedometer:before{content:"\F2B3"}.ion-spoon:before{content:"\F2B4"}.ion-star:before{content:"\F24E"}.ion-stats-bars:before{content:"\F2B5"}.ion-steam:before{content:"\F30B"}.ion-stop:before{content:"\F24F"}.ion-thermometer:before{content:"\F2B6"}.ion-thumbsdown:before{content:"\F250"}.ion-thumbsup:before{content:"\F251"}.ion-toggle:before{content:"\F355"}.ion-toggle-filled:before{content:"\F354"}.ion-transgender:before{content:"\F4F5"}.ion-trash-a:before{content:"\F252"}.ion-trash-b:before{content:"\F253"}.ion-trophy:before{content:"\F356"}.ion-tshirt:before{content:"\F4F7"}.ion-tshirt-outline:before{content:"\F4F6"}.ion-umbrella:before{content:"\F2B7"}.ion-university:before{content:"\F357"}.ion-unlocked:before{content:"\F254"}.ion-upload:before{content:"\F255"}.ion-usb:before{content:"\F2B8"}.ion-videocamera:before{content:"\F256"}.ion-volume-high:before{content:"\F257"}.ion-volume-low:before{content:"\F258"}.ion-volume-medium:before{content:"\F259"}.ion-volume-mute:before{content:"\F25A"}.ion-wand:before{content:"\F358"}.ion-waterdrop:before{content:"\F25B"}.ion-wifi:before{content:"\F25C"}.ion-wineglass:before{content:"\F2B9"}.ion-woman:before{content:"\F25D"}.ion-wrench:before{content:"\F2BA"}.ion-xbox:before{content:"\F30C"} -/*! - * AdminLTE v2.4.2 - * Author: Almsaeed Studio - * Website: Almsaeed Studio <https://adminlte.io> - * License: Open source - MIT - * Please visit http://opensource.org/licenses/MIT for more information - */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.5);box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url(/images/boxed-bg.jpg?5bbbd344130f0926b70aa3499638a387) repeat fixed}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-webkit-transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out,-webkit-transform .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\F0C9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\A0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-webkit-transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out,-webkit-transform .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{-webkit-box-shadow:3px 0 8px rgba(0,0,0,0.125);box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{-webkit-box-shadow:none;box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg);transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;-webkit-box-shadow:none;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;-webkit-box-shadow:none;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;-webkit-box-shadow:none;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;-webkit-box-shadow:none;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;-webkit-box-shadow:none;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{-webkit-box-shadow:none;box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out, -webkit-transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;transition:-webkit-transform linear .3s;transition:transform linear .3s;transition:transform linear .3s, -webkit-transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{-webkit-box-shadow:inset 0 0 90px rgba(0,0,0,0.2);box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{-webkit-box-shadow:none !important;box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}}.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0} -.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0} svg { -ms-touch-action: none; touch-action: none; @@ -164,281 +156,10 @@ svg { line-height: 20px; padding-left: 3px; }/*! - * Datepicker for Bootstrap v1.7.1 (https://github.com/uxsolutions/bootstrap-datepicker) - * - * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - */ - -.datepicker{padding:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker-rtl{direction:rtl}.datepicker-rtl.dropdown-menu{left:auto}.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #999;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.highlighted{background:#d9edf7;border-radius:0}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#fde19a;background-image:-webkit-gradient(linear,left top, left bottom,from(#fdd49a),to(#fdf59a));background-image:linear-gradient(to bottom,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today:active,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today[disabled]{background-color:#fdf59a}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active{background-color:#fbf069\9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{background-color:#f3d17a;background-image:-webkit-gradient(linear,left top, left bottom,from(#f3c17a),to(#f3e97a));background-image:linear-gradient(to bottom,#f3c17a,#f3e97a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active{background-color:#efe24b\9}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{background-color:#9e9e9e;background-image:-webkit-gradient(linear,left top, left bottom,from(#b3b3b3),to(grey));background-image:linear-gradient(to bottom,#b3b3b3,grey);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);border-color:grey grey #595959;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected[disabled]{background-color:grey}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active{background-color:#666\9}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-color:#006dcc;background-image:-webkit-gradient(linear,left top, left bottom,from(#08c),to(#04c));background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active:active,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active[disabled]{background-color:#04c}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active{background-color:#039\9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span.focused,.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-color:#006dcc;background-image:-webkit-gradient(linear,left top, left bottom,from(#08c),to(#04c));background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active[disabled]{background-color:#04c}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{background-color:#039\9}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#eee}.datepicker .next.disabled,.datepicker .prev.disabled{visibility:hidden}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-append.date .add-on,.input-prepend.date .add-on{cursor:pointer}.input-append.date .add-on i,.input-prepend.date .add-on i{margin-top:3px}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:400;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px}.daterangepicker { - position: absolute; - color: inherit; - background-color: #fff; - border-radius: 4px; - width: 278px; - padding: 4px; - margin-top: 1px; - top: 100px; - left: 20px; - /* Calendars */ } - .daterangepicker:before, .daterangepicker:after { - position: absolute; - display: inline-block; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; } - .daterangepicker:before { - top: -7px; - border-right: 7px solid transparent; - border-left: 7px solid transparent; - border-bottom: 7px solid #ccc; } - .daterangepicker:after { - top: -6px; - border-right: 6px solid transparent; - border-bottom: 6px solid #fff; - border-left: 6px solid transparent; } - .daterangepicker.opensleft:before { - right: 9px; } - .daterangepicker.opensleft:after { - right: 10px; } - .daterangepicker.openscenter:before { - left: 0; - right: 0; - width: 0; - margin-left: auto; - margin-right: auto; } - .daterangepicker.openscenter:after { - left: 0; - right: 0; - width: 0; - margin-left: auto; - margin-right: auto; } - .daterangepicker.opensright:before { - left: 9px; } - .daterangepicker.opensright:after { - left: 10px; } - .daterangepicker.dropup { - margin-top: -5px; } - .daterangepicker.dropup:before { - top: initial; - bottom: -7px; - border-bottom: initial; - border-top: 7px solid #ccc; } - .daterangepicker.dropup:after { - top: initial; - bottom: -6px; - border-bottom: initial; - border-top: 6px solid #fff; } - .daterangepicker.dropdown-menu { - max-width: none; - z-index: 3001; } - .daterangepicker.single .ranges, .daterangepicker.single .calendar { - float: none; } - .daterangepicker.show-calendar .calendar { - display: block; } - .daterangepicker .calendar { - display: none; - max-width: 270px; - margin: 4px; } - .daterangepicker .calendar.single .calendar-table { - border: none; } - .daterangepicker .calendar th, .daterangepicker .calendar td { - white-space: nowrap; - text-align: center; - min-width: 32px; } - .daterangepicker .calendar-table { - border: 1px solid #fff; - padding: 4px; - border-radius: 4px; - background-color: #fff; } - .daterangepicker table { - width: 100%; - margin: 0; } - .daterangepicker td, .daterangepicker th { - text-align: center; - width: 20px; - height: 20px; - border-radius: 4px; - border: 1px solid transparent; - white-space: nowrap; - cursor: pointer; } - .daterangepicker td.available:hover, .daterangepicker th.available:hover { - background-color: #eee; - border-color: transparent; - color: inherit; } - .daterangepicker td.week, .daterangepicker th.week { - font-size: 80%; - color: #ccc; } - .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date { - background-color: #fff; - border-color: transparent; - color: #999; } - .daterangepicker td.in-range { - background-color: #ebf4f8; - border-color: transparent; - color: #000; - border-radius: 0; } - .daterangepicker td.start-date { - border-radius: 4px 0 0 4px; } - .daterangepicker td.end-date { - border-radius: 0 4px 4px 0; } - .daterangepicker td.start-date.end-date { - border-radius: 4px; } - .daterangepicker td.active, .daterangepicker td.active:hover { - background-color: #357ebd; - border-color: transparent; - color: #fff; } - .daterangepicker th.month { - width: auto; } - .daterangepicker td.disabled, .daterangepicker option.disabled { - color: #999; - cursor: not-allowed; - text-decoration: line-through; } - .daterangepicker select.monthselect, .daterangepicker select.yearselect { - font-size: 12px; - padding: 1px; - height: auto; - margin: 0; - cursor: default; } - .daterangepicker select.monthselect { - margin-right: 2%; - width: 56%; } - .daterangepicker select.yearselect { - width: 40%; } - .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect { - width: 50px; - margin-bottom: 0; } - .daterangepicker .input-mini { - border: 1px solid #ccc; - border-radius: 4px; - color: #555; - height: 30px; - line-height: 30px; - display: block; - vertical-align: middle; - margin: 0 0 5px 0; - padding: 0 6px 0 28px; - width: 100%; } - .daterangepicker .input-mini.active { - border: 1px solid #08c; - border-radius: 4px; } - .daterangepicker .daterangepicker_input { - position: relative; } - .daterangepicker .daterangepicker_input i { - position: absolute; - left: 8px; - top: 8px; } - .daterangepicker.rtl .input-mini { - padding-right: 28px; - padding-left: 6px; } - .daterangepicker.rtl .daterangepicker_input i { - left: auto; - right: 8px; } - .daterangepicker .calendar-time { - text-align: center; - margin: 5px auto; - line-height: 30px; - position: relative; - padding-left: 28px; } - .daterangepicker .calendar-time select.disabled { - color: #ccc; - cursor: not-allowed; } - -.ranges { - font-size: 11px; - float: none; - margin: 4px; - text-align: left; } - .ranges ul { - list-style: none; - margin: 0 auto; - padding: 0; - width: 100%; } - .ranges li { - font-size: 13px; - background-color: #f5f5f5; - border: 1px solid #f5f5f5; - border-radius: 4px; - color: #08c; - padding: 3px 12px; - margin-bottom: 8px; - cursor: pointer; } - .ranges li:hover { - background-color: #08c; - border: 1px solid #08c; - color: #fff; } - .ranges li.active { - background-color: #08c; - border: 1px solid #08c; - color: #fff; } - -/* Larger Screen Styling */ -@media (min-width: 564px) { - .daterangepicker { - width: auto; } - .daterangepicker .ranges ul { - width: 160px; } - .daterangepicker.single .ranges ul { - width: 100%; } - .daterangepicker.single .calendar.left { - clear: none; } - .daterangepicker.single.ltr .ranges, .daterangepicker.single.ltr .calendar { - float: left; } - .daterangepicker.single.rtl .ranges, .daterangepicker.single.rtl .calendar { - float: right; } - .daterangepicker.ltr { - direction: ltr; - text-align: left; } - .daterangepicker.ltr .calendar.left { - clear: left; - margin-right: 0; } - .daterangepicker.ltr .calendar.left .calendar-table { - border-right: none; - border-top-right-radius: 0; - border-bottom-right-radius: 0; } - .daterangepicker.ltr .calendar.right { - margin-left: 0; } - .daterangepicker.ltr .calendar.right .calendar-table { - border-left: none; - border-top-left-radius: 0; - border-bottom-left-radius: 0; } - .daterangepicker.ltr .left .daterangepicker_input { - padding-right: 12px; } - .daterangepicker.ltr .calendar.left .calendar-table { - padding-right: 12px; } - .daterangepicker.ltr .ranges, .daterangepicker.ltr .calendar { - float: left; } - .daterangepicker.rtl { - direction: rtl; - text-align: right; } - .daterangepicker.rtl .calendar.left { - clear: right; - margin-left: 0; } - .daterangepicker.rtl .calendar.left .calendar-table { - border-left: none; - border-top-left-radius: 0; - border-bottom-left-radius: 0; } - .daterangepicker.rtl .calendar.right { - margin-right: 0; } - .daterangepicker.rtl .calendar.right .calendar-table { - border-right: none; - border-top-right-radius: 0; - border-bottom-right-radius: 0; } - .daterangepicker.rtl .left .daterangepicker_input { - padding-left: 12px; } - .daterangepicker.rtl .calendar.left .calendar-table { - padding-left: 12px; } - .daterangepicker.rtl .ranges, .daterangepicker.rtl .calendar { - text-align: right; - float: right; } } -@media (min-width: 730px) { - .daterangepicker .ranges { - width: auto; } - .daterangepicker.ltr .ranges { - float: left; } - .daterangepicker.rtl .ranges { - float: right; } - .daterangepicker .calendar.left { - clear: none !important; } } -/*! bootstrap3-wysihtml5-bower 2014-09-26 */ - -ul.wysihtml5-toolbar{margin:0;padding:0;display:block}ul.wysihtml5-toolbar::after{clear:both;display:table;content:""}ul.wysihtml5-toolbar>li{float:left;display:list-item;list-style:none;margin:0 5px 10px 0}ul.wysihtml5-toolbar a[data-wysihtml5-command=bold]{font-weight:700}ul.wysihtml5-toolbar a[data-wysihtml5-command=italic]{font-style:italic}ul.wysihtml5-toolbar a[data-wysihtml5-command=underline]{text-decoration:underline}ul.wysihtml5-toolbar a.btn.wysihtml5-command-active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#D9D9D9;outline:0}ul.wysihtml5-commands-disabled .dropdown-menu{display:none!important}ul.wysihtml5-toolbar div.wysihtml5-colors{display:block;width:50px;height:20px;margin-top:2px;margin-left:5px;position:absolute;pointer-events:none}ul.wysihtml5-toolbar a.wysihtml5-colors-title{padding-left:70px}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=black]{background:#000!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=silver]{background:silver!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=gray]{background:gray!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=maroon]{background:maroon!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=red]{background:red!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=purple]{background:purple!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=green]{background:green!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=olive]{background:olive!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=navy]{background:navy!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=blue]{background:#00f!important}ul.wysihtml5-toolbar div[data-wysihtml5-command-value=orange]{background:orange!important}.glyphicon-quote:before{content:"\201C";font-family:Georgia,serif;font-size:50px;position:absolute;top:-4px;left:-3px;max-height:100%}.glyphicon-quote:after{content:"\A0"} + * AdminLTE v2.4.2 + * Author: Almsaeed Studio + * Website: Almsaeed Studio <https://adminlte.io> + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information + */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.5);box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url(/images/boxed-bg.jpg?5bbbd344130f0926b70aa3499638a387) repeat fixed}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-webkit-transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out,-webkit-transform .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\F0C9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\A0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-webkit-transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out,-webkit-transform .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{-webkit-box-shadow:3px 0 8px rgba(0,0,0,0.125);box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{-webkit-box-shadow:none;box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg);transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;-webkit-box-shadow:none;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;-webkit-box-shadow:none;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;-webkit-box-shadow:none;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;-webkit-box-shadow:none;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;-webkit-box-shadow:none;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{-webkit-box-shadow:none;box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out, -webkit-transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;transition:-webkit-transform linear .3s;transition:transform linear .3s;transition:transform linear .3s, -webkit-transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{-webkit-box-shadow:inset 0 0 90px rgba(0,0,0,0.2);box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{-webkit-box-shadow:none !important;box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}}.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} diff --git a/public/js/admin.js b/public/js/admin.js index e049646..027f5ce 100755 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -60,200 +60,87 @@ /******/ __webpack_require__.p = "/"; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 45); +/******/ return __webpack_require__(__webpack_require__.s = 46); /******/ }) /************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzP2VlZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsWUFBWTs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxZQUFZO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQSxnQkFBZ0IsSUFBSTs7QUFFcEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLFVBQVU7QUFDM0Usc0NBQXNDLDJCQUEyQjtBQUNqRTtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxVQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsY0FBYztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFlBQVksdUVBQXVFO0FBQ25GO0FBQ0E7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLFFBQVEsR0FBRztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOzs7O0FBSUE7O0FBRUE7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBLGNBQWMsU0FBUztBQUN2QjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCLDBCQUEwQix3QkFBd0I7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsY0FBYztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxzQ0FBc0M7QUFDOUUsb0NBQW9DLHVDQUF1QztBQUMzRSxvQ0FBb0Msc0NBQXNDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXOztBQUVYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEMscUNBQXFDO0FBQ3JDLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7OztBQUtBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsU0FBUztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGFBQWE7QUFDcEMsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsZ0JBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGOztBQUVBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZ0JBQWdCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXOztBQUVYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBOztBQUVBLGNBQWMsc0JBQXNCO0FBQ3BDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGNBQWM7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1REFBdUQ7QUFDOUU7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxjQUFjO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsK0JBQStCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMscUNBQXFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw4QkFBOEI7QUFDdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFlBQVksT0FBTztBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsV0FBVztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7Ozs7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLGNBQWMsV0FBVztBQUN4RSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBLHNCQUFzQixjQUFjLHNCQUFzQixnQkFBZ0I7QUFDMUUsZ0JBQWdCLFdBQVcsWUFBWTtBQUN2QyxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDOzs7QUFHRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtEQUErRDtBQUMzRTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTzs7QUFFZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxRQUFRLE9BQU87QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0JBQWdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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R0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBOztBQUVBLElBQUk7QUFDSjs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7OztBQUdBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBSztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDs7QUFFQSxXQUFXO0FBQ1gsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLHlCQUF5QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0EsY0FBYyxzREFBc0Q7QUFDcEU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQSxjQUFjLG1DQUFtQztBQUNqRCxlQUFlLDZEQUE2RDtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUFBO0FBQ0Y7Ozs7O0FBS0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBLENBQUMiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4zLjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE4LTAxLTIwVDE3OjI0WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cbiAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcbiAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIjtcbiAgfTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBkb2MsIG5vZGUgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblx0XHRcdFx0aWYgKCBub2RlWyBpIF0gKSB7XG5cdFx0XHRcdFx0c2NyaXB0WyBpIF0gPSBub2RlWyBpIF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjMuMVwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcblx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBBcnJheS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6IFtdO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy82MTI1XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHRcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUgKSB7XG5cdFx0RE9NRXZhbCggY29kZSApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy4zXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNi0wOC0wOFxuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXG5cdHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCBcIj1cIiArIHdoaXRlc3BhY2UgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsIFwiZ1wiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRkaXNhYmxlZEFuY2VzdG9yID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIChcImZvcm1cIiBpbiBlbGVtIHx8IFwibGFiZWxcIiBpbiBlbGVtKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG5cdFx0XHRcdC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudFxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZVxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PThcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0fSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBcIiNcIiArIG5pZCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGRpc2FibGVkQW5jZXN0b3IoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHQvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0XG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblx0cmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gXCJIVE1MXCIgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXG5cdFx0KHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXG5cdGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIgKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IWNvbXBpbGVyQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgXCJpZnJhbWVcIiApICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG4gICAgICAgIC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuICAgICAgICAvLyBkb24ndCBzdXBwb3J0IGl0LlxuICAgICAgICBpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggY29udGFpbnMgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0gKSgpO1xudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2Uocylcblx0XHRcdFx0Ly8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGZvY3VzOiB7XG5cblx0XHRcdC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNpblwiXG5cdFx0fSxcblx0XHRibHVyOiB7XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHtcblx0XHRcdFx0XHR0aGlzLmJsdXIoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNvdXRcIlxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgbm9kZU5hbWUoIHRoaXMsIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24ndCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBldmVudC50YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOVxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopW14+XSopXFwvPi9naSxcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgZG9jLCBub2RlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIG5vZGUub3duZXJEb2N1bWVudCwgbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMzYgfHwgXCJhYnNvbHV0ZVwiO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlO1xuXG4vLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZFxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwcm9wZXJ0eSBtYXBwZWQgYWxvbmcgd2hhdCBqUXVlcnkuY3NzUHJvcHMgc3VnZ2VzdHMgb3IgdG9cbi8vIGEgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5LlxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdO1xuXHRpZiAoICFyZXQgKSB7XG5cdFx0cmV0ID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG5cdH1cblx0cmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblx0XHQpICk7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3g7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0Ly8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZVxuXHR2YWx1ZUlzQm9yZGVyQm94ID0gdmFsdWVJc0JvcmRlckJveCAmJlxuXHRcdCggc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gKTtcblxuXHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0aWYgKCB2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSB7XG5cblx0XHR2YWwgPSBlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF07XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgcHJvdmlkZSBib3JkZXItYm94IHZhbHVlc1xuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlO1xuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSAmJiBib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgPT09IHN0eWxlcy5wb3NpdGlvbiApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IERhdGUubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9IClcblx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXHRcdFwidGhyb3dzXCI6IHRydWVcblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKS5wcm9wKCB7XG5cdFx0XHRcdFx0Y2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LFxuXHRcdFx0XHRcdHNyYzogcy51cmxcblx0XHRcdFx0fSApLm9uKFxuXHRcdFx0XHRcdFwibG9hZCBlcnJvclwiLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoICFub0dsb2JhbCApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n"); - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzM2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUMiLCJmaWxlIjoiMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n"); - -/***/ }), -/* 3 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.3\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popper);\n//# sourceMappingURL=popper.js.map\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qcz82NjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxrQ0FBa0M7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsSUFBSTtBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFlBQVk7QUFDdkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiFcbiAqIEBmaWxlT3ZlcnZpZXcgS2lja2FzcyBsaWJyYXJ5IHRvIGNyZWF0ZSBhbmQgcGxhY2UgcG9wcGVycyBuZWFyIHRoZWlyIHJlZmVyZW5jZSBlbGVtZW50cy5cbiAqIEB2ZXJzaW9uIDEuMTQuM1xuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBGZWRlcmljbyBaaXZvbG8gYW5kIGNvbnRyaWJ1dG9yc1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgbG9uZ2VyVGltZW91dEJyb3dzZXJzID0gWydFZGdlJywgJ1RyaWRlbnQnLCAnRmlyZWZveCddO1xudmFyIHRpbWVvdXREdXJhdGlvbiA9IDA7XG5mb3IgKHZhciBpID0gMDsgaSA8IGxvbmdlclRpbWVvdXRCcm93c2Vycy5sZW5ndGg7IGkgKz0gMSkge1xuICBpZiAoaXNCcm93c2VyICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihsb25nZXJUaW1lb3V0QnJvd3NlcnNbaV0pID49IDApIHtcbiAgICB0aW1lb3V0RHVyYXRpb24gPSAxO1xuICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pY3JvdGFza0RlYm91bmNlKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgd2luZG93LlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGVkID0gZmFsc2U7XG4gICAgICBmbigpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBzdXBwb3J0c01pY3JvVGFza3MgPSBpc0Jyb3dzZXIgJiYgd2luZG93LlByb21pc2U7XG5cbi8qKlxuKiBDcmVhdGUgYSBkZWJvdW5jZWQgdmVyc2lvbiBvZiBhIG1ldGhvZCwgdGhhdCdzIGFzeW5jaHJvbm91c2x5IGRlZmVycmVkXG4qIGJ1dCBjYWxsZWQgaW4gdGhlIG1pbmltdW0gdGltZSBwb3NzaWJsZS5cbipcbiogQG1ldGhvZFxuKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4qIEBhcmd1bWVudCB7RnVuY3Rpb259IGZuXG4qIEByZXR1cm5zIHtGdW5jdGlvbn1cbiovXG52YXIgZGVib3VuY2UgPSBzdXBwb3J0c01pY3JvVGFza3MgPyBtaWNyb3Rhc2tEZWJvdW5jZSA6IHRhc2tEZWJvdW5jZTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAvLyBTa2lwIGhpZGRlbiBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGFuIG9mZnNldFBhcmVudFxuICB3aGlsZSAob2Zmc2V0UGFyZW50ID09PSBub09mZnNldFBhcmVudCAmJiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgIG9mZnNldFBhcmVudCA9IChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpLm9mZnNldFBhcmVudDtcbiAgfVxuXG4gIHZhciBub2RlTmFtZSA9IG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQubm9kZU5hbWU7XG5cbiAgaWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudCA/IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyAub2Zmc2V0UGFyZW50IHdpbGwgcmV0dXJuIHRoZSBjbG9zZXN0IFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IGh0bWxbJ29mZnNldCcgKyBheGlzXSArIGNvbXB1dGVkU3R5bGVbJ21hcmdpbicgKyAoYXhpcyA9PT0gJ0hlaWdodCcgPyAnVG9wJyA6ICdMZWZ0JyldICsgY29tcHV0ZWRTdHlsZVsnbWFyZ2luJyArIChheGlzID09PSAnSGVpZ2h0JyA/ICdCb3R0b20nIDogJ1JpZ2h0JyldIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKCkge1xuICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gIHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IGlzSUUoMTApICYmIGdldENvbXB1dGVkU3R5bGUoaHRtbCk7XG5cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IGdldFNpemUoJ0hlaWdodCcsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpLFxuICAgIHdpZHRoOiBnZXRTaXplKCdXaWR0aCcsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpXG4gIH07XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cblxuXG5cblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuLyoqXG4gKiBHaXZlbiBlbGVtZW50IG9mZnNldHMsIGdlbmVyYXRlIGFuIG91dHB1dCBzaW1pbGFyIHRvIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IG9mZnNldHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENsaWVudFJlY3QgbGlrZSBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdChvZmZzZXRzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb2Zmc2V0cywge1xuICAgIHJpZ2h0OiBvZmZzZXRzLmxlZnQgKyBvZmZzZXRzLndpZHRoLFxuICAgIGJvdHRvbTogb2Zmc2V0cy50b3AgKyBvZmZzZXRzLmhlaWdodFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYm91bmRpbmcgY2xpZW50IHJlY3Qgb2YgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7T2JqZWN0fSBjbGllbnQgcmVjdFxuICovXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IHt9O1xuXG4gIC8vIElFMTAgMTAgRklYOiBQbGVhc2UsIGRvbid0IGFzaywgdGhlIGVsZW1lbnQgaXNuJ3RcbiAgLy8gY29uc2lkZXJlZCBpbiBET00gaW4gc29tZSBjaXJjdW1zdGFuY2VzLi4uXG4gIC8vIFRoaXMgaXNuJ3QgcmVwcm9kdWNpYmxlIGluIElFMTAgY29tcGF0aWJpbGl0eSBtb2RlIG9mIElFMTFcbiAgdHJ5IHtcbiAgICBpZiAoaXNJRSgxMCkpIHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICAgICAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQ7XG4gICAgICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHdpZHRoOiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LFxuICAgIGhlaWdodDogcmVjdC5ib3R0b20gLSByZWN0LnRvcFxuICB9O1xuXG4gIC8vIHN1YnRyYWN0IHNjcm9sbGJhciBzaXplIGZyb20gc2l6ZXNcbiAgdmFyIHNpemVzID0gZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0hUTUwnID8gZ2V0V2luZG93U2l6ZXMoKSA6IHt9O1xuICB2YXIgd2lkdGggPSBzaXplcy53aWR0aCB8fCBlbGVtZW50LmNsaWVudFdpZHRoIHx8IHJlc3VsdC5yaWdodCAtIHJlc3VsdC5sZWZ0O1xuICB2YXIgaGVpZ2h0ID0gc2l6ZXMuaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHJlc3VsdC5ib3R0b20gLSByZXN1bHQudG9wO1xuXG4gIHZhciBob3JpelNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSB3aWR0aDtcbiAgdmFyIHZlcnRTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldEhlaWdodCAtIGhlaWdodDtcblxuICAvLyBpZiBhbiBoeXBvdGhldGljYWwgc2Nyb2xsYmFyIGlzIGRldGVjdGVkLCB3ZSBtdXN0IGJlIHN1cmUgaXQncyBub3QgYSBgYm9yZGVyYFxuICAvLyB3ZSBtYWtlIHRoaXMgY2hlY2sgY29uZGl0aW9uYWwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAgaWYgKGhvcml6U2Nyb2xsYmFyIHx8IHZlcnRTY3JvbGxiYXIpIHtcbiAgICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpO1xuICAgIGhvcml6U2Nyb2xsYmFyIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3gnKTtcbiAgICB2ZXJ0U2Nyb2xsYmFyIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3knKTtcblxuICAgIHJlc3VsdC53aWR0aCAtPSBob3JpelNjcm9sbGJhcjtcbiAgICByZXN1bHQuaGVpZ2h0IC09IHZlcnRTY3JvbGxiYXI7XG4gIH1cblxuICByZXR1cm4gZ2V0Q2xpZW50UmVjdChyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoY2hpbGRyZW4sIHBhcmVudCkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIGlzSUUxMCA9IGlzSUUoMTApO1xuICB2YXIgaXNIVE1MID0gcGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCc7XG4gIHZhciBjaGlsZHJlblJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoY2hpbGRyZW4pO1xuICB2YXIgcGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChwYXJlbnQpO1xuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGNoaWxkcmVuKTtcblxuICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KHBhcmVudCk7XG4gIHZhciBib3JkZXJUb3BXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlclRvcFdpZHRoLCAxMCk7XG4gIHZhciBib3JkZXJMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgsIDEwKTtcblxuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgcGFyZW50IGlzIGZpeGVkLCB3ZSBtdXN0IGlnbm9yZSBuZWdhdGl2ZSBzY3JvbGwgaW4gb2Zmc2V0IGNhbGNcbiAgaWYgKGZpeGVkUG9zaXRpb24gJiYgcGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMoKSxcbiAgICAgICAgICBoZWlnaHQgPSBfZ2V0V2luZG93U2l6ZXMuaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoID0gX2dldFdpbmRvd1NpemVzLndpZHRoO1xuXG4gICAgICBib3VuZGFyaWVzLnRvcCArPSBvZmZzZXRzLnRvcCAtIG9mZnNldHMubWFyZ2luVG9wO1xuICAgICAgYm91bmRhcmllcy5ib3R0b20gPSBoZWlnaHQgKyBvZmZzZXRzLnRvcDtcbiAgICAgIGJvdW5kYXJpZXMubGVmdCArPSBvZmZzZXRzLmxlZnQgLSBvZmZzZXRzLm1hcmdpbkxlZnQ7XG4gICAgICBib3VuZGFyaWVzLnJpZ2h0ID0gd2lkdGggKyBvZmZzZXRzLmxlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBhbGwgdGhlIG90aGVyIERPTSBlbGVtZW50cywgdGhpcyBvbmUgaXMgZ29vZFxuICAgICAgYm91bmRhcmllcyA9IG9mZnNldHM7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHBhZGRpbmdzXG4gIGJvdW5kYXJpZXMubGVmdCArPSBwYWRkaW5nO1xuICBib3VuZGFyaWVzLnRvcCArPSBwYWRkaW5nO1xuICBib3VuZGFyaWVzLnJpZ2h0IC09IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMuYm90dG9tIC09IHBhZGRpbmc7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciB4ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSk7XG4gIHZhciB5ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5SaWdodCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3kgdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICB0aGlzLnN0YXRlLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAvLyB0b3VjaCBET00gb25seSBpZiBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgaXMgZW5hYmxlZFxuICBpZiAoaXNNb2RpZmllckVuYWJsZWQodGhpcy5tb2RpZmllcnMsICdhcHBseVN0eWxlJykpIHtcbiAgICB0aGlzLnBvcHBlci5yZW1vdmVBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50Jyk7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS50b3AgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucmlnaHQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5ib3R0b20gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGVbZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKV0gPSAnJztcbiAgfVxuXG4gIHRoaXMuZGlzYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgLy8gcmVtb3ZlIHRoZSBwb3BwZXIgaWYgdXNlciBleHBsaWNpdHkgYXNrZWQgZm9yIHRoZSBkZWxldGlvbiBvbiBkZXN0cm95XG4gIC8vIGRvIG5vdCB1c2UgYHJlbW92ZWAgYmVjYXVzZSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdFxuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU9uRGVzdHJveSkge1xuICAgIHRoaXMucG9wcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3BwZXIpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coZWxlbWVudCkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogd2luZG93O1xufVxuXG5mdW5jdGlvbiBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsUGFyZW50LCBldmVudCwgY2FsbGJhY2ssIHNjcm9sbFBhcmVudHMpIHtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudC5ub2RlTmFtZSA9PT0gJ0JPRFknO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gc2Nyb2xsUGFyZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiBzY3JvbGxQYXJlbnQ7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIGlmICghaXNCb2R5KSB7XG4gICAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKGdldFNjcm9sbFBhcmVudCh0YXJnZXQucGFyZW50Tm9kZSksIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cyk7XG4gIH1cbiAgc2Nyb2xsUGFyZW50cy5wdXNoKHRhcmdldCk7XG59XG5cbi8qKlxuICogU2V0dXAgbmVlZGVkIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXR1cEV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgb3B0aW9ucywgc3RhdGUsIHVwZGF0ZUJvdW5kKSB7XG4gIC8vIFJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgc3RhdGUudXBkYXRlQm91bmQgPSB1cGRhdGVCb3VuZDtcbiAgZ2V0V2luZG93KHJlZmVyZW5jZSkuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBTY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgdmFyIHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxQYXJlbnQocmVmZXJlbmNlKTtcbiAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCwgc3RhdGUuc2Nyb2xsUGFyZW50cyk7XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBzY3JvbGxFbGVtZW50O1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gdHJ1ZTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCBhZGQgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHN0YXJ0IHJlY2FsY3VsYXRpbmdcbiAqIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIgZWxlbWVudCB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHNldHVwRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucywgdGhpcy5zdGF0ZSwgdGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgc3RhdGUpIHtcbiAgLy8gUmVtb3ZlIHJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgZ2V0V2luZG93KHJlZmVyZW5jZSkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQpO1xuXG4gIC8vIFJlbW92ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc3RhdGUudXBkYXRlQm91bmQpO1xuICB9KTtcblxuICAvLyBSZXNldCBzdGF0ZVxuICBzdGF0ZS51cGRhdGVCb3VuZCA9IG51bGw7XG4gIHN0YXRlLnNjcm9sbFBhcmVudHMgPSBbXTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IG51bGw7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIEl0IHdpbGwgcmVtb3ZlIHJlc2l6ZS9zY3JvbGwgZXZlbnRzIGFuZCB3b24ndCByZWNhbGN1bGF0ZSBwb3BwZXIgcG9zaXRpb25cbiAqIHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLiBJdCBhbHNvIHdvbid0IHRyaWdnZXIgb25VcGRhdGUgY2FsbGJhY2sgYW55bW9yZSxcbiAqIHVubGVzcyB5b3UgY2FsbCBgdXBkYXRlYCBtZXRob2QgbWFudWFsbHkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRpc2FibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2NoZWR1bGVVcGRhdGUpO1xuICAgIHRoaXMuc3RhdGUgPSByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5zdGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyBpZiBhIGdpdmVuIGlucHV0IGlzIGEgbnVtYmVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0geyp9IGlucHV0IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bWVyaWMobikge1xuICByZXR1cm4gbiAhPT0gJycgJiYgIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgc3R5bGUgdG8gdGhlIGdpdmVuIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhcHBseSB0aGUgc3R5bGUgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldFN0eWxlcyhlbGVtZW50LCBzdHlsZXMpIHtcbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHVuaXQgPSAnJztcbiAgICAvLyBhZGQgdW5pdCBpZiB0aGUgdmFsdWUgaXMgbnVtZXJpYyBhbmQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAgICBpZiAoWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uaW5kZXhPZihwcm9wKSAhPT0gLTEgJiYgaXNOdW1lcmljKHN0eWxlc1twcm9wXSkpIHtcbiAgICAgIHVuaXQgPSAncHgnO1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gc3R5bGVzW3Byb3BdICsgdW5pdDtcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIGF0dHJpYnV0ZXMgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1twcm9wXTtcbiAgICBpZiAodmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLnN0eWxlcyAtIExpc3Qgb2Ygc3R5bGUgcHJvcGVydGllcyAtIHZhbHVlcyB0byBhcHBseSB0byBwb3BwZXIgZWxlbWVudFxuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEuYXR0cmlidXRlcyAtIExpc3Qgb2YgYXR0cmlidXRlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIGRhdGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZGF0YSkge1xuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5zdHlsZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyBpbiB0aGlzIHdheSB3ZSBjYW4gbWFrZSB0aGUgM3JkIHBhcnR5IG1vZGlmaWVycyBhZGQgY3VzdG9tIHN0eWxlcyB0byBpdFxuICAvLyBCZSBhd2FyZSwgbW9kaWZpZXJzIGNvdWxkIG92ZXJyaWRlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzXG4gIC8vIGxpbmVzIG9mIHRoaXMgbW9kaWZpZXIhXG4gIHNldFN0eWxlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5zdHlsZXMpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmF0dHJpYnV0ZXMpO1xuXG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBkZWZpbmVkIGFuZCBhcnJvd1N0eWxlcyBoYXMgc29tZSBwcm9wZXJ0aWVzXG4gIGlmIChkYXRhLmFycm93RWxlbWVudCAmJiBPYmplY3Qua2V5cyhkYXRhLmFycm93U3R5bGVzKS5sZW5ndGgpIHtcbiAgICBzZXRTdHlsZXMoZGF0YS5hcnJvd0VsZW1lbnQsIGRhdGEuYXJyb3dTdHlsZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogU2V0IHRoZSB4LXBsYWNlbWVudCBhdHRyaWJ1dGUgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBiZWNhdXNlIGl0IGNvdWxkIGJlIHVzZWRcbiAqIHRvIGFkZCBtYXJnaW5zIHRvIHRoZSBwb3BwZXIgbWFyZ2lucyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIHRvIGdldCB0aGVcbiAqIGNvcnJlY3QgcG9wcGVyIG9mZnNldHMuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHBvcHBlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQb3BwZXIuanMgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlT25Mb2FkKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIHN0YXRlKSB7XG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICB2YXIgcmVmZXJlbmNlT2Zmc2V0cyA9IGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO1xuXG4gIHBvcHBlci5zZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JywgcGxhY2VtZW50KTtcblxuICAvLyBBcHBseSBgcG9zaXRpb25gIHRvIHBvcHBlciBiZWZvcmUgYW55dGhpbmcgZWxzZSBiZWNhdXNlXG4gIC8vIHdpdGhvdXQgdGhlIHBvc2l0aW9uIGFwcGxpZWQgd2UgY2FuJ3QgZ3VhcmFudGVlIGNvcnJlY3QgY29tcHV0YXRpb25zXG4gIHNldFN0eWxlcyhwb3BwZXIsIHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb25GaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlU3R5bGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgeCA9IG9wdGlvbnMueCxcbiAgICAgIHkgPSBvcHRpb25zLnk7XG4gIHZhciBwb3BwZXIgPSBkYXRhLm9mZnNldHMucG9wcGVyO1xuXG4gIC8vIFJlbW92ZSB0aGlzIGxlZ2FjeSBzdXBwb3J0IGluIFBvcHBlci5qcyB2MlxuXG4gIHZhciBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ2FwcGx5U3R5bGUnO1xuICB9KS5ncHVBY2NlbGVyYXRpb247XG4gIGlmIChsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGdwdUFjY2VsZXJhdGlvbmAgb3B0aW9uIG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBvcHBlci5qcyEnKTtcbiAgfVxuICB2YXIgZ3B1QWNjZWxlcmF0aW9uID0gbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uICE9PSB1bmRlZmluZWQgPyBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gOiBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbjtcblxuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIG9mZnNldFBhcmVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcblxuICAvLyBTdHlsZXNcbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBwb3NpdGlvbjogcG9wcGVyLnBvc2l0aW9uXG4gIH07XG5cbiAgLy8gQXZvaWQgYmx1cnJ5IHRleHQgYnkgdXNpbmcgZnVsbCBwaXhlbCBpbnRlZ2Vycy5cbiAgLy8gRm9yIHBpeGVsLXBlcmZlY3QgcG9zaXRpb25pbmcsIHRvcC9ib3R0b20gcHJlZmVycyByb3VuZGVkXG4gIC8vIHZhbHVlcywgd2hpbGUgbGVmdC9yaWdodCBwcmVmZXJzIGZsb29yZWQgdmFsdWVzLlxuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICBsZWZ0OiBNYXRoLmZsb29yKHBvcHBlci5sZWZ0KSxcbiAgICB0b3A6IE1hdGgucm91bmQocG9wcGVyLnRvcCksXG4gICAgYm90dG9tOiBNYXRoLnJvdW5kKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBNYXRoLmZsb29yKHBvcHBlci5yaWdodClcbiAgfTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICB0b3AgPSAtb2Zmc2V0UGFyZW50UmVjdC5oZWlnaHQgKyBvZmZzZXRzLmJvdHRvbTtcbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBsZWZ0ID0gLW9mZnNldFBhcmVudFJlY3Qud2lkdGggKyBvZmZzZXRzLnJpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGxlZnQgPSBvZmZzZXRzLmxlZnQ7XG4gIH1cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbiAmJiBwcmVmaXhlZFByb3BlcnR5KSB7XG4gICAgc3R5bGVzW3ByZWZpeGVkUHJvcGVydHldID0gJ3RyYW5zbGF0ZTNkKCcgKyBsZWZ0ICsgJ3B4LCAnICsgdG9wICsgJ3B4LCAwKSc7XG4gICAgc3R5bGVzW3NpZGVBXSA9IDA7XG4gICAgc3R5bGVzW3NpZGVCXSA9IDA7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYHRvcGAsIGBsZWZ0YCwgYGJvdHRvbWAgYW5kIGByaWdodGAgcHJvcGVydGllc1xuICAgIHZhciBpbnZlcnRUb3AgPSBzaWRlQSA9PT0gJ2JvdHRvbScgPyAtMSA6IDE7XG4gICAgdmFyIGludmVydExlZnQgPSBzaWRlQiA9PT0gJ3JpZ2h0JyA/IC0xIDogMTtcbiAgICBzdHlsZXNbc2lkZUFdID0gdG9wICogaW52ZXJ0VG9wO1xuICAgIHN0eWxlc1tzaWRlQl0gPSBsZWZ0ICogaW52ZXJ0TGVmdDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9IHNpZGVBICsgJywgJyArIHNpZGVCO1xuICB9XG5cbiAgLy8gQXR0cmlidXRlc1xuICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAneC1wbGFjZW1lbnQnOiBkYXRhLnBsYWNlbWVudFxuICB9O1xuXG4gIC8vIFVwZGF0ZSBgZGF0YWAgYXR0cmlidXRlcywgc3R5bGVzIGFuZCBhcnJvd1N0eWxlc1xuICBkYXRhLmF0dHJpYnV0ZXMgPSBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKTtcbiAgZGF0YS5zdHlsZXMgPSBfZXh0ZW5kcyh7fSwgc3R5bGVzLCBkYXRhLnN0eWxlcyk7XG4gIGRhdGEuYXJyb3dTdHlsZXMgPSBfZXh0ZW5kcyh7fSwgZGF0YS5vZmZzZXRzLmFycm93LCBkYXRhLmFycm93U3R5bGVzKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdXNlZCB0byBrbm93IGlmIHRoZSBnaXZlbiBtb2RpZmllciBkZXBlbmRzIGZyb20gYW5vdGhlciBvbmUuPGJyIC8+XG4gKiBJdCBjaGVja3MgaWYgdGhlIG5lZWRlZCBtb2RpZmllciBpcyBsaXN0ZWQgYW5kIGVuYWJsZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RpZmllcnMgLSBsaXN0IG9mIG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RpbmdOYW1lIC0gbmFtZSBvZiByZXF1ZXN0aW5nIG1vZGlmaWVyXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGVkTmFtZSAtIG5hbWUgb2YgcmVxdWVzdGVkIG1vZGlmaWVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNb2RpZmllclJlcXVpcmVkKG1vZGlmaWVycywgcmVxdWVzdGluZ05hbWUsIHJlcXVlc3RlZE5hbWUpIHtcbiAgdmFyIHJlcXVlc3RpbmcgPSBmaW5kKG1vZGlmaWVycywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZTtcbiAgICByZXR1cm4gbmFtZSA9PT0gcmVxdWVzdGluZ05hbWU7XG4gIH0pO1xuXG4gIHZhciBpc1JlcXVpcmVkID0gISFyZXF1ZXN0aW5nICYmIG1vZGlmaWVycy5zb21lKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSByZXF1ZXN0ZWROYW1lICYmIG1vZGlmaWVyLmVuYWJsZWQgJiYgbW9kaWZpZXIub3JkZXIgPCByZXF1ZXN0aW5nLm9yZGVyO1xuICB9KTtcblxuICBpZiAoIWlzUmVxdWlyZWQpIHtcbiAgICB2YXIgX3JlcXVlc3RpbmcgPSAnYCcgKyByZXF1ZXN0aW5nTmFtZSArICdgJztcbiAgICB2YXIgcmVxdWVzdGVkID0gJ2AnICsgcmVxdWVzdGVkTmFtZSArICdgJztcbiAgICBjb25zb2xlLndhcm4ocmVxdWVzdGVkICsgJyBtb2RpZmllciBpcyByZXF1aXJlZCBieSAnICsgX3JlcXVlc3RpbmcgKyAnIG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgJyArIF9yZXF1ZXN0aW5nICsgJyEnKTtcbiAgfVxuICByZXR1cm4gaXNSZXF1aXJlZDtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGFycm93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIF9kYXRhJG9mZnNldHMkYXJyb3c7XG5cbiAgLy8gYXJyb3cgZGVwZW5kcyBvbiBrZWVwVG9nZXRoZXIgaW4gb3JkZXIgdG8gd29ya1xuICBpZiAoIWlzTW9kaWZpZXJSZXF1aXJlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2Fycm93JywgJ2tlZXBUb2dldGhlcicpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYXJyb3dFbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50O1xuXG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBhIHN0cmluZywgc3VwcG9zZSBpdCdzIGEgQ1NTIHNlbGVjdG9yXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IGRhdGEuaW5zdGFuY2UucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIC8vIGlmIGFycm93RWxlbWVudCBpcyBub3QgZm91bmQsIGRvbid0IHJ1biB0aGUgbW9kaWZpZXJcbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHRoZSBhcnJvd0VsZW1lbnQgaXNuJ3QgYSBxdWVyeSBzZWxlY3RvciB3ZSBtdXN0IGNoZWNrIHRoYXQgdGhlXG4gICAgLy8gcHJvdmlkZWQgRE9NIG5vZGUgaXMgY2hpbGQgb2YgaXRzIHBvcHBlciBub2RlXG4gICAgaWYgKCFkYXRhLmluc3RhbmNlLnBvcHBlci5jb250YWlucyhhcnJvd0VsZW1lbnQpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBhcnJvdy5lbGVtZW50YCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXIgZWxlbWVudCEnKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2lkZUNhcGl0YWxpemVkID0gaXNWZXJ0aWNhbCA/ICdUb3AnIDogJ0xlZnQnO1xuICB2YXIgc2lkZSA9IHNpZGVDYXBpdGFsaXplZC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgYWx0U2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gIHZhciBhcnJvd0VsZW1lbnRTaXplID0gZ2V0T3V0ZXJTaXplcyhhcnJvd0VsZW1lbnQpW2xlbl07XG5cbiAgLy9cbiAgLy8gZXh0ZW5kcyBrZWVwVG9nZXRoZXIgYmVoYXZpb3IgbWFraW5nIHN1cmUgdGhlIHBvcHBlciBhbmQgaXRzXG4gIC8vIHJlZmVyZW5jZSBoYXZlIGVub3VnaCBwaXhlbHMgaW4gY29uanVjdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLXJpZ2h0YCAob24gdGhlIHNpZGUgd2l0aCBtb3JlIHNwYWNlIGF2YWlsYWJsZSwgYWxpZ25tZW50IGRlcGVuZHMgYnkgcGxhY2VtZW50KVxuICpcbiAqIEBzdGF0aWNcbiAqIEB0eXBlIHtBcnJheX1cbiAqIEBlbnVtIHtTdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZXRob2QgcGxhY2VtZW50c1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgcGxhY2VtZW50cyA9IFsnYXV0by1zdGFydCcsICdhdXRvJywgJ2F1dG8tZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnLCAndG9wLWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICdyaWdodC1lbmQnLCAnYm90dG9tLWVuZCcsICdib3R0b20nLCAnYm90dG9tLXN0YXJ0JywgJ2xlZnQtZW5kJywgJ2xlZnQnLCAnbGVmdC1zdGFydCddO1xuXG4vLyBHZXQgcmlkIG9mIGBhdXRvYCBgYXV0by1zdGFydGAgYW5kIGBhdXRvLWVuZGBcbnZhciB2YWxpZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLnNsaWNlKDMpO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluaXRpYWwgcGxhY2VtZW50LCByZXR1cm5zIGFsbCB0aGUgc3Vic2VxdWVudCBwbGFjZW1lbnRzXG4gKiBjbG9ja3dpc2UgKG9yIGNvdW50ZXItY2xvY2t3aXNlKS5cbiAqXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IC0gQSB2YWxpZCBwbGFjZW1lbnQgKGl0IGFjY2VwdHMgdmFyaWF0aW9ucylcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gY291bnRlciAtIFNldCB0byB0cnVlIHRvIHdhbGsgdGhlIHBsYWNlbWVudHMgY291bnRlcmNsb2Nrd2lzZVxuICogQHJldHVybnMge0FycmF5fSBwbGFjZW1lbnRzIGluY2x1ZGluZyB0aGVpciB2YXJpYXRpb25zXG4gKi9cbmZ1bmN0aW9uIGNsb2Nrd2lzZShwbGFjZW1lbnQpIHtcbiAgdmFyIGNvdW50ZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpbmRleCA9IHZhbGlkUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCk7XG4gIHZhciBhcnIgPSB2YWxpZFBsYWNlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5jb25jYXQodmFsaWRQbGFjZW1lbnRzLnNsaWNlKDAsIGluZGV4KSk7XG4gIHJldHVybiBjb3VudGVyID8gYXJyLnJldmVyc2UoKSA6IGFycjtcbn1cblxudmFyIEJFSEFWSU9SUyA9IHtcbiAgRkxJUDogJ2ZsaXAnLFxuICBDTE9DS1dJU0U6ICdjbG9ja3dpc2UnLFxuICBDT1VOVEVSQ0xPQ0tXSVNFOiAnY291bnRlcmNsb2Nrd2lzZSdcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmbGlwKGRhdGEsIG9wdGlvbnMpIHtcbiAgLy8gaWYgYGlubmVyYCBtb2RpZmllciBpcyBlbmFibGVkLCB3ZSBjYW4ndCB1c2UgdGhlIGBmbGlwYCBtb2RpZmllclxuICBpZiAoaXNNb2RpZmllckVuYWJsZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdpbm5lcicpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YS5mbGlwcGVkICYmIGRhdGEucGxhY2VtZW50ID09PSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50KSB7XG4gICAgLy8gc2VlbXMgbGlrZSBmbGlwIGlzIHRyeWluZyB0byBsb29wLCBwcm9iYWJseSB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2Ugb24gYW55IG9mIHRoZSBmbGlwcGFibGUgc2lkZXNcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBib3VuZGFyaWVzID0gZ2V0Qm91bmRhcmllcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5pbnN0YW5jZS5yZWZlcmVuY2UsIG9wdGlvbnMucGFkZGluZywgb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCwgZGF0YS5wb3NpdGlvbkZpeGVkKTtcblxuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMV0gfHwgJyc7XG5cbiAgdmFyIGZsaXBPcmRlciA9IFtdO1xuXG4gIHN3aXRjaCAob3B0aW9ucy5iZWhhdmlvcikge1xuICAgIGNhc2UgQkVIQVZJT1JTLkZMSVA6XG4gICAgICBmbGlwT3JkZXIgPSBbcGxhY2VtZW50LCBwbGFjZW1lbnRPcHBvc2l0ZV07XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DTE9DS1dJU0U6XG4gICAgICBmbGlwT3JkZXIgPSBjbG9ja3dpc2UocGxhY2VtZW50KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNPVU5URVJDTE9DS1dJU0U6XG4gICAgICBmbGlwT3JkZXIgPSBjbG9ja3dpc2UocGxhY2VtZW50LCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmbGlwT3JkZXIgPSBvcHRpb25zLmJlaGF2aW9yO1xuICB9XG5cbiAgZmxpcE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHN0ZXAsIGluZGV4KSB7XG4gICAgaWYgKHBsYWNlbWVudCAhPT0gc3RlcCB8fCBmbGlwT3JkZXIubGVuZ3RoID09PSBpbmRleCArIDEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIHBvcHBlck9mZnNldHMgPSBkYXRhLm9mZnNldHMucG9wcGVyO1xuICAgIHZhciByZWZPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcblxuICAgIC8vIHVzaW5nIGZsb29yIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBvZmZzZXRzIG1heSBjb250YWluIGRlY2ltYWxzIHdlIGFyZSBub3QgZ29pbmcgdG8gY29uc2lkZXIgaGVyZVxuICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgdmFyIG92ZXJsYXBzUmVmID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihyZWZPZmZzZXRzLmxlZnQpIHx8IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IocmVmT2Zmc2V0cy5yaWdodCkgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihyZWZPZmZzZXRzLnRvcCkgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihyZWZPZmZzZXRzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzTGVmdCA9IGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihib3VuZGFyaWVzLmxlZnQpO1xuICAgIHZhciBvdmVyZmxvd3NSaWdodCA9IGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IoYm91bmRhcmllcy5yaWdodCk7XG4gICAgdmFyIG92ZXJmbG93c1RvcCA9IGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKGJvdW5kYXJpZXMudG9wKTtcbiAgICB2YXIgb3ZlcmZsb3dzQm90dG9tID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IoYm91bmRhcmllcy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0JvdW5kYXJpZXMgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIG92ZXJmbG93c1RvcCB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIG92ZXJmbG93c0JvdHRvbTtcblxuICAgIC8vIGZsaXAgdGhlIHZhcmlhdGlvbiBpZiByZXF1aXJlZFxuICAgIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbiA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c1RvcCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0JvdHRvbSk7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0bGVzcywgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzXG4gICAqIC0gYCVgIG9yIGAlcmAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAgICogLSBgJXBgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHBvcHBlciBlbGVtZW50XG4gICAqIC0gYHZ3YCwgQ1NTIHZpZXdwb3J0IHdpZHRoIHVuaXRcbiAgICogLSBgdmhgLCBDU1Mgdmlld3BvcnQgaGVpZ2h0IHVuaXRcbiAgICpcbiAgICogRm9yIGxlbmd0aCBpcyBpbnRlbmRlZCB0aGUgbWFpbiBheGlzIHJlbGF0aXZlIHRvIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlci48YnIgLz5cbiAgICogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBwbGFjZW1lbnQgaXMgYHRvcGAgb3IgYGJvdHRvbWAsIHRoZSBsZW5ndGggd2lsbCBiZSB0aGVcbiAgICogYHdpZHRoYC4gSW4gY2FzZSBvZiBgbGVmdGAgb3IgYHJpZ2h0YCwgaXQgd2lsbCBiZSB0aGUgaGVpZ2h0LlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gTW9yZSBvbiB0aGlzIFtyZWFkaW5nIHRoaXMgaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9GZXpWcmFzdGEvcG9wcGVyLmpzL2lzc3Vlcy8zNzMpXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEFuIHNjZW5hcmlvIGV4aXN0cyB3aGVyZSB0aGUgcmVmZXJlbmNlIGl0c2VsZiBpcyBub3Qgd2l0aGluIHRoZSBib3VuZGFyaWVzLjxiciAvPlxuICAgKiBXZSBjYW4gc2F5IGl0IGhhcyBcImVzY2FwZWQgdGhlIGJvdW5kYXJpZXNcIiDigJQgb3IganVzdCBcImVzY2FwZWRcIi48YnIgLz5cbiAgICogSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHBvcHBlciBzaG91bGQgZWl0aGVyOlxuICAgKlxuICAgKiAtIGRldGFjaCBmcm9tIHRoZSByZWZlcmVuY2UgYW5kIHJlbWFpbiBcInRyYXBwZWRcIiBpbiB0aGUgYm91bmRhcmllcywgb3JcbiAgICogLSBpZiBpdCBzaG91bGQgaWdub3JlIHRoZSBib3VuZGFyeSBhbmQgXCJlc2NhcGUgd2l0aCBpdHMgcmVmZXJlbmNlXCJcbiAgICpcbiAgICogV2hlbiBgZXNjYXBlV2l0aFJlZmVyZW5jZWAgaXMgc2V0IHRvYHRydWVgIGFuZCByZWZlcmVuY2UgaXMgY29tcGxldGVseVxuICAgKiBvdXRzaWRlIGl0cyBib3VuZGFyaWVzLCB0aGUgcG9wcGVyIHdpbGwgb3ZlcmZsb3cgKG9yIGNvbXBsZXRlbHkgbGVhdmUpXG4gICAqIHRoZSBib3VuZGFyaWVzIGluIG9yZGVyIHRvIHJlbWFpbiBhdHRhY2hlZCB0byB0aGUgZWRnZSBvZiB0aGUgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTMwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogcHJldmVudE92ZXJmbG93LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtBcnJheX0gW3ByaW9yaXR5PVsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ11dXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIgdGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgaGFzIGFsd2F5cyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLCBjYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNob3RoZXJzXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXhwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gYXNzdXJlIGl0IHRvIHBvaW50IHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcywgeW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkLlxuICAgKlxuICAgKiBJdCBoYXMgbm8gZWZmZWN0IGlmIG5vIGBhcnJvd0VsZW1lbnRgIGlzIHByb3ZpZGVkLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXJyb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA1MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcnJvdyxcbiAgICAvKiogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gZWxlbWVudD0nW3gtYXJyb3ddJyAtIFNlbGVjdG9yIG9yIG5vZGUgdXNlZCBhcyBhcnJvdyAqL1xuICAgIGVsZW1lbnQ6ICdbeC1hcnJvd10nXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50IHdoZW4gaXQgc3RhcnRzIHRvIG92ZXJsYXAgaXRzXG4gICAqIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqXG4gICAqICoqTk9URToqKiB0aGlzIG1vZGlmaWVyIHdpbGwgaW50ZXJydXB0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZSBhbmQgd2lsbFxuICAgKiByZXN0YXJ0IGl0IGlmIGl0IGRldGVjdHMgdGhlIG5lZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgZmxpcDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj02MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDYwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGZsaXAsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xBcnJheX0gYmVoYXZpb3I9J2ZsaXAnXG4gICAgICogVGhlIGJlaGF2aW9yIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQuIEl0IGNhbiBiZSBvbmUgb2ZcbiAgICAgKiBgZmxpcGAsIGBjbG9ja3dpc2VgLCBgY291bnRlcmNsb2Nrd2lzZWAgb3IgYW4gYXJyYXkgd2l0aCBhIGxpc3Qgb2YgdmFsaWRcbiAgICAgKiBwbGFjZW1lbnRzICh3aXRoIG9wdGlvbmFsIHZhcmlhdGlvbnMpLlxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLFxuICAgICAqIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBrZWVwVG9nZXRoZXIgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBzdHlsZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGVsZW1lbnQgdG8gZ2V0c1xuICAgKiBwcm9wZXJseSBwb3NpdGlvbmVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtb2RpZmllciB3aWxsIG5vdCB0b3VjaCB0aGUgRE9NLCBpdCBqdXN0IHByZXBhcmVzIHRoZSBzdHlsZXNcbiAgICogc28gdGhhdCBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgY2FuIGFwcGx5IGl0LiBUaGlzIHNlcGFyYXRpb24gaXMgdXNlZnVsXG4gICAqIGluIGNhc2UgeW91IG5lZWQgdG8gcmVwbGFjZSBgYXBwbHlTdHlsZWAgd2l0aCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtb2RpZmllciBoYXMgYDg1MGAgYXMgYG9yZGVyYCB2YWx1ZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgUG9wcGVyLmpzLiBFeHBlY3QgdGhlIG1vZGlmaWVycyBvcmRlcmluZyBtZXRob2RcbiAgICogdG8gY2hhbmdlIGluIGZ1dHVyZSBtYWpvciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGNvbXB1dGVTdHlsZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04NTAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDg1MCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGNvbXB1dGVTdHlsZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM2QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtzdHJpbmd9IFt4PSdib3R0b20nXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWCBheGlzIChgYm90dG9tYCBvciBgdG9wYCkuIEFLQSBYIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYGJvdHRvbWBcbiAgICAgKi9cbiAgICB4OiAnYm90dG9tJyxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nbGVmdCddXG4gICAgICogV2hlcmUgdG8gYW5jaG9yIHRoZSBZIGF4aXMgKGBsZWZ0YCBvciBgcmlnaHRgKS4gQUtBIFkgb2Zmc2V0IG9yaWdpbi5cbiAgICAgKiBDaGFuZ2UgdGhpcyBpZiB5b3VyIHBvcHBlciBzaG91bGQgZ3JvdyBpbiBhIGRpcmVjdGlvbiBkaWZmZXJlbnQgZnJvbSBgcmlnaHRgXG4gICAgICovXG4gICAgeTogJ3JpZ2h0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjb21wdXRlZCBzdHlsZXMgdG8gdGhlIHBvcHBlciBlbGVtZW50LlxuICAgKlxuICAgKiBBbGwgdGhlIERPTSBtYW5pcHVsYXRpb25zIGFyZSBsaW1pdGVkIHRvIHRoaXMgbW9kaWZpZXIuIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VcbiAgICogeW91IHdhbnQgdG8gaW50ZWdyYXRlIFBvcHBlci5qcyBpbnNpZGUgYSBmcmFtZXdvcmsgb3IgdmlldyBsaWJyYXJ5IGFuZCB5b3VcbiAgICogd2FudCB0byBkZWxlZ2F0ZSBhbGwgdGhlIERPTSBtYW5pcHVsYXRpb25zIHRvIGl0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgaWYgeW91IGRpc2FibGUgdGhpcyBtb2RpZmllciwgeW91IG11c3QgbWFrZSBzdXJlIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiBoYXMgaXRzIHBvc2l0aW9uIHNldCB0byBgYWJzb2x1dGVgIGJlZm9yZSBQb3BwZXIuanMgY2FuIGRvIGl0cyB3b3JrIVxuICAgKlxuICAgKiBKdXN0IGRpc2FibGUgdGhpcyBtb2RpZmllciBhbmQgZGVmaW5lIHlvdSBvd24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBhcHBseVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTkwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogOTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXBwbHlTdHlsZSxcbiAgICAvKiogQHByb3Age0Z1bmN0aW9ufSAqL1xuICAgIG9uTG9hZDogYXBwbHlTdHlsZU9uTG9hZCxcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuMTAuMCwgdGhlIHByb3BlcnR5IG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyXG4gICAgICogQHByb3Age0Jvb2xlYW59IGdwdUFjY2VsZXJhdGlvbj10cnVlXG4gICAgICogSWYgdHJ1ZSwgaXQgdXNlcyB0aGUgQ1NTIDNkIHRyYW5zZm9ybWF0aW9uIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gICAgICogT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgYHRvcGAgYW5kIGBsZWZ0YCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdW5kZWZpbmVkXG4gIH1cbn07XG5cbi8qKlxuICogVGhlIGBkYXRhT2JqZWN0YCBpcyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGluZm9ybWF0aW9ucyB1c2VkIGJ5IFBvcHBlci5qc1xuICogdGhpcyBvYmplY3QgZ2V0IHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXIuXG4gKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fSBkYXRhLmFycm93RWxlbWVudCBOb2RlIHVzZWQgYXMgYXJyb3cgYnkgYXJyb3cgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLnN0eWxlcyBBbnkgQ1NTIHByb3BlcnR5IGRlZmluZWQgaGVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciwgaXQgZXhwZWN0cyB0aGUgSmF2YVNjcmlwdCBub21lbmNsYXR1cmUgKGVnLiBgbWFyZ2luQm90dG9tYClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmFycm93U3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGFycm93LCBpdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucG9wcGVyIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLmFycm93XSBgdG9wYCBhbmQgYGxlZnRgIG9mZnNldHMsIG9ubHkgb25lIG9mIHRoZW0gd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSAwXG4gKi9cblxuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgcHJvdmlkZWQgdG8gUG9wcGVyLmpzIGNvbnN0cnVjdG9yLjxiciAvPlxuICogVGhlc2UgY2FuIGJlIG92ZXJyaWRlbiB1c2luZyB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IG9mIFBvcHBlci5qcy48YnIgLz5cbiAqIFRvIG92ZXJyaWRlIGFuIG9wdGlvbiwgc2ltcGx5IHBhc3MgYXMgM3JkIGFyZ3VtZW50IGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lXG4gKiBzdHJ1Y3R1cmUgb2YgdGhpcyBvYmplY3QsIGV4YW1wbGU6XG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmLCBwb3AsIHtcbiAqICAgbW9kaWZpZXJzOiB7XG4gKiAgICAgcHJldmVudE92ZXJmbG93OiB7IGVuYWJsZWQ6IGZhbHNlIH1cbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogQHR5cGUge09iamVjdH1cbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIERlZmF1bHRzID0ge1xuICAvKipcbiAgICogUG9wcGVyJ3MgcGxhY2VtZW50XG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkXG4gICAqIEBwcm9wIHtCb29sZWFufSBldmVudHNFbmFibGVkPXRydWVcbiAgICovXG4gIGV2ZW50c0VuYWJsZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlblxuICAgKiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICogQHByb3Age0Jvb2xlYW59IHJlbW92ZU9uRGVzdHJveT1mYWxzZVxuICAgKi9cbiAgcmVtb3ZlT25EZXN0cm95OiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyBjcmVhdGVkLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvbkNyZWF0ZX1cbiAgICovXG4gIG9uQ3JlYXRlOiBmdW5jdGlvbiBvbkNyZWF0ZSgpIHt9LFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgcG9wcGVyIGlzIHVwZGF0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IGNhbGxlZFxuICAgKiBvbiB0aGUgaW5pdGlhbGl6YXRpb24vY3JlYXRpb24gb2YgdGhlIHBvcHBlciwgYnV0IG9ubHkgb24gc3Vic2VxdWVudFxuICAgKiB1cGRhdGVzLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvblVwZGF0ZX1cbiAgICovXG4gIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZSgpIHt9LFxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG1vZGlmaWVycyB1c2VkIHRvIG1vZGlmeSB0aGUgb2Zmc2V0cyBiZWZvcmUgdGhleSBhcmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLlxuICAgKiBUaGV5IHByb3ZpZGUgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIFBvcHBlci5qc1xuICAgKiBAcHJvcCB7bW9kaWZpZXJzfVxuICAgKi9cbiAgbW9kaWZpZXJzOiBtb2RpZmllcnNcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIG9uQ3JlYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZVxuICogQHBhcmFtIHtkYXRhT2JqZWN0fSBkYXRhXG4gKi9cblxuLy8gVXRpbHNcbi8vIE1ldGhvZHNcbnZhciBQb3BwZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqIEBjbGFzcyBQb3BwZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RlZmF1bHRzXSgjZGVmYXVsdHMpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIFBvcHBlci5qcyBpbnN0YW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuXG4gICAgdGhpcy5zY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgICB9O1xuXG4gICAgLy8gbWFrZSB1cGRhdGUoKSBkZWJvdW5jZWQsIHNvIHRoYXQgaXQgb25seSBydW5zIGF0IG1vc3Qgb25jZS1wZXItdGlja1xuICAgIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICAvLyB3aXRoIHt9IHdlIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgb3B0aW9ucyBpbnNpZGUgaXRcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgIC8vIGluaXQgc3RhdGVcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNEZXN0cm95ZWQ6IGZhbHNlLFxuICAgICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFBhcmVudHM6IFtdXG4gICAgfTtcblxuICAgIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlICYmIHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gICAgdGhpcy5wb3BwZXIgPSBwb3BwZXIgJiYgcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAgIC8vIERlZXAgbWVyZ2UgbW9kaWZpZXJzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0ge307XG4gICAgT2JqZWN0LmtleXMoX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0gPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVyc1tuYW1lXSB8fCB7fSwgb3B0aW9ucy5tb2RpZmllcnMgPyBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA6IHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZmFjdG9yaW5nIG1vZGlmaWVycycgbGlzdCAoT2JqZWN0ID0+IEFycmF5KVxuICAgIHRoaXMubW9kaWZpZXJzID0gT2JqZWN0LmtleXModGhpcy5vcHRpb25zLm1vZGlmaWVycykubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9LCBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSk7XG4gICAgfSlcbiAgICAvLyBzb3J0IHRoZSBtb2RpZmllcnMgYnkgb3JkZXJcbiAgICAuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyO1xuICAgIH0pO1xuXG4gICAgLy8gbW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSB3aGVuIFBvcHBlci5qcyBnZXQgaW5pdGVkXG4gICAgLy8gc3VjaCBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIG9mIGl0cyBtb2RpZmllclxuICAgIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAgIC8vIEJFIEFXQVJFOiBkb24ndCBhZGQgb3B0aW9ucyB0byBgb3B0aW9ucy5tb2RpZmllcnMubmFtZWAgYnV0IHRvIGBtb2RpZmllck9wdGlvbnNgIVxuICAgIHRoaXMubW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyT3B0aW9ucykge1xuICAgICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgICAgbW9kaWZpZXJPcHRpb25zLm9uTG9hZChfdGhpcy5yZWZlcmVuY2UsIF90aGlzLnBvcHBlciwgX3RoaXMub3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBfdGhpcy5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgICBpZiAoZXZlbnRzRW5hYmxlZCkge1xuICAgICAgLy8gc2V0dXAgZXZlbnQgbGlzdGVuZXJzLCB0aGV5IHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0ZSB0aGUgcG9zaXRpb24gaW4gc3BlY2lmaWMgc2l0dWF0aW9uc1xuICAgICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGV2ZW50c0VuYWJsZWQ7XG4gIH1cblxuICAvLyBXZSBjYW4ndCB1c2UgY2xhc3MgcHJvcGVydGllcyBiZWNhdXNlIHRoZXkgZG9uJ3QgZ2V0IGxpc3RlZCBpbiB0aGVcbiAgLy8gY2xhc3MgcHJvdG90eXBlIGFuZCBicmVhayBzdHVmZiBsaWtlIFNpbm9uIHN0dWJzXG5cblxuICBjcmVhdGVDbGFzcyhQb3BwZXIsIFt7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlJCQxKCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95JCQxKCkge1xuICAgICAgcmV0dXJuIGRlc3Ryb3kuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdlbmFibGVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGVuYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGRpc2FibGVFdmVudExpc3RlbmVycy5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlIGFuIHVwZGF0ZSwgaXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZVxuICAgICAqIEBtZXRob2Qgc2NoZWR1bGVVcGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY3VzdG9tIG1vZGlmaWVycy5cbiAgICAgKiBTdGFydGluZyBmcm9tIHZlcnNpb24gMS43LCB0aGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgb25seSBpZiB5b3VcbiAgICAgKiBpbmNsdWRlIGBwb3BwZXItdXRpbHMuanNgIGJlZm9yZSBgcG9wcGVyLmpzYC5cbiAgICAgKlxuICAgICAqICoqREVQUkVDQVRJT04qKjogVGhpcyB3YXkgdG8gYWNjZXNzIFBvcHBlclV0aWxzIGlzIGRlcHJlY2F0ZWRcbiAgICAgKiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYyISBVc2UgdGhlIFBvcHBlclV0aWxzIG1vZHVsZSBkaXJlY3RseSBpbnN0ZWFkLlxuICAgICAqIER1ZSB0byB0aGUgaGlnaCBpbnN0YWJpbGl0eSBvZiB0aGUgbWV0aG9kcyBjb250YWluZWQgaW4gVXRpbHMsIHdlIGNhbid0XG4gICAgICogZ3VhcmFudGVlIHRoZW0gdG8gZm9sbG93IHNlbXZlci4gVXNlIHRoZW0gYXQgeW91ciBvd24gcmlzayFcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS44XG4gICAgICogQG1lbWJlciBVdGlsc1xuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cblxuICB9XSk7XG4gIHJldHVybiBQb3BwZXI7XG59KCk7XG5cbi8qKlxuICogVGhlIGByZWZlcmVuY2VPYmplY3RgIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggUG9wcGVyLmpzXG4gKiBhbmQgbGV0cyB5b3UgdXNlIGl0IGFzIHJlcGxhY2VtZW50IG9mIGEgcmVhbCBET00gbm9kZS48YnIgLz5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHBvc2l0aW9uIGEgcG9wcGVyIHJlbGF0aXZlbHkgdG8gYSBzZXQgb2YgY29vcmRpbmF0ZXNcbiAqIGluIGNhc2UgeW91IGRvbid0IGhhdmUgYSBET00gbm9kZSB0byB1c2UgYXMgcmVmZXJlbmNlLlxuICpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWZlcmVuY2VPYmplY3QsIHBvcHBlck5vZGUpO1xuICogYGBgXG4gKlxuICogTkI6IFRoaXMgZmVhdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTBcbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBEZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgUG9wcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLmpzLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3\n"); +/******/ ({ -/***/ }), -/* 4 */ +/***/ 11: /***/ (function(module, exports) { -eval("module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xyXG5cdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcclxuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xyXG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kdWxlO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4\n"); +eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBIiwiZmlsZSI6IjExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11\n"); /***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { -eval("/*!\n * Bootstrap v4.1.2 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n true ? factory(exports, __webpack_require__(1), __webpack_require__(3)) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (factory((global.bootstrap = {}),global.jQuery,global.Popper));\n}(this, (function (exports,$,Popper) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Util = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($$$1(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $$$1(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $$$1.fn.emulateTransitionEnd = transitionEndEmulator;\n $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $$$1(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $$$1(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Alert = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'alert';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $$$1(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $$$1.Event(Event.CLOSE);\n $$$1(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $$$1(element).removeClass(ClassName.SHOW);\n\n if (!$$$1(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $$$1(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $$$1(element).detach().trigger(Event.CLOSED).remove();\n }; // Static\n\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $$$1(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Alert._jQueryInterface;\n $$$1.fn[NAME].Constructor = Alert;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Button = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'button';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector.ACTIVE);\n\n if (activeElement) {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName.ACTIVE);\n $$$1(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $$$1(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Static\n\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$$$1(button).hasClass(ClassName.BUTTON)) {\n button = $$$1(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($$$1(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $$$1(event.target).closest(Selector.BUTTON)[0];\n $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Button._jQueryInterface;\n $$$1.fn[NAME].Constructor = Button;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Carousel = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'carousel';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this._config = this._getConfig(config);\n this._element = $$$1(element)[0];\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $$$1(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $$$1(this._element).off(EVENT_KEY);\n $$$1.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $$$1(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $$$1(this._element).on(Event.TOUCHEND, function () {\n _this2.pause();\n\n if (_this2.touchTimeout) {\n clearTimeout(_this2.touchTimeout);\n }\n\n _this2.touchTimeout = setTimeout(function (event) {\n return _this2.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n });\n }\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));\n\n var slideEvent = $$$1.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $$$1(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));\n $$$1(indicators).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $$$1(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $$$1.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($$$1(this._element).hasClass(ClassName.SLIDE)) {\n $$$1(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $$$1(activeElement).addClass(directionalClassName);\n $$$1(nextElement).addClass(directionalClassName);\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $$$1(activeElement).one(Util.TRANSITION_END, function () {\n $$$1(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $$$1(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this3._isSliding = false;\n setTimeout(function () {\n return $$$1(_this3._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n $$$1(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $$$1(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n }; // Static\n\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $$$1(selector)[0];\n\n if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($$$1(target), config);\n\n if (slideIndex) {\n $$$1(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $$$1(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Carousel._jQueryInterface;\n $$$1.fn[NAME].Constructor = Carousel;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Collapse = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'collapse';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = $$$1.makeArray(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($$$1(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {\n return elem.getAttribute('data-parent') === _this._config.parent;\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $$$1(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $$$1.Event(Event.SHOW);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $$$1(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $$$1(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $$$1([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent = null;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $$$1(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n var isOpen = $$$1(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length) {\n $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n }\n }; // Static\n\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $$$1(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $$$1(selectors).each(function () {\n var $target = $$$1(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Collapse._jQueryInterface;\n $$$1.fn[NAME].Constructor = Collapse;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Dropdown = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'dropdown';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.dropdown';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $$$1(this._menu).hasClass(ClassName.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $$$1.Event(Event.SHOW, relatedTarget);\n $$$1(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $$$1(parent).addClass(ClassName.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $$$1(this._menu).toggleClass(ClassName.SHOW);\n $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._element).off(EVENT_KEY);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Private\n\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $$$1(this._element).on(Event.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $$$1(this._element.parentNode);\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $$$1(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var _this2 = this;\n\n var offsetConf = {};\n\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});\n return data;\n };\n } else {\n offsetConf.offset = this._config.offset;\n }\n\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n }; // Static\n\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $$$1(toggles[i]).data(DATA_KEY);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$$$1(parent).hasClass(ClassName.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);\n $$$1(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $$$1(dropdownMenu).removeClass(ClassName.SHOW);\n $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n }; // eslint-disable-next-line complexity\n\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $$$1(parent).hasClass(ClassName.SHOW);\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = parent.querySelector(Selector.DATA_TOGGLE);\n $$$1(toggle).trigger('focus');\n }\n\n $$$1(this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($$$1(this), 'toggle');\n }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Dropdown._jQueryInterface;\n $$$1.fn[NAME].Constructor = Dropdown;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Dropdown._jQueryInterface;\n };\n\n return Dropdown;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Modal = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'modal';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isTransitioning || this._isShown) {\n return;\n }\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $$$1(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n $$$1(document.body).addClass(ClassName.OPEN);\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($$$1(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (this._isTransitioning || !this._isShown) {\n return;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(document).off(Event.FOCUSIN);\n $$$1(this._element).removeClass(ClassName.SHOW);\n $$$1(this._element).off(Event.CLICK_DISMISS);\n $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.scrollTop = 0;\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $$$1(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $$$1(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $$$1(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $$$1(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $$$1(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $$$1(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $$$1(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $$$1(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $$$1(this._backdrop).appendTo(document.body);\n $$$1(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $$$1(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $$$1(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n }; // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding\n\n $$$1(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $$$1(element).css('padding-right');\n $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $$$1(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $$$1(element).css('margin-right');\n $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $$$1(document.body).css('padding-right');\n $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n $$$1(fixedContent).each(function (index, element) {\n var padding = $$$1(element).data('padding-right');\n $$$1(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector.STICKY_CONTENT));\n $$$1(elements).each(function (index, element) {\n var margin = $$$1(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $$$1(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $$$1(document.body).data('padding-right');\n $$$1(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }; // Static\n\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $$$1(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($$$1(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($$$1(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Modal._jQueryInterface;\n $$$1.fn[NAME].Constructor = Modal;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tooltip = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $$$1.removeData(this.element, this.constructor.DATA_KEY);\n $$$1(this.element).off(this.constructor.EVENT_KEY);\n $$$1(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $$$1(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($$$1(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $$$1.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $$$1(this.element).trigger(showEvent);\n var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $$$1(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container);\n $$$1(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $$$1(tip).appendTo(container);\n }\n\n $$$1(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $$$1.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $$$1(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());\n $$$1(tip).removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$$$1(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($$$1(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Tooltip._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tooltip;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Popover = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'popover';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n }; // Private\n\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n }; // Static\n\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Popover._jQueryInterface;\n $$$1.fn[NAME].Constructor = Popover;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var ScrollSpy = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'scrollspy';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $$$1(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $$$1(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $$$1(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n queries = queries.map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n });\n var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $$$1(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n var nodes = [].slice.call(document.querySelectorAll(this._selector));\n $$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n }; // Static\n\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $$$1(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = ScrollSpy._jQueryInterface;\n $$$1.fn[NAME].Constructor = ScrollSpy;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tab = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tab';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $$$1.makeArray($$$1(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $$$1(previous).trigger(hideEvent);\n }\n\n $$$1(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $$$1.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $$$1(previous).trigger(hiddenEvent);\n $$$1(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements;\n\n if (container.nodeName === 'UL') {\n activeElements = $$$1(container).find(Selector.ACTIVE_UL);\n } else {\n activeElements = $$$1(container).children(Selector.ACTIVE);\n }\n\n var active = activeElements[0];\n var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $$$1(active).removeClass(ClassName.SHOW + \" \" + ClassName.ACTIVE);\n var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $$$1(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $$$1(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n $$$1(element).addClass(ClassName.SHOW);\n\n if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));\n $$$1(dropdownToggleList).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n }; // Static\n\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($$$1(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Tab._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tab;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n (function ($$$1) {\n if (typeof $$$1 === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $$$1.fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n })($);\n\n exports.Util = Util;\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Tooltip = Tooltip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzPzJiNzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxDQUFDLHFDQUFxQzs7QUFFdEM7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQsU0FBUzs7QUFFVDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQSxxRUFBcUU7O0FBRXJFO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEMsaUNBQWlDOztBQUVqQyxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOzs7QUFHUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBLHdDQUF3Qzs7QUFFeEM7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLFNBQVM7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxTQUFTO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBOztBQUVBO0FB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UjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRzs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOztBQUVYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLGdGQUFnRjs7QUFFeEg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRFQUE0RTs7QUFFNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87OztBQUdQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTOztBQUVUO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMseUdBQXlHOztBQUUxSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsc0NBQXNDO0FBQ3RDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLE9BQU87OztBQUdQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQyw2REFBNkQ7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsa0NBQWtDLEtBQUs7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdEQUFnRDs7O0FBR2hEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBLGtJQUFrSTs7QUFFbEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsS0FBSztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsY0FBYzs7QUFFOUQsQ0FBQztBQUNEIiwiZmlsZSI6IjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAgKiBCb290c3RyYXAgdjQuMS4yIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMTggVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdqcXVlcnknKSwgcmVxdWlyZSgncG9wcGVyLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cycsICdqcXVlcnknLCAncG9wcGVyLmpzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5ib290c3RyYXAgPSB7fSksZ2xvYmFsLmpRdWVyeSxnbG9iYWwuUG9wcGVyKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cywkLFBvcHBlcikgeyAndXNlIHN0cmljdCc7XG5cbiAgJCA9ICQgJiYgJC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gJFsnZGVmYXVsdCddIDogJDtcbiAgUG9wcGVyID0gUG9wcGVyICYmIFBvcHBlci5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gUG9wcGVyWydkZWZhdWx0J10gOiBQb3BwZXI7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgVXRpbCA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogUHJpdmF0ZSBUcmFuc2l0aW9uRW5kIEhlbHBlcnNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG4gICAgdmFyIE1BWF9VSUQgPSAxMDAwMDAwO1xuICAgIHZhciBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7IC8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcblxuICAgIGZ1bmN0aW9uIHRvVHlwZShvYmopIHtcbiAgICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3BlY2lhbFRyYW5zaXRpb25FbmRFdmVudCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJpbmRUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgICAgZGVsZWdhdGVUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJCQkMShldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmRFbXVsYXRvcihkdXJhdGlvbikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICAgJCQkMSh0aGlzKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKF90aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSwgZHVyYXRpb24pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbkVuZFN1cHBvcnQoKSB7XG4gICAgICAkJCQxLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yO1xuICAgICAgJCQkMS5ldmVudC5zcGVjaWFsW1V0aWwuVFJBTlNJVElPTl9FTkRdID0gZ2V0U3BlY2lhbFRyYW5zaXRpb25FbmRFdmVudCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIFB1YmxpYyBVdGlsIEFwaVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgIHZhciBVdGlsID0ge1xuICAgICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgICAgZ2V0VUlEOiBmdW5jdGlvbiBnZXRVSUQocHJlZml4KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgIHByZWZpeCArPSB+fihNYXRoLnJhbmRvbSgpICogTUFYX1VJRCk7IC8vIFwifn5cIiBhY3RzIGxpa2UgYSBmYXN0ZXIgTWF0aC5mbG9vcigpIGhlcmVcbiAgICAgICAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG5cbiAgICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICAgIH0sXG4gICAgICBnZXRTZWxlY3RvckZyb21FbGVtZW50OiBmdW5jdGlvbiBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgICAgICAgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSAkJCQxKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICAgICAgICB2YXIgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBwYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7IC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcblxuICAgICAgICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuXG5cbiAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbiAgICAgIH0sXG4gICAgICByZWZsb3c6IGZ1bmN0aW9uIHJlZmxvdyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgIH0sXG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJpZ2dlclRyYW5zaXRpb25FbmQoZWxlbWVudCkge1xuICAgICAgICAkJCQxKGVsZW1lbnQpLnRyaWdnZXIoVFJBTlNJVElPTl9FTkQpO1xuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IFJlbW92ZSBpbiB2NVxuICAgICAgc3VwcG9ydHNUcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBzdXBwb3J0c1RyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKFRSQU5TSVRJT05fRU5EKTtcbiAgICAgIH0sXG4gICAgICBpc0VsZW1lbnQ6IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZTtcbiAgICAgIH0sXG4gICAgICB0eXBlQ2hlY2tDb25maWc6IGZ1bmN0aW9uIHR5cGVDaGVja0NvbmZpZyhjb21wb25lbnROYW1lLCBjb25maWcsIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWdUeXBlcywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IGNvbmZpZ1R5cGVzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgICB2YXIgdmFsdWVUeXBlID0gdmFsdWUgJiYgVXRpbC5pc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpICsgXCI6IFwiICsgKFwiT3B0aW9uIFxcXCJcIiArIHByb3BlcnR5ICsgXCJcXFwiIHByb3ZpZGVkIHR5cGUgXFxcIlwiICsgdmFsdWVUeXBlICsgXCJcXFwiIFwiKSArIChcImJ1dCBleHBlY3RlZCB0eXBlIFxcXCJcIiArIGV4cGVjdGVkVHlwZXMgKyBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCk7XG4gICAgcmV0dXJuIFV0aWw7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogYWxlcnQuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIEFsZXJ0ID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdhbGVydCc7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy5hbGVydCc7XG4gICAgdmFyIEVWRU5UX0tFWSA9IFwiLlwiICsgREFUQV9LRVk7XG4gICAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG4gICAgfTtcbiAgICB2YXIgRXZlbnQgPSB7XG4gICAgICBDTE9TRTogXCJjbG9zZVwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xPU0VEOiBcImNsb3NlZFwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWVxuICAgIH07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIEFMRVJUOiAnYWxlcnQnLFxuICAgICAgRkFERTogJ2ZhZGUnLFxuICAgICAgU0hPVzogJ3Nob3cnXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgQWxlcnQgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBBbGVydChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IEFsZXJ0LnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8uY2xvc2UgPSBmdW5jdGlvbiBjbG9zZShlbGVtZW50KSB7XG4gICAgICAgIHZhciByb290RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICByb290RWxlbWVudCA9IHRoaXMuX2dldFJvb3RFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChjdXN0b21FdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbW92ZUVsZW1lbnQocm9vdEVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldFJvb3RFbGVtZW50ID0gZnVuY3Rpb24gX2dldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB2YXIgcGFyZW50ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgIHBhcmVudCA9ICQkJDEoZWxlbWVudCkuY2xvc2VzdChcIi5cIiArIENsYXNzTmFtZS5BTEVSVClbMF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl90cmlnZ2VyQ2xvc2VFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyQ2xvc2VFdmVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBjbG9zZUV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5DTE9TRSk7XG4gICAgICAgICQkJDEoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIGNsb3NlRXZlbnQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgJCQkMShlbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG5cbiAgICAgICAgaWYgKCEkJCQxKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICQkJDEoZWxlbWVudCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgICB9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9kZXN0cm95RWxlbWVudCA9IGZ1bmN0aW9uIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgICQkJDEoZWxlbWVudCkuZGV0YWNoKCkudHJpZ2dlcihFdmVudC5DTE9TRUQpLnJlbW92ZSgpO1xuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgQWxlcnQuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciAkZWxlbWVudCA9ICQkJDEodGhpcyk7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKTtcbiAgICAgICAgICAgICRlbGVtZW50LmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgQWxlcnQuX2hhbmRsZURpc21pc3MgPSBmdW5jdGlvbiBfaGFuZGxlRGlzbWlzcyhhbGVydEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWxlcnRJbnN0YW5jZS5jbG9zZSh0aGlzKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhBbGVydCwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIEFsZXJ0O1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxKGRvY3VtZW50KS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuRElTTUlTUywgQWxlcnQuX2hhbmRsZURpc21pc3MobmV3IEFsZXJ0KCkpKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBBbGVydC5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBBbGVydDtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEFsZXJ0O1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IGJ1dHRvbi5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgQnV0dG9uID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdidXR0b24nO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuYnV0dG9uJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gICAgdmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQkJDEuZm5bTkFNRV07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIEFDVElWRTogJ2FjdGl2ZScsXG4gICAgICBCVVRUT046ICdidG4nLFxuICAgICAgRk9DVVM6ICdmb2N1cydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERBVEFfVE9HR0xFX0NBUlJPVDogJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLFxuICAgICAgREFUQV9UT0dHTEU6ICdbZGF0YS10b2dnbGU9XCJidXR0b25zXCJdJyxcbiAgICAgIElOUFVUOiAnaW5wdXQnLFxuICAgICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgICBCVVRUT046ICcuYnRuJ1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWSxcbiAgICAgIEZPQ1VTX0JMVVJfREFUQV9BUEk6IFwiZm9jdXNcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWSArIFwiIFwiICsgKFwiYmx1clwiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZKVxuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIEJ1dHRvbiA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIEJ1dHRvbihlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IEJ1dHRvbi5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgICAgdmFyIHRyaWdnZXJDaGFuZ2VFdmVudCA9IHRydWU7XG4gICAgICAgIHZhciBhZGRBcmlhUHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHZhciByb290RWxlbWVudCA9ICQkJDEodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3Rvci5EQVRBX1RPR0dMRSlbMF07XG5cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLklOUFVUKTtcblxuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQgJiYgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lLkFDVElWRSkpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuQUNUSVZFKTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAkJCQxKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IGlucHV0LmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSB8fCByb290RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgICAgICAkJCQxKGlucHV0KS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIGFkZEFyaWFQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZEFyaWFQcmVzc2VkKSB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IEJ1dHRvbih0aGlzKTtcbiAgICAgICAgICAgICQkJDEodGhpcykuZGF0YShEQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfY3JlYXRlQ2xhc3MoQnV0dG9uLCBudWxsLCBbe1xuICAgICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gQnV0dG9uO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxKGRvY3VtZW50KS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEVfQ0FSUk9ULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgYnV0dG9uID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBpZiAoISQkJDEoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUuQlVUVE9OKSkge1xuICAgICAgICBidXR0b24gPSAkJCQxKGJ1dHRvbikuY2xvc2VzdChTZWxlY3Rvci5CVVRUT04pO1xuICAgICAgfVxuXG4gICAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZS5jYWxsKCQkJDEoYnV0dG9uKSwgJ3RvZ2dsZScpO1xuICAgIH0pLm9uKEV2ZW50LkZPQ1VTX0JMVVJfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgYnV0dG9uID0gJCQkMShldmVudC50YXJnZXQpLmNsb3Nlc3QoU2VsZWN0b3IuQlVUVE9OKVswXTtcbiAgICAgICQkJDEoYnV0dG9uKS50b2dnbGVDbGFzcyhDbGFzc05hbWUuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gICAgJCQkMS5mbltOQU1FXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBCdXR0b247XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gQnV0dG9uO1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IGNhcm91c2VsLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBDYXJvdXNlbCA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnY2Fyb3VzZWwnO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuY2Fyb3VzZWwnO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5cbiAgICB2YXIgQVJST1dfUklHSFRfS0VZQ09ERSA9IDM5OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciByaWdodCBhcnJvdyBrZXlcblxuICAgIHZhciBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwOyAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuICAgIHZhciBEZWZhdWx0ID0ge1xuICAgICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAgICBrZXlib2FyZDogdHJ1ZSxcbiAgICAgIHNsaWRlOiBmYWxzZSxcbiAgICAgIHBhdXNlOiAnaG92ZXInLFxuICAgICAgd3JhcDogdHJ1ZVxuICAgIH07XG4gICAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgICAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAgICAgIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gICAgICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICAgICAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICAgIHdyYXA6ICdib29sZWFuJ1xuICAgIH07XG4gICAgdmFyIERpcmVjdGlvbiA9IHtcbiAgICAgIE5FWFQ6ICduZXh0JyxcbiAgICAgIFBSRVY6ICdwcmV2JyxcbiAgICAgIExFRlQ6ICdsZWZ0JyxcbiAgICAgIFJJR0hUOiAncmlnaHQnXG4gICAgfTtcbiAgICB2YXIgRXZlbnQgPSB7XG4gICAgICBTTElERTogXCJzbGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgU0xJRDogXCJzbGlkXCIgKyBFVkVOVF9LRVksXG4gICAgICBLRVlET1dOOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZLFxuICAgICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVksXG4gICAgICBUT1VDSEVORDogXCJ0b3VjaGVuZFwiICsgRVZFTlRfS0VZLFxuICAgICAgTE9BRF9EQVRBX0FQSTogXCJsb2FkXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVksXG4gICAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gICAgfTtcbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgQ0FST1VTRUw6ICdjYXJvdXNlbCcsXG4gICAgICBBQ1RJVkU6ICdhY3RpdmUnLFxuICAgICAgU0xJREU6ICdzbGlkZScsXG4gICAgICBSSUdIVDogJ2Nhcm91c2VsLWl0ZW0tcmlnaHQnLFxuICAgICAgTEVGVDogJ2Nhcm91c2VsLWl0ZW0tbGVmdCcsXG4gICAgICBORVhUOiAnY2Fyb3VzZWwtaXRlbS1uZXh0JyxcbiAgICAgIFBSRVY6ICdjYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgICAgSVRFTTogJ2Nhcm91c2VsLWl0ZW0nXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICAgIEFDVElWRV9JVEVNOiAnLmFjdGl2ZS5jYXJvdXNlbC1pdGVtJyxcbiAgICAgIElURU06ICcuY2Fyb3VzZWwtaXRlbScsXG4gICAgICBORVhUX1BSRVY6ICcuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2JyxcbiAgICAgIElORElDQVRPUlM6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gICAgICBEQVRBX1NMSURFOiAnW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10nLFxuICAgICAgREFUQV9SSURFOiAnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJ1xuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIENhcm91c2VsID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gQ2Fyb3VzZWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSAkJCQxKGVsZW1lbnQpWzBdO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5JTkRJQ0FUT1JTKTtcblxuICAgICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8ubmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgICAgdGhpcy5fc2xpZGUoRGlyZWN0aW9uLk5FWFQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ubmV4dFdoZW5WaXNpYmxlID0gZnVuY3Rpb24gbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgICAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICAgICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgJCQkMSh0aGlzLl9lbGVtZW50KS5pcygnOnZpc2libGUnKSAmJiAkJCQxKHRoaXMuX2VsZW1lbnQpLmNzcygndmlzaWJpbGl0eScpICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ucHJldiA9IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgICAgdGhpcy5fc2xpZGUoRGlyZWN0aW9uLlBSRVYpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ucGF1c2UgPSBmdW5jdGlvbiBwYXVzZShldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5ORVhUX1BSRVYpKSB7XG4gICAgICAgICAgVXRpbC50cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jeWNsZSA9IGZ1bmN0aW9uIGN5Y2xlKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pbnRlcnZhbCAmJiAhdGhpcy5faXNQYXVzZWQpIHtcbiAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPyB0aGlzLm5leHRXaGVuVmlzaWJsZSA6IHRoaXMubmV4dCkuYmluZCh0aGlzKSwgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnRvID0gZnVuY3Rpb24gdG8oaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRV9JVEVNKTtcblxuICAgICAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID4gdGhpcy5faXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQuU0xJRCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgdGhpcy5fc2xpZGUoZGlyZWN0aW9uLCB0aGlzLl9pdGVtc1tpbmRleF0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9mZihFVkVOVF9LRVkpO1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzUGF1c2VkID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gbnVsbDtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldENvbmZpZyA9IGZ1bmN0aW9uIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub24oRXZlbnQuS0VZRE9XTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50Lk1PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5wYXVzZShldmVudCk7XG4gICAgICAgICAgfSkub24oRXZlbnQuTU9VU0VMRUFWRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG4gICAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LlRPVUNIRU5ELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5wYXVzZSgpO1xuXG4gICAgICAgICAgICAgIGlmIChfdGhpczIudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzMi50b3VjaFRpbWVvdXQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX3RoaXMyLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5jeWNsZShldmVudCk7XG4gICAgICAgICAgICAgIH0sIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyBfdGhpczIuX2NvbmZpZy5pbnRlcnZhbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fa2V5ZG93biA9IGZ1bmN0aW9uIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICBjYXNlIEFSUk9XX0xFRlRfS0VZQ09ERTpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBBUlJPV19SSUdIVF9LRVlDT0RFOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldEl0ZW1JbmRleCA9IGZ1bmN0aW9uIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlID8gW10uc2xpY2UuY2FsbChlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5JVEVNKSkgOiBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldEl0ZW1CeURpcmVjdGlvbiA9IGZ1bmN0aW9uIF9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHZhciBpc05leHREaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5ORVhUO1xuICAgICAgICB2YXIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdmFyIGxhc3RJdGVtSW5kZXggPSB0aGlzLl9pdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgICAgaWYgKGlzR29pbmdUb1dyYXAgJiYgIXRoaXMuX2NvbmZpZy53cmFwKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5QUkVWID8gLTEgOiAxO1xuICAgICAgICB2YXIgaXRlbUluZGV4ID0gKGFjdGl2ZUluZGV4ICsgZGVsdGEpICUgdGhpcy5faXRlbXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fdHJpZ2dlclNsaWRlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlclNsaWRlRXZlbnQocmVsYXRlZFRhcmdldCwgZXZlbnREaXJlY3Rpb25OYW1lKSB7XG4gICAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgICB2YXIgZnJvbUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5BQ1RJVkVfSVRFTSkpO1xuXG4gICAgICAgIHZhciBzbGlkZUV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TTElERSwge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXQsXG4gICAgICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgICAgIHRvOiB0YXJnZXRJbmRleFxuICAgICAgICB9KTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgICByZXR1cm4gc2xpZGVFdmVudDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGluZGljYXRvcnMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX2luZGljYXRvcnNFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuQUNUSVZFKSk7XG4gICAgICAgICAgJCQkMShpbmRpY2F0b3JzKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcblxuICAgICAgICAgIHZhciBuZXh0SW5kaWNhdG9yID0gdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQuY2hpbGRyZW5bdGhpcy5fZ2V0SXRlbUluZGV4KGVsZW1lbnQpXTtcblxuICAgICAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgICAkJCQxKG5leHRJbmRpY2F0b3IpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9zbGlkZSA9IGZ1bmN0aW9uIF9zbGlkZShkaXJlY3Rpb24sIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuQUNUSVZFX0lURU0pO1xuXG4gICAgICAgIHZhciBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdmFyIG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBhY3RpdmVFbGVtZW50ICYmIHRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbihkaXJlY3Rpb24sIGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KTtcblxuICAgICAgICB2YXIgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIHZhciBkaXJlY3Rpb25hbENsYXNzTmFtZTtcbiAgICAgICAgdmFyIG9yZGVyQ2xhc3NOYW1lO1xuICAgICAgICB2YXIgZXZlbnREaXJlY3Rpb25OYW1lO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBDbGFzc05hbWUuTEVGVDtcbiAgICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZS5ORVhUO1xuICAgICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5MRUZUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gQ2xhc3NOYW1lLlJJR0hUO1xuICAgICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lLlBSRVY7XG4gICAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLlJJR0hUO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRFbGVtZW50ICYmICQkJDEobmV4dEVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5BQ1RJVkUpKSB7XG4gICAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKTtcblxuICAgICAgICBpZiAoc2xpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBTb21lIHdlaXJkbmVzcyBpcyBoYXBwZW5pbmcsIHNvIHdlIGJhaWxcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgICAgICB2YXIgc2xpZEV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TTElELCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICgkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TTElERSkpIHtcbiAgICAgICAgICAkJCQxKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSk7XG4gICAgICAgICAgVXRpbC5yZWZsb3cobmV4dEVsZW1lbnQpO1xuICAgICAgICAgICQkJDEoYWN0aXZlRWxlbWVudCkuYWRkQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgICAgICQkJDEobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAkJCQxKGFjdGl2ZUVsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkJCQxKG5leHRFbGVtZW50KS5yZW1vdmVDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgICAgJCQkMShhY3RpdmVFbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQUNUSVZFICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSArIFwiIFwiICsgZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgICAgICAgX3RoaXMzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gJCQkMShfdGhpczMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJCQkMShhY3RpdmVFbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICAkJCQxKG5leHRFbGVtZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9ICQkJDEodGhpcykuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICQkJDEodGhpcykuZGF0YSgpKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIF9jb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGFjdGlvbiA9IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogX2NvbmZpZy5zbGlkZTtcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAgICQkJDEodGhpcykuZGF0YShEQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2FjdGlvbl0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2FjdGlvbl0oKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGRhdGEucGF1c2UoKTtcbiAgICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgQ2Fyb3VzZWwuX2RhdGFBcGlDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiBfZGF0YUFwaUNsaWNrSGFuZGxlcihldmVudCkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0YXJnZXQgPSAkJCQxKHNlbGVjdG9yKVswXTtcblxuICAgICAgICBpZiAoIXRhcmdldCB8fCAhJCQkMSh0YXJnZXQpLmhhc0NsYXNzKENsYXNzTmFtZS5DQVJPVVNFTCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgJCQkMSh0YXJnZXQpLmRhdGEoKSwgJCQkMSh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICAgIHZhciBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xpZGUtdG8nKTtcblxuICAgICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQkJDEodGFyZ2V0KSwgY29uZmlnKTtcblxuICAgICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAgICQkJDEodGFyZ2V0KS5kYXRhKERBVEFfS0VZKS50byhzbGlkZUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9O1xuXG4gICAgICBfY3JlYXRlQ2xhc3MoQ2Fyb3VzZWwsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBDYXJvdXNlbDtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMShkb2N1bWVudCkub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfU0xJREUsIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyKTtcbiAgICAkJCQxKHdpbmRvdykub24oRXZlbnQuTE9BRF9EQVRBX0FQSSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhcm91c2VscyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5EQVRBX1JJREUpKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhcm91c2Vscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgJGNhcm91c2VsID0gJCQkMShjYXJvdXNlbHNbaV0pO1xuXG4gICAgICAgIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkY2Fyb3VzZWwsICRjYXJvdXNlbC5kYXRhKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gICAgJCQkMS5mbltOQU1FXSA9IENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IENhcm91c2VsO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gQ2Fyb3VzZWw7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogY29sbGFwc2UuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdjb2xsYXBzZSc7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy5jb2xsYXBzZSc7XG4gICAgdmFyIEVWRU5UX0tFWSA9IFwiLlwiICsgREFUQV9LRVk7XG4gICAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBEZWZhdWx0ID0ge1xuICAgICAgdG9nZ2xlOiB0cnVlLFxuICAgICAgcGFyZW50OiAnJ1xuICAgIH07XG4gICAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgICBwYXJlbnQ6ICcoc3RyaW5nfGVsZW1lbnQpJ1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZLFxuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gICAgfTtcbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgU0hPVzogJ3Nob3cnLFxuICAgICAgQ09MTEFQU0U6ICdjb2xsYXBzZScsXG4gICAgICBDT0xMQVBTSU5HOiAnY29sbGFwc2luZycsXG4gICAgICBDT0xMQVBTRUQ6ICdjb2xsYXBzZWQnXG4gICAgfTtcbiAgICB2YXIgRGltZW5zaW9uID0ge1xuICAgICAgV0lEVEg6ICd3aWR0aCcsXG4gICAgICBIRUlHSFQ6ICdoZWlnaHQnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBBQ1RJVkVTOiAnLnNob3csIC5jb2xsYXBzaW5nJyxcbiAgICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgQ29sbGFwc2UgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBDb2xsYXBzZShlbGVtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gJCQkMS5tYWtlQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiXVtocmVmPVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXSxcIiArIChcIltkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiXVtkYXRhLXRhcmdldD1cXFwiI1wiICsgZWxlbWVudC5pZCArIFwiXFxcIl1cIikpKTtcbiAgICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuREFUQV9UT0dHTEUpKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBlbGVtID0gdG9nZ2xlTGlzdFtpXTtcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvdW5kRWxlbSA9PT0gZWxlbWVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3I7XG5cbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnQgPyB0aGlzLl9nZXRQYXJlbnQoKSA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX2VsZW1lbnQsIHRoaXMuX3RyaWdnZXJBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBDb2xsYXBzZS5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKCQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdGl2ZXM7XG4gICAgICAgIHZhciBhY3RpdmVzRGF0YTtcblxuICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICAgICAgYWN0aXZlcyA9IFtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXBhcmVudCcpID09PSBfdGhpcy5fY29uZmlnLnBhcmVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYWN0aXZlcyA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgICBhY3RpdmVzRGF0YSA9ICQkJDEoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIGlmIChhY3RpdmVzRGF0YSAmJiBhY3RpdmVzRGF0YS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LlNIT1cpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlcykge1xuICAgICAgICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkJCQxKGFjdGl2ZXMpLm5vdCh0aGlzLl9zZWxlY3RvciksICdoaWRlJyk7XG5cbiAgICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgICAkJCQxKGFjdGl2ZXMpLmRhdGEoREFUQV9LRVksIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNJTkcpO1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl90cmlnZ2VyQXJyYXkpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5DT0xMQVBTRUQpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAkJCQxKF90aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0lORykuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFKS5hZGRDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG4gICAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgICAgX3RoaXMuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgICAkJCQxKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKEV2ZW50LlNIT1dOKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgICAgdmFyIHNjcm9sbFNpemUgPSBcInNjcm9sbFwiICsgY2FwaXRhbGl6ZWREaW1lbnNpb247XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gdGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXSArIFwicHhcIjtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhcnRFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuSElERSk7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzdGFydEV2ZW50KTtcblxuICAgICAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBTSU5HKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0UpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcbiAgICAgICAgdmFyIHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRyaWdnZXJBcnJheUxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXJBcnJheUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXTtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0cmlnZ2VyKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciAkZWxlbSA9ICQkJDEoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuXG4gICAgICAgICAgICAgIGlmICghJGVsZW0uaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgICAgICAgICAgJCQkMSh0cmlnZ2VyKS5hZGRDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRUcmFuc2l0aW9uaW5nKHRydWUpO1xuXG4gICAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICAgIF90aGlzMi5zZXRUcmFuc2l0aW9uaW5nKGZhbHNlKTtcblxuICAgICAgICAgICQkJDEoX3RoaXMyLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0lORykuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFKS50cmlnZ2VyKEV2ZW50LkhJRERFTik7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zZXRUcmFuc2l0aW9uaW5nID0gZnVuY3Rpb24gc2V0VHJhbnNpdGlvbmluZyhpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gbnVsbDtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldENvbmZpZyA9IGZ1bmN0aW9uIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpOyAvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlc1xuXG4gICAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXREaW1lbnNpb24gPSBmdW5jdGlvbiBfZ2V0RGltZW5zaW9uKCkge1xuICAgICAgICB2YXIgaGFzV2lkdGggPSAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKERpbWVuc2lvbi5XSURUSCk7XG4gICAgICAgIHJldHVybiBoYXNXaWR0aCA/IERpbWVuc2lvbi5XSURUSCA6IERpbWVuc2lvbi5IRUlHSFQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldFBhcmVudCA9IGZ1bmN0aW9uIF9nZXRQYXJlbnQoKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgIHZhciBwYXJlbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChVdGlsLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KSkge1xuICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnQ7IC8vIEl0J3MgYSBqUXVlcnkgb2JqZWN0XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudFswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLl9jb25maWcucGFyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtcGFyZW50PVxcXCJcIiArIHRoaXMuX2NvbmZpZy5wYXJlbnQgKyBcIlxcXCJdXCI7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdLnNsaWNlLmNhbGwocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcbiAgICAgICAgJCQkMShjaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xuICAgICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyA9IGZ1bmN0aW9uIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZWxlbWVudCwgdHJpZ2dlckFycmF5KSB7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGlzT3BlbiA9ICQkJDEoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuXG4gICAgICAgICAgaWYgKHRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICQkJDEodHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0VELCAhaXNPcGVuKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudCA9IGZ1bmN0aW9uIF9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgOiBudWxsO1xuICAgICAgfTtcblxuICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciAkdGhpcyA9ICQkJDEodGhpcyk7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCwgJHRoaXMuZGF0YSgpLCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBDb2xsYXBzZSh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlLCBudWxsLCBbe1xuICAgICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gQ29sbGFwc2U7XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gICAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyICR0cmlnZ2VyID0gJCQkMSh0aGlzKTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcbiAgICAgIHZhciBzZWxlY3RvcnMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcbiAgICAgICQkJDEoc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0YXJnZXQgPSAkJCQxKHRoaXMpO1xuICAgICAgICB2YXIgZGF0YSA9ICR0YXJnZXQuZGF0YShEQVRBX0tFWSk7XG4gICAgICAgIHZhciBjb25maWcgPSBkYXRhID8gJ3RvZ2dsZScgOiAkdHJpZ2dlci5kYXRhKCk7XG5cbiAgICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBDb2xsYXBzZS5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBDb2xsYXBzZTtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIENvbGxhcHNlO1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IGRyb3Bkb3duLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBEcm9wZG93biA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnZHJvcGRvd24nO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgRVNDQVBFX0tFWUNPREUgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gICAgdmFyIFNQQUNFX0tFWUNPREUgPSAzMjsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3BhY2Uga2V5XG5cbiAgICB2YXIgVEFCX0tFWUNPREUgPSA5OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciB0YWIga2V5XG5cbiAgICB2YXIgQVJST1dfVVBfS0VZQ09ERSA9IDM4OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciB1cCBhcnJvdyBrZXlcblxuICAgIHZhciBBUlJPV19ET1dOX0tFWUNPREUgPSA0MDsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcblxuICAgIHZhciBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggPSAzOyAvLyBNb3VzZUV2ZW50LndoaWNoIHZhbHVlIGZvciB0aGUgcmlnaHQgYnV0dG9uIChhc3N1bWluZyBhIHJpZ2h0LWhhbmRlZCBtb3VzZSlcblxuICAgIHZhciBSRUdFWFBfS0VZRE9XTiA9IG5ldyBSZWdFeHAoQVJST1dfVVBfS0VZQ09ERSArIFwifFwiICsgQVJST1dfRE9XTl9LRVlDT0RFICsgXCJ8XCIgKyBFU0NBUEVfS0VZQ09ERSk7XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWSxcbiAgICAgIEtFWURPV05fREFUQV9BUEk6IFwia2V5ZG93blwiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZLFxuICAgICAgS0VZVVBfREFUQV9BUEk6IFwia2V5dXBcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWVxuICAgIH07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIERJU0FCTEVEOiAnZGlzYWJsZWQnLFxuICAgICAgU0hPVzogJ3Nob3cnLFxuICAgICAgRFJPUFVQOiAnZHJvcHVwJyxcbiAgICAgIERST1BSSUdIVDogJ2Ryb3ByaWdodCcsXG4gICAgICBEUk9QTEVGVDogJ2Ryb3BsZWZ0JyxcbiAgICAgIE1FTlVSSUdIVDogJ2Ryb3Bkb3duLW1lbnUtcmlnaHQnLFxuICAgICAgTUVOVUxFRlQ6ICdkcm9wZG93bi1tZW51LWxlZnQnLFxuICAgICAgUE9TSVRJT05fU1RBVElDOiAncG9zaXRpb24tc3RhdGljJ1xuICAgIH07XG4gICAgdmFyIFNlbGVjdG9yID0ge1xuICAgICAgREFUQV9UT0dHTEU6ICdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScsXG4gICAgICBGT1JNX0NISUxEOiAnLmRyb3Bkb3duIGZvcm0nLFxuICAgICAgTUVOVTogJy5kcm9wZG93bi1tZW51JyxcbiAgICAgIE5BVkJBUl9OQVY6ICcubmF2YmFyLW5hdicsXG4gICAgICBWSVNJQkxFX0lURU1TOiAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG4gICAgfTtcbiAgICB2YXIgQXR0YWNobWVudE1hcCA9IHtcbiAgICAgIFRPUDogJ3RvcC1zdGFydCcsXG4gICAgICBUT1BFTkQ6ICd0b3AtZW5kJyxcbiAgICAgIEJPVFRPTTogJ2JvdHRvbS1zdGFydCcsXG4gICAgICBCT1RUT01FTkQ6ICdib3R0b20tZW5kJyxcbiAgICAgIFJJR0hUOiAncmlnaHQtc3RhcnQnLFxuICAgICAgUklHSFRFTkQ6ICdyaWdodC1lbmQnLFxuICAgICAgTEVGVDogJ2xlZnQtc3RhcnQnLFxuICAgICAgTEVGVEVORDogJ2xlZnQtZW5kJ1xuICAgIH07XG4gICAgdmFyIERlZmF1bHQgPSB7XG4gICAgICBvZmZzZXQ6IDAsXG4gICAgICBmbGlwOiB0cnVlLFxuICAgICAgYm91bmRhcnk6ICdzY3JvbGxQYXJlbnQnLFxuICAgICAgcmVmZXJlbmNlOiAndG9nZ2xlJyxcbiAgICAgIGRpc3BsYXk6ICdkeW5hbWljJ1xuICAgIH07XG4gICAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgICByZWZlcmVuY2U6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgICAgIGRpc3BsYXk6ICdzdHJpbmcnXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgRHJvcGRvd24gPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBEcm9wZG93bihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9tZW51ID0gdGhpcy5fZ2V0TWVudUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IERyb3Bkb3duLnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8udG9nZ2xlID0gZnVuY3Rpb24gdG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5ESVNBQkxFRCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAgIHZhciBpc0FjdGl2ZSA9ICQkJDEodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuXG4gICAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzKCk7XG5cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2hvd0V2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TSE9XLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgJCQkMShwYXJlbnQpLnRyaWdnZXIoc2hvd0V2ZW50KTtcblxuICAgICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIERpc2FibGUgdG90YWxseSBQb3BwZXIuanMgZm9yIERyb3Bkb3duIGluIE5hdmJhclxuXG5cbiAgICAgICAgaWYgKCF0aGlzLl9pbk5hdmJhcikge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENoZWNrIGZvciBQb3BwZXIgZGVwZW5kZW5jeVxuICAgICAgICAgICAqIFBvcHBlciAtIGh0dHBzOi8vcG9wcGVyLmpzLm9yZ1xuICAgICAgICAgICAqL1xuICAgICAgICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwIGRyb3Bkb3duIHJlcXVpcmUgUG9wcGVyLmpzIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlOyAvLyBDaGVjayBpZiBpdCdzIGpRdWVyeSBlbGVtZW50XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZS5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gSWYgYm91bmRhcnkgaXMgbm90IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgICAgIC8vIHRvIGFsbG93IHRoZSBtZW51IHRvIFwiZXNjYXBlXCIgdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzXG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yNDI1MVxuXG5cbiAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJvdW5kYXJ5ICE9PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgICAgICAgJCQkMShwYXJlbnQpLmFkZENsYXNzKENsYXNzTmFtZS5QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCkpO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAgICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICQkJDEocGFyZW50KS5jbG9zZXN0KFNlbGVjdG9yLk5BVkJBUl9OQVYpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vbignbW91c2VvdmVyJywgbnVsbCwgJCQkMS5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgICAgICQkJDEodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuICAgICAgICAkJCQxKHBhcmVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpLnRyaWdnZXIoJCQkMS5FdmVudChFdmVudC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9mZihFVkVOVF9LRVkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbWVudSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gUHJpdmF0ZVxuXG5cbiAgICAgIF9wcm90by5fYWRkRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5DTElDSywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkJCQxKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgY29uZmlnKTtcbiAgICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0TWVudUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWVudSkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9tZW51ID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuTUVOVSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldFBsYWNlbWVudCA9IGZ1bmN0aW9uIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgICAgIHZhciAkcGFyZW50RHJvcGRvd24gPSAkJCQxKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgICAgIHZhciBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLkJPVFRPTTsgLy8gSGFuZGxlIGRyb3B1cFxuXG4gICAgICAgIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lLkRST1BVUCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUDtcblxuICAgICAgICAgIGlmICgkJCQxKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZS5NRU5VUklHSFQpKSB7XG4gICAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUEVORDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudERyb3Bkb3duLmhhc0NsYXNzKENsYXNzTmFtZS5EUk9QUklHSFQpKSB7XG4gICAgICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5SSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lLkRST1BMRUZUKSkge1xuICAgICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVDtcbiAgICAgICAgfSBlbHNlIGlmICgkJCQxKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZS5NRU5VUklHSFQpKSB7XG4gICAgICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT01FTkQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9kZXRlY3ROYXZiYXIgPSBmdW5jdGlvbiBfZGV0ZWN0TmF2YmFyKCkge1xuICAgICAgICByZXR1cm4gJCQkMSh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0UG9wcGVyQ29uZmlnID0gZnVuY3Rpb24gX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIG9mZnNldENvbmYgPSB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5vZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvZmZzZXRDb25mLmZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cyA9IF9vYmplY3RTcHJlYWQoe30sIGRhdGEub2Zmc2V0cywgX3RoaXMyLl9jb25maWcub2Zmc2V0KGRhdGEub2Zmc2V0cykgfHwge30pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXRDb25mLm9mZnNldCA9IHRoaXMuX2NvbmZpZy5vZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG9wcGVyQ29uZmlnID0ge1xuICAgICAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IG9mZnNldENvbmYsXG4gICAgICAgICAgICBmbGlwOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2NvbmZpZy5mbGlwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIERpc2FibGUgUG9wcGVyLmpzIGlmIHdlIGhhdmUgYSBzdGF0aWMgZGlzcGxheVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHBvcHBlckNvbmZpZy5tb2RpZmllcnMuYXBwbHlTdHlsZSA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb3BwZXJDb25maWc7XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGw7XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgRHJvcGRvd24odGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgRHJvcGRvd24uX2NsZWFyTWVudXMgPSBmdW5jdGlvbiBfY2xlYXJNZW51cyhldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCAhPT0gVEFCX0tFWUNPREUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvZ2dsZXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuREFUQV9UT0dHTEUpKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodG9nZ2xlc1tpXSk7XG5cbiAgICAgICAgICB2YXIgY29udGV4dCA9ICQkJDEodG9nZ2xlc1tpXSkuZGF0YShEQVRBX0tFWSk7XG4gICAgICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkcm9wZG93bk1lbnUgPSBjb250ZXh0Ll9tZW51O1xuXG4gICAgICAgICAgaWYgKCEkJCQxKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycgJiYgL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCA9PT0gVEFCX0tFWUNPREUpICYmICQkJDEuY29udGFpbnMocGFyZW50LCBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaGlkZUV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5ISURFLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAkJCQxKHBhcmVudCkudHJpZ2dlcihoaWRlRXZlbnQpO1xuXG4gICAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cblxuICAgICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQkJDEubm9vcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9nZ2xlc1tpXS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAkJCQxKGRyb3Bkb3duTWVudSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuICAgICAgICAgICQkJDEocGFyZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVykudHJpZ2dlcigkJCQxLkV2ZW50KEV2ZW50LkhJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgcGFyZW50O1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50IHx8IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cblxuICAgICAgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9kYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgLy8gSWYgbm90IGlucHV0L3RleHRhcmVhOlxuICAgICAgICAvLyAgLSBBbmQgbm90IGEga2V5IGluIFJFR0VYUF9LRVlET1dOID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgICAgIC8vICAtIElmIHNwYWNlIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAgIC8vICAtIElmIGtleSBpcyBvdGhlciB0aGFuIGVzY2FwZVxuICAgICAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAgIC8vICAgIC0gSWYgdHJpZ2dlciBpbnNpZGUgdGhlIG1lbnUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkgPyBldmVudC53aGljaCA9PT0gU1BBQ0VfS0VZQ09ERSB8fCBldmVudC53aGljaCAhPT0gRVNDQVBFX0tFWUNPREUgJiYgKGV2ZW50LndoaWNoICE9PSBBUlJPV19ET1dOX0tFWUNPREUgJiYgZXZlbnQud2hpY2ggIT09IEFSUk9XX1VQX0tFWUNPREUgfHwgJCQkMShldmVudC50YXJnZXQpLmNsb3Nlc3QoU2VsZWN0b3IuTUVOVSkubGVuZ3RoKSA6ICFSRUdFWFBfS0VZRE9XTi50ZXN0KGV2ZW50LndoaWNoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQkJDEodGhpcykuaGFzQ2xhc3MoQ2xhc3NOYW1lLkRJU0FCTEVEKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICAgICAgdmFyIGlzQWN0aXZlID0gJCQkMShwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICBpZiAoIWlzQWN0aXZlICYmIChldmVudC53aGljaCAhPT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggIT09IFNQQUNFX0tFWUNPREUpIHx8IGlzQWN0aXZlICYmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUpKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBFU0NBUEVfS0VZQ09ERSkge1xuICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkRBVEFfVE9HR0xFKTtcbiAgICAgICAgICAgICQkJDEodG9nZ2xlKS50cmlnZ2VyKCdmb2N1cycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICQkJDEodGhpcykudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlbXMgPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLlZJU0lCTEVfSVRFTVMpKTtcblxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0gaXRlbXMuaW5kZXhPZihldmVudC50YXJnZXQpO1xuXG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gQVJST1dfVVBfS0VZQ09ERSAmJiBpbmRleCA+IDApIHtcbiAgICAgICAgICAvLyBVcFxuICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBEb3duXG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhEcm9wZG93biwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gRHJvcGRvd247XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEoZG9jdW1lbnQpLm9uKEV2ZW50LktFWURPV05fREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3Rvci5NRU5VLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudC5DTElDS19EQVRBX0FQSSArIFwiIFwiICsgRXZlbnQuS0VZVVBfREFUQV9BUEksIERyb3Bkb3duLl9jbGVhck1lbnVzKS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCQkMSh0aGlzKSwgJ3RvZ2dsZScpO1xuICAgIH0pLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5GT1JNX0NISUxELCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIERyb3Bkb3duO1xuICB9KCQsIFBvcHBlcik7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogbW9kYWwuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdtb2RhbCc7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy5tb2RhbCc7XG4gICAgdmFyIEVWRU5UX0tFWSA9IFwiLlwiICsgREFUQV9LRVk7XG4gICAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBFU0NBUEVfS0VZQ09ERSA9IDI3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykga2V5XG5cbiAgICB2YXIgRGVmYXVsdCA9IHtcbiAgICAgIGJhY2tkcm9wOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgICBmb2N1czogdHJ1ZSxcbiAgICAgIHNob3c6IHRydWVcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gICAgICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICAgICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICAgIHNob3c6ICdib29sZWFuJ1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSxcbiAgICAgIFJFU0laRTogXCJyZXNpemVcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLX0RJU01JU1M6IFwiY2xpY2suZGlzbWlzc1wiICsgRVZFTlRfS0VZLFxuICAgICAgS0VZRE9XTl9ESVNNSVNTOiBcImtleWRvd24uZGlzbWlzc1wiICsgRVZFTlRfS0VZLFxuICAgICAgTU9VU0VVUF9ESVNNSVNTOiBcIm1vdXNldXAuZGlzbWlzc1wiICsgRVZFTlRfS0VZLFxuICAgICAgTU9VU0VET1dOX0RJU01JU1M6IFwibW91c2Vkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBTQ1JPTExCQVJfTUVBU1VSRVI6ICdtb2RhbC1zY3JvbGxiYXItbWVhc3VyZScsXG4gICAgICBCQUNLRFJPUDogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICAgIE9QRU46ICdtb2RhbC1vcGVuJyxcbiAgICAgIEZBREU6ICdmYWRlJyxcbiAgICAgIFNIT1c6ICdzaG93J1xuICAgIH07XG4gICAgdmFyIFNlbGVjdG9yID0ge1xuICAgICAgRElBTE9HOiAnLm1vZGFsLWRpYWxvZycsXG4gICAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cIm1vZGFsXCJdJyxcbiAgICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gICAgICBGSVhFRF9DT05URU5UOiAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCcsXG4gICAgICBTVElDS1lfQ09OVEVOVDogJy5zdGlja3ktdG9wJ1xuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIE1vZGFsID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5fZGlhbG9nID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkRJQUxPRyk7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gMDtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBNb2RhbC5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvd0V2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TSE9XLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNTaG93biA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fY2hlY2tTY3JvbGxiYXIoKTtcblxuICAgICAgICB0aGlzLl9zZXRTY3JvbGxiYXIoKTtcblxuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcblxuICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKENsYXNzTmFtZS5PUEVOKTtcblxuICAgICAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpO1xuXG4gICAgICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KCk7XG5cbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5DTElDS19ESVNNSVNTLCBTZWxlY3Rvci5EQVRBX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5oaWRlKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgICQkJDEodGhpcy5fZGlhbG9nKS5vbihFdmVudC5NT1VTRURPV05fRElTTUlTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQkJDEoX3RoaXMuX2VsZW1lbnQpLm9uZShFdmVudC5NT1VTRVVQX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCQkJDEoZXZlbnQudGFyZ2V0KS5pcyhfdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgX3RoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zaG93QmFja2Ryb3AoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGV2ZW50KSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhpZGVFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuSElERSk7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudHJpZ2dlcihoaWRlRXZlbnQpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSk7XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKTtcblxuICAgICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAgICQkJDEoZG9jdW1lbnQpLm9mZihFdmVudC5GT0NVU0lOKTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50LkNMSUNLX0RJU01JU1MpO1xuICAgICAgICAkJCQxKHRoaXMuX2RpYWxvZykub2ZmKEV2ZW50Lk1PVVNFRE9XTl9ESVNNSVNTKTtcblxuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5faGlkZU1vZGFsKGV2ZW50KTtcbiAgICAgICAgICB9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2hpZGVNb2RhbCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgICQkJDEucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSk7XG4gICAgICAgICQkJDEod2luZG93LCBkb2N1bWVudCwgdGhpcy5fZWxlbWVudCwgdGhpcy5fYmFja2Ryb3ApLm9mZihFVkVOVF9LRVkpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGlhbG9nID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBudWxsO1xuICAgICAgICB0aGlzLl9pc1Nob3duID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyV2lkdGggPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBEZWZhdWx0LCBjb25maWcpO1xuICAgICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2hvd0VsZW1lbnQgPSBmdW5jdGlvbiBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9ICQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIHx8IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5fZW5mb3JjZUZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvd25FdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0hPV04sIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB0cmFuc2l0aW9uQ29tcGxldGUgPSBmdW5jdGlvbiB0cmFuc2l0aW9uQ29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgICAgICBfdGhpczMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgICAgICQkJDEoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgICAgJCQkMSh0aGlzLl9kaWFsb2cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCB0cmFuc2l0aW9uQ29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZW5mb3JjZUZvY3VzID0gZnVuY3Rpb24gX2VuZm9yY2VGb2N1cygpIHtcbiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICAgJCQkMShkb2N1bWVudCkub2ZmKEV2ZW50LkZPQ1VTSU4pIC8vIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgICAub24oRXZlbnQuRk9DVVNJTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKGRvY3VtZW50ICE9PSBldmVudC50YXJnZXQgJiYgX3RoaXM0Ll9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgJiYgJCQkMShfdGhpczQuX2VsZW1lbnQpLmhhcyhldmVudC50YXJnZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX3RoaXM0Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2V0RXNjYXBlRXZlbnQgPSBmdW5jdGlvbiBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmIHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub24oRXZlbnQuS0VZRE9XTl9ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpczUuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vZmYoRXZlbnQuS0VZRE9XTl9ESVNNSVNTKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9zZXRSZXNpemVFdmVudCA9IGZ1bmN0aW9uIF9zZXRSZXNpemVFdmVudCgpIHtcbiAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgICAkJCQxKHdpbmRvdykub24oRXZlbnQuUkVTSVpFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczYuaGFuZGxlVXBkYXRlKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkJCQxKHdpbmRvdykub2ZmKEV2ZW50LlJFU0laRSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5faGlkZU1vZGFsID0gZnVuY3Rpb24gX2hpZGVNb2RhbCgpIHtcbiAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgJCQkMShkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuT1BFTik7XG5cbiAgICAgICAgICBfdGhpczcuX3Jlc2V0QWRqdXN0bWVudHMoKTtcblxuICAgICAgICAgIF90aGlzNy5fcmVzZXRTY3JvbGxiYXIoKTtcblxuICAgICAgICAgICQkJDEoX3RoaXM3Ll9lbGVtZW50KS50cmlnZ2VyKEV2ZW50LkhJRERFTik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9yZW1vdmVCYWNrZHJvcCA9IGZ1bmN0aW9uIF9yZW1vdmVCYWNrZHJvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JhY2tkcm9wKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCk7XG4gICAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3Nob3dCYWNrZHJvcCA9IGZ1bmN0aW9uIF9zaG93QmFja2Ryb3AoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGFuaW1hdGUgPSAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSA/IENsYXNzTmFtZS5GQURFIDogJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc05hbWUgPSBDbGFzc05hbWUuQkFDS0RST1A7XG5cbiAgICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChhbmltYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkJCQxKHRoaXMuX2JhY2tkcm9wKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKF90aGlzOC5faWdub3JlQmFja2Ryb3BDbGljaykge1xuICAgICAgICAgICAgICBfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF90aGlzOC5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgICAgICBfdGhpczguX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzOC5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICQkJDEodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9iYWNrZHJvcCk7XG4gICAgICAgICAgJCQkMSh0aGlzLl9iYWNrZHJvcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNhbGxiYWNrKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2hvd24gJiYgdGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgICAkJCQxKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG5cbiAgICAgICAgICB2YXIgY2FsbGJhY2tSZW1vdmUgPSBmdW5jdGlvbiBjYWxsYmFja1JlbW92ZSgpIHtcbiAgICAgICAgICAgIF90aGlzOC5fcmVtb3ZlQmFja2Ryb3AoKTtcblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICgkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICAgICAgdmFyIF9iYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuXG4gICAgICAgICAgICAkJCQxKHRoaXMuX2JhY2tkcm9wKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2tSZW1vdmUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKF9iYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrUmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICAgIC8vIHRvZG8gKGZhdCk6IHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZhY3RvcmVkIG91dCBvZiBtb2RhbC5qc1xuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbiAgICAgIF9wcm90by5fYWRqdXN0RGlhbG9nID0gZnVuY3Rpb24gX2FkanVzdERpYWxvZygpIHtcbiAgICAgICAgdmFyIGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSB0aGlzLl9zY3JvbGxiYXJXaWR0aCArIFwicHhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSB0aGlzLl9zY3JvbGxiYXJXaWR0aCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9yZXNldEFkanVzdG1lbnRzID0gZnVuY3Rpb24gX3Jlc2V0QWRqdXN0bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICAgIHZhciByZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgPSByZWN0LmxlZnQgKyByZWN0LnJpZ2h0IDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2V0U2Nyb2xsYmFyID0gZnVuY3Rpb24gX3NldFNjcm9sbGJhcigpIHtcbiAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQm9keU92ZXJmbG93aW5nKSB7XG4gICAgICAgICAgLy8gTm90ZTogRE9NTm9kZS5zdHlsZS5wYWRkaW5nUmlnaHQgcmV0dXJucyB0aGUgYWN0dWFsIHZhbHVlIG9yICcnIGlmIG5vdCBzZXRcbiAgICAgICAgICAvLyAgIHdoaWxlICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgICB2YXIgc3RpY2t5Q29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5TVElDS1lfQ09OVEVOVCkpOyAvLyBBZGp1c3QgZml4ZWQgY29udGVudCBwYWRkaW5nXG5cbiAgICAgICAgICAkJCQxKGZpeGVkQ29udGVudCkuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBhY3R1YWxQYWRkaW5nID0gZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ7XG4gICAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkJCQxKGVsZW1lbnQpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICAgJCQkMShlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0JywgYWN0dWFsUGFkZGluZykuY3NzKCdwYWRkaW5nLXJpZ2h0JywgcGFyc2VGbG9hdChjYWxjdWxhdGVkUGFkZGluZykgKyBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgICB9KTsgLy8gQWRqdXN0IHN0aWNreSBjb250ZW50IG1hcmdpblxuXG4gICAgICAgICAgJCQkMShzdGlja3lDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGFjdHVhbE1hcmdpbiA9IGVsZW1lbnQuc3R5bGUubWFyZ2luUmlnaHQ7XG4gICAgICAgICAgICB2YXIgY2FsY3VsYXRlZE1hcmdpbiA9ICQkJDEoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnKTtcbiAgICAgICAgICAgICQkJDEoZWxlbWVudCkuZGF0YSgnbWFyZ2luLXJpZ2h0JywgYWN0dWFsTWFyZ2luKS5jc3MoJ21hcmdpbi1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgICB9KTsgLy8gQWRqdXN0IGJvZHkgcGFkZGluZ1xuXG4gICAgICAgICAgdmFyIGFjdHVhbFBhZGRpbmcgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkJCQxKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgdGhpcy5fc2Nyb2xsYmFyV2lkdGggKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3Jlc2V0U2Nyb2xsYmFyID0gZnVuY3Rpb24gX3Jlc2V0U2Nyb2xsYmFyKCkge1xuICAgICAgICAvLyBSZXN0b3JlIGZpeGVkIGNvbnRlbnQgcGFkZGluZ1xuICAgICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgJCQkMShmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIHBhZGRpbmcgPSAkJCQxKGVsZW1lbnQpLmRhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgICAkJCQxKGVsZW1lbnQpLnJlbW92ZURhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICAgIH0pOyAvLyBSZXN0b3JlIHN0aWNreSBjb250ZW50XG5cbiAgICAgICAgdmFyIGVsZW1lbnRzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiXCIgKyBTZWxlY3Rvci5TVElDS1lfQ09OVEVOVCkpO1xuICAgICAgICAkJCQxKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBtYXJnaW4gPSAkJCQxKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBtYXJnaW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAkJCQxKGVsZW1lbnQpLmNzcygnbWFyZ2luLXJpZ2h0JywgbWFyZ2luKS5yZW1vdmVEYXRhKCdtYXJnaW4tcmlnaHQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBSZXN0b3JlIGJvZHkgcGFkZGluZ1xuXG4gICAgICAgIHZhciBwYWRkaW5nID0gJCQkMShkb2N1bWVudC5ib2R5KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldFNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24gX2dldFNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgICAvLyB0aHggZC53YWxzaFxuICAgICAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUuU0NST0xMQkFSX01FQVNVUkVSO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG4gICAgICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JvbGxEaXYpO1xuICAgICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBEZWZhdWx0LCAkJCQxKHRoaXMpLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IE1vZGFsKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICAgJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX2NvbmZpZy5zaG93KSB7XG4gICAgICAgICAgICBkYXRhLnNob3cocmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhNb2RhbCwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIE1vZGFsO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxKGRvY3VtZW50KS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICB2YXIgdGFyZ2V0O1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb25maWcgPSAkJCQxKHRhcmdldCkuZGF0YShEQVRBX0tFWSkgPyAndG9nZ2xlJyA6IF9vYmplY3RTcHJlYWQoe30sICQkJDEodGFyZ2V0KS5kYXRhKCksICQkJDEodGhpcykuZGF0YSgpKTtcblxuICAgICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gJ0EnIHx8IHRoaXMudGFnTmFtZSA9PT0gJ0FSRUEnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciAkdGFyZ2V0ID0gJCQkMSh0YXJnZXQpLm9uZShFdmVudC5TSE9XLCBmdW5jdGlvbiAoc2hvd0V2ZW50KSB7XG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJHRhcmdldC5vbmUoRXZlbnQuSElEREVOLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCQkJDEoX3RoaXMxMCkuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgICAgICAgIF90aGlzMTAuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkJCQxKHRhcmdldCksIGNvbmZpZywgdGhpcyk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gTW9kYWwuX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gTW9kYWw7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBNb2RhbDtcbiAgfSgkKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiB0b29sdGlwLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBUb29sdGlwID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICd0b29sdGlwJztcbiAgICB2YXIgVkVSU0lPTiA9ICc0LjEuMic7XG4gICAgdmFyIERBVEFfS0VZID0gJ2JzLnRvb2x0aXAnO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBDTEFTU19QUkVGSVggPSAnYnMtdG9vbHRpcCc7XG4gICAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG4gICAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgICAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gICAgICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gICAgICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICAgICAgdHJpZ2dlcjogJ3N0cmluZycsXG4gICAgICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gICAgICBodG1sOiAnYm9vbGVhbicsXG4gICAgICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICAgICAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICAgICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmcpJyxcbiAgICAgIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gICAgICBmYWxsYmFja1BsYWNlbWVudDogJyhzdHJpbmd8YXJyYXkpJyxcbiAgICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgICB9O1xuICAgIHZhciBBdHRhY2htZW50TWFwID0ge1xuICAgICAgQVVUTzogJ2F1dG8nLFxuICAgICAgVE9QOiAndG9wJyxcbiAgICAgIFJJR0hUOiAncmlnaHQnLFxuICAgICAgQk9UVE9NOiAnYm90dG9tJyxcbiAgICAgIExFRlQ6ICdsZWZ0J1xuICAgIH07XG4gICAgdmFyIERlZmF1bHQgPSB7XG4gICAgICBhbmltYXRpb246IHRydWUsXG4gICAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLFxuICAgICAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlbGF5OiAwLFxuICAgICAgaHRtbDogZmFsc2UsXG4gICAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnZmxpcCcsXG4gICAgICBib3VuZGFyeTogJ3Njcm9sbFBhcmVudCdcbiAgICB9O1xuICAgIHZhciBIb3ZlclN0YXRlID0ge1xuICAgICAgU0hPVzogJ3Nob3cnLFxuICAgICAgT1VUOiAnb3V0J1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSxcbiAgICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZLFxuICAgICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZLFxuICAgICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBGQURFOiAnZmFkZScsXG4gICAgICBTSE9XOiAnc2hvdydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIFRPT0xUSVA6ICcudG9vbHRpcCcsXG4gICAgICBUT09MVElQX0lOTkVSOiAnLnRvb2x0aXAtaW5uZXInLFxuICAgICAgQVJST1c6ICcuYXJyb3cnXG4gICAgfTtcbiAgICB2YXIgVHJpZ2dlciA9IHtcbiAgICAgIEhPVkVSOiAnaG92ZXInLFxuICAgICAgRk9DVVM6ICdmb2N1cycsXG4gICAgICBDTElDSzogJ2NsaWNrJyxcbiAgICAgIE1BTlVBTDogJ21hbnVhbCdcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBUb29sdGlwID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gVG9vbHRpcChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciBQb3BwZXIgZGVwZW5kZW5jeVxuICAgICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAgICovXG4gICAgICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcCB0b29sdGlwcyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgICAgICB9IC8vIHByaXZhdGVcblxuXG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3RpbWVvdXQgPSAwO1xuICAgICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDsgLy8gUHJvdGVjdGVkXG5cbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy50aXAgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IFRvb2x0aXAucHJvdG90eXBlO1xuXG4gICAgICAvLyBQdWJsaWNcbiAgICAgIF9wcm90by5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnRvZ2dsZUVuYWJsZWQgPSBmdW5jdGlvbiB0b2dnbGVFbmFibGVkKCkge1xuICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgICB2YXIgY29udGV4dCA9ICQkJDEoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5KTtcblxuICAgICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICAgJCQkMShldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXksIGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljaztcblxuICAgICAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuX2VudGVyKG51bGwsIGNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0Ll9sZWF2ZShudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCQkJDEodGhpcy5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgICAgICAgdGhpcy5fbGVhdmUobnVsbCwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9lbnRlcihudWxsLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICAgICQkJDEucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgICAgICAkJCQxKHRoaXMuZWxlbWVudCkub2ZmKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICAgICAgJCQkMSh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9mZignaGlkZS5icy5tb2RhbCcpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgICAgICQkJDEodGhpcy50aXApLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNFbmFibGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy50aXAgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIGlmICgkJCQxKHRoaXMuZWxlbWVudCkuY3NzKCdkaXNwbGF5JykgPT09ICdub25lJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG93RXZlbnQgPSAkJCQxLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPVyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAgICQkJDEodGhpcy5lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG4gICAgICAgICAgdmFyIGlzSW5UaGVEb20gPSAkJCQxLmNvbnRhaW5zKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5lbGVtZW50KTtcblxuICAgICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgICAgdmFyIHRpcElkID0gVXRpbC5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtcbiAgICAgICAgICB0aXAuc2V0QXR0cmlidXRlKCdpZCcsIHRpcElkKTtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpO1xuICAgICAgICAgIHRoaXMuc2V0Q29udGVudCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgJCQkMSh0aXApLmFkZENsYXNzKENsYXNzTmFtZS5GQURFKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGxhY2VtZW50ID0gdHlwZW9mIHRoaXMuY29uZmlnLnBsYWNlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMsIHRpcCwgdGhpcy5lbGVtZW50KSA6IHRoaXMuY29uZmlnLnBsYWNlbWVudDtcblxuICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gdGhpcy5fZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpO1xuXG4gICAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCk7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogJCQkMShkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgICAgICAgICQkJDEodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuXG4gICAgICAgICAgaWYgKCEkJCQxLmNvbnRhaW5zKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy50aXApKSB7XG4gICAgICAgICAgICAkJCQxKHRpcCkuYXBwZW5kVG8oY29udGFpbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkJCQxKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKTtcbiAgICAgICAgICB0aGlzLl9wb3BwZXIgPSBuZXcgUG9wcGVyKHRoaXMuZWxlbWVudCwgdGlwLCB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLmNvbmZpZy5vZmZzZXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiB0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhcnJvdzoge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IFNlbGVjdG9yLkFSUk9XXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZXZlbnRPdmVyZmxvdzoge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLmNvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgIT09IGRhdGEucGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZShkYXRhKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJCQkMSh0aXApLmFkZENsYXNzKENsYXNzTmFtZS5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAgICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAgICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuICAgICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vbignbW91c2VvdmVyJywgbnVsbCwgJCQkMS5ub29wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9maXhUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwcmV2SG92ZXJTdGF0ZSA9IF90aGlzLl9ob3ZlclN0YXRlO1xuICAgICAgICAgICAgX3RoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgJCQkMShfdGhpcy5lbGVtZW50KS50cmlnZ2VyKF90aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKTtcblxuICAgICAgICAgICAgaWYgKHByZXZIb3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgICAgICBfdGhpcy5fbGVhdmUobnVsbCwgX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoJCQkMSh0aGlzLnRpcCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7XG4gICAgICAgICAgICAkJCQxKHRoaXMudGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgICB2YXIgaGlkZUV2ZW50ID0gJCQkMS5FdmVudCh0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJREUpO1xuXG4gICAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmIChfdGhpczIuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGlwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczIuX2NsZWFuVGlwQ2xhc3MoKTtcblxuICAgICAgICAgIF90aGlzMi5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuXG4gICAgICAgICAgJCQkMShfdGhpczIuZWxlbWVudCkudHJpZ2dlcihfdGhpczIuY29uc3RydWN0b3IuRXZlbnQuSElEREVOKTtcblxuICAgICAgICAgIGlmIChfdGhpczIuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3RoaXMyLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJCQkMSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgICBpZiAoaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJCQkMSh0aXApLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAgICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJCQkMShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZignbW91c2VvdmVyJywgbnVsbCwgJCQkMS5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5DTElDS10gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUcmlnZ2VyLkZPQ1VTXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RyaWdnZXIuSE9WRVJdID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCQkJDEodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcCk7XG4gICAgICAgICAgJCQkMSh0aXApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9OyAvLyBQcm90ZWN0ZWRcblxuXG4gICAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uYWRkQXR0YWNobWVudENsYXNzID0gZnVuY3Rpb24gYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgJCQkMSh0aGlzLmdldFRpcEVsZW1lbnQoKSkuYWRkQ2xhc3MoQ0xBU1NfUFJFRklYICsgXCItXCIgKyBhdHRhY2htZW50KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5nZXRUaXBFbGVtZW50ID0gZnVuY3Rpb24gZ2V0VGlwRWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy50aXAgPSB0aGlzLnRpcCB8fCAkJCQxKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlwO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnNldENvbnRlbnQgPSBmdW5jdGlvbiBzZXRDb250ZW50KCkge1xuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENvbnRlbnQoJCQkMSh0aXAucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5UT09MVElQX0lOTkVSKSksIHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICAgICQkJDEodGlwKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lLlNIT1cpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnNldEVsZW1lbnRDb250ZW50ID0gZnVuY3Rpb24gc2V0RWxlbWVudENvbnRlbnQoJGVsZW1lbnQsIGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIGh0bWwgPSB0aGlzLmNvbmZpZy5odG1sO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgJiYgKGNvbnRlbnQubm9kZVR5cGUgfHwgY29udGVudC5qcXVlcnkpKSB7XG4gICAgICAgICAgLy8gQ29udGVudCBpcyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5XG4gICAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgIGlmICghJCQkMShjb250ZW50KS5wYXJlbnQoKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgJGVsZW1lbnQuZW1wdHkoKS5hcHBlbmQoY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRlbGVtZW50LnRleHQoJCQkMShjb250ZW50KS50ZXh0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZWxlbWVudFtodG1sID8gJ2h0bWwnIDogJ3RleHQnXShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmdldFRpdGxlID0gZnVuY3Rpb24gZ2V0VGl0bGUoKSB7XG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKTtcblxuICAgICAgICBpZiAoIXRpdGxlKSB7XG4gICAgICAgICAgdGl0bGUgPSB0eXBlb2YgdGhpcy5jb25maWcudGl0bGUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy50aXRsZS5jYWxsKHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy50aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aXRsZTtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9zZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfc2V0TGlzdGVuZXJzKCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgICB2YXIgdHJpZ2dlcnMgPSB0aGlzLmNvbmZpZy50cmlnZ2VyLnNwbGl0KCcgJyk7XG4gICAgICAgIHRyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHRyaWdnZXIpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgJCQkMShfdGhpczMuZWxlbWVudCkub24oX3RoaXMzLmNvbnN0cnVjdG9yLkV2ZW50LkNMSUNLLCBfdGhpczMuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy50b2dnbGUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUcmlnZ2VyLk1BTlVBTCkge1xuICAgICAgICAgICAgdmFyIGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUcmlnZ2VyLkhPVkVSID8gX3RoaXMzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVIgOiBfdGhpczMuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNJTjtcbiAgICAgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczMuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6IF90aGlzMy5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtcbiAgICAgICAgICAgICQkJDEoX3RoaXMzLmVsZW1lbnQpLm9uKGV2ZW50SW4sIF90aGlzMy5jb25maWcuc2VsZWN0b3IsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLl9lbnRlcihldmVudCk7XG4gICAgICAgICAgICB9KS5vbihldmVudE91dCwgX3RoaXMzLmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczMuX2xlYXZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICQkJDEoX3RoaXMzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9uKCdoaWRlLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5oaWRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgICAgIHRoaXMuY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25maWcsIHtcbiAgICAgICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgICAgICAgc2VsZWN0b3I6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fZml4VGl0bGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9maXhUaXRsZSA9IGZ1bmN0aW9uIF9maXhUaXRsZSgpIHtcbiAgICAgICAgdmFyIHRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgfHwgdGl0bGVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8ICcnKTtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9lbnRlciA9IGZ1bmN0aW9uIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgICAgICB2YXIgZGF0YUtleSA9IHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8ICQkJDEoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5KTtcblxuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICBjb250ZXh0ID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZXZlbnQuY3VycmVudFRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSk7XG4gICAgICAgICAgJCQkMShldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXksIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCQkJDEoY29udGV4dC5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5TSE9XO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KTtcbiAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcblxuICAgICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICAgICAgY29udGV4dC5zaG93KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgY29udGV4dC5jb25maWcuZGVsYXkuc2hvdyk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2xlYXZlID0gZnVuY3Rpb24gX2xlYXZlKGV2ZW50LCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJCQkMShldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRleHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihldmVudC5jdXJyZW50VGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKTtcbiAgICAgICAgICAkJCQxKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLk9VVDtcblxuICAgICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKSB7XG4gICAgICAgICAgY29udGV4dC5oaWRlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgICAgY29udGV4dC5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5faXNXaXRoQWN0aXZlVHJpZ2dlciA9IGZ1bmN0aW9uIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgICAgICBmb3IgKHZhciB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlVHJpZ2dlclt0cmlnZ2VyXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsICQkJDEodGhpcy5lbGVtZW50KS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgICAgICBoaWRlOiBjb25maWcuZGVsYXlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbmZpZy5jb250ZW50ID0gY29uZmlnLmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldERlbGVnYXRlQ29uZmlnID0gZnVuY3Rpb24gX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgICAgICB2YXIgY29uZmlnID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHRoaXMuY29uZmlnW2tleV0pIHtcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2NsZWFuVGlwQ2xhc3MgPSBmdW5jdGlvbiBfY2xlYW5UaXBDbGFzcygpIHtcbiAgICAgICAgdmFyICR0aXAgPSAkJCQxKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCk7XG5cbiAgICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICR0aXAucmVtb3ZlQ2xhc3ModGFiQ2xhc3Muam9pbignJykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSA9IGZ1bmN0aW9uIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgICAgICB2YXIgcG9wcGVySW5zdGFuY2UgPSBwb3BwZXJEYXRhLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnRpcCA9IHBvcHBlckluc3RhbmNlLnBvcHBlcjtcblxuICAgICAgICB0aGlzLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudChwb3BwZXJEYXRhLnBsYWNlbWVudCkpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9maXhUcmFuc2l0aW9uID0gZnVuY3Rpb24gX2ZpeFRyYW5zaXRpb24oKSB7XG4gICAgICAgIHZhciB0aXAgPSB0aGlzLmdldFRpcEVsZW1lbnQoKTtcbiAgICAgICAgdmFyIGluaXRDb25maWdBbmltYXRpb24gPSB0aGlzLmNvbmZpZy5hbmltYXRpb247XG5cbiAgICAgICAgaWYgKHRpcC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAkJCQxKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkZBREUpO1xuICAgICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uO1xuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IFRvb2x0aXAodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKFRvb2x0aXAsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJOQU1FXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBOQU1FO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gREFUQV9LRVk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRVZFTlRfS0VZXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBFVkVOVF9LRVk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gVG9vbHRpcDtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEuZm5bTkFNRV0gPSBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IFRvb2x0aXA7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIFRvb2x0aXAuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRvb2x0aXA7XG4gIH0oJCwgUG9wcGVyKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiBwb3BvdmVyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBQb3BvdmVyID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdwb3BvdmVyJztcbiAgICB2YXIgVkVSU0lPTiA9ICc0LjEuMic7XG4gICAgdmFyIERBVEFfS0VZID0gJ2JzLnBvcG92ZXInO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBDTEFTU19QUkVGSVggPSAnYnMtcG9wb3Zlcic7XG4gICAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG5cbiAgICB2YXIgRGVmYXVsdCA9IF9vYmplY3RTcHJlYWQoe30sIFRvb2x0aXAuRGVmYXVsdCwge1xuICAgICAgcGxhY2VtZW50OiAncmlnaHQnLFxuICAgICAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj48L2Rpdj4nXG4gICAgfSk7XG5cbiAgICB2YXIgRGVmYXVsdFR5cGUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHRUeXBlLCB7XG4gICAgICBjb250ZW50OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbiAgICB9KTtcblxuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBGQURFOiAnZmFkZScsXG4gICAgICBTSE9XOiAnc2hvdydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIFRJVExFOiAnLnBvcG92ZXItaGVhZGVyJyxcbiAgICAgIENPTlRFTlQ6ICcucG9wb3Zlci1ib2R5J1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSxcbiAgICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZLFxuICAgICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZLFxuICAgICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVlcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBQb3BvdmVyID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKF9Ub29sdGlwKSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShQb3BvdmVyLCBfVG9vbHRpcCk7XG5cbiAgICAgIGZ1bmN0aW9uIFBvcG92ZXIoKSB7XG4gICAgICAgIHJldHVybiBfVG9vbHRpcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcHJvdG8gPSBQb3BvdmVyLnByb3RvdHlwZTtcblxuICAgICAgLy8gT3ZlcnJpZGVzXG4gICAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAgICQkJDEodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKENMQVNTX1BSRUZJWCArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCQkMSh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnRpcDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgICAgdmFyICR0aXAgPSAkJCQxKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTsgLy8gV2UgdXNlIGFwcGVuZCBmb3IgaHRtbCBvYmplY3RzIHRvIG1haW50YWluIGpzIGV2ZW50c1xuXG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENvbnRlbnQoJHRpcC5maW5kKFNlbGVjdG9yLlRJVExFKSwgdGhpcy5nZXRUaXRsZSgpKTtcblxuICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2dldENvbnRlbnQoKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb250ZW50ID0gY29udGVudC5jYWxsKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3Rvci5DT05URU5UKSwgY29udGVudCk7XG4gICAgICAgICR0aXAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkZBREUgKyBcIiBcIiArIENsYXNzTmFtZS5TSE9XKTtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldENvbnRlbnQgPSBmdW5jdGlvbiBfZ2V0Q29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29udGVudCcpIHx8IHRoaXMuY29uZmlnLmNvbnRlbnQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2NsZWFuVGlwQ2xhc3MgPSBmdW5jdGlvbiBfY2xlYW5UaXBDbGFzcygpIHtcbiAgICAgICAgdmFyICR0aXAgPSAkJCQxKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCk7XG5cbiAgICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAkdGlwLnJlbW92ZUNsYXNzKHRhYkNsYXNzLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGw7XG5cbiAgICAgICAgICBpZiAoIWRhdGEgJiYgL2Rlc3Ryb3l8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKFBvcG92ZXIsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIC8vIEdldHRlcnNcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIk5BTUVcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIE5BTUU7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRBVEFfS0VZXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEQVRBX0tFWTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRXZlbnRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJFVkVOVF9LRVlcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIEVWRU5UX0tFWTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRGVmYXVsdFR5cGVcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBQb3BvdmVyO1xuICAgIH0oVG9vbHRpcCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEuZm5bTkFNRV0gPSBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IFBvcG92ZXI7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIFBvcG92ZXIuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFBvcG92ZXI7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogc2Nyb2xsc3B5LmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBTY3JvbGxTcHkgPSBmdW5jdGlvbiAoJCQkMSkge1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENvbnN0YW50c1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuICAgIHZhciBOQU1FID0gJ3Njcm9sbHNweSc7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy5zY3JvbGxzcHknO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgRGVmYXVsdCA9IHtcbiAgICAgIG9mZnNldDogMTAsXG4gICAgICBtZXRob2Q6ICdhdXRvJyxcbiAgICAgIHRhcmdldDogJydcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIG9mZnNldDogJ251bWJlcicsXG4gICAgICBtZXRob2Q6ICdzdHJpbmcnLFxuICAgICAgdGFyZ2V0OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIEFDVElWQVRFOiBcImFjdGl2YXRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBTQ1JPTEw6IFwic2Nyb2xsXCIgKyBFVkVOVF9LRVksXG4gICAgICBMT0FEX0RBVEFfQVBJOiBcImxvYWRcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWVxuICAgIH07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIERST1BET1dOX0lURU06ICdkcm9wZG93bi1pdGVtJyxcbiAgICAgIERST1BET1dOX01FTlU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIEFDVElWRTogJ2FjdGl2ZSdcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERBVEFfU1BZOiAnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJyxcbiAgICAgIEFDVElWRTogJy5hY3RpdmUnLFxuICAgICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgICBOQVZfTElOS1M6ICcubmF2LWxpbmsnLFxuICAgICAgTkFWX0lURU1TOiAnLm5hdi1pdGVtJyxcbiAgICAgIExJU1RfSVRFTVM6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgICAgIERST1BET1dOOiAnLmRyb3Bkb3duJyxcbiAgICAgIERST1BET1dOX0lURU1TOiAnLmRyb3Bkb3duLWl0ZW0nLFxuICAgICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZSdcbiAgICB9O1xuICAgIHZhciBPZmZzZXRNZXRob2QgPSB7XG4gICAgICBPRkZTRVQ6ICdvZmZzZXQnLFxuICAgICAgUE9TSVRJT046ICdwb3NpdGlvbidcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBTY3JvbGxTcHkgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQgPSBlbGVtZW50LnRhZ05hbWUgPT09ICdCT0RZJyA/IHdpbmRvdyA6IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yLk5BVl9MSU5LUyArIFwiLFwiICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yLkxJU1RfSVRFTVMgKyBcIixcIikgKyAodGhpcy5fY29uZmlnLnRhcmdldCArIFwiIFwiICsgU2VsZWN0b3IuRFJPUERPV05fSVRFTVMpO1xuICAgICAgICB0aGlzLl9vZmZzZXRzID0gW107XG4gICAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gMDtcbiAgICAgICAgJCQkMSh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudC5TQ1JPTEwsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2VzcyhldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG4gICAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgICB2YXIgX3Byb3RvID0gU2Nyb2xsU3B5LnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8ucmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zmc2V0TWV0aG9kLlBPU0lUSU9OO1xuICAgICAgICB2YXIgb2Zmc2V0TWV0aG9kID0gdGhpcy5fY29uZmlnLm1ldGhvZCA9PT0gJ2F1dG8nID8gYXV0b01ldGhvZCA6IHRoaXMuX2NvbmZpZy5tZXRob2Q7XG4gICAgICAgIHZhciBvZmZzZXRCYXNlID0gb2Zmc2V0TWV0aG9kID09PSBPZmZzZXRNZXRob2QuUE9TSVRJT04gPyB0aGlzLl9nZXRTY3JvbGxUb3AoKSA6IDA7XG4gICAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5fdGFyZ2V0cyA9IFtdO1xuICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSB0aGlzLl9nZXRTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgdmFyIHRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKTtcbiAgICAgICAgdGFyZ2V0cy5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0O1xuICAgICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRTZWxlY3Rvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldEJDUiA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8gKGZhdCk6IHJlbW92ZSBza2V0Y2ggcmVsaWFuY2Ugb24galF1ZXJ5IHBvc2l0aW9uL29mZnNldFxuICAgICAgICAgICAgICByZXR1cm4gWyQkJDEodGFyZ2V0KVtvZmZzZXRNZXRob2RdKCkudG9wICsgb2Zmc2V0QmFzZSwgdGFyZ2V0U2VsZWN0b3JdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHJldHVybiBhWzBdIC0gYlswXTtcbiAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIF90aGlzMi5fb2Zmc2V0cy5wdXNoKGl0ZW1bMF0pO1xuXG4gICAgICAgICAgX3RoaXMyLl90YXJnZXRzLnB1c2goaXRlbVsxXSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICAkJCQxKHRoaXMuX3Njcm9sbEVsZW1lbnQpLm9mZihFVkVOVF9LRVkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NlbGVjdG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3RhcmdldHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSBudWxsO1xuICAgICAgfTsgLy8gUHJpdmF0ZVxuXG5cbiAgICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIgaWQgPSAkJCQxKGNvbmZpZy50YXJnZXQpLmF0dHIoJ2lkJyk7XG5cbiAgICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICBpZCA9IFV0aWwuZ2V0VUlEKE5BTUUpO1xuICAgICAgICAgICAgJCQkMShjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25maWcudGFyZ2V0ID0gXCIjXCIgKyBpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbiBfZ2V0U2Nyb2xsVG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gdGhpcy5fc2Nyb2xsRWxlbWVudC5wYWdlWU9mZnNldCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRTY3JvbGxIZWlnaHQgPSBmdW5jdGlvbiBfZ2V0U2Nyb2xsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRPZmZzZXRIZWlnaHQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gd2luZG93LmlubmVySGVpZ2h0IDogdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3Byb2Nlc3MgPSBmdW5jdGlvbiBfcHJvY2VzcygpIHtcbiAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldDtcblxuICAgICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KCk7XG5cbiAgICAgICAgdmFyIG1heFNjcm9sbCA9IHRoaXMuX2NvbmZpZy5vZmZzZXQgKyBzY3JvbGxIZWlnaHQgLSB0aGlzLl9nZXRPZmZzZXRIZWlnaHQoKTtcblxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuX3RhcmdldHNbdGhpcy5fdGFyZ2V0cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbMF0gJiYgdGhpcy5fb2Zmc2V0c1swXSA+IDApIHtcbiAgICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuXG4gICAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gb2Zmc2V0TGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgdmFyIGlzQWN0aXZlVGFyZ2V0ID0gdGhpcy5fYWN0aXZlVGFyZ2V0ICE9PSB0aGlzLl90YXJnZXRzW2ldICYmIHNjcm9sbFRvcCA+PSB0aGlzLl9vZmZzZXRzW2ldICYmICh0eXBlb2YgdGhpcy5fb2Zmc2V0c1tpICsgMV0gPT09ICd1bmRlZmluZWQnIHx8IHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbaSArIDFdKTtcblxuICAgICAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fdGFyZ2V0c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG5cbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICB2YXIgcXVlcmllcyA9IHRoaXMuX3NlbGVjdG9yLnNwbGl0KCcsJyk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJvdy1ib2R5LXN0eWxlXG5cblxuICAgICAgICBxdWVyaWVzID0gcXVlcmllcy5tYXAoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdG9yICsgXCJbZGF0YS10YXJnZXQ9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXSxcIiArIChzZWxlY3RvciArIFwiW2hyZWY9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciAkbGluayA9ICQkJDEoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJpZXMuam9pbignLCcpKSkpO1xuXG4gICAgICAgIGlmICgkbGluay5oYXNDbGFzcyhDbGFzc05hbWUuRFJPUERPV05fSVRFTSkpIHtcbiAgICAgICAgICAkbGluay5jbG9zZXN0KFNlbGVjdG9yLkRST1BET1dOKS5maW5kKFNlbGVjdG9yLkRST1BET1dOX1RPR0dMRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgICAgJGxpbmsuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rIGFzIGFjdGl2ZVxuICAgICAgICAgICRsaW5rLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpOyAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG5cbiAgICAgICAgICAkbGluay5wYXJlbnRzKFNlbGVjdG9yLk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yLk5BVl9MSU5LUyArIFwiLCBcIiArIFNlbGVjdG9yLkxJU1RfSVRFTVMpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpOyAvLyBIYW5kbGUgc3BlY2lhbCBjYXNlIHdoZW4gLm5hdi1saW5rIGlzIGluc2lkZSAubmF2LWl0ZW1cblxuICAgICAgICAgICRsaW5rLnBhcmVudHMoU2VsZWN0b3IuTkFWX0xJU1RfR1JPVVApLnByZXYoU2VsZWN0b3IuTkFWX0lURU1TKS5jaGlsZHJlbihTZWxlY3Rvci5OQVZfTElOS1MpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCQkMSh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKEV2ZW50LkFDVElWQVRFLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9jbGVhciA9IGZ1bmN0aW9uIF9jbGVhcigpIHtcbiAgICAgICAgdmFyIG5vZGVzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3NlbGVjdG9yKSk7XG4gICAgICAgICQkJDEobm9kZXMpLmZpbHRlcihTZWxlY3Rvci5BQ1RJVkUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9ICQkJDEodGhpcykuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZztcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBTY3JvbGxTcHkodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKFNjcm9sbFNweSwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIFNjcm9sbFNweTtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMSh3aW5kb3cpLm9uKEV2ZW50LkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzY3JvbGxTcHlzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkRBVEFfU1BZKSk7XG4gICAgICB2YXIgc2Nyb2xsU3B5c0xlbmd0aCA9IHNjcm9sbFNweXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gc2Nyb2xsU3B5c0xlbmd0aDsgaS0tOykge1xuICAgICAgICB2YXIgJHNweSA9ICQkJDEoc2Nyb2xsU3B5c1tpXSk7XG5cbiAgICAgICAgU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkc3B5LCAkc3B5LmRhdGEoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweTtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBTY3JvbGxTcHk7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogdGFiLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBUYWIgPSBmdW5jdGlvbiAoJCQkMSkge1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENvbnN0YW50c1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuICAgIHZhciBOQU1FID0gJ3RhYic7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy50YWInO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgRXZlbnQgPSB7XG4gICAgICBISURFOiBcImhpZGVcIiArIEVWRU5UX0tFWSxcbiAgICAgIEhJRERFTjogXCJoaWRkZW5cIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgICBBQ1RJVkU6ICdhY3RpdmUnLFxuICAgICAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gICAgICBGQURFOiAnZmFkZScsXG4gICAgICBTSE9XOiAnc2hvdydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERST1BET1dOOiAnLmRyb3Bkb3duJyxcbiAgICAgIE5BVl9MSVNUX0dST1VQOiAnLm5hdiwgLmxpc3QtZ3JvdXAnLFxuICAgICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgICBBQ1RJVkVfVUw6ICc+IGxpID4gLmFjdGl2ZScsXG4gICAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtdG9nZ2xlPVwibGlzdFwiXScsXG4gICAgICBEUk9QRE9XTl9UT0dHTEU6ICcuZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAgIERST1BET1dOX0FDVElWRV9DSElMRDogJz4gLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZSdcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBUYWIgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBUYWIoZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBUYWIucHJvdG90eXBlO1xuXG4gICAgICAvLyBQdWJsaWNcbiAgICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlICYmIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuQUNUSVZFKSB8fCAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5ESVNBQkxFRCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGFyZ2V0O1xuICAgICAgICB2YXIgcHJldmlvdXM7XG4gICAgICAgIHZhciBsaXN0RWxlbWVudCA9ICQkJDEodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3Rvci5OQVZfTElTVF9HUk9VUClbMF07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgaXRlbVNlbGVjdG9yID0gbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdVTCcgPyBTZWxlY3Rvci5BQ1RJVkVfVUwgOiBTZWxlY3Rvci5BQ1RJVkU7XG4gICAgICAgICAgcHJldmlvdXMgPSAkJCQxLm1ha2VBcnJheSgkJCQxKGxpc3RFbGVtZW50KS5maW5kKGl0ZW1TZWxlY3RvcikpO1xuICAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGlkZUV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5ISURFLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHNob3dFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0hPVywge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgICQkJDEocHJldmlvdXMpLnRyaWdnZXIoaGlkZUV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgdmFyIGhpZGRlbkV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5ISURERU4sIHtcbiAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IF90aGlzLl9lbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHNob3duRXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LlNIT1dOLCB7XG4gICAgICAgICAgICByZWxhdGVkVGFyZ2V0OiBwcmV2aW91c1xuICAgICAgICAgIH0pO1xuICAgICAgICAgICQkJDEocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpO1xuICAgICAgICAgICQkJDEoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2hvd25FdmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRhcmdldCwgdGFyZ2V0LnBhcmVudE5vZGUsIGNvbXBsZXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgICQkJDEucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgfTsgLy8gUHJpdmF0ZVxuXG5cbiAgICAgIF9wcm90by5fYWN0aXZhdGUgPSBmdW5jdGlvbiBfYWN0aXZhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICB2YXIgYWN0aXZlRWxlbWVudHM7XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJykge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gJCQkMShjb250YWluZXIpLmZpbmQoU2VsZWN0b3IuQUNUSVZFX1VMKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9ICQkJDEoY29udGFpbmVyKS5jaGlsZHJlbihTZWxlY3Rvci5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRzWzBdO1xuICAgICAgICB2YXIgaXNUcmFuc2l0aW9uaW5nID0gY2FsbGJhY2sgJiYgYWN0aXZlICYmICQkJDEoYWN0aXZlKS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSk7XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChhY3RpdmUgJiYgaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlKTtcbiAgICAgICAgICAkJCQxKGFjdGl2ZSkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAkJCQxKGFjdGl2ZSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cgKyBcIiBcIiArIENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgIHZhciBkcm9wZG93bkNoaWxkID0gJCQkMShhY3RpdmUucGFyZW50Tm9kZSkuZmluZChTZWxlY3Rvci5EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQpWzBdO1xuXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ2hpbGQpIHtcbiAgICAgICAgICAgICQkJDEoZHJvcGRvd25DaGlsZCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICAgIGFjdGl2ZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJCQkMShlbGVtZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcblxuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgVXRpbC5yZWZsb3coZWxlbWVudCk7XG4gICAgICAgICQkJDEoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuXG4gICAgICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUgJiYgJCQkMShlbGVtZW50LnBhcmVudE5vZGUpLmhhc0NsYXNzKENsYXNzTmFtZS5EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgICAgIHZhciBkcm9wZG93bkVsZW1lbnQgPSAkJCQxKGVsZW1lbnQpLmNsb3Nlc3QoU2VsZWN0b3IuRFJPUERPV04pWzBdO1xuXG4gICAgICAgICAgaWYgKGRyb3Bkb3duRWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGRyb3Bkb3duVG9nZ2xlTGlzdCA9IFtdLnNsaWNlLmNhbGwoZHJvcGRvd25FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuRFJPUERPV05fVE9HR0xFKSk7XG4gICAgICAgICAgICAkJCQxKGRyb3Bkb3duVG9nZ2xlTGlzdCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyICR0aGlzID0gJCQkMSh0aGlzKTtcbiAgICAgICAgICB2YXIgZGF0YSA9ICR0aGlzLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IFRhYih0aGlzKTtcbiAgICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKFRhYiwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIFRhYjtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMShkb2N1bWVudCkub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCQkMSh0aGlzKSwgJ3Nob3cnKTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRhYjtcbiAgfSgkKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiBpbmRleC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAoZnVuY3Rpb24gKCQkJDEpIHtcbiAgICBpZiAodHlwZW9mICQkJDEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gJCQkMS5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgIHZhciBtaW5NYWpvciA9IDE7XG4gICAgdmFyIGx0TWFqb3IgPSAyO1xuICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgdmFyIG1pblBhdGNoID0gMTtcbiAgICB2YXIgbWF4TWFqb3IgPSA0O1xuXG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpO1xuICAgIH1cbiAgfSkoJCk7XG5cbiAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgZXhwb3J0cy5BbGVydCA9IEFsZXJ0O1xuICBleHBvcnRzLkJ1dHRvbiA9IEJ1dHRvbjtcbiAgZXhwb3J0cy5DYXJvdXNlbCA9IENhcm91c2VsO1xuICBleHBvcnRzLkNvbGxhcHNlID0gQ29sbGFwc2U7XG4gIGV4cG9ydHMuRHJvcGRvd24gPSBEcm9wZG93bjtcbiAgZXhwb3J0cy5Nb2RhbCA9IE1vZGFsO1xuICBleHBvcnRzLlBvcG92ZXIgPSBQb3BvdmVyO1xuICBleHBvcnRzLlNjcm9sbHNweSA9IFNjcm9sbFNweTtcbiAgZXhwb3J0cy5UYWIgPSBUYWI7XG4gIGV4cG9ydHMuVG9vbHRpcCA9IFRvb2x0aXA7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5qcy5tYXBcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n"); - -/***/ }), -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */, -/* 10 */, -/* 11 */, -/* 12 */, -/* 13 */, -/* 14 */, -/* 15 */, -/* 16 */, -/* 17 */, -/* 18 */, -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */, -/* 23 */, -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */, -/* 28 */, -/* 29 */, -/* 30 */, -/* 31 */, -/* 32 */, -/* 33 */, -/* 34 */, -/* 35 */, -/* 36 */, -/* 37 */, -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */, -/* 42 */, -/* 43 */, -/* 44 */, -/* 45 */ +/***/ 46: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(46); +module.exports = __webpack_require__(47); /***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { -eval("__webpack_require__(47);\n__webpack_require__(49);\n__webpack_require__(50);\n__webpack_require__(51);\n__webpack_require__(52);\n__webpack_require__(53);\n__webpack_require__(54);\n__webpack_require__(55);\n__webpack_require__(56);\n__webpack_require__(57);\n__webpack_require__(58);\n__webpack_require__(59);\n__webpack_require__(60);\n__webpack_require__(61);\n__webpack_require__(62);\n__webpack_require__(63);\n__webpack_require__(64);\n__webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"../../../vendor/almasaeed2010/adminlte/dist/dist/js/demo.js\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); // TODO: Own script :D//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FkbWluLmpzPzI5ODYiXSwibmFtZXMiOlsicmVxdWlyZSJdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSx1TEFBUixFLENBQXdFIiwiZmlsZSI6IjQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS11aS9qcXVlcnktdWkubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL3JhcGhhZWwvcmFwaGFlbC5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9tb3JyaXMuanMvbW9ycmlzLm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1zcGFya2xpbmUvZGlzdC9qcXVlcnkuc3BhcmtsaW5lLm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtMS4yLjIubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL3BsdWdpbnMvanZlY3Rvcm1hcC9qcXVlcnktanZlY3Rvcm1hcC13b3JsZC1taWxsLWVuLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5LWtub2IvZGlzdC9qcXVlcnkua25vYi5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9tb21lbnQvbWluL21vbWVudC5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1kYXRlcGlja2VyL2Rpc3QvanMvYm9vdHN0cmFwLWRhdGVwaWNrZXIubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL3BsdWdpbnMvYm9vdHN0cmFwLXd5c2lodG1sNS9ib290c3RyYXAzLXd5c2lodG1sNS5hbGwubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5LXNsaW1zY3JvbGwvanF1ZXJ5LnNsaW1zY3JvbGwubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvZmFzdGNsaWNrL2xpYi9mYXN0Y2xpY2suanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvZGlzdC9qcy9hZG1pbmx0ZS5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvZGlzdC9qcy9wYWdlcy9kYXNoYm9hcmQuanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvZGlzdC9kaXN0L2pzL2RlbW8uanNcIik7IC8vIFRPRE86IE93biBzY3JpcHQgOkRcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FkbWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n"); - -/***/ }), -/* 47 */ +/***/ 47: /***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==\"function\"&&__webpack_require__(48)&&!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function(){return w}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9kaXN0L2pxdWVyeS5taW4uanM/OTVkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsYUFBYSx1R0FBdUcsMkVBQTJFLFlBQVksTUFBTSxzREFBc0QsYUFBYSw0RkFBNEYsbUVBQW1FLGlCQUFpQix3REFBd0QsaUJBQWlCLDZCQUE2QixJQUFJLDRCQUE0QixrQkFBa0IseUNBQXlDLDJDQUEyQyxnREFBZ0QsY0FBYyw2RkFBNkYsOEJBQThCLDBCQUEwQix3Q0FBd0Msa0JBQWtCLHlEQUF5RCxvQkFBb0IsaUJBQWlCLDREQUE0RCx1QkFBdUIsb0NBQW9DLDJCQUEyQixrQkFBa0Isc0JBQXNCLGlCQUFpQiwrQ0FBK0MscUJBQXFCLEdBQUcsa0JBQWtCLCtDQUErQyxrQkFBa0Isa0JBQWtCLGlCQUFpQixtQkFBbUIsZ0JBQWdCLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLDJDQUEyQyxvQ0FBb0MsaUNBQWlDLGtDQUFrQyw2QkFBNkIsZ0RBQWdELHFDQUFxQyxzQkFBc0IsSUFBSSxpTEFBaUwsNkNBQTZDLFNBQVMsV0FBVyx3RkFBd0YsbUJBQW1CLGtCQUFrQiwyQkFBMkIsUUFBUSxxSUFBcUksMkJBQTJCLE1BQU0sb0JBQW9CLFNBQVMsd0JBQXdCLEtBQUssb0JBQW9CLFVBQVUsU0FBUyxlQUFlLElBQUksc0NBQXNDLGtEQUFrRCxTQUFTLGtCQUFrQix1Q0FBdUMseUJBQXlCLFlBQVksaUZBQWlGLHlCQUF5QixnQ0FBZ0MscUJBQXFCLG1DQUFtQyxJQUFJLGdCQUFnQixvQkFBb0Isc0JBQXNCLG1DQUFtQyxJQUFJLHFDQUFxQyxTQUFTLHFCQUFxQixpQkFBaUIsdUJBQXVCLElBQUkscUNBQXFDLGlEQUFpRCxxQkFBcUIsa0JBQWtCLCtLQUErSyxvQ0FBb0MsRUFBRSxjQUFjLHlDQUF5Qyw0RUFBNEUsa0JBQWtCLDBIQUEw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LHlEQUF5RCxhQUFhLEdBQUcsVUFBVSxpREFBaUQsZUFBZSx3QkFBd0Isb0JBQW9CLDhCQUE4QixNQUFNLDRFQUE0RSx5REFBeUQsd0JBQXdCLHNDQUFzQywrQ0FBK0MsMkRBQTJELEVBQUUsVUFBVSw4QkFBOEIsZUFBZSxRQUFRLHlDQUF5QyxlQUFlLHNCQUFzQix5RkFBeUYsOEJBQThCLE1BQU0sK1BBQStQLGtCQUFrQixFQUFFLDBOQUEwTixzQkFBc0IsK0RBQStELGVBQWUsb0JBQW9CLDRDQUE0QyxlQUFlLHFCQUFxQiwyQkFBMkIsc0JBQXNCLDBCQUEwQiw0QkFBNEIsd0JBQXdCLDRCQUE0QixvRUFBb0Usd0JBQXdCLFVBQVUsdUZBQXVGLG9EQUFvRCxrQ0FBa0MseUJBQXlCLDRCQUE0Qix1SkFBdUosZ0JBQWdCLDREQUE0RCxtSUFBc0UsU0FBUztBQUFBLHFHQUFFLHVCQUF1QixnQ0FBZ0MsMERBQTBELHVCQUF1QiIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBqUXVlcnkgdjMuMy4xIHwgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqL1xuIWZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiB0KGUpfTp0KGUpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W10scj1lLmRvY3VtZW50LGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLG89bi5zbGljZSxhPW4uY29uY2F0LHM9bi5wdXNoLHU9bi5pbmRleE9mLGw9e30sYz1sLnRvU3RyaW5nLGY9bC5oYXNPd25Qcm9wZXJ0eSxwPWYudG9TdHJpbmcsZD1wLmNhbGwoT2JqZWN0KSxoPXt9LGc9ZnVuY3Rpb24gZSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdC5ub2RlVHlwZX0seT1mdW5jdGlvbiBlKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHY9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxvPSh0PXR8fHIpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aWYoby50ZXh0PWUsbilmb3IoaSBpbiB2KW5baV0mJihvW2ldPW5baV0pO3QuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9PWU/ZStcIlwiOlwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2xbYy5jYWxsKGUpXXx8XCJvYmplY3RcIjp0eXBlb2YgZX12YXIgYj1cIjMuMy4xXCIsdz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdy5mbi5pbml0KGUsdCl9LFQ9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO3cuZm49dy5wcm90b3R5cGU9e2pxdWVyeTpcIjMuMy4xXCIsY29uc3RydWN0b3I6dyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP28uY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHcuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobj49MCYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpzLHNvcnQ6bi5zb3J0LHNwbGljZTpuLnNwbGljZX0sdy5leHRlbmQ9dy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBhJiYobD1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLFwib2JqZWN0XCI9PXR5cGVvZiBhfHxnKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0sYSE9PShyPWVbdF0pJiYobCYmciYmKHcuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJncuaXNQbGFpbk9iamVjdChuKT9uOnt9LGFbdF09dy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHcuZXh0ZW5kKHtleHBhbmRvOlwialF1ZXJ5XCIrKFwiMy4zLjFcIitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cXEQvZyxcIlwiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fFwiW29iamVjdCBPYmplY3RdXCIhPT1jLmNhbGwoZSkpJiYoISh0PWkoZSkpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWYuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3IpJiZwLmNhbGwobik9PT1kKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe20oZSl9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYoQyhlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOihlK1wiXCIpLnJlcGxhY2UoVCxcIlwiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihDKE9iamVjdChlKSk/dy5tZXJnZShuLFwic3RyaW5nXCI9PXR5cGVvZiBlP1tlXTplKTpzLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6dS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGgscz0hbjtvPGE7bysrKShyPSF0KGVbb10sbykpIT09cyYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLHM9W107aWYoQyhlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmcy5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJnMucHVzaChpKTtyZXR1cm4gYS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6aH0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHcuZm5bU3ltYm9sLml0ZXJhdG9yXT1uW1N5bWJvbC5pdGVyYXRvcl0pLHcuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7bFtcIltvYmplY3QgXCIrdCtcIl1cIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gQyhlKXt2YXIgdD0hIWUmJlwibGVuZ3RoXCJpbiBlJiZlLmxlbmd0aCxuPXgoZSk7cmV0dXJuIWcoZSkmJiF5KGUpJiYoXCJhcnJheVwiPT09bnx8MD09PXR8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX12YXIgRT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGwsYyxmLHAsZCxoLGcseSx2LG0seCxiPVwic2l6emxlXCIrMSpuZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxFPWFlKCksaz1hZSgpLFM9YWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoZj0hMCksMH0sTj17fS5oYXNPd25Qcm9wZXJ0eSxBPVtdLGo9QS5wb3AscT1BLnB1c2gsTD1BLnB1c2gsSD1BLnNsaWNlLE89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFA9XCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLE09XCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFI9XCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLEk9XCJcXFxcW1wiK00rXCIqKFwiK1IrXCIpKD86XCIrTStcIiooWypeJHwhfl0/PSlcIitNK1wiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIrUitcIikpfClcIitNK1wiKlxcXFxdXCIsVz1cIjooXCIrUitcIikoPzpcXFxcKCgoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXwoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIrSStcIikqKXwuKilcXFxcKXwpXCIsJD1uZXcgUmVnRXhwKE0rXCIrXCIsXCJnXCIpLEI9bmV3IFJlZ0V4cChcIl5cIitNK1wiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIitNK1wiKyRcIixcImdcIiksRj1uZXcgUmVnRXhwKFwiXlwiK00rXCIqLFwiK00rXCIqXCIpLF89bmV3IFJlZ0V4cChcIl5cIitNK1wiKihbPit+XXxcIitNK1wiKVwiK00rXCIqXCIpLHo9bmV3IFJlZ0V4cChcIj1cIitNK1wiKihbXlxcXFxdJ1xcXCJdKj8pXCIrTStcIipcXFxcXVwiLFwiZ1wiKSxYPW5ldyBSZWdFeHAoVyksVT1uZXcgUmVnRXhwKFwiXlwiK1IrXCIkXCIpLFY9e0lEOm5ldyBSZWdFeHAoXCJeIyhcIitSK1wiKVwiKSxDTEFTUzpuZXcgUmVnRXhwKFwiXlxcXFwuKFwiK1IrXCIpXCIpLFRBRzpuZXcgUmVnRXhwKFwiXihcIitSK1wifFsqXSlcIiksQVRUUjpuZXcgUmVnRXhwKFwiXlwiK0kpLFBTRVVETzpuZXcgUmVnRXhwKFwiXlwiK1cpLENISUxEOm5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiK00rXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIitNK1wiKig/OihbKy1dfClcIitNK1wiKihcXFxcZCspfCkpXCIrTStcIipcXFxcKXwpXCIsXCJpXCIpLGJvb2w6bmV3IFJlZ0V4cChcIl4oPzpcIitQK1wiKSRcIixcImlcIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoXCJeXCIrTStcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIrTStcIiooKD86LVxcXFxkKT9cXFxcZCopXCIrTStcIipcXFxcKXwpKD89W14tXXwkKVwiLFwiaVwiKX0sRz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXFxkJC9pLFE9L15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxKPS9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLEs9L1srfl0vLFo9bmV3IFJlZ0V4cChcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiK00rXCI/fChcIitNK1wiKXwuKVwiLFwiaWdcIiksZWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwiMHhcIit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sdGU9LyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9cIlxcMFwiPT09ZT9cIlxcdWZmZmRcIjplLnNsaWNlKDAsLTEpK1wiXFxcXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrXCIgXCI6XCJcXFxcXCIrZX0scmU9ZnVuY3Rpb24oKXtwKCl9LGllPW1lKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmKFwiZm9ybVwiaW4gZXx8XCJsYWJlbFwiaW4gZSl9LHtkaXI6XCJwYXJlbnROb2RlXCIsbmV4dDpcImxlZ2VuZFwifSk7dHJ5e0wuYXBwbHkoQT1ILmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7TD17YXBwbHk6QS5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsSC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UoZSx0LHIsaSl7dmFyIG8scyxsLGMsZixoLHYsbT10JiZ0Lm93bmVyRG9jdW1lbnQsVD10P3Qubm9kZVR5cGU6OTtpZihyPXJ8fFtdLFwic3RyaW5nXCIhPXR5cGVvZiBlfHwhZXx8MSE9PVQmJjkhPT1UJiYxMSE9PVQpcmV0dXJuIHI7aWYoIWkmJigodD90Lm93bmVyRG9jdW1lbnR8fHQ6dykhPT1kJiZwKHQpLHQ9dHx8ZCxnKSl7aWYoMTEhPT1UJiYoZj1KLmV4ZWMoZSkpKWlmKG89ZlsxXSl7aWYoOT09PVQpe2lmKCEobD10LmdldEVsZW1lbnRCeUlkKG8pKSlyZXR1cm4gcjtpZihsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZSBpZihtJiYobD1tLmdldEVsZW1lbnRCeUlkKG8pKSYmeCh0LGwpJiZsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZXtpZihmWzJdKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigobz1mWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEwuYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLHJ9aWYobi5xc2EmJiFTW2UrXCIgXCJdJiYoIXl8fCF5LnRlc3QoZSkpKXtpZigxIT09VCltPXQsdj1lO2Vsc2UgaWYoXCJvYmplY3RcIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGM9dC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/Yz1jLnJlcGxhY2UodGUsbmUpOnQuc2V0QXR0cmlidXRlKFwiaWRcIixjPWIpLHM9KGg9YShlKSkubGVuZ3RoO3doaWxlKHMtLSloW3NdPVwiI1wiK2MrXCIgXCIrdmUoaFtzXSk7dj1oLmpvaW4oXCIsXCIpLG09Sy50ZXN0KGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0fWlmKHYpdHJ5e3JldHVybiBMLmFwcGx5KHIsbS5xdWVyeVNlbGVjdG9yQWxsKHYpKSxyfWNhdGNoKGUpe31maW5hbGx5e2M9PT1iJiZ0LnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIHUoZS5yZXBsYWNlKEIsXCIkMVwiKSx0LHIsaSl9ZnVuY3Rpb24gYWUoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4saSl7cmV0dXJuIGUucHVzaChuK1wiIFwiKT5yLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbitcIiBcIl09aX1yZXR1cm4gdH1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZVtiXT0hMCxlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49ZS5zcGxpdChcInxcIiksaT1uLmxlbmd0aDt3aGlsZShpLS0pci5hdHRySGFuZGxlW25baV1dPXR9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cImlucHV0XCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHBlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKFwiaW5wdXRcIj09PW58fFwiYnV0dG9uXCI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVyblwiZm9ybVwiaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD9cImxhYmVsXCJpbiB0P1wibGFiZWxcImluIHQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUuZGlzYWJsZWQ9PT1lOnQuZGlzYWJsZWQ9PT1lOnQuaXNEaXNhYmxlZD09PWV8fHQuaXNEaXNhYmxlZCE9PSFlJiZpZSh0KT09PWU6dC5kaXNhYmxlZD09PWU6XCJsYWJlbFwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBzZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxzZShmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1uPW9lLnN1cHBvcnQ9e30sbz1vZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISF0JiZcIkhUTUxcIiE9PXQubm9kZU5hbWV9LHA9b2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsaSxhPWU/ZS5vd25lckRvY3VtZW50fHxlOnc7cmV0dXJuIGEhPT1kJiY5PT09YS5ub2RlVHlwZSYmYS5kb2N1bWVudEVsZW1lbnQ/KGQ9YSxoPWQuZG9jdW1lbnRFbGVtZW50LGc9IW8oZCksdyE9PWQmJihpPWQuZGVmYXVsdFZpZXcpJiZpLnRvcCE9PWkmJihpLmFkZEV2ZW50TGlzdGVuZXI/aS5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIscmUsITEpOmkuYXR0YWNoRXZlbnQmJmkuYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLHJlKSksbi5hdHRyaWJ1dGVzPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT1cImlcIiwhZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGQuY3JlYXRlQ29tbWVudChcIlwiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1RLnRlc3QoZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxuLmdldEJ5SWQ9dWUoZnVuY3Rpb24oZSl7cmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQ9YiwhZC5nZXRFbGVtZW50c0J5TmFtZXx8IWQuZ2V0RWxlbWVudHNCeU5hbWUoYikubGVuZ3RofSksbi5nZXRCeUlkPyhyLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZShcImlkXCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZnKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooci5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlJiZlLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXTtpPXQuZ2V0RWxlbWVudHNCeU5hbWUoZSkscj0wO3doaWxlKG89aVtyKytdKWlmKChuPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6bi5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoXCIqXCI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxyLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sdj1bXSx5PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJih1ZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD1cIjxhIGlkPSdcIitiK1wiJz48L2E+PHNlbGVjdCBpZD0nXCIrYitcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLGUucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCYmeS5wdXNoKFwiWypeJF09XCIrTStcIiooPzonJ3xcXFwiXFxcIilcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fHkucHVzaChcIlxcXFxbXCIrTStcIiooPzp2YWx1ZXxcIitQK1wiKVwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWR+PVwiK2IrXCItXVwiKS5sZW5ndGh8fHkucHVzaChcIn49XCIpLGUucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aHx8eS5wdXNoKFwiOmNoZWNrZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiYSNcIitiK1wiKypcIikubGVuZ3RofHx5LnB1c2goXCIuIy4rWyt+XVwiKX0pLHVlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIHQ9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmeS5wdXNoKFwibmFtZVwiK00rXCIqWypeJHwhfl0/PVwiKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoJiZ5LnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGgmJnkucHVzaChcIjplbmFibGVkXCIsXCI6ZGlzYWJsZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKSx5LnB1c2goXCIsLio6XCIpfSkpLChuLm1hdGNoZXNTZWxlY3Rvcj1RLnRlc3QobT1oLm1hdGNoZXN8fGgud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxoLm1vek1hdGNoZXNTZWxlY3Rvcnx8aC5vTWF0Y2hlc1NlbGVjdG9yfHxoLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnVlKGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsXCIqXCIpLG0uY2FsbChlLFwiW3MhPScnXTp4XCIpLHYucHVzaChcIiE9XCIsVyl9KSx5PXkubGVuZ3RoJiZuZXcgUmVnRXhwKHkuam9pbihcInxcIikpLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKFwifFwiKSksdD1RLnRlc3QoaC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseD10fHxRLnRlc3QoaC5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciByPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiByfHwoMSYocj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFuLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PXI/ZT09PWR8fGUub3duZXJEb2N1bWVudD09PXcmJngodyxlKT8tMTp0PT09ZHx8dC5vd25lckRvY3VtZW50PT09dyYmeCh3LHQpPzE6Yz9PKGMsZSktTyhjLHQpOjA6NCZyPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBmPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PWQ/LTE6dD09PWQ/MTppPy0xOm8/MTpjP08oYyxlKS1PKGMsdCk6MDtpZihpPT09bylyZXR1cm4gY2UoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP2NlKGFbcl0sc1tyXSk6YVtyXT09PXc/LTE6c1tyXT09PXc/MTowfSxkKTpkfSxvZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKGUsbnVsbCxudWxsLHQpfSxvZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtpZigoZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSksdD10LnJlcGxhY2UoeixcIj0nJDEnXVwiKSxuLm1hdGNoZXNTZWxlY3RvciYmZyYmIVNbdCtcIiBcIl0mJighdnx8IXYudGVzdCh0KSkmJigheXx8IXkudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQpO2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG9lKHQsZCxudWxsLFtlXSkubGVuZ3RoPjB9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHgoZSx0KX0sb2UuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKTt2YXIgaT1yLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPWkmJk4uY2FsbChyLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9pKGUsdCwhZyk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1vP286bi5hdHRyaWJ1dGVzfHwhZz9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGx9LG9lLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZStcIlwiKS5yZXBsYWNlKHRlLG5lKX0sb2UuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIrZSl9LG9lLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKGY9IW4uZGV0ZWN0RHVwbGljYXRlcyxjPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGYpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBjPW51bGwsZX0saT1vZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49XCJcIixyPTAsbz1lLm5vZGVUeXBlO2lmKG8pe2lmKDE9PT1vfHw5PT09b3x8MTE9PT1vKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9aShlKX1lbHNlIGlmKDM9PT1vfHw0PT09bylyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSB3aGlsZSh0PWVbcisrXSluKz1pKHQpO3JldHVybiBufSwocj1vZS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpzZSxtYXRjaDpWLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7XCI+XCI6e2RpcjpcInBhcmVudE5vZGVcIixmaXJzdDohMH0sXCIgXCI6e2RpcjpcInBhcmVudE5vZGVcIn0sXCIrXCI6e2RpcjpcInByZXZpb3VzU2libGluZ1wiLGZpcnN0OiEwfSxcIn5cIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKFosZWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fFwiXCIpLnJlcGxhY2UoWixlZSksXCJ+PVwiPT09ZVsyXSYmKGVbM109XCIgXCIrZVszXStcIiBcIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksXCJudGhcIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b2UuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooXCJldmVuXCI9PT1lWzNdfHxcIm9kZFwiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fFwib2RkXCI9PT1lWzNdKSk6ZVszXSYmb2UuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNl0mJmVbMl07cmV0dXJuIFYuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8XCJcIjpuJiZYLnRlc3QobikmJih0PWEobiwhMCkpJiYodD1uLmluZGV4T2YoXCIpXCIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSkudG9Mb3dlckNhc2UoKTtyZXR1cm5cIipcIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1FW2UrXCIgXCJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKFwiKF58XCIrTStcIilcIitlK1wiKFwiK00rXCJ8JClcIikpJiZFKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChcInN0cmluZ1wiPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vZS5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/XCIhPVwiPT09dDohdHx8KGkrPVwiXCIsXCI9XCI9PT10P2k9PT1uOlwiIT1cIj09PXQ/aSE9PW46XCJePVwiPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOlwiKj1cIj09PXQ/biYmaS5pbmRleE9mKG4pPi0xOlwiJD1cIj09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjpcIn49XCI9PT10PyhcIiBcIitpLnJlcGxhY2UoJCxcIiBcIikrXCIgXCIpLmluZGV4T2Yobik+LTE6XCJ8PVwiPT09dCYmKGk9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uK1wiLVwiKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPVwibnRoXCIhPT1lLnNsaWNlKDAsMyksYT1cImxhc3RcIiE9PWUuc2xpY2UoLTQpLHM9XCJvZi10eXBlXCI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT9cIm5leHRTaWJsaW5nXCI6XCJwcmV2aW91c1NpYmxpbmdcIix5PXQucGFyZW50Tm9kZSx2PXMmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxtPSF1JiYhcyx4PSExO2lmKHkpe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT12OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz1cIm9ubHlcIj09PWUmJiFoJiZcIm5leHRTaWJsaW5nXCJ9cmV0dXJuITB9aWYoaD1bYT95LmZpcnN0Q2hpbGQ6eS5sYXN0Q2hpbGRdLGEmJm0pe3g9KGQ9KGw9KGM9KGY9KHA9eSlbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV18fFtdKVswXT09PVQmJmxbMV0pJiZsWzJdLHA9ZCYmeS5jaGlsZE5vZGVzW2RdO3doaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKDE9PT1wLm5vZGVUeXBlJiYrK3gmJnA9PT10KXtjW2VdPVtULGQseF07YnJlYWt9fWVsc2UgaWYobSYmKHg9ZD0obD0oYz0oZj0ocD10KVtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXXx8W10pWzBdPT09VCYmbFsxXSksITE9PT14KXdoaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpJiYrK3gmJihtJiYoKGM9KGY9cFtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXT1bVCx4XSkscD09PXQpKWJyZWFrO3JldHVybih4LT1pKT09PXJ8fHglcj09MCYmeC9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLGk9ci5wc2V1ZG9zW2VdfHxyLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b2UuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2UpO3JldHVybiBpW2JdP2kodCk6aS5sZW5ndGg+MT8obj1bZSxlLFwiXCIsdF0sci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/c2UoZnVuY3Rpb24oZSxuKXt2YXIgcixvPWkoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSllW3I9TyhlLG9bYV0pXT0hKG5bcl09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gaShlLDAsbil9KTppfX0scHNldWRvczp7bm90OnNlKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1zKGUucmVwbGFjZShCLFwiJDFcIikpO3JldHVybiByW2JdP3NlKGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGE9cihlLG51bGwsaSxbXSkscz1lLmxlbmd0aDt3aGlsZShzLS0pKG89YVtzXSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6c2UoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvZShlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZShaLGVlKSxmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGkodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpzZShmdW5jdGlvbihlKXtyZXR1cm4gVS50ZXN0KGV8fFwiXCIpfHxvZS5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK2UpLGU9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG97aWYobj1nP3QubGFuZzp0LmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpfHx0LmdldEF0dHJpYnV0ZShcImxhbmdcIikpcmV0dXJuKG49bi50b0xvd2VyQ2FzZSgpKT09PWV8fDA9PT1uLmluZGV4T2YoZStcIi1cIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09aH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kLmFjdGl2ZUVsZW1lbnQmJighZC5oYXNGb2N1c3x8ZC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpkZSghMSksZGlzYWJsZWQ6ZGUoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PXQmJiEhZS5jaGVja2VkfHxcIm9wdGlvblwiPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hci5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFkudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEcudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT10JiZcImJ1dHRvblwiPT09ZS50eXBlfHxcImJ1dHRvblwiPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImlucHV0XCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpoZShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aGUoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmhlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpoZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OmhlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1yLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pci5wc2V1ZG9zW3RdPWZlKHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0pci5wc2V1ZG9zW3RdPXBlKHQpO2Z1bmN0aW9uIHllKCl7fXllLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgeWUsYT1vZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLGksbyxhLHMsdSxsLGM9a1tlK1wiIFwiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsdT1bXSxsPXIucHJlRmlsdGVyO3doaWxlKHMpe24mJiEoaT1GLmV4ZWMocykpfHwoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLHUucHVzaChvPVtdKSksbj0hMSwoaT1fLmV4ZWMocykpJiYobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6aVswXS5yZXBsYWNlKEIsXCIgXCIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gci5maWx0ZXIpIShpPVZbYV0uZXhlYyhzKSl8fGxbYV0mJiEoaT1sW2FdKGkpKXx8KG49aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczppfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9vZS5lcnJvcihlKTprKGUsdSkuc2xpY2UoMCl9O2Z1bmN0aW9uIHZlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj1cIlwiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBtZShlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmXCJwYXJlbnROb2RlXCI9PT1vLHM9QysrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixpKXt3aGlsZSh0PXRbcl0paWYoMT09PXQubm9kZVR5cGV8fGEpcmV0dXJuIGUodCxuLGkpO3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxmLHA9W1Qsc107aWYodSl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8YSkmJmUodCxuLHUpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKWlmKGY9dFtiXXx8KHRbYl09e30pLGM9Zlt0LnVuaXF1ZUlEXXx8KGZbdC51bmlxdWVJRF09e30pLGkmJmk9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpdD10W3JdfHx0O2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT1UJiZsWzFdPT09cylyZXR1cm4gcFsyXT1sWzJdO2lmKGNbb109cCxwWzJdPWUodCxuLHUpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBiZShlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKW9lKGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB3ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhPVtdLHM9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtzPHU7cysrKShvPWVbc10pJiYobiYmIW4obyxyLGkpfHwoYS5wdXNoKG8pLGwmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPVRlKHIpKSxpJiYhaVtiXSYmKGk9VGUoaSxvKSksc2UoZnVuY3Rpb24obyxhLHMsdSl7dmFyIGwsYyxmLHA9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8YmUodHx8XCIqXCIscy5ub2RlVHlwZT9bc106cyxbXSkseT0hZXx8IW8mJnQ/Zzp3ZShnLHAsZSxzLHUpLHY9bj9pfHwobz9lOmh8fHIpP1tdOmE6eTtpZihuJiZuKHksdixzLHUpLHIpe2w9d2UodixkKSxyKGwsW10scyx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkoZj1sW2NdKSYmKHZbZFtjXV09ISh5W2RbY11dPWYpKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiZsLnB1c2goeVtjXT1mKTtpKG51bGwsdj1bXSxsLHUpfWM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiYobD1pP08obyxmKTpwW2NdKT4tMSYmKG9bbF09IShhW2xdPWYpKX19ZWxzZSB2PXdlKHY9PT1hP3Yuc3BsaWNlKGgsdi5sZW5ndGgpOnYpLGk/aShudWxsLGEsdix1KTpMLmFwcGx5KGEsdil9KX1mdW5jdGlvbiBDZShlKXtmb3IodmFyIHQsbixpLG89ZS5sZW5ndGgsYT1yLnJlbGF0aXZlW2VbMF0udHlwZV0scz1hfHxyLnJlbGF0aXZlW1wiIFwiXSx1PWE/MTowLGM9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxmPW1lKGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSk+LTF9LHMsITApLHA9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hYSYmKHJ8fG4hPT1sKXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOmYoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTt1PG87dSsrKWlmKG49ci5yZWxhdGl2ZVtlW3VdLnR5cGVdKXA9W21lKHhlKHApLG4pXTtlbHNle2lmKChuPXIuZmlsdGVyW2VbdV0udHlwZV0uYXBwbHkobnVsbCxlW3VdLm1hdGNoZXMpKVtiXSl7Zm9yKGk9Kyt1O2k8bztpKyspaWYoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKWJyZWFrO3JldHVybiBUZSh1PjEmJnhlKHApLHU+MSYmdmUoZS5zbGljZSgwLHUtMSkuY29uY2F0KHt2YWx1ZTpcIiBcIj09PWVbdS0yXS50eXBlP1wiKlwiOlwiXCJ9KSkucmVwbGFjZShCLFwiJDFcIiksbix1PGkmJkNlKGUuc2xpY2UodSxpKSksaTxvJiZDZShlPWUuc2xpY2UoaSkpLGk8byYmdmUoZSkpfXAucHVzaChuKX1yZXR1cm4geGUocCl9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgbj10Lmxlbmd0aD4wLGk9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKG8sYSxzLHUsYyl7dmFyIGYsaCx5LHY9MCxtPVwiMFwiLHg9byYmW10sYj1bXSx3PWwsQz1vfHxpJiZyLmZpbmQuVEFHKFwiKlwiLGMpLEU9VCs9bnVsbD09dz8xOk1hdGgucmFuZG9tKCl8fC4xLGs9Qy5sZW5ndGg7Zm9yKGMmJihsPWE9PT1kfHxhfHxjKTttIT09ayYmbnVsbCE9KGY9Q1ttXSk7bSsrKXtpZihpJiZmKXtoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7d2hpbGUoeT1lW2grK10paWYoeShmLGF8fGQscykpe3UucHVzaChmKTticmVha31jJiYoVD1FKX1uJiYoKGY9IXkmJmYpJiZ2LS0sbyYmeC5wdXNoKGYpKX1pZih2Kz1tLG4mJm0hPT12KXtoPTA7d2hpbGUoeT10W2grK10peSh4LGIsYSxzKTtpZihvKXtpZih2PjApd2hpbGUobS0tKXhbbV18fGJbbV18fChiW21dPWouY2FsbCh1KSk7Yj13ZShiKX1MLmFwcGx5KHUsYiksYyYmIW8mJmIubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb2UudW5pcXVlU29ydCh1KX1yZXR1cm4gYyYmKFQ9RSxsPXcpLHh9O3JldHVybiBuP3NlKG8pOm99cmV0dXJuIHM9b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVNbZStcIiBcIl07aWYoIW8pe3R8fCh0PWEoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShvPUNlKHRbbl0pKVtiXT9yLnB1c2gobyk6aS5wdXNoKG8pOyhvPVMoZSxFZShpLHIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gb30sdT1vZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sdSxsLGMsZixwPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsZD0haSYmYShlPXAuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PWQubGVuZ3RoKXtpZigodT1kWzBdPWRbMF0uc2xpY2UoMCkpLmxlbmd0aD4yJiZcIklEXCI9PT0obD11WzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmZyYmci5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZighKHQ9KHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLGVlKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtwJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1vPVYubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShvLS0pe2lmKGw9dVtvXSxyLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigoZj1yLmZpbmRbY10pJiYoaT1mKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLEsudGVzdCh1WzBdLnR5cGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKG8sMSksIShlPWkubGVuZ3RoJiZ2ZSh1KSkpcmV0dXJuIEwuYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuKHB8fHMoZSxkKSkoaSx0LCFnLG4sIXR8fEsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPWIuc3BsaXQoXCJcIikuc29ydChEKS5qb2luKFwiXCIpPT09YixuLmRldGVjdER1cGxpY2F0ZXM9ISFmLHAoKSxuLnNvcnREZXRhY2hlZD11ZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpKX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD1cIjxhIGhyZWY9JyMnPjwvYT5cIixcIiNcIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfSl8fGxlKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCxcInR5cGVcIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9XCI8aW5wdXQvPlwiLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIpLFwiXCI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIil9KXx8bGUoXCJ2YWx1ZVwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpfSl8fGxlKFAsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKCFuKXJldHVybiEwPT09ZVt0XT90LnRvTG93ZXJDYXNlKCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSksb2V9KGUpO3cuZmluZD1FLHcuZXhwcj1FLnNlbGVjdG9ycyx3LmV4cHJbXCI6XCJdPXcuZXhwci5wc2V1ZG9zLHcudW5pcXVlU29ydD13LnVuaXF1ZT1FLnVuaXF1ZVNvcnQsdy50ZXh0PUUuZ2V0VGV4dCx3LmlzWE1MRG9jPUUuaXNYTUwsdy5jb250YWlucz1FLmNvbnRhaW5zLHcuZXNjYXBlU2VsZWN0b3I9RS5lc2NhcGU7dmFyIGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJncoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxTPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxEPXcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gTihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIEE9L148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2k7ZnVuY3Rpb24gaihlLHQsbil7cmV0dXJuIGcodCk/dy5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk6dC5ub2RlVHlwZT93LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk6XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbCh0LGUpPi0xIT09bn0pOncuZmlsdGVyKHQsZSxuKX13LmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9XCI6bm90KFwiK2UrXCIpXCIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/dy5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp3LmZpbmQubWF0Y2hlcyhlLHcuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sdy5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYody5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3LmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/dy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZELnRlc3QoZSk/dyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC87KHcuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZihuPW58fHEsXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCEoaT1cIjxcIj09PWVbMF0mJlwiPlwiPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpMLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKGlbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHc/dFswXTp0LHcubWVyZ2UodGhpcyx3LnBhcnNlSFRNTChpWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OnIsITApKSxBLnRlc3QoaVsxXSkmJncuaXNQbGFpbk9iamVjdCh0KSlmb3IoaSBpbiB0KWcodGhpc1tpXSk/dGhpc1tpXSh0W2ldKTp0aGlzLmF0dHIoaSx0W2ldKTtyZXR1cm4gdGhpc31yZXR1cm4obz1yLmdldEVsZW1lbnRCeUlkKGlbMl0pKSYmKHRoaXNbMF09byx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpnKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHcpOncubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9dy5mbixxPXcocik7dmFyIEg9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXcoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYody5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9XCJzdHJpbmdcIiE9dHlwZW9mIGUmJncoZSk7aWYoIUQudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/dy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT9cInN0cmluZ1wiPT10eXBlb2YgZT91LmNhbGwodyhlKSx0aGlzWzBdKTp1LmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcudW5pcXVlU29ydCh3Lm1lcmdlKHRoaXMuZ2V0KCksdyhlLHQpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBQKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX13LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwicHJldmlvdXNTaWJsaW5nXCIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gTihlLFwiaWZyYW1lXCIpP2UuY29udGVudERvY3VtZW50OihOKGUsXCJ0ZW1wbGF0ZVwiKSYmKGU9ZS5jb250ZW50fHxlKSx3Lm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9dy5tYXAodGhpcyx0LG4pO3JldHVyblwiVW50aWxcIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiZcInN0cmluZ1wiPT10eXBlb2YgciYmKGk9dy5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKE9bZV18fHcudW5pcXVlU29ydChpKSxILnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KTt2YXIgTT0vW15cXHgyMFxcdFxcclxcblxcZl0rL2c7ZnVuY3Rpb24gUihlKXt2YXIgdD17fTtyZXR1cm4gdy5lYWNoKGUubWF0Y2goTSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9dy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT1cInN0cmluZ1wiPT10eXBlb2YgZT9SKGUpOncuZXh0ZW5kKHt9LGUpO3ZhciB0LG4scixpLG89W10sYT1bXSxzPS0xLHU9ZnVuY3Rpb24oKXtmb3IoaT1pfHxlLm9uY2Uscj10PSEwO2EubGVuZ3RoO3M9LTEpe249YS5zaGlmdCgpO3doaWxlKCsrczxvLmxlbmd0aCkhMT09PW9bc10uYXBwbHkoblswXSxuWzFdKSYmZS5zdG9wT25GYWxzZSYmKHM9by5sZW5ndGgsbj0hMSl9ZS5tZW1vcnl8fChuPSExKSx0PSExLGkmJihvPW4/W106XCJcIil9LGw9e2FkZDpmdW5jdGlvbigpe3JldHVybiBvJiYobiYmIXQmJihzPW8ubGVuZ3RoLTEsYS5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7ZyhyKT9lLnVuaXF1ZSYmbC5oYXMocil8fG8ucHVzaChyKTpyJiZyLmxlbmd0aCYmXCJzdHJpbmdcIiE9PXgocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYmdSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXcuaW5BcnJheSh0LG8sbikpPi0xKW8uc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3cuaW5BcnJheShlLG8pPi0xOm8ubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihvPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxvPW49XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFvfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxufHx0fHwobz1uPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhaX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXx8KG49W2UsKG49bnx8W10pLnNsaWNlP24uc2xpY2UoKTpuXSxhLnB1c2gobiksdHx8dSgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGwuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX07cmV0dXJuIGx9O2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gVyhlKXt0aHJvdyBlfWZ1bmN0aW9uICQoZSx0LG4scil7dmFyIGk7dHJ5e2UmJmcoaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmZyhpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fXcuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbih0KXt2YXIgbj1bW1wibm90aWZ5XCIsXCJwcm9ncmVzc1wiLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLDJdLFtcInJlc29sdmVcIixcImRvbmVcIix3LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMCxcInJlc29sdmVkXCJdLFtcInJlamVjdFwiLFwiZmFpbFwiLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksdy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwxLFwicmVqZWN0ZWRcIl1dLHI9XCJwZW5kaW5nXCIsaT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG8uZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSxcImNhdGNoXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKHQpe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZyhlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmZyhlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdK1wiV2l0aFwiXSh0aGlzLGk/W2VdOmFyZ3VtZW50cyl9KX0pLGU9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbih0LHIsaSl7dmFyIG89MDtmdW5jdGlvbiBhKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMsdT1hcmd1bWVudHMsbD1mdW5jdGlvbigpe3ZhciBlLGw7aWYoISh0PG8pKXtpZigoZT1yLmFwcGx5KHMsdSkpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTtsPWUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJmUudGhlbixnKGwpP2k/bC5jYWxsKGUsYShvLG4sSSxpKSxhKG8sbixXLGkpKToobysrLGwuY2FsbChlLGEobyxuLEksaSksYShvLG4sVyxpKSxhKG8sbixJLG4ubm90aWZ5V2l0aCkpKToociE9PUkmJihzPXZvaWQgMCx1PVtlXSksKGl8fG4ucmVzb2x2ZVdpdGgpKHMsdSkpfX0sYz1pP2w6ZnVuY3Rpb24oKXt0cnl7bCgpfWNhdGNoKGUpe3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsYy5zdGFja1RyYWNlKSx0KzE+PW8mJihyIT09VyYmKHM9dm9pZCAwLHU9W2VdKSxuLnJlamVjdFdpdGgocyx1KSl9fTt0P2MoKToody5EZWZlcnJlZC5nZXRTdGFja0hvb2smJihjLnN0YWNrVHJhY2U9dy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGMpKX19cmV0dXJuIHcuRGVmZXJyZWQoZnVuY3Rpb24oZSl7blswXVszXS5hZGQoYSgwLGUsZyhpKT9pOkksZS5ub3RpZnlXaXRoKSksblsxXVszXS5hZGQoYSgwLGUsZyh0KT90OkkpKSxuWzJdWzNdLmFkZChhKDAsZSxnKHIpP3I6VykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3cuZXh0ZW5kKGUsaSk6aX19LG89e307cmV0dXJuIHcuZWFjaChuLGZ1bmN0aW9uKGUsdCl7dmFyIGE9dFsyXSxzPXRbNV07aVt0WzFdXT1hLmFkZCxzJiZhLmFkZChmdW5jdGlvbigpe3I9c30sblszLWVdWzJdLmRpc2FibGUsblszLWVdWzNdLmRpc2FibGUsblswXVsyXS5sb2NrLG5bMF1bM10ubG9jayksYS5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXStcIldpdGhcIl0odGhpcz09PW8/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxvW3RbMF0rXCJXaXRoXCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9by5jYWxsKGFyZ3VtZW50cyksYT13LkRlZmVycmVkKCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP28uY2FsbChhcmd1bWVudHMpOm4sLS10fHxhLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoJChlLGEuZG9uZShzKG4pKS5yZXNvbHZlLGEucmVqZWN0LCF0KSxcInBlbmRpbmdcIj09PWEuc3RhdGUoKXx8ZyhpW25dJiZpW25dLnRoZW4pKSlyZXR1cm4gYS50aGVuKCk7d2hpbGUobi0tKSQoaVtuXSxzKG4pLGEucmVqZWN0KTtyZXR1cm4gYS5wcm9taXNlKCl9fSk7dmFyIEI9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87dy5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYmQi50ZXN0KHQubmFtZSkmJmUuY29uc29sZS53YXJuKFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIrdC5tZXNzYWdlLHQuc3RhY2ssbil9LHcucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24odCl7ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfTt2YXIgRj13LkRlZmVycmVkKCk7dy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpW1wiY2F0Y2hcIl0oZnVuY3Rpb24oZSl7dy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHcuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13LnJlYWR5V2FpdDp3LmlzUmVhZHkpfHwody5pc1JlYWR5PSEwLCEwIT09ZSYmLS13LnJlYWR5V2FpdD4wfHxGLnJlc29sdmVXaXRoKHIsW3ddKSl9fSksdy5yZWFkeS50aGVuPUYudGhlbjtmdW5jdGlvbiBfKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSx3LnJlYWR5KCl9XCJjb21wbGV0ZVwiPT09ci5yZWFkeVN0YXRlfHxcImxvYWRpbmdcIiE9PXIucmVhZHlTdGF0ZSYmIXIuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Uuc2V0VGltZW91dCh3LnJlYWR5KTooci5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSk7dmFyIHo9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZihcIm9iamVjdFwiPT09eChuKSl7aT0hMDtmb3IocyBpbiBuKXooZSx0LHMsbltzXSwhMCxvLGEpfWVsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsZyhyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbCh3KGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LFg9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFYoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUucmVwbGFjZShYLFwibXMtXCIpLnJlcGxhY2UoVSxWKX12YXIgWT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9O2Z1bmN0aW9uIFEoKXt0aGlzLmV4cGFuZG89dy5leHBhbmRvK1EudWlkKyt9US51aWQ9MSxRLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLmV4cGFuZG9dO3JldHVybiB0fHwodD17fSxZKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5jYWNoZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpW0codCldPW47ZWxzZSBmb3IociBpbiB0KWlbRyhyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtHKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKEcpOih0PUcodCkpaW4gcj9bdF06dC5tYXRjaChNKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fHcuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIXcuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBKPW5ldyBRLEs9bmV3IFEsWj0vXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sZWU9L1tBLVpdL2c7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuXCJ0cnVlXCI9PT1lfHxcImZhbHNlXCIhPT1lJiYoXCJudWxsXCI9PT1lP251bGw6ZT09PStlK1wiXCI/K2U6Wi50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9XCJkYXRhLVwiK3QucmVwbGFjZShlZSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dGUobil9Y2F0Y2goZSl7fUsuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufXcuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBLLmhhc0RhdGEoZSl8fEouaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEsuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0sucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSi5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9fSksdy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT1LLmdldChvKSwxPT09by5ub2RlVHlwZSYmIUouZ2V0KG8sXCJoYXNEYXRhQXR0cnNcIikpKXtuPWEubGVuZ3RoO3doaWxlKG4tLSlhW25dJiYwPT09KHI9YVtuXS5uYW1lKS5pbmRleE9mKFwiZGF0YS1cIikmJihyPUcoci5zbGljZSg1KSksbmUobyxyLGlbcl0pKTtKLnNldChvLFwiaGFzRGF0YUF0dHJzXCIsITApfXJldHVybiBpfXJldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0suc2V0KHRoaXMsZSl9KTp6KHRoaXMsZnVuY3Rpb24odCl7dmFyIG47aWYobyYmdm9pZCAwPT09dCl7aWYodm9pZCAwIT09KG49Sy5nZXQobyxlKSkpcmV0dXJuIG47aWYodm9pZCAwIT09KG49bmUobyxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5yZW1vdmUodGhpcyxlKX0pfX0pLHcuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8XCJmeFwiKStcInF1ZXVlXCIscj1KLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPUouYWNjZXNzKGUsdCx3Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8XCJmeFwiO3ZhciBuPXcucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89dy5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt3LmRlcXVldWUoZSx0KX07XCJpbnByb2dyZXNzXCI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoXCJmeFwiPT09dCYmbi51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGEsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10K1wicXVldWVIb29rc1wiO3JldHVybiBKLmdldChlLG4pfHxKLmFjY2VzcyhlLG4se2VtcHR5OncuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7Si5yZW1vdmUoZSxbdCtcInF1ZXVlXCIsbl0pfSl9KX19KSx3LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlJiYodD1lLGU9XCJmeFwiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3cucXVldWUodGhpc1swXSxlKTp2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dy5xdWV1ZSh0aGlzLGUsdCk7dy5fcXVldWVIb29rcyh0aGlzLGUpLFwiZnhcIj09PWUmJlwiaW5wcm9ncmVzc1wiIT09blswXSYmdy5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9dy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHxcImZ4XCI7d2hpbGUoYS0tKShuPUouZ2V0KG9bYV0sZStcInF1ZXVlSG9va3NcIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLGllPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3JlK1wiKShbYS16JV0qKSRcIixcImlcIiksb2U9W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJub25lXCI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHxcIlwiPT09ZS5zdHlsZS5kaXNwbGF5JiZ3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSYmXCJub25lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiKX0sc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9O2Z1bmN0aW9uIHVlKGUsdCxuLHIpe3ZhciBpLG8sYT0yMCxzPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gdy5jc3MoZSx0LFwiXCIpfSx1PXMoKSxsPW4mJm5bM118fCh3LmNzc051bWJlclt0XT9cIlwiOlwicHhcIiksYz0ody5jc3NOdW1iZXJbdF18fFwicHhcIiE9PWwmJit1KSYmaWUuZXhlYyh3LmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pdy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLHcuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgbGU9e307ZnVuY3Rpb24gY2UoZSl7dmFyIHQsbj1lLm93bmVyRG9jdW1lbnQscj1lLm5vZGVOYW1lLGk9bGVbcl07cmV0dXJuIGl8fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0ZUVsZW1lbnQocikpLGk9dy5jc3ModCxcImRpc3BsYXlcIiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLFwibm9uZVwiPT09aSYmKGk9XCJibG9ja1wiKSxsZVtyXT1pLGkpfWZ1bmN0aW9uIGZlKGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKShyPWVbb10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oXCJub25lXCI9PT1uJiYoaVtvXT1KLmdldChyLFwiZGlzcGxheVwiKXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGlbb109Y2UocikpKTpcIm5vbmVcIiE9PW4mJihpW29dPVwibm9uZVwiLEouc2V0KHIsXCJkaXNwbGF5XCIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX13LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP3codGhpcykuc2hvdygpOncodGhpcykuaGlkZSgpfSl9fSk7dmFyIHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSxoZT0vXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLGdlPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7ZnVuY3Rpb24geWUoZSx0KXt2YXIgbjtyZXR1cm4gbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fFwiKlwiKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHxcIipcIik6W10sdm9pZCAwPT09dHx8dCYmTihlLHQpP3cubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspSi5zZXQoZVtuXSxcImdsb2JhbEV2YWxcIiwhdHx8Si5nZXQodFtuXSxcImdsb2JhbEV2YWxcIikpfXZhciBtZT0vPHwmIz9cXHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZihcIm9iamVjdFwiPT09eChvKSl3Lm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxzPShkZS5leGVjKG8pfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK3cuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDt3Lm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD1cIlwiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiZ3LmluQXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPXcuY29udGFpbnMoby5vd25lckRvY3VtZW50LG8pLGE9eWUoZi5hcHBlbmRDaGlsZChvKSxcInNjcmlwdFwiKSxsJiZ2ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fFwiXCIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9IWZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0PXIuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3Quc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksdC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLHQuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSxlLmFwcGVuZENoaWxkKHQpLGguY2hlY2tDbG9uZT1lLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxlLmlubmVySFRNTD1cIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIixoLm5vQ2xvbmVDaGVja2VkPSEhZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGJlPXIuZG9jdW1lbnRFbGVtZW50LHdlPS9ea2V5LyxUZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sQ2U9L14oW14uXSopKD86XFwuKC4rKXwpLztmdW5jdGlvbiBFZSgpe3JldHVybiEwfWZ1bmN0aW9uIGtlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoKXt0cnl7cmV0dXJuIHIuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIERlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtcInN0cmluZ1wiIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCk7Zm9yKHMgaW4gdClEZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPWtlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiB3KCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9dy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9dy5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcseT1KLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJlLGkpLG4uZ3VpZHx8KG4uZ3VpZD13Lmd1aWQrKyksKHU9eS5ldmVudHMpfHwodT15LmV2ZW50cz17fSksKGE9eS5oYW5kbGUpfHwoYT15LmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgdyYmdy5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/dy5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksbD0odD0odHx8XCJcIikubWF0Y2goTSl8fFtcIlwiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9Q2UuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksZCYmKGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPXcuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJncuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKFwiLlwiKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwoZSxyLGgsYSl8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSx3LmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9Si5oYXNEYXRhKGUpJiZKLmdldChlKTtpZih5JiYodT15LmV2ZW50cykpe2w9KHQ9KHR8fFwiXCIpLm1hdGNoKE0pfHxbXCJcIl0pLmxlbmd0aDt3aGlsZShsLS0paWYocz1DZS5leGVjKHRbbF0pfHxbXSxkPWc9c1sxXSxoPShzWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLGQpe2Y9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2guam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJihcIioqXCIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx5LmhhbmRsZSl8fHcucmVtb3ZlRXZlbnQoZSxkLHkuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KXcuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7dy5pc0VtcHR5T2JqZWN0KHUpJiZKLnJlbW92ZShlLFwiaGFuZGxlIGV2ZW50c1wiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PXcuZXZlbnQuZml4KGUpLG4scixpLG8sYSxzLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KEouZ2V0KHRoaXMsXCJldmVudHNcIil8fHt9KVt0LnR5cGVdfHxbXSxjPXcuZXZlbnQuc3BlY2lhbFt0LnR5cGVdfHx7fTtmb3IodVswXT10LG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXVbbl09YXJndW1lbnRzW25dO2lmKHQuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx0KSl7cz13LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx0LGwpLG49MDt3aGlsZSgobz1zW24rK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXt0LmN1cnJlbnRUYXJnZXQ9by5lbGVtLHI9MDt3aGlsZSgoYT1vLmhhbmRsZXJzW3IrK10pJiYhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKXQucm5hbWVzcGFjZSYmIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKXx8KHQuaGFuZGxlT2JqPWEsdC5kYXRhPWEuZGF0YSx2b2lkIDAhPT0oaT0oKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8YS5oYW5kbGVyKS5hcHBseShvLmVsZW0sdSkpJiYhMT09PSh0LnJlc3VsdD1pKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsdCksdC5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscz1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHUmJmwubm9kZVR5cGUmJiEoXCJjbGlja1wiPT09ZS50eXBlJiZlLmJ1dHRvbj49MSkpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKFwiY2xpY2tcIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrXCIgXCJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD93KGksdGhpcykuaW5kZXgobCk+LTE6dy5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpnKHQpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZVt3LmV4cGFuZG9dP2U6bmV3IHcuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1TZSgpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT1TZSgpJiZ0aGlzLmJsdXIpcmV0dXJuIHRoaXMuYmx1cigpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKFwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmTih0aGlzLFwiaW5wdXRcIikpcmV0dXJuIHRoaXMuY2xpY2soKSwhMX0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LHcucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHcuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3LkV2ZW50KSlyZXR1cm4gbmV3IHcuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FZTprZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbdy5leHBhbmRvXT0hMH0sdy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmtlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sdy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLFwiY2hhclwiOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0dG9uO3JldHVybiBudWxsPT1lLndoaWNoJiZ3ZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5jaGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53aGljaCYmdm9pZCAwIT09dCYmVGUudGVzdChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53aGljaH19LHcuZXZlbnQuYWRkUHJvcCksdy5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGUsdCl7dy5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4gaSYmKGk9PT1yfHx3LmNvbnRhaW5zKHIsaSkpfHwoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx3LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIERlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRGUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZStcIi5cIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49a2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLEFlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGplPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2kscWU9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z1bmN0aW9uIExlKGUsdCl7cmV0dXJuIE4oZSxcInRhYmxlXCIpJiZOKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCxcInRyXCIpP3coZSkuY2hpbGRyZW4oXCJ0Ym9keVwiKVswXXx8ZTplfWZ1bmN0aW9uIEhlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2UudHlwZSxlfWZ1bmN0aW9uIE9lKGUpe3JldHVyblwidHJ1ZS9cIj09PShlLnR5cGV8fFwiXCIpLnNsaWNlKDAsNSk/ZS50eXBlPWUudHlwZS5zbGljZSg1KTplLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksZX1mdW5jdGlvbiBQZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKEouaGFzRGF0YShlKSYmKG89Si5hY2Nlc3MoZSksYT1KLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9Sy5oYXNEYXRhKGUpJiYocz1LLmFjY2VzcyhlKSx1PXcuZXh0ZW5kKHt9LHMpLEsuc2V0KHQsdSkpfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1uJiZwZS50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDpcImlucHV0XCIhPT1uJiZcInRleHRhcmVhXCIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe3Q9YS5hcHBseShbXSx0KTt2YXIgaSxvLHMsdSxsLGMsZj0wLHA9ZS5sZW5ndGgsZD1wLTEseT10WzBdLHY9Zyh5KTtpZih2fHxwPjEmJlwic3RyaW5nXCI9PXR5cGVvZiB5JiYhaC5jaGVja0Nsb25lJiZqZS50ZXN0KHkpKXJldHVybiBlLmVhY2goZnVuY3Rpb24oaSl7dmFyIG89ZS5lcShpKTt2JiYodFswXT15LmNhbGwodGhpcyxpLG8uaHRtbCgpKSksUmUobyx0LG4scil9KTtpZihwJiYoaT14ZSh0LGVbMF0ub3duZXJEb2N1bWVudCwhMSxlLHIpLG89aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3RoJiYoaT1vKSxvfHxyKSl7Zm9yKHU9KHM9dy5tYXAoeWUoaSxcInNjcmlwdFwiKSxIZSkpLmxlbmd0aDtmPHA7ZisrKWw9aSxmIT09ZCYmKGw9dy5jbG9uZShsLCEwLCEwKSx1JiZ3Lm1lcmdlKHMseWUobCxcInNjcmlwdFwiKSkpLG4uY2FsbChlW2ZdLGwsZik7aWYodSlmb3IoYz1zW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsdy5tYXAocyxPZSksZj0wO2Y8dTtmKyspbD1zW2ZdLGhlLnRlc3QobC50eXBlfHxcIlwiKSYmIUouYWNjZXNzKGwsXCJnbG9iYWxFdmFsXCIpJiZ3LmNvbnRhaW5zKGMsbCkmJihsLnNyYyYmXCJtb2R1bGVcIiE9PShsLnR5cGV8fFwiXCIpLnRvTG93ZXJDYXNlKCk/dy5fZXZhbFVybCYmdy5fZXZhbFVybChsLnNyYyk6bShsLnRleHRDb250ZW50LnJlcGxhY2UocWUsXCJcIiksYyxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gSWUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/dy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fHcuY2xlYW5EYXRhKHllKHIpKSxyLnBhcmVudE5vZGUmJihuJiZ3LmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKSYmdmUoeWUocixcInNjcmlwdFwiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX13LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE5lLFwiPCQxPjwvJDI+XCIpfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNsb25lTm9kZSghMCksdT13LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKGgubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHcuaXNYTUxEb2MoZSkpKWZvcihhPXllKHMpLHI9MCxpPShvPXllKGUpKS5sZW5ndGg7cjxpO3IrKylNZShvW3JdLGFbcl0pO2lmKHQpaWYobilmb3Iobz1vfHx5ZShlKSxhPWF8fHllKHMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspUGUob1tyXSxhW3JdKTtlbHNlIFBlKGUscyk7cmV0dXJuKGE9eWUocyxcInNjcmlwdFwiKSkubGVuZ3RoPjAmJnZlKGEsIXUmJnllKGUsXCJzY3JpcHRcIikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9dy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoWShuKSl7aWYodD1uW0ouZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/dy5ldmVudC5yZW1vdmUobixyKTp3LnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltKLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksdy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxMZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUxlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKGUsITEpKSxlLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB3LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhQWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9dy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTt3LmluQXJyYXkodGhpcyxlKTwwJiYody5jbGVhbkRhdGEoeWUodGhpcykpLG4mJm4ucmVwbGFjZUNoaWxkKHQsdGhpcykpfSxlKX19KSx3LmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9dyhlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3KGlbYV0pW3RdKG4pLHMuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIFdlPW5ldyBSZWdFeHAoXCJeKFwiK3JlK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLCRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sQmU9bmV3IFJlZ0V4cChvZS5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKGMpe2wuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixjLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsYmUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7dmFyIHQ9ZS5nZXRDb21wdXRlZFN0eWxlKGMpO2k9XCIxJVwiIT09dC50b3AsdT0xMj09PW4odC5tYXJnaW5MZWZ0KSxjLnN0eWxlLnJpZ2h0PVwiNjAlXCIscz0zNj09PW4odC5yaWdodCksbz0zNj09PW4odC53aWR0aCksYy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsYT0zNj09PWMub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixiZS5yZW1vdmVDaGlsZChsKSxjPW51bGx9fWZ1bmN0aW9uIG4oZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIGksbyxhLHMsdSxsPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLnN0eWxlJiYoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsYy5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsaC5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09Yy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx3LmV4dGVuZChoLHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiB0KCksb30scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHN9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGl9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiB0KCksdX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0KCksYX19KSl9KCk7ZnVuY3Rpb24gRmUoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHwkZShlKSkmJihcIlwiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8dy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXcuc3R5bGUoZSx0KSksIWgucGl4ZWxCb3hTdHlsZXMoKSYmV2UudGVzdChhKSYmQmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hK1wiXCI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19dmFyIHplPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxYZT0vXi0tLyxVZT17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0sVmU9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxHZT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sWWU9ci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO2Z1bmN0aW9uIFFlKGUpe2lmKGUgaW4gWWUpcmV0dXJuIGU7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1HZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUdlW25dK3QpaW4gWWUpcmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSl7dmFyIHQ9dy5jc3NQcm9wc1tlXTtyZXR1cm4gdHx8KHQ9dy5jc3NQcm9wc1tlXT1RZShlKXx8ZSksdH1mdW5jdGlvbiBLZShlLHQsbil7dmFyIHI9aWUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8XCJweFwiKTp0fWZ1bmN0aW9uIFplKGUsdCxuLHIsaSxvKXt2YXIgYT1cIndpZHRoXCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj9cImJvcmRlclwiOlwiY29udGVudFwiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKVwibWFyZ2luXCI9PT1uJiYodSs9dy5jc3MoZSxuK29lW2FdLCEwLGkpKSxyPyhcImNvbnRlbnRcIj09PW4mJih1LT13LmNzcyhlLFwicGFkZGluZ1wiK29lW2FdLCEwLGkpKSxcIm1hcmdpblwiIT09biYmKHUtPXcuY3NzKGUsXCJib3JkZXJcIitvZVthXStcIldpZHRoXCIsITAsaSkpKToodSs9dy5jc3MoZSxcInBhZGRpbmdcIitvZVthXSwhMCxpKSxcInBhZGRpbmdcIiE9PW4/dSs9dy5jc3MoZSxcImJvcmRlclwiK29lW2FdK1wiV2lkdGhcIiwhMCxpKTpzKz13LmNzcyhlLFwiYm9yZGVyXCIrb2VbYV0rXCJXaWR0aFwiLCEwLGkpKTtyZXR1cm4hciYmbz49MCYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKSksdX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9JGUoZSksaT1GZShlLHQsciksbz1cImJvcmRlci1ib3hcIj09PXcuY3NzKGUsXCJib3hTaXppbmdcIiwhMSxyKSxhPW87aWYoV2UudGVzdChpKSl7aWYoIW4pcmV0dXJuIGk7aT1cImF1dG9cIn1yZXR1cm4gYT1hJiYoaC5ib3hTaXppbmdSZWxpYWJsZSgpfHxpPT09ZS5zdHlsZVt0XSksKFwiYXV0b1wiPT09aXx8IXBhcnNlRmxvYXQoaSkmJlwiaW5saW5lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiLCExLHIpKSYmKGk9ZVtcIm9mZnNldFwiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKStaZShlLHQsbnx8KG8/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksYSxyLGkpK1wicHhcIn13LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUZlKGUsXCJvcGFjaXR5XCIpO3JldHVyblwiXCI9PT1uP1wiMVwiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1HKHQpLHU9WGUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9SmUocykpLGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdO1wic3RyaW5nXCI9PShvPXR5cGVvZiBuKSYmKGk9aWUuZXhlYyhuKSkmJmlbMV0mJihuPXVlKGUsdCxpKSxvPVwibnVtYmVyXCIpLG51bGwhPW4mJm49PT1uJiYoXCJudW1iZXJcIj09PW8mJihuKz1pJiZpWzNdfHwody5jc3NOdW1iZXJbc10/XCJcIjpcInB4XCIpKSxoLmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PW58fDAhPT10LmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwobFt0XT1cImluaGVyaXRcIiksYSYmXCJzZXRcImluIGEmJnZvaWQgMD09PShuPWEuc2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHkodCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1HKHQpO3JldHVybiBYZS50ZXN0KHQpfHwodD1KZShzKSksKGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSkmJlwiZ2V0XCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1GZShlLHQscikpLFwibm9ybWFsXCI9PT1pJiZ0IGluIFZlJiYoaT1WZVt0XSksXCJcIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298fDA6aSk6aX19KSx3LmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hemUudGVzdCh3LmNzcyhlLFwiZGlzcGxheVwiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/ZXQoZSx0LHIpOnNlKGUsVWUsZnVuY3Rpb24oKXtyZXR1cm4gZXQoZSx0LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz0kZShlKSxhPVwiYm9yZGVyLWJveFwiPT09dy5jc3MoZSxcImJveFNpemluZ1wiLCExLG8pLHM9ciYmWmUoZSx0LHIsYSxvKTtyZXR1cm4gYSYmaC5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tcGFyc2VGbG9hdChvW3RdKS1aZShlLHQsXCJib3JkZXJcIiwhMSxvKS0uNSkpLHMmJihpPWllLmV4ZWMobikpJiZcInB4XCIhPT0oaVszXXx8XCJweFwiKSYmKGUuc3R5bGVbdF09bixuPXcuY3NzKGUsdCkpLEtlKGUsbixzKX19fSksdy5jc3NIb29rcy5tYXJnaW5MZWZ0PV9lKGgucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChGZShlLFwibWFyZ2luTGVmdFwiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1zZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKStcInB4XCJ9KSx3LmVhY2goe21hcmdpbjpcIlwiLHBhZGRpbmc6XCJcIixib3JkZXI6XCJXaWR0aFwifSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLGk9e30sbz1cInN0cmluZ1wiPT10eXBlb2Ygbj9uLnNwbGl0KFwiIFwiKTpbbl07cjw0O3IrKylpW2Urb2Vbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sXCJtYXJnaW5cIiE9PWUmJih3LmNzc0hvb2tzW2UrdF0uc2V0PUtlKX0pLHcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPSRlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXcuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj93LnN0eWxlKGUsdCxuKTp3LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KTtmdW5jdGlvbiB0dChlLHQsbixyLGkpe3JldHVybiBuZXcgdHQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX13LlR3ZWVuPXR0LHR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8dy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3LmNzc051bWJlcltuXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPXR0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTp0dC5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj10dC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9dy5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOnR0LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LHR0LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT10dC5wcm90b3R5cGUsdHQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9dy5jc3MoZS5lbGVtLGUucHJvcCxcIlwiKSkmJlwiYXV0b1wiIT09dD90OjB9LHNldDpmdW5jdGlvbihlKXt3LmZ4LnN0ZXBbZS5wcm9wXT93LmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsPT1lLmVsZW0uc3R5bGVbdy5jc3NQcm9wc1tlLnByb3BdXSYmIXcuY3NzSG9va3NbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzp3LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSx0dC5wcm9wSG9va3Muc2Nyb2xsVG9wPXR0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LHcuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6XCJzd2luZ1wifSx3LmZ4PXR0LnByb3RvdHlwZS5pbml0LHcuZnguc3RlcD17fTt2YXIgbnQscnQsaXQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLG90PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gYXQoKXtydCYmKCExPT09ci5oaWRkZW4mJmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lP2UucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGF0KTplLnNldFRpbWVvdXQoYXQsdy5meC5pbnRlcnZhbCksdy5meC50aWNrKCkpfWZ1bmN0aW9uIHN0KCl7cmV0dXJuIGUuc2V0VGltZW91dChmdW5jdGlvbigpe250PXZvaWQgMH0pLG50PURhdGUubm93KCl9ZnVuY3Rpb24gdXQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVtcIm1hcmdpblwiKyhuPW9lW3JdKV09aVtcInBhZGRpbmdcIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBsdChlLHQsbil7Zm9yKHZhciByLGk9KHB0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KHB0LnR3ZWVuZXJzW1wiKlwiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gY3QoZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj1cIndpZHRoXCJpbiB0fHxcImhlaWdodFwiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx5PUouZ2V0KGUsXCJmeHNob3dcIik7bi5xdWV1ZXx8KG51bGw9PShhPXcuX3F1ZXVlSG9va3MoZSxcImZ4XCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx3LnF1ZXVlKGUsXCJmeFwiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0saXQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHxcInRvZ2dsZVwiPT09aSxpPT09KGc/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PWl8fCF5fHx2b2lkIDA9PT15W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT15JiZ5W3JdfHx3LnN0eWxlKGUscil9aWYoKHU9IXcuaXNFbXB0eU9iamVjdCh0KSl8fCF3LmlzRW1wdHlPYmplY3QoZCkpe2YmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9eSYmeS5kaXNwbGF5KSYmKGw9Si5nZXQoZSxcImRpc3BsYXlcIikpLFwibm9uZVwiPT09KGM9dy5jc3MoZSxcImRpc3BsYXlcIikpJiYobD9jPWw6KGZlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz13LmNzcyhlLFwiZGlzcGxheVwiKSxmZShbZV0pKSksKFwiaW5saW5lXCI9PT1jfHxcImlubGluZS1ibG9ja1wiPT09YyYmbnVsbCE9bCkmJlwibm9uZVwiPT09dy5jc3MoZSxcImZsb2F0XCIpJiYodXx8KHAuZG9uZShmdW5jdGlvbigpe2guZGlzcGxheT1sfSksbnVsbD09bCYmKGM9aC5kaXNwbGF5LGw9XCJub25lXCI9PT1jP1wiXCI6YykpLGguZGlzcGxheT1cImlubGluZS1ibG9ja1wiKSksbi5vdmVyZmxvdyYmKGgub3ZlcmZsb3c9XCJoaWRkZW5cIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMTtmb3IociBpbiBkKXV8fCh5P1wiaGlkZGVuXCJpbiB5JiYoZz15LmhpZGRlbik6eT1KLmFjY2VzcyhlLFwiZnhzaG93XCIse2Rpc3BsYXk6bH0pLG8mJih5LmhpZGRlbj0hZyksZyYmZmUoW2VdLCEwKSxwLmRvbmUoZnVuY3Rpb24oKXtnfHxmZShbZV0pLEoucmVtb3ZlKGUsXCJmeHNob3dcIik7Zm9yKHIgaW4gZCl3LnN0eWxlKGUscixkW3JdKX0pKSx1PWx0KGc/eVtyXTowLHIscCksciBpbiB5fHwoeVtyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfX1mdW5jdGlvbiBmdChlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPUcobiksaT10W3JdLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9dy5jc3NIb29rc1tyXSkmJlwiZXhwYW5kXCJpbiBhKXtvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByLGksbz0wLGE9cHQucHJlZmlsdGVycy5sZW5ndGgscz13LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD1udHx8c3QoKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPTEtKG4vbC5kdXJhdGlvbnx8MCksbz0wLGE9bC50d2VlbnMubGVuZ3RoO288YTtvKyspbC50d2VlbnNbb10ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbbCxyLG5dKSxyPDEmJmE/bjooYXx8cy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOncuZXh0ZW5kKHt9LHQpLG9wdHM6dy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOncuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6bnR8fHN0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO248cjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2wsdF0pKTpzLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKGZ0KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1wdC5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gZyhyLnN0b3ApJiYody5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPXIuc3RvcC5iaW5kKHIpKSxyO3JldHVybiB3Lm1hcChjLGx0LGwpLGcobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3LmZ4LnRpbWVyKHcuZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9dy5BbmltYXRpb249dy5leHRlbmQocHQse3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHVlKG4uZWxlbSxlLGllLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7ZyhlKT8odD1lLGU9W1wiKlwiXSk6ZT1lLm1hdGNoKE0pO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxwdC50d2VlbmVyc1tuXT1wdC50d2VlbmVyc1tuXXx8W10scHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbY3RdLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/cHQucHJlZmlsdGVycy51bnNoaWZ0KGUpOnB0LnByZWZpbHRlcnMucHVzaChlKX19KSx3LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZcIm9iamVjdFwiPT10eXBlb2YgZT93LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGcoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWcodCkmJnR9O3JldHVybiB3LmZ4Lm9mZj9yLmR1cmF0aW9uPTA6XCJudW1iZXJcIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIHcuZnguc3BlZWRzP3IuZHVyYXRpb249dy5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj13LmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT1cImZ4XCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe2coci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJncuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx3LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihhZSkuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13LmlzRW1wdHlPYmplY3QoZSksbz13LnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cHQodGhpcyx3LmV4dGVuZCh7fSxlKSxvKTsoaXx8Si5nZXQodGhpcyxcImZpbmlzaFwiKSkmJnQuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKG49dCx0PWUsZT12b2lkIDApLHQmJiExIT09ZSYmdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZStcInF1ZXVlSG9va3NcIixvPXcudGltZXJzLGE9Si5nZXQodGhpcyk7aWYoaSlhW2ldJiZhW2ldLnN0b3AmJnIoYVtpXSk7ZWxzZSBmb3IoaSBpbiBhKWFbaV0mJmFbaV0uc3RvcCYmb3QudGVzdChpKSYmcihhW2ldKTtmb3IoaT1vLmxlbmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTshdCYmbnx8dy5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPUouZ2V0KHRoaXMpLHI9bltlK1wicXVldWVcIl0saT1uW2UrXCJxdWV1ZUhvb2tzXCJdLG89dy50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHcucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksdy5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXcuZm5bdF07dy5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUodXQodCwhMCksZSxyLGkpfX0pLHcuZWFjaCh7c2xpZGVEb3duOnV0KFwic2hvd1wiKSxzbGlkZVVwOnV0KFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTp1dChcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKGUsdCl7dy5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx3LnRpbWVycz1bXSx3LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj13LnRpbWVycztmb3IobnQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHx3LmZ4LnN0b3AoKSxudD12b2lkIDB9LHcuZngudGltZXI9ZnVuY3Rpb24oZSl7dy50aW1lcnMucHVzaChlKSx3LmZ4LnN0YXJ0KCl9LHcuZnguaW50ZXJ2YWw9MTMsdy5meC5zdGFydD1mdW5jdGlvbigpe3J0fHwocnQ9ITAsYXQoKSl9LHcuZnguc3RvcD1mdW5jdGlvbigpe3J0PW51bGx9LHcuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHcuZm4uZGVsYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD13LmZ4P3cuZnguc3BlZWRzW3RdfHx0OnQsbj1ufHxcImZ4XCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCk7ci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksdD1yLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIikuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTtlLnR5cGU9XCJjaGVja2JveFwiLGguY2hlY2tPbj1cIlwiIT09ZS52YWx1ZSxoLm9wdFNlbGVjdGVkPXQuc2VsZWN0ZWQsKGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnZhbHVlPVwidFwiLGUudHlwZT1cInJhZGlvXCIsaC5yYWRpb1ZhbHVlPVwidFwiPT09ZS52YWx1ZX0oKTt2YXIgZHQsaHQ9dy5leHByLmF0dHJIYW5kbGU7dy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/dy5wcm9wKGUsdCxuKTooMT09PW8mJncuaXNYTUxEb2MoZSl8fChpPXcuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fCh3LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2R0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCB3LnJlbW92ZUF0dHIoZSx0KTppJiZcInNldFwiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rXCJcIiksbik6aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPXcuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZighaC5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT10JiZOKGUsXCJpbnB1dFwiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goTSk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksZHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P3cucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LHcuZWFjaCh3LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1xcdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj1odFt0XXx8dy5maW5kLmF0dHI7aHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPWh0W2FdLGh0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsaHRbYV09byksaX19KTt2YXIgZ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7dy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdfHxlXX0pfX0pLHcuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmdy5pc1hNTERvYyhlKXx8KHQ9dy5wcm9wRml4W3RdfHx0LGk9dy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmXCJzZXRcImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD13LmZpbmQuYXR0cihlLFwidGFiaW5kZXhcIik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Z3QudGVzdChlLm5vZGVOYW1lKXx8eXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn19KSxoLm9wdFNlbGVjdGVkfHwody5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLHcuZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXt3LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuKGUubWF0Y2goTSl8fFtdKS5qb2luKFwiIFwiKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLm1hdGNoKE0pfHxbXTpbXX13LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKGcoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsbXQodGhpcykpKX0pO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxyPTE9PT1uLm5vZGVUeXBlJiZcIiBcIit2dChpKStcIiBcIil7YT0wO3doaWxlKG89dFthKytdKXIuaW5kZXhPZihcIiBcIitvK1wiIFwiKTwwJiYocis9bytcIiBcIik7aSE9PShzPXZ0KHIpKSYmbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYoKHQ9eHQoZSkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPW10KG4pLHI9MT09PW4ubm9kZVR5cGUmJlwiIFwiK3Z0KGkpK1wiIFwiKXthPTA7d2hpbGUobz10W2ErK10pd2hpbGUoci5pbmRleE9mKFwiIFwiK28rXCIgXCIpPi0xKXI9ci5yZXBsYWNlKFwiIFwiK28rXCIgXCIsXCIgXCIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPVwic3RyaW5nXCI9PT1ufHxBcnJheS5pc0FycmF5KGUpO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdCYmcj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTpnKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sbXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKXtpPTAsbz13KHRoaXMpLGE9eHQoZSk7d2hpbGUodD1hW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZSB2b2lkIDAhPT1lJiZcImJvb2xlYW5cIiE9PW58fCgodD1tdCh0aGlzKSkmJkouc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsdCksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIix0fHwhMT09PWU/XCJcIjpKLmdldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiKXx8XCJcIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9XCIgXCIrZStcIiBcIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmKFwiIFwiK3Z0KG10KG4pKStcIiBcIikuaW5kZXhPZih0KT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgYnQ9L1xcci9nO3cuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1nKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShpPXI/ZS5jYWxsKHRoaXMsbix3KHRoaXMpLnZhbCgpKTplKT9pPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGk/aSs9XCJcIjpBcnJheS5pc0FycmF5KGkpJiYoaT13Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6ZStcIlwifSkpLCh0PXcudmFsSG9va3NbdGhpcy50eXBlXXx8dy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJzZXRcImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSxcInZhbHVlXCIpfHwodGhpcy52YWx1ZT1pKSl9KTtpZihpKXJldHVybih0PXcudmFsSG9va3NbaS50eXBlXXx8dy52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJnZXRcImluIHQmJnZvaWQgMCE9PShuPXQuZ2V0KGksXCJ2YWx1ZVwiKSk/bjpcInN0cmluZ1wiPT10eXBlb2Yobj1pLnZhbHVlKT9uLnJlcGxhY2UoYnQsXCJcIik6bnVsbD09bj9cIlwiOm59fX0pLHcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5maW5kLmF0dHIoZSxcInZhbHVlXCIpO3JldHVybiBudWxsIT10P3Q6dnQody50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPVwic2VsZWN0LW9uZVwiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhTihuLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKHQ9dyhuKS52YWwoKSxhKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXcubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKSgocj1pW2FdKS5zZWxlY3RlZD13LmluQXJyYXkody52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksdy5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe3cudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD13LmluQXJyYXkodyhlKS52YWwoKSx0KT4tMX19LGguY2hlY2tPbnx8KHcudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6ZS52YWx1ZX0pfSksaC5mb2N1c2luPVwib25mb2N1c2luXCJpbiBlO3ZhciB3dD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sVHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07dy5leHRlbmQody5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbih0LG4saSxvKXt2YXIgYSxzLHUsbCxjLHAsZCxoLHY9W2l8fHJdLG09Zi5jYWxsKHQsXCJ0eXBlXCIpP3QudHlwZTp0LHg9Zi5jYWxsKHQsXCJuYW1lc3BhY2VcIik/dC5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpOltdO2lmKHM9aD11PWk9aXx8ciwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiF3dC50ZXN0KG0rdy5ldmVudC50cmlnZ2VyZWQpJiYobS5pbmRleE9mKFwiLlwiKT4tMSYmKG09KHg9bS5zcGxpdChcIi5cIikpLnNoaWZ0KCkseC5zb3J0KCkpLGM9bS5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrbSx0PXRbdy5leHBhbmRvXT90Om5ldyB3LkV2ZW50KG0sXCJvYmplY3RcIj09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPW8/MjozLHQubmFtZXNwYWNlPXguam9pbihcIi5cIiksdC5ybmFtZXNwYWNlPXQubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIit4LmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PWkpLG49bnVsbD09bj9bdF06dy5tYWtlQXJyYXkobixbdF0pLGQ9dy5ldmVudC5zcGVjaWFsW21dfHx7fSxvfHwhZC50cmlnZ2VyfHwhMSE9PWQudHJpZ2dlci5hcHBseShpLG4pKSl7aWYoIW8mJiFkLm5vQnViYmxlJiYheShpKSl7Zm9yKGw9ZC5kZWxlZ2F0ZVR5cGV8fG0sd3QudGVzdChsK20pfHwocz1zLnBhcmVudE5vZGUpO3M7cz1zLnBhcmVudE5vZGUpdi5wdXNoKHMpLHU9czt1PT09KGkub3duZXJEb2N1bWVudHx8cikmJnYucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9YT0wO3doaWxlKChzPXZbYSsrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpaD1zLHQudHlwZT1hPjE/bDpkLmJpbmRUeXBlfHxtLChwPShKLmdldChzLFwiZXZlbnRzXCIpfHx7fSlbdC50eXBlXSYmSi5nZXQocyxcImhhbmRsZVwiKSkmJnAuYXBwbHkocyxuKSwocD1jJiZzW2NdKSYmcC5hcHBseSYmWShzKSYmKHQucmVzdWx0PXAuYXBwbHkocyxuKSwhMT09PXQucmVzdWx0JiZ0LnByZXZlbnREZWZhdWx0KCkpO3JldHVybiB0LnR5cGU9bSxvfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxkLl9kZWZhdWx0JiYhMSE9PWQuX2RlZmF1bHQuYXBwbHkodi5wb3AoKSxuKXx8IVkoaSl8fGMmJmcoaVttXSkmJiF5KGkpJiYoKHU9aVtjXSkmJihpW2NdPW51bGwpLHcuZXZlbnQudHJpZ2dlcmVkPW0sdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZoLmFkZEV2ZW50TGlzdGVuZXIobSxUdCksaVttXSgpLHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmaC5yZW1vdmVFdmVudExpc3RlbmVyKG0sVHQpLHcuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCx1JiYoaVtjXT11KSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dy5leHRlbmQobmV3IHcuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwfSk7dy5ldmVudC50cmlnZ2VyKHIsbnVsbCx0KX19KSx3LmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLGguZm9jdXNpbnx8dy5lYWNoKHtmb2N1czpcImZvY3VzaW5cIixibHVyOlwiZm9jdXNvdXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt3LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdy5ldmVudC5maXgoZSkpfTt3LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGk9Si5hY2Nlc3Mocix0KTtpfHxyLmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKSxKLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCktMTtpP0ouYWNjZXNzKHIsdCxpKTooci5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMCksSi5yZW1vdmUocix0KSl9fX0pO3ZhciBDdD1lLmxvY2F0aW9uLEV0PURhdGUubm93KCksa3Q9L1xcPy87dy5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbjtpZighdHx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dHJ5e249KG5ldyBlLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsXCJ0ZXh0L3htbFwiKX1jYXRjaChlKXtuPXZvaWQgMH1yZXR1cm4gbiYmIW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKS5sZW5ndGh8fHcuZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrdCksbn07dmFyIFN0PS9cXFtcXF0kLyxEdD0vXFxyP1xcbi9nLE50PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxBdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24ganQoZSx0LG4scil7dmFyIGk7aWYoQXJyYXkuaXNBcnJheSh0KSl3LmVhY2godCxmdW5jdGlvbih0LGkpe258fFN0LnRlc3QoZSk/cihlLGkpOmp0KGUrXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT1pP3Q6XCJcIikrXCJdXCIsaSxuLHIpfSk7ZWxzZSBpZihufHxcIm9iamVjdFwiIT09eCh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWp0KGUrXCJbXCIraStcIl1cIix0W2ldLG4scil9dy5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWcodCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uP1wiXCI6bil9O2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdy5pc1BsYWluT2JqZWN0KGUpKXcuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbihcIiZcIil9LHcuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXcucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGU/dy5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhdyh0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmQXQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIU50LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXcodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3cubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShEdCxcIlxcclxcblwiKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKER0LFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pO3ZhciBxdD0vJTIwL2csTHQ9LyMuKiQvLEh0PS8oWz8mXSlfPVteJl0qLyxPdD0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLFB0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE10PS9eKD86R0VUfEhFQUQpJC8sUnQ9L15cXC9cXC8vLEl0PXt9LFd0PXt9LCR0PVwiKi9cIi5jb25jYXQoXCIqXCIpLEJ0PXIuY3JlYXRlRWxlbWVudChcImFcIik7QnQuaHJlZj1DdC5ocmVmO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiBmdW5jdGlvbih0LG4pe1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj10LHQ9XCIqXCIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChNKXx8W107aWYoZyhuKSl3aGlsZShyPW9baSsrXSlcIitcIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8XCIqXCIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1XdDtmdW5jdGlvbiBhKHMpe3ZhciB1O3JldHVybiBpW3NdPSEwLHcuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBsfHxvfHxpW2xdP28/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxhKGwpLCExKX0pLHV9cmV0dXJuIGEodC5kYXRhVHlwZXNbMF0pfHwhaVtcIipcIl0mJmEoXCIqXCIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPXcuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJncuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoXCIqXCI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpK1wiIFwiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBVdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKFwiKlwiPT09bylvPXU7ZWxzZSBpZihcIipcIiE9PXUmJnUhPT1vKXtpZighKGE9bFt1K1wiIFwiK29dfHxsW1wiKiBcIitvXSkpZm9yKGkgaW4gbClpZigocz1pLnNwbGl0KFwiIFwiKSlbMV09PT1vJiYoYT1sW3UrXCIgXCIrc1swXV18fGxbXCIqIFwiK3NbMF1dKSl7ITA9PT1hP2E9bFtpXTohMCE9PWxbaV0mJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYmZVtcInRocm93c1wiXSl0PWEodCk7ZWxzZSB0cnl7dD1hKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6YT9lOlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK3UrXCIgdG8gXCIrb319fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOnR9fXcuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpDdC5ocmVmLHR5cGU6XCJHRVRcIixpc0xvY2FsOlB0LnRlc3QoQ3QucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGFjY2VwdHM6e1wiKlwiOiR0LHRleHQ6XCJ0ZXh0L3BsYWluXCIsaHRtbDpcInRleHQvaHRtbFwiLHhtbDpcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixqc29uOlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJ9LGNvbnRlbnRzOnt4bWw6L1xcYnhtbFxcYi8saHRtbDovXFxiaHRtbC8sanNvbjovXFxianNvblxcYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6XCJyZXNwb25zZVhNTFwiLHRleHQ6XCJyZXNwb25zZVRleHRcIixqc29uOlwicmVzcG9uc2VKU09OXCJ9LGNvbnZlcnRlcnM6e1wiKiB0ZXh0XCI6U3RyaW5nLFwidGV4dCBodG1sXCI6ITAsXCJ0ZXh0IGpzb25cIjpKU09OLnBhcnNlLFwidGV4dCB4bWxcIjp3LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD96dCh6dChlLHcuYWpheFNldHRpbmdzKSx0KTp6dCh3LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjpGdChJdCksYWpheFRyYW5zcG9ydDpGdChXdCksYWpheDpmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58fHt9O3ZhciBpLG8sYSxzLHUsbCxjLGYscCxkLGg9dy5hamF4U2V0dXAoe30sbiksZz1oLmNvbnRleHR8fGgseT1oLmNvbnRleHQmJihnLm5vZGVUeXBlfHxnLmpxdWVyeSk/dyhnKTp3LmV2ZW50LHY9dy5EZWZlcnJlZCgpLG09dy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSx4PWguc3RhdHVzQ29kZXx8e30sYj17fSxUPXt9LEM9XCJjYW5jZWxlZFwiLEU9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcyl7cz17fTt3aGlsZSh0PU90LmV4ZWMoYSkpc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9VFtlLnRvTG93ZXJDYXNlKCldPVRbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUUuYWx3YXlzKGVbRS5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8QztyZXR1cm4gaSYmaS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKHYucHJvbWlzZShFKSxoLnVybD0oKHR8fGgudXJsfHxDdC5ocmVmKStcIlwiKS5yZXBsYWNlKFJ0LEN0LnByb3RvY29sK1wiLy9cIiksaC50eXBlPW4ubWV0aG9kfHxuLnR5cGV8fGgubWV0aG9kfHxoLnR5cGUsaC5kYXRhVHlwZXM9KGguZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKE0pfHxbXCJcIl0sbnVsbD09aC5jcm9zc0RvbWFpbil7bD1yLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3RyeXtsLmhyZWY9aC51cmwsbC5ocmVmPWwuaHJlZixoLmNyb3NzRG9tYWluPUJ0LnByb3RvY29sK1wiLy9cIitCdC5ob3N0IT1sLnByb3RvY29sK1wiLy9cIitsLmhvc3R9Y2F0Y2goZSl7aC5jcm9zc0RvbWFpbj0hMH19aWYoaC5kYXRhJiZoLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgaC5kYXRhJiYoaC5kYXRhPXcucGFyYW0oaC5kYXRhLGgudHJhZGl0aW9uYWwpKSxfdChJdCxoLG4sRSksYylyZXR1cm4gRTsoZj13LmV2ZW50JiZoLmdsb2JhbCkmJjA9PXcuYWN0aXZlKysmJncuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSFNdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKEx0LFwiXCIpLGguaGFzQ29udGVudD9oLmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShxdCxcIitcIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRhfHxcInN0cmluZ1wiPT10eXBlb2YgaC5kYXRhKSYmKG8rPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStoLmRhdGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UoSHQsXCIkMVwiKSxkPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStcIl89XCIrRXQrKytkKSxoLnVybD1vK2QpLGguaWZNb2RpZmllZCYmKHcubGFzdE1vZGlmaWVkW29dJiZFLnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLHcubGFzdE1vZGlmaWVkW29dKSx3LmV0YWdbb10mJkUuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIix3LmV0YWdbb10pKSwoaC5kYXRhJiZoLmhhc0NvbnRlbnQmJiExIT09aC5jb250ZW50VHlwZXx8bi5jb250ZW50VHlwZSkmJkUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGguY29udGVudFR5cGUpLEUuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLGguZGF0YVR5cGVzWzBdJiZoLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dP2guYWNjZXB0c1toLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09aC5kYXRhVHlwZXNbMF0/XCIsIFwiKyR0K1wiOyBxPTAuMDFcIjpcIlwiKTpoLmFjY2VwdHNbXCIqXCJdKTtmb3IocCBpbiBoLmhlYWRlcnMpRS5zZXRSZXF1ZXN0SGVhZGVyKHAsaC5oZWFkZXJzW3BdKTtpZihoLmJlZm9yZVNlbmQmJighMT09PWguYmVmb3JlU2VuZC5jYWxsKGcsRSxoKXx8YykpcmV0dXJuIEUuYWJvcnQoKTtpZihDPVwiYWJvcnRcIixtLmFkZChoLmNvbXBsZXRlKSxFLmRvbmUoaC5zdWNjZXNzKSxFLmZhaWwoaC5lcnJvciksaT1fdChXdCxoLG4sRSkpe2lmKEUucmVhZHlTdGF0ZT0xLGYmJnkudHJpZ2dlcihcImFqYXhTZW5kXCIsW0UsaF0pLGMpcmV0dXJuIEU7aC5hc3luYyYmaC50aW1lb3V0PjAmJih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe0UuYWJvcnQoXCJ0aW1lb3V0XCIpfSxoLnRpbWVvdXQpKTt0cnl7Yz0hMSxpLnNlbmQoYixrKX1jYXRjaChlKXtpZihjKXRocm93IGU7aygtMSxlKX19ZWxzZSBrKC0xLFwiTm8gVHJhbnNwb3J0XCIpO2Z1bmN0aW9uIGsodCxuLHIscyl7dmFyIGwscCxkLGIsVCxDPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHxcIlwiLEUucmVhZHlTdGF0ZT10PjA/NDowLGw9dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoYj1YdChoLEUscikpLGI9VXQoaCxiLEUsbCksbD8oaC5pZk1vZGlmaWVkJiYoKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIikpJiYody5sYXN0TW9kaWZpZWRbb109VCksKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIikpJiYody5ldGFnW29dPVQpKSwyMDQ9PT10fHxcIkhFQURcIj09PWgudHlwZT9DPVwibm9jb250ZW50XCI6MzA0PT09dD9DPVwibm90bW9kaWZpZWRcIjooQz1iLnN0YXRlLHA9Yi5kYXRhLGw9IShkPWIuZXJyb3IpKSk6KGQ9QywhdCYmQ3x8KEM9XCJlcnJvclwiLHQ8MCYmKHQ9MCkpKSxFLnN0YXR1cz10LEUuc3RhdHVzVGV4dD0obnx8QykrXCJcIixsP3YucmVzb2x2ZVdpdGgoZyxbcCxDLEVdKTp2LnJlamVjdFdpdGgoZyxbRSxDLGRdKSxFLnN0YXR1c0NvZGUoeCkseD12b2lkIDAsZiYmeS50cmlnZ2VyKGw/XCJhamF4U3VjY2Vzc1wiOlwiYWpheEVycm9yXCIsW0UsaCxsP3A6ZF0pLG0uZmlyZVdpdGgoZyxbRSxDXSksZiYmKHkudHJpZ2dlcihcImFqYXhDb21wbGV0ZVwiLFtFLGhdKSwtLXcuYWN0aXZlfHx3LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfXJldHVybiBFfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5nZXQoZSx0LG4sXCJqc29uXCIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdy5nZXQoZSx2b2lkIDAsdCxcInNjcmlwdFwiKX19KSx3LmVhY2goW1wiZ2V0XCIsXCJwb3N0XCJdLGZ1bmN0aW9uKGUsdCl7d1t0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gZyhuKSYmKGk9aXx8cixyPW4sbj12b2lkIDApLHcuYWpheCh3LmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sdy5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksdy5fZXZhbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gdy5hamF4KHt1cmw6ZSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsXCJ0aHJvd3NcIjohMH0pfSx3LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKGcoZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD13KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gZyhlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dyh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1nKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7dyh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoXCJib2R5XCIpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLHcuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hdy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sdy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LHcuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFZ0PXswOjIwMCwxMjIzOjIwNH0sR3Q9dy5hamF4U2V0dGluZ3MueGhyKCk7aC5jb3JzPSEhR3QmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBHdCxoLmFqYXg9R3Q9ISFHdCx3LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZihoLmNvcnN8fEd0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoaVtcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsXCJhYm9ydFwiPT09ZT9zLmFib3J0KCk6XCJlcnJvclwiPT09ZT9cIm51bWJlclwiIT10eXBlb2Ygcy5zdGF0dXM/bygwLFwiZXJyb3JcIik6byhzLnN0YXR1cyxzLnN0YXR1c1RleHQpOm8oVnRbcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsXCJ0ZXh0XCIhPT0ocy5yZXNwb25zZVR5cGV8fFwidGV4dFwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHMucmVzcG9uc2VUZXh0P3tiaW5hcnk6cy5yZXNwb25zZX06e3RleHQ6cy5yZXNwb25zZVRleHR9LHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPW4oKSxyPXMub25lcnJvcj1zLm9udGltZW91dD1uKFwiZXJyb3JcIiksdm9pZCAwIT09cy5vbmFib3J0P3Mub25hYm9ydD1yOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXMucmVhZHlTdGF0ZSYmZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcigpfSl9LG49bihcImFib3J0XCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLHcuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6XCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwifSxjb250ZW50czp7c2NyaXB0Oi9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL30sY29udmVydGVyczp7XCJ0ZXh0IHNjcmlwdFwiOmZ1bmN0aW9uKGUpe3JldHVybiB3Lmdsb2JhbEV2YWwoZSksZX19fSksdy5hamF4UHJlZmlsdGVyKFwic2NyaXB0XCIsZnVuY3Rpb24oZSl7dm9pZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9XCJHRVRcIil9KSx3LmFqYXhUcmFuc3BvcnQoXCJzY3JpcHRcIixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKGksbyl7dD13KFwiPHNjcmlwdD5cIikucHJvcCh7Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oXCJsb2FkIGVycm9yXCIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZvKFwiZXJyb3JcIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxyLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIFl0PVtdLFF0PS8oPSlcXD8oPz0mfCQpfFxcP1xcPy87dy5hamF4U2V0dXAoe2pzb25wOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WXQucG9wKCl8fHcuZXhwYW5kbytcIl9cIitFdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksdy5hamF4UHJlZmlsdGVyKFwianNvbiBqc29ucFwiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLGEscz0hMSE9PXQuanNvbnAmJihRdC50ZXN0KHQudXJsKT9cInVybFwiOlwic3RyaW5nXCI9PXR5cGVvZiB0LmRhdGEmJjA9PT0odC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmUXQudGVzdCh0LmRhdGEpJiZcImRhdGFcIik7aWYoc3x8XCJqc29ucFwiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9dC5qc29ucENhbGxiYWNrPWcodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShRdCxcIiQxXCIraSk6ITEhPT10Lmpzb25wJiYodC51cmwrPShrdC50ZXN0KHQudXJsKT9cIiZcIjpcIj9cIikrdC5qc29ucCtcIj1cIitpKSx0LmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXT1mdW5jdGlvbigpe3JldHVybiBhfHx3LmVycm9yKGkrXCIgd2FzIG5vdCBjYWxsZWRcIiksYVswXX0sdC5kYXRhVHlwZXNbMF09XCJqc29uXCIsbz1lW2ldLGVbaV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1vP3coZSkucmVtb3ZlUHJvcChpKTplW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssWXQucHVzaChpKSksYSYmZyhvKSYmbyhhWzBdKSxhPW89dm9pZCAwfSksXCJzY3JpcHRcIn0pLGguY3JlYXRlSFRNTERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9ci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIikuYm9keTtyZXR1cm4gZS5pbm5lckhUTUw9XCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiLDI9PT1lLmNoaWxkTm9kZXMubGVuZ3RofSgpLHcucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm5bXTtcImJvb2xlYW5cIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIGksbyxhO3JldHVybiB0fHwoaC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChpPSh0PXIuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpKS5jcmVhdGVFbGVtZW50KFwiYmFzZVwiKSkuaHJlZj1yLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKGkpKTp0PXIpLG89QS5leGVjKGUpLGE9IW4mJltdLG8/W3QuY3JlYXRlRWxlbWVudChvWzFdKV06KG89eGUoW2VdLHQsYSksYSYmYS5sZW5ndGgmJncoYSkucmVtb3ZlKCksdy5tZXJnZShbXSxvLmNoaWxkTm9kZXMpKX0sdy5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT10aGlzLHM9ZS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gcz4tMSYmKHI9dnQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLGcodCk/KG49dCx0PXZvaWQgMCk6dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPVwiUE9TVFwiKSxhLmxlbmd0aD4wJiZ3LmFqYXgoe3VybDplLHR5cGU6aXx8XCJHRVRcIixkYXRhVHlwZTpcImh0bWxcIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP3coXCI8ZGl2PlwiKS5hcHBlbmQody5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSx3LmVhY2goW1wiYWpheFN0YXJ0XCIsXCJhamF4U3RvcFwiLFwiYWpheENvbXBsZXRlXCIsXCJhamF4RXJyb3JcIixcImFqYXhTdWNjZXNzXCIsXCJhamF4U2VuZFwiXSxmdW5jdGlvbihlLHQpe3cuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx3LmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gdy5ncmVwKHcudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSx3Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPXcuY3NzKGUsXCJwb3NpdGlvblwiKSxmPXcoZSkscD17fTtcInN0YXRpY1wiPT09YyYmKGUuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxzPWYub2Zmc2V0KCksbz13LmNzcyhlLFwidG9wXCIpLHU9dy5jc3MoZSxcImxlZnRcIiksKGw9KFwiYWJzb2x1dGVcIj09PWN8fFwiZml4ZWRcIj09PWMpJiYobyt1KS5pbmRleE9mKFwiYXV0b1wiKT4tMSk/KGE9KHI9Zi5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxnKHQpJiYodD10LmNhbGwoZSxuLHcuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihwLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihwLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSxcInVzaW5nXCJpbiB0P3QudXNpbmcuY2FsbChlLHApOmYuY3NzKHApfX0sdy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3cub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLHI9dGhpc1swXTtpZihyKXJldHVybiByLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyh0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDp0LnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6dC5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoXCJmaXhlZFwiPT09dy5jc3MocixcInBvc2l0aW9uXCIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT13KGUpLm9mZnNldCgpKS50b3ArPXcuY3NzKGUsXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxpLmxlZnQrPXcuY3NzKGUsXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3Atdy5jc3MocixcIm1hcmdpblRvcFwiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtdy5jc3MocixcIm1hcmdpbkxlZnRcIiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxiZX0pfX0pLHcuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1cInBhZ2VZT2Zmc2V0XCI9PT10O3cuZm5bZV09ZnVuY3Rpb24ocil7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksdy5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09X2UoaC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsbil7aWYobilyZXR1cm4gbj1GZShlLHQpLFdlLnRlc3Qobik/dyhlKS5wb3NpdGlvbigpW3RdK1wicHhcIjpufSl9KSx3LmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2UsY29udGVudDp0LFwiXCI6XCJvdXRlclwiK2V9LGZ1bmN0aW9uKG4scil7dy5mbltyXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihufHxcImJvb2xlYW5cIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIHoodGhpcyxmdW5jdGlvbih0LG4saSl7dmFyIG87cmV0dXJuIHkodCk/MD09PXIuaW5kZXhPZihcIm91dGVyXCIpP3RbXCJpbm5lclwiK2VdOnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W1wiY2xpZW50XCIrZV06OT09PXQubm9kZVR5cGU/KG89dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5W1wic2Nyb2xsXCIrZV0sb1tcInNjcm9sbFwiK2VdLHQuYm9keVtcIm9mZnNldFwiK2VdLG9bXCJvZmZzZXRcIitlXSxvW1wiY2xpZW50XCIrZV0pKTp2b2lkIDA9PT1pP3cuY3NzKHQsbixzKTp3LnN0eWxlKHQsbixpLHMpfSx0LGE/aTp2b2lkIDAsYSl9fSl9KSx3LmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksdy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHcuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLFwiKipcIik6dGhpcy5vZmYodCxlfHxcIioqXCIsbil9fSksdy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxnKGUpKXJldHVybiByPW8uY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHcuZ3VpZCsrLGl9LHcuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/dy5yZWFkeVdhaXQrKzp3LnJlYWR5KCEwKX0sdy5pc0FycmF5PUFycmF5LmlzQXJyYXksdy5wYXJzZUpTT049SlNPTi5wYXJzZSx3Lm5vZGVOYW1lPU4sdy5pc0Z1bmN0aW9uPWcsdy5pc1dpbmRvdz15LHcuY2FtZWxDYXNlPUcsdy50eXBlPXgsdy5ub3c9RGF0ZS5ub3csdy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dy50eXBlKGUpO3JldHVybihcIm51bWJlclwiPT09dHx8XCJzdHJpbmdcIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiB3fSk7dmFyIEp0PWUualF1ZXJ5LEt0PWUuJDtyZXR1cm4gdy5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT13JiYoZS4kPUt0KSx0JiZlLmpRdWVyeT09PXcmJihlLmpRdWVyeT1KdCksd30sdHx8KGUualF1ZXJ5PWUuJD13KSx3fSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n"); +eval("window.$ = window.jQuery = __webpack_require__(48);\n__webpack_require__(49);\n__webpack_require__(50);\n__webpack_require__(51);\n__webpack_require__(52);\n__webpack_require__(53);\n__webpack_require__(54);\nwindow.Chart = __webpack_require__(55);\n\n$(function () {\n 'use strict';\n /* ChartJS\n * -------\n * Charts\n */\n\n // sales example chart\n\n var salesChartCanvas = $('#salesChart').get(0).getContext('2d');\n var salesChart = new Chart(salesChartCanvas);\n var salesChartData = {\n labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],\n datasets: [{\n label: 'Electronics',\n fillColor: 'rgb(210, 214, 222)',\n strokeColor: 'rgb(210, 214, 222)',\n pointColor: 'rgb(210, 214, 222)',\n pointStrokeColor: '#c1c7d1',\n pointHighlightFill: '#fff',\n pointHighlightStroke: 'rgb(220,220,220)',\n data: [65, 59, 80, 81, 56, 55, 40]\n }, {\n label: 'Digital Goods',\n fillColor: 'rgba(60,141,188,0.9)',\n strokeColor: 'rgba(60,141,188,0.8)',\n pointColor: '#3b8bba',\n pointStrokeColor: 'rgba(60,141,188,1)',\n pointHighlightFill: '#fff',\n pointHighlightStroke: 'rgba(60,141,188,1)',\n data: [28, 48, 40, 19, 86, 27, 90]\n }]\n };\n var salesChartOptions = {\n showScale: true,\n scaleShowGridLines: false,\n scaleGridLineColor: 'rgba(0,0,0,.05)',\n scaleGridLineWidth: 1,\n scaleShowHorizontalLines: true,\n scaleShowVerticalLines: true,\n bezierCurve: true,\n bezierCurveTension: 0.3,\n pointDot: false,\n pointDotRadius: 4,\n pointDotStrokeWidth: 1,\n pointHitDetectionRadius: 20,\n datasetStroke: true,\n datasetStrokeWidth: 2,\n datasetFill: true,\n legendTemplate: '<ul class=\\'<%=name.toLowerCase()%>-legend\\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\\'background-color:<%=datasets[i].lineColor%>\\'></span><%=datasets[i].label%></li><%}%></ul>',\n maintainAspectRatio: true,\n responsive: true\n };\n salesChart.Line(salesChartData, salesChartOptions);\n\n // -------------\n // - PIE CHART -\n // -------------\n var pieChartCanvas = $('#pieChart').get(0).getContext('2d');\n var pieChart = new Chart(pieChartCanvas);\n var PieData = [{\n value: 700,\n color: '#f56954',\n highlight: '#f56954',\n label: 'Chrome'\n }, {\n value: 500,\n color: '#00a65a',\n highlight: '#00a65a',\n label: 'IE'\n }, {\n value: 400,\n color: '#f39c12',\n highlight: '#f39c12',\n label: 'FireFox'\n }, {\n value: 600,\n color: '#00c0ef',\n highlight: '#00c0ef',\n label: 'Safari'\n }, {\n value: 300,\n color: '#3c8dbc',\n highlight: '#3c8dbc',\n label: 'Opera'\n }, {\n value: 100,\n color: '#d2d6de',\n highlight: '#d2d6de',\n label: 'Navigator'\n }];\n var pieOptions = {\n segmentShowStroke: true,\n segmentStrokeColor: '#fff',\n segmentStrokeWidth: 1,\n percentageInnerCutout: 50,\n animationSteps: 100,\n animationEasing: 'easeOutBounce',\n animateRotate: true,\n animateScale: false,\n responsive: true,\n maintainAspectRatio: false,\n legendTemplate: '<ul class=\\'<%=name.toLowerCase()%>-legend\\'><% for (var i=0; i<segments.length; i++){%><li><span style=\\'background-color:<%=segments[i].fillColor%>\\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',\n tooltipTemplate: '<%=value %> <%=label%> users'\n };\n pieChart.Doughnut(PieData, pieOptions);\n\n /* jVector Maps\n * ------------\n * Create a world map with markers\n */\n $('#world-map-markers').vectorMap({\n map: 'world_mill_en',\n normalizeFunction: 'polynomial',\n hoverOpacity: 0.7,\n hoverColor: false,\n backgroundColor: 'transparent',\n regionStyle: {\n initial: {\n fill: 'rgba(210, 214, 222, 1)',\n 'fill-opacity': 1,\n stroke: 'none',\n 'stroke-width': 0,\n 'stroke-opacity': 1\n },\n hover: {\n 'fill-opacity': 0.7,\n cursor: 'pointer'\n },\n selected: {\n fill: 'yellow'\n },\n selectedHover: {}\n },\n markerStyle: {\n initial: {\n fill: '#00a65a',\n stroke: '#111'\n }\n },\n markers: [{\n latLng: [41.90, 12.45],\n name: 'Vatican City'\n }, {\n latLng: [43.73, 7.41],\n name: 'Monaco'\n }, {\n latLng: [-0.52, 166.93],\n name: 'Nauru'\n }, {\n latLng: [-8.51, 179.21],\n name: 'Tuvalu'\n }, {\n latLng: [43.93, 12.46],\n name: 'San Marino'\n }, {\n latLng: [47.14, 9.52],\n name: 'Liechtenstein'\n }, {\n latLng: [7.11, 171.06],\n name: 'Marshall Islands'\n }, {\n latLng: [17.3, -62.73],\n name: 'Saint Kitts and Nevis'\n }, {\n latLng: [3.2, 73.22],\n name: 'Maldives'\n }, {\n latLng: [35.88, 14.5],\n name: 'Malta'\n }, {\n latLng: [12.05, -61.75],\n name: 'Grenada'\n }, {\n latLng: [13.16, -61.23],\n name: 'Saint Vincent and the Grenadines'\n }, {\n latLng: [13.16, -59.55],\n name: 'Barbados'\n }, {\n latLng: [17.11, -61.85],\n name: 'Antigua and Barbuda'\n }, {\n latLng: [-4.61, 55.45],\n name: 'Seychelles'\n }, {\n latLng: [7.35, 134.46],\n name: 'Palau'\n }, {\n latLng: [42.5, 1.51],\n name: 'Andorra'\n }, {\n latLng: [14.01, -60.98],\n name: 'Saint Lucia'\n }, {\n latLng: [6.91, 158.18],\n name: 'Federated States of Micronesia'\n }, {\n latLng: [1.3, 103.8],\n name: 'Singapore'\n }, {\n latLng: [1.46, 173.03],\n name: 'Kiribati'\n }, {\n latLng: [-21.13, -175.2],\n name: 'Tonga'\n }, {\n latLng: [15.3, -61.38],\n name: 'Dominica'\n }, {\n latLng: [-20.2, 57.5],\n name: 'Mauritius'\n }, {\n latLng: [26.02, 50.55],\n name: 'Bahrain'\n }, {\n latLng: [0.33, 6.73],\n name: 'São Tomé and Príncipe'\n }]\n });\n});\n\n//---------------------------------------------------------END OF CHARTS------------------------------------------------------\n\n\n/**\n * AdminLTE Demo Menu\n * ------------------\n * You should not use this file in production.\n * This file is for demo purposes only.\n */\n$(function () {\n 'use strict';\n\n /**\n * Get access to plugins\n */\n\n $('[data-toggle=\"control-sidebar\"]').controlSidebar();\n $('[data-toggle=\"push-menu\"]').pushMenu();\n\n var $pushMenu = $('[data-toggle=\"push-menu\"]').data('lte.pushmenu');\n var $controlSidebar = $('[data-toggle=\"control-sidebar\"]').data('lte.controlsidebar');\n var $layout = $('body').data('lte.layout');\n\n /**\n * List of all the available skins\n *\n * @type Array\n */\n var mySkins = ['skin-blue', 'skin-black', 'skin-red', 'skin-yellow', 'skin-purple', 'skin-green', 'skin-blue-light', 'skin-black-light', 'skin-red-light', 'skin-yellow-light', 'skin-purple-light', 'skin-green-light'];\n\n /**\n * Get a prestored setting\n *\n * @param String name Name of of the setting\n * @returns String The value of the setting | null\n */\n function get(name) {\n if (typeof Storage !== 'undefined') {\n return localStorage.getItem(name);\n } else {\n window.alert('Please use a modern browser to properly view this template!');\n }\n }\n\n /**\n * Store a new settings in the browser\n *\n * @param String name Name of the setting\n * @param String val Value of the setting\n * @returns void\n */\n function store(name, val) {\n if (typeof Storage !== 'undefined') {\n localStorage.setItem(name, val);\n } else {\n window.alert('Please use a modern browser to properly view this template!');\n }\n }\n\n /**\n * Toggles layout classes\n *\n * @param String cls the layout class to toggle\n * @returns void\n */\n function changeLayout(cls) {\n $('body').toggleClass(cls);\n $layout.fixSidebar();\n if ($('body').hasClass('fixed') && cls == 'fixed') {\n $pushMenu.expandOnHover();\n $layout.activate();\n }\n $controlSidebar.fix();\n }\n\n /**\n * Replaces the old skin with the new skin\n * @param String cls the new skin class\n * @returns Boolean false to prevent link's default action\n */\n function changeSkin(cls) {\n $.each(mySkins, function (i) {\n $('body').removeClass(mySkins[i]);\n });\n\n $('body').addClass(cls);\n store('skin', cls);\n return false;\n }\n\n /**\n * Retrieve default settings and apply them to the template\n *\n * @returns void\n */\n function setup() {\n var tmp = get('skin');\n if (tmp && $.inArray(tmp, mySkins)) changeSkin(tmp);\n\n // Add the change skin listener\n $('[data-skin]').on('click', function (e) {\n if ($(this).hasClass('knob')) return;\n e.preventDefault();\n changeSkin($(this).data('skin'));\n });\n\n // Add the layout manager\n $('[data-layout]').on('click', function () {\n changeLayout($(this).data('layout'));\n });\n\n $('[data-controlsidebar]').on('click', function () {\n changeLayout($(this).data('controlsidebar'));\n var slide = !$controlSidebar.options.slide;\n\n $controlSidebar.options.slide = slide;\n if (!slide) $('.control-sidebar').removeClass('control-sidebar-open');\n });\n\n $('[data-sidebarskin=\"toggle\"]').on('click', function () {\n var $sidebar = $('.control-sidebar');\n if ($sidebar.hasClass('control-sidebar-dark')) {\n $sidebar.removeClass('control-sidebar-dark');\n $sidebar.addClass('control-sidebar-light');\n } else {\n $sidebar.removeClass('control-sidebar-light');\n $sidebar.addClass('control-sidebar-dark');\n }\n });\n\n $('[data-enable=\"expandOnHover\"]').on('click', function () {\n $(this).attr('disabled', true);\n $pushMenu.expandOnHover();\n if (!$('body').hasClass('sidebar-collapse')) $('[data-layout=\"sidebar-collapse\"]').click();\n });\n\n // Reset options\n if ($('body').hasClass('fixed')) {\n $('[data-layout=\"fixed\"]').attr('checked', 'checked');\n }\n if ($('body').hasClass('layout-boxed')) {\n $('[data-layout=\"layout-boxed\"]').attr('checked', 'checked');\n }\n if ($('body').hasClass('sidebar-collapse')) {\n $('[data-layout=\"sidebar-collapse\"]').attr('checked', 'checked');\n }\n }\n\n // Create the new tab\n var $tabPane = $('<div />', {\n 'id': 'control-sidebar-theme-demo-options-tab',\n 'class': 'tab-pane active'\n });\n\n // Create the tab button\n var $tabButton = $('<li />', {\n 'class': 'active'\n }).html('<a href=\\'#control-sidebar-theme-demo-options-tab\\' data-toggle=\\'tab\\'>' + '<i class=\"fa fa-wrench\"></i>' + '</a>');\n\n // Add the tab button to the right sidebar tabs\n $('[href=\"#control-sidebar-home-tab\"]').parent().before($tabButton);\n\n // Create the menu\n var $demoSettings = $('<div />');\n\n // Layout options\n $demoSettings.append('<h4 class=\"control-sidebar-heading\">' + 'Layout Options' + '</h4>'\n // Fixed layout\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-layout=\"fixed\"class=\"pull-right\"/> ' + 'Fixed layout' + '</label>' + '<p>Activate the fixed layout. You can\\'t use fixed and boxed layouts together</p>' + '</div>'\n // Boxed layout\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-layout=\"layout-boxed\" class=\"pull-right\"/> ' + 'Boxed Layout' + '</label>' + '<p>Activate the boxed layout</p>' + '</div>'\n // Sidebar Toggle\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-layout=\"sidebar-collapse\"class=\"pull-right\"/> ' + 'Toggle Sidebar' + '</label>' + '<p>Toggle the left sidebar\\'s state (open or collapse)</p>' + '</div>'\n // Sidebar mini expand on hover toggle\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-enable=\"expandOnHover\"class=\"pull-right\"/> ' + 'Sidebar Expand on Hover' + '</label>' + '<p>Let the sidebar mini expand on hover</p>' + '</div>'\n // Control Sidebar Toggle\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-controlsidebar=\"control-sidebar-open\"class=\"pull-right\"/> ' + 'Toggle Right Sidebar Slide' + '</label>' + '<p>Toggle between slide over content and push content effects</p>' + '</div>'\n // Control Sidebar Skin Toggle\n + '<div class=\"form-group\">' + '<label class=\"control-sidebar-subheading\">' + '<input type=\"checkbox\"data-sidebarskin=\"toggle\"class=\"pull-right\"/> ' + 'Toggle Right Sidebar Skin' + '</label>' + '<p>Toggle between dark and light skins for the right sidebar</p>' + '</div>');\n var $skinsList = $('<ul />', {\n 'class': 'list-unstyled clearfix'\n });\n\n // Dark sidebar skins\n var $skinBlue = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-blue\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px; background: #367fa9\"></span><span class=\"bg-light-blue\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222d32\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Blue</p>');\n $skinsList.append($skinBlue);\n var $skinBlack = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-black\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div style=\"box-shadow: 0 0 2px rgba(0,0,0,0.1)\" class=\"clearfix\"><span style=\"display:block; width: 20%; float: left; height: 7px; background: #fefefe\"></span><span style=\"display:block; width: 80%; float: left; height: 7px; background: #fefefe\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Black</p>');\n $skinsList.append($skinBlack);\n var $skinPurple = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-purple\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-purple-active\"></span><span class=\"bg-purple\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222d32\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Purple</p>');\n $skinsList.append($skinPurple);\n var $skinGreen = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-green\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-green-active\"></span><span class=\"bg-green\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222d32\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Green</p>');\n $skinsList.append($skinGreen);\n var $skinRed = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-red\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-red-active\"></span><span class=\"bg-red\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222d32\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Red</p>');\n $skinsList.append($skinRed);\n var $skinYellow = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-yellow\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-yellow-active\"></span><span class=\"bg-yellow\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #222d32\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\">Yellow</p>');\n $skinsList.append($skinYellow);\n\n // Light sidebar skins\n var $skinBlueLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-blue-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px; background: #367fa9\"></span><span class=\"bg-light-blue\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Blue Light</p>');\n $skinsList.append($skinBlueLight);\n var $skinBlackLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-black-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div style=\"box-shadow: 0 0 2px rgba(0,0,0,0.1)\" class=\"clearfix\"><span style=\"display:block; width: 20%; float: left; height: 7px; background: #fefefe\"></span><span style=\"display:block; width: 80%; float: left; height: 7px; background: #fefefe\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Black Light</p>');\n $skinsList.append($skinBlackLight);\n var $skinPurpleLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-purple-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-purple-active\"></span><span class=\"bg-purple\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Purple Light</p>');\n $skinsList.append($skinPurpleLight);\n var $skinGreenLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-green-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-green-active\"></span><span class=\"bg-green\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Green Light</p>');\n $skinsList.append($skinGreenLight);\n var $skinRedLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-red-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-red-active\"></span><span class=\"bg-red\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Red Light</p>');\n $skinsList.append($skinRedLight);\n var $skinYellowLight = $('<li />', {\n style: 'float:left; width: 33.33333%; padding: 5px;'\n }).append('<a href=\"javascript:void(0)\" data-skin=\"skin-yellow-light\" style=\"display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)\" class=\"clearfix full-opacity-hover\">' + '<div><span style=\"display:block; width: 20%; float: left; height: 7px;\" class=\"bg-yellow-active\"></span><span class=\"bg-yellow\" style=\"display:block; width: 80%; float: left; height: 7px;\"></span></div>' + '<div><span style=\"display:block; width: 20%; float: left; height: 20px; background: #f9fafc\"></span><span style=\"display:block; width: 80%; float: left; height: 20px; background: #f4f5f7\"></span></div>' + '</a>' + '<p class=\"text-center no-margin\" style=\"font-size: 12px\">Yellow Light</p>');\n $skinsList.append($skinYellowLight);\n\n $demoSettings.append('<h4 class=\"control-sidebar-heading\">Skins</h4>');\n $demoSettings.append($skinsList);\n\n $tabPane.append($demoSettings);\n $('#control-sidebar-home-tab').after($tabPane);\n\n setup();\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FkbWluLmpzPzI5ODYiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJDaGFydCIsInNhbGVzQ2hhcnRDYW52YXMiLCJnZXQiLCJnZXRDb250ZXh0Iiwic2FsZXNDaGFydCIsInNhbGVzQ2hhcnREYXRhIiwibGFiZWxzIiwiZGF0YXNldHMiLCJsYWJlbCIsImZpbGxDb2xvciIsInN0cm9rZUNvbG9yIiwicG9pbnRDb2xvciIsInBvaW50U3Ryb2tlQ29sb3IiLCJwb2ludEhpZ2hsaWdodEZpbGwiLCJwb2ludEhpZ2hsaWdodFN0cm9rZSIsImRhdGEiLCJzYWxlc0NoYXJ0T3B0aW9ucyIsInNob3dTY2FsZSIsInNjYWxlU2hvd0dyaWRMaW5lcyIsInNjYWxlR3JpZExpbmVDb2xvciIsInNjYWxlR3JpZExpbmVXaWR0aCIsInNjYWxlU2hvd0hvcml6b250YWxMaW5lcyIsInNjYWxlU2hvd1ZlcnRpY2FsTGluZXMiLCJiZXppZXJDdXJ2ZSIsImJlemllckN1cnZlVGVuc2lvbiIsInBvaW50RG90IiwicG9pbnREb3RSYWRpdXMiLCJwb2ludERvdFN0cm9rZVdpZHRoIiwicG9pbnRIaXREZXRlY3Rpb25SYWRpdXMiLCJkYXRhc2V0U3Ryb2tlIiwiZGF0YXNldFN0cm9rZVdpZHRoIiwiZGF0YXNldEZpbGwiLCJsZWdlbmRUZW1wbGF0ZSIsIm1haW50YWluQXNwZWN0UmF0aW8iLCJyZXNwb25zaXZlIiwiTGluZSIsInBpZUNoYXJ0Q2FudmFzIiwicGllQ2hhcnQiLCJQaWVEYXRhIiwidmFsdWUiLCJjb2xvciIsImhpZ2hsaWdodCIsInBpZU9wdGlvbnMiLCJzZWdtZW50U2hvd1N0cm9rZSIsInNlZ21lbnRTdHJva2VDb2xvciIsInNlZ21lbnRTdHJva2VXaWR0aCIsInBlcmNlbnRhZ2VJbm5lckN1dG91dCIsImFuaW1hdGlvblN0ZXBzIiwiYW5pbWF0aW9uRWFzaW5nIiwiYW5pbWF0ZVJvdGF0ZSIsImFuaW1hdGVTY2FsZSIsInRvb2x0aXBUZW1wbGF0ZSIsIkRvdWdobnV0IiwidmVjdG9yTWFwIiwibWFwIiwibm9ybWFsaXplRnVuY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJob3ZlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwicmVnaW9uU3R5bGUiLCJpbml0aWFsIiwiZmlsbCIsInN0cm9rZSIsImhvdmVyIiwiY3Vyc29yIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEhvdmVyIiwibWFya2VyU3R5bGUiLCJtYXJrZXJzIiwibGF0TG5nIiwibmFtZSIsImNvbnRyb2xTaWRlYmFyIiwicHVzaE1lbnUiLCIkcHVzaE1lbnUiLCIkY29udHJvbFNpZGViYXIiLCIkbGF5b3V0IiwibXlTa2lucyIsIlN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiYWxlcnQiLCJzdG9yZSIsInZhbCIsInNldEl0ZW0iLCJjaGFuZ2VMYXlvdXQiLCJjbHMiLCJ0b2dnbGVDbGFzcyIsImZpeFNpZGViYXIiLCJoYXNDbGFzcyIsImV4cGFuZE9uSG92ZXIiLCJhY3RpdmF0ZSIsImZpeCIsImNoYW5nZVNraW4iLCJlYWNoIiwiaSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJzZXR1cCIsInRtcCIsImluQXJyYXkiLCJvbiIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInNsaWRlIiwib3B0aW9ucyIsIiRzaWRlYmFyIiwiYXR0ciIsImNsaWNrIiwiJHRhYlBhbmUiLCIkdGFiQnV0dG9uIiwiaHRtbCIsInBhcmVudCIsImJlZm9yZSIsIiRkZW1vU2V0dGluZ3MiLCJhcHBlbmQiLCIkc2tpbnNMaXN0IiwiJHNraW5CbHVlIiwic3R5bGUiLCIkc2tpbkJsYWNrIiwiJHNraW5QdXJwbGUiLCIkc2tpbkdyZWVuIiwiJHNraW5SZWQiLCIkc2tpblllbGxvdyIsIiRza2luQmx1ZUxpZ2h0IiwiJHNraW5CbGFja0xpZ2h0IiwiJHNraW5QdXJwbGVMaWdodCIsIiRza2luR3JlZW5MaWdodCIsIiRza2luUmVkTGlnaHQiLCIkc2tpblllbGxvd0xpZ2h0IiwiYWZ0ZXIiLCJ0b29sdGlwIl0sIm1hcHBpbmdzIjoiQUFBQUEsT0FBT0MsQ0FBUCxHQUFXRCxPQUFPRSxNQUFQLEdBQWdCLG1CQUFBQyxDQUFRLEVBQVIsQ0FBM0I7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQUgsT0FBT0ksS0FBUCxHQUFlLG1CQUFBRCxDQUFRLEVBQVIsQ0FBZjs7QUFHQUYsRUFBRSxZQUFZO0FBQ1Y7QUFDQTs7Ozs7QUFLQTs7QUFDQSxRQUFJSSxtQkFBbUJKLEVBQUUsYUFBRixFQUFpQkssR0FBakIsQ0FBcUIsQ0FBckIsRUFBd0JDLFVBQXhCLENBQW1DLElBQW5DLENBQXZCO0FBQ0EsUUFBSUMsYUFBYSxJQUFJSixLQUFKLENBQVVDLGdCQUFWLENBQWpCO0FBQ0EsUUFBSUksaUJBQWlCO0FBQ2pCQyxnQkFBUSxDQUFDLFNBQUQsRUFBWSxVQUFaLEVBQXdCLE9BQXhCLEVBQWlDLE9BQWpDLEVBQTBDLEtBQTFDLEVBQWlELE1BQWpELEVBQXlELE1BQXpELENBRFM7QUFFakJDLGtCQUFVLENBQUM7QUFDSEMsbUJBQU8sYUFESjtBQUVIQyx1QkFBVyxvQkFGUjtBQUdIQyx5QkFBYSxvQkFIVjtBQUlIQyx3QkFBWSxvQkFKVDtBQUtIQyw4QkFBa0IsU0FMZjtBQU1IQyxnQ0FBb0IsTUFOakI7QUFPSEMsa0NBQXNCLGtCQVBuQjtBQVFIQyxrQkFBTSxDQUFDLEVBQUQsRUFBSyxFQUFMLEVBQVMsRUFBVCxFQUFhLEVBQWIsRUFBaUIsRUFBakIsRUFBcUIsRUFBckIsRUFBeUIsRUFBekI7QUFSSCxTQUFELEVBVU47QUFDSVAsbUJBQU8sZUFEWDtBQUVJQyx1QkFBVyxzQkFGZjtBQUdJQyx5QkFBYSxzQkFIakI7QUFJSUMsd0JBQVksU0FKaEI7QUFLSUMsOEJBQWtCLG9CQUx0QjtBQU1JQyxnQ0FBb0IsTUFOeEI7QUFPSUMsa0NBQXNCLG9CQVAxQjtBQVFJQyxrQkFBTSxDQUFDLEVBQUQsRUFBSyxFQUFMLEVBQVMsRUFBVCxFQUFhLEVBQWIsRUFBaUIsRUFBakIsRUFBcUIsRUFBckIsRUFBeUIsRUFBekI7QUFSVixTQVZNO0FBRk8sS0FBckI7QUF3QkEsUUFBSUMsb0JBQW9CO0FBQ3BCQyxtQkFBVyxJQURTO0FBRXBCQyw0QkFBb0IsS0FGQTtBQUdwQkMsNEJBQW9CLGlCQUhBO0FBSXBCQyw0QkFBb0IsQ0FKQTtBQUtwQkMsa0NBQTBCLElBTE47QUFNcEJDLGdDQUF3QixJQU5KO0FBT3BCQyxxQkFBYSxJQVBPO0FBUXBCQyw0QkFBb0IsR0FSQTtBQVNwQkMsa0JBQVUsS0FUVTtBQVVwQkMsd0JBQWdCLENBVkk7QUFXcEJDLDZCQUFxQixDQVhEO0FBWXBCQyxpQ0FBeUIsRUFaTDtBQWFwQkMsdUJBQWUsSUFiSztBQWNwQkMsNEJBQW9CLENBZEE7QUFlcEJDLHFCQUFhLElBZk87QUFnQnBCQyx3QkFBZ0Isc01BaEJJO0FBaUJwQkMsNkJBQXFCLElBakJEO0FBa0JwQkMsb0JBQVk7QUFsQlEsS0FBeEI7QUFvQkE5QixlQUFXK0IsSUFBWCxDQUFnQjlCLGNBQWhCLEVBQWdDVyxpQkFBaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBSW9CLGlCQUFpQnZDLEVBQUUsV0FBRixFQUFlSyxHQUFmLENBQW1CLENBQW5CLEVBQXNCQyxVQUF0QixDQUFpQyxJQUFqQyxDQUFyQjtBQUNBLFFBQUlrQyxXQUFXLElBQUlyQyxLQUFKLENBQVVvQyxjQUFWLENBQWY7QUFDQSxRQUFJRSxVQUFVLENBQUM7QUFDUEMsZUFBTyxHQURBO0FBRVBDLGVBQU8sU0FGQTtBQUdQQyxtQkFBVyxTQUhKO0FBSVBqQyxlQUFPO0FBSkEsS0FBRCxFQU1WO0FBQ0krQixlQUFPLEdBRFg7QUFFSUMsZUFBTyxTQUZYO0FBR0lDLG1CQUFXLFNBSGY7QUFJSWpDLGVBQU87QUFKWCxLQU5VLEVBWVY7QUFDSStCLGVBQU8sR0FEWDtBQUVJQyxlQUFPLFNBRlg7QUFHSUMsbUJBQVcsU0FIZjtBQUlJakMsZUFBTztBQUpYLEtBWlUsRUFrQlY7QUFDSStCLGVBQU8sR0FEWDtBQUVJQyxlQUFPLFNBRlg7QUFHSUMsbUJBQVcsU0FIZjtBQUlJakMsZUFBTztBQUpYLEtBbEJVLEVBd0JWO0FBQ0krQixlQUFPLEdBRFg7QUFFSUMsZUFBTyxTQUZYO0FBR0lDLG1CQUFXLFNBSGY7QUFJSWpDLGVBQU87QUFKWCxLQXhCVSxFQThCVjtBQUNJK0IsZUFBTyxHQURYO0FBRUlDLGVBQU8sU0FGWDtBQUdJQyxtQkFBVyxTQUhmO0FBSUlqQyxlQUFPO0FBSlgsS0E5QlUsQ0FBZDtBQXFDQSxRQUFJa0MsYUFBYTtBQUNiQywyQkFBbUIsSUFETjtBQUViQyw0QkFBb0IsTUFGUDtBQUdiQyw0QkFBb0IsQ0FIUDtBQUliQywrQkFBdUIsRUFKVjtBQUtiQyx3QkFBZ0IsR0FMSDtBQU1iQyx5QkFBaUIsZUFOSjtBQU9iQyx1QkFBZSxJQVBGO0FBUWJDLHNCQUFjLEtBUkQ7QUFTYmhCLG9CQUFZLElBVEM7QUFVYkQsNkJBQXFCLEtBVlI7QUFXYkQsd0JBQWdCLHFPQVhIO0FBWWJtQix5QkFBaUI7QUFaSixLQUFqQjtBQWNBZCxhQUFTZSxRQUFULENBQWtCZCxPQUFsQixFQUEyQkksVUFBM0I7O0FBR0E7Ozs7QUFJQTdDLE1BQUUsb0JBQUYsRUFBd0J3RCxTQUF4QixDQUFrQztBQUM5QkMsYUFBSyxlQUR5QjtBQUU5QkMsMkJBQW1CLFlBRlc7QUFHOUJDLHNCQUFjLEdBSGdCO0FBSTlCQyxvQkFBWSxLQUprQjtBQUs5QkMseUJBQWlCLGFBTGE7QUFNOUJDLHFCQUFhO0FBQ1RDLHFCQUFTO0FBQ0xDLHNCQUFNLHdCQUREO0FBRUwsZ0NBQWdCLENBRlg7QUFHTEMsd0JBQVEsTUFISDtBQUlMLGdDQUFnQixDQUpYO0FBS0wsa0NBQWtCO0FBTGIsYUFEQTtBQVFUQyxtQkFBTztBQUNILGdDQUFnQixHQURiO0FBRUhDLHdCQUFRO0FBRkwsYUFSRTtBQVlUQyxzQkFBVTtBQUNOSixzQkFBTTtBQURBLGFBWkQ7QUFlVEssMkJBQWU7QUFmTixTQU5pQjtBQXVCOUJDLHFCQUFhO0FBQ1RQLHFCQUFTO0FBQ0xDLHNCQUFNLFNBREQ7QUFFTEMsd0JBQVE7QUFGSDtBQURBLFNBdkJpQjtBQTZCOUJNLGlCQUFTLENBQUM7QUFDRkMsb0JBQVEsQ0FBQyxLQUFELEVBQVEsS0FBUixDQUROO0FBRUZDLGtCQUFNO0FBRkosU0FBRCxFQUlMO0FBQ0lELG9CQUFRLENBQUMsS0FBRCxFQUFRLElBQVIsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBSkssRUFRTDtBQUNJRCxvQkFBUSxDQUFDLENBQUMsSUFBRixFQUFRLE1BQVIsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBUkssRUFZTDtBQUNJRCxvQkFBUSxDQUFDLENBQUMsSUFBRixFQUFRLE1BQVIsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBWkssRUFnQkw7QUFDSUQsb0JBQVEsQ0FBQyxLQUFELEVBQVEsS0FBUixDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0FoQkssRUFvQkw7QUFDSUQsb0JBQVEsQ0FBQyxLQUFELEVBQVEsSUFBUixDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0FwQkssRUF3Qkw7QUFDSUQsb0JBQVEsQ0FBQyxJQUFELEVBQU8sTUFBUCxDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0F4QkssRUE0Qkw7QUFDSUQsb0JBQVEsQ0FBQyxJQUFELEVBQU8sQ0FBQyxLQUFSLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQTVCSyxFQWdDTDtBQUNJRCxvQkFBUSxDQUFDLEdBQUQsRUFBTSxLQUFOLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQWhDSyxFQW9DTDtBQUNJRCxvQkFBUSxDQUFDLEtBQUQsRUFBUSxJQUFSLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQXBDSyxFQXdDTDtBQUNJRCxvQkFBUSxDQUFDLEtBQUQsRUFBUSxDQUFDLEtBQVQsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBeENLLEVBNENMO0FBQ0lELG9CQUFRLENBQUMsS0FBRCxFQUFRLENBQUMsS0FBVCxDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0E1Q0ssRUFnREw7QUFDSUQsb0JBQVEsQ0FBQyxLQUFELEVBQVEsQ0FBQyxLQUFULENBRFo7QUFFSUMsa0JBQU07QUFGVixTQWhESyxFQW9ETDtBQUNJRCxvQkFBUSxDQUFDLEtBQUQsRUFBUSxDQUFDLEtBQVQsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBcERLLEVBd0RMO0FBQ0lELG9CQUFRLENBQUMsQ0FBQyxJQUFGLEVBQVEsS0FBUixDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0F4REssRUE0REw7QUFDSUQsb0JBQVEsQ0FBQyxJQUFELEVBQU8sTUFBUCxDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0E1REssRUFnRUw7QUFDSUQsb0JBQVEsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0FoRUssRUFvRUw7QUFDSUQsb0JBQVEsQ0FBQyxLQUFELEVBQVEsQ0FBQyxLQUFULENBRFo7QUFFSUMsa0JBQU07QUFGVixTQXBFSyxFQXdFTDtBQUNJRCxvQkFBUSxDQUFDLElBQUQsRUFBTyxNQUFQLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQXhFSyxFQTRFTDtBQUNJRCxvQkFBUSxDQUFDLEdBQUQsRUFBTSxLQUFOLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQTVFSyxFQWdGTDtBQUNJRCxvQkFBUSxDQUFDLElBQUQsRUFBTyxNQUFQLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQWhGSyxFQW9GTDtBQUNJRCxvQkFBUSxDQUFDLENBQUMsS0FBRixFQUFTLENBQUMsS0FBVixDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0FwRkssRUF3Rkw7QUFDSUQsb0JBQVEsQ0FBQyxJQUFELEVBQU8sQ0FBQyxLQUFSLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQXhGSyxFQTRGTDtBQUNJRCxvQkFBUSxDQUFDLENBQUMsSUFBRixFQUFRLElBQVIsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBNUZLLEVBZ0dMO0FBQ0lELG9CQUFRLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBaEdLLEVBb0dMO0FBQ0lELG9CQUFRLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBcEdLO0FBN0JxQixLQUFsQztBQXVJSCxDQTlQRDs7QUFrUUE7OztBQUdBOzs7Ozs7QUFNQXpFLEVBQUUsWUFBWTtBQUNWOztBQUVBOzs7O0FBSUFBLE1BQUUsaUNBQUYsRUFBcUMwRSxjQUFyQztBQUNBMUUsTUFBRSwyQkFBRixFQUErQjJFLFFBQS9COztBQUVBLFFBQUlDLFlBQVk1RSxFQUFFLDJCQUFGLEVBQStCa0IsSUFBL0IsQ0FBb0MsY0FBcEMsQ0FBaEI7QUFDQSxRQUFJMkQsa0JBQWtCN0UsRUFBRSxpQ0FBRixFQUFxQ2tCLElBQXJDLENBQTBDLG9CQUExQyxDQUF0QjtBQUNBLFFBQUk0RCxVQUFVOUUsRUFBRSxNQUFGLEVBQVVrQixJQUFWLENBQWUsWUFBZixDQUFkOztBQUVBOzs7OztBQUtBLFFBQUk2RCxVQUFVLENBQ1YsV0FEVSxFQUVWLFlBRlUsRUFHVixVQUhVLEVBSVYsYUFKVSxFQUtWLGFBTFUsRUFNVixZQU5VLEVBT1YsaUJBUFUsRUFRVixrQkFSVSxFQVNWLGdCQVRVLEVBVVYsbUJBVlUsRUFXVixtQkFYVSxFQVlWLGtCQVpVLENBQWQ7O0FBZUE7Ozs7OztBQU1BLGFBQVMxRSxHQUFULENBQWFvRSxJQUFiLEVBQW1CO0FBQ2YsWUFBSSxPQUFRTyxPQUFSLEtBQXFCLFdBQXpCLEVBQXNDO0FBQ2xDLG1CQUFPQyxhQUFhQyxPQUFiLENBQXFCVCxJQUFyQixDQUFQO0FBQ0gsU0FGRCxNQUVPO0FBQ0gxRSxtQkFBT29GLEtBQVAsQ0FBYSw2REFBYjtBQUNIO0FBQ0o7O0FBRUQ7Ozs7Ozs7QUFPQSxhQUFTQyxLQUFULENBQWVYLElBQWYsRUFBcUJZLEdBQXJCLEVBQTBCO0FBQ3RCLFlBQUksT0FBUUwsT0FBUixLQUFxQixXQUF6QixFQUFzQztBQUNsQ0MseUJBQWFLLE9BQWIsQ0FBcUJiLElBQXJCLEVBQTJCWSxHQUEzQjtBQUNILFNBRkQsTUFFTztBQUNIdEYsbUJBQU9vRixLQUFQLENBQWEsNkRBQWI7QUFDSDtBQUNKOztBQUVEOzs7Ozs7QUFNQSxhQUFTSSxZQUFULENBQXNCQyxHQUF0QixFQUEyQjtBQUN2QnhGLFVBQUUsTUFBRixFQUFVeUYsV0FBVixDQUFzQkQsR0FBdEI7QUFDQVYsZ0JBQVFZLFVBQVI7QUFDQSxZQUFJMUYsRUFBRSxNQUFGLEVBQVUyRixRQUFWLENBQW1CLE9BQW5CLEtBQStCSCxPQUFPLE9BQTFDLEVBQW1EO0FBQy9DWixzQkFBVWdCLGFBQVY7QUFDQWQsb0JBQVFlLFFBQVI7QUFDSDtBQUNEaEIsd0JBQWdCaUIsR0FBaEI7QUFDSDs7QUFFRDs7Ozs7QUFLQSxhQUFTQyxVQUFULENBQW9CUCxHQUFwQixFQUF5QjtBQUNyQnhGLFVBQUVnRyxJQUFGLENBQU9qQixPQUFQLEVBQWdCLFVBQVVrQixDQUFWLEVBQWE7QUFDekJqRyxjQUFFLE1BQUYsRUFBVWtHLFdBQVYsQ0FBc0JuQixRQUFRa0IsQ0FBUixDQUF0QjtBQUNILFNBRkQ7O0FBSUFqRyxVQUFFLE1BQUYsRUFBVW1HLFFBQVYsQ0FBbUJYLEdBQW5CO0FBQ0FKLGNBQU0sTUFBTixFQUFjSSxHQUFkO0FBQ0EsZUFBTyxLQUFQO0FBQ0g7O0FBRUQ7Ozs7O0FBS0EsYUFBU1ksS0FBVCxHQUFpQjtBQUNiLFlBQUlDLE1BQU1oRyxJQUFJLE1BQUosQ0FBVjtBQUNBLFlBQUlnRyxPQUFPckcsRUFBRXNHLE9BQUYsQ0FBVUQsR0FBVixFQUFldEIsT0FBZixDQUFYLEVBQ0lnQixXQUFXTSxHQUFYOztBQUVKO0FBQ0FyRyxVQUFFLGFBQUYsRUFBaUJ1RyxFQUFqQixDQUFvQixPQUFwQixFQUE2QixVQUFVQyxDQUFWLEVBQWE7QUFDdEMsZ0JBQUl4RyxFQUFFLElBQUYsRUFBUTJGLFFBQVIsQ0FBaUIsTUFBakIsQ0FBSixFQUNJO0FBQ0phLGNBQUVDLGNBQUY7QUFDQVYsdUJBQVcvRixFQUFFLElBQUYsRUFBUWtCLElBQVIsQ0FBYSxNQUFiLENBQVg7QUFDSCxTQUxEOztBQU9BO0FBQ0FsQixVQUFFLGVBQUYsRUFBbUJ1RyxFQUFuQixDQUFzQixPQUF0QixFQUErQixZQUFZO0FBQ3ZDaEIseUJBQWF2RixFQUFFLElBQUYsRUFBUWtCLElBQVIsQ0FBYSxRQUFiLENBQWI7QUFDSCxTQUZEOztBQUlBbEIsVUFBRSx1QkFBRixFQUEyQnVHLEVBQTNCLENBQThCLE9BQTlCLEVBQXVDLFlBQVk7QUFDL0NoQix5QkFBYXZGLEVBQUUsSUFBRixFQUFRa0IsSUFBUixDQUFhLGdCQUFiLENBQWI7QUFDQSxnQkFBSXdGLFFBQVEsQ0FBQzdCLGdCQUFnQjhCLE9BQWhCLENBQXdCRCxLQUFyQzs7QUFFQTdCLDRCQUFnQjhCLE9BQWhCLENBQXdCRCxLQUF4QixHQUFnQ0EsS0FBaEM7QUFDQSxnQkFBSSxDQUFDQSxLQUFMLEVBQ0kxRyxFQUFFLGtCQUFGLEVBQXNCa0csV0FBdEIsQ0FBa0Msc0JBQWxDO0FBQ1AsU0FQRDs7QUFTQWxHLFVBQUUsNkJBQUYsRUFBaUN1RyxFQUFqQyxDQUFvQyxPQUFwQyxFQUE2QyxZQUFZO0FBQ3JELGdCQUFJSyxXQUFXNUcsRUFBRSxrQkFBRixDQUFmO0FBQ0EsZ0JBQUk0RyxTQUFTakIsUUFBVCxDQUFrQixzQkFBbEIsQ0FBSixFQUErQztBQUMzQ2lCLHlCQUFTVixXQUFULENBQXFCLHNCQUFyQjtBQUNBVSx5QkFBU1QsUUFBVCxDQUFrQix1QkFBbEI7QUFDSCxhQUhELE1BR087QUFDSFMseUJBQVNWLFdBQVQsQ0FBcUIsdUJBQXJCO0FBQ0FVLHlCQUFTVCxRQUFULENBQWtCLHNCQUFsQjtBQUNIO0FBQ0osU0FURDs7QUFXQW5HLFVBQUUsK0JBQUYsRUFBbUN1RyxFQUFuQyxDQUFzQyxPQUF0QyxFQUErQyxZQUFZO0FBQ3ZEdkcsY0FBRSxJQUFGLEVBQVE2RyxJQUFSLENBQWEsVUFBYixFQUF5QixJQUF6QjtBQUNBakMsc0JBQVVnQixhQUFWO0FBQ0EsZ0JBQUksQ0FBQzVGLEVBQUUsTUFBRixFQUFVMkYsUUFBVixDQUFtQixrQkFBbkIsQ0FBTCxFQUNJM0YsRUFBRSxrQ0FBRixFQUFzQzhHLEtBQXRDO0FBQ1AsU0FMRDs7QUFPQTtBQUNBLFlBQUk5RyxFQUFFLE1BQUYsRUFBVTJGLFFBQVYsQ0FBbUIsT0FBbkIsQ0FBSixFQUFpQztBQUM3QjNGLGNBQUUsdUJBQUYsRUFBMkI2RyxJQUEzQixDQUFnQyxTQUFoQyxFQUEyQyxTQUEzQztBQUNIO0FBQ0QsWUFBSTdHLEVBQUUsTUFBRixFQUFVMkYsUUFBVixDQUFtQixjQUFuQixDQUFKLEVBQXdDO0FBQ3BDM0YsY0FBRSw4QkFBRixFQUFrQzZHLElBQWxDLENBQXVDLFNBQXZDLEVBQWtELFNBQWxEO0FBQ0g7QUFDRCxZQUFJN0csRUFBRSxNQUFGLEVBQVUyRixRQUFWLENBQW1CLGtCQUFuQixDQUFKLEVBQTRDO0FBQ3hDM0YsY0FBRSxrQ0FBRixFQUFzQzZHLElBQXRDLENBQTJDLFNBQTNDLEVBQXNELFNBQXREO0FBQ0g7QUFFSjs7QUFFRDtBQUNBLFFBQUlFLFdBQVcvRyxFQUFFLFNBQUYsRUFBYTtBQUN4QixjQUFNLHdDQURrQjtBQUV4QixpQkFBUztBQUZlLEtBQWIsQ0FBZjs7QUFLQTtBQUNBLFFBQUlnSCxhQUFhaEgsRUFBRSxRQUFGLEVBQVk7QUFDckIsaUJBQVM7QUFEWSxLQUFaLEVBR1ppSCxJQUhZLENBR1AsNkVBQ0YsOEJBREUsR0FFRixNQUxTLENBQWpCOztBQU9BO0FBQ0FqSCxNQUFFLG9DQUFGLEVBQ0trSCxNQURMLEdBRUtDLE1BRkwsQ0FFWUgsVUFGWjs7QUFJQTtBQUNBLFFBQUlJLGdCQUFnQnBILEVBQUUsU0FBRixDQUFwQjs7QUFFQTtBQUNBb0gsa0JBQWNDLE1BQWQsQ0FDSSx5Q0FDQSxnQkFEQSxHQUVBO0FBQ0E7QUFIQSxNQUtBLDBCQUxBLEdBTUEsNENBTkEsR0FPQSxnRUFQQSxHQVFBLGNBUkEsR0FTQSxVQVRBLEdBVUEsbUZBVkEsR0FXQTtBQUNBO0FBWkEsTUFjQSwwQkFkQSxHQWVBLDRDQWZBLEdBZ0JBLHdFQWhCQSxHQWlCQSxjQWpCQSxHQWtCQSxVQWxCQSxHQW1CQSxrQ0FuQkEsR0FvQkE7QUFDQTtBQXJCQSxNQXVCQSwwQkF2QkEsR0F3QkEsNENBeEJBLEdBeUJBLDJFQXpCQSxHQTBCQSxnQkExQkEsR0EyQkEsVUEzQkEsR0E0QkEsNERBNUJBLEdBNkJBO0FBQ0E7QUE5QkEsTUFnQ0EsMEJBaENBLEdBaUNBLDRDQWpDQSxHQWtDQSx3RUFsQ0EsR0FtQ0EseUJBbkNBLEdBb0NBLFVBcENBLEdBcUNBLDZDQXJDQSxHQXNDQTtBQUNBO0FBdkNBLE1BeUNBLDBCQXpDQSxHQTBDQSw0Q0ExQ0EsR0EyQ0EsdUZBM0NBLEdBNENBLDRCQTVDQSxHQTZDQSxVQTdDQSxHQThDQSxtRUE5Q0EsR0ErQ0E7QUFDQTtBQWhEQSxNQWtEQSwwQkFsREEsR0FtREEsNENBbkRBLEdBb0RBLHNFQXBEQSxHQXFEQSwyQkFyREEsR0FzREEsVUF0REEsR0F1REEsa0VBdkRBLEdBd0RBLFFBekRKO0FBMkRBLFFBQUlDLGFBQWF0SCxFQUFFLFFBQUYsRUFBWTtBQUN6QixpQkFBUztBQURnQixLQUFaLENBQWpCOztBQUlBO0FBQ0EsUUFBSXVILFlBQ0F2SCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLHdKQUNKLDJNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosMkNBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCRSxTQUFsQjtBQUNBLFFBQUlFLGFBQ0F6SCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLHlKQUNKLHNRQURJLEdBRUosd01BRkksR0FHSixNQUhJLEdBSUosNENBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCSSxVQUFsQjtBQUNBLFFBQUlDLGNBQ0ExSCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLDBKQUNKLDRNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosNkNBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCSyxXQUFsQjtBQUNBLFFBQUlDLGFBQ0EzSCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLHlKQUNKLDBNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosNENBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCTSxVQUFsQjtBQUNBLFFBQUlDLFdBQ0E1SCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLHVKQUNKLHNNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosMENBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCTyxRQUFsQjtBQUNBLFFBQUlDLGNBQ0E3SCxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLDBKQUNKLDRNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosNkNBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCUSxXQUFsQjs7QUFFQTtBQUNBLFFBQUlDLGlCQUNBOUgsRUFBRSxRQUFGLEVBQVk7QUFDUndILGVBQU87QUFEQyxLQUFaLEVBR0NILE1BSEQsQ0FHUSw4SkFDSiwyTUFESSxHQUVKLDJNQUZJLEdBR0osTUFISSxHQUlKLHlFQVBKLENBREo7QUFTQUMsZUFBV0QsTUFBWCxDQUFrQlMsY0FBbEI7QUFDQSxRQUFJQyxrQkFDQS9ILEVBQUUsUUFBRixFQUFZO0FBQ1J3SCxlQUFPO0FBREMsS0FBWixFQUdDSCxNQUhELENBR1EsK0pBQ0osc1FBREksR0FFSiwyTUFGSSxHQUdKLE1BSEksR0FJSiwwRUFQSixDQURKO0FBU0FDLGVBQVdELE1BQVgsQ0FBa0JVLGVBQWxCO0FBQ0EsUUFBSUMsbUJBQ0FoSSxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLGdLQUNKLDRNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosMkVBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCVyxnQkFBbEI7QUFDQSxRQUFJQyxrQkFDQWpJLEVBQUUsUUFBRixFQUFZO0FBQ1J3SCxlQUFPO0FBREMsS0FBWixFQUdDSCxNQUhELENBR1EsK0pBQ0osME1BREksR0FFSiwyTUFGSSxHQUdKLE1BSEksR0FJSiwwRUFQSixDQURKO0FBU0FDLGVBQVdELE1BQVgsQ0FBa0JZLGVBQWxCO0FBQ0EsUUFBSUMsZ0JBQ0FsSSxFQUFFLFFBQUYsRUFBWTtBQUNSd0gsZUFBTztBQURDLEtBQVosRUFHQ0gsTUFIRCxDQUdRLDZKQUNKLHNNQURJLEdBRUosMk1BRkksR0FHSixNQUhJLEdBSUosd0VBUEosQ0FESjtBQVNBQyxlQUFXRCxNQUFYLENBQWtCYSxhQUFsQjtBQUNBLFFBQUlDLG1CQUNBbkksRUFBRSxRQUFGLEVBQVk7QUFDUndILGVBQU87QUFEQyxLQUFaLEVBR0NILE1BSEQsQ0FHUSxnS0FDSiw0TUFESSxHQUVKLDJNQUZJLEdBR0osTUFISSxHQUlKLDJFQVBKLENBREo7QUFTQUMsZUFBV0QsTUFBWCxDQUFrQmMsZ0JBQWxCOztBQUVBZixrQkFBY0MsTUFBZCxDQUFxQixnREFBckI7QUFDQUQsa0JBQWNDLE1BQWQsQ0FBcUJDLFVBQXJCOztBQUVBUCxhQUFTTSxNQUFULENBQWdCRCxhQUFoQjtBQUNBcEgsTUFBRSwyQkFBRixFQUErQm9JLEtBQS9CLENBQXFDckIsUUFBckM7O0FBRUFYOztBQUVBcEcsTUFBRSx5QkFBRixFQUE2QnFJLE9BQTdCO0FBQ0gsQ0F4WEQiLCJmaWxlIjoiNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvZGlzdC9qcXVlcnkubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Rpc3QvanMvYWRtaW5sdGUubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL3BsdWdpbnMvanZlY3Rvcm1hcC9qcXVlcnktanZlY3Rvcm1hcC0xLjIuMi5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvcGx1Z2lucy9qdmVjdG9ybWFwL2pxdWVyeS1qdmVjdG9ybWFwLXdvcmxkLW1pbGwtZW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnktc2xpbXNjcm9sbC9qcXVlcnkuc2xpbXNjcm9sbC5taW4uanNcIik7XG53aW5kb3cuQ2hhcnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9jaGFydC5qcy9DaGFydC5qc1wiKTtcblxuXG4kKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLyogQ2hhcnRKU1xuICAgICAqIC0tLS0tLS1cbiAgICAgKiBDaGFydHNcbiAgICAgKi9cblxuICAgIC8vIHNhbGVzIGV4YW1wbGUgY2hhcnRcbiAgICB2YXIgc2FsZXNDaGFydENhbnZhcyA9ICQoJyNzYWxlc0NoYXJ0JykuZ2V0KDApLmdldENvbnRleHQoJzJkJyk7XG4gICAgdmFyIHNhbGVzQ2hhcnQgPSBuZXcgQ2hhcnQoc2FsZXNDaGFydENhbnZhcyk7XG4gICAgdmFyIHNhbGVzQ2hhcnREYXRhID0ge1xuICAgICAgICBsYWJlbHM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5J10sXG4gICAgICAgIGRhdGFzZXRzOiBbe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnRWxlY3Ryb25pY3MnLFxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogJ3JnYigyMTAsIDIxNCwgMjIyKScsXG4gICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6ICdyZ2IoMjEwLCAyMTQsIDIyMiknLFxuICAgICAgICAgICAgICAgIHBvaW50Q29sb3I6ICdyZ2IoMjEwLCAyMTQsIDIyMiknLFxuICAgICAgICAgICAgICAgIHBvaW50U3Ryb2tlQ29sb3I6ICcjYzFjN2QxJyxcbiAgICAgICAgICAgICAgICBwb2ludEhpZ2hsaWdodEZpbGw6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICBwb2ludEhpZ2hsaWdodFN0cm9rZTogJ3JnYigyMjAsMjIwLDIyMCknLFxuICAgICAgICAgICAgICAgIGRhdGE6IFs2NSwgNTksIDgwLCA4MSwgNTYsIDU1LCA0MF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdEaWdpdGFsIEdvb2RzJyxcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6ICdyZ2JhKDYwLDE0MSwxODgsMC45KScsXG4gICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6ICdyZ2JhKDYwLDE0MSwxODgsMC44KScsXG4gICAgICAgICAgICAgICAgcG9pbnRDb2xvcjogJyMzYjhiYmEnLFxuICAgICAgICAgICAgICAgIHBvaW50U3Ryb2tlQ29sb3I6ICdyZ2JhKDYwLDE0MSwxODgsMSknLFxuICAgICAgICAgICAgICAgIHBvaW50SGlnaGxpZ2h0RmlsbDogJyNmZmYnLFxuICAgICAgICAgICAgICAgIHBvaW50SGlnaGxpZ2h0U3Ryb2tlOiAncmdiYSg2MCwxNDEsMTg4LDEpJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBbMjgsIDQ4LCA0MCwgMTksIDg2LCAyNywgOTBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuICAgIHZhciBzYWxlc0NoYXJ0T3B0aW9ucyA9IHtcbiAgICAgICAgc2hvd1NjYWxlOiB0cnVlLFxuICAgICAgICBzY2FsZVNob3dHcmlkTGluZXM6IGZhbHNlLFxuICAgICAgICBzY2FsZUdyaWRMaW5lQ29sb3I6ICdyZ2JhKDAsMCwwLC4wNSknLFxuICAgICAgICBzY2FsZUdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgIHNjYWxlU2hvd0hvcml6b250YWxMaW5lczogdHJ1ZSxcbiAgICAgICAgc2NhbGVTaG93VmVydGljYWxMaW5lczogdHJ1ZSxcbiAgICAgICAgYmV6aWVyQ3VydmU6IHRydWUsXG4gICAgICAgIGJlemllckN1cnZlVGVuc2lvbjogMC4zLFxuICAgICAgICBwb2ludERvdDogZmFsc2UsXG4gICAgICAgIHBvaW50RG90UmFkaXVzOiA0LFxuICAgICAgICBwb2ludERvdFN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBwb2ludEhpdERldGVjdGlvblJhZGl1czogMjAsXG4gICAgICAgIGRhdGFzZXRTdHJva2U6IHRydWUsXG4gICAgICAgIGRhdGFzZXRTdHJva2VXaWR0aDogMixcbiAgICAgICAgZGF0YXNldEZpbGw6IHRydWUsXG4gICAgICAgIGxlZ2VuZFRlbXBsYXRlOiAnPHVsIGNsYXNzPVxcJzwlPW5hbWUudG9Mb3dlckNhc2UoKSU+LWxlZ2VuZFxcJz48JSBmb3IgKHZhciBpPTA7IGk8ZGF0YXNldHMubGVuZ3RoOyBpKyspeyU+PGxpPjxzcGFuIHN0eWxlPVxcJ2JhY2tncm91bmQtY29sb3I6PCU9ZGF0YXNldHNbaV0ubGluZUNvbG9yJT5cXCc+PC9zcGFuPjwlPWRhdGFzZXRzW2ldLmxhYmVsJT48L2xpPjwlfSU+PC91bD4nLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlLFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlXG4gICAgfTtcbiAgICBzYWxlc0NoYXJ0LkxpbmUoc2FsZXNDaGFydERhdGEsIHNhbGVzQ2hhcnRPcHRpb25zKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS1cbiAgICAvLyAtIFBJRSBDSEFSVCAtXG4gICAgLy8gLS0tLS0tLS0tLS0tLVxuICAgIHZhciBwaWVDaGFydENhbnZhcyA9ICQoJyNwaWVDaGFydCcpLmdldCgwKS5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHZhciBwaWVDaGFydCA9IG5ldyBDaGFydChwaWVDaGFydENhbnZhcyk7XG4gICAgdmFyIFBpZURhdGEgPSBbe1xuICAgICAgICAgICAgdmFsdWU6IDcwMCxcbiAgICAgICAgICAgIGNvbG9yOiAnI2Y1Njk1NCcsXG4gICAgICAgICAgICBoaWdobGlnaHQ6ICcjZjU2OTU0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnQ2hyb21lJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogNTAwLFxuICAgICAgICAgICAgY29sb3I6ICcjMDBhNjVhJyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyMwMGE2NWEnLFxuICAgICAgICAgICAgbGFiZWw6ICdJRSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IDQwMCxcbiAgICAgICAgICAgIGNvbG9yOiAnI2YzOWMxMicsXG4gICAgICAgICAgICBoaWdobGlnaHQ6ICcjZjM5YzEyJyxcbiAgICAgICAgICAgIGxhYmVsOiAnRmlyZUZveCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IDYwMCxcbiAgICAgICAgICAgIGNvbG9yOiAnIzAwYzBlZicsXG4gICAgICAgICAgICBoaWdobGlnaHQ6ICcjMDBjMGVmJyxcbiAgICAgICAgICAgIGxhYmVsOiAnU2FmYXJpJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogMzAwLFxuICAgICAgICAgICAgY29sb3I6ICcjM2M4ZGJjJyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyMzYzhkYmMnLFxuICAgICAgICAgICAgbGFiZWw6ICdPcGVyYSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IDEwMCxcbiAgICAgICAgICAgIGNvbG9yOiAnI2QyZDZkZScsXG4gICAgICAgICAgICBoaWdobGlnaHQ6ICcjZDJkNmRlJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTmF2aWdhdG9yJ1xuICAgICAgICB9XG4gICAgXTtcbiAgICB2YXIgcGllT3B0aW9ucyA9IHtcbiAgICAgICAgc2VnbWVudFNob3dTdHJva2U6IHRydWUsXG4gICAgICAgIHNlZ21lbnRTdHJva2VDb2xvcjogJyNmZmYnLFxuICAgICAgICBzZWdtZW50U3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIHBlcmNlbnRhZ2VJbm5lckN1dG91dDogNTAsXG4gICAgICAgIGFuaW1hdGlvblN0ZXBzOiAxMDAsXG4gICAgICAgIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2VPdXRCb3VuY2UnLFxuICAgICAgICBhbmltYXRlUm90YXRlOiB0cnVlLFxuICAgICAgICBhbmltYXRlU2NhbGU6IGZhbHNlLFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgbGVnZW5kVGVtcGxhdGU6ICc8dWwgY2xhc3M9XFwnPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFwnPjwlIGZvciAodmFyIGk9MDsgaTxzZWdtZW50cy5sZW5ndGg7IGkrKyl7JT48bGk+PHNwYW4gc3R5bGU9XFwnYmFja2dyb3VuZC1jb2xvcjo8JT1zZWdtZW50c1tpXS5maWxsQ29sb3IlPlxcJz48L3NwYW4+PCVpZihzZWdtZW50c1tpXS5sYWJlbCl7JT48JT1zZWdtZW50c1tpXS5sYWJlbCU+PCV9JT48L2xpPjwlfSU+PC91bD4nLFxuICAgICAgICB0b29sdGlwVGVtcGxhdGU6ICc8JT12YWx1ZSAlPiA8JT1sYWJlbCU+IHVzZXJzJ1xuICAgIH07XG4gICAgcGllQ2hhcnQuRG91Z2hudXQoUGllRGF0YSwgcGllT3B0aW9ucyk7XG5cblxuICAgIC8qIGpWZWN0b3IgTWFwc1xuICAgICAqIC0tLS0tLS0tLS0tLVxuICAgICAqIENyZWF0ZSBhIHdvcmxkIG1hcCB3aXRoIG1hcmtlcnNcbiAgICAgKi9cbiAgICAkKCcjd29ybGQtbWFwLW1hcmtlcnMnKS52ZWN0b3JNYXAoe1xuICAgICAgICBtYXA6ICd3b3JsZF9taWxsX2VuJyxcbiAgICAgICAgbm9ybWFsaXplRnVuY3Rpb246ICdwb2x5bm9taWFsJyxcbiAgICAgICAgaG92ZXJPcGFjaXR5OiAwLjcsXG4gICAgICAgIGhvdmVyQ29sb3I6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIHJlZ2lvblN0eWxlOiB7XG4gICAgICAgICAgICBpbml0aWFsOiB7XG4gICAgICAgICAgICAgICAgZmlsbDogJ3JnYmEoMjEwLCAyMTQsIDIyMiwgMSknLFxuICAgICAgICAgICAgICAgICdmaWxsLW9wYWNpdHknOiAxLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICdzdHJva2Utd2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICdzdHJva2Utb3BhY2l0eSc6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgICdmaWxsLW9wYWNpdHknOiAwLjcsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RlZDoge1xuICAgICAgICAgICAgICAgIGZpbGw6ICd5ZWxsb3cnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRIb3Zlcjoge31cbiAgICAgICAgfSxcbiAgICAgICAgbWFya2VyU3R5bGU6IHtcbiAgICAgICAgICAgIGluaXRpYWw6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnIzAwYTY1YScsXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzExMSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWFya2VyczogW3tcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFs0MS45MCwgMTIuNDVdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdWYXRpY2FuIENpdHknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzQzLjczLCA3LjQxXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTW9uYWNvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFstMC41MiwgMTY2LjkzXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmF1cnUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWy04LjUxLCAxNzkuMjFdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdUdXZhbHUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzQzLjkzLCAxMi40Nl0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NhbiBNYXJpbm8nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzQ3LjE0LCA5LjUyXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTGllY2h0ZW5zdGVpbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbNy4xMSwgMTcxLjA2XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWFyc2hhbGwgSXNsYW5kcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMTcuMywgLTYyLjczXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2FpbnQgS2l0dHMgYW5kIE5ldmlzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFszLjIsIDczLjIyXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWFsZGl2ZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzM1Ljg4LCAxNC41XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWFsdGEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzEyLjA1LCAtNjEuNzVdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdHcmVuYWRhJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFsxMy4xNiwgLTYxLjIzXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzEzLjE2LCAtNTkuNTVdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCYXJiYWRvcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMTcuMTEsIC02MS44NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0FudGlndWEgYW5kIEJhcmJ1ZGEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWy00LjYxLCA1NS40NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NleWNoZWxsZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzcuMzUsIDEzNC40Nl0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1BhbGF1J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFs0Mi41LCAxLjUxXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5kb3JyYSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMTQuMDEsIC02MC45OF0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NhaW50IEx1Y2lhJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFs2LjkxLCAxNTguMThdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdGZWRlcmF0ZWQgU3RhdGVzIG9mIE1pY3JvbmVzaWEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzEuMywgMTAzLjhdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTaW5nYXBvcmUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzEuNDYsIDE3My4wM10sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0tpcmliYXRpJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFstMjEuMTMsIC0xNzUuMl0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1RvbmdhJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFsxNS4zLCAtNjEuMzhdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdEb21pbmljYSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbLTIwLjIsIDU3LjVdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNYXVyaXRpdXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzI2LjAyLCA1MC41NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JhaHJhaW4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzAuMzMsIDYuNzNdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9KTtcbn0pO1xuXG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FTkQgT0YgQ0hBUlRTLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLyoqXG4gKiBBZG1pbkxURSBEZW1vIE1lbnVcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLVxuICogWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZmlsZSBpbiBwcm9kdWN0aW9uLlxuICogVGhpcyBmaWxlIGlzIGZvciBkZW1vIHB1cnBvc2VzIG9ubHkuXG4gKi9cbiQoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIEdldCBhY2Nlc3MgdG8gcGx1Z2luc1xuICAgICAqL1xuXG4gICAgJCgnW2RhdGEtdG9nZ2xlPVwiY29udHJvbC1zaWRlYmFyXCJdJykuY29udHJvbFNpZGViYXIoKVxuICAgICQoJ1tkYXRhLXRvZ2dsZT1cInB1c2gtbWVudVwiXScpLnB1c2hNZW51KClcblxuICAgIHZhciAkcHVzaE1lbnUgPSAkKCdbZGF0YS10b2dnbGU9XCJwdXNoLW1lbnVcIl0nKS5kYXRhKCdsdGUucHVzaG1lbnUnKVxuICAgIHZhciAkY29udHJvbFNpZGViYXIgPSAkKCdbZGF0YS10b2dnbGU9XCJjb250cm9sLXNpZGViYXJcIl0nKS5kYXRhKCdsdGUuY29udHJvbHNpZGViYXInKVxuICAgIHZhciAkbGF5b3V0ID0gJCgnYm9keScpLmRhdGEoJ2x0ZS5sYXlvdXQnKVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBhbGwgdGhlIGF2YWlsYWJsZSBza2luc1xuICAgICAqXG4gICAgICogQHR5cGUgQXJyYXlcbiAgICAgKi9cbiAgICB2YXIgbXlTa2lucyA9IFtcbiAgICAgICAgJ3NraW4tYmx1ZScsXG4gICAgICAgICdza2luLWJsYWNrJyxcbiAgICAgICAgJ3NraW4tcmVkJyxcbiAgICAgICAgJ3NraW4teWVsbG93JyxcbiAgICAgICAgJ3NraW4tcHVycGxlJyxcbiAgICAgICAgJ3NraW4tZ3JlZW4nLFxuICAgICAgICAnc2tpbi1ibHVlLWxpZ2h0JyxcbiAgICAgICAgJ3NraW4tYmxhY2stbGlnaHQnLFxuICAgICAgICAnc2tpbi1yZWQtbGlnaHQnLFxuICAgICAgICAnc2tpbi15ZWxsb3ctbGlnaHQnLFxuICAgICAgICAnc2tpbi1wdXJwbGUtbGlnaHQnLFxuICAgICAgICAnc2tpbi1ncmVlbi1saWdodCdcbiAgICBdXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBwcmVzdG9yZWQgc2V0dGluZ1xuICAgICAqXG4gICAgICogQHBhcmFtIFN0cmluZyBuYW1lIE5hbWUgb2Ygb2YgdGhlIHNldHRpbmdcbiAgICAgKiBAcmV0dXJucyBTdHJpbmcgVGhlIHZhbHVlIG9mIHRoZSBzZXR0aW5nIHwgbnVsbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKFN0b3JhZ2UpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cuYWxlcnQoJ1BsZWFzZSB1c2UgYSBtb2Rlcm4gYnJvd3NlciB0byBwcm9wZXJseSB2aWV3IHRoaXMgdGVtcGxhdGUhJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGEgbmV3IHNldHRpbmdzIGluIHRoZSBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgTmFtZSBvZiB0aGUgc2V0dGluZ1xuICAgICAqIEBwYXJhbSBTdHJpbmcgdmFsIFZhbHVlIG9mIHRoZSBzZXR0aW5nXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0b3JlKG5hbWUsIHZhbCkge1xuICAgICAgICBpZiAodHlwZW9mIChTdG9yYWdlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIHZhbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5hbGVydCgnUGxlYXNlIHVzZSBhIG1vZGVybiBicm93c2VyIHRvIHByb3Blcmx5IHZpZXcgdGhpcyB0ZW1wbGF0ZSEnKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBsYXlvdXQgY2xhc3Nlc1xuICAgICAqXG4gICAgICogQHBhcmFtIFN0cmluZyBjbHMgdGhlIGxheW91dCBjbGFzcyB0byB0b2dnbGVcbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hhbmdlTGF5b3V0KGNscykge1xuICAgICAgICAkKCdib2R5JykudG9nZ2xlQ2xhc3MoY2xzKVxuICAgICAgICAkbGF5b3V0LmZpeFNpZGViYXIoKVxuICAgICAgICBpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdmaXhlZCcpICYmIGNscyA9PSAnZml4ZWQnKSB7XG4gICAgICAgICAgICAkcHVzaE1lbnUuZXhwYW5kT25Ib3ZlcigpXG4gICAgICAgICAgICAkbGF5b3V0LmFjdGl2YXRlKClcbiAgICAgICAgfVxuICAgICAgICAkY29udHJvbFNpZGViYXIuZml4KClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyB0aGUgb2xkIHNraW4gd2l0aCB0aGUgbmV3IHNraW5cbiAgICAgKiBAcGFyYW0gU3RyaW5nIGNscyB0aGUgbmV3IHNraW4gY2xhc3NcbiAgICAgKiBAcmV0dXJucyBCb29sZWFuIGZhbHNlIHRvIHByZXZlbnQgbGluaydzIGRlZmF1bHQgYWN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hhbmdlU2tpbihjbHMpIHtcbiAgICAgICAgJC5lYWNoKG15U2tpbnMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MobXlTa2luc1tpXSlcbiAgICAgICAgfSlcblxuICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoY2xzKVxuICAgICAgICBzdG9yZSgnc2tpbicsIGNscylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgdGVtcGxhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAgICAgdmFyIHRtcCA9IGdldCgnc2tpbicpXG4gICAgICAgIGlmICh0bXAgJiYgJC5pbkFycmF5KHRtcCwgbXlTa2lucykpXG4gICAgICAgICAgICBjaGFuZ2VTa2luKHRtcClcblxuICAgICAgICAvLyBBZGQgdGhlIGNoYW5nZSBza2luIGxpc3RlbmVyXG4gICAgICAgICQoJ1tkYXRhLXNraW5dJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdrbm9iJykpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGNoYW5nZVNraW4oJCh0aGlzKS5kYXRhKCdza2luJykpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gQWRkIHRoZSBsYXlvdXQgbWFuYWdlclxuICAgICAgICAkKCdbZGF0YS1sYXlvdXRdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2hhbmdlTGF5b3V0KCQodGhpcykuZGF0YSgnbGF5b3V0JykpXG4gICAgICAgIH0pXG5cbiAgICAgICAgJCgnW2RhdGEtY29udHJvbHNpZGViYXJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2hhbmdlTGF5b3V0KCQodGhpcykuZGF0YSgnY29udHJvbHNpZGViYXInKSlcbiAgICAgICAgICAgIHZhciBzbGlkZSA9ICEkY29udHJvbFNpZGViYXIub3B0aW9ucy5zbGlkZVxuXG4gICAgICAgICAgICAkY29udHJvbFNpZGViYXIub3B0aW9ucy5zbGlkZSA9IHNsaWRlXG4gICAgICAgICAgICBpZiAoIXNsaWRlKVxuICAgICAgICAgICAgICAgICQoJy5jb250cm9sLXNpZGViYXInKS5yZW1vdmVDbGFzcygnY29udHJvbC1zaWRlYmFyLW9wZW4nKVxuICAgICAgICB9KVxuXG4gICAgICAgICQoJ1tkYXRhLXNpZGViYXJza2luPVwidG9nZ2xlXCJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICRzaWRlYmFyID0gJCgnLmNvbnRyb2wtc2lkZWJhcicpXG4gICAgICAgICAgICBpZiAoJHNpZGViYXIuaGFzQ2xhc3MoJ2NvbnRyb2wtc2lkZWJhci1kYXJrJykpIHtcbiAgICAgICAgICAgICAgICAkc2lkZWJhci5yZW1vdmVDbGFzcygnY29udHJvbC1zaWRlYmFyLWRhcmsnKVxuICAgICAgICAgICAgICAgICRzaWRlYmFyLmFkZENsYXNzKCdjb250cm9sLXNpZGViYXItbGlnaHQnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkc2lkZWJhci5yZW1vdmVDbGFzcygnY29udHJvbC1zaWRlYmFyLWxpZ2h0JylcbiAgICAgICAgICAgICAgICAkc2lkZWJhci5hZGRDbGFzcygnY29udHJvbC1zaWRlYmFyLWRhcmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgICQoJ1tkYXRhLWVuYWJsZT1cImV4cGFuZE9uSG92ZXJcIl0nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSlcbiAgICAgICAgICAgICRwdXNoTWVudS5leHBhbmRPbkhvdmVyKClcbiAgICAgICAgICAgIGlmICghJCgnYm9keScpLmhhc0NsYXNzKCdzaWRlYmFyLWNvbGxhcHNlJykpXG4gICAgICAgICAgICAgICAgJCgnW2RhdGEtbGF5b3V0PVwic2lkZWJhci1jb2xsYXBzZVwiXScpLmNsaWNrKClcbiAgICAgICAgfSlcblxuICAgICAgICAvLyAgUmVzZXQgb3B0aW9uc1xuICAgICAgICBpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdmaXhlZCcpKSB7XG4gICAgICAgICAgICAkKCdbZGF0YS1sYXlvdXQ9XCJmaXhlZFwiXScpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygnbGF5b3V0LWJveGVkJykpIHtcbiAgICAgICAgICAgICQoJ1tkYXRhLWxheW91dD1cImxheW91dC1ib3hlZFwiXScpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygnc2lkZWJhci1jb2xsYXBzZScpKSB7XG4gICAgICAgICAgICAkKCdbZGF0YS1sYXlvdXQ9XCJzaWRlYmFyLWNvbGxhcHNlXCJdJykuYXR0cignY2hlY2tlZCcsICdjaGVja2VkJylcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBuZXcgdGFiXG4gICAgdmFyICR0YWJQYW5lID0gJCgnPGRpdiAvPicsIHtcbiAgICAgICAgJ2lkJzogJ2NvbnRyb2wtc2lkZWJhci10aGVtZS1kZW1vLW9wdGlvbnMtdGFiJyxcbiAgICAgICAgJ2NsYXNzJzogJ3RhYi1wYW5lIGFjdGl2ZSdcbiAgICB9KVxuXG4gICAgLy8gQ3JlYXRlIHRoZSB0YWIgYnV0dG9uXG4gICAgdmFyICR0YWJCdXR0b24gPSAkKCc8bGkgLz4nLCB7XG4gICAgICAgICAgICAnY2xhc3MnOiAnYWN0aXZlJ1xuICAgICAgICB9KVxuICAgICAgICAuaHRtbCgnPGEgaHJlZj1cXCcjY29udHJvbC1zaWRlYmFyLXRoZW1lLWRlbW8tb3B0aW9ucy10YWJcXCcgZGF0YS10b2dnbGU9XFwndGFiXFwnPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwiZmEgZmEtd3JlbmNoXCI+PC9pPicgK1xuICAgICAgICAgICAgJzwvYT4nKVxuXG4gICAgLy8gQWRkIHRoZSB0YWIgYnV0dG9uIHRvIHRoZSByaWdodCBzaWRlYmFyIHRhYnNcbiAgICAkKCdbaHJlZj1cIiNjb250cm9sLXNpZGViYXItaG9tZS10YWJcIl0nKVxuICAgICAgICAucGFyZW50KClcbiAgICAgICAgLmJlZm9yZSgkdGFiQnV0dG9uKVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBtZW51XG4gICAgdmFyICRkZW1vU2V0dGluZ3MgPSAkKCc8ZGl2IC8+JylcblxuICAgIC8vIExheW91dCBvcHRpb25zXG4gICAgJGRlbW9TZXR0aW5ncy5hcHBlbmQoXG4gICAgICAgICc8aDQgY2xhc3M9XCJjb250cm9sLXNpZGViYXItaGVhZGluZ1wiPicgK1xuICAgICAgICAnTGF5b3V0IE9wdGlvbnMnICtcbiAgICAgICAgJzwvaDQ+J1xuICAgICAgICAvLyBGaXhlZCBsYXlvdXRcbiAgICAgICAgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj4nICtcbiAgICAgICAgJzxsYWJlbCBjbGFzcz1cImNvbnRyb2wtc2lkZWJhci1zdWJoZWFkaW5nXCI+JyArXG4gICAgICAgICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJkYXRhLWxheW91dD1cImZpeGVkXCJjbGFzcz1cInB1bGwtcmlnaHRcIi8+ICcgK1xuICAgICAgICAnRml4ZWQgbGF5b3V0JyArXG4gICAgICAgICc8L2xhYmVsPicgK1xuICAgICAgICAnPHA+QWN0aXZhdGUgdGhlIGZpeGVkIGxheW91dC4gWW91IGNhblxcJ3QgdXNlIGZpeGVkIGFuZCBib3hlZCBsYXlvdXRzIHRvZ2V0aGVyPC9wPicgK1xuICAgICAgICAnPC9kaXY+J1xuICAgICAgICAvLyBCb3hlZCBsYXlvdXRcbiAgICAgICAgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj4nICtcbiAgICAgICAgJzxsYWJlbCBjbGFzcz1cImNvbnRyb2wtc2lkZWJhci1zdWJoZWFkaW5nXCI+JyArXG4gICAgICAgICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJkYXRhLWxheW91dD1cImxheW91dC1ib3hlZFwiIGNsYXNzPVwicHVsbC1yaWdodFwiLz4gJyArXG4gICAgICAgICdCb3hlZCBMYXlvdXQnICtcbiAgICAgICAgJzwvbGFiZWw+JyArXG4gICAgICAgICc8cD5BY3RpdmF0ZSB0aGUgYm94ZWQgbGF5b3V0PC9wPicgK1xuICAgICAgICAnPC9kaXY+J1xuICAgICAgICAvLyBTaWRlYmFyIFRvZ2dsZVxuICAgICAgICArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPicgK1xuICAgICAgICAnPGxhYmVsIGNsYXNzPVwiY29udHJvbC1zaWRlYmFyLXN1YmhlYWRpbmdcIj4nICtcbiAgICAgICAgJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcImRhdGEtbGF5b3V0PVwic2lkZWJhci1jb2xsYXBzZVwiY2xhc3M9XCJwdWxsLXJpZ2h0XCIvPiAnICtcbiAgICAgICAgJ1RvZ2dsZSBTaWRlYmFyJyArXG4gICAgICAgICc8L2xhYmVsPicgK1xuICAgICAgICAnPHA+VG9nZ2xlIHRoZSBsZWZ0IHNpZGViYXJcXCdzIHN0YXRlIChvcGVuIG9yIGNvbGxhcHNlKTwvcD4nICtcbiAgICAgICAgJzwvZGl2PidcbiAgICAgICAgLy8gU2lkZWJhciBtaW5pIGV4cGFuZCBvbiBob3ZlciB0b2dnbGVcbiAgICAgICAgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj4nICtcbiAgICAgICAgJzxsYWJlbCBjbGFzcz1cImNvbnRyb2wtc2lkZWJhci1zdWJoZWFkaW5nXCI+JyArXG4gICAgICAgICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJkYXRhLWVuYWJsZT1cImV4cGFuZE9uSG92ZXJcImNsYXNzPVwicHVsbC1yaWdodFwiLz4gJyArXG4gICAgICAgICdTaWRlYmFyIEV4cGFuZCBvbiBIb3ZlcicgK1xuICAgICAgICAnPC9sYWJlbD4nICtcbiAgICAgICAgJzxwPkxldCB0aGUgc2lkZWJhciBtaW5pIGV4cGFuZCBvbiBob3ZlcjwvcD4nICtcbiAgICAgICAgJzwvZGl2PidcbiAgICAgICAgLy8gQ29udHJvbCBTaWRlYmFyIFRvZ2dsZVxuICAgICAgICArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPicgK1xuICAgICAgICAnPGxhYmVsIGNsYXNzPVwiY29udHJvbC1zaWRlYmFyLXN1YmhlYWRpbmdcIj4nICtcbiAgICAgICAgJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcImRhdGEtY29udHJvbHNpZGViYXI9XCJjb250cm9sLXNpZGViYXItb3BlblwiY2xhc3M9XCJwdWxsLXJpZ2h0XCIvPiAnICtcbiAgICAgICAgJ1RvZ2dsZSBSaWdodCBTaWRlYmFyIFNsaWRlJyArXG4gICAgICAgICc8L2xhYmVsPicgK1xuICAgICAgICAnPHA+VG9nZ2xlIGJldHdlZW4gc2xpZGUgb3ZlciBjb250ZW50IGFuZCBwdXNoIGNvbnRlbnQgZWZmZWN0czwvcD4nICtcbiAgICAgICAgJzwvZGl2PidcbiAgICAgICAgLy8gQ29udHJvbCBTaWRlYmFyIFNraW4gVG9nZ2xlXG4gICAgICAgICtcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+JyArXG4gICAgICAgICc8bGFiZWwgY2xhc3M9XCJjb250cm9sLXNpZGViYXItc3ViaGVhZGluZ1wiPicgK1xuICAgICAgICAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiZGF0YS1zaWRlYmFyc2tpbj1cInRvZ2dsZVwiY2xhc3M9XCJwdWxsLXJpZ2h0XCIvPiAnICtcbiAgICAgICAgJ1RvZ2dsZSBSaWdodCBTaWRlYmFyIFNraW4nICtcbiAgICAgICAgJzwvbGFiZWw+JyArXG4gICAgICAgICc8cD5Ub2dnbGUgYmV0d2VlbiBkYXJrIGFuZCBsaWdodCBza2lucyBmb3IgdGhlIHJpZ2h0IHNpZGViYXI8L3A+JyArXG4gICAgICAgICc8L2Rpdj4nXG4gICAgKVxuICAgIHZhciAkc2tpbnNMaXN0ID0gJCgnPHVsIC8+Jywge1xuICAgICAgICAnY2xhc3MnOiAnbGlzdC11bnN0eWxlZCBjbGVhcmZpeCdcbiAgICB9KVxuXG4gICAgLy8gRGFyayBzaWRlYmFyIHNraW5zXG4gICAgdmFyICRza2luQmx1ZSA9XG4gICAgICAgICQoJzxsaSAvPicsIHtcbiAgICAgICAgICAgIHN0eWxlOiAnZmxvYXQ6bGVmdDsgd2lkdGg6IDMzLjMzMzMzJTsgcGFkZGluZzogNXB4OydcbiAgICAgICAgfSlcbiAgICAgICAgLmFwcGVuZCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpbj1cInNraW4tYmx1ZVwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjMzY3ZmE5XCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwiYmctbGlnaHQtYmx1ZVwiIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogIzIyMmQzMlwiPjwvc3Bhbj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY1ZjdcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9hPicgK1xuICAgICAgICAgICAgJzxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbm8tbWFyZ2luXCI+Qmx1ZTwvcD4nKVxuICAgICRza2luc0xpc3QuYXBwZW5kKCRza2luQmx1ZSlcbiAgICB2YXIgJHNraW5CbGFjayA9XG4gICAgICAgICQoJzxsaSAvPicsIHtcbiAgICAgICAgICAgIHN0eWxlOiAnZmxvYXQ6bGVmdDsgd2lkdGg6IDMzLjMzMzMzJTsgcGFkZGluZzogNXB4OydcbiAgICAgICAgfSlcbiAgICAgICAgLmFwcGVuZCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpbj1cInNraW4tYmxhY2tcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBzdHlsZT1cImJveC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLDAsMCwwLjEpXCIgY2xhc3M9XCJjbGVhcmZpeFwiPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjZmVmZWZlXCI+PC9zcGFuPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjZmVmZWZlXCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXY+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogMjAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjMjIyXCI+PC9zcGFuPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogI2Y0ZjVmN1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2E+JyArXG4gICAgICAgICAgICAnPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBuby1tYXJnaW5cIj5CbGFjazwvcD4nKVxuICAgICRza2luc0xpc3QuYXBwZW5kKCRza2luQmxhY2spXG4gICAgdmFyICRza2luUHVycGxlID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi1wdXJwbGVcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIiBjbGFzcz1cImJnLXB1cnBsZS1hY3RpdmVcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiZy1wdXJwbGVcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICMyMjJkMzJcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiPlB1cnBsZTwvcD4nKVxuICAgICRza2luc0xpc3QuYXBwZW5kKCRza2luUHVycGxlKVxuICAgIHZhciAkc2tpbkdyZWVuID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi1ncmVlblwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiIGNsYXNzPVwiYmctZ3JlZW4tYWN0aXZlXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwiYmctZ3JlZW5cIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICMyMjJkMzJcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiPkdyZWVuPC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5HcmVlbilcbiAgICB2YXIgJHNraW5SZWQgPVxuICAgICAgICAkKCc8bGkgLz4nLCB7XG4gICAgICAgICAgICBzdHlsZTogJ2Zsb2F0OmxlZnQ7IHdpZHRoOiAzMy4zMzMzMyU7IHBhZGRpbmc6IDVweDsnXG4gICAgICAgIH0pXG4gICAgICAgIC5hcHBlbmQoJzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBkYXRhLXNraW49XCJza2luLXJlZFwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiIGNsYXNzPVwiYmctcmVkLWFjdGl2ZVwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cImJnLXJlZFwiIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogIzIyMmQzMlwiPjwvc3Bhbj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY1ZjdcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9hPicgK1xuICAgICAgICAgICAgJzxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbm8tbWFyZ2luXCI+UmVkPC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5SZWQpXG4gICAgdmFyICRza2luWWVsbG93ID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi15ZWxsb3dcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIiBjbGFzcz1cImJnLXllbGxvdy1hY3RpdmVcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiZy15ZWxsb3dcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICMyMjJkMzJcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiPlllbGxvdzwvcD4nKVxuICAgICRza2luc0xpc3QuYXBwZW5kKCRza2luWWVsbG93KVxuXG4gICAgLy8gTGlnaHQgc2lkZWJhciBza2luc1xuICAgIHZhciAkc2tpbkJsdWVMaWdodCA9XG4gICAgICAgICQoJzxsaSAvPicsIHtcbiAgICAgICAgICAgIHN0eWxlOiAnZmxvYXQ6bGVmdDsgd2lkdGg6IDMzLjMzMzMzJTsgcGFkZGluZzogNXB4OydcbiAgICAgICAgfSlcbiAgICAgICAgLmFwcGVuZCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpbj1cInNraW4tYmx1ZS1saWdodFwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjMzY3ZmE5XCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwiYmctbGlnaHQtYmx1ZVwiIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogI2Y5ZmFmY1wiPjwvc3Bhbj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY1ZjdcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9hPicgK1xuICAgICAgICAgICAgJzxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbm8tbWFyZ2luXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHhcIj5CbHVlIExpZ2h0PC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5CbHVlTGlnaHQpXG4gICAgdmFyICRza2luQmxhY2tMaWdodCA9XG4gICAgICAgICQoJzxsaSAvPicsIHtcbiAgICAgICAgICAgIHN0eWxlOiAnZmxvYXQ6bGVmdDsgd2lkdGg6IDMzLjMzMzMzJTsgcGFkZGluZzogNXB4OydcbiAgICAgICAgfSlcbiAgICAgICAgLmFwcGVuZCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpbj1cInNraW4tYmxhY2stbGlnaHRcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBzdHlsZT1cImJveC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLDAsMCwwLjEpXCIgY2xhc3M9XCJjbGVhcmZpeFwiPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjZmVmZWZlXCI+PC9zcGFuPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4OyBiYWNrZ3JvdW5kOiAjZmVmZWZlXCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXY+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogMjAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjlmYWZjXCI+PC9zcGFuPjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogI2Y0ZjVmN1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2E+JyArXG4gICAgICAgICAgICAnPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBuby1tYXJnaW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweFwiPkJsYWNrIExpZ2h0PC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5CbGFja0xpZ2h0KVxuICAgIHZhciAkc2tpblB1cnBsZUxpZ2h0ID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi1wdXJwbGUtbGlnaHRcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIiBjbGFzcz1cImJnLXB1cnBsZS1hY3RpdmVcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiZy1wdXJwbGVcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmOWZhZmNcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4XCI+UHVycGxlIExpZ2h0PC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5QdXJwbGVMaWdodClcbiAgICB2YXIgJHNraW5HcmVlbkxpZ2h0ID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi1ncmVlbi1saWdodFwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiIGNsYXNzPVwiYmctZ3JlZW4tYWN0aXZlXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwiYmctZ3JlZW5cIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmOWZhZmNcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4XCI+R3JlZW4gTGlnaHQ8L3A+JylcbiAgICAkc2tpbnNMaXN0LmFwcGVuZCgkc2tpbkdyZWVuTGlnaHQpXG4gICAgdmFyICRza2luUmVkTGlnaHQgPVxuICAgICAgICAkKCc8bGkgLz4nLCB7XG4gICAgICAgICAgICBzdHlsZTogJ2Zsb2F0OmxlZnQ7IHdpZHRoOiAzMy4zMzMzMyU7IHBhZGRpbmc6IDVweDsnXG4gICAgICAgIH0pXG4gICAgICAgIC5hcHBlbmQoJzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBkYXRhLXNraW49XCJza2luLXJlZC1saWdodFwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLDAsMCwwLjQpXCIgY2xhc3M9XCJjbGVhcmZpeCBmdWxsLW9wYWNpdHktaG92ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiIGNsYXNzPVwiYmctcmVkLWFjdGl2ZVwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cImJnLXJlZFwiIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDgwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogN3B4O1wiPjwvc3Bhbj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2PjxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jazsgd2lkdGg6IDIwJTsgZmxvYXQ6IGxlZnQ7IGhlaWdodDogMjBweDsgYmFja2dyb3VuZDogI2Y5ZmFmY1wiPjwvc3Bhbj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY1ZjdcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9hPicgK1xuICAgICAgICAgICAgJzxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbm8tbWFyZ2luXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHhcIj5SZWQgTGlnaHQ8L3A+JylcbiAgICAkc2tpbnNMaXN0LmFwcGVuZCgkc2tpblJlZExpZ2h0KVxuICAgIHZhciAkc2tpblllbGxvd0xpZ2h0ID1cbiAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgc3R5bGU6ICdmbG9hdDpsZWZ0OyB3aWR0aDogMzMuMzMzMzMlOyBwYWRkaW5nOiA1cHg7J1xuICAgICAgICB9KVxuICAgICAgICAuYXBwZW5kKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2luPVwic2tpbi15ZWxsb3ctbGlnaHRcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwwLDAsMC40KVwiIGNsYXNzPVwiY2xlYXJmaXggZnVsbC1vcGFjaXR5LWhvdmVyXCI+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIiBjbGFzcz1cImJnLXllbGxvdy1hY3RpdmVcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJiZy15ZWxsb3dcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiA4MCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDdweDtcIj48L3NwYW4+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdj48c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMCU7IGZsb2F0OiBsZWZ0OyBoZWlnaHQ6IDIwcHg7IGJhY2tncm91bmQ6ICNmOWZhZmNcIj48L3NwYW4+PHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrOyB3aWR0aDogODAlOyBmbG9hdDogbGVmdDsgaGVpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjRmNWY3XCI+PC9zcGFuPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInRleHQtY2VudGVyIG5vLW1hcmdpblwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4XCI+WWVsbG93IExpZ2h0PC9wPicpXG4gICAgJHNraW5zTGlzdC5hcHBlbmQoJHNraW5ZZWxsb3dMaWdodClcblxuICAgICRkZW1vU2V0dGluZ3MuYXBwZW5kKCc8aDQgY2xhc3M9XCJjb250cm9sLXNpZGViYXItaGVhZGluZ1wiPlNraW5zPC9oND4nKVxuICAgICRkZW1vU2V0dGluZ3MuYXBwZW5kKCRza2luc0xpc3QpXG5cbiAgICAkdGFiUGFuZS5hcHBlbmQoJGRlbW9TZXR0aW5ncylcbiAgICAkKCcjY29udHJvbC1zaWRlYmFyLWhvbWUtdGFiJykuYWZ0ZXIoJHRhYlBhbmUpXG5cbiAgICBzZXR1cCgpXG5cbiAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpXG59KVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9hc3NldHMvanMvYWRtaW4uanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47\n"); /***/ }), -/* 48 */ -/***/ (function(module, exports) { - -eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBIiwiZmlsZSI6IjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n"); -/***/ }), -/* 49 */ +/***/ 48: /***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery UI - v1.11.4 - 2015-03-11\n* http://jqueryui.com\n* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function(e){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (e),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return\"area\"===r?(n=t.parentNode,a=n.name,t.href&&a&&\"map\"===n.nodeName.toLowerCase()?(o=e(\"img[usemap='#\"+a+\"']\")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:\"a\"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return\"hidden\"===e.css(this,\"visibility\")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css(\"position\"),(\"absolute\"===t||\"relative\"===t||\"fixed\"===t)&&(i=parseInt(e.css(\"zIndex\"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId=\"ui-datepicker-div\",this._inlineClass=\"ui-datepicker-inline\",this._appendClass=\"ui-datepicker-append\",this._triggerClass=\"ui-datepicker-trigger\",this._dialogClass=\"ui-datepicker-dialog\",this._disableClass=\"ui-datepicker-disabled\",this._unselectableClass=\"ui-datepicker-unselectable\",this._currentClass=\"ui-datepicker-current-day\",this._dayOverClass=\"ui-datepicker-days-cell-over\",this.regional=[],this.regional[\"\"]={closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"mm/dd/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"},this._defaults={showOn:\"focus\",showAnim:\"fadeIn\",showOptions:{},defaultDate:null,appendText:\"\",buttonText:\"...\",buttonImage:\"\",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:\"c-10:c+10\",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:\"+10\",minDate:null,maxDate:null,duration:\"fast\",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:\"\",altFormat:\"\",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[\"\"]),this.regional.en=e.extend(!0,{},this.regional[\"\"]),this.regional[\"en-US\"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e(\"<div id='\"+this._mainDivId+\"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"))}function a(t){var i=\"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";return t.delegate(i,\"mouseout\",function(){e(this).removeClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&e(this).removeClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&e(this).removeClass(\"ui-datepicker-next-hover\")}).delegate(i,\"mouseover\",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\"),e(this).addClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&e(this).addClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&e(this).addClass(\"ui-datepicker-next-hover\"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger(\"change\")}}e.ui=e.ui||{},e.extend(e.ui,{version:\"1.11.4\",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css(\"position\"),s=\"absolute\"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&\"static\"===t.css(\"position\")?!1:n.test(t.css(\"overflow\")+t.css(\"overflow-y\")+t.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&e(this).removeAttr(\"id\")})}}),e.extend(e.expr[\":\"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,\"tabindex\")))},tabbable:function(i){var s=e.attr(i,\"tabindex\"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e(\"<a>\").outerWidth(1).jquery||e.each([\"Width\",\"Height\"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,\"padding\"+this))||0,s&&(i-=parseFloat(e.css(t,\"border\"+this+\"Width\"))||0),a&&(i-=parseFloat(e.css(t,\"margin\"+this))||0)}),i}var n=\"Width\"===i?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn[\"inner\"+i]=function(t){return void 0===t?o[\"inner\"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+\"px\")})},e.fn[\"outer\"+i]=function(t,n){return\"number\"!=typeof t?o[\"outer\"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+\"px\")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e(\"<a>\").data(\"a-b\",\"a\").removeData(\"a-b\").data(\"a-b\")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return\"number\"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.bind(e+\".ui-disableSelection\",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(\".ui-disableSelection\")},zIndex:function(t){if(void 0!==t)return this.css(\"zIndex\",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css(\"position\"),(\"absolute\"===i||\"relative\"===i||\"fixed\"===i)&&(s=parseInt(n.css(\"zIndex\"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,\"events\"),s&&s.remove&&e(n).triggerHandler(\"remove\")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(\".\")[0];return t=t.split(\".\")[1],n=l+\"-\"+t,s||(s=i,i=e.Widget),e.expr[\":\"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a=\"string\"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return\"instance\"===n?(r=a,!1):a?e.isFunction(a[n])&&\"_\"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error(\"no such method '\"+n+\"' for \"+t+\" widget instance\"):e.error(\"cannot call methods on \"+t+\" prior to initialization; \"+\"attempted to call method '\"+n+\"'\")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"<div>\",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr(\"aria-disabled\").removeClass(this.widgetFullName+\"-disabled \"+\"ui-state-disabled\"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if(\"string\"==typeof t)if(o={},s=t.split(\".\"),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,\"disabled\"===e&&(this.widget().toggleClass(this.widgetFullName+\"-disabled\",!!t),t&&(this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;\"boolean\"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass(\"ui-state-disabled\")?(\"string\"==typeof o?a[o]:o).apply(a,arguments):void 0}\"string\"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\\w:-]*)\\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return(\"string\"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass(\"ui-state-hover\")},mouseleave:function(t){e(t.currentTarget).removeClass(\"ui-state-hover\")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass(\"ui-state-focus\")},focusout:function(t){e(t.currentTarget).removeClass(\"ui-state-focus\")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:\"fadeIn\",hide:\"fadeOut\"},function(t,i){e.Widget.prototype[\"_\"+t]=function(s,n,a){\"string\"==typeof n&&(n={effect:n});var o,r=n?n===!0||\"number\"==typeof n?i:n.effect||i:t;n=n||{},\"number\"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget(\"ui.mouse\",{version:\"1.11.4\",options:{cancel:\"input,textarea,button,select,option\",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return t._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+\".preventClickEvent\")?(e.removeData(i.target,t.widgetName+\".preventClickEvent\"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n=\"string\"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+\".preventClickEvent\")&&e.removeData(t.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\\+\\-]\\d+(\\.[\\d]+)?%?/,c=/^\\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),a=s.children()[0];return e(\"body\").append(s),t=a.offsetWidth,s.css(\"overflow\",\"scroll\"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-x\"),s=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-y\"),n=\"scroll\"===i||\"auto\"===i&&t.width<t.element[0].scrollWidth,a=\"scroll\"===s||\"auto\"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||\"flip\").split(\" \"),T={};return b=s(_),_[0].preventDefault&&(n.at=\"left top\"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each([\"my\",\"at\"],function(){var e,t,i=(n[this]||\"\").split(\" \");1===i.length&&(i=l.test(i[0])?i.concat([\"center\"]):u.test(i[0])?[\"center\"].concat(i):[\"center\",\"center\"]),i[0]=l.test(i[0])?i[0]:\"center\",i[1]=u.test(i[1])?i[1]:\"center\",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),\"right\"===n.at[0]?y.left+=m:\"center\"===n.at[0]&&(y.left+=m/2),\"bottom\"===n.at[1]?y.top+=g:\"center\"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,\"marginLeft\"),b=i(this,\"marginTop\"),D=d+f+i(this,\"marginRight\")+w.width,S=c+b+i(this,\"marginBottom\")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());\"right\"===n.my[0]?M.left-=d:\"center\"===n.my[0]&&(M.left-=d/2),\"bottom\"===n.my[1]?M.top-=c:\"center\"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each([\"left\",\"top\"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?\"left\":t>0?\"right\":\"center\",vertical:0>a?\"top\":s>0?\"bottom\":\"middle\"};d>m&&m>r(t+i)&&(h.horizontal=\"center\"),c>g&&g>r(s+a)&&(h.vertical=\"middle\"),h.important=o(r(t),r(i))>o(r(s),r(a))?\"horizontal\":\"vertical\",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c=\"left\"===t.my[0]?-t.elemWidth:\"right\"===t.my[0]?t.elemWidth:0,p=\"left\"===t.at[0]?t.targetWidth:\"right\"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c=\"top\"===t.my[1],p=c?-t.elemHeight:\"bottom\"===t.my[1]?t.elemHeight:0,f=\"top\"===t.at[1]?t.targetHeight:\"bottom\"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName(\"body\")[0],h=document.createElement(\"div\");t=document.createElement(r?\"div\":\"body\"),s={visibility:\"hidden\",width:0,height:0,border:0,margin:0,background:\"none\"},r&&e.extend(s,{position:\"absolute\",left:\"-1000px\",top:\"-1000px\"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText=\"position: absolute; left: 10.7432222px;\",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML=\"\",i.removeChild(t)}()}(),e.ui.position,e.widget(\"ui.accordion\",{version:\"1.11.4\",options:{active:0,animate:{},collapsible:!1,event:\"click\",header:\"> li > :first-child,> :not(li):even\",heightStyle:\"auto\",icons:{activeHeader:\"ui-icon-triangle-1-s\",header:\"ui-icon-triangle-1-e\"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:\"hide\",borderBottomWidth:\"hide\",paddingTop:\"hide\",paddingBottom:\"hide\",height:\"hide\"},showProps:{borderTopWidth:\"show\",borderBottomWidth:\"show\",paddingTop:\"show\",paddingBottom:\"show\",height:\"show\"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass(\"ui-accordion ui-widget ui-helper-reset\").attr(\"role\",\"tablist\"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e(\"<span>\").addClass(\"ui-accordion-header-icon ui-icon \"+t.header).prependTo(this.headers),this.active.children(\".ui-accordion-header-icon\").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass(\"ui-accordion-icons\"))},_destroyIcons:function(){this.headers.removeClass(\"ui-accordion-icons\").children(\".ui-accordion-header-icon\").remove()},_destroy:function(){var e;this.element.removeClass(\"ui-accordion ui-widget ui-helper-reset\").removeAttr(\"role\"),this.headers.removeClass(\"ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top\").removeAttr(\"role\").removeAttr(\"aria-expanded\").removeAttr(\"aria-selected\").removeAttr(\"aria-controls\").removeAttr(\"tabIndex\").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass(\"ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled\").css(\"display\",\"\").removeAttr(\"role\").removeAttr(\"aria-hidden\").removeAttr(\"aria-labelledby\").removeUniqueId(),\"content\"!==this.options.heightStyle&&e.css(\"height\",\"\")},_setOption:function(e,t){return\"active\"===e?(this._activate(t),void 0):(\"event\"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),\"collapsible\"!==e||t||this.options.active!==!1||this._activate(0),\"icons\"===e&&(this._destroyIcons(),t&&this._createIcons()),\"disabled\"===e&&(this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this.headers.add(this.headers.next()).toggleClass(\"ui-state-disabled\",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr(\"tabIndex\",-1),e(a).attr(\"tabIndex\",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(\".ui-state-disabled\").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass(\"ui-accordion-header ui-state-default ui-corner-all\"),this.panels=this.headers.next().addClass(\"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom\").filter(\":not(.ui-accordion-content-active)\").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass(\"ui-accordion-header-active ui-state-active ui-corner-top\").removeClass(\"ui-corner-all\"),this.active.next().addClass(\"ui-accordion-content-active\").show(),this.headers.attr(\"role\",\"tab\").each(function(){var t=e(this),i=t.uniqueId().attr(\"id\"),s=t.next(),n=s.uniqueId().attr(\"id\");t.attr(\"aria-controls\",n),s.attr(\"aria-labelledby\",i)}).next().attr(\"role\",\"tabpanel\"),this.headers.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}).next().attr({\"aria-hidden\":\"true\"}).hide(),this.active.length?this.active.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}).next().attr({\"aria-hidden\":\"false\"}):this.headers.eq(0).attr(\"tabIndex\",0),this._createIcons(),this._setupEvents(i.event),\"fill\"===s?(t=n.height(),this.element.siblings(\":visible\").each(function(){var i=e(this),s=i.css(\"position\");\"absolute\"!==s&&\"fixed\"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css(\"height\",\"\").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return\"number\"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:\"_keydown\"};t&&e.each(t.split(\" \"),function(e,t){i[t]=\"_eventHandler\"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:\"_panelKeyDown\"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger(\"beforeActivate\",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass(\"ui-accordion-header-active ui-state-active\"),i.icons&&s.children(\".ui-accordion-header-icon\").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass(\"ui-corner-all\").addClass(\"ui-accordion-header-active ui-state-active ui-corner-top\"),i.icons&&n.children(\".ui-accordion-header-icon\").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass(\"ui-accordion-content-active\")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({\"aria-hidden\":\"true\"}),s.prev().attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),i.length&&s.length?s.prev().attr({tabIndex:-1,\"aria-expanded\":\"false\"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr(\"tabIndex\"),10)}).attr(\"tabIndex\",-1),i.attr(\"aria-hidden\",\"false\").prev().attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css(\"box-sizing\"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return\"number\"==typeof d&&(a=d),\"string\"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),\"height\"!==i.prop?\"content-box\"===h&&(r+=i.now):\"content\"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass(\"ui-accordion-content-active\").prev().removeClass(\"ui-corner-top\").addClass(\"ui-corner-all\"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger(\"activate\",null,e)}}),e.widget(\"ui.menu\",{version:\"1.11.4\",defaultElement:\"<ul>\",delay:300,options:{icons:{submenu:\"ui-icon-carat-1-e\"},items:\"> *\",menus:\"ul\",position:{my:\"left-1 top\",at:\"right top\"},role:\"menu\",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass(\"ui-menu ui-widget ui-widget-content\").toggleClass(\"ui-menu-icons\",!!this.element.find(\".ui-icon\").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass(\"ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this._on({\"mousedown .ui-menu-item\":function(e){e.preventDefault()},\"click .ui-menu-item\":function(t){var i=e(t.target);!this.mouseHandled&&i.not(\".ui-state-disabled\").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(\".ui-menu\").length?this.expand(t):!this.element.is(\":focus\")&&e(this.document[0].activeElement).closest(\".ui-menu\").length&&(this.element.trigger(\"focus\",[!0]),this.active&&1===this.active.parents(\".ui-menu\").length&&clearTimeout(this.timer)))},\"mouseenter .ui-menu-item\":function(t){if(!this.previousFilter){var i=e(t.currentTarget);\ni.siblings(\".ui-state-active\").removeClass(\"ui-state-active\"),this.focus(t,i)}},mouseleave:\"collapseAll\",\"mouseleave .ui-menu\":\"collapseAll\",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:\"_keydown\"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeClass(\"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\").removeAttr(\"role\").removeAttr(\"tabIndex\").removeAttr(\"aria-labelledby\").removeAttr(\"aria-expanded\").removeAttr(\"aria-hidden\").removeAttr(\"aria-disabled\").removeUniqueId().show(),this.element.find(\".ui-menu-item\").removeClass(\"ui-menu-item\").removeAttr(\"role\").removeAttr(\"aria-disabled\").removeUniqueId().removeClass(\"ui-state-hover\").removeAttr(\"tabIndex\").removeAttr(\"role\").removeAttr(\"aria-haspopup\").children().each(function(){var t=e(this);t.data(\"ui-menu-submenu-carat\")&&t.remove()}),this.element.find(\".ui-menu-divider\").removeClass(\"ui-menu-divider ui-widget-content\")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move(\"first\",\"first\",t);break;case e.ui.keyCode.END:this._move(\"last\",\"last\",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(\".ui-state-disabled\")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||\"\",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(\".ui-menu-item\"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(\".ui-state-disabled\")||(this.active.is(\"[aria-haspopup='true']\")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass(\"ui-menu-icons\",!!this.element.find(\".ui-icon\").length),a.filter(\":not(.ui-menu)\").addClass(\"ui-menu ui-widget ui-widget-content ui-front\").hide().attr({role:this.options.role,\"aria-hidden\":\"true\",\"aria-expanded\":\"false\"}).each(function(){var t=e(this),i=t.parent(),s=e(\"<span>\").addClass(\"ui-menu-icon ui-icon \"+n).data(\"ui-menu-submenu-carat\",!0);i.attr(\"aria-haspopup\",\"true\").prepend(s),t.attr(\"aria-labelledby\",i.attr(\"id\"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(\".ui-menu-item\").each(function(){var t=e(this);s._isDivider(t)&&t.addClass(\"ui-widget-content ui-menu-divider\")}),i.not(\".ui-menu-item, .ui-menu-divider\").addClass(\"ui-menu-item\").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(\".ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:\"menuitem\",listbox:\"option\"}[this.options.role]},_setOption:function(e,t){\"icons\"===e&&this.element.find(\".ui-menu-icon\").removeClass(this.options.icons.submenu).addClass(t.submenu),\"disabled\"===e&&this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&\"focus\"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass(\"ui-state-focus\").removeClass(\"ui-state-active\"),this.options.role&&this.element.attr(\"aria-activedescendant\",s.attr(\"id\")),this.active.parent().closest(\".ui-menu-item\").addClass(\"ui-state-active\"),e&&\"keydown\"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(\".ui-menu\"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger(\"focus\",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],\"borderTopWidth\"))||0,s=parseFloat(e.css(this.activeMenu[0],\"paddingTop\"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass(\"ui-state-focus\"),this.active=null,this._trigger(\"blur\",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),\"true\"===e.attr(\"aria-hidden\")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(\".ui-menu\").not(t.parents(\".ui-menu\")).hide().attr(\"aria-hidden\",\"true\"),t.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\",\"true\").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(\".ui-menu\"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(\".ui-menu\").hide().attr(\"aria-hidden\",\"true\").attr(\"aria-expanded\",\"false\").end().find(\".ui-state-active\").not(\".ui-state-focus\").removeClass(\"ui-state-active\")},_closeOnDocumentClick:function(t){return!e(t.target).closest(\".ui-menu\").length},_isDivider:function(e){return!/[^\\-\\u2014\\u2013\\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(\".ui-menu-item\",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(\".ui-menu \").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move(\"next\",\"first\",e)},previous:function(e){this._move(\"prev\",\"last\",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(\".ui-menu-item\").length},isLastItem:function(){return this.active&&!this.active.nextAll(\".ui-menu-item\").length},_move:function(e,t,i){var s;this.active&&(s=\"first\"===e||\"last\"===e?this.active[\"first\"===e?\"prevAll\":\"nextAll\"](\".ui-menu-item\").eq(-1):this.active[e+\"All\"](\".ui-menu-item\").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(\".ui-menu-item\").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?\"last\":\"first\"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(\".ui-menu-item\").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop(\"scrollHeight\")},select:function(t){this.active=this.active||e(t.target).closest(\".ui-menu-item\");var i={item:this.active};this.active.has(\".ui-menu\").length||this.collapseAll(t,!0),this._trigger(\"select\",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\"),s=RegExp(\"^\"+i,\"i\");return this.activeMenu.find(this.options.items).filter(\".ui-menu-item\").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget(\"ui.autocomplete\",{version:\"1.11.4\",defaultElement:\"<input>\",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a=\"textarea\"===n,o=\"input\"===n;this.isMultiLine=a?!0:o?!1:this.element.prop(\"isContentEditable\"),this.valueMethod=this.element[a||o?\"val\":\"text\"],this.isNewMenu=!0,this.element.addClass(\"ui-autocomplete-input\").attr(\"autocomplete\",\"off\"),this._on(this.element,{keydown:function(n){if(this.element.prop(\"readOnly\"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move(\"previousPage\",n);break;case a.PAGE_DOWN:t=!0,this._move(\"nextPage\",n);break;case a.UP:t=!0,this._keyEvent(\"previous\",n);break;case a.DOWN:t=!0,this._keyEvent(\"next\",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(\":visible\")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(\":visible\"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move(\"previousPage\",s);break;case n.PAGE_DOWN:this._move(\"nextPage\",s);break;case n.UP:this._keyEvent(\"previous\",s);break;case n.DOWN:this._keyEvent(\"next\",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e(\"<ul>\").addClass(\"ui-autocomplete ui-front\").appendTo(this._appendTo()).menu({role:null}).hide().menu(\"instance\"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(\".ui-menu-item\").length||this._delay(function(){var t=this;this.document.one(\"mousedown\",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one(\"mousemove\",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data(\"ui-autocomplete-item\"),!1!==this._trigger(\"focus\",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr(\"aria-label\")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e(\"<div>\").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data(\"ui-autocomplete-item\"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger(\"select\",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e(\"<span>\",{role:\"status\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).addClass(\"ui-helper-hidden-accessible\").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass(\"ui-autocomplete-input\").removeAttr(\"autocomplete\"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),\"source\"===e&&this._initSource(),\"appendTo\"===e&&this.menu.element.appendTo(this._appendTo()),\"disabled\"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(\".ui-front\")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):\"string\"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:\"json\",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(\":visible\"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger(\"search\",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass(\"ui-autocomplete-loading\"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass(\"ui-autocomplete-loading\")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger(\"response\",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger(\"open\")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(\":visible\")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger(\"close\",e))},_change:function(e){this.previous!==this._value()&&this._trigger(\"change\",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return\"string\"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width(\"\").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data(\"ui-autocomplete-item\",t)},_renderItem:function(t,i){return e(\"<li>\").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(\":visible\")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(\":visible\"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),\"i\");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget(\"ui.autocomplete\",e.ui.autocomplete,{options:{messages:{noResults:\"No search results.\",results:function(e){return e+(e>1?\" results are\":\" result is\")+\" available, use up and down arrow keys to navigate.\"}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e(\"<div>\").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p=\"ui-button ui-widget ui-state-default ui-corner-all\",f=\"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",m=function(){var t=e(this);setTimeout(function(){t.find(\":ui-button\").button(\"refresh\")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,\"\\\\'\"),n=s?e(s).find(\"[name='\"+i+\"'][type=radio]\"):e(\"[name='\"+i+\"'][type=radio]\",t.ownerDocument).filter(function(){return!this.form})),n};e.widget(\"ui.button\",{version:\"1.11.4\",defaultElement:\"<button>\",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest(\"form\").unbind(\"reset\"+this.eventNamespace).bind(\"reset\"+this.eventNamespace,m),\"boolean\"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop(\"disabled\"):this.element.prop(\"disabled\",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr(\"title\");var t=this,i=this.options,s=\"checkbox\"===this.type||\"radio\"===this.type,n=s?\"\":\"ui-state-active\";null===i.label&&(i.label=\"input\"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr(\"role\",\"button\").bind(\"mouseenter\"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass(\"ui-state-active\")}).bind(\"mouseleave\"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind(\"click\"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass(\"ui-state-focus\")},blur:function(){this.buttonElement.removeClass(\"ui-state-focus\")}}),s&&this.element.bind(\"change\"+this.eventNamespace,function(){t.refresh()}),\"checkbox\"===this.type?this.buttonElement.bind(\"click\"+this.eventNamespace,function(){return i.disabled?!1:void 0}):\"radio\"===this.type?this.buttonElement.bind(\"click\"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass(\"ui-state-active\"),t.buttonElement.attr(\"aria-pressed\",\"true\");var s=t.element[0];g(s).not(s).map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\")}):(this.buttonElement.bind(\"mousedown\"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass(\"ui-state-active\"),c=this,t.document.one(\"mouseup\",function(){c=null}),void 0)}).bind(\"mouseup\"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass(\"ui-state-active\"),void 0)}).bind(\"keydown\"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass(\"ui-state-active\"),void 0)}).bind(\"keyup\"+this.eventNamespace+\" blur\"+this.eventNamespace,function(){e(this).removeClass(\"ui-state-active\")}),this.buttonElement.is(\"a\")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption(\"disabled\",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is(\"[type=checkbox]\")?\"checkbox\":this.element.is(\"[type=radio]\")?\"radio\":this.element.is(\"input\")?\"input\":\"button\",\"checkbox\"===this.type||\"radio\"===this.type?(e=this.element.parents().last(),t=\"label[for='\"+this.element.attr(\"id\")+\"']\",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass(\"ui-helper-hidden-accessible\"),i=this.element.is(\":checked\"),i&&this.buttonElement.addClass(\"ui-state-active\"),this.buttonElement.prop(\"aria-pressed\",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass(\"ui-helper-hidden-accessible\"),this.buttonElement.removeClass(p+\" ui-state-active \"+f).removeAttr(\"role\").removeAttr(\"aria-pressed\").html(this.buttonElement.find(\".ui-button-text\").html()),this.hasTitle||this.buttonElement.removeAttr(\"title\")},_setOption:function(e,t){return this._super(e,t),\"disabled\"===e?(this.widget().toggleClass(\"ui-state-disabled\",!!t),this.element.prop(\"disabled\",!!t),t&&(\"checkbox\"===this.type||\"radio\"===this.type?this.buttonElement.removeClass(\"ui-state-focus\"):this.buttonElement.removeClass(\"ui-state-focus ui-state-active\")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is(\"input, button\")?this.element.is(\":disabled\"):this.element.hasClass(\"ui-button-disabled\");t!==this.options.disabled&&this._setOption(\"disabled\",t),\"radio\"===this.type?g(this.element[0]).each(function(){e(this).is(\":checked\")?e(this).button(\"widget\").addClass(\"ui-state-active\").attr(\"aria-pressed\",\"true\"):e(this).button(\"widget\").removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\")}):\"checkbox\"===this.type&&(this.element.is(\":checked\")?this.buttonElement.addClass(\"ui-state-active\").attr(\"aria-pressed\",\"true\"):this.buttonElement.removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\"))},_resetButton:function(){if(\"input\"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e(\"<span></span>\",this.document[0]).addClass(\"ui-button-text\").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push(\"ui-button-text-icon\"+(n?\"s\":s.primary?\"-primary\":\"-secondary\")),s.primary&&t.prepend(\"<span class='ui-button-icon-primary ui-icon \"+s.primary+\"'></span>\"),s.secondary&&t.append(\"<span class='ui-button-icon-secondary ui-icon \"+s.secondary+\"'></span>\"),this.options.text||(a.push(n?\"ui-button-icons-only\":\"ui-button-icon-only\"),this.hasTitle||t.attr(\"title\",e.trim(i)))):a.push(\"ui-button-text-only\"),t.addClass(a.join(\" \"))}}),e.widget(\"ui.buttonset\",{version:\"1.11.4\",options:{items:\"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)\"},_create:function(){this.element.addClass(\"ui-buttonset\")},_init:function(){this.refresh()},_setOption:function(e,t){\"disabled\"===e&&this.buttons.button(\"option\",e,t),this._super(e,t)},refresh:function(){var t=\"rtl\"===this.element.css(\"direction\"),i=this.element.find(this.options.items),s=i.filter(\":ui-button\");i.not(\":ui-button\").button(),s.button(\"refresh\"),this.buttons=i.map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-corner-all ui-corner-left ui-corner-right\").filter(\":first\").addClass(t?\"ui-corner-right\":\"ui-corner-left\").end().filter(\":last\").addClass(t?\"ui-corner-left\":\"ui-corner-right\").end().end()},_destroy:function(){this.element.removeClass(\"ui-buttonset\"),this.buttons.map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-corner-left ui-corner-right\").end().button(\"destroy\")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:\"1.11.4\"}});var v;e.extend(n.prototype,{markerClassName:\"hasDatepicker\",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n=\"div\"===s||\"span\"===s,t.id||(this.uuid+=1,t.id=\"dp\"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),\"input\"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\\-])/g,\"\\\\\\\\$1\");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e(\"<div class='\"+this._inlineClass+\" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,\"datepicker\",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,\"appendText\"),r=this._get(i,\"isRTL\");i.append&&i.append.remove(),o&&(i.append=e(\"<span class='\"+this._appendClass+\"'>\"+o+\"</span>\"),t[r?\"before\":\"after\"](i.append)),t.unbind(\"focus\",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,\"showOn\"),(\"focus\"===s||\"both\"===s)&&t.focus(this._showDatepicker),(\"button\"===s||\"both\"===s)&&(n=this._get(i,\"buttonText\"),a=this._get(i,\"buttonImage\"),i.trigger=e(this._get(i,\"buttonImageOnly\")?e(\"<img/>\").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e(\"<button type='button'></button>\").addClass(this._triggerClass).html(a?e(\"<img/>\").attr({src:a,alt:n,title:n}):n)),t[r?\"before\":\"after\"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,\"autoSize\")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,\"dateFormat\");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?\"monthNames\":\"monthNamesShort\"))),a.setDate(t(this._get(e,o.match(/DD/)?\"dayNames\":\"dayNamesShort\"))+20-a.getDay())),e.input.attr(\"size\",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,\"datepicker\",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css(\"display\",\"block\"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o=\"dp\"+this.uuid,this._dialogInput=e(\"<input type='text' id='\"+o+\"' style='position: absolute; top: -100px; width: 0px;'/>\"),this._dialogInput.keydown(this._doKeyDown),e(\"body\").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],\"datepicker\",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css(\"left\",this._pos[0]+20+\"px\").css(\"top\",this._pos[1]+\"px\"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],\"datepicker\",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,\"datepicker\");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,\"datepicker\"),\"input\"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind(\"focus\",this._showDatepicker).unbind(\"keydown\",this._doKeyDown).unbind(\"keypress\",this._doKeyPress).unbind(\"keyup\",this._doKeyUp)):(\"div\"===i||\"span\"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,\"datepicker\");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),\"input\"===i?(t.disabled=!1,a.trigger.filter(\"button\").each(function(){this.disabled=!1}).end().filter(\"img\").css({opacity:\"1.0\",cursor:\"\"})):(\"div\"===i||\"span\"===i)&&(s=n.children(\".\"+this._inlineClass),s.children().removeClass(\"ui-state-disabled\"),s.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,\"datepicker\");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),\"input\"===i?(t.disabled=!0,a.trigger.filter(\"button\").each(function(){this.disabled=!0}).end().filter(\"img\").css({opacity:\"0.5\",cursor:\"default\"})):(\"div\"===i||\"span\"===i)&&(s=n.children(\".\"+this._inlineClass),s.children().addClass(\"ui-state-disabled\"),s.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,\"datepicker\")}catch(i){throw\"Missing instance data for this datepicker\"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&\"string\"==typeof i?\"defaults\"===i?e.extend({},e.datepicker._defaults):l?\"all\"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},\"string\"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,\"min\"),h=this._getMinMaxDate(l,\"max\"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),\"disabled\"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(\".ui-datepicker-rtl\");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e(\"td.\"+e.datepicker._dayOverClass+\":not(.\"+e.datepicker._currentClass+\")\",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,\"onSelect\"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,\"stepBigMonths\"):-e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,\"stepBigMonths\"):+e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,\"D\"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,\"stepBigMonths\"):-e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,\"D\"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,\"D\"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,\"stepBigMonths\"):+e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,\"D\"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);\nreturn e.datepicker._get(n,\"constrainInput\")?(i=e.datepicker._possibleChars(e.datepicker._get(n,\"dateFormat\")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||\" \">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,\"dateFormat\"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,\"input\"!==t.nodeName.toLowerCase()&&(t=e(\"input\",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,\"beforeShow\"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=\"\"),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|=\"fixed\"===e(this).css(\"position\"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:\"absolute\",display:\"block\",top:\"-1000px\"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?\"static\":o?\"fixed\":\"absolute\",display:\"none\",left:h.left+\"px\",top:h.top+\"px\"}),i.inline||(l=e.datepicker._get(i,\"showAnim\"),u=e.datepicker._get(i,\"duration\"),i.dpDiv.css(\"z-index\",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,\"showOptions\"),u):i.dpDiv[l||\"show\"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find(\".\"+this._dayOverClass+\" a\");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\"),n>1&&t.dpDiv.addClass(\"ui-datepicker-multi-\"+n).css(\"width\",a*n+\"em\"),t.dpDiv[(1!==s[0]||1!==s[1]?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-multi\"),t.dpDiv[(this._get(t,\"isRTL\")?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-rtl\"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find(\"select.ui-datepicker-year:first\").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(\":visible\")&&!e.input.is(\":disabled\")&&!e.input.is(\":focus\")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,\"isRTL\")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,\"isRTL\");t&&(\"hidden\"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?\"previousSibling\":\"nextSibling\"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,\"datepicker\")||this._datepickerShowing&&(i=this._get(o,\"showAnim\"),s=this._get(o,\"duration\"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,\"showOptions\"),s,n):o.dpDiv[\"slideDown\"===i?\"slideUp\":\"fadeIn\"===i?\"fadeOut\":\"hide\"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,\"onClose\"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():\"\",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:\"absolute\",left:\"0\",top:\"-100px\"}),e.blockUI&&(e.unblockUI(),e(\"body\").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(\".ui-datepicker-calendar\")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents(\"#\"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest(\".\"+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+(\"M\"===s?this._get(a,\"showCurrentAtPos\"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,\"gotoCurrent\")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a[\"selected\"+(\"M\"===s?\"Month\":\"Year\")]=a[\"draw\"+(\"M\"===s?\"Month\":\"Year\")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e(\"a\",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,\"\")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,\"onSelect\"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger(\"change\"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],\"object\"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,\"altField\");a&&(i=this._get(t,\"altFormat\")||this._get(t,\"dateFormat\"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,\"\"]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw\"Invalid arguments\";if(i=\"object\"==typeof i?\"\"+i:i+\"\",\"\"===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u=\"string\"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s=\"@\"===e?14:\"!\"===e?20:\"y\"===e&&t?4:\"o\"===e?3:2,n=\"y\"===e?s:1,a=RegExp(\"^\\\\d{\"+n+\",\"+s+\"}\"),o=i.substring(h).match(a);if(!o)throw\"Missing number at position \"+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw\"Unknown name at position \"+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw\"Unexpected literal at position \"+h;h++};for(n=0;t.length>n;n++)if(b)\"'\"!==t.charAt(n)||_(\"'\")?k():b=!1;else switch(t.charAt(n)){case\"d\":v=x(\"d\");break;case\"D\":w(\"D\",d,c);break;case\"o\":y=x(\"o\");break;case\"m\":g=x(\"m\");break;case\"M\":g=w(\"M\",p,f);break;case\"y\":m=x(\"y\");break;case\"@\":r=new Date(x(\"@\")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case\"!\":r=new Date((x(\"!\")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case\"'\":_(\"'\")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\\s+/.test(o)))throw\"Extra/unparsed characters found in date: \"+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw\"Invalid date\";return r},ATOM:\"yy-mm-dd\",COOKIE:\"D, dd M yy\",ISO_8601:\"yy-mm-dd\",RFC_822:\"D, d M y\",RFC_850:\"DD, dd-M-y\",RFC_1036:\"D, d M y\",RFC_1123:\"D, d M yy\",RFC_2822:\"D, d M yy\",RSS:\"D, d M y\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yy-mm-dd\",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return\"\";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=\"\"+t;if(h(e))for(;i>s.length;)s=\"0\"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d=\"\",c=!1;if(t)for(s=0;e.length>s;s++)if(c)\"'\"!==e.charAt(s)||h(\"'\")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case\"d\":d+=l(\"d\",t.getDate(),2);break;case\"D\":d+=u(\"D\",t.getDay(),n,a);break;case\"o\":d+=l(\"o\",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case\"m\":d+=l(\"m\",t.getMonth()+1,2);break;case\"M\":d+=u(\"M\",t.getMonth(),o,r);break;case\"y\":d+=h(\"y\")?t.getFullYear():(10>t.getYear()%100?\"0\":\"\")+t.getYear()%100;break;case\"@\":d+=t.getTime();break;case\"!\":d+=1e4*t.getTime()+this._ticksTo1970;break;case\"'\":h(\"'\")?d+=\"'\":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i=\"\",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)\"'\"!==e.charAt(t)||n(\"'\")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case\"d\":case\"m\":case\"y\":case\"@\":i+=\"0123456789\";break;case\"D\":case\"M\":return null;case\"'\":n(\"'\")?i+=\"'\":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,\"dateFormat\"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?\"\":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,\"defaultDate\"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,\"dateFormat\"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||\"d\"){case\"d\":case\"D\":r+=parseInt(l[1],10);break;case\"w\":case\"W\":r+=7*parseInt(l[1],10);break;case\"m\":case\"M\":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case\"y\":case\"Y\":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||\"\"===i?s:\"string\"==typeof i?a(i):\"number\"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&\"Invalid Date\"==\"\"+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?\"\":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&\"\"===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,\"stepMonths\"),s=\"#\"+t.id.replace(/\\\\\\\\/g,\"\\\\\");t.dpDiv.find(\"[data-handler]\").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,\"M\")},next:function(){e.datepicker._adjustDate(s,+i,\"M\")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute(\"data-month\"),+this.getAttribute(\"data-year\"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,\"M\"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,\"Y\"),!1}};e(this).bind(this.getAttribute(\"data-event\"),t[this.getAttribute(\"data-handler\")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,\"isRTL\"),B=this._get(e,\"showButtonPanel\"),J=this._get(e,\"hideIfNoPrevNext\"),q=this._get(e,\"navigationAsDateFormat\"),K=this._getNumberOfMonths(e),V=this._get(e,\"showCurrentAtPos\"),U=this._get(e,\"stepMonths\"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,\"min\"),$=this._getMinMaxDate(e,\"max\"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,\"prevText\"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='\"+i+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"e\":\"w\")+\"'>\"+i+\"</span></a>\":J?\"\":\"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\"+i+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"e\":\"w\")+\"'>\"+i+\"</span></a>\",n=this._get(e,\"nextText\"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='\"+n+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"w\":\"e\")+\"'>\"+n+\"</span></a>\":J?\"\":\"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\"+n+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"w\":\"e\")+\"'>\"+n+\"</span></a>\",o=this._get(e,\"currentText\"),r=this._get(e,\"gotoCurrent\")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?\"\":\"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\"+this._get(e,\"closeText\")+\"</button>\",l=B?\"<div class='ui-datepicker-buttonpane ui-widget-content'>\"+(Y?h:\"\")+(this._isInRange(e,r)?\"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>\"+o+\"</button>\":\"\")+(Y?\"\":h)+\"</div>\":\"\",u=parseInt(this._get(e,\"firstDay\"),10),u=isNaN(u)?0:u,d=this._get(e,\"showWeek\"),c=this._get(e,\"dayNames\"),p=this._get(e,\"dayNamesMin\"),f=this._get(e,\"monthNames\"),m=this._get(e,\"monthNamesShort\"),g=this._get(e,\"beforeShowDay\"),v=this._get(e,\"showOtherMonths\"),y=this._get(e,\"selectOtherMonths\"),b=this._getDefaultDate(e),_=\"\",w=0;K[0]>w;w++){for(k=\"\",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=\" ui-corner-all\",M=\"\",Q){if(M+=\"<div class='ui-datepicker-group\",K[1]>1)switch(T){case 0:M+=\" ui-datepicker-group-first\",S=\" ui-corner-\"+(Y?\"right\":\"left\");break;case K[1]-1:M+=\" ui-datepicker-group-last\",S=\" ui-corner-\"+(Y?\"left\":\"right\");break;default:M+=\" ui-datepicker-group-middle\",S=\"\"}M+=\"'>\"}for(M+=\"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\"+S+\"'>\"+(/all|left/.test(S)&&0===w?Y?a:s:\"\")+(/all|right/.test(S)&&0===w?Y?s:a:\"\")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+\"</div><table class='ui-datepicker-calendar'><thead>\"+\"<tr>\",C=d?\"<th class='ui-datepicker-week-col'>\"+this._get(e,\"weekHeader\")+\"</th>\":\"\",x=0;7>x;x++)N=(x+u)%7,C+=\"<th scope='col'\"+((x+u+6)%7>=5?\" class='ui-datepicker-week-end'\":\"\")+\">\"+\"<span title='\"+c[N]+\"'>\"+p[N]+\"</span></th>\";for(M+=C+\"</tr></thead><tbody>\",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+=\"<tr>\",E=d?\"<td class='ui-datepicker-week-col'>\"+this._get(e,\"calculateWeek\")(z)+\"</td>\":\"\",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,\"\"],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+=\"<td class='\"+((x+u+6)%7>=5?\" ui-datepicker-week-end\":\"\")+(j?\" ui-datepicker-other-month\":\"\")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?\" \"+this._dayOverClass:\"\")+(W?\" \"+this._unselectableClass+\" ui-state-disabled\":\"\")+(j&&!v?\"\":\" \"+O[1]+(z.getTime()===G.getTime()?\" \"+this._currentClass:\"\")+(z.getTime()===R.getTime()?\" ui-datepicker-today\":\"\"))+\"'\"+(j&&!v||!O[2]?\"\":\" title='\"+O[2].replace(/'/g,\"'\")+\"'\")+(W?\"\":\" data-handler='selectDay' data-event='click' data-month='\"+z.getMonth()+\"' data-year='\"+z.getFullYear()+\"'\")+\">\"+(j&&!v?\" \":W?\"<span class='ui-state-default'>\"+z.getDate()+\"</span>\":\"<a class='ui-state-default\"+(z.getTime()===R.getTime()?\" ui-state-highlight\":\"\")+(z.getTime()===G.getTime()?\" ui-state-active\":\"\")+(j?\" ui-priority-secondary\":\"\")+\"' href='#'>\"+z.getDate()+\"</a>\")+\"</td>\",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+\"</tr>\"}Z++,Z>11&&(Z=0,et++),M+=\"</tbody></table>\"+(Q?\"</div>\"+(K[0]>0&&T===K[1]-1?\"<div class='ui-datepicker-row-break'></div>\":\"\"):\"\"),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,\"changeMonth\"),v=this._get(e,\"changeYear\"),y=this._get(e,\"showMonthAfterYear\"),b=\"<div class='ui-datepicker-title'>\",_=\"\";if(a||!g)_+=\"<span class='ui-datepicker-month'>\"+o[t]+\"</span>\";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+=\"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+=\"<option value='\"+u+\"'\"+(u===t?\" selected='selected'\":\"\")+\">\"+r[u]+\"</option>\");_+=\"</select>\"}if(y||(b+=_+(!a&&g&&v?\"\":\" \")),!e.yearshtml)if(e.yearshtml=\"\",a||!v)b+=\"<span class='ui-datepicker-year'>\"+i+\"</span>\";else{for(d=this._get(e,\"yearRange\").split(\":\"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||\"\")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+=\"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";m>=f;f++)e.yearshtml+=\"<option value='\"+f+\"'\"+(f===i?\" selected='selected'\":\"\")+\">\"+f+\"</option>\";e.yearshtml+=\"</select>\",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,\"yearSuffix\"),y&&(b+=(!a&&g&&v?\"\":\" \")+_),b+=\"</div>\"},_adjustInstDate:function(e,t,i){var s=e.drawYear+(\"Y\"===i?t:0),n=e.drawMonth+(\"M\"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+(\"D\"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(\"M\"===i||\"Y\"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,\"min\"),s=this._getMinMaxDate(e,\"max\"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,\"onChangeMonthYear\");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,\"numberOfMonths\");return null==t?[1,1]:\"number\"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+\"Date\"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,\"min\"),a=this._getMinMaxDate(e,\"max\"),o=null,r=null,h=this._get(e,\"yearRange\");return h&&(i=h.split(\":\"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\\-].*/)&&(o+=s),i[1].match(/[+\\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,\"shortYearCutoff\");return t=\"string\"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,\"dayNamesShort\"),dayNames:this._get(e,\"dayNames\"),monthNamesShort:this._get(e,\"monthNamesShort\"),monthNames:this._get(e,\"monthNames\")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?\"object\"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,\"dateFormat\"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e(\"#\"+e.datepicker._mainDivId).length&&e(\"body\").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return\"string\"!=typeof t||\"isDisabled\"!==t&&\"getDate\"!==t&&\"widget\"!==t?\"option\"===t&&2===arguments.length&&\"string\"==typeof arguments[1]?e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){\"string\"==typeof t?e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version=\"1.11.4\",e.datepicker,e.widget(\"ui.draggable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"drag\",options:{addClasses:!0,appendTo:\"parent\",axis:!1,connectToSortable:!1,containment:!1,cursor:\"auto\",cursorAt:!1,grid:!1,handle:!1,helper:\"original\",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:\"default\",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:\"both\",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){\"original\"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass(\"ui-draggable\"),this.options.disabled&&this.element.addClass(\"ui-draggable-disabled\"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),\"handle\"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(\".ui-draggable-dragging\")?(this.destroyOnClear=!0,void 0):(this.element.removeClass(\"ui-draggable ui-draggable-dragging ui-draggable-disabled\"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(\".ui-resizable-handle\").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?\"iframe\":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e(\"<div>\").css(\"position\",\"absolute\").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&\"body\"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass(\"ui-draggable-dragging\"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css(\"position\"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return\"fixed\"===e(this).css(\"position\")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger(\"start\",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo(\"absolute\"),!i){var s=this._uiHash();if(this._trigger(\"drag\",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+\"px\",this.helper[0].style.top=this.position.top+\"px\",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),\"invalid\"===this.options.revert&&!s||\"valid\"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger(\"stop\",t)!==!1&&i._clear()}):this._trigger(\"stop\",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(\".ui-draggable-dragging\")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass(\"ui-draggable-handle\")},_removeHandleClassName:function(){this.handleElement.removeClass(\"ui-draggable-handle\")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):\"clone\"===i.helper?this.element.clone().removeAttr(\"id\"):this.element;return n.parents(\"body\").length||n.appendTo(\"parent\"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css(\"position\"))||n.css(\"position\",\"absolute\"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css(\"position\"))||(this.element[0].style.position=\"relative\")},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),\"left\"in t&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css(\"top\"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css(\"left\"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css(\"marginLeft\"),10)||0,top:parseInt(this.element.css(\"marginTop\"),10)||0,right:parseInt(this.element.css(\"marginRight\"),10)||0,bottom:parseInt(this.element.css(\"marginBottom\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?\"window\"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):\"document\"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):(\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css(\"overflow\")),this.containment=[(parseInt(i.css(\"borderLeftWidth\"),10)||0)+(parseInt(i.css(\"paddingLeft\"),10)||0),(parseInt(i.css(\"borderTopWidth\"),10)||0)+(parseInt(i.css(\"paddingTop\"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css(\"borderRightWidth\"),10)||0)-(parseInt(i.css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css(\"borderBottomWidth\"),10)||0)-(parseInt(i.css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)\n},_convertPositionTo:function(e,t){t||(t=this.position);var i=\"absolute\"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),\"y\"===o.axis&&(h=this.originalPageX),\"x\"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass(\"ui-draggable-dragging\"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){\"y\"!==this.options.axis&&\"auto\"!==this.helper.css(\"right\")&&(this.helper.width(this.helper.width()),this.helper.css(\"right\",\"auto\")),\"x\"!==this.options.axis&&\"auto\"!==this.helper.css(\"bottom\")&&(this.helper.height(this.helper.height()),this.helper.css(\"bottom\",\"auto\"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo(\"absolute\"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add(\"draggable\",\"connectToSortable\",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable(\"instance\");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger(\"activate\",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css(\"position\"),top:e.placeholder.css(\"top\"),left:e.placeholder.css(\"left\")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger(\"deactivate\",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data(\"ui-sortable-item\",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger(\"toSortable\",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger(\"out\",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger(\"fromSortable\",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add(\"draggable\",\"cursor\",{start:function(t,i,s){var n=e(\"body\"),a=s.options;n.css(\"cursor\")&&(a._cursor=n.css(\"cursor\")),n.css(\"cursor\",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e(\"body\").css(\"cursor\",n._cursor)}}),e.ui.plugin.add(\"draggable\",\"opacity\",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css(\"opacity\")&&(a._opacity=n.css(\"opacity\")),n.css(\"opacity\",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css(\"opacity\",n._opacity)}}),e.ui.plugin.add(\"draggable\",\"scroll\",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&\"HTML\"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&\"HTML\"!==o.tagName?(n.axis&&\"x\"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&\"y\"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&\"x\"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&\"y\"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add(\"draggable\",\"snap\",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||\":data(ui-draggable)\":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):(\"inner\"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo(\"relative\",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l}).left)),p=n||a||o||r,\"outer\"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo(\"relative\",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add(\"draggable\",\"stack\",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css(\"zIndex\"),10)||0)-(parseInt(e(i).css(\"zIndex\"),10)||0)});o.length&&(n=parseInt(e(o[0]).css(\"zIndex\"),10)||0,e(o).each(function(t){e(this).css(\"zIndex\",n+t)}),this.css(\"zIndex\",n+o.length))}}),e.ui.plugin.add(\"draggable\",\"zIndex\",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css(\"zIndex\")&&(a._zIndex=n.css(\"zIndex\")),n.css(\"zIndex\",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css(\"zIndex\",n._zIndex)}}),e.ui.draggable,e.widget(\"ui.resizable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if(\"hidden\"===e(t).css(\"overflow\"))return!1;var s=i&&\"left\"===i?\"scrollLeft\":\"scrollTop\",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass(\"ui-resizable\"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css({margin:this.originalElement.css(\"margin\")}),this._proportionallyResize()),this.handles=r.handles||(e(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=e(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),t=this.handles.split(\",\"),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a=\"ui-resizable-\"+s,n=e(\"<div class='ui-resizable-handle \"+a+\"'></div>\"),n.css({zIndex:r.zIndex}),\"se\"===s&&n.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\"),this.handles[s]=\".ui-resizable-\"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=[\"padding\",/ne|nw|n/.test(i)?\"Top\":/se|sw|s/.test(i)?\"Bottom\":/^e$/.test(i)?\"Right\":\"Left\"].join(\"\"),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:\"se\")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass(\"ui-resizable-autohide\").mouseenter(function(){r.disabled||(e(this).removeClass(\"ui-resizable-autohide\"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass(\"ui-resizable-autohide\"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").removeData(\"ui-resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css(\"position\"),width:t.outerWidth(),height:t.outerHeight(),top:t.css(\"top\"),left:t.css(\"left\")}).insertAfter(t),t.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css(\"left\")),s=this._num(this.helper.css(\"top\")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=\"number\"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(\".ui-resizable-\"+this.axis).css(\"cursor\"),e(\"body\").css(\"cursor\",\"auto\"===n?this.axis+\"-resize\":n),o.addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate(\"resize\",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger(\"resize\",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],\"left\")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css(\"left\"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css(\"top\"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e(\"body\").css(\"cursor\",\"auto\"),this.element.removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+\"px\"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),\"sw\"===s&&(e.left=t.left+(i.width-e.width),e.top=null),\"nw\"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css(\"borderTopWidth\"),e.css(\"borderRightWidth\"),e.css(\"borderBottomWidth\"),e.css(\"borderLeftWidth\")],n=[e.css(\"paddingTop\"),e.css(\"paddingRight\"),e.css(\"paddingBottom\"),e.css(\"paddingLeft\")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e(\"<div style='overflow:hidden;'></div>\"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++i.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),\"resize\"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add(\"resizable\",\"animate\",{stop:function(t){var i=e(this).resizable(\"instance\"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],\"left\")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css(\"left\"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css(\"top\"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css(\"width\"),10),height:parseInt(i.element.css(\"height\"),10),top:parseInt(i.element.css(\"top\"),10),left:parseInt(i.element.css(\"left\"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate(\"resize\",t)}})}}),e.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable(\"instance\"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(e,s){i[e]=h._num(t.css(\"padding\"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,\"left\")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable(\"instance\"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css(\"position\"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css(\"position\")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable(\"instance\"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css(\"position\"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css(\"position\"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var t=e(this).resizable(\"instance\"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data(\"ui-resizable-alsoresize\",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css(\"left\"),10),top:parseInt(t.css(\"top\"),10)})})},resize:function(t,i){var s=e(this).resizable(\"instance\"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data(\"ui-resizable-alsoresize\"),n={},a=t.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData(\"resizable-alsoresize\")}}),e.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var t=e(this).resizable(\"instance\"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(\"string\"==typeof i.ghost?i.ghost:\"\"),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable(\"instance\");t.ghost&&t.ghost.css({position:\"relative\",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable(\"instance\");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var t,i=e(this).resizable(\"instance\"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h=\"number\"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget(\"ui.dialog\",{version:\"1.11.4\",options:{appendTo:\"body\",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:\"Close\",dialogClass:\"\",draggable:!0,hide:null,height:\"auto\",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:\"center\",at:\"center\",of:window,collision:\"fit\",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css(\"top\",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr(\"title\"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr(\"title\").addClass(\"ui-dialog-content ui-widget-content\").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||\"body\").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass(\"ui-dialog-content ui-widget-content\").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr(\"title\",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger(\"beforeClose\",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(\":focusable\").focus().length)try{i=this.document[0].activeElement,i&&\"body\"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger(\"close\",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(\".ui-front:visible\").map(function(){return+e(this).css(\"z-index\")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css(\"z-index\")&&(this.uiDialog.css(\"z-index\",a+1),s=!0),s&&!i&&this._trigger(\"focus\",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css(\"z-index\",this.uiDialog.css(\"z-index\")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger(\"focus\")}),this._makeFocusTarget(),this._trigger(\"open\"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find(\"[autofocus]\")),e.length||(e=this.element.find(\":tabbable\")),e.length||(e=this.uiDialogButtonPane.find(\":tabbable\")),e.length||(e=this.uiDialogTitlebarClose.filter(\":tabbable\")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e(\"<div>\").addClass(\"ui-dialog ui-widget ui-widget-content ui-corner-all ui-front \"+this.options.dialogClass).hide().attr({tabIndex:-1,role:\"dialog\"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;\nif(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(\":tabbable\"),s=i.filter(\":first\"),n=i.filter(\":last\");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find(\"[aria-describedby]\").length||this.uiDialog.attr({\"aria-describedby\":this.element.uniqueId().attr(\"id\")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e(\"<div>\").addClass(\"ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix\").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(\".ui-dialog-titlebar-close\")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e(\"<button type='button'></button>\").button({label:this.options.closeText,icons:{primary:\"ui-icon-closethick\"},text:!1}).addClass(\"ui-dialog-titlebar-close\").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e(\"<span>\").uniqueId().addClass(\"ui-dialog-title\").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({\"aria-labelledby\":t.attr(\"id\")})},_title:function(e){this.options.title||e.html(\" \"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e(\"<div>\").addClass(\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\"),this.uiButtonSet=e(\"<div>\").addClass(\"ui-dialog-buttonset\").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass(\"ui-dialog-buttons\"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:\"button\"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e(\"<button></button>\",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass(\"ui-dialog-buttons\"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:\".ui-dialog-content, .ui-dialog-titlebar-close\",handle:\".ui-dialog-titlebar\",containment:\"document\",start:function(s,n){e(this).addClass(\"ui-dialog-dragging\"),i._blockFrames(),i._trigger(\"dragStart\",s,t(n))},drag:function(e,s){i._trigger(\"drag\",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:\"left top\",at:\"left\"+(o>=0?\"+\":\"\")+o+\" \"+\"top\"+(r>=0?\"+\":\"\")+r,of:i.window},e(this).removeClass(\"ui-dialog-dragging\"),i._unblockFrames(),i._trigger(\"dragStop\",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css(\"position\"),o=\"string\"==typeof n?n:\"n,e,s,w,se,sw,ne,nw\";this.uiDialog.resizable({cancel:\".ui-dialog-content\",containment:\"document\",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass(\"ui-dialog-resizing\"),i._blockFrames(),i._trigger(\"resizeStart\",s,t(n))},resize:function(e,s){i._trigger(\"resize\",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:\"left top\",at:\"left\"+(r>=0?\"+\":\"\")+r+\" \"+\"top\"+(h>=0?\"+\":\"\")+h,of:i.window},e(this).removeClass(\"ui-dialog-resizing\"),i._unblockFrames(),i._trigger(\"resizeStop\",n,t(a))}}).css(\"position\",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data(\"ui-dialog-instances\");return e||(e=[],this.document.data(\"ui-dialog-instances\",e)),e},_minHeight:function(){var e=this.options;return\"auto\"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(\":visible\");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;\"dialogClass\"===e&&n.removeClass(this.options.dialogClass).addClass(t),\"disabled\"!==e&&(this._super(e,t),\"appendTo\"===e&&this.uiDialog.appendTo(this._appendTo()),\"buttons\"===e&&this._createButtons(),\"closeText\"===e&&this.uiDialogTitlebarClose.button({label:\"\"+t}),\"draggable\"===e&&(i=n.is(\":data(ui-draggable)\"),i&&!t&&n.draggable(\"destroy\"),!i&&t&&this._makeDraggable()),\"position\"===e&&this._position(),\"resizable\"===e&&(s=n.is(\":data(ui-resizable)\"),s&&!t&&n.resizable(\"destroy\"),s&&\"string\"==typeof t&&n.resizable(\"option\",\"handles\",t),s||t===!1||this._makeResizable()),\"title\"===e&&this._title(this.uiDialogTitlebar.find(\".ui-dialog-title\")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:\"auto\",minHeight:0,maxHeight:\"none\",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:\"auto\",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i=\"number\"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):\"none\",\"auto\"===s.height?this.element.css({minHeight:t,maxHeight:i,height:\"auto\"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",\"minHeight\",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find(\"iframe\").map(function(){var t=e(this);return e(\"<div>\").css({position:\"absolute\",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(\".ui-dialog\").length?!0:!!e(t.target).closest(\".ui-datepicker\").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data(\"ui-dialog-overlays\")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e(\"<div>\").addClass(\"ui-widget-overlay ui-front\").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:\"_keepFocus\"}),this.document.data(\"ui-dialog-overlays\",(this.document.data(\"ui-dialog-overlays\")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data(\"ui-dialog-overlays\")-1;e?this.document.data(\"ui-dialog-overlays\",e):this.document.unbind(\"focusin\").removeData(\"ui-dialog-overlays\"),this.overlay.remove(),this.overlay=null}}}),e.widget(\"ui.droppable\",{version:\"1.11.4\",widgetEventPrefix:\"drop\",options:{accept:\"*\",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:\"default\",tolerance:\"intersect\",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass(\"ui-droppable\")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass(\"ui-droppable ui-droppable-disabled\")},_setOption:function(t,i){if(\"accept\"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if(\"scope\"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger(\"activate\",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger(\"deactivate\",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger(\"over\",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger(\"out\",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function(){var i=e(this).droppable(\"instance\");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger(\"drop\",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case\"fit\":return a>=l&&d>=r&&o>=u&&c>=h;case\"intersect\":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case\"pointer\":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case\"touch\":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{\"default\":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(\":data(ui-droppable)\").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible=\"none\"!==a[s].element.css(\"display\"),a[s].visible&&(\"mousedown\"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil(\"body\").bind(\"scroll.droppable\",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?\"isout\":o&&!this.isover?\"isover\":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(\":data(ui-droppable)\").filter(function(){return e(this).droppable(\"instance\").options.scope===n}),a.length&&(s=e(a[0]).droppable(\"instance\"),s.greedyChild=\"isover\"===r)),s&&\"isover\"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this[\"isout\"===r?\"isover\":\"isout\"]=!1,this[\"isover\"===r?\"_over\":\"_out\"].call(this,i),s&&\"isout\"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil(\"body\").unbind(\"scroll.droppable\"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y=\"ui-effects-\",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||\"rgba\";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?(\"0,0,0,0\"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o=\"backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",r=/^([\\-+])=\\s*(\\d+\\.?\\d*)/,h=[{re:/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,space:\"hsla\",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:\"byte\"},green:{idx:1,type:\"byte\"},blue:{idx:2,type:\"byte\"}}},hsla:{props:{hue:{idx:0,type:\"degrees\"},saturation:{idx:1,type:\"percent\"},lightness:{idx:2,type:\"percent\"}}}},d={\"byte\":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e(\"<p>\")[0],f=e.each;p.style.cssText=\"background-color:rgba(1,1,1,.5)\",c.rgba=p.style.backgroundColor.indexOf(\"rgba\")>-1,f(u,function(e,t){t.cache=\"_\"+e,t.props.alpha={idx:3,type:\"percent\",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c=\"array\"),\"string\"===c?this.parse(s(n)||a._default):\"array\"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):\"object\"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if(\"alpha\"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l(\"transparent\"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t=\"rgba(\",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t=\"rgb(\"),t+i.join()+\")\"},toHslaString:function(){var t=\"hsla(\",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+\"%\"),e});return 1===i[3]&&(i.pop(),t=\"hsl(\"),t+i.join()+\")\"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),\"#\"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?\"0\"+e:e}).join(\"\")},toString:function(){return 0===this._rgba[3]?\"transparent\":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d=\"array\"===r||\"object\"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d[\"object\"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h=\"alpha\"===t?this._hsla?\"hsla\":\"rgba\":s,l=this[h](),u=l[i.idx];return\"undefined\"===o?u:(\"function\"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:(\"string\"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*(\"+\"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(\" \");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r=\"\";if(\"transparent\"!==n&&(\"string\"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o=\"backgroundColor\"===i?t.parentNode:t;(\"\"===r||\"transparent\"===r)&&o&&o.style;)try{r=e.css(o,\"backgroundColor\"),o=o.parentNode}catch(h){}n=n.blend(r&&\"transparent\"!==r?r:\"_default\")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f([\"Top\",\"Right\",\"Bottom\",\"Left\"],function(i,s){t[\"border\"+s+\"Color\"]=e}),t}},a=e.Color.names={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\",transparent:[null,null,null,0],_default:\"#ffffff\"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],\"string\"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)\"string\"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=[\"add\",\"remove\",\"toggle\"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each([\"borderLeftStyle\",\"borderRightStyle\",\"borderBottomStyle\",\"borderTopStyle\"],function(t,i){e.fx.step[i]=function(e){(\"none\"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr(\"class\")||\"\",l=h.children?o.find(\"*\").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+\"Class\"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr(\"class\",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,\"\")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return\"boolean\"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),(\"number\"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:\"number\"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||\"number\"==typeof t||e.fx.speeds[t]?!0:\"string\"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:\"object\"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:\"1.11.4\",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=\"\"),e.css(t[s],i))},setMode:function(e,t){return\"toggle\"===t&&(t=e.is(\":hidden\")?\"show\":\"hide\"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case\"top\":i=0;break;case\"middle\":i=.5;break;case\"bottom\":i=1;break;default:i=e[0]/t.height}switch(e[1]){case\"left\":s=0;break;case\"center\":s=.5;break;case\"right\":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(\".ui-effects-wrapper\"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),\"float\":t.css(\"float\")},s=e(\"<div></div>\").addClass(\"ui-effects-wrapper\").css({fontSize:\"100%\",background:\"transparent\",border:\"none\",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),\"static\"===t.css(\"position\")?(s.css({position:\"relative\"}),t.css({position:\"relative\"})):(e.extend(i,{position:t.css(\"position\"),zIndex:t.css(\"z-index\")}),e.each([\"top\",\"left\",\"bottom\",\"right\"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]=\"auto\")}),t.css({position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(\".ui-effects-wrapper\")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(\":hidden\")?\"hide\"===r:\"show\"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||\"fx\",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"show\",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"hide\",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||\"boolean\"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"toggle\",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each([\"em\",\"px\",\"%\",\"pt\"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each([\"Quad\",\"Cubic\",\"Quart\",\"Quint\",\"Expo\"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing[\"easeIn\"+t]=i,e.easing[\"easeOut\"+t]=function(e){return 1-i(1-e)},e.easing[\"easeInOut\"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],u=e.effects.setMode(o,t.mode||\"hide\"),d=t.direction||\"up\",c=r.test(d),p=c?\"height\":\"width\",f=c?\"top\":\"left\",m=h.test(d),g={},v=\"show\"===u;o.parent().is(\".ui-effects-wrapper\")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:\"hidden\"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?\"bottom\":\"right\",0).css(c?\"top\":\"left\",\"auto\").css({position:\"absolute\"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){\"hide\"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],h=e.effects.setMode(o,t.mode||\"effect\"),l=\"hide\"===h,u=\"show\"===h,d=t.direction||\"up\",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v=\"up\"===d||\"down\"===d?\"top\":\"left\",y=\"up\"===d||\"left\"===d,b=o.queue(),_=b.length;for((u||l)&&r.push(\"opacity\"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o[\"top\"===v?\"outerHeight\":\"outerWidth\"]()/3),u&&(a={opacity:1},a[v]=0,o.css(\"opacity\",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?\"-=\":\"+=\")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?\"-=\":\"+=\")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],h=e.effects.setMode(o,t.mode||\"hide\"),l=\"show\"===h,u=t.direction||\"vertical\",d=\"vertical\"===u,c=d?\"height\":\"width\",p=d?\"top\":\"left\",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:\"hidden\"}),n=\"IMG\"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"opacity\",\"height\",\"width\"],o=e.effects.setMode(n,t.mode||\"hide\"),r=\"show\"===o,h=t.direction||\"left\",l=\"up\"===h||\"down\"===h?\"top\":\"left\",u=\"up\"===h||\"left\"===h?\"pos\":\"neg\",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n[\"top\"===l?\"outerHeight\":\"outerWidth\"](!0)/2,r&&n.css(\"opacity\",0).css(l,\"pos\"===u?-s:s),d[l]=(r?\"pos\"===u?\"+=\":\"-=\":\"pos\"===u?\"-=\":\"+=\")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:\"visible\"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||\"hide\"),m=\"show\"===f,g=p.show().css(\"visibility\",\"hidden\").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo(\"body\").wrap(\"<div></div>\").css({position:\"absolute\",visibility:\"visible\",left:-o*v,top:-a*y}).parent().addClass(\"ui-effects-explode\").css({position:\"absolute\",overflow:\"hidden\",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||\"toggle\");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],r=e.effects.setMode(a,t.mode||\"hide\"),h=\"show\"===r,l=\"hide\"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?[\"width\",\"height\"]:[\"height\",\"width\"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:\"hidden\"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=[\"backgroundImage\",\"backgroundColor\",\"opacity\"],a=e.effects.setMode(s,t.mode||\"show\"),o={backgroundColor:s.css(\"backgroundColor\")};\"hide\"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:\"none\",backgroundColor:t.color||\"#ffff99\"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\",\"overflow\",\"opacity\"],h=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"overflow\",\"opacity\"],l=[\"width\",\"height\",\"overflow\"],u=[\"fontSize\"],d=[\"borderTopWidth\",\"borderBottomWidth\",\"paddingTop\",\"paddingBottom\"],c=[\"borderLeftWidth\",\"borderRightWidth\",\"paddingLeft\",\"paddingRight\"],p=e.effects.setMode(o,t.mode||\"effect\"),f=t.restore||\"effect\"!==p,m=t.scale||\"both\",g=t.origin||[\"middle\",\"center\"],v=o.css(\"position\"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};\"show\"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},\"toggle\"===t.mode&&\"show\"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||(\"show\"===p?b:s),o.to=t.to||(\"hide\"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},(\"box\"===m||\"both\"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),(\"content\"===m||\"both\"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css(\"overflow\",\"hidden\").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),(\"content\"===m||\"both\"===m)&&(d=d.concat([\"marginTop\",\"marginBottom\"]).concat(u),c=c.concat([\"marginLeft\",\"marginRight\"]),l=r.concat(d).concat(c),o.find(\"*[width]\").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};\nf&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css(\"opacity\",o.from.opacity),\"hide\"===p&&o.hide(),e.effects.restore(o,y),f||(\"static\"===v?o.css({position:\"relative\",top:o.to.top,left:o.to.left}):e.each([\"top\",\"left\"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return\"auto\"===i?n+\"px\":s+n+\"px\"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||\"effect\"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:\"hide\"===a?0:100),r=t.direction||\"both\",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:\"horizontal\"!==r?o/100:1,x:\"vertical\"!==r?o/100:1};n.effect=\"size\",n.queue=!1,n.complete=i,\"effect\"!==a&&(n.origin=h||[\"middle\",\"center\"],n.restore=!0),n.from=t.from||(\"show\"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&(\"show\"===a&&(n.from.opacity=0,n.to.opacity=1),\"hide\"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||\"hide\"),a=\"hide\"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:\"scale\",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||\"show\"),o=\"show\"===a,r=\"hide\"===a,h=o||\"hide\"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(\":visible\"))&&(n.css(\"opacity\",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],o=e.effects.setMode(n,t.mode||\"effect\"),r=t.direction||\"left\",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c=\"up\"===r||\"down\"===r?\"top\":\"left\",p=\"up\"===r||\"left\"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?\"-=\":\"+=\")+h,m[c]=(p?\"+=\":\"-=\")+2*h,g[c]=(p?\"-=\":\"+=\")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\"],o=e.effects.setMode(n,t.mode||\"show\"),r=\"show\"===o,h=t.direction||\"left\",l=\"up\"===h||\"down\"===h?\"top\":\"left\",u=\"up\"===h||\"left\"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n[\"top\"===l?\"outerHeight\":\"outerWidth\"](!0),e.effects.createWrapper(n).css({overflow:\"hidden\"}),r&&n.css(l,u?isNaN(s)?\"-\"+s:-s:s),d[l]=(r?u?\"+=\":\"-=\":u?\"-=\":\"+=\")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a=\"fixed\"===n.css(\"position\"),o=e(\"body\"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e(\"<div class='ui-effects-transfer'></div>\").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?\"fixed\":\"absolute\"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget(\"ui.progressbar\",{version:\"1.11.4\",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").attr({role:\"progressbar\",\"aria-valuemin\":this.min}),this.valueDiv=e(\"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").removeAttr(\"role\").removeAttr(\"aria-valuemin\").removeAttr(\"aria-valuemax\").removeAttr(\"aria-valuenow\"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,\"number\"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){\"max\"===e&&(t=Math.max(this.min,t)),\"disabled\"===e&&this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass(\"ui-corner-right\",t===this.options.max).width(i.toFixed(0)+\"%\"),this.element.toggleClass(\"ui-progressbar-indeterminate\",this.indeterminate),this.indeterminate?(this.element.removeAttr(\"aria-valuenow\"),this.overlayDiv||(this.overlayDiv=e(\"<div class='ui-progressbar-overlay'></div>\").appendTo(this.valueDiv))):(this.element.attr({\"aria-valuemax\":this.options.max,\"aria-valuenow\":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger(\"change\")),t===this.options.max&&this._trigger(\"complete\")}}),e.widget(\"ui.selectable\",e.ui.mouse,{version:\"1.11.4\",options:{appendTo:\"body\",autoRefresh:!0,distance:0,filter:\"*\",tolerance:\"touch\",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass(\"ui-selectable\"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass(\"ui-selectee\"),t.each(function(){var t=e(this),i=t.offset();e.data(this,\"selectable-item\",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass(\"ui-selected\"),selecting:t.hasClass(\"ui-selecting\"),unselecting:t.hasClass(\"ui-unselecting\")})})},this.refresh(),this.selectees=t.addClass(\"ui-selectee\"),this._mouseInit(),this.helper=e(\"<div class='ui-selectable-helper'></div>\")},_destroy:function(){this.selectees.removeClass(\"ui-selectee\").removeData(\"selectable-item\"),this.element.removeClass(\"ui-selectable ui-selectable-disabled\"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger(\"start\",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(\".ui-selected\").each(function(){var s=e.data(this,\"selectable-item\");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass(\"ui-selected\"),s.selected=!1,s.$element.addClass(\"ui-unselecting\"),s.unselecting=!0,i._trigger(\"unselecting\",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,\"selectable-item\");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass(\"ui-selected\"),n.$element.removeClass(s?\"ui-unselecting\":\"ui-selected\").addClass(s?\"ui-selecting\":\"ui-unselecting\"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger(\"selecting\",t,{selecting:n.element}):i._trigger(\"unselecting\",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,\"selectable-item\"),l=!1;i&&i.element!==s.element[0]&&(\"touch\"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):\"fit\"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass(\"ui-selected\"),i.selected=!1),i.unselecting&&(i.$element.removeClass(\"ui-unselecting\"),i.unselecting=!1),i.selecting||(i.$element.addClass(\"ui-selecting\"),i.selecting=!0,s._trigger(\"selecting\",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass(\"ui-selecting\"),i.selecting=!1,i.$element.addClass(\"ui-selected\"),i.selected=!0):(i.$element.removeClass(\"ui-selecting\"),i.selecting=!1,i.startselected&&(i.$element.addClass(\"ui-unselecting\"),i.unselecting=!0),s._trigger(\"unselecting\",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass(\"ui-selected\"),i.selected=!1,i.$element.addClass(\"ui-unselecting\"),i.unselecting=!0,s._trigger(\"unselecting\",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(\".ui-unselecting\",this.element[0]).each(function(){var s=e.data(this,\"selectable-item\");s.$element.removeClass(\"ui-unselecting\"),s.unselecting=!1,s.startselected=!1,i._trigger(\"unselected\",t,{unselected:s.element})}),e(\".ui-selecting\",this.element[0]).each(function(){var s=e.data(this,\"selectable-item\");s.$element.removeClass(\"ui-selecting\").addClass(\"ui-selected\"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger(\"selected\",t,{selected:s.element})}),this._trigger(\"stop\",t),this.helper.remove(),!1}}),e.widget(\"ui.selectmenu\",{version:\"1.11.4\",defaultElement:\"<select>\",options:{appendTo:null,disabled:null,icons:{button:\"ui-icon-triangle-1-s\"},position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr(\"id\");this.ids={element:e,button:e+\"-button\",menu:e+\"-menu\"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e(\"label[for='\"+this.ids.element+\"']\").attr(\"for\",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e(\"<span>\",{\"class\":\"ui-selectmenu-button ui-widget ui-state-default ui-corner-all\",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:\"combobox\",\"aria-expanded\":\"false\",\"aria-autocomplete\":\"list\",\"aria-owns\":this.ids.menu,\"aria-haspopup\":\"true\"}).insertAfter(this.element),e(\"<span>\",{\"class\":\"ui-icon \"+this.options.icons.button}).prependTo(this.button),this.buttonText=e(\"<span>\",{\"class\":\"ui-selectmenu-text\"}).appendTo(this.button),this._setText(this.buttonText,this.element.find(\"option:selected\").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one(\"focusin\",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e(\"<ul>\",{\"aria-hidden\":\"true\",\"aria-labelledby\":this.ids.button,id:this.ids.menu}),this.menuWrap=e(\"<div>\",{\"class\":\"ui-selectmenu-menu ui-front\"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:\"listbox\",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data(\"ui-selectmenu-item\"),e)},focus:function(e,i){var s=i.item.data(\"ui-selectmenu-item\");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger(\"focus\",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr(\"aria-activedescendant\",t.menuItems.eq(s.index).attr(\"id\"))}}).menu(\"instance\"),this.menu.addClass(\"ui-corner-bottom\").removeClass(\"ui-corner-all\"),this.menuInstance._off(this.menu,\"mouseleave\"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find(\"option\");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find(\"li\").not(\".ui-selectmenu-optgroup\"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data(\"ui-selectmenu-item\")),this._setOption(\"disabled\",this.element.prop(\"disabled\")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(\".ui-state-focus\").removeClass(\"ui-state-focus\"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger(\"open\",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger(\"close\",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n=\"\";e.each(i,function(i,a){a.optgroup!==n&&(e(\"<li>\",{\"class\":\"ui-selectmenu-optgroup ui-menu-divider\"+(a.element.parent(\"optgroup\").prop(\"disabled\")?\" ui-state-disabled\":\"\"),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data(\"ui-selectmenu-item\",t)},_renderItem:function(t,i){var s=e(\"<li>\");return i.disabled&&s.addClass(\"ui-state-disabled\"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(\" \")},_move:function(e,t){var i,s,n=\".ui-menu-item\";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=\":not(.ui-state-disabled)\"),s=\"first\"===e||\"last\"===e?i[\"first\"===e?\"prevAll\":\"nextAll\"](n).eq(-1):i[e+\"All\"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?\"close\":\"open\"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(\".ui-selectmenu-menu, #\"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move(\"prev\",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move(\"next\",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move(\"prev\",t);break;case e.ui.keyCode.RIGHT:this._move(\"next\",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move(\"first\",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move(\"last\",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass(\"ui-state-disabled\")||this._select(t.data(\"ui-selectmenu-item\"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger(\"select\",t,{item:e}),e.index!==i&&this._trigger(\"change\",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr(\"id\");this.button.attr({\"aria-labelledby\":t,\"aria-activedescendant\":t}),this.menu.attr(\"aria-activedescendant\",t)},_setOption:function(e,t){\"icons\"===e&&this.button.find(\"span.ui-icon\").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),\"appendTo\"===e&&this.menuWrap.appendTo(this._appendTo()),\"disabled\"===e&&(this.menuInstance.option(\"disabled\",t),this.button.toggleClass(\"ui-state-disabled\",t).attr(\"aria-disabled\",t),this.element.prop(\"disabled\",t),t?(this.button.attr(\"tabindex\",-1),this.close()):this.button.attr(\"tabindex\",0)),\"width\"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(\".ui-front\")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass(\"ui-corner-top\",this.isOpen).toggleClass(\"ui-corner-all\",!this.isOpen).attr(\"aria-expanded\",this.isOpen),this.menuWrap.toggleClass(\"ui-selectmenu-open\",this.isOpen),this.menu.attr(\"aria-hidden\",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width(\"\").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop(\"disabled\")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent(\"optgroup\");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr(\"label\")||\"\",disabled:a.prop(\"disabled\")||n.prop(\"disabled\")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr(\"for\",this.ids.element)}}),e.widget(\"ui.slider\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"slide\",options:{animate:!1,distance:0,max:100,min:0,orientation:\"horizontal\",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass(\"ui-slider ui-slider-\"+this.orientation+\" ui-widget\"+\" ui-widget-content\"+\" ui-corner-all\"),this._refresh(),this._setOption(\"disabled\",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(\".ui-slider-handle\").addClass(\"ui-state-default ui-corner-all\"),a=\"<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>\",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join(\"\")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data(\"ui-slider-handle-index\",t)})},_createRange:function(){var t=this.options,i=\"\";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass(\"ui-slider-range-min ui-slider-range-max\").css({left:\"\",bottom:\"\"}):(this.range=e(\"<div></div>\").appendTo(this.element),i=\"ui-slider-range ui-widget-header ui-corner-all\"),this.range.addClass(i+(\"min\"===t.range||\"max\"===t.range?\" ui-slider-range-\"+t.range:\"\"))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass(\"ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all\"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass(\"ui-state-active\").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(\".ui-slider-handle\"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css(\"borderTopWidth\"),10)||0)-(parseInt(a.css(\"borderBottomWidth\"),10)||0)+(parseInt(a.css(\"marginTop\"),10)||0)},this.handles.hasClass(\"ui-state-hover\")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass(\"ui-state-active\"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=\"vertical\"===this.options.orientation?\"vertical\":\"horizontal\"},_normValueFromMouse:function(e){var t,i,s,n,a;return\"horizontal\"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),\"vertical\"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger(\"start\",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger(\"slide\",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger(\"slide\",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger(\"stop\",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger(\"change\",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch(\"range\"===t&&this.options.range===!0&&(\"min\"===i?(this.options.value=this._values(0),this.options.values=null):\"max\"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),\"disabled\"===t&&this.element.toggleClass(\"ui-state-disabled\",!!i),this._super(t,i),t){case\"orientation\":this._detectOrientation(),this.element.removeClass(\"ui-slider-horizontal ui-slider-vertical\").addClass(\"ui-slider-\"+this.orientation),this._refreshValue(),this.handles.css(\"horizontal\"===i?\"bottom\":\"left\",\"\");break;case\"value\":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case\"values\":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case\"step\":case\"min\":case\"max\":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case\"range\":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=\"\"+e,i=t.indexOf(\".\");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u[\"horizontal\"===h.orientation?\"left\":\"bottom\"]=i+\"%\",e(this).stop(1,1)[l?\"animate\":\"css\"](u,r.animate),h.options.range===!0&&(\"horizontal\"===h.orientation?(0===s&&h.range.stop(1,1)[l?\"animate\":\"css\"]({left:i+\"%\"},r.animate),1===s&&h.range[l?\"animate\":\"css\"]({width:i-t+\"%\"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?\"animate\":\"css\"]({bottom:i+\"%\"},r.animate),1===s&&h.range[l?\"animate\":\"css\"]({height:i-t+\"%\"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u[\"horizontal\"===this.orientation?\"left\":\"bottom\"]=i+\"%\",this.handle.stop(1,1)[l?\"animate\":\"css\"](u,r.animate),\"min\"===o&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({width:i+\"%\"},r.animate),\"max\"===o&&\"horizontal\"===this.orientation&&this.range[l?\"animate\":\"css\"]({width:100-i+\"%\"},{queue:!1,duration:r.animate}),\"min\"===o&&\"vertical\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({height:i+\"%\"},r.animate),\"max\"===o&&\"vertical\"===this.orientation&&this.range[l?\"animate\":\"css\"]({height:100-i+\"%\"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data(\"ui-slider-handle-index\");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass(\"ui-state-active\"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data(\"ui-slider-handle-index\");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass(\"ui-state-active\"))}}}),e.widget(\"ui.sortable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css(\"float\"))||/inline|table-cell/.test(e.css(\"display\"))},_create:function(){this.containerCache={},this.element.addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),\"handle\"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass(\"ui-sortable-handle\")})},_destroy:function(){this.element.removeClass(\"ui-sortable ui-sortable-disabled\").find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||\"static\"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+\"-item\")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+\"-item\")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find(\"*\").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&\"auto\"!==o.cursor&&(a=this.document.find(\"body\"),this.storedCursor=a.css(\"cursor\"),a.css(\"cursor\",o.cursor),this.storedStylesheet=e(\"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\").appendTo(a)),o.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",o.opacity)),o.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",o.zIndex)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger(\"activate\",t,this._uiHash(this));\nreturn e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass(\"ui-sortable-helper\"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo(\"absolute\"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo(\"absolute\"),this.options.axis&&\"y\"===this.options.axis||(this.helper[0].style.left=this.position.left+\"px\"),this.options.axis&&\"x\"===this.options.axis||(this.helper[0].style.top=this.position.top+\"px\"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?\"next\":\"prev\"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&(\"semi-dynamic\"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger(\"change\",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger(\"sort\",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&\"x\"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&\"y\"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),\"original\"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger(\"out\",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||\"id\")||\"\").match(t.expression||/(.+)[\\-=_](.+)/);i&&s.push((t.key||i[1]+\"[]\")+\"=\"+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+\"=\"),s.join(\"&\")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||\"id\")||\"\")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d=\"x\"===this.options.axis||s+l>r&&h>s+l,c=\"y\"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>e[this.floating?\"width\":\"height\"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&\"right\"===a||\"down\"===n?2:1:n&&(\"down\"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?\"right\"===n&&i||\"left\"===n&&!i:s&&(\"down\"===s&&t||\"up\"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?\"down\":\"up\")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?\"right\":\"left\")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+\"-item\",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?\"x\"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e(\"<\"+s+\">\",t.document[0]).addClass(i||t.currentItem[0].className+\" ui-sortable-placeholder\").removeClass(\"ui-sortable-helper\");return\"tbody\"===s?t._createTrPlaceholder(t.currentItem.find(\"tr\").eq(0),e(\"<tr>\",t.document[0]).appendTo(n)):\"tr\"===s?t._createTrPlaceholder(t.currentItem,n):\"img\"===s&&n.attr(\"src\",t.currentItem.attr(\"src\")),i||n.css(\"visibility\",\"hidden\"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css(\"paddingTop\")||0,10)-parseInt(t.currentItem.css(\"paddingBottom\")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css(\"paddingLeft\")||0,10)-parseInt(t.currentItem.css(\"paddingRight\")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e(\"<td> </td>\",s.document[0]).attr(\"colspan\",e(this).attr(\"colspan\")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger(\"out\",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger(\"over\",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?\"left\":\"top\",r=u?\"width\":\"height\",d=u?\"clientX\":\"clientY\",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?\"up\":\"down\"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger(\"over\",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger(\"change\",t,this._uiHash()),this.containers[p]._trigger(\"change\",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger(\"over\",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):\"clone\"===i.helper?this.currentItem.clone():this.currentItem;return s.parents(\"body\").length||e(\"parent\"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),\"left\"in t&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),(\"document\"===n.containment||\"window\"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s=\"hidden\"!==e(t).css(\"overflow\"),this.containment=[i.left+(parseInt(e(t).css(\"borderLeftWidth\"),10)||0)+(parseInt(e(t).css(\"paddingLeft\"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css(\"borderTopWidth\"),10)||0)+(parseInt(e(t).css(\"paddingTop\"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css(\"borderLeftWidth\"),10)||0)-(parseInt(e(t).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css(\"borderTopWidth\"),10)||0)-(parseInt(e(t).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s=\"absolute\"===t?1:-1,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)(\"auto\"===this._storedCSS[s]||\"static\"===this._storedCSS[s])&&(this._storedCSS[s]=\"\");this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger(\"receive\",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger(\"update\",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger(\"remove\",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger(\"receive\",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger(\"update\",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i(\"deactivate\",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i(\"out\",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,t||this._trigger(\"beforeStop\",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger(\"stop\",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget(\"ui.spinner\",{version:\"1.11.4\",defaultElement:\"<input>\",widgetEventPrefix:\"spin\",options:{culture:null,icons:{down:\"ui-icon-triangle-1-s\",up:\"ui-icon-triangle-1-n\"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption(\"max\",this.options.max),this._setOption(\"min\",this.options.min),this._setOption(\"step\",this.options.step),\"\"!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each([\"min\",\"max\",\"step\"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:\"_stop\",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger(\"change\",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},\"mousedown .ui-spinner-button\":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t)},\"mouseup .ui-spinner-button\":\"_stop\",\"mouseenter .ui-spinner-button\":function(t){return e(t.currentTarget).hasClass(\"ui-state-active\")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t),void 0):void 0},\"mouseleave .ui-spinner-button\":\"_stop\"},_draw:function(){var e=this.uiSpinner=this.element.addClass(\"ui-spinner-input\").attr(\"autocomplete\",\"off\").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr(\"role\",\"spinbutton\"),this.buttons=e.find(\".ui-spinner-button\").attr(\"tabIndex\",-1).button().removeClass(\"ui-corner-all\"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return\"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>\"},_buttonHtml:function(){return\"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon \"+this.options.icons.up+\"'>▲</span>\"+\"</a>\"+\"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>\"+\"<span class='ui-icon \"+this.options.icons.down+\"'>▼</span>\"+\"</a>\"},_start:function(e){return this.spinning||this._trigger(\"start\",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger(\"spin\",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=\"\"+e,i=t.indexOf(\".\");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger(\"stop\",e))},_setOption:function(e,t){if(\"culture\"===e||\"numberFormat\"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}(\"max\"===e||\"min\"===e||\"step\"===e)&&\"string\"==typeof t&&(t=this._parse(t)),\"icons\"===e&&(this.buttons.first().find(\".ui-icon\").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(\".ui-icon\").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),\"disabled\"===e&&(this.widget().toggleClass(\"ui-state-disabled\",!!t),this.element.prop(\"disabled\",!!t),this.buttons.button(t?\"disable\":\"enable\"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return\"string\"==typeof e&&\"\"!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),\"\"===e||isNaN(e)?null:e},_format:function(e){return\"\"===e?\"\":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({\"aria-valuemin\":this.options.min,\"aria-valuemax\":this.options.max,\"aria-valuenow\":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;\"\"!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass(\"ui-spinner-input\").prop(\"disabled\",!1).removeAttr(\"autocomplete\").removeAttr(\"role\").removeAttr(\"aria-valuemin\").removeAttr(\"aria-valuemax\").removeAttr(\"aria-valuenow\"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget(\"ui.tabs\",{version:\"1.11.4\",delay:300,options:{active:null,collapsible:!1,event:\"click\",heightStyle:\"content\",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,\"\"),s=location.href.replace(e,\"\");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass(\"ui-tabs ui-widget ui-widget-content ui-corner-all\").toggleClass(\"ui-tabs-collapsible\",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(\".ui-state-disabled\"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr(\"aria-controls\")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(\".ui-tabs-active\"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest(\"li\"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr(\"aria-selected\",\"false\"),this.tabs.eq(s).attr(\"aria-selected\",\"true\"),this.activating=this._delay(function(){this.option(\"active\",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return\"active\"===e?(this._activate(t),void 0):\"disabled\"===e?(this._setupDisabled(t),void 0):(this._super(e,t),\"collapsible\"===e&&(this.element.toggleClass(\"ui-tabs-collapsible\",t),t||this.options.active!==!1||this._activate(0)),\"event\"===e&&this._setupEvents(t),\"heightStyle\"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g,\"\\\\$&\"):\"\"},refresh:function(){var t=this.options,i=this.tablist.children(\":has(a[href])\");t.disabled=e.map(i.filter(\".ui-state-disabled\"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({\"aria-hidden\":\"true\"}),this.active.length?(this.active.addClass(\"ui-tabs-active ui-state-active\").attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}),this._getPanelForTab(this.active).show().attr({\"aria-hidden\":\"false\"})):this.tabs.eq(0).attr(\"tabIndex\",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;\nthis.tablist=this._getList().addClass(\"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\").attr(\"role\",\"tablist\").delegate(\"> li\",\"mousedown\"+this.eventNamespace,function(t){e(this).is(\".ui-state-disabled\")&&t.preventDefault()}).delegate(\".ui-tabs-anchor\",\"focus\"+this.eventNamespace,function(){e(this).closest(\"li\").is(\".ui-state-disabled\")&&this.blur()}),this.tabs=this.tablist.find(\"> li:has(a[href])\").addClass(\"ui-state-default ui-corner-top\").attr({role:\"tab\",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e(\"a\",this)[0]}).addClass(\"ui-tabs-anchor\").attr({role:\"presentation\",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr(\"id\"),h=e(s).closest(\"li\"),l=h.attr(\"aria-controls\");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr(\"aria-controls\")||e({}).uniqueId()[0].id,n=\"#\"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr(\"aria-live\",\"polite\")),a.length&&(t.panels=t.panels.add(a)),l&&h.data(\"ui-tabs-aria-controls\",l),h.attr({\"aria-controls\":o,\"aria-labelledby\":r}),a.attr(\"aria-labelledby\",r)}),this.panels.addClass(\"ui-tabs-panel ui-widget-content ui-corner-bottom\").attr(\"role\",\"tabpanel\"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find(\"ol,ul\").eq(0)},_createPanel:function(t){return e(\"<div>\").attr(\"id\",t).addClass(\"ui-tabs-panel ui-widget-content ui-corner-bottom\").data(\"ui-tabs-destroy\",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass(\"ui-state-disabled\").attr(\"aria-disabled\",\"true\"):e(i).removeClass(\"ui-state-disabled\").removeAttr(\"aria-disabled\");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(\" \"),function(e,t){i[t]=\"_eventHandler\"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:\"_tabKeydown\"}),this._on(this.panels,{keydown:\"_panelKeydown\"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();\"fill\"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(\":visible\").each(function(){var t=e(this),s=t.css(\"position\");\"absolute\"!==s&&\"fixed\"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height(\"\").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest(\"li\"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass(\"ui-state-disabled\")||a.hasClass(\"ui-tabs-loading\")||this.running||o&&!i.collapsible||this._trigger(\"beforeActivate\",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error(\"jQuery UI Tabs: Mismatching fragment identifier.\"),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger(\"activate\",t,i)}function n(){i.newTab.closest(\"li\").addClass(\"ui-tabs-active ui-state-active\"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest(\"li\").removeClass(\"ui-tabs-active ui-state-active\"),n()}):(i.oldTab.closest(\"li\").removeClass(\"ui-tabs-active ui-state-active\"),r.hide(),n()),r.attr(\"aria-hidden\",\"true\"),i.oldTab.attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),o.length&&r.length?i.oldTab.attr(\"tabIndex\",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr(\"tabIndex\")}).attr(\"tabIndex\",-1),o.attr(\"aria-hidden\",\"false\"),i.newTab.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(\".ui-tabs-anchor\")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return\"string\"==typeof e&&(e=this.anchors.index(this.anchors.filter(\"[href$='\"+e+\"']\"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass(\"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible\"),this.tablist.removeClass(\"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\").removeAttr(\"role\"),this.anchors.removeClass(\"ui-tabs-anchor\").removeAttr(\"role\").removeAttr(\"tabIndex\").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,\"ui-tabs-destroy\")?e(this).remove():e(this).removeClass(\"ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel\").removeAttr(\"tabIndex\").removeAttr(\"aria-live\").removeAttr(\"aria-busy\").removeAttr(\"aria-selected\").removeAttr(\"aria-labelledby\").removeAttr(\"aria-hidden\").removeAttr(\"aria-expanded\").removeAttr(\"role\")}),this.tabs.each(function(){var t=e(this),i=t.data(\"ui-tabs-aria-controls\");i?t.attr(\"aria-controls\",i).removeData(\"ui-tabs-aria-controls\"):t.removeAttr(\"aria-controls\")}),this.panels.show(),\"content\"!==this.options.heightStyle&&this.panels.css(\"height\",\"\")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(\".ui-tabs-anchor\"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){\"abort\"===t&&s.panels.stop(!1,!0),n.removeClass(\"ui-tabs-loading\"),o.removeAttr(\"aria-busy\"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&\"canceled\"!==this.xhr.statusText&&(n.addClass(\"ui-tabs-loading\"),o.attr(\"aria-busy\",\"true\"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger(\"load\",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr(\"href\"),beforeSend:function(t,a){return n._trigger(\"beforeLoad\",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr(\"aria-controls\");return this.element.find(this._sanitizeSelector(\"#\"+i))}}),e.widget(\"ui.tooltip\",{version:\"1.11.4\",options:{content:function(){var t=e(this).attr(\"title\")||\"\";return e(\"<a>\").text(t).html()},hide:!0,items:\"[title]:not([disabled])\",position:{my:\"left top+15\",at:\"left bottom\",collision:\"flipfit flip\"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/);s.push(i),t.data(\"ui-tooltip-id\",i).attr(\"aria-describedby\",e.trim(s.join(\" \")))},_removeDescribedBy:function(t){var i=t.data(\"ui-tooltip-id\"),s=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData(\"ui-tooltip-id\"),s=e.trim(s.join(\" \")),s?t.attr(\"aria-describedby\",s):t.removeAttr(\"aria-describedby\")},_create:function(){this._on({mouseover:\"open\",focusin:\"open\"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e(\"<div>\").attr({role:\"log\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).addClass(\"ui-helper-hidden-accessible\").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return\"disabled\"===t?(this[i?\"_disable\":\"_enable\"](),this.options[t]=i,void 0):(this._super(t,i),\"content\"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event(\"blur\");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is(\"[title]\")&&t.data(\"ui-tooltip-title\",t.attr(\"title\")).removeAttr(\"title\")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data(\"ui-tooltip-title\")&&t.attr(\"title\",t.data(\"ui-tooltip-title\"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data(\"ui-tooltip-id\")&&(s.attr(\"title\")&&s.data(\"ui-tooltip-title\",s.attr(\"title\")),s.data(\"ui-tooltip-open\",!0),t&&\"mouseover\"===t.type&&s.parents().each(function(){var t,s=e(this);s.data(\"ui-tooltip-open\")&&(t=e.Event(\"blur\"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr(\"title\")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr(\"title\")},s.attr(\"title\",\"\"))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return\"string\"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data(\"ui-tooltip-open\")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(\":hidden\")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(\".ui-tooltip-content\").html(s),void 0;i.is(\"[title]\")&&(t&&\"mouseover\"===t.type?i.attr(\"title\",\"\"):i.removeAttr(\"title\")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr(\"id\")),o.find(\".ui-tooltip-content\").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr(\"id\").find(\"[id]\").removeAttr(\"id\")):h=s,e(\"<div>\").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(\":visible\")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger(\"open\",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&\"mouseover\"!==t.type||(s.mouseleave=\"close\"),t&&\"focusin\"!==t.type||(s.focusout=\"close\"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data(\"ui-tooltip-title\")&&!n.attr(\"title\")&&n.attr(\"title\",n.data(\"ui-tooltip-title\")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData(\"ui-tooltip-open\"),this._off(n,\"mouseleave focusout keyup\"),n[0]!==this.element[0]&&this._off(n,\"remove\"),this._off(this.document,\"mousemove\"),t&&\"mouseleave\"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr(\"title\",i.title),delete s.parents[t]}),a.closing=!0,this._trigger(\"close\",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData(\"ui-tooltip-open\"),void 0)},_tooltip:function(t){var i=e(\"<div>\").attr(\"role\",\"tooltip\").addClass(\"ui-tooltip ui-widget ui-corner-all ui-widget-content \"+(this.options.tooltipClass||\"\")),s=i.uniqueId().attr(\"id\");return e(\"<div>\").addClass(\"ui-tooltip-content\").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data(\"ui-tooltip-id\");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr(\"id\")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event(\"blur\"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e(\"#\"+i).remove(),a.data(\"ui-tooltip-title\")&&(a.attr(\"title\")||a.attr(\"title\",a.data(\"ui-tooltip-title\")),a.removeData(\"ui-tooltip-title\"))}),this.liveRegion.remove()}})});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS11aS9qcXVlcnktdWkubWluLmpzPzI3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRCxhQUFhO0FBQUE7QUFBQTtBQUFBLCtHQUFxRSxjQUFjLGdCQUFnQixxQ0FBcUMsK05BQStOLGNBQWMsOEVBQThFLDBDQUEwQyxTQUFTLGNBQWMsWUFBWSwwQkFBMEIsRUFBRSxpSUFBaUksYUFBYSxTQUFTLGFBQWEsMGhCQUEwaEIscWpCQUFxakIsaUJBQWlCLCtDQUErQyxta0JBQW1rQiwyRUFBMkUseURBQXlELDhKQUE4SixjQUFjLHVGQUF1RiwwQ0FBMEMsNE9BQTRPLDRCQUE0QixhQUFhLHFZQUFxWSxnQkFBZ0IsY0FBYyx1Q0FBdUMsU0FBUyxjQUFjLGtCQUFrQix5QkFBeUIseUZBQXlGLGFBQWEsZ0JBQWdCLDBCQUEwQixvSkFBb0osZUFBZSx5QkFBeUIsMEhBQTBILGNBQWMsNEdBQTRHLFFBQVEsaUVBQWlFLHFCQUFxQixRQUFRLGtCQUFrQiw0QkFBNEIsaUNBQWlDLEdBQUcsNkJBQTZCLDRCQUE0QixzREFBc0QsR0FBRyx3QkFBd0IseURBQXlELG1CQUFtQixxQkFBcUIsa0JBQWtCLHVCQUF1Qix1QkFBdUIseUNBQXlDLHNCQUFzQixzQ0FBc0MsMEJBQTBCLHlFQUF5RSxvQkFBb0IsMkJBQTJCLDhJQUE4SSxJQUFJLHlFQUF5RSxpSEFBaUgsNEJBQTRCLCtEQUErRCw4QkFBOEIsRUFBRSwrQkFBK0Isd0VBQXdFLG1DQUFtQyxHQUFHLDBDQUEwQyxtRUFBbUUsdUZBQXVGLG1CQUFtQixrRUFBa0UsZ0dBQWdHLGtCQUFrQixxQkFBcUIsOENBQThDLFdBQVcsc0JBQXNCLDBCQUEwQixJQUFJLDJCQUEyQix5Q0FBeUMsZ0ZBQWdGLGtCQUFrQixzREFBc0QsbUJBQW1CLEdBQUcsOEJB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T0FBTyxJQUFJLElBQUksK0JBQStCLFdBQVcsT0FBTyw0Q0FBNEMsMkNBQTJDLHVCQUF1QixPQUFPLDZCQUE2QixpQ0FBaUMseURBQXlELHlCQUF5QiwwQkFBMEIsbUJBQW1CLGdDQUFnQywrQkFBK0IsbURBQW1ELDJEQUEyRCx5REFBeUQsK0JBQStCLG9EQUFvRCxpRkFBaUYsZ0NBQWdDLCtGQUErRiwwSUFBMEksb0JBQW9CLFVBQVUsZ0NBQWdDLGtCQUFrQixnQkFBZ0IseUVBQXlFLCtEQUErRCwwRUFBMEUsMEJBQTBCLFdBQVcsbUpBQW1KLDRCQUE0QixVQUFVLHFCQUFxQixXQUFXLG1DQUFtQyxzQkFBc0Isb0RBQW9ELGtFQUFrRSxjQUFjLGdGQUFnRixFQUFFLG9CQUFvQixnRUFBZ0UsY0FBYyx1RUFBdUUsRUFBRSxrQkFBa0Isb0VBQW9FLG1MQUFtTCxnQkFBZ0IsOElBQThJLG1DQUFtQyxxQkFBcUIsNkRBQTZELDhCQUE4QixvREFBb0Qsc0VBQXNFLG9CQUFvQiw2REFBNkQsRUFBRSwrQkFBK0IsdUJBQXVCLGNBQWMsc0NBQXNDLHlCQUF5Qix3QkFBd0IsTUFBTSwrRUFBK0UsOFpBQThaLFlBQVksNkJBQTZCLEtBQUsseUpBQXlKLDZDQUE2Qyx5Q0FBeUMsVUFBVSxHQUFHLHNDQUFzQyxPQUFPLGtCQUFrQixvQ0FBb0MsaUJBQWlCLHlDQUF5Qyw2Q0FBNkMsMkNBQTJDLCtHQUErRyxtQkFBbUIsaUVBQWlFLHVQQUF1UCwwQkFBMEIsME5BQTBOLHVEQUF1RCx3Q0FBd0MsVUFBVSw2RUFBNkUsc0JBQXNCLG9LQUFvSyxpSEFBaUgscUJBQXFCLG1CQUFtQiw4QkFBOEIsK0JBQStCLDRCQUE0Qiw4Q0FBOEMscUJBQXFCLFdBQVcsbUNBQW1DLGtDQUFrQyx5TEFBeUwsNEJBQTRCLEVBQUUiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgalF1ZXJ5IFVJIC0gdjEuMTEuNCAtIDIwMTUtMDMtMTFcbiogaHR0cDovL2pxdWVyeXVpLmNvbVxuKiBJbmNsdWRlczogY29yZS5qcywgd2lkZ2V0LmpzLCBtb3VzZS5qcywgcG9zaXRpb24uanMsIGFjY29yZGlvbi5qcywgYXV0b2NvbXBsZXRlLmpzLCBidXR0b24uanMsIGRhdGVwaWNrZXIuanMsIGRpYWxvZy5qcywgZHJhZ2dhYmxlLmpzLCBkcm9wcGFibGUuanMsIGVmZmVjdC5qcywgZWZmZWN0LWJsaW5kLmpzLCBlZmZlY3QtYm91bmNlLmpzLCBlZmZlY3QtY2xpcC5qcywgZWZmZWN0LWRyb3AuanMsIGVmZmVjdC1leHBsb2RlLmpzLCBlZmZlY3QtZmFkZS5qcywgZWZmZWN0LWZvbGQuanMsIGVmZmVjdC1oaWdobGlnaHQuanMsIGVmZmVjdC1wdWZmLmpzLCBlZmZlY3QtcHVsc2F0ZS5qcywgZWZmZWN0LXNjYWxlLmpzLCBlZmZlY3Qtc2hha2UuanMsIGVmZmVjdC1zaXplLmpzLCBlZmZlY3Qtc2xpZGUuanMsIGVmZmVjdC10cmFuc2Zlci5qcywgbWVudS5qcywgcHJvZ3Jlc3NiYXIuanMsIHJlc2l6YWJsZS5qcywgc2VsZWN0YWJsZS5qcywgc2VsZWN0bWVudS5qcywgc2xpZGVyLmpzLCBzb3J0YWJsZS5qcywgc3Bpbm5lci5qcywgdGFicy5qcywgdG9vbHRpcC5qc1xuKiBDb3B5cmlnaHQgMjAxNSBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQgKi9cblxuKGZ1bmN0aW9uKGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGUpOmUoalF1ZXJ5KX0pKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxzKXt2YXIgbixhLG8scj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJhcmVhXCI9PT1yPyhuPXQucGFyZW50Tm9kZSxhPW4ubmFtZSx0LmhyZWYmJmEmJlwibWFwXCI9PT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/KG89ZShcImltZ1t1c2VtYXA9JyNcIithK1wiJ11cIilbMF0sISFvJiZpKG8pKTohMSk6KC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3Qocik/IXQuZGlzYWJsZWQ6XCJhXCI9PT1yP3QuaHJlZnx8czpzKSYmaSh0KX1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpJiYhZSh0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVyblwiaGlkZGVuXCI9PT1lLmNzcyh0aGlzLFwidmlzaWJpbGl0eVwiKX0pLmxlbmd0aH1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdCxpO2UubGVuZ3RoJiZlWzBdIT09ZG9jdW1lbnQ7KXtpZih0PWUuY3NzKFwicG9zaXRpb25cIiksKFwiYWJzb2x1dGVcIj09PXR8fFwicmVsYXRpdmVcIj09PXR8fFwiZml4ZWRcIj09PXQpJiYoaT1wYXJzZUludChlLmNzcyhcInpJbmRleFwiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7ZT1lLnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIG4oKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPVwidWktZGF0ZXBpY2tlci1kaXZcIix0aGlzLl9pbmxpbmVDbGFzcz1cInVpLWRhdGVwaWNrZXItaW5saW5lXCIsdGhpcy5fYXBwZW5kQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWFwcGVuZFwiLHRoaXMuX3RyaWdnZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItdHJpZ2dlclwiLHRoaXMuX2RpYWxvZ0NsYXNzPVwidWktZGF0ZXBpY2tlci1kaWFsb2dcIix0aGlzLl9kaXNhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZVwiLHRoaXMuX2N1cnJlbnRDbGFzcz1cInVpLWRhdGVwaWNrZXItY3VycmVudC1kYXlcIix0aGlzLl9kYXlPdmVyQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsW1wiXCJdPXtjbG9zZVRleHQ6XCJEb25lXCIscHJldlRleHQ6XCJQcmV2XCIsbmV4dFRleHQ6XCJOZXh0XCIsY3VycmVudFRleHQ6XCJUb2RheVwiLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLHdlZWtIZWFkZXI6XCJXa1wiLGRhdGVGb3JtYXQ6XCJtbS9kZC95eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6XCJcIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjpcImZvY3VzXCIsc2hvd0FuaW06XCJmYWRlSW5cIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6XCJcIixidXR0b25UZXh0OlwiLi4uXCIsYnV0dG9uSW1hZ2U6XCJcIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOlwiYy0xMDpjKzEwXCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6XCIrMTBcIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOlwiZmFzdFwiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDpcIlwiLGFsdEZvcm1hdDpcIlwiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFtcIlwiXSksdGhpcy5yZWdpb25hbC5lbj1lLmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsW1wiZW4tVVNcIl09ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1hKGUoXCI8ZGl2IGlkPSdcIit0aGlzLl9tYWluRGl2SWQrXCInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKX1mdW5jdGlvbiBhKHQpe3ZhciBpPVwiYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhXCI7cmV0dXJuIHQuZGVsZWdhdGUoaSxcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmZSh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKX0pLmRlbGVnYXRlKGksXCJtb3VzZW92ZXJcIixvKX1mdW5jdGlvbiBvKCl7ZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih2LmlubGluZT92LmRwRGl2LnBhcmVudCgpWzBdOnYuaW5wdXRbMF0pfHwoZSh0aGlzKS5wYXJlbnRzKFwiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXJcIikuZmluZChcImFcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSxlKHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZlKHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmZSh0aGlzKS5hZGRDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKSl9ZnVuY3Rpb24gcih0LGkpe2UuZXh0ZW5kKHQsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKHRbc109aVtzXSk7cmV0dXJuIHR9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQudmFsKCk7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLHQhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIil9fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjpcIjEuMTEuNFwiLGtleUNvZGU6e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jc3MoXCJwb3NpdGlvblwiKSxzPVwiYWJzb2x1dGVcIj09PWksbj10Py8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLGE9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gcyYmXCJzdGF0aWNcIj09PXQuY3NzKFwicG9zaXRpb25cIik/ITE6bi50ZXN0KHQuY3NzKFwib3ZlcmZsb3dcIikrdC5jc3MoXCJvdmVyZmxvdy15XCIpK3QuY3NzKFwib3ZlcmZsb3cteFwiKSl9KS5lcSgwKTtyZXR1cm5cImZpeGVkXCIhPT1pJiZhLmxlbmd0aD9hOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9XCJ1aS1pZC1cIisgKytlKX0pfX0oKSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsvXnVpLWlkLVxcZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoXCJpZFwiKX0pfX0pLGUuZXh0ZW5kKGUuZXhwcltcIjpcIl0se2RhdGE6ZS5leHByLmNyZWF0ZVBzZXVkbz9lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIWUuZGF0YShpLHQpfX0pOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4hIWUuZGF0YSh0LHNbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oaSl7cmV0dXJuIHQoaSwhaXNOYU4oZS5hdHRyKGksXCJ0YWJpbmRleFwiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSxcInRhYmluZGV4XCIpLG49aXNOYU4ocyk7cmV0dXJuKG58fHM+PTApJiZ0KGksIW4pfX0pLGUoXCI8YT5cIikub3V0ZXJXaWR0aCgxKS5qcXVlcnl8fGUuZWFjaChbXCJXaWR0aFwiLFwiSGVpZ2h0XCJdLGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gcyh0LGkscyxhKXtyZXR1cm4gZS5lYWNoKG4sZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KGUuY3NzKHQsXCJwYWRkaW5nXCIrdGhpcykpfHwwLHMmJihpLT1wYXJzZUZsb2F0KGUuY3NzKHQsXCJib3JkZXJcIit0aGlzK1wiV2lkdGhcIikpfHwwKSxhJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LFwibWFyZ2luXCIrdGhpcykpfHwwKX0pLGl9dmFyIG49XCJXaWR0aFwiPT09aT9bXCJMZWZ0XCIsXCJSaWdodFwiXTpbXCJUb3BcIixcIkJvdHRvbVwiXSxhPWkudG9Mb3dlckNhc2UoKSxvPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bXCJpbm5lclwiK2ldPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P29bXCJpbm5lclwiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCkrXCJweFwiKX0pfSxlLmZuW1wib3V0ZXJcIitpXT1mdW5jdGlvbih0LG4pe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0P29bXCJvdXRlclwiK2ldLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhhLHModGhpcyx0LCEwLG4pK1wicHhcIil9KX19KSxlLmZuLmFkZEJhY2t8fChlLmZuLmFkZEJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfSksZShcIjxhPlwiKS5kYXRhKFwiYS1iXCIsXCJhXCIpLnJlbW92ZURhdGEoXCJhLWJcIikuZGF0YShcImEtYlwiKSYmKGUuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jYWxsKHRoaXMsZS5jYW1lbENhc2UoaSkpOnQuY2FsbCh0aGlzKX19KGUuZm4ucmVtb3ZlRGF0YSkpLGUudWkuaWU9ISEvbXNpZSBbXFx3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBpP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UodCkuZm9jdXMoKSxzJiZzLmNhbGwodCl9LGkpfSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShlLmZuLmZvY3VzKSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpP1wic2VsZWN0c3RhcnRcIjpcIm1vdXNlZG93blwiO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpbmQoZStcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZChcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIpfSx6SW5kZXg6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClyZXR1cm4gdGhpcy5jc3MoXCJ6SW5kZXhcIix0KTtpZih0aGlzLmxlbmd0aClmb3IodmFyIGkscyxuPWUodGhpc1swXSk7bi5sZW5ndGgmJm5bMF0hPT1kb2N1bWVudDspe2lmKGk9bi5jc3MoXCJwb3NpdGlvblwiKSwoXCJhYnNvbHV0ZVwiPT09aXx8XCJyZWxhdGl2ZVwiPT09aXx8XCJmaXhlZFwiPT09aSkmJihzPXBhcnNlSW50KG4uY3NzKFwiekluZGV4XCIpLDEwKSwhaXNOYU4ocykmJjAhPT1zKSlyZXR1cm4gcztuPW4ucGFyZW50KCl9cmV0dXJuIDB9fSksZS51aS5wbHVnaW49e2FkZDpmdW5jdGlvbih0LGkscyl7dmFyIG4sYT1lLnVpW3RdLnByb3RvdHlwZTtmb3IobiBpbiBzKWEucGx1Z2luc1tuXT1hLnBsdWdpbnNbbl18fFtdLGEucGx1Z2luc1tuXS5wdXNoKFtpLHNbbl1dKX0sY2FsbDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgbixhPWUucGx1Z2luc1t0XTtpZihhJiYoc3x8ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUmJjExIT09ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUubm9kZVR5cGUpKWZvcihuPTA7YS5sZW5ndGg+bjtuKyspZS5vcHRpb25zW2Fbbl1bMF1dJiZhW25dWzFdLmFwcGx5KGUuZWxlbWVudCxpKX19O3ZhciBsPTAsdT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZS5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBzLG4sYTtmb3IoYT0wO251bGwhPShuPWlbYV0pO2ErKyl0cnl7cz1lLl9kYXRhKG4sXCJldmVudHNcIikscyYmcy5yZW1vdmUmJmUobikudHJpZ2dlckhhbmRsZXIoXCJyZW1vdmVcIil9Y2F0Y2gobyl7fXQoaSl9fShlLmNsZWFuRGF0YSksZS53aWRnZXQ9ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGg9e30sbD10LnNwbGl0KFwiLlwiKVswXTtyZXR1cm4gdD10LnNwbGl0KFwiLlwiKVsxXSxuPWwrXCItXCIrdCxzfHwocz1pLGk9ZS5XaWRnZXQpLGUuZXhwcltcIjpcIl1bbi50b0xvd2VyQ2FzZSgpXT1mdW5jdGlvbih0KXtyZXR1cm4hIWUuZGF0YSh0LG4pfSxlW2xdPWVbbF18fHt9LGE9ZVtsXVt0XSxvPWVbbF1bdF09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY3JlYXRlV2lkZ2V0Pyhhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoZSx0KSx2b2lkIDApOm5ldyBvKGUsdCl9LGUuZXh0ZW5kKG8sYSx7dmVyc2lvbjpzLnZlcnNpb24sX3Byb3RvOmUuZXh0ZW5kKHt9LHMpLF9jaGlsZENvbnN0cnVjdG9yczpbXX0pLHI9bmV3IGksci5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSxyLm9wdGlvbnMpLGUuZWFjaChzLGZ1bmN0aW9uKHQscyl7cmV0dXJuIGUuaXNGdW5jdGlvbihzKT8oaFt0XT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbj1mdW5jdGlvbihlKXtyZXR1cm4gaS5wcm90b3R5cGVbdF0uYXBwbHkodGhpcyxlKX07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9zdXBlcixhPXRoaXMuX3N1cGVyQXBwbHk7cmV0dXJuIHRoaXMuX3N1cGVyPWUsdGhpcy5fc3VwZXJBcHBseT1uLHQ9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc3VwZXI9aSx0aGlzLl9zdXBlckFwcGx5PWEsdH19KCksdm9pZCAwKTooaFt0XT1zLHZvaWQgMCl9KSxvLnByb3RvdHlwZT1lLndpZGdldC5leHRlbmQocix7d2lkZ2V0RXZlbnRQcmVmaXg6YT9yLndpZGdldEV2ZW50UHJlZml4fHx0OnR9LGgse2NvbnN0cnVjdG9yOm8sbmFtZXNwYWNlOmwsd2lkZ2V0TmFtZTp0LHdpZGdldEZ1bGxOYW1lOm59KSxhPyhlLmVhY2goYS5fY2hpbGRDb25zdHJ1Y3RvcnMsZnVuY3Rpb24odCxpKXt2YXIgcz1pLnByb3RvdHlwZTtlLndpZGdldChzLm5hbWVzcGFjZStcIi5cIitzLndpZGdldE5hbWUsbyxpLl9wcm90byl9KSxkZWxldGUgYS5fY2hpbGRDb25zdHJ1Y3RvcnMpOmkuX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gobyksZS53aWRnZXQuYnJpZGdlKHQsbyksb30sZS53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzLG49dS5jYWxsKGFyZ3VtZW50cywxKSxhPTAsbz1uLmxlbmd0aDtvPmE7YSsrKWZvcihpIGluIG5bYV0pcz1uW2FdW2ldLG5bYV0uaGFzT3duUHJvcGVydHkoaSkmJnZvaWQgMCE9PXMmJih0W2ldPWUuaXNQbGFpbk9iamVjdChzKT9lLmlzUGxhaW5PYmplY3QodFtpXSk/ZS53aWRnZXQuZXh0ZW5kKHt9LHRbaV0scyk6ZS53aWRnZXQuZXh0ZW5kKHt9LHMpOnMpO3JldHVybiB0fSxlLndpZGdldC5icmlkZ2U9ZnVuY3Rpb24odCxpKXt2YXIgcz1pLnByb3RvdHlwZS53aWRnZXRGdWxsTmFtZXx8dDtlLmZuW3RdPWZ1bmN0aW9uKG4pe3ZhciBhPVwic3RyaW5nXCI9PXR5cGVvZiBuLG89dS5jYWxsKGFyZ3VtZW50cywxKSxyPXRoaXM7cmV0dXJuIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGksYT1lLmRhdGEodGhpcyxzKTtyZXR1cm5cImluc3RhbmNlXCI9PT1uPyhyPWEsITEpOmE/ZS5pc0Z1bmN0aW9uKGFbbl0pJiZcIl9cIiE9PW4uY2hhckF0KDApPyhpPWFbbl0uYXBwbHkoYSxvKSxpIT09YSYmdm9pZCAwIT09aT8ocj1pJiZpLmpxdWVyeT9yLnB1c2hTdGFjayhpLmdldCgpKTppLCExKTp2b2lkIDApOmUuZXJyb3IoXCJubyBzdWNoIG1ldGhvZCAnXCIrbitcIicgZm9yIFwiK3QrXCIgd2lkZ2V0IGluc3RhbmNlXCIpOmUuZXJyb3IoXCJjYW5ub3QgY2FsbCBtZXRob2RzIG9uIFwiK3QrXCIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb247IFwiK1wiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICdcIituK1wiJ1wiKX0pOihvLmxlbmd0aCYmKG49ZS53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdChvKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLHMpO3Q/KHQub3B0aW9uKG58fHt9KSx0Ll9pbml0JiZ0Ll9pbml0KCkpOmUuZGF0YSh0aGlzLHMsbmV3IGkobix0aGlzKSl9KSkscn19LGUuV2lkZ2V0PWZ1bmN0aW9uKCl7fSxlLldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sZS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOlwid2lkZ2V0XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7ZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24odCxpKXtpPWUoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PWUoaSksdGhpcy51dWlkPWwrKyx0aGlzLmV2ZW50TmFtZXNwYWNlPVwiLlwiK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5iaW5kaW5ncz1lKCksdGhpcy5ob3ZlcmFibGU9ZSgpLHRoaXMuZm9jdXNhYmxlPWUoKSxpIT09dGhpcyYmKGUuZGF0YShpLHRoaXMud2lkZ2V0RnVsbE5hbWUsdGhpcyksdGhpcy5fb24oITAsdGhpcy5lbGVtZW50LHtyZW1vdmU6ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1pJiZ0aGlzLmRlc3Ryb3koKX19KSx0aGlzLmRvY3VtZW50PWUoaS5zdHlsZT9pLm93bmVyRG9jdW1lbnQ6aS5kb2N1bWVudHx8aSksdGhpcy53aW5kb3c9ZSh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3fHx0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdykpLHRoaXMub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSx0KSx0aGlzLl9jcmVhdGUoKSx0aGlzLl90cmlnZ2VyKFwiY3JlYXRlXCIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczplLm5vb3AsX2dldENyZWF0ZUV2ZW50RGF0YTplLm5vb3AsX2NyZWF0ZTplLm5vb3AsX2luaXQ6ZS5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95KCksdGhpcy5lbGVtZW50LnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWQgXCIrXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIil9LF9kZXN0cm95OmUubm9vcCx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxvcHRpb246ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz10O2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihvPXt9LHM9dC5zcGxpdChcIi5cIiksdD1zLnNoaWZ0KCkscy5sZW5ndGgpe2ZvcihuPW9bdF09ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1t0XSksYT0wO3MubGVuZ3RoLTE+YTthKyspbltzW2FdXT1uW3NbYV1dfHx7fSxuPW5bc1thXV07aWYodD1zLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1uW3RdP251bGw6blt0XTtuW3RdPWl9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW3RdP251bGw6dGhpcy5vcHRpb25zW3RdO29bdF09aX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhvKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXRoaXMuX3NldE9wdGlvbih0LGVbdF0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LFwiZGlzYWJsZWRcIj09PWUmJih0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWRcIiwhIXQpLHQmJih0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIikpKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITF9KX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMH0pfSxfb246ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9dGhpcztcImJvb2xlYW5cIiE9dHlwZW9mIHQmJihzPWksaT10LHQ9ITEpLHM/KGk9bj1lKGkpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQoaSkpOihzPWksaT10aGlzLmVsZW1lbnQsbj10aGlzLndpZGdldCgpKSxlLmVhY2gocyxmdW5jdGlvbihzLG8pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gdHx8YS5vcHRpb25zLmRpc2FibGVkIT09ITAmJiFlKHRoaXMpLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIik/KFwic3RyaW5nXCI9PXR5cGVvZiBvP2Fbb106bykuYXBwbHkoYSxhcmd1bWVudHMpOnZvaWQgMH1cInN0cmluZ1wiIT10eXBlb2YgbyYmKHIuZ3VpZD1vLmd1aWQ9by5ndWlkfHxyLmd1aWR8fGUuZ3VpZCsrKTt2YXIgaD1zLm1hdGNoKC9eKFtcXHc6LV0qKVxccyooLiopJC8pLGw9aFsxXSthLmV2ZW50TmFtZXNwYWNlLHU9aFsyXTt1P24uZGVsZWdhdGUodSxsLHIpOmkuYmluZChsLHIpfSl9LF9vZmY6ZnVuY3Rpb24odCxpKXtpPShpfHxcIlwiKS5zcGxpdChcIiBcIikuam9pbih0aGlzLmV2ZW50TmFtZXNwYWNlK1wiIFwiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLHQudW5iaW5kKGkpLnVuZGVsZWdhdGUoaSksdGhpcy5iaW5kaW5ncz1lKHRoaXMuYmluZGluZ3Mubm90KHQpLmdldCgpKSx0aGlzLmZvY3VzYWJsZT1lKHRoaXMuZm9jdXNhYmxlLm5vdCh0KS5nZXQoKSksdGhpcy5ob3ZlcmFibGU9ZSh0aGlzLmhvdmVyYWJsZS5ub3QodCkuZ2V0KCkpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKFwic3RyaW5nXCI9PXR5cGVvZiBlP3NbZV06ZSkuYXBwbHkocyxhcmd1bWVudHMpfXZhciBzPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQoaSx0fHwwKX0sX2hvdmVyYWJsZTpmdW5jdGlvbih0KXt0aGlzLmhvdmVyYWJsZT10aGlzLmhvdmVyYWJsZS5hZGQodCksdGhpcy5fb24odCx7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1mb2N1c1wiKX0sZm9jdXNvdXQ6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG89dGhpcy5vcHRpb25zW3RdO2lmKHM9c3x8e30saT1lLkV2ZW50KGkpLGkudHlwZT0odD09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/dDp0aGlzLndpZGdldEV2ZW50UHJlZml4K3QpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLGE9aS5vcmlnaW5hbEV2ZW50KWZvcihuIGluIGEpbiBpbiBpfHwoaVtuXT1hW25dKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxzKSwhKGUuaXNGdW5jdGlvbihvKSYmby5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2ldLmNvbmNhdChzKSk9PT0hMXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSxlLmVhY2goe3Nob3c6XCJmYWRlSW5cIixoaWRlOlwiZmFkZU91dFwifSxmdW5jdGlvbih0LGkpe2UuV2lkZ2V0LnByb3RvdHlwZVtcIl9cIit0XT1mdW5jdGlvbihzLG4sYSl7XCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBvLHI9bj9uPT09ITB8fFwibnVtYmVyXCI9PXR5cGVvZiBuP2k6bi5lZmZlY3R8fGk6dDtuPW58fHt9LFwibnVtYmVyXCI9PXR5cGVvZiBuJiYobj17ZHVyYXRpb246bn0pLG89IWUuaXNFbXB0eU9iamVjdChuKSxuLmNvbXBsZXRlPWEsbi5kZWxheSYmcy5kZWxheShuLmRlbGF5KSxvJiZlLmVmZmVjdHMmJmUuZWZmZWN0cy5lZmZlY3Rbcl0/c1t0XShuKTpyIT09dCYmc1tyXT9zW3JdKG4uZHVyYXRpb24sbi5lYXNpbmcsYSk6cy5xdWV1ZShmdW5jdGlvbihpKXtlKHRoaXMpW3RdKCksYSYmYS5jYWxsKHNbMF0pLGkoKX0pfX0pLGUud2lkZ2V0O3ZhciBkPSExO2UoZG9jdW1lbnQpLm1vdXNldXAoZnVuY3Rpb24oKXtkPSExfSksZS53aWRnZXQoXCJ1aS5tb3VzZVwiLHt2ZXJzaW9uOlwiMS4xMS40XCIsb3B0aW9uczp7Y2FuY2VsOlwiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb25cIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxlbWVudC5iaW5kKFwibW91c2Vkb3duLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZChcImNsaWNrLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihpKXtyZXR1cm4hMD09PWUuZGF0YShpLnRhcmdldCx0LndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIik/KGUucmVtb3ZlRGF0YShpLnRhcmdldCx0LndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMSk6dm9pZCAwfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZChcIi5cIit0aGlzLndpZGdldE5hbWUpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlJiZ0aGlzLmRvY3VtZW50LnVuYmluZChcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZChcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIWQpe3RoaXMuX21vdXNlTW92ZWQ9ITEsdGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKHQpLHRoaXMuX21vdXNlRG93bkV2ZW50PXQ7dmFyIGk9dGhpcyxzPTE9PT10LndoaWNoLG49XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5jYW5jZWwmJnQudGFyZ2V0Lm5vZGVOYW1lP2UodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLmNhbmNlbCkubGVuZ3RoOiExO3JldHVybiBzJiYhbiYmdGhpcy5fbW91c2VDYXB0dXJlKHQpPyh0aGlzLm1vdXNlRGVsYXlNZXQ9IXRoaXMub3B0aW9ucy5kZWxheSx0aGlzLm1vdXNlRGVsYXlNZXR8fCh0aGlzLl9tb3VzZURlbGF5VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2kubW91c2VEZWxheU1ldD0hMH0sdGhpcy5vcHRpb25zLmRlbGF5KSksdGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHQpIT09ITEsIXRoaXMuX21vdXNlU3RhcnRlZCk/KHQucHJldmVudERlZmF1bHQoKSwhMCk6KCEwPT09ZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSYmZS5yZW1vdmVEYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaS5fbW91c2VNb3ZlKGUpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlVXAoZSl9LHRoaXMuZG9jdW1lbnQuYmluZChcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHQucHJldmVudERlZmF1bHQoKSxkPSEwLCEwKSk6ITB9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21vdXNlTW92ZWQpe2lmKGUudWkuaWUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PmRvY3VtZW50LmRvY3VtZW50TW9kZSkmJiF0LmJ1dHRvbilyZXR1cm4gdGhpcy5fbW91c2VVcCh0KTtpZighdC53aGljaClyZXR1cm4gdGhpcy5fbW91c2VVcCh0KX1yZXR1cm4odC53aGljaHx8dC5idXR0b24pJiYodGhpcy5fbW91c2VNb3ZlZD0hMCksdGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQudW5iaW5kKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKFwibW91c2V1cC5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEsdC50YXJnZXQ9PT10aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQmJmUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSxkPSExLCExfSxfbW91c2VEaXN0YW5jZU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtZS5wYWdlWCksTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVktZS5wYWdlWSkpPj10aGlzLm9wdGlvbnMuZGlzdGFuY2V9LF9tb3VzZURlbGF5TWV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oKXt9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0LGkpe3JldHVybltwYXJzZUZsb2F0KGVbMF0pKihwLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VGbG9hdChlWzFdKSoocC50ZXN0KGVbMV0pP2kvMTAwOjEpXX1mdW5jdGlvbiBpKHQsaSl7cmV0dXJuIHBhcnNlSW50KGUuY3NzKHQsaSksMTApfHwwfWZ1bmN0aW9uIHModCl7dmFyIGk9dFswXTtyZXR1cm4gOT09PWkubm9kZVR5cGU/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDowLGxlZnQ6MH19OmUuaXNXaW5kb3coaSk/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDp0LnNjcm9sbFRvcCgpLGxlZnQ6dC5zY3JvbGxMZWZ0KCl9fTppLnByZXZlbnREZWZhdWx0P3t3aWR0aDowLGhlaWdodDowLG9mZnNldDp7dG9wOmkucGFnZVksbGVmdDppLnBhZ2VYfX06e3dpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksb2Zmc2V0OnQub2Zmc2V0KCl9fWUudWk9ZS51aXx8e307dmFyIG4sYSxvPU1hdGgubWF4LHI9TWF0aC5hYnMsaD1NYXRoLnJvdW5kLGw9L2xlZnR8Y2VudGVyfHJpZ2h0Lyx1PS90b3B8Y2VudGVyfGJvdHRvbS8sZD0vW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLGM9L15cXHcrLyxwPS8lJC8sZj1lLmZuLnBvc2l0aW9uO2UucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgdCxpLHM9ZShcIjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Jz48ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiKSxhPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZShcImJvZHlcIikuYXBwZW5kKHMpLHQ9YS5vZmZzZXRXaWR0aCxzLmNzcyhcIm92ZXJmbG93XCIsXCJzY3JvbGxcIiksaT1hLm9mZnNldFdpZHRoLHQ9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49dC1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPXQuaXNXaW5kb3d8fHQuaXNEb2N1bWVudD9cIlwiOnQuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy14XCIpLHM9dC5pc1dpbmRvd3x8dC5pc0RvY3VtZW50P1wiXCI6dC5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXlcIiksbj1cInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pJiZ0LndpZHRoPHQuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxhPVwic2Nyb2xsXCI9PT1zfHxcImF1dG9cIj09PXMmJnQuaGVpZ2h0PHQuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ7cmV0dXJue3dpZHRoOmE/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjAsaGVpZ2h0Om4/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjB9fSxnZXRXaXRoaW5JbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPWUodHx8d2luZG93KSxzPWUuaXNXaW5kb3coaVswXSksbj0hIWlbMF0mJjk9PT1pWzBdLm5vZGVUeXBlO3JldHVybntlbGVtZW50OmksaXNXaW5kb3c6cyxpc0RvY3VtZW50Om4sb2Zmc2V0Omkub2Zmc2V0KCl8fHtsZWZ0OjAsdG9wOjB9LHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6c3x8bj9pLndpZHRoKCk6aS5vdXRlcldpZHRoKCksaGVpZ2h0OnN8fG4/aS5oZWlnaHQoKTppLm91dGVySGVpZ2h0KCl9fX0sZS5mbi5wb3NpdGlvbj1mdW5jdGlvbihuKXtpZighbnx8IW4ub2YpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpO249ZS5leHRlbmQoe30sbik7dmFyIHAsbSxnLHYseSxiLF89ZShuLm9mKSx4PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhuLndpdGhpbiksdz1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeCksaz0obi5jb2xsaXNpb258fFwiZmxpcFwiKS5zcGxpdChcIiBcIiksVD17fTtyZXR1cm4gYj1zKF8pLF9bMF0ucHJldmVudERlZmF1bHQmJihuLmF0PVwibGVmdCB0b3BcIiksbT1iLndpZHRoLGc9Yi5oZWlnaHQsdj1iLm9mZnNldCx5PWUuZXh0ZW5kKHt9LHYpLGUuZWFjaChbXCJteVwiLFwiYXRcIl0sZnVuY3Rpb24oKXt2YXIgZSx0LGk9KG5bdGhpc118fFwiXCIpLnNwbGl0KFwiIFwiKTsxPT09aS5sZW5ndGgmJihpPWwudGVzdChpWzBdKT9pLmNvbmNhdChbXCJjZW50ZXJcIl0pOnUudGVzdChpWzBdKT9bXCJjZW50ZXJcIl0uY29uY2F0KGkpOltcImNlbnRlclwiLFwiY2VudGVyXCJdKSxpWzBdPWwudGVzdChpWzBdKT9pWzBdOlwiY2VudGVyXCIsaVsxXT11LnRlc3QoaVsxXSk/aVsxXTpcImNlbnRlclwiLGU9ZC5leGVjKGlbMF0pLHQ9ZC5leGVjKGlbMV0pLFRbdGhpc109W2U/ZVswXTowLHQ/dFswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT1rLmxlbmd0aCYmKGtbMV09a1swXSksXCJyaWdodFwiPT09bi5hdFswXT95LmxlZnQrPW06XCJjZW50ZXJcIj09PW4uYXRbMF0mJih5LmxlZnQrPW0vMiksXCJib3R0b21cIj09PW4uYXRbMV0/eS50b3ArPWc6XCJjZW50ZXJcIj09PW4uYXRbMV0mJih5LnRvcCs9Zy8yKSxwPXQoVC5hdCxtLGcpLHkubGVmdCs9cFswXSx5LnRvcCs9cFsxXSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxsLHU9ZSh0aGlzKSxkPXUub3V0ZXJXaWR0aCgpLGM9dS5vdXRlckhlaWdodCgpLGY9aSh0aGlzLFwibWFyZ2luTGVmdFwiKSxiPWkodGhpcyxcIm1hcmdpblRvcFwiKSxEPWQrZitpKHRoaXMsXCJtYXJnaW5SaWdodFwiKSt3LndpZHRoLFM9YytiK2kodGhpcyxcIm1hcmdpbkJvdHRvbVwiKSt3LmhlaWdodCxNPWUuZXh0ZW5kKHt9LHkpLEM9dChULm15LHUub3V0ZXJXaWR0aCgpLHUub3V0ZXJIZWlnaHQoKSk7XCJyaWdodFwiPT09bi5teVswXT9NLmxlZnQtPWQ6XCJjZW50ZXJcIj09PW4ubXlbMF0mJihNLmxlZnQtPWQvMiksXCJib3R0b21cIj09PW4ubXlbMV0/TS50b3AtPWM6XCJjZW50ZXJcIj09PW4ubXlbMV0mJihNLnRvcC09Yy8yKSxNLmxlZnQrPUNbMF0sTS50b3ArPUNbMV0sYXx8KE0ubGVmdD1oKE0ubGVmdCksTS50b3A9aChNLnRvcCkpLHM9e21hcmdpbkxlZnQ6ZixtYXJnaW5Ub3A6Yn0sZS5lYWNoKFtcImxlZnRcIixcInRvcFwiXSxmdW5jdGlvbih0LGkpe2UudWkucG9zaXRpb25ba1t0XV0mJmUudWkucG9zaXRpb25ba1t0XV1baV0oTSx7dGFyZ2V0V2lkdGg6bSx0YXJnZXRIZWlnaHQ6ZyxlbGVtV2lkdGg6ZCxlbGVtSGVpZ2h0OmMsY29sbGlzaW9uUG9zaXRpb246cyxjb2xsaXNpb25XaWR0aDpELGNvbGxpc2lvbkhlaWdodDpTLG9mZnNldDpbcFswXStDWzBdLHBbMV0rQ1sxXV0sbXk6bi5teSxhdDpuLmF0LHdpdGhpbjp4LGVsZW06dX0pfSksbi51c2luZyYmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9di5sZWZ0LU0ubGVmdCxpPXQrbS1kLHM9di50b3AtTS50b3AsYT1zK2ctYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6XyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bSxoZWlnaHQ6Z30sZWxlbWVudDp7ZWxlbWVudDp1LGxlZnQ6TS5sZWZ0LHRvcDpNLnRvcCx3aWR0aDpkLGhlaWdodDpjfSxob3Jpem9udGFsOjA+aT9cImxlZnRcIjp0PjA/XCJyaWdodFwiOlwiY2VudGVyXCIsdmVydGljYWw6MD5hP1widG9wXCI6cz4wP1wiYm90dG9tXCI6XCJtaWRkbGVcIn07ZD5tJiZtPnIodCtpKSYmKGguaG9yaXpvbnRhbD1cImNlbnRlclwiKSxjPmcmJmc+cihzK2EpJiYoaC52ZXJ0aWNhbD1cIm1pZGRsZVwiKSxoLmltcG9ydGFudD1vKHIodCkscihpKSk+byhyKHMpLHIoYSkpP1wiaG9yaXpvbnRhbFwiOlwidmVydGljYWxcIixuLnVzaW5nLmNhbGwodGhpcyxlLGgpfSksdS5vZmZzZXQoZS5leHRlbmQoTSx7dXNpbmc6bH0pKX0pfSxlLnVpLnBvc2l0aW9uPXtmaXQ6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbExlZnQ6cy5vZmZzZXQubGVmdCxhPXMud2lkdGgscj1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGg9bi1yLGw9cit0LmNvbGxpc2lvbldpZHRoLWEtbjt0LmNvbGxpc2lvbldpZHRoPmE/aD4wJiYwPj1sPyhpPWUubGVmdCtoK3QuY29sbGlzaW9uV2lkdGgtYS1uLGUubGVmdCs9aC1pKTplLmxlZnQ9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbldpZHRoOm46aD4wP2UubGVmdCs9aDpsPjA/ZS5sZWZ0LT1sOmUubGVmdD1vKGUubGVmdC1yLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dC53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsVG9wOnMub2Zmc2V0LnRvcCxhPXQud2l0aGluLmhlaWdodCxyPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGg9bi1yLGw9cit0LmNvbGxpc2lvbkhlaWdodC1hLW47dC5jb2xsaXNpb25IZWlnaHQ+YT9oPjAmJjA+PWw/KGk9ZS50b3AraCt0LmNvbGxpc2lvbkhlaWdodC1hLW4sZS50b3ArPWgtaSk6ZS50b3A9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbkhlaWdodDpuOmg+MD9lLnRvcCs9aDpsPjA/ZS50b3AtPWw6ZS50b3A9byhlLnRvcC1yLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dC53aXRoaW4sYT1uLm9mZnNldC5sZWZ0K24uc2Nyb2xsTGVmdCxvPW4ud2lkdGgsaD1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LGw9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCx1PWwtaCxkPWwrdC5jb2xsaXNpb25XaWR0aC1vLWgsYz1cImxlZnRcIj09PXQubXlbMF0/LXQuZWxlbVdpZHRoOlwicmlnaHRcIj09PXQubXlbMF0/dC5lbGVtV2lkdGg6MCxwPVwibGVmdFwiPT09dC5hdFswXT90LnRhcmdldFdpZHRoOlwicmlnaHRcIj09PXQuYXRbMF0/LXQudGFyZ2V0V2lkdGg6MCxmPS0yKnQub2Zmc2V0WzBdOzA+dT8oaT1lLmxlZnQrYytwK2YrdC5jb2xsaXNpb25XaWR0aC1vLWEsKDA+aXx8cih1KT5pKSYmKGUubGVmdCs9YytwK2YpKTpkPjAmJihzPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQrYytwK2YtaCwocz4wfHxkPnIocykpJiYoZS5sZWZ0Kz1jK3ArZikpfSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dC53aXRoaW4sYT1uLm9mZnNldC50b3Arbi5zY3JvbGxUb3Asbz1uLmhlaWdodCxoPW4uaXNXaW5kb3c/bi5zY3JvbGxUb3A6bi5vZmZzZXQudG9wLGw9ZS50b3AtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsdT1sLWgsZD1sK3QuY29sbGlzaW9uSGVpZ2h0LW8taCxjPVwidG9wXCI9PT10Lm15WzFdLHA9Yz8tdC5lbGVtSGVpZ2h0OlwiYm90dG9tXCI9PT10Lm15WzFdP3QuZWxlbUhlaWdodDowLGY9XCJ0b3BcIj09PXQuYXRbMV0/dC50YXJnZXRIZWlnaHQ6XCJib3R0b21cIj09PXQuYXRbMV0/LXQudGFyZ2V0SGVpZ2h0OjAsbT0tMip0Lm9mZnNldFsxXTswPnU/KHM9ZS50b3ArcCtmK20rdC5jb2xsaXNpb25IZWlnaHQtby1hLCgwPnN8fHIodSk+cykmJihlLnRvcCs9cCtmK20pKTpkPjAmJihpPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK3ArZittLWgsKGk+MHx8ZD5yKGkpKSYmKGUudG9wKz1wK2YrbSkpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxmdW5jdGlvbigpe3ZhciB0LGkscyxuLG8scj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0saD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyP1wiZGl2XCI6XCJib2R5XCIpLHM9e3Zpc2liaWxpdHk6XCJoaWRkZW5cIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6XCJub25lXCJ9LHImJmUuZXh0ZW5kKHMse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiLTEwMDBweFwiLHRvcDpcIi0xMDAwcHhcIn0pO2ZvcihvIGluIHMpdC5zdHlsZVtvXT1zW29dO3QuYXBwZW5kQ2hpbGQoaCksaT1yfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaS5pbnNlcnRCZWZvcmUodCxpLmZpcnN0Q2hpbGQpLGguc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNzQzMjIyMnB4O1wiLG49ZShoKS5vZmZzZXQoKS5sZWZ0LGE9bj4xMCYmMTE+bix0LmlubmVySFRNTD1cIlwiLGkucmVtb3ZlQ2hpbGQodCl9KCl9KCksZS51aS5wb3NpdGlvbixlLndpZGdldChcInVpLmFjY29yZGlvblwiLHt2ZXJzaW9uOlwiMS4xMS40XCIsb3B0aW9uczp7YWN0aXZlOjAsYW5pbWF0ZTp7fSxjb2xsYXBzaWJsZTohMSxldmVudDpcImNsaWNrXCIsaGVhZGVyOlwiPiBsaSA+IDpmaXJzdC1jaGlsZCw+IDpub3QobGkpOmV2ZW5cIixoZWlnaHRTdHlsZTpcImF1dG9cIixpY29uczp7YWN0aXZlSGVhZGVyOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIixoZWFkZXI6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtZVwifSxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGx9LGhpZGVQcm9wczp7Ym9yZGVyVG9wV2lkdGg6XCJoaWRlXCIsYm9yZGVyQm90dG9tV2lkdGg6XCJoaWRlXCIscGFkZGluZ1RvcDpcImhpZGVcIixwYWRkaW5nQm90dG9tOlwiaGlkZVwiLGhlaWdodDpcImhpZGVcIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDpcInNob3dcIixib3JkZXJCb3R0b21XaWR0aDpcInNob3dcIixwYWRkaW5nVG9wOlwic2hvd1wiLHBhZGRpbmdCb3R0b206XCJzaG93XCIsaGVpZ2h0Olwic2hvd1wifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMucHJldlNob3c9dGhpcy5wcmV2SGlkZT1lKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXRcIikuYXR0cihcInJvbGVcIixcInRhYmxpc3RcIiksdC5jb2xsYXBzaWJsZXx8dC5hY3RpdmUhPT0hMSYmbnVsbCE9dC5hY3RpdmV8fCh0LmFjdGl2ZT0wKSx0aGlzLl9wcm9jZXNzUGFuZWxzKCksMD50LmFjdGl2ZSYmKHQuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLl9yZWZyZXNoKCl9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVhZGVyOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5uZXh0KCk6ZSgpfX0sX2NyZWF0ZUljb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmljb25zO3QmJihlKFwiPHNwYW4+XCIpLmFkZENsYXNzKFwidWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHVpLWljb24gXCIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKS5yZW1vdmVDbGFzcyh0LmhlYWRlcikuYWRkQ2xhc3ModC5hY3RpdmVIZWFkZXIpLHRoaXMuaGVhZGVycy5hZGRDbGFzcyhcInVpLWFjY29yZGlvbi1pY29uc1wiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoXCJ1aS1hY2NvcmRpb24taWNvbnNcIikuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLnJlbW92ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0XCIpLnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcyhcInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wXCIpLnJlbW92ZUF0dHIoXCJyb2xlXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWV4cGFuZGVkXCIpLnJlbW92ZUF0dHIoXCJhcmlhLXNlbGVjdGVkXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpLnJlbW92ZUF0dHIoXCJ0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLGU9dGhpcy5oZWFkZXJzLm5leHQoKS5yZW1vdmVDbGFzcyhcInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZFwiKS5jc3MoXCJkaXNwbGF5XCIsXCJcIikucmVtb3ZlQXR0cihcInJvbGVcIikucmVtb3ZlQXR0cihcImFyaWEtaGlkZGVuXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIikucmVtb3ZlVW5pcXVlSWQoKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmZS5jc3MoXCJoZWlnaHRcIixcIlwiKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVyblwiYWN0aXZlXCI9PT1lPyh0aGlzLl9hY3RpdmF0ZSh0KSx2b2lkIDApOihcImV2ZW50XCI9PT1lJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksXCJjb2xsYXBzaWJsZVwiIT09ZXx8dHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSxcImljb25zXCI9PT1lJiYodGhpcy5fZGVzdHJveUljb25zKCksdCYmdGhpcy5fY3JlYXRlSWNvbnMoKSksXCJkaXNhYmxlZFwiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLHQpLHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkudG9nZ2xlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCkpLHZvaWQgMCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCF0LmFsdEtleSYmIXQuY3RybEtleSl7dmFyIGk9ZS51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksYT0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046YT10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOmE9dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBpLkhPTUU6YT10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDphPXRoaXMuaGVhZGVyc1tzLTFdfWEmJihlKHQudGFyZ2V0KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksZShhKS5hdHRyKFwidGFiSW5kZXhcIiwwKSxhLmZvY3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpKX19LF9wYW5lbEtleURvd246ZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlVQJiZ0LmN0cmxLZXkmJmUodC5jdXJyZW50VGFyZ2V0KS5wcmV2KCkuZm9jdXMoKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9uczt0aGlzLl9wcm9jZXNzUGFuZWxzKCksdC5hY3RpdmU9PT0hMSYmdC5jb2xsYXBzaWJsZT09PSEwfHwhdGhpcy5oZWFkZXJzLmxlbmd0aD8odC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0LmFjdGl2ZT09PSExP3RoaXMuX2FjdGl2YXRlKDApOnRoaXMuYWN0aXZlLmxlbmd0aCYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLmhlYWRlcnMubGVuZ3RoPT09dGhpcy5oZWFkZXJzLmZpbmQoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsdC5hY3RpdmUtMSkpOnQuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZGVycyx0PXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcyhcInVpLWFjY29yZGlvbi1oZWFkZXIgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsXCIpLHRoaXMucGFuZWxzPXRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoXCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbVwiKS5maWx0ZXIoXCI6bm90KC51aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUpXCIpLmhpZGUoKSx0JiYodGhpcy5fb2ZmKGUubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZih0Lm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkuYWRkQ2xhc3MoXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcFwiKS5yZW1vdmVDbGFzcyhcInVpLWNvcm5lci1hbGxcIiksdGhpcy5hY3RpdmUubmV4dCgpLmFkZENsYXNzKFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cihcInJvbGVcIixcInRhYlwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIikscz10Lm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7dC5hdHRyKFwiYXJpYS1jb250cm9sc1wiLG4pLHMuYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLGkpfSkubmV4dCgpLmF0dHIoXCJyb2xlXCIsXCJ0YWJwYW5lbFwiKSx0aGlzLmhlYWRlcnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLmhpZGUoKSx0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwifSk6dGhpcy5oZWFkZXJzLmVxKDApLmF0dHIoXCJ0YWJJbmRleFwiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksXCJmaWxsXCI9PT1zPyh0PW4uaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKFwiOnZpc2libGVcIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykscz1pLmNzcyhcInBvc2l0aW9uXCIpO1wiYWJzb2x1dGVcIiE9PXMmJlwiZml4ZWRcIiE9PXMmJih0LT1pLm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbigpe3QtPWUodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCx0LWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoXCJvdmVyZmxvd1wiLFwiYXV0b1wiKSk6XCJhdXRvXCI9PT1zJiYodD0wLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3Q9TWF0aC5tYXgodCxlKHRoaXMpLmNzcyhcImhlaWdodFwiLFwiXCIpLmhlaWdodCgpKX0pLmhlaWdodCh0KSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9maW5kQWN0aXZlKHQpWzBdO2khPT10aGlzLmFjdGl2ZVswXSYmKGk9aXx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90aGlzLmhlYWRlcnMuZXEodCk6ZSgpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e2tleWRvd246XCJfa2V5ZG93blwifTt0JiZlLmVhY2godC5zcGxpdChcIiBcIiksZnVuY3Rpb24oZSx0KXtpW3RdPVwiX2V2ZW50SGFuZGxlclwifSksdGhpcy5fb2ZmKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkpLHRoaXMuX29uKHRoaXMuaGVhZGVycyxpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMubmV4dCgpLHtrZXlkb3duOlwiX3BhbmVsS2V5RG93blwifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uWzBdPT09c1swXSxvPWEmJmkuY29sbGFwc2libGUscj1vP2UoKTpuLm5leHQoKSxoPXMubmV4dCgpLGw9e29sZEhlYWRlcjpzLG9sZFBhbmVsOmgsbmV3SGVhZGVyOm8/ZSgpOm4sbmV3UGFuZWw6cn07dC5wcmV2ZW50RGVmYXVsdCgpLGEmJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKFwiYmVmb3JlQWN0aXZhdGVcIix0LGwpPT09ITF8fChpLmFjdGl2ZT1vPyExOnRoaXMuaGVhZGVycy5pbmRleChuKSx0aGlzLmFjdGl2ZT1hP2UoKTpuLHRoaXMuX3RvZ2dsZShsKSxzLnJlbW92ZUNsYXNzKFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlXCIpLGkuaWNvbnMmJnMuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmhlYWRlciksYXx8KG4ucmVtb3ZlQ2xhc3MoXCJ1aS1jb3JuZXItYWxsXCIpLmFkZENsYXNzKFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3BcIiksaS5pY29ucyYmbi5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIikucmVtb3ZlQ2xhc3MoaS5pY29ucy5oZWFkZXIpLmFkZENsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKSxuLm5leHQoKS5hZGRDbGFzcyhcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiKSkpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQubmV3UGFuZWwscz10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OnQub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1pLHRoaXMucHJldkhpZGU9cyx0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKGkscyx0KToocy5oaWRlKCksaS5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUodCkpLHMuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSkscy5wcmV2KCkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLGkubGVuZ3RoJiZzLmxlbmd0aD9zLnByZXYoKS5hdHRyKHt0YWJJbmRleDotMSxcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KTppLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09cGFyc2VJbnQoZSh0aGlzKS5hdHRyKFwidGFiSW5kZXhcIiksMTApfSkuYXR0cihcInRhYkluZGV4XCIsLTEpLGkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJmYWxzZVwiKS5wcmV2KCkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHMsbixhLG89dGhpcyxyPTAsaD1lLmNzcyhcImJveC1zaXppbmdcIiksbD1lLmxlbmd0aCYmKCF0Lmxlbmd0aHx8ZS5pbmRleCgpPHQuaW5kZXgoKSksdT10aGlzLm9wdGlvbnMuYW5pbWF0ZXx8e30sZD1sJiZ1LmRvd258fHUsYz1mdW5jdGlvbigpe28uX3RvZ2dsZUNvbXBsZXRlKGkpfTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZCYmKGE9ZCksXCJzdHJpbmdcIj09dHlwZW9mIGQmJihuPWQpLG49bnx8ZC5lYXNpbmd8fHUuZWFzaW5nLGE9YXx8ZC5kdXJhdGlvbnx8dS5kdXJhdGlvbix0Lmxlbmd0aD9lLmxlbmd0aD8ocz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjphLGVhc2luZzpuLGNvbXBsZXRlOmMsc3RlcDpmdW5jdGlvbihlLGkpe2kubm93PU1hdGgucm91bmQoZSksXCJoZWlnaHRcIiE9PWkucHJvcD9cImNvbnRlbnQtYm94XCI9PT1oJiYocis9aS5ub3cpOlwiY29udGVudFwiIT09by5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pLHZvaWQgMCk6dC5hbmltYXRlKHRoaXMuaGlkZVByb3BzLGEsbixjKTplLmFuaW1hdGUodGhpcy5zaG93UHJvcHMsYSxuLGMpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLnByZXYoKS5yZW1vdmVDbGFzcyhcInVpLWNvcm5lci10b3BcIikuYWRkQ2xhc3MoXCJ1aS1jb3JuZXItYWxsXCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLG51bGwsZSl9fSksZS53aWRnZXQoXCJ1aS5tZW51XCIse3ZlcnNpb246XCIxLjExLjRcIixkZWZhdWx0RWxlbWVudDpcIjx1bD5cIixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6XCJ1aS1pY29uLWNhcmF0LTEtZVwifSxpdGVtczpcIj4gKlwiLG1lbnVzOlwidWxcIixwb3NpdGlvbjp7bXk6XCJsZWZ0LTEgdG9wXCIsYXQ6XCJyaWdodCB0b3BcIn0scm9sZTpcIm1lbnVcIixibHVyOm51bGwsZm9jdXM6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlTWVudT10aGlzLmVsZW1lbnQsdGhpcy5tb3VzZUhhbmRsZWQ9ITEsdGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYWRkQ2xhc3MoXCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKS50b2dnbGVDbGFzcyhcInVpLW1lbnUtaWNvbnNcIiwhIXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLWljb25cIikubGVuZ3RoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpLHRoaXMuX29uKHtcIm1vdXNlZG93biAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSxcImNsaWNrIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQudGFyZ2V0KTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmxlbmd0aCYmKHRoaXMuc2VsZWN0KHQpLHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKXx8KHRoaXMubW91c2VIYW5kbGVkPSEwKSxpLmhhcyhcIi51aS1tZW51XCIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTohdGhpcy5lbGVtZW50LmlzKFwiOmZvY3VzXCIpJiZlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdChcIi51aS1tZW51XCIpLmxlbmd0aCYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIixbITBdKSx0aGlzLmFjdGl2ZSYmMT09PXRoaXMuYWN0aXZlLnBhcmVudHMoXCIudWktbWVudVwiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSxcIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZXZpb3VzRmlsdGVyKXt2YXIgaT1lKHQuY3VycmVudFRhcmdldCk7XG5pLnNpYmxpbmdzKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmZvY3VzKHQsaSl9fSxtb3VzZWxlYXZlOlwiY29sbGFwc2VBbGxcIixcIm1vdXNlbGVhdmUgLnVpLW1lbnVcIjpcImNvbGxhcHNlQWxsXCIsZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmFjdGl2ZXx8dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5lcSgwKTt0fHx0aGlzLmZvY3VzKGUsaSl9LGJsdXI6ZnVuY3Rpb24odCl7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLmNvbGxhcHNlQWxsKHQpfSl9LGtleWRvd246XCJfa2V5ZG93blwifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2soZSkmJnRoaXMuY29sbGFwc2VBbGwoZSksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIikuZmluZChcIi51aS1tZW51XCIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcyhcInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtaWNvbnMgdWktZnJvbnRcIikucmVtb3ZlQXR0cihcInJvbGVcIikucmVtb3ZlQXR0cihcInRhYkluZGV4XCIpLnJlbW92ZUF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIikucmVtb3ZlQXR0cihcImFyaWEtZXhwYW5kZWRcIikucmVtb3ZlQXR0cihcImFyaWEtaGlkZGVuXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnUtaXRlbVwiKS5yZW1vdmVDbGFzcyhcInVpLW1lbnUtaXRlbVwiKS5yZW1vdmVBdHRyKFwicm9sZVwiKS5yZW1vdmVBdHRyKFwiYXJpYS1kaXNhYmxlZFwiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIikucmVtb3ZlQXR0cihcInRhYkluZGV4XCIpLnJlbW92ZUF0dHIoXCJyb2xlXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWhhc3BvcHVwXCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKFwidWktbWVudS1zdWJtZW51LWNhcmF0XCIpJiZ0LnJlbW92ZSgpfSksdGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1kaXZpZGVyXCIpLnJlbW92ZUNsYXNzKFwidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50XCIpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKFwiZmlyc3RcIixcImZpcnN0XCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoXCJsYXN0XCIsXCJsYXN0XCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6dGhpcy5wcmV2aW91cyh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5ET1dOOnRoaXMubmV4dCh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5MRUZUOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpvPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8XCJcIixuPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxhPSExLGNsZWFyVGltZW91dCh0aGlzLmZpbHRlclRpbWVyKSxuPT09cz9hPSEwOm49cytuLGk9dGhpcy5fZmlsdGVyTWVudUl0ZW1zKG4pLGk9YSYmLTEhPT1pLmluZGV4KHRoaXMuYWN0aXZlLm5leHQoKSk/dGhpcy5hY3RpdmUubmV4dEFsbChcIi51aS1tZW51LWl0ZW1cIik6aSxpLmxlbmd0aHx8KG49U3RyaW5nLmZyb21DaGFyQ29kZSh0LmtleUNvZGUpLGk9dGhpcy5fZmlsdGVyTWVudUl0ZW1zKG4pKSxpLmxlbmd0aD8odGhpcy5mb2N1cyh0LGkpLHRoaXMucHJldmlvdXNGaWx0ZXI9bix0aGlzLmZpbHRlclRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9LDFlMykpOmRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfW8mJnQucHJldmVudERlZmF1bHQoKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpfHwodGhpcy5hY3RpdmUuaXMoXCJbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddXCIpP3RoaXMuZXhwYW5kKGUpOnRoaXMuc2VsZWN0KGUpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LGkscz10aGlzLG49dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUsYT10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMpO3RoaXMuZWxlbWVudC50b2dnbGVDbGFzcyhcInVpLW1lbnUtaWNvbnNcIiwhIXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLWljb25cIikubGVuZ3RoKSxhLmZpbHRlcihcIjpub3QoLnVpLW1lbnUpXCIpLmFkZENsYXNzKFwidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIikuaGlkZSgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5wYXJlbnQoKSxzPWUoXCI8c3Bhbj5cIikuYWRkQ2xhc3MoXCJ1aS1tZW51LWljb24gdWktaWNvbiBcIituKS5kYXRhKFwidWktbWVudS1zdWJtZW51LWNhcmF0XCIsITApO2kuYXR0cihcImFyaWEtaGFzcG9wdXBcIixcInRydWVcIikucHJlcGVuZChzKSx0LmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixpLmF0dHIoXCJpZFwiKSl9KSx0PWEuYWRkKHRoaXMuZWxlbWVudCksaT10LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxpLm5vdChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7cy5faXNEaXZpZGVyKHQpJiZ0LmFkZENsYXNzKFwidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyXCIpfSksaS5ub3QoXCIudWktbWVudS1pdGVtLCAudWktbWVudS1kaXZpZGVyXCIpLmFkZENsYXNzKFwidWktbWVudS1pdGVtXCIpLnVuaXF1ZUlkKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksaS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksdGhpcy5hY3RpdmUmJiFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudTpcIm1lbnVpdGVtXCIsbGlzdGJveDpcIm9wdGlvblwifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtcImljb25zXCI9PT1lJiZ0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51LWljb25cIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKHQuc3VibWVudSksXCJkaXNhYmxlZFwiPT09ZSYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3RoaXMuYmx1cihlLGUmJlwiZm9jdXNcIj09PWUudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcodCksdGhpcy5hY3RpdmU9dC5maXJzdCgpLHM9dGhpcy5hY3RpdmUuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1mb2N1c1wiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixzLmF0dHIoXCJpZFwiKSksdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIikuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIiksZSYmXCJrZXlkb3duXCI9PT1lLnR5cGU/dGhpcy5fY2xvc2UoKTp0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKX0sdGhpcy5kZWxheSksaT10LmNoaWxkcmVuKFwiLnVpLW1lbnVcIiksaS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUse2l0ZW06dH0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbyxyO3RoaXMuX2hhc1Njcm9sbCgpJiYoaT1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSxcImJvcmRlclRvcFdpZHRoXCIpKXx8MCxzPXBhcnNlRmxvYXQoZS5jc3ModGhpcy5hY3RpdmVNZW51WzBdLFwicGFkZGluZ1RvcFwiKSl8fDAsbj10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxhPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxyPXQub3V0ZXJIZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChhK24pOm4rcj5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbi1vK3IpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIiksdGhpcy5hY3RpdmU9bnVsbCx0aGlzLl90cmlnZ2VyKFwiYmx1clwiLGUse2l0ZW06dGhpcy5hY3RpdmV9KSl9LF9zdGFydE9wZW5pbmc6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLFwidHJ1ZVwiPT09ZS5hdHRyKFwiYXJpYS1oaWRkZW5cIikmJih0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKSx0aGlzLl9vcGVuKGUpfSx0aGlzLmRlbGF5KSl9LF9vcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPWUuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudVwiKS5ub3QodC5wYXJlbnRzKFwiLnVpLW1lbnVcIikpLmhpZGUoKS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksdC5zaG93KCkucmVtb3ZlQXR0cihcImFyaWEtaGlkZGVuXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpLnBvc2l0aW9uKGkpfSxjb2xsYXBzZUFsbDpmdW5jdGlvbih0LGkpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHM9aT90aGlzLmVsZW1lbnQ6ZSh0JiZ0LnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51XCIpKTtzLmxlbmd0aHx8KHM9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShzKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoXCIudWktbWVudVwiKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKS5lbmQoKS5maW5kKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKS5ub3QoXCIudWktc3RhdGUtZm9jdXNcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIil9LF9jbG9zZU9uRG9jdW1lbnRDbGljazpmdW5jdGlvbih0KXtyZXR1cm4hZSh0LnRhcmdldCkuY2xvc2VzdChcIi51aS1tZW51XCIpLmxlbmd0aH0sX2lzRGl2aWRlcjpmdW5jdGlvbihlKXtyZXR1cm4hL1teXFwtXFx1MjAxNFxcdTIwMTNcXHNdLy50ZXN0KGUudGV4dCgpKX0sY29sbGFwc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1tZW51IFwiKS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX29wZW4odC5wYXJlbnQoKSksdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLmZvY3VzKGUsdCl9KSl9LG5leHQ6ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZShcIm5leHRcIixcImZpcnN0XCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoXCJwcmV2XCIsXCJsYXN0XCIsZSl9LGlzRmlyc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbChcIi51aS1tZW51LWl0ZW1cIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbChcIi51aS1tZW51LWl0ZW1cIikubGVuZ3RofSxfbW92ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM7dGhpcy5hY3RpdmUmJihzPVwiZmlyc3RcIj09PWV8fFwibGFzdFwiPT09ZT90aGlzLmFjdGl2ZVtcImZpcnN0XCI9PT1lP1wicHJldkFsbFwiOlwibmV4dEFsbFwiXShcIi51aS1tZW51LWl0ZW1cIikuZXEoLTEpOnRoaXMuYWN0aXZlW2UrXCJBbGxcIl0oXCIudWktbWVudS1pdGVtXCIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzTGFzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ZSh0aGlzKSwwPmkub2Zmc2V0KCkudG9wLXMtbn0pLHRoaXMuZm9jdXModCxpKSk6dGhpcy5mb2N1cyh0LHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdGhpcy5hY3RpdmU/XCJsYXN0XCI6XCJmaXJzdFwiXSgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LHByZXZpb3VzUGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksaS5vZmZzZXQoKS50b3AtcytuPjB9KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCkpKSx2b2lkIDApOih0aGlzLm5leHQodCksdm9pZCAwKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcChcInNjcm9sbEhlaWdodFwiKX0sc2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPXRoaXMuYWN0aXZlfHxlKHQudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQsITApLHRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIix0LGkpfSxfZmlsdGVyTWVudUl0ZW1zOmZ1bmN0aW9uKHQpe3ZhciBpPXQucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csXCJcXFxcJCZcIikscz1SZWdFeHAoXCJeXCIraSxcImlcIik7cmV0dXJuIHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKFwiLnVpLW1lbnUtaXRlbVwiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KGUudHJpbShlKHRoaXMpLnRleHQoKSkpfSl9fSksZS53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIix7dmVyc2lvbjpcIjEuMTEuNFwiLGRlZmF1bHRFbGVtZW50OlwiPGlucHV0PlwiLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPVwidGV4dGFyZWFcIj09PW4sbz1cImlucHV0XCI9PT1uO3RoaXMuaXNNdWx0aUxpbmU9YT8hMDpvPyExOnRoaXMuZWxlbWVudC5wcm9wKFwiaXNDb250ZW50RWRpdGFibGVcIiksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbYXx8bz9cInZhbFwiOlwidGV4dFwiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtaW5wdXRcIikuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLHRoaXMuX29uKHRoaXMuZWxlbWVudCx7a2V5ZG93bjpmdW5jdGlvbihuKXtpZih0aGlzLmVsZW1lbnQucHJvcChcInJlYWRPbmx5XCIpKXJldHVybiB0PSEwLHM9ITAsaT0hMCx2b2lkIDA7dD0hMSxzPSExLGk9ITE7dmFyIGE9ZS51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2UgYS5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLG4pO2JyZWFrO2Nhc2UgYS5QQUdFX0RPV046dD0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixuKTticmVhaztjYXNlIGEuVVA6dD0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsbik7YnJlYWs7Y2FzZSBhLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixuKTticmVhaztjYXNlIGEuRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKHQ9ITAsbi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QobikpO2JyZWFrO2Nhc2UgYS5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChuKTticmVhaztjYXNlIGEuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2Uobiksbi5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Omk9ITAsdGhpcy5fc2VhcmNoVGltZW91dChuKX19LGtleXByZXNzOmZ1bmN0aW9uKHMpe2lmKHQpcmV0dXJuIHQ9ITEsKCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49ZS51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixzKTticmVhaztjYXNlIG4uUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJuZXh0UGFnZVwiLHMpO2JyZWFrO2Nhc2Ugbi5VUDp0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIscyl9fX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHM/KHM9ITEsZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMCk6KHRoaXMuX3NlYXJjaFRpbWVvdXQoZSksdm9pZCAwKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5jbG9zZShlKSx0aGlzLl9jaGFuZ2UoZSksdm9pZCAwKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PWUoXCI8dWw+XCIpLmFkZENsYXNzKFwidWktYXV0b2NvbXBsZXRlIHVpLWZyb250XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5fb24odGhpcy5tZW51LmVsZW1lbnQse21vdXNlZG93bjpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cn0pO3ZhciBpPXRoaXMubWVudS5lbGVtZW50WzBdO2UodC50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aHx8dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZG9jdW1lbnQub25lKFwibW91c2Vkb3duXCIsZnVuY3Rpb24ocyl7cy50YXJnZXQ9PT10LmVsZW1lbnRbMF18fHMudGFyZ2V0PT09aXx8ZS5jb250YWlucyhpLHMudGFyZ2V0KXx8dC5jbG9zZSgpfSl9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbjtyZXR1cm4gdGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSx0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKT8odGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZShcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSksdm9pZCAwKToobj1pLml0ZW0uZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIpLCExIT09dGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsdCx7aXRlbTpufSkmJnQub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSxzPWkuaXRlbS5hdHRyKFwiYXJpYS1sYWJlbFwiKXx8bi52YWx1ZSxzJiZlLnRyaW0ocykubGVuZ3RoJiYodGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLGUoXCI8ZGl2PlwiKS50ZXh0KHMpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpLHZvaWQgMCl9LG1lbnVzZWxlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgaT10Lml0ZW0uZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLHtpdGVtOml9KSYmdGhpcy5fdmFsdWUoaS52YWx1ZSksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCksdGhpcy5jbG9zZShlKSx0aGlzLnNlbGVjdGVkSXRlbT1pfX0pLHRoaXMubGl2ZVJlZ2lvbj1lKFwiPHNwYW4+XCIse3JvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFkZENsYXNzKFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktYXV0b2NvbXBsZXRlLWlucHV0XCIpLnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSxcInNvdXJjZVwiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLFwiYXBwZW5kVG9cIj09PWUmJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiZGlzYWJsZWRcIj09PWUmJnQmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0PXQuanF1ZXJ5fHx0Lm5vZGVUeXBlP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSx0JiZ0WzBdfHwodD10aGlzLmVsZW1lbnQuY2xvc2VzdChcIi51aS1mcm9udFwiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3MoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsaS50ZXJtKSl9KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNvdXJjZT8oaT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKHQsbil7cy54aHImJnMueGhyLmFib3J0KCkscy54aHI9ZS5hamF4KHt1cmw6aSxkYXRhOnQsZGF0YVR5cGU6XCJqc29uXCIsc3VjY2VzczpmdW5jdGlvbihlKXtuKGUpfSxlcnJvcjpmdW5jdGlvbigpe24oW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLnNlYXJjaGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXMudGVybT09PXRoaXMuX3ZhbHVlKCksaT10aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpLHM9ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5OyghdHx8dCYmIWkmJiFzKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTp0aGlzLl90cmlnZ2VyKFwic2VhcmNoXCIsdCkhPT0hMT90aGlzLl9zZWFyY2goZSk6dm9pZCAwfSxfc2VhcmNoOmZ1bmN0aW9uKGUpe3RoaXMucGVuZGluZysrLHRoaXMuZWxlbWVudC5hZGRDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nXCIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOmV9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgdD0rK3RoaXMucmVxdWVzdEluZGV4O3JldHVybiBlLnByb3h5KGZ1bmN0aW9uKGUpe3Q9PT10aGlzLnJlcXVlc3RJbmRleCYmdGhpcy5fX3Jlc3BvbnNlKGUpLHRoaXMucGVuZGluZy0tLHRoaXMucGVuZGluZ3x8dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcihcInJlc3BvbnNlXCIsbnVsbCx7Y29udGVudDplfSksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmZSYmZS5sZW5ndGgmJiF0aGlzLmNhbmNlbFNlYXJjaD8odGhpcy5fc3VnZ2VzdChlKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UoZSl9LF9jbG9zZTpmdW5jdGlvbihlKXt0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsZSkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMucHJldmlvdXMhPT10aGlzLl92YWx1ZSgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCYmdFswXS5sYWJlbCYmdFswXS52YWx1ZT90OmUubWFwKHQsZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe30sdCx7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksdCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKFwiXCIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO2UuZWFjaChpLGZ1bmN0aW9uKGUsaSl7cy5fcmVuZGVySXRlbURhdGEodCxpKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LGkpe3JldHVybiBlKFwiPGxpPlwiKS50ZXh0KGkubGFiZWwpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpP3RoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KGUpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QoZSk/KHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5tZW51LmJsdXIoKSx2b2lkIDApOih0aGlzLm1lbnVbZV0odCksdm9pZCAwKToodGhpcy5zZWFyY2gobnVsbCx0KSx2b2lkIDApfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXsoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikpJiYodGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKSl9fSksZS5leHRlbmQoZS51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLFwiXFxcXCQmXCIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1SZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksXCJpXCIpO3JldHVybiBlLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gcy50ZXN0KGUubGFiZWx8fGUudmFsdWV8fGUpfSl9fSksZS53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czpcIk5vIHNlYXJjaCByZXN1bHRzLlwiLHJlc3VsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU+MT9cIiByZXN1bHRzIGFyZVwiOlwiIHJlc3VsdCBpc1wiKStcIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLlwifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPXQmJnQubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKHQubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKFwiPGRpdj5cIikudGV4dChpKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pKX19KSxlLnVpLmF1dG9jb21wbGV0ZTt2YXIgYyxwPVwidWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGxcIixmPVwidWktYnV0dG9uLWljb25zLW9ubHkgdWktYnV0dG9uLWljb24tb25seSB1aS1idXR0b24tdGV4dC1pY29ucyB1aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgdWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgdWktYnV0dG9uLXRleHQtb25seVwiLG09ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZpbmQoXCI6dWktYnV0dG9uXCIpLmJ1dHRvbihcInJlZnJlc2hcIil9LDEpfSxnPWZ1bmN0aW9uKHQpe3ZhciBpPXQubmFtZSxzPXQuZm9ybSxuPWUoW10pO3JldHVybiBpJiYoaT1pLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLG49cz9lKHMpLmZpbmQoXCJbbmFtZT0nXCIraStcIiddW3R5cGU9cmFkaW9dXCIpOmUoXCJbbmFtZT0nXCIraStcIiddW3R5cGU9cmFkaW9dXCIsdC5vd25lckRvY3VtZW50KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5mb3JtfSkpLG59O2Uud2lkZ2V0KFwidWkuYnV0dG9uXCIse3ZlcnNpb246XCIxLjExLjRcIixkZWZhdWx0RWxlbWVudDpcIjxidXR0b24+XCIsb3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OiEwLGxhYmVsOm51bGwsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuY2xvc2VzdChcImZvcm1cIikudW5iaW5kKFwicmVzZXRcIit0aGlzLmV2ZW50TmFtZXNwYWNlKS5iaW5kKFwicmVzZXRcIit0aGlzLmV2ZW50TmFtZXNwYWNlLG0pLFwiYm9vbGVhblwiIT10eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIik6dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cihcInRpdGxlXCIpO3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMscz1cImNoZWNrYm94XCI9PT10aGlzLnR5cGV8fFwicmFkaW9cIj09PXRoaXMudHlwZSxuPXM/XCJcIjpcInVpLXN0YXRlLWFjdGl2ZVwiO251bGw9PT1pLmxhYmVsJiYoaS5sYWJlbD1cImlucHV0XCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LnZhbCgpOnRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmJ1dHRvbkVsZW1lbnQpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhwKS5hdHRyKFwicm9sZVwiLFwiYnV0dG9uXCIpLmJpbmQoXCJtb3VzZWVudGVyXCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fHRoaXM9PT1jJiZlKHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpfSkuYmluZChcIm1vdXNlbGVhdmVcIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8ZSh0aGlzKS5yZW1vdmVDbGFzcyhuKX0pLmJpbmQoXCJjbGlja1wiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7aS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuX29uKHtmb2N1czpmdW5jdGlvbigpe3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhcInVpLXN0YXRlLWZvY3VzXCIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIil9fSkscyYmdGhpcy5lbGVtZW50LmJpbmQoXCJjaGFuZ2VcIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7dC5yZWZyZXNoKCl9KSxcImNoZWNrYm94XCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoXCJjbGlja1wiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyZXR1cm4gaS5kaXNhYmxlZD8hMTp2b2lkIDB9KTpcInJhZGlvXCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoXCJjbGlja1wiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZihpLmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdC5idXR0b25FbGVtZW50LmF0dHIoXCJhcmlhLXByZXNzZWRcIixcInRydWVcIik7dmFyIHM9dC5lbGVtZW50WzBdO2cocykubm90KHMpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbihcIndpZGdldFwiKVswXX0pLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpLmF0dHIoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpfSk6KHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKFwibW91c2Vkb3duXCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpLGM9dGhpcyx0LmRvY3VtZW50Lm9uZShcIm1vdXNldXBcIixmdW5jdGlvbigpe2M9bnVsbH0pLHZvaWQgMCl9KS5iaW5kKFwibW91c2V1cFwiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooZSh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSx2b2lkIDApfSkuYmluZChcImtleWRvd25cIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe3JldHVybiBpLmRpc2FibGVkPyExOigodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFfHx0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRU5URVIpJiZlKHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpLHZvaWQgMCl9KS5iaW5kKFwia2V5dXBcIit0aGlzLmV2ZW50TmFtZXNwYWNlK1wiIGJsdXJcIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcyhcImFcIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oXCJkaXNhYmxlZFwiLGkuZGlzYWJsZWQpLHRoaXMuX3Jlc2V0QnV0dG9uKCl9LF9kZXRlcm1pbmVCdXR0b25UeXBlOmZ1bmN0aW9uKCl7dmFyIGUsdCxpO3RoaXMudHlwZT10aGlzLmVsZW1lbnQuaXMoXCJbdHlwZT1jaGVja2JveF1cIik/XCJjaGVja2JveFwiOnRoaXMuZWxlbWVudC5pcyhcIlt0eXBlPXJhZGlvXVwiKT9cInJhZGlvXCI6dGhpcy5lbGVtZW50LmlzKFwiaW5wdXRcIik/XCJpbnB1dFwiOlwiYnV0dG9uXCIsXCJjaGVja2JveFwiPT09dGhpcy50eXBlfHxcInJhZGlvXCI9PT10aGlzLnR5cGU/KGU9dGhpcy5lbGVtZW50LnBhcmVudHMoKS5sYXN0KCksdD1cImxhYmVsW2Zvcj0nXCIrdGhpcy5lbGVtZW50LmF0dHIoXCJpZFwiKStcIiddXCIsdGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwoZT1lLmxlbmd0aD9lLnNpYmxpbmdzKCk6dGhpcy5lbGVtZW50LnNpYmxpbmdzKCksdGhpcy5idXR0b25FbGVtZW50PWUuZmlsdGVyKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fCh0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpKSksdGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLGk9dGhpcy5lbGVtZW50LmlzKFwiOmNoZWNrZWRcIiksaSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuYnV0dG9uRWxlbWVudC5wcm9wKFwiYXJpYS1wcmVzc2VkXCIsaSkpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhwK1wiIHVpLXN0YXRlLWFjdGl2ZSBcIitmKS5yZW1vdmVBdHRyKFwicm9sZVwiKS5yZW1vdmVBdHRyKFwiYXJpYS1wcmVzc2VkXCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoXCIudWktYnV0dG9uLXRleHRcIikuaHRtbCgpKSx0aGlzLmhhc1RpdGxlfHx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQXR0cihcInRpdGxlXCIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3N1cGVyKGUsdCksXCJkaXNhYmxlZFwiPT09ZT8odGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KSx0aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIsISF0KSx0JiYoXCJjaGVja2JveFwiPT09dGhpcy50eXBlfHxcInJhZGlvXCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXNcIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZm9jdXMgdWktc3RhdGUtYWN0aXZlXCIpKSx2b2lkIDApOih0aGlzLl9yZXNldEJ1dHRvbigpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoXCJpbnB1dCwgYnV0dG9uXCIpP3RoaXMuZWxlbWVudC5pcyhcIjpkaXNhYmxlZFwiKTp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoXCJ1aS1idXR0b24tZGlzYWJsZWRcIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0KSxcInJhZGlvXCI9PT10aGlzLnR5cGU/Zyh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmlzKFwiOmNoZWNrZWRcIik/ZSh0aGlzKS5idXR0b24oXCJ3aWRnZXRcIikuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIikuYXR0cihcImFyaWEtcHJlc3NlZFwiLFwidHJ1ZVwiKTplKHRoaXMpLmJ1dHRvbihcIndpZGdldFwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKS5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsXCJmYWxzZVwiKX0pOlwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmKHRoaXMuZWxlbWVudC5pcyhcIjpjaGVja2VkXCIpP3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKS5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsXCJ0cnVlXCIpOnRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKS5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsXCJmYWxzZVwiKSl9LF9yZXNldEJ1dHRvbjpmdW5jdGlvbigpe2lmKFwiaW5wdXRcIj09PXRoaXMudHlwZSlyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCksdm9pZCAwO3ZhciB0PXRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhmKSxpPWUoXCI8c3Bhbj48L3NwYW4+XCIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoXCJ1aS1idXR0b24tdGV4dFwiKS5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkuYXBwZW5kVG8odC5lbXB0eSgpKS50ZXh0KCkscz10aGlzLm9wdGlvbnMuaWNvbnMsbj1zLnByaW1hcnkmJnMuc2Vjb25kYXJ5LGE9W107cy5wcmltYXJ5fHxzLnNlY29uZGFyeT8odGhpcy5vcHRpb25zLnRleHQmJmEucHVzaChcInVpLWJ1dHRvbi10ZXh0LWljb25cIisobj9cInNcIjpzLnByaW1hcnk/XCItcHJpbWFyeVwiOlwiLXNlY29uZGFyeVwiKSkscy5wcmltYXJ5JiZ0LnByZXBlbmQoXCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tcHJpbWFyeSB1aS1pY29uIFwiK3MucHJpbWFyeStcIic+PC9zcGFuPlwiKSxzLnNlY29uZGFyeSYmdC5hcHBlbmQoXCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gXCIrcy5zZWNvbmRhcnkrXCInPjwvc3Bhbj5cIiksdGhpcy5vcHRpb25zLnRleHR8fChhLnB1c2gobj9cInVpLWJ1dHRvbi1pY29ucy1vbmx5XCI6XCJ1aS1idXR0b24taWNvbi1vbmx5XCIpLHRoaXMuaGFzVGl0bGV8fHQuYXR0cihcInRpdGxlXCIsZS50cmltKGkpKSkpOmEucHVzaChcInVpLWJ1dHRvbi10ZXh0LW9ubHlcIiksdC5hZGRDbGFzcyhhLmpvaW4oXCIgXCIpKX19KSxlLndpZGdldChcInVpLmJ1dHRvbnNldFwiLHt2ZXJzaW9uOlwiMS4xMS40XCIsb3B0aW9uczp7aXRlbXM6XCJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YSh1aS1idXR0b24pXCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1idXR0b25zZXRcIil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtcImRpc2FibGVkXCI9PT1lJiZ0aGlzLmJ1dHRvbnMuYnV0dG9uKFwib3B0aW9uXCIsZSx0KSx0aGlzLl9zdXBlcihlLHQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9XCJydGxcIj09PXRoaXMuZWxlbWVudC5jc3MoXCJkaXJlY3Rpb25cIiksaT10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLHM9aS5maWx0ZXIoXCI6dWktYnV0dG9uXCIpO2kubm90KFwiOnVpLWJ1dHRvblwiKS5idXR0b24oKSxzLmJ1dHRvbihcInJlZnJlc2hcIiksdGhpcy5idXR0b25zPWkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKFwid2lkZ2V0XCIpWzBdfSkucmVtb3ZlQ2xhc3MoXCJ1aS1jb3JuZXItYWxsIHVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodFwiKS5maWx0ZXIoXCI6Zmlyc3RcIikuYWRkQ2xhc3ModD9cInVpLWNvcm5lci1yaWdodFwiOlwidWktY29ybmVyLWxlZnRcIikuZW5kKCkuZmlsdGVyKFwiOmxhc3RcIikuYWRkQ2xhc3ModD9cInVpLWNvcm5lci1sZWZ0XCI6XCJ1aS1jb3JuZXItcmlnaHRcIikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktYnV0dG9uc2V0XCIpLHRoaXMuYnV0dG9ucy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oXCJ3aWRnZXRcIilbMF19KS5yZW1vdmVDbGFzcyhcInVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodFwiKS5lbmQoKS5idXR0b24oXCJkZXN0cm95XCIpfX0pLGUudWkuYnV0dG9uLGUuZXh0ZW5kKGUudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246XCIxLjExLjRcIn19KTt2YXIgdjtlLmV4dGVuZChuLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOlwiaGFzRGF0ZXBpY2tlclwiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLl9kZWZhdWx0cyxlfHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE7cz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1cImRpdlwiPT09c3x8XCJzcGFuXCI9PT1zLHQuaWR8fCh0aGlzLnV1aWQrPTEsdC5pZD1cImRwXCIrdGhpcy51dWlkKSxhPXRoaXMuX25ld0luc3QoZSh0KSxuKSxhLnNldHRpbmdzPWUuZXh0ZW5kKHt9LGl8fHt9KSxcImlucHV0XCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsYSk6biYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0LGEpfSxfbmV3SW5zdDpmdW5jdGlvbih0LGkpe3ZhciBzPXRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1xcLV0pL2csXCJcXFxcXFxcXCQxXCIpO3JldHVybntpZDpzLGlucHV0OnQsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6aSxkcERpdjppP2EoZShcIjxkaXYgY2xhc3M9J1wiK3RoaXMuX2lubGluZUNsYXNzK1wiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIikpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHQpO2kuYXBwZW5kPWUoW10pLGkudHJpZ2dlcj1lKFtdKSxzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHRoaXMuX2F0dGFjaG1lbnRzKHMsaSkscy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLHRoaXMuX2F1dG9TaXplKGkpLGUuZGF0YSh0LFwiZGF0ZXBpY2tlclwiLGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpKX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89dGhpcy5fZ2V0KGksXCJhcHBlbmRUZXh0XCIpLHI9dGhpcy5fZ2V0KGksXCJpc1JUTFwiKTtpLmFwcGVuZCYmaS5hcHBlbmQucmVtb3ZlKCksbyYmKGkuYXBwZW5kPWUoXCI8c3BhbiBjbGFzcz0nXCIrdGhpcy5fYXBwZW5kQ2xhc3MrXCInPlwiK28rXCI8L3NwYW4+XCIpLHRbcj9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0oaS5hcHBlbmQpKSx0LnVuYmluZChcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGkudHJpZ2dlciYmaS50cmlnZ2VyLnJlbW92ZSgpLHM9dGhpcy5fZ2V0KGksXCJzaG93T25cIiksKFwiZm9jdXNcIj09PXN8fFwiYm90aFwiPT09cykmJnQuZm9jdXModGhpcy5fc2hvd0RhdGVwaWNrZXIpLChcImJ1dHRvblwiPT09c3x8XCJib3RoXCI9PT1zKSYmKG49dGhpcy5fZ2V0KGksXCJidXR0b25UZXh0XCIpLGE9dGhpcy5fZ2V0KGksXCJidXR0b25JbWFnZVwiKSxpLnRyaWdnZXI9ZSh0aGlzLl9nZXQoaSxcImJ1dHRvbkltYWdlT25seVwiKT9lKFwiPGltZy8+XCIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuYXR0cih7c3JjOmEsYWx0Om4sdGl0bGU6bn0pOmUoXCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+XCIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChhP2UoXCI8aW1nLz5cIikuYXR0cih7c3JjOmEsYWx0Om4sdGl0bGU6bn0pOm4pKSx0W3I/XCJiZWZvcmVcIjpcImFmdGVyXCJdKGkudHJpZ2dlciksaS50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09dFswXT9lLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6ZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT10WzBdPyhlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSk6ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSwhMX0pKX0sX2F1dG9TaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2dldChlLFwiYXV0b1NpemVcIikmJiFlLmlubGluZSl7dmFyIHQsaSxzLG4sYT1uZXcgRGF0ZSgyMDA5LDExLDIwKSxvPXRoaXMuX2dldChlLFwiZGF0ZUZvcm1hdFwiKTtvLm1hdGNoKC9bRE1dLykmJih0PWZ1bmN0aW9uKGUpe2ZvcihpPTAscz0wLG49MDtlLmxlbmd0aD5uO24rKyllW25dLmxlbmd0aD5pJiYoaT1lW25dLmxlbmd0aCxzPW4pO3JldHVybiBzfSxhLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsby5tYXRjaCgvTU0vKT9cIm1vbnRoTmFtZXNcIjpcIm1vbnRoTmFtZXNTaG9ydFwiKSkpLGEuc2V0RGF0ZSh0KHRoaXMuX2dldChlLG8ubWF0Y2goL0RELyk/XCJkYXlOYW1lc1wiOlwiZGF5TmFtZXNTaG9ydFwiKSkrMjAtYS5nZXREYXkoKSkpLGUuaW5wdXQuYXR0cihcInNpemVcIix0aGlzLl9mb3JtYXREYXRlKGUsYSkubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSxlLmRhdGEodCxcImRhdGVwaWNrZXJcIixpKSx0aGlzLl9zZXREYXRlKGksdGhpcy5fZ2V0RGVmYXVsdERhdGUoaSksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpLGkuZHBEaXYuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkscyxuLGEpe3ZhciBvLGgsbCx1LGQsYz10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBjfHwodGhpcy51dWlkKz0xLG89XCJkcFwiK3RoaXMudXVpZCx0aGlzLl9kaWFsb2dJbnB1dD1lKFwiPGlucHV0IHR5cGU9J3RleHQnIGlkPSdcIitvK1wiJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsnLz5cIiksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLGUoXCJib2R5XCIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksYz10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLGMuc2V0dGluZ3M9e30sZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGMpKSxyKGMuc2V0dGluZ3Msbnx8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShjLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1hP2EubGVuZ3RoP2E6W2EucGFnZVgsYS5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtoLzItMTAwK3UsbC8yLTE1MCtkXSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKFwibGVmdFwiLHRoaXMuX3Bvc1swXSsyMCtcInB4XCIpLmNzcyhcInRvcFwiLHRoaXMuX3Bvc1sxXStcInB4XCIpLGMuc2V0dGluZ3Mub25TZWxlY3Q9cyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksZS5ibG9ja1VJJiZlLmJsb2NrVUkodGhpcy5kcERpdiksZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGMpLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzPWUodCksbj1lLmRhdGEodCxcImRhdGVwaWNrZXJcIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlLnJlbW92ZURhdGEodCxcImRhdGVwaWNrZXJcIiksXCJpbnB1dFwiPT09aT8obi5hcHBlbmQucmVtb3ZlKCksbi50cmlnZ2VyLnJlbW92ZSgpLHMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLnVuYmluZChcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZChcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLnVuYmluZChcImtleXByZXNzXCIsdGhpcy5fZG9LZXlQcmVzcykudW5iaW5kKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSk6KFwiZGl2XCI9PT1pfHxcInNwYW5cIj09PWkpJiZzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpLHY9PT1uJiYodj1udWxsKSl9LF9lbmFibGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj1lKHQpLGE9ZS5kYXRhKHQsXCJkYXRlcGlja2VyXCIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXCJpbnB1dFwiPT09aT8odC5kaXNhYmxlZD0hMSxhLnRyaWdnZXIuZmlsdGVyKFwiYnV0dG9uXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSExfSkuZW5kKCkuZmlsdGVyKFwiaW1nXCIpLmNzcyh7b3BhY2l0eTpcIjEuMFwiLGN1cnNvcjpcIlwifSkpOihcImRpdlwiPT09aXx8XCJzcGFuXCI9PT1pKSYmKHM9bi5jaGlsZHJlbihcIi5cIit0aGlzLl9pbmxpbmVDbGFzcykscy5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIikscy5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITEpKSx0aGlzLl9kaXNhYmxlZElucHV0cz1lLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/bnVsbDplfSkpfSxfZGlzYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxuPWUodCksYT1lLmRhdGEodCxcImRhdGVwaWNrZXJcIik7bi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcImlucHV0XCI9PT1pPyh0LmRpc2FibGVkPSEwLGEudHJpZ2dlci5maWx0ZXIoXCJidXR0b25cIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoXCJpbWdcIikuY3NzKHtvcGFjaXR5OlwiMC41XCIsY3Vyc29yOlwiZGVmYXVsdFwifSkpOihcImRpdlwiPT09aXx8XCJzcGFuXCI9PT1pKSYmKHM9bi5jaGlsZHJlbihcIi5cIit0aGlzLl9pbmxpbmVDbGFzcykscy5jaGlsZHJlbigpLmFkZENsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIikscy5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITApKSx0aGlzLl9kaXNhYmxlZElucHV0cz1lLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/bnVsbDplfSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT10KX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO2Zvcih2YXIgdD0wO3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aD50O3QrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1t0XT09PWUpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZS5kYXRhKHQsXCJkYXRlcGlja2VyXCIpfWNhdGNoKGkpe3Rocm93XCJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlclwifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxoLGw9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBpP1wiZGVmYXVsdHNcIj09PWk/ZS5leHRlbmQoe30sZS5kYXRlcGlja2VyLl9kZWZhdWx0cyk6bD9cImFsbFwiPT09aT9lLmV4dGVuZCh7fSxsLnNldHRpbmdzKTp0aGlzLl9nZXQobCxpKTpudWxsOihuPWl8fHt9LFwic3RyaW5nXCI9PXR5cGVvZiBpJiYobj17fSxuW2ldPXMpLGwmJih0aGlzLl9jdXJJbnN0PT09bCYmdGhpcy5faGlkZURhdGVwaWNrZXIoKSxhPXRoaXMuX2dldERhdGVEYXRlcGlja2VyKHQsITApLG89dGhpcy5fZ2V0TWluTWF4RGF0ZShsLFwibWluXCIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLFwibWF4XCIpLHIobC5zZXR0aW5ncyxuKSxudWxsIT09byYmdm9pZCAwIT09bi5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1uLm1pbkRhdGUmJihsLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLG8pKSxudWxsIT09aCYmdm9pZCAwIT09bi5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1uLm1heERhdGUmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGgpKSxcImRpc2FibGVkXCJpbiBuJiYobi5kaXNhYmxlZD90aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KTp0aGlzLl9lbmFibGVEYXRlcGlja2VyKHQpKSx0aGlzLl9hdHRhY2htZW50cyhlKHQpLGwpLHRoaXMuX2F1dG9TaXplKGwpLHRoaXMuX3NldERhdGUobCxhKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihsKSksdm9pZCAwKX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0LGkpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIoZSx0LGkpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0SW5zdChlKTt0JiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKHQpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRJbnN0KGUpO2kmJih0aGlzLl9zZXREYXRlKGksdCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSkpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRJbnN0KGUpO3JldHVybiBpJiYhaS5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoaSx0KSxpP3RoaXMuX2dldERhdGUoaSk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYT1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpLG89ITAscj1hLmRwRGl2LmlzKFwiLnVpLWRhdGVwaWNrZXItcnRsXCIpO2lmKGEuX2tleUV2ZW50PSEwLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA5OmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxvPSExO2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG49ZShcInRkLlwiK2UuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzK1wiOm5vdCguXCIrZS5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrXCIpXCIsYS5kcERpdiksblswXSYmZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQsYS5zZWxlY3RlZE1vbnRoLGEuc2VsZWN0ZWRZZWFyLG5bMF0pLGk9ZS5kYXRlcGlja2VyLl9nZXQoYSxcIm9uU2VsZWN0XCIpLGk/KHM9ZS5kYXRlcGlja2VyLl9mb3JtYXREYXRlKGEpLGkuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW3MsYV0pKTplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzplLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChhLFwic3RlcEJpZ01vbnRoc1wiKTotZS5kYXRlcGlja2VyLl9nZXQoYSxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzQ6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8rZS5kYXRlcGlja2VyLl9nZXQoYSxcInN0ZXBCaWdNb250aHNcIik6K2UuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM1Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQscj8xOi0xLFwiRFwiKSxvPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/LWUuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzdGVwQmlnTW9udGhzXCIpOi1lLmRhdGVwaWNrZXIuX2dldChhLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzODoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsLTcsXCJEXCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzOToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQscj8tMToxLFwiRFwiKSxvPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzdGVwQmlnTW9udGhzXCIpOitlLmRhdGVwaWNrZXIuX2dldChhLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSA0MDoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsNyxcIkRcIiksbz10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztkZWZhdWx0Om89ITF9ZWxzZSAzNj09PXQua2V5Q29kZSYmdC5jdHJsS2V5P2UuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcyk6bz0hMTtvJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfZG9LZXlQcmVzczpmdW5jdGlvbih0KXt2YXIgaSxzLG49ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQudGFyZ2V0KTtcbnJldHVybiBlLmRhdGVwaWNrZXIuX2dldChuLFwiY29uc3RyYWluSW5wdXRcIik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KG4sXCJkYXRlRm9ybWF0XCIpKSxzPVN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09dC5jaGFyQ29kZT90LmtleUNvZGU6dC5jaGFyQ29kZSksdC5jdHJsS2V5fHx0Lm1ldGFLZXl8fFwiIFwiPnN8fCFpfHxpLmluZGV4T2Yocyk+LTEpOnZvaWQgMH0sX2RvS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGkscz1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpO2lmKHMuaW5wdXQudmFsKCkhPT1zLmxhc3RWYWwpdHJ5e2k9ZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldChzLFwiZGF0ZUZvcm1hdFwiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKG4pe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsXCJpbnB1dFwiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYodD1lKFwiaW5wdXRcIix0LnBhcmVudE5vZGUpWzBdKSwhZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0KSYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT10KXt2YXIgaSxuLGEsbyxoLGwsdTtpPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0KSxlLmRhdGVwaWNrZXIuX2N1ckluc3QmJmUuZGF0ZXBpY2tlci5fY3VySW5zdCE9PWkmJihlLmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksaSYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcihlLmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKSxuPWUuZGF0ZXBpY2tlci5fZ2V0KGksXCJiZWZvcmVTaG93XCIpLGE9bj9uLmFwcGx5KHQsW3QsaV0pOnt9LGEhPT0hMSYmKHIoaS5zZXR0aW5ncyxhKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT1cIlwiKSxlLmRhdGVwaWNrZXIuX3Bvc3x8KGUuZGF0ZXBpY2tlci5fcG9zPWUuZGF0ZXBpY2tlci5fZmluZFBvcyh0KSxlLmRhdGVwaWNrZXIuX3Bvc1sxXSs9dC5vZmZzZXRIZWlnaHQpLG89ITEsZSh0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiBvfD1cImZpeGVkXCI9PT1lKHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpLCFvfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsZGlzcGxheTpcImJsb2NrXCIsdG9wOlwiLTEwMDBweFwifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsbyksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST9cInN0YXRpY1wiOm8/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIixkaXNwbGF5Olwibm9uZVwiLGxlZnQ6aC5sZWZ0K1wicHhcIix0b3A6aC50b3ArXCJweFwifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksXCJzaG93QW5pbVwiKSx1PWUuZGF0ZXBpY2tlci5fZ2V0KGksXCJkdXJhdGlvblwiKSxpLmRwRGl2LmNzcyhcInotaW5kZXhcIixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksXCJzaG93T3B0aW9uc1wiKSx1KTppLmRwRGl2W2x8fFwic2hvd1wiXShsP3U6bnVsbCksZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpJiZpLmlucHV0LmZvY3VzKCksZS5kYXRlcGlja2VyLl9jdXJJbnN0PWkpKX19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3RoaXMubWF4Um93cz00LHY9dCx0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTCh0KSksdGhpcy5fYXR0YWNoSGFuZGxlcnModCk7dmFyIGkscz10aGlzLl9nZXROdW1iZXJPZk1vbnRocyh0KSxuPXNbMV0sYT0xNyxyPXQuZHBEaXYuZmluZChcIi5cIit0aGlzLl9kYXlPdmVyQ2xhc3MrXCIgYVwiKTtyLmxlbmd0aD4wJiZvLmFwcGx5KHIuZ2V0KDApKSx0LmRwRGl2LnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTRcIikud2lkdGgoXCJcIiksbj4xJiZ0LmRwRGl2LmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS1cIituKS5jc3MoXCJ3aWR0aFwiLGEqbitcImVtXCIpLHQuZHBEaXZbKDEhPT1zWzBdfHwxIT09c1sxXT9cImFkZFwiOlwicmVtb3ZlXCIpK1wiQ2xhc3NcIl0oXCJ1aS1kYXRlcGlja2VyLW11bHRpXCIpLHQuZHBEaXZbKHRoaXMuX2dldCh0LFwiaXNSVExcIik/XCJhZGRcIjpcInJlbW92ZVwiKStcIkNsYXNzXCJdKFwidWktZGF0ZXBpY2tlci1ydGxcIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHQpJiZ0LmlucHV0LmZvY3VzKCksdC55ZWFyc2h0bWwmJihpPXQueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09dC55ZWFyc2h0bWwmJnQueWVhcnNodG1sJiZ0LmRwRGl2LmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIpLnJlcGxhY2VXaXRoKHQueWVhcnNodG1sKSxpPXQueWVhcnNodG1sPW51bGx9LDApKX0sX3Nob3VsZEZvY3VzSW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5wdXQmJmUuaW5wdXQuaXMoXCI6dmlzaWJsZVwiKSYmIWUuaW5wdXQuaXMoXCI6ZGlzYWJsZWRcIikmJiFlLmlucHV0LmlzKFwiOmZvY3VzXCIpfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXQuZHBEaXYub3V0ZXJXaWR0aCgpLGE9dC5kcERpdi5vdXRlckhlaWdodCgpLG89dC5pbnB1dD90LmlucHV0Lm91dGVyV2lkdGgoKTowLHI9dC5pbnB1dD90LmlucHV0Lm91dGVySGVpZ2h0KCk6MCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsocz8wOmUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhzPzA6ZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBpLmxlZnQtPXRoaXMuX2dldCh0LFwiaXNSVExcIik/bi1vOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT10LmlucHV0Lm9mZnNldCgpLmxlZnQ/ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09dC5pbnB1dC5vZmZzZXQoKS50b3Arcj9lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtuPmgmJmg+bj9NYXRoLmFicyhpLmxlZnQrbi1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3ArYT5sJiZsPmE/TWF0aC5hYnMoYStyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbih0KXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KHQpLG49dGhpcy5fZ2V0KHMsXCJpc1JUTFwiKTt0JiYoXCJoaWRkZW5cIj09PXQudHlwZXx8MSE9PXQubm9kZVR5cGV8fGUuZXhwci5maWx0ZXJzLmhpZGRlbih0KSk7KXQ9dFtuP1wicHJldmlvdXNTaWJsaW5nXCI6XCJuZXh0U2libGluZ1wiXTtyZXR1cm4gaT1lKHQpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz10aGlzLl9jdXJJbnN0OyFvfHx0JiZvIT09ZS5kYXRhKHQsXCJkYXRlcGlja2VyXCIpfHx0aGlzLl9kYXRlcGlja2VyU2hvd2luZyYmKGk9dGhpcy5fZ2V0KG8sXCJzaG93QW5pbVwiKSxzPXRoaXMuX2dldChvLFwiZHVyYXRpb25cIiksbj1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhvKX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtpXXx8ZS5lZmZlY3RzW2ldKT9vLmRwRGl2LmhpZGUoaSxlLmRhdGVwaWNrZXIuX2dldChvLFwic2hvd09wdGlvbnNcIikscyxuKTpvLmRwRGl2W1wic2xpZGVEb3duXCI9PT1pP1wic2xpZGVVcFwiOlwiZmFkZUluXCI9PT1pP1wiZmFkZU91dFwiOlwiaGlkZVwiXShpP3M6bnVsbCxuKSxpfHxuKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsYT10aGlzLl9nZXQobyxcIm9uQ2xvc2VcIiksYSYmYS5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbby5pbnB1dD9vLmlucHV0LnZhbCgpOlwiXCIsb10pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDpcIjBcIix0b3A6XCItMTAwcHhcIn0pLGUuYmxvY2tVSSYmKGUudW5ibG9ja1VJKCksZShcImJvZHlcIikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoXCIudWktZGF0ZXBpY2tlci1jYWxlbmRhclwiKX0sX2NoZWNrRXh0ZXJuYWxDbGljazpmdW5jdGlvbih0KXtpZihlLmRhdGVwaWNrZXIuX2N1ckluc3Qpe3ZhciBpPWUodC50YXJnZXQpLHM9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KGlbMF0pOyhpWzBdLmlkIT09ZS5kYXRlcGlja2VyLl9tYWluRGl2SWQmJjA9PT1pLnBhcmVudHMoXCIjXCIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmIWkuaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiFpLmNsb3Nlc3QoXCIuXCIrZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCFlLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhZS5ibG9ja1VJKXx8aS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09cykmJmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKHQpLGE9dGhpcy5fZ2V0SW5zdChuWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihuWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKGEsaSsoXCJNXCI9PT1zP3RoaXMuX2dldChhLFwic2hvd0N1cnJlbnRBdFBvc1wiKTowKSxzKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGEpKX0sX2dvdG9Ub2RheTpmdW5jdGlvbih0KXt2YXIgaSxzPWUodCksbj10aGlzLl9nZXRJbnN0KHNbMF0pO3RoaXMuX2dldChuLFwiZ290b0N1cnJlbnRcIikmJm4uY3VycmVudERheT8obi5zZWxlY3RlZERheT1uLmN1cnJlbnREYXksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUsbi5zZWxlY3RlZERheT1pLmdldERhdGUoKSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UobiksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbih0LGkscyl7dmFyIG49ZSh0KSxhPXRoaXMuX2dldEluc3QoblswXSk7YVtcInNlbGVjdGVkXCIrKFwiTVwiPT09cz9cIk1vbnRoXCI6XCJZZWFyXCIpXT1hW1wiZHJhd1wiKyhcIk1cIj09PXM/XCJNb250aFwiOlwiWWVhclwiKV09cGFyc2VJbnQoaS5vcHRpb25zW2kuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShhKSx0aGlzLl9hZGp1c3REYXRlKG4pfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKHQsaSxzLG4pe3ZhciBhLG89ZSh0KTtlKG4pLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIob1swXSl8fChhPXRoaXMuX2dldEluc3Qob1swXSksYS5zZWxlY3RlZERheT1hLmN1cnJlbnREYXk9ZShcImFcIixuKS5odG1sKCksYS5zZWxlY3RlZE1vbnRoPWEuY3VycmVudE1vbnRoPWksYS5zZWxlY3RlZFllYXI9YS5jdXJyZW50WWVhcj1zLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKGEsYS5jdXJyZW50RGF5LGEuY3VycmVudE1vbnRoLGEuY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0KTt0aGlzLl9zZWxlY3REYXRlKGksXCJcIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHQpLGE9dGhpcy5fZ2V0SW5zdChuWzBdKTtpPW51bGwhPWk/aTp0aGlzLl9mb3JtYXREYXRlKGEpLGEuaW5wdXQmJmEuaW5wdXQudmFsKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShhKSxzPXRoaXMuX2dldChhLFwib25TZWxlY3RcIikscz9zLmFwcGx5KGEuaW5wdXQ/YS5pbnB1dFswXTpudWxsLFtpLGFdKTphLmlucHV0JiZhLmlucHV0LnRyaWdnZXIoXCJjaGFuZ2VcIiksYS5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihhKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9YS5pbnB1dFswXSxcIm9iamVjdFwiIT10eXBlb2YgYS5pbnB1dFswXSYmYS5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYT10aGlzLl9nZXQodCxcImFsdEZpZWxkXCIpO2EmJihpPXRoaXMuX2dldCh0LFwiYWx0Rm9ybWF0XCIpfHx0aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIikscz10aGlzLl9nZXREYXRlKHQpLG49dGhpcy5mb3JtYXREYXRlKGkscyx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpLGUoYSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykudmFsKG4pfSkpfSxub1dlZWtlbmRzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuW3Q+MCYmNj50LFwiXCJdfSxpc284NjAxV2VlazpmdW5jdGlvbihlKXt2YXIgdCxpPW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpKzQtKGkuZ2V0RGF5KCl8fDcpKSx0PWkuZ2V0VGltZSgpLGkuc2V0TW9udGgoMCksaS5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgodC1pKS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsaSxzKXtpZihudWxsPT10fHxudWxsPT1pKXRocm93XCJJbnZhbGlkIGFyZ3VtZW50c1wiO2lmKGk9XCJvYmplY3RcIj09dHlwZW9mIGk/XCJcIitpOmkrXCJcIixcIlwiPT09aSlyZXR1cm4gbnVsbDt2YXIgbixhLG8scixoPTAsbD0ocz9zLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLHU9XCJzdHJpbmdcIiE9dHlwZW9mIGw/bDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGwsMTApLGQ9KHM/cy5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGM9KHM/cy5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscD0ocz9zLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LGY9KHM/cy5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLG09LTEsZz0tMSx2PS0xLHk9LTEsYj0hMSxfPWZ1bmN0aW9uKGUpe3ZhciBpPXQubGVuZ3RoPm4rMSYmdC5jaGFyQXQobisxKT09PWU7cmV0dXJuIGkmJm4rKyxpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PV8oZSkscz1cIkBcIj09PWU/MTQ6XCIhXCI9PT1lPzIwOlwieVwiPT09ZSYmdD80Olwib1wiPT09ZT8zOjIsbj1cInlcIj09PWU/czoxLGE9UmVnRXhwKFwiXlxcXFxke1wiK24rXCIsXCIrcytcIn1cIiksbz1pLnN1YnN0cmluZyhoKS5tYXRjaChhKTtpZighbyl0aHJvd1wiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gXCIraDtyZXR1cm4gaCs9b1swXS5sZW5ndGgscGFyc2VJbnQob1swXSwxMCl9LHc9ZnVuY3Rpb24odCxzLG4pe3ZhciBhPS0xLG89ZS5tYXAoXyh0KT9uOnMsZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSk7aWYoZS5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgcz10WzFdO3JldHVybiBpLnN1YnN0cihoLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpPyhhPXRbMF0saCs9cy5sZW5ndGgsITEpOnZvaWQgMH0pLC0xIT09YSlyZXR1cm4gYSsxO3Rocm93XCJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gXCIraH0saz1mdW5jdGlvbigpe2lmKGkuY2hhckF0KGgpIT09dC5jaGFyQXQobikpdGhyb3dcIlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiBcIitoO2grK307Zm9yKG49MDt0Lmxlbmd0aD5uO24rKylpZihiKVwiJ1wiIT09dC5jaGFyQXQobil8fF8oXCInXCIpP2soKTpiPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KG4pKXtjYXNlXCJkXCI6dj14KFwiZFwiKTticmVhaztjYXNlXCJEXCI6dyhcIkRcIixkLGMpO2JyZWFrO2Nhc2VcIm9cIjp5PXgoXCJvXCIpO2JyZWFrO2Nhc2VcIm1cIjpnPXgoXCJtXCIpO2JyZWFrO2Nhc2VcIk1cIjpnPXcoXCJNXCIscCxmKTticmVhaztjYXNlXCJ5XCI6bT14KFwieVwiKTticmVhaztjYXNlXCJAXCI6cj1uZXcgRGF0ZSh4KFwiQFwiKSksbT1yLmdldEZ1bGxZZWFyKCksZz1yLmdldE1vbnRoKCkrMSx2PXIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2VcIiFcIjpyPW5ldyBEYXRlKCh4KFwiIVwiKS10aGlzLl90aWNrc1RvMTk3MCkvMWU0KSxtPXIuZ2V0RnVsbFllYXIoKSxnPXIuZ2V0TW9udGgoKSsxLHY9ci5nZXREYXRlKCk7YnJlYWs7Y2FzZVwiJ1wiOl8oXCInXCIpP2soKTpiPSEwO2JyZWFrO2RlZmF1bHQ6aygpfWlmKGkubGVuZ3RoPmgmJihvPWkuc3Vic3RyKGgpLCEvXlxccysvLnRlc3QobykpKXRocm93XCJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6IFwiK287aWYoLTE9PT1tP209KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpOjEwMD5tJiYobSs9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArKHU+PW0/MDotMTAwKSkseT4tMSlmb3IoZz0xLHY9eTs7KXtpZihhPXRoaXMuX2dldERheXNJbk1vbnRoKG0sZy0xKSxhPj12KWJyZWFrO2crKyx2LT1hfWlmKHI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobSxnLTEsdikpLHIuZ2V0RnVsbFllYXIoKSE9PW18fHIuZ2V0TW9udGgoKSsxIT09Z3x8ci5nZXREYXRlKCkhPT12KXRocm93XCJJbnZhbGlkIGRhdGVcIjtyZXR1cm4gcn0sQVRPTTpcInl5LW1tLWRkXCIsQ09PS0lFOlwiRCwgZGQgTSB5eVwiLElTT184NjAxOlwieXktbW0tZGRcIixSRkNfODIyOlwiRCwgZCBNIHlcIixSRkNfODUwOlwiREQsIGRkLU0teVwiLFJGQ18xMDM2OlwiRCwgZCBNIHlcIixSRkNfMTEyMzpcIkQsIGQgTSB5eVwiLFJGQ18yODIyOlwiRCwgZCBNIHl5XCIsUlNTOlwiRCwgZCBNIHlcIixUSUNLUzpcIiFcIixUSU1FU1RBTVA6XCJAXCIsVzNDOlwieXktbW0tZGRcIixfdGlja3NUbzE5NzA6MWU3KjYwKjYwKjI0Kig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSksZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsaSl7aWYoIXQpcmV0dXJuXCJcIjt2YXIgcyxuPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxhPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLG89KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxyPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKHQpe3ZhciBpPWUubGVuZ3RoPnMrMSYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1cIlwiK3Q7aWYoaChlKSlmb3IoO2k+cy5sZW5ndGg7KXM9XCIwXCIrcztyZXR1cm4gc30sdT1mdW5jdGlvbihlLHQsaSxzKXtyZXR1cm4gaChlKT9zW3RdOmlbdF19LGQ9XCJcIixjPSExO2lmKHQpZm9yKHM9MDtlLmxlbmd0aD5zO3MrKylpZihjKVwiJ1wiIT09ZS5jaGFyQXQocyl8fGgoXCInXCIpP2QrPWUuY2hhckF0KHMpOmM9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQocykpe2Nhc2VcImRcIjpkKz1sKFwiZFwiLHQuZ2V0RGF0ZSgpLDIpO2JyZWFrO2Nhc2VcIkRcIjpkKz11KFwiRFwiLHQuZ2V0RGF5KCksbixhKTticmVhaztjYXNlXCJvXCI6ZCs9bChcIm9cIixNYXRoLnJvdW5kKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCktbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLDAsMCkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZVwibVwiOmQrPWwoXCJtXCIsdC5nZXRNb250aCgpKzEsMik7YnJlYWs7Y2FzZVwiTVwiOmQrPXUoXCJNXCIsdC5nZXRNb250aCgpLG8scik7YnJlYWs7Y2FzZVwieVwiOmQrPWgoXCJ5XCIpP3QuZ2V0RnVsbFllYXIoKTooMTA+dC5nZXRZZWFyKCklMTAwP1wiMFwiOlwiXCIpK3QuZ2V0WWVhcigpJTEwMDticmVhaztjYXNlXCJAXCI6ZCs9dC5nZXRUaW1lKCk7YnJlYWs7Y2FzZVwiIVwiOmQrPTFlNCp0LmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlXCInXCI6aChcIidcIik/ZCs9XCInXCI6Yz0hMDticmVhaztkZWZhdWx0OmQrPWUuY2hhckF0KHMpfXJldHVybiBkfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdCxpPVwiXCIscz0hMSxuPWZ1bmN0aW9uKGkpe3ZhciBzPWUubGVuZ3RoPnQrMSYmZS5jaGFyQXQodCsxKT09PWk7cmV0dXJuIHMmJnQrKyxzfTtmb3IodD0wO2UubGVuZ3RoPnQ7dCsrKWlmKHMpXCInXCIhPT1lLmNoYXJBdCh0KXx8bihcIidcIik/aSs9ZS5jaGFyQXQodCk6cz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh0KSl7Y2FzZVwiZFwiOmNhc2VcIm1cIjpjYXNlXCJ5XCI6Y2FzZVwiQFwiOmkrPVwiMDEyMzQ1Njc4OVwiO2JyZWFrO2Nhc2VcIkRcIjpjYXNlXCJNXCI6cmV0dXJuIG51bGw7Y2FzZVwiJ1wiOm4oXCInXCIpP2krPVwiJ1wiOnM9ITA7YnJlYWs7ZGVmYXVsdDppKz1lLmNoYXJBdCh0KX1yZXR1cm4gaX0sX2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT1lLnNldHRpbmdzW3RdP2Uuc2V0dGluZ3NbdF06dGhpcy5fZGVmYXVsdHNbdF19LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9uKGUsdCl7aWYoZS5pbnB1dC52YWwoKSE9PWUubGFzdFZhbCl7dmFyIGk9dGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLHM9ZS5sYXN0VmFsPWUuaW5wdXQ/ZS5pbnB1dC52YWwoKTpudWxsLG49dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksYT1uLG89dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpO3RyeXthPXRoaXMucGFyc2VEYXRlKGkscyxvKXx8bn1jYXRjaChyKXtzPXQ/XCJcIjpzfWUuc2VsZWN0ZWREYXk9YS5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWEuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWEuZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cz9hLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXM/YS5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1zP2EuZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSxcImRlZmF1bHREYXRlXCIpLG5ldyBEYXRlKSl9LF9kZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLHR9LGE9ZnVuY3Rpb24oaSl7dHJ5e3JldHVybiBlLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpLGksZS5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodCkpfWNhdGNoKHMpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT9lLmRhdGVwaWNrZXIuX2dldERhdGUodCk6bnVsbCl8fG5ldyBEYXRlLGE9bi5nZXRGdWxsWWVhcigpLG89bi5nZXRNb250aCgpLHI9bi5nZXREYXRlKCksaD0vKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8XCJkXCIpe2Nhc2VcImRcIjpjYXNlXCJEXCI6cis9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZVwid1wiOmNhc2VcIldcIjpyKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2VcIm1cIjpjYXNlXCJNXCI6bys9cGFyc2VJbnQobFsxXSwxMCkscj1NYXRoLm1pbihyLGUuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoYSxvKSk7YnJlYWs7Y2FzZVwieVwiOmNhc2VcIllcIjphKz1wYXJzZUludChsWzFdLDEwKSxyPU1hdGgubWluKHIsZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChhLG8pKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUoYSxvLHIpfSxvPW51bGw9PWl8fFwiXCI9PT1pP3M6XCJzdHJpbmdcIj09dHlwZW9mIGk/YShpKTpcIm51bWJlclwiPT10eXBlb2YgaT9pc05hTihpKT9zOm4oaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiBvPW8mJlwiSW52YWxpZCBEYXRlXCI9PVwiXCIrbz9zOm8sbyYmKG8uc2V0SG91cnMoMCksby5zZXRNaW51dGVzKDApLG8uc2V0U2Vjb25kcygwKSxvLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qobyl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT8oZS5zZXRIb3VycyhlLmdldEhvdXJzKCk+MTI/ZS5nZXRIb3VycygpKzI6MCksZSk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPSF0LG49ZS5zZWxlY3RlZE1vbnRoLGE9ZS5zZWxlY3RlZFllYXIsbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0LG5ldyBEYXRlKSk7ZS5zZWxlY3RlZERheT1lLmN1cnJlbnREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWUuY3VycmVudE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWUuY3VycmVudFllYXI9by5nZXRGdWxsWWVhcigpLG49PT1lLnNlbGVjdGVkTW9udGgmJmE9PT1lLnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKGUpLHRoaXMuX2FkanVzdEluc3REYXRlKGUpLGUuaW5wdXQmJmUuaW5wdXQudmFsKHM/XCJcIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJlwiXCI9PT1lLmlucHV0LnZhbCgpP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpKTtyZXR1cm4gdH0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldCh0LFwic3RlcE1vbnRoc1wiKSxzPVwiI1wiK3QuaWQucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIik7dC5kcERpdi5maW5kKFwiW2RhdGEtaGFuZGxlcl1cIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9e3ByZXY6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSxcIk1cIil9LG5leHQ6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSxcIk1cIil9LGhpZGU6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkocyl9LHNlbGVjdERheTpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdERheShzLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9udGhcIiksK3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS15ZWFyXCIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsXCJNXCIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKHMsdGhpcyxcIllcIiksITF9fTtlKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWV2ZW50XCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhhbmRsZXJcIildKX0pfSxfZ2VuZXJhdGVIVE1MOmZ1bmN0aW9uKGUpe3ZhciB0LGkscyxuLGEsbyxyLGgsbCx1LGQsYyxwLGYsbSxnLHYseSxiLF8seCx3LGssVCxELFMsTSxDLE4sQSxQLEksSCx6LEYsRSxPLGosVyxMPW5ldyBEYXRlLFI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoTC5nZXRGdWxsWWVhcigpLEwuZ2V0TW9udGgoKSxMLmdldERhdGUoKSkpLFk9dGhpcy5fZ2V0KGUsXCJpc1JUTFwiKSxCPXRoaXMuX2dldChlLFwic2hvd0J1dHRvblBhbmVsXCIpLEo9dGhpcy5fZ2V0KGUsXCJoaWRlSWZOb1ByZXZOZXh0XCIpLHE9dGhpcy5fZ2V0KGUsXCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0XCIpLEs9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksVj10aGlzLl9nZXQoZSxcInNob3dDdXJyZW50QXRQb3NcIiksVT10aGlzLl9nZXQoZSxcInN0ZXBNb250aHNcIiksUT0xIT09S1swXXx8MSE9PUtbMV0sRz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChlLmN1cnJlbnREYXk/bmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpOm5ldyBEYXRlKDk5OTksOSw5KSksWD10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtaW5cIiksJD10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtYXhcIiksWj1lLmRyYXdNb250aC1WLGV0PWUuZHJhd1llYXI7aWYoMD5aJiYoWis9MTIsZXQtLSksJClmb3IodD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSgkLmdldEZ1bGxZZWFyKCksJC5nZXRNb250aCgpLUtbMF0qS1sxXSsxLCQuZ2V0RGF0ZSgpKSksdD1YJiZYPnQ/WDp0O3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQ7KVotLSwwPlomJihaPTExLGV0LS0pO2ZvcihlLmRyYXdNb250aD1aLGUuZHJhd1llYXI9ZXQsaT10aGlzLl9nZXQoZSxcInByZXZUZXh0XCIpLGk9cT90aGlzLmZvcm1hdERhdGUoaSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLVUsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6aSxzPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsLTEsZXQsWik/XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSdcIitpK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoWT9cImVcIjpcIndcIikrXCInPlwiK2krXCI8L3NwYW4+PC9hPlwiOko/XCJcIjpcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9J1wiK2krXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wiZVwiOlwid1wiKStcIic+XCIraStcIjwvc3Bhbj48L2E+XCIsbj10aGlzLl9nZXQoZSxcIm5leHRUZXh0XCIpLG49cT90aGlzLmZvcm1hdERhdGUobix0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaK1UsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6bixhPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxldCxaKT9cIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9J1wiK24rXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wid1wiOlwiZVwiKStcIic+XCIrbitcIjwvc3Bhbj48L2E+XCI6Sj9cIlwiOlwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIrbitcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKFk/XCJ3XCI6XCJlXCIpK1wiJz5cIituK1wiPC9zcGFuPjwvYT5cIixvPXRoaXMuX2dldChlLFwiY3VycmVudFRleHRcIikscj10aGlzLl9nZXQoZSxcImdvdG9DdXJyZW50XCIpJiZlLmN1cnJlbnREYXk/RzpSLG89cT90aGlzLmZvcm1hdERhdGUobyxyLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6byxoPWUuaW5saW5lP1wiXCI6XCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPlwiK3RoaXMuX2dldChlLFwiY2xvc2VUZXh0XCIpK1wiPC9idXR0b24+XCIsbD1CP1wiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz5cIisoWT9oOlwiXCIpKyh0aGlzLl9pc0luUmFuZ2UoZSxyKT9cIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz5cIitvK1wiPC9idXR0b24+XCI6XCJcIikrKFk/XCJcIjpoKStcIjwvZGl2PlwiOlwiXCIsdT1wYXJzZUludCh0aGlzLl9nZXQoZSxcImZpcnN0RGF5XCIpLDEwKSx1PWlzTmFOKHUpPzA6dSxkPXRoaXMuX2dldChlLFwic2hvd1dlZWtcIiksYz10aGlzLl9nZXQoZSxcImRheU5hbWVzXCIpLHA9dGhpcy5fZ2V0KGUsXCJkYXlOYW1lc01pblwiKSxmPXRoaXMuX2dldChlLFwibW9udGhOYW1lc1wiKSxtPXRoaXMuX2dldChlLFwibW9udGhOYW1lc1Nob3J0XCIpLGc9dGhpcy5fZ2V0KGUsXCJiZWZvcmVTaG93RGF5XCIpLHY9dGhpcy5fZ2V0KGUsXCJzaG93T3RoZXJNb250aHNcIikseT10aGlzLl9nZXQoZSxcInNlbGVjdE90aGVyTW9udGhzXCIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksXz1cIlwiLHc9MDtLWzBdPnc7dysrKXtmb3Ioaz1cIlwiLHRoaXMubWF4Um93cz00LFQ9MDtLWzFdPlQ7VCsrKXtpZihEPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosZS5zZWxlY3RlZERheSkpLFM9XCIgdWktY29ybmVyLWFsbFwiLE09XCJcIixRKXtpZihNKz1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXBcIixLWzFdPjEpc3dpdGNoKFQpe2Nhc2UgMDpNKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLWZpcnN0XCIsUz1cIiB1aS1jb3JuZXItXCIrKFk/XCJyaWdodFwiOlwibGVmdFwiKTticmVhaztjYXNlIEtbMV0tMTpNKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3RcIixTPVwiIHVpLWNvcm5lci1cIisoWT9cImxlZnRcIjpcInJpZ2h0XCIpO2JyZWFrO2RlZmF1bHQ6TSs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGVcIixTPVwiXCJ9TSs9XCInPlwifWZvcihNKz1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIrUytcIic+XCIrKC9hbGx8bGVmdC8udGVzdChTKSYmMD09PXc/WT9hOnM6XCJcIikrKC9hbGx8cmlnaHQvLnRlc3QoUykmJjA9PT13P1k/czphOlwiXCIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGUsWixldCxYLCQsdz4wfHxUPjAsZixtKStcIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPlwiK1wiPHRyPlwiLEM9ZD9cIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KGUsXCJ3ZWVrSGVhZGVyXCIpK1wiPC90aD5cIjpcIlwiLHg9MDs3Png7eCsrKU49KHgrdSklNyxDKz1cIjx0aCBzY29wZT0nY29sJ1wiKygoeCt1KzYpJTc+PTU/XCIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnXCI6XCJcIikrXCI+XCIrXCI8c3BhbiB0aXRsZT0nXCIrY1tOXStcIic+XCIrcFtOXStcIjwvc3Bhbj48L3RoPlwiO2ZvcihNKz1DK1wiPC90cj48L3RoZWFkPjx0Ym9keT5cIixBPXRoaXMuX2dldERheXNJbk1vbnRoKGV0LFopLGV0PT09ZS5zZWxlY3RlZFllYXImJlo9PT1lLnNlbGVjdGVkTW9udGgmJihlLnNlbGVjdGVkRGF5PU1hdGgubWluKGUuc2VsZWN0ZWREYXksQSkpLFA9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChldCxaKS11KzcpJTcsST1NYXRoLmNlaWwoKFArQSkvNyksSD1RP3RoaXMubWF4Um93cz5JP3RoaXMubWF4Um93czpJOkksdGhpcy5tYXhSb3dzPUgsej10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEtUCkpLEY9MDtIPkY7RisrKXtmb3IoTSs9XCI8dHI+XCIsRT1kP1wiPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz5cIit0aGlzLl9nZXQoZSxcImNhbGN1bGF0ZVdlZWtcIikoeikrXCI8L3RkPlwiOlwiXCIseD0wOzc+eDt4KyspTz1nP2cuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW3pdKTpbITAsXCJcIl0saj16LmdldE1vbnRoKCkhPT1aLFc9aiYmIXl8fCFPWzBdfHxYJiZYPnp8fCQmJno+JCxFKz1cIjx0ZCBjbGFzcz0nXCIrKCh4K3UrNiklNz49NT9cIiB1aS1kYXRlcGlja2VyLXdlZWstZW5kXCI6XCJcIikrKGo/XCIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aFwiOlwiXCIpKyh6LmdldFRpbWUoKT09PUQuZ2V0VGltZSgpJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiZlLl9rZXlFdmVudHx8Yi5nZXRUaW1lKCk9PT16LmdldFRpbWUoKSYmYi5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKT9cIiBcIit0aGlzLl9kYXlPdmVyQ2xhc3M6XCJcIikrKFc/XCIgXCIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrXCIgdWktc3RhdGUtZGlzYWJsZWRcIjpcIlwiKSsoaiYmIXY/XCJcIjpcIiBcIitPWzFdKyh6LmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIFwiK3RoaXMuX2N1cnJlbnRDbGFzczpcIlwiKSsoei5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT9cIiB1aS1kYXRlcGlja2VyLXRvZGF5XCI6XCJcIikpK1wiJ1wiKyhqJiYhdnx8IU9bMl0/XCJcIjpcIiB0aXRsZT0nXCIrT1syXS5yZXBsYWNlKC8nL2csXCImIzM5O1wiKStcIidcIikrKFc/XCJcIjpcIiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9J1wiK3ouZ2V0TW9udGgoKStcIicgZGF0YS15ZWFyPSdcIit6LmdldEZ1bGxZZWFyKCkrXCInXCIpK1wiPlwiKyhqJiYhdj9cIiYjeGEwO1wiOlc/XCI8c3BhbiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCc+XCIrei5nZXREYXRlKCkrXCI8L3NwYW4+XCI6XCI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdFwiKyh6LmdldFRpbWUoKT09PVIuZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWhpZ2hsaWdodFwiOlwiXCIpKyh6LmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWFjdGl2ZVwiOlwiXCIpKyhqP1wiIHVpLXByaW9yaXR5LXNlY29uZGFyeVwiOlwiXCIpK1wiJyBocmVmPScjJz5cIit6LmdldERhdGUoKStcIjwvYT5cIikrXCI8L3RkPlwiLHouc2V0RGF0ZSh6LmdldERhdGUoKSsxKSx6PXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHopO00rPUUrXCI8L3RyPlwifVorKyxaPjExJiYoWj0wLGV0KyspLE0rPVwiPC90Ym9keT48L3RhYmxlPlwiKyhRP1wiPC9kaXY+XCIrKEtbMF0+MCYmVD09PUtbMV0tMT9cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj5cIjpcIlwiKTpcIlwiKSxrKz1NfV8rPWt9cmV0dXJuIF8rPWwsZS5fa2V5RXZlbnQ9ITEsX30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxpLHMsbixhLG8scil7dmFyIGgsbCx1LGQsYyxwLGYsbSxnPXRoaXMuX2dldChlLFwiY2hhbmdlTW9udGhcIiksdj10aGlzLl9nZXQoZSxcImNoYW5nZVllYXJcIikseT10aGlzLl9nZXQoZSxcInNob3dNb250aEFmdGVyWWVhclwiKSxiPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+XCIsXz1cIlwiO2lmKGF8fCFnKV8rPVwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPlwiK29bdF0rXCI8L3NwYW4+XCI7ZWxzZXtmb3IoaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLGw9biYmbi5nZXRGdWxsWWVhcigpPT09aSxfKz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCIsdT0wOzEyPnU7dSsrKSghaHx8dT49cy5nZXRNb250aCgpKSYmKCFsfHxuLmdldE1vbnRoKCk+PXUpJiYoXys9XCI8b3B0aW9uIHZhbHVlPSdcIit1K1wiJ1wiKyh1PT09dD9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrclt1XStcIjwvb3B0aW9uPlwiKTtfKz1cIjwvc2VsZWN0PlwifWlmKHl8fChiKz1fKyghYSYmZyYmdj9cIlwiOlwiJiN4YTA7XCIpKSwhZS55ZWFyc2h0bWwpaWYoZS55ZWFyc2h0bWw9XCJcIixhfHwhdiliKz1cIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPlwiK2krXCI8L3NwYW4+XCI7ZWxzZXtmb3IoZD10aGlzLl9nZXQoZSxcInllYXJSYW5nZVwiKS5zcGxpdChcIjpcIiksYz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscD1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9jWytcXC1dLiovKT9pK3BhcnNlSW50KGUuc3Vic3RyaW5nKDEpLDEwKTplLm1hdGNoKC9bK1xcLV0uKi8pP2MrcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2M6dH0sZj1wKGRbMF0pLG09TWF0aC5tYXgoZixwKGRbMV18fFwiXCIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsbT1uP01hdGgubWluKG0sbi5nZXRGdWxsWWVhcigpKTptLGUueWVhcnNodG1sKz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiO20+PWY7ZisrKWUueWVhcnNodG1sKz1cIjxvcHRpb24gdmFsdWU9J1wiK2YrXCInXCIrKGY9PT1pP1wiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIjpcIlwiKStcIj5cIitmK1wiPC9vcHRpb24+XCI7ZS55ZWFyc2h0bWwrPVwiPC9zZWxlY3Q+XCIsYis9ZS55ZWFyc2h0bWwsZS55ZWFyc2h0bWw9bnVsbH1yZXR1cm4gYis9dGhpcy5fZ2V0KGUsXCJ5ZWFyU3VmZml4XCIpLHkmJihiKz0oIWEmJmcmJnY/XCJcIjpcIiYjeGEwO1wiKStfKSxiKz1cIjwvZGl2PlwifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPWUuZHJhd1llYXIrKFwiWVwiPT09aT90OjApLG49ZS5kcmF3TW9udGgrKFwiTVwiPT09aT90OjApLGE9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLG4pKSsoXCJEXCI9PT1pP3Q6MCksbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsbixhKSkpO2Uuc2VsZWN0ZWREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW8uZ2V0RnVsbFllYXIoKSwoXCJNXCI9PT1pfHxcIllcIj09PWkpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUoZSxcIm1pblwiKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSxcIm1heFwiKSxuPWkmJmk+dD9pOnQ7cmV0dXJuIHMmJm4+cz9zOm59LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsXCJvbkNoYW5nZU1vbnRoWWVhclwiKTt0JiZ0LmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtlLnNlbGVjdGVkWWVhcixlLnNlbGVjdGVkTW9udGgrMSxlXSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSxcIm51bWJlck9mTW9udGhzXCIpO3JldHVybiBudWxsPT10P1sxLDFdOlwibnVtYmVyXCI9PXR5cGVvZiB0P1sxLHRdOnR9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0K1wiRGF0ZVwiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUsdCwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgRGF0ZShlLHQsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgbj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxhPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysoMD50P3Q6blswXSpuWzFdKSwxKSk7cmV0dXJuIDA+dCYmYS5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoZSxhKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtaW5cIiksYT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtYXhcIiksbz1udWxsLHI9bnVsbCxoPXRoaXMuX2dldChlLFwieWVhclJhbmdlXCIpO3JldHVybiBoJiYoaT1oLnNwbGl0KFwiOlwiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxvPXBhcnNlSW50KGlbMF0sMTApLHI9cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcXC1dLiovKSYmKG8rPXMpLGlbMV0ubWF0Y2goL1srXFwtXS4qLykmJihyKz1zKSksKCFufHx0LmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIWF8fHQuZ2V0VGltZSgpPD1hLmdldFRpbWUoKSkmJighb3x8dC5nZXRGdWxsWWVhcigpPj1vKSYmKCFyfHxyPj10LmdldEZ1bGxZZWFyKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLFwic2hvcnRZZWFyQ3V0b2ZmXCIpO3JldHVybiB0PVwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludCh0LDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOnQsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQoZSxcImRheU5hbWVzU2hvcnRcIiksZGF5TmFtZXM6dGhpcy5fZ2V0KGUsXCJkYXlOYW1lc1wiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsXCJtb250aE5hbWVzU2hvcnRcIiksbW9udGhOYW1lczp0aGlzLl9nZXQoZSxcIm1vbnRoTmFtZXNcIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsaSxzKXt0fHwoZS5jdXJyZW50RGF5PWUuc2VsZWN0ZWREYXksZS5jdXJyZW50TW9udGg9ZS5zZWxlY3RlZE1vbnRoLGUuY3VycmVudFllYXI9ZS5zZWxlY3RlZFllYXIpO3ZhciBuPXQ/XCJvYmplY3RcIj09dHlwZW9mIHQ/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGksdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSxcImRhdGVGb3JtYXRcIiksbix0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpfX0pLGUuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbih0KXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7ZS5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwoZShkb2N1bWVudCkubW91c2Vkb3duKGUuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSxlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT1lKFwiI1wiK2UuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJmUoXCJib2R5XCIpLmFwcGVuZChlLmRhdGVwaWNrZXIuZHBEaXYpO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdHx8XCJpc0Rpc2FibGVkXCIhPT10JiZcImdldERhdGVcIiE9PXQmJlwid2lkZ2V0XCIhPT10P1wib3B0aW9uXCI9PT10JiYyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFyZ3VtZW50c1sxXT9lLmRhdGVwaWNrZXJbXCJfXCIrdCtcIkRhdGVwaWNrZXJcIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpOnRoaXMuZWFjaChmdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiB0P2UuZGF0ZXBpY2tlcltcIl9cIit0K1wiRGF0ZXBpY2tlclwiXS5hcHBseShlLmRhdGVwaWNrZXIsW3RoaXNdLmNvbmNhdChpKSk6ZS5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2VyKHRoaXMsdCl9KTplLmRhdGVwaWNrZXJbXCJfXCIrdCtcIkRhdGVwaWNrZXJcIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSxlLmRhdGVwaWNrZXI9bmV3IG4sZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLGUuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGUuZGF0ZXBpY2tlci52ZXJzaW9uPVwiMS4xMS40XCIsZS5kYXRlcGlja2VyLGUud2lkZ2V0KFwidWkuZHJhZ2dhYmxlXCIsZS51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTEuNFwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJhZ1wiLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86XCJwYXJlbnRcIixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjpcImF1dG9cIixjdXJzb3JBdDohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6XCJvcmlnaW5hbFwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZTpcImRlZmF1bHRcIixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZTpcImJvdGhcIixzbmFwVG9sZXJhbmNlOjIwLHN0YWNrOiExLHpJbmRleDohMSxkcmFnOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXtcIm9yaWdpbmFsXCI9PT10aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksdGhpcy5vcHRpb25zLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyhcInVpLWRyYWdnYWJsZVwiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyhcInVpLWRyYWdnYWJsZS1kaXNhYmxlZFwiKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZUluaXQoKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3N1cGVyKGUsdCksXCJoYW5kbGVcIj09PWUmJih0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQpLmlzKFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKT8odGhpcy5kZXN0cm95T25DbGVhcj0hMCx2b2lkIDApOih0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZFwiKSx0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZURlc3Ryb3koKSx2b2lkIDApfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5fYmx1ckFjdGl2ZUVsZW1lbnQodCksdGhpcy5oZWxwZXJ8fGkuZGlzYWJsZWR8fGUodC50YXJnZXQpLmNsb3Nlc3QoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKS5sZW5ndGg+MD8hMToodGhpcy5oYW5kbGU9dGhpcy5fZ2V0SGFuZGxlKHQpLHRoaXMuaGFuZGxlPyh0aGlzLl9ibG9ja0ZyYW1lcyhpLmlmcmFtZUZpeD09PSEwP1wiaWZyYW1lXCI6aS5pZnJhbWVGaXgpLCEwKTohMSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbih0KXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQodCkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZShcIjxkaXY+XCIpLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vdXRlcldpZHRoKHQub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodCh0Lm91dGVySGVpZ2h0KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZG9jdW1lbnRbMF07aWYodGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSl0cnl7aS5hY3RpdmVFbGVtZW50JiZcImJvZHlcIiE9PWkuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlKGkuYWN0aXZlRWxlbWVudCkuYmx1cigpfWNhdGNoKHMpe319LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKHQpLHRoaXMuaGVscGVyLmFkZENsYXNzKFwidWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmKGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuXCJmaXhlZFwiPT09ZSh0aGlzKS5jc3MoXCJwb3NpdGlvblwiKX0pLmxlbmd0aD4wLHRoaXMucG9zaXRpb25BYnM9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX3JlZnJlc2hPZmZzZXRzKHQpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMSksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksaS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihpLmN1cnNvckF0KSx0aGlzLl9zZXRDb250YWlubWVudCgpLHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbm9ybWFsaXplUmlnaHRCb3R0b20oKSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLCFpKXt2YXIgcz10aGlzLl91aUhhc2goKTtpZih0aGlzLl90cmlnZ2VyKFwiZHJhZ1wiLHQscyk9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1zLnBvc2l0aW9ufXJldHVybiB0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIixlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKHM9ZS51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLHQpKSx0aGlzLmRyb3BwZWQmJihzPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLFwiaW52YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmIXN8fFwidmFsaWRcIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKFwic3RvcFwiLHQpIT09ITEmJmkuX2NsZWFyKCl9KTp0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQpIT09ITEmJnRoaXMuX2NsZWFyKCksITF9LF9tb3VzZVVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91bmJsb2NrRnJhbWVzKCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsdCksdGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSYmdGhpcy5lbGVtZW50LmZvY3VzKCksZS51aS5tb3VzZS5wcm90b3R5cGUuX21vdXNlVXAuY2FsbCh0aGlzLHQpfSxjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWxwZXIuaXMoXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIWUodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudD10aGlzLm9wdGlvbnMuaGFuZGxlP3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpOnRoaXMuZWxlbWVudCx0aGlzLmhhbmRsZUVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1kcmFnZ2FibGUtaGFuZGxlXCIpfSxfcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVFbGVtZW50LnJlbW92ZUNsYXNzKFwidWktZHJhZ2dhYmxlLWhhbmRsZVwiKX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz1lLmlzRnVuY3Rpb24oaS5oZWxwZXIpLG49cz9lKGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdF0pKTpcImNsb25lXCI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKFwiaWRcIik6dGhpcy5lbGVtZW50O3JldHVybiBuLnBhcmVudHMoXCJib2R5XCIpLmxlbmd0aHx8bi5hcHBlbmRUbyhcInBhcmVudFwiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzJiZuWzBdPT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksblswXT09PXRoaXMuZWxlbWVudFswXXx8LyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qobi5jc3MoXCJwb3NpdGlvblwiKSl8fG4uY3NzKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLG59LF9zZXRQb3NpdGlvblJlbGF0aXZlOmZ1bmN0aW9uKCl7L14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpKXx8KHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC5zcGxpdChcIiBcIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksXCJsZWZ0XCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLFwicmlnaHRcImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksXCJ0b3BcImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksXCJib3R0b21cImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9pc1Jvb3ROb2RlOmZ1bmN0aW9uKGUpe3JldHVybi8oaHRtbHxib2R5KS9pLnRlc3QoZS50YWdOYW1lKXx8ZT09PXRoaXMuZG9jdW1lbnRbMF19LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKSxpPXRoaXMuZG9jdW1lbnRbMF07cmV0dXJuXCJhYnNvbHV0ZVwiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1pJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKFwicmVsYXRpdmVcIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksdD10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJ0b3BcIiksMTApfHwwKSsodD8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSxsZWZ0OmUubGVmdC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwibGVmdFwiKSwxMCl8fDApKyh0PzA6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpKX19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcyhcIm1hcmdpbkxlZnRcIiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MCxyaWdodDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luUmlnaHRcIiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luQm90dG9tXCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/XCJ3aW5kb3dcIj09PW4uY29udGFpbm1lbnQ/KHRoaXMuY29udGFpbm1lbnQ9W2Uod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsZSh3aW5kb3cpLnNjcm9sbExlZnQoKStlKHdpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LGUod2luZG93KS5zY3JvbGxUb3AoKSsoZSh3aW5kb3cpLmhlaWdodCgpfHxhLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdLHZvaWQgMCk6XCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudD8odGhpcy5jb250YWlubWVudD1bMCwwLGUoYSkud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChlKGEpLmhlaWdodCgpfHxhLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdLHZvaWQgMCk6bi5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09PUFycmF5Pyh0aGlzLmNvbnRhaW5tZW50PW4uY29udGFpbm1lbnQsdm9pZCAwKTooXCJwYXJlbnRcIj09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoXCJvdmVyZmxvd1wiKSksdGhpcy5jb250YWlubWVudD1bKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ0xlZnRcIiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChpLmNzcyhcInBhZGRpbmdUb3BcIiksMTApfHwwKSwodD9NYXRoLm1heChzLnNjcm9sbFdpZHRoLHMub2Zmc2V0V2lkdGgpOnMub2Zmc2V0V2lkdGgpLShwYXJzZUludChpLmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nUmlnaHRcIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwodD9NYXRoLm1heChzLnNjcm9sbEhlaWdodCxzLm9mZnNldEhlaWdodCk6cy5vZmZzZXRIZWlnaHQpLShwYXJzZUludChpLmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSx2b2lkIDApOih0aGlzLmNvbnRhaW5tZW50PW51bGwsdm9pZCAwKVxufSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24oZSx0KXt0fHwodD10aGlzLnBvc2l0aW9uKTt2YXIgaT1cImFic29sdXRlXCI9PT1lPzE6LTEscz10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOnQudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCppK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OnQubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSppfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pLGg9ZS5wYWdlWCxsPWUucGFnZVk7cmV0dXJuIHImJnRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfSksdCYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlQ29udGFpbmVyPyhzPXRoaXMucmVsYXRpdmVDb250YWluZXIub2Zmc2V0KCksaT1bdGhpcy5jb250YWlubWVudFswXStzLmxlZnQsdGhpcy5jb250YWlubWVudFsxXStzLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK3MudG9wXSk6aT10aGlzLmNvbnRhaW5tZW50LGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDxpWzBdJiYoaD1pWzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPGlbMV0mJihsPWlbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXSYmKGg9aVsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdJiYobD1pWzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLG8uZ3JpZCYmKG49by5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChsLXRoaXMub3JpZ2luYWxQYWdlWSkvby5ncmlkWzFdKSpvLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZLGw9aT9uLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXXx8bi10aGlzLm9mZnNldC5jbGljay50b3A+aVszXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdP24tby5ncmlkWzFdOm4rby5ncmlkWzFdOm4sYT1vLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VYKS9vLmdyaWRbMF0pKm8uZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVgsaD1pP2EtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXXx8YS10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0/YTphLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF0/YS1vLmdyaWRbMF06YStvLmdyaWRbMF06YSksXCJ5XCI9PT1vLmF4aXMmJihoPXRoaXMub3JpZ2luYWxQYWdlWCksXCJ4XCI9PT1vLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC50b3A6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLGxlZnQ6aC10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnI/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCl9fSxfY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlci5yZW1vdmVDbGFzcyhcInVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX25vcm1hbGl6ZVJpZ2h0Qm90dG9tOmZ1bmN0aW9uKCl7XCJ5XCIhPT10aGlzLm9wdGlvbnMuYXhpcyYmXCJhdXRvXCIhPT10aGlzLmhlbHBlci5jc3MoXCJyaWdodFwiKSYmKHRoaXMuaGVscGVyLndpZHRoKHRoaXMuaGVscGVyLndpZHRoKCkpLHRoaXMuaGVscGVyLmNzcyhcInJpZ2h0XCIsXCJhdXRvXCIpKSxcInhcIiE9PXRoaXMub3B0aW9ucy5heGlzJiZcImF1dG9cIiE9PXRoaXMuaGVscGVyLmNzcyhcImJvdHRvbVwiKSYmKHRoaXMuaGVscGVyLmhlaWdodCh0aGlzLmhlbHBlci5oZWlnaHQoKSksdGhpcy5oZWxwZXIuY3NzKFwiYm90dG9tXCIsXCJhdXRvXCIpKX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBzPXN8fHRoaXMuX3VpSGFzaCgpLGUudWkucGx1Z2luLmNhbGwodGhpcyx0LFtpLHMsdGhpc10sITApLC9eKGRyYWd8c3RhcnR8c3RvcCkvLnRlc3QodCkmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIikscy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicyksZS5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmNhbGwodGhpcyx0LGkscyl9LHBsdWdpbnM6e30sX3VpSGFzaDpmdW5jdGlvbigpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksZS51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJjb25uZWN0VG9Tb3J0YWJsZVwiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZS5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLnNvcnRhYmxlcz1bXSxlKHMub3B0aW9ucy5jb25uZWN0VG9Tb3J0YWJsZSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykuc29ydGFibGUoXCJpbnN0YW5jZVwiKTtpJiYhaS5vcHRpb25zLmRpc2FibGVkJiYocy5zb3J0YWJsZXMucHVzaChpKSxpLnJlZnJlc2hQb3NpdGlvbnMoKSxpLl90cmlnZ2VyKFwiYWN0aXZhdGVcIix0LG4pKX0pfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lLmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuaXNPdmVyPyhlLmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsZS5fc3RvcmVkQ1NTPXtwb3NpdGlvbjplLnBsYWNlaG9sZGVyLmNzcyhcInBvc2l0aW9uXCIpLHRvcDplLnBsYWNlaG9sZGVyLmNzcyhcInRvcFwiKSxsZWZ0OmUucGxhY2Vob2xkZXIuY3NzKFwibGVmdFwiKX0sZS5fbW91c2VTdG9wKHQpLGUub3B0aW9ucy5oZWxwZXI9ZS5vcHRpb25zLl9oZWxwZXIpOihlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsZS5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIix0LG4pKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXtlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgbj0hMSxhPXRoaXM7YS5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLGEuaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyxhLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayxhLl9pbnRlcnNlY3RzV2l0aChhLmNvbnRhaW5lckNhY2hlKSYmKG49ITAsZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyx0aGlzLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssdGhpcyE9PWEmJnRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyQ2FjaGUpJiZlLmNvbnRhaW5zKGEuZWxlbWVudFswXSx0aGlzLmVsZW1lbnRbMF0pJiYobj0hMSksbn0pKSxuPyhhLmlzT3Zlcnx8KGEuaXNPdmVyPTEscy5fcGFyZW50PWkuaGVscGVyLnBhcmVudCgpLGEuY3VycmVudEl0ZW09aS5oZWxwZXIuYXBwZW5kVG8oYS5lbGVtZW50KS5kYXRhKFwidWktc29ydGFibGUtaXRlbVwiLCEwKSxhLm9wdGlvbnMuX2hlbHBlcj1hLm9wdGlvbnMuaGVscGVyLGEub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LHQudGFyZ2V0PWEuY3VycmVudEl0ZW1bMF0sYS5fbW91c2VDYXB0dXJlKHQsITApLGEuX21vdXNlU3RhcnQodCwhMCwhMCksYS5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxhLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsYS5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LWEub2Zmc2V0LnBhcmVudC5sZWZ0LGEub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3AtYS5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKFwidG9Tb3J0YWJsZVwiLHQpLHMuZHJvcHBlZD1hLmVsZW1lbnQsZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSxzLmN1cnJlbnRJdGVtPXMuZWxlbWVudCxhLmZyb21PdXRzaWRlPXMpLGEuY3VycmVudEl0ZW0mJihhLl9tb3VzZURyYWcodCksaS5wb3NpdGlvbj1hLnBvc2l0aW9uKSk6YS5pc092ZXImJihhLmlzT3Zlcj0wLGEuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxhLm9wdGlvbnMuX3JldmVydD1hLm9wdGlvbnMucmV2ZXJ0LGEub3B0aW9ucy5yZXZlcnQ9ITEsYS5fdHJpZ2dlcihcIm91dFwiLHQsYS5fdWlIYXNoKGEpKSxhLl9tb3VzZVN0b3AodCwhMCksYS5vcHRpb25zLnJldmVydD1hLm9wdGlvbnMuX3JldmVydCxhLm9wdGlvbnMuaGVscGVyPWEub3B0aW9ucy5faGVscGVyLGEucGxhY2Vob2xkZXImJmEucGxhY2Vob2xkZXIucmVtb3ZlKCksaS5oZWxwZXIuYXBwZW5kVG8ocy5fcGFyZW50KSxzLl9yZWZyZXNoT2Zmc2V0cyh0KSxpLnBvc2l0aW9uPXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCkscy5fdHJpZ2dlcihcImZyb21Tb3J0YWJsZVwiLHQpLHMuZHJvcHBlZD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLGUudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiY3Vyc29yXCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKFwiYm9keVwiKSxhPXMub3B0aW9ucztuLmNzcyhcImN1cnNvclwiKSYmKGEuX2N1cnNvcj1uLmNzcyhcImN1cnNvclwiKSksbi5jc3MoXCJjdXJzb3JcIixhLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJmUoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLG4uX2N1cnNvcil9fSksZS51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJvcGFjaXR5XCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKGkuaGVscGVyKSxhPXMub3B0aW9ucztuLmNzcyhcIm9wYWNpdHlcIikmJihhLl9vcGFjaXR5PW4uY3NzKFwib3BhY2l0eVwiKSksbi5jc3MoXCJvcGFjaXR5XCIsYS5vcGFjaXR5KX0sc3RvcDpmdW5jdGlvbih0LGkscyl7dmFyIG49cy5vcHRpb25zO24uX29wYWNpdHkmJmUoaS5oZWxwZXIpLmNzcyhcIm9wYWNpdHlcIixuLl9vcGFjaXR5KX19KSxlLnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInNjcm9sbFwiLHtzdGFydDpmdW5jdGlvbihlLHQsaSl7aS5zY3JvbGxQYXJlbnROb3RIaWRkZW58fChpLnNjcm9sbFBhcmVudE5vdEhpZGRlbj1pLmhlbHBlci5zY3JvbGxQYXJlbnQoITEpKSxpLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXSE9PWkuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09aS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0udGFnTmFtZSYmKGkub3ZlcmZsb3dPZmZzZXQ9aS5zY3JvbGxQYXJlbnROb3RIaWRkZW4ub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnMsYT0hMSxvPXMuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLHI9cy5kb2N1bWVudFswXTtvIT09ciYmXCJIVE1MXCIhPT1vLnRhZ05hbWU/KG4uYXhpcyYmXCJ4XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LnRvcCtvLm9mZnNldEhlaWdodC10LnBhZ2VZPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/by5zY3JvbGxUb3A9YT1vLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOnQucGFnZVktcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG8uc2Nyb2xsVG9wPWE9by5zY3JvbGxUb3Atbi5zY3JvbGxTcGVlZCkpLG4uYXhpcyYmXCJ5XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LmxlZnQrby5vZmZzZXRXaWR0aC10LnBhZ2VYPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/by5zY3JvbGxMZWZ0PWE9by5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6dC5wYWdlWC1zLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG8uc2Nyb2xsTGVmdD1hPW8uc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSkpOihuLmF4aXMmJlwieFwiPT09bi5heGlzfHwodC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiZcInlcIj09PW4uYXhpc3x8KHQucGFnZVgtZShyKS5zY3JvbGxMZWZ0KCk8bi5zY3JvbGxTZW5zaXRpdml0eT9hPWUocikuc2Nyb2xsTGVmdChlKHIpLnNjcm9sbExlZnQoKS1uLnNjcm9sbFNwZWVkKTplKHdpbmRvdykud2lkdGgoKS0odC5wYWdlWC1lKHIpLnNjcm9sbExlZnQoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGE9ZShyKS5zY3JvbGxMZWZ0KGUocikuc2Nyb2xsTGVmdCgpK24uc2Nyb2xsU3BlZWQpKSkpLGEhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHMsdCl9fSksZS51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzbmFwXCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sZShuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHxcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIjpuLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5vZmZzZXQoKTt0aGlzIT09cy5lbGVtZW50WzBdJiZzLnNuYXBFbGVtZW50cy5wdXNoKHtpdGVtOnRoaXMsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSx0b3A6aS50b3AsbGVmdDppLmxlZnR9KX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG8scixoLGwsdSxkLGMscCxmPXMub3B0aW9ucyxtPWYuc25hcFRvbGVyYW5jZSxnPWkub2Zmc2V0LmxlZnQsdj1nK3MuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgseT1pLm9mZnNldC50b3AsYj15K3MuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0O2ZvcihjPXMuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2M+PTA7Yy0tKWg9cy5zbmFwRWxlbWVudHNbY10ubGVmdC1zLm1hcmdpbnMubGVmdCxsPWgrcy5zbmFwRWxlbWVudHNbY10ud2lkdGgsdT1zLnNuYXBFbGVtZW50c1tjXS50b3Atcy5tYXJnaW5zLnRvcCxkPXUrcy5zbmFwRWxlbWVudHNbY10uaGVpZ2h0LGgtbT52fHxnPmwrbXx8dS1tPmJ8fHk+ZCttfHwhZS5jb250YWlucyhzLnNuYXBFbGVtZW50c1tjXS5pdGVtLm93bmVyRG9jdW1lbnQscy5zbmFwRWxlbWVudHNbY10uaXRlbSk/KHMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwocy5lbGVtZW50LHQsZS5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2NdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmc9ITEpOihcImlubmVyXCIhPT1mLnNuYXBNb2RlJiYobj1tPj1NYXRoLmFicyh1LWIpLGE9bT49TWF0aC5hYnMoZC15KSxvPW0+PU1hdGguYWJzKGgtdikscj1tPj1NYXRoLmFicyhsLWcpLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOmQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpoLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8YXx8b3x8cixcIm91dGVyXCIhPT1mLnNuYXBNb2RlJiYobj1tPj1NYXRoLmFicyh1LXkpLGE9bT49TWF0aC5hYnMoZC1iKSxvPW0+PU1hdGguYWJzKGgtZykscj1tPj1NYXRoLmFicyhsLXYpLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOmQtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpofSkubGVmdCksciYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCkpLCFzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmKG58fGF8fG98fHJ8fHApJiZzLm9wdGlvbnMuc25hcC5zbmFwJiZzLm9wdGlvbnMuc25hcC5zbmFwLmNhbGwocy5lbGVtZW50LHQsZS5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2NdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmc9bnx8YXx8b3x8cnx8cCl9fSksZS51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzdGFja1wiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG4sYT1zLm9wdGlvbnMsbz1lLm1ha2VBcnJheShlKGEuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKHQsaSl7cmV0dXJuKHBhcnNlSW50KGUodCkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCktKHBhcnNlSW50KGUoaSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCl9KTtvLmxlbmd0aCYmKG49cGFyc2VJbnQoZShvWzBdKS5jc3MoXCJ6SW5kZXhcIiksMTApfHwwLGUobykuZWFjaChmdW5jdGlvbih0KXtlKHRoaXMpLmNzcyhcInpJbmRleFwiLG4rdCl9KSx0aGlzLmNzcyhcInpJbmRleFwiLG4rby5sZW5ndGgpKX19KSxlLnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInpJbmRleFwiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoXCJ6SW5kZXhcIikmJihhLl96SW5kZXg9bi5jc3MoXCJ6SW5kZXhcIikpLG4uY3NzKFwiekluZGV4XCIsYS56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fekluZGV4JiZlKGkuaGVscGVyKS5jc3MoXCJ6SW5kZXhcIixuLl96SW5kZXgpfX0pLGUudWkuZHJhZ2dhYmxlLGUud2lkZ2V0KFwidWkucmVzaXphYmxlXCIsZS51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTEuNFwiLHdpZGdldEV2ZW50UHJlZml4OlwicmVzaXplXCIsb3B0aW9uczp7YWxzb1Jlc2l6ZTohMSxhbmltYXRlOiExLGFuaW1hdGVEdXJhdGlvbjpcInNsb3dcIixhbmltYXRlRWFzaW5nOlwic3dpbmdcIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6XCJlLHMsc2VcIixoZWxwZXI6ITEsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjkwLHJlc2l6ZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfbnVtOmZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUludChlLDEwKXx8MH0sX2lzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUludChlLDEwKSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24odCxpKXtpZihcImhpZGRlblwiPT09ZSh0KS5jc3MoXCJvdmVyZmxvd1wiKSlyZXR1cm4hMTt2YXIgcz1pJiZcImxlZnRcIj09PWk/XCJzY3JvbGxMZWZ0XCI6XCJzY3JvbGxUb3BcIixuPSExO3JldHVybiB0W3NdPjA/ITA6KHRbc109MSxuPXRbc10+MCx0W3NdPTAsbil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbixhLG89dGhpcyxyPXRoaXMub3B0aW9ucztpZih0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGVcIiksZS5leHRlbmQodGhpcyx7X2FzcGVjdFJhdGlvOiEhci5hc3BlY3RSYXRpbyxhc3BlY3RSYXRpbzpyLmFzcGVjdFJhdGlvLG9yaWdpbmFsRWxlbWVudDp0aGlzLmVsZW1lbnQsX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6W10sX2hlbHBlcjpyLmhlbHBlcnx8ci5naG9zdHx8ci5hbmltYXRlP3IuaGVscGVyfHxcInVpLXJlc2l6YWJsZS1oZWxwZXJcIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAoZShcIjxkaXYgY2xhc3M9J3VpLXdyYXBwZXInIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+PC9kaXY+XCIpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKFwidG9wXCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcyhcImxlZnRcIil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKFwidWktcmVzaXphYmxlXCIsdGhpcy5lbGVtZW50LnJlc2l6YWJsZShcImluc3RhbmNlXCIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5MZWZ0XCIpLG1hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luUmlnaHRcIiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpbkJvdHRvbVwiKX0pLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRvcDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiLFwibm9uZVwiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpcInN0YXRpY1wiLHpvb206MSxkaXNwbGF5OlwiYmxvY2tcIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5cIil9KSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLmhhbmRsZXM9ci5oYW5kbGVzfHwoZShcIi51aS1yZXNpemFibGUtaGFuZGxlXCIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246XCIudWktcmVzaXphYmxlLW5cIixlOlwiLnVpLXJlc2l6YWJsZS1lXCIsczpcIi51aS1yZXNpemFibGUtc1wiLHc6XCIudWktcmVzaXphYmxlLXdcIixzZTpcIi51aS1yZXNpemFibGUtc2VcIixzdzpcIi51aS1yZXNpemFibGUtc3dcIixuZTpcIi51aS1yZXNpemFibGUtbmVcIixudzpcIi51aS1yZXNpemFibGUtbndcIn06XCJlLHMsc2VcIiksdGhpcy5faGFuZGxlcz1lKCksdGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT09U3RyaW5nKWZvcihcImFsbFwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPVwibixlLHMsdyxzZSxzdyxuZSxud1wiKSx0PXRoaXMuaGFuZGxlcy5zcGxpdChcIixcIiksdGhpcy5oYW5kbGVzPXt9LGk9MDt0Lmxlbmd0aD5pO2krKylzPWUudHJpbSh0W2ldKSxhPVwidWktcmVzaXphYmxlLVwiK3Msbj1lKFwiPGRpdiBjbGFzcz0ndWktcmVzaXphYmxlLWhhbmRsZSBcIithK1wiJz48L2Rpdj5cIiksbi5jc3Moe3pJbmRleDpyLnpJbmRleH0pLFwic2VcIj09PXMmJm4uYWRkQ2xhc3MoXCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlXCIpLHRoaXMuaGFuZGxlc1tzXT1cIi51aS1yZXNpemFibGUtXCIrcyx0aGlzLmVsZW1lbnQuYXBwZW5kKG4pO3RoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24odCl7dmFyIGkscyxuLGE7dD10fHx0aGlzLmVsZW1lbnQ7Zm9yKGkgaW4gdGhpcy5oYW5kbGVzKXRoaXMuaGFuZGxlc1tpXS5jb25zdHJ1Y3Rvcj09PVN0cmluZz90aGlzLmhhbmRsZXNbaV09dGhpcy5lbGVtZW50LmNoaWxkcmVuKHRoaXMuaGFuZGxlc1tpXSkuZmlyc3QoKS5zaG93KCk6KHRoaXMuaGFuZGxlc1tpXS5qcXVlcnl8fHRoaXMuaGFuZGxlc1tpXS5ub2RlVHlwZSkmJih0aGlzLmhhbmRsZXNbaV09ZSh0aGlzLmhhbmRsZXNbaV0pLHRoaXMuX29uKHRoaXMuaGFuZGxlc1tpXSx7bW91c2Vkb3duOm8uX21vdXNlRG93bn0pKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXImJnRoaXMub3JpZ2luYWxFbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24pJC9pKSYmKHM9ZSh0aGlzLmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KSxhPS9zd3xuZXxud3xzZXxufHMvLnRlc3QoaSk/cy5vdXRlckhlaWdodCgpOnMub3V0ZXJXaWR0aCgpLG49W1wicGFkZGluZ1wiLC9uZXxud3xuLy50ZXN0KGkpP1wiVG9wXCI6L3NlfHN3fHMvLnRlc3QoaSk/XCJCb3R0b21cIjovXmUkLy50ZXN0KGkpP1wiUmlnaHRcIjpcIkxlZnRcIl0uam9pbihcIlwiKSx0LmNzcyhuLGEpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5oYW5kbGVzW2ldKX0sdGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5lbGVtZW50LmZpbmQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtvLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihuPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxvLmF4aXM9biYmblsxXT9uWzFdOlwic2VcIil9KSxyLmF1dG9IaWRlJiYodGhpcy5faGFuZGxlcy5oaWRlKCksZSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtyLmRpc2FibGVkfHwoZSh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSxvLl9oYW5kbGVzLnNob3coKSl9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8by5yZXNpemluZ3x8KGUodGhpcykuYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIiksby5faGFuZGxlcy5oaWRlKCkpfSkpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciB0LGk9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcyhcInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nXCIpLnJlbW92ZURhdGEoXCJyZXNpemFibGVcIikucmVtb3ZlRGF0YShcInVpLXJlc2l6YWJsZVwiKS51bmJpbmQoXCIucmVzaXphYmxlXCIpLmZpbmQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSx0PXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOnQuY3NzKFwicG9zaXRpb25cIiksd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSx0b3A6dC5jc3MoXCJ0b3BcIiksbGVmdDp0LmNzcyhcImxlZnRcIil9KS5pbnNlcnRBZnRlcih0KSx0LnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJyZXNpemVcIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLGkodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuPSExO2ZvcihpIGluIHRoaXMuaGFuZGxlcylzPWUodGhpcy5oYW5kbGVzW2ldKVswXSwocz09PXQudGFyZ2V0fHxlLmNvbnRhaW5zKHMsdC50YXJnZXQpKSYmKG49ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJm59LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhPXRoaXMub3B0aW9ucyxvPXRoaXMuZWxlbWVudDtyZXR1cm4gdGhpcy5yZXNpemluZz0hMCx0aGlzLl9yZW5kZXJQcm94eSgpLGk9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIikpLHM9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSksYS5jb250YWlubWVudCYmKGkrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLHMrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6dGhpcy5oZWxwZXIud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIuaGVpZ2h0KCl9Ont3aWR0aDpvLndpZHRoKCksaGVpZ2h0Om8uaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6by5vdXRlcldpZHRoKCksaGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5zaXplRGlmZj17d2lkdGg6by5vdXRlcldpZHRoKCktby53aWR0aCgpLGhlaWdodDpvLm91dGVySGVpZ2h0KCktby5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89XCJudW1iZXJcIj09dHlwZW9mIGEuYXNwZWN0UmF0aW8/YS5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDEsbj1lKFwiLnVpLXJlc2l6YWJsZS1cIit0aGlzLmF4aXMpLmNzcyhcImN1cnNvclwiKSxlKFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixcImF1dG9cIj09PW4/dGhpcy5heGlzK1wiLXJlc2l6ZVwiOm4pLG8uYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiksdGhpcy5fcHJvcGFnYXRlKFwic3RhcnRcIix0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG49dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sYT10aGlzLmF4aXMsbz10LnBhZ2VYLW4ubGVmdHx8MCxyPXQucGFnZVktbi50b3B8fDAsaD10aGlzLl9jaGFuZ2VbYV07cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksaD8oaT1oLmFwcGx5KHRoaXMsW3QsbyxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXModC5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSx0KSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLHQpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZShcInJlc2l6ZVwiLHQpLHM9dGhpcy5fYXBwbHlDaGFuZ2VzKCksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksZS5pc0VtcHR5T2JqZWN0KHMpfHwodGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSx0aGlzLl90cmlnZ2VyKFwicmVzaXplXCIsdCx0aGlzLnVpKCkpLHRoaXMuX2FwcGx5Q2hhbmdlcygpKSwhMSk6ITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dGhpcy5yZXNpemluZz0hMTt2YXIgaSxzLG4sYSxvLHIsaCxsPXRoaXMub3B0aW9ucyx1PXRoaXM7cmV0dXJuIHRoaXMuX2hlbHBlciYmKGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxzPWkubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpLG49cyYmdGhpcy5faGFzU2Nyb2xsKGlbMF0sXCJsZWZ0XCIpPzA6dS5zaXplRGlmZi5oZWlnaHQsYT1zPzA6dS5zaXplRGlmZi53aWR0aCxvPXt3aWR0aDp1LmhlbHBlci53aWR0aCgpLWEsaGVpZ2h0OnUuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VJbnQodS5lbGVtZW50LmNzcyhcImxlZnRcIiksMTApKyh1LnBvc2l0aW9uLmxlZnQtdS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGg9cGFyc2VJbnQodS5lbGVtZW50LmNzcyhcInRvcFwiKSwxMCkrKHUucG9zaXRpb24udG9wLXUub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsLGwuYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyhlLmV4dGVuZChvLHt0b3A6aCxsZWZ0OnJ9KSksdS5oZWxwZXIuaGVpZ2h0KHUuc2l6ZS5oZWlnaHQpLHUuaGVscGVyLndpZHRoKHUuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhbC5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSxlKFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixcImF1dG9cIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktcmVzaXphYmxlLXJlc2l6aW5nXCIpLHRoaXMuX3Byb3BhZ2F0ZShcInN0b3BcIix0KSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlUHJldlByb3BlcnRpZXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZQb3NpdGlvbj17dG9wOnRoaXMucG9zaXRpb24udG9wLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0fSx0aGlzLnByZXZTaXplPXt3aWR0aDp0aGlzLnNpemUud2lkdGgsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHR9fSxfYXBwbHlDaGFuZ2VzOmZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHRoaXMucG9zaXRpb24udG9wIT09dGhpcy5wcmV2UG9zaXRpb24udG9wJiYoZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiKSx0aGlzLnBvc2l0aW9uLmxlZnQhPT10aGlzLnByZXZQb3NpdGlvbi5sZWZ0JiYoZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJihlLndpZHRoPXRoaXMuc2l6ZS53aWR0aCtcInB4XCIpLHRoaXMuc2l6ZS5oZWlnaHQhPT10aGlzLnByZXZTaXplLmhlaWdodCYmKGUuaGVpZ2h0PXRoaXMuc2l6ZS5oZWlnaHQrXCJweFwiKSx0aGlzLmhlbHBlci5jc3MoZSksZX0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKGUpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnM7YT17bWluV2lkdGg6dGhpcy5faXNOdW1iZXIoby5taW5XaWR0aCk/by5taW5XaWR0aDowLG1heFdpZHRoOnRoaXMuX2lzTnVtYmVyKG8ubWF4V2lkdGgpP28ubWF4V2lkdGg6MS8wLG1pbkhlaWdodDp0aGlzLl9pc051bWJlcihvLm1pbkhlaWdodCk/by5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6dGhpcy5faXNOdW1iZXIoby5tYXhIZWlnaHQpP28ubWF4SGVpZ2h0OjEvMH0sKHRoaXMuX2FzcGVjdFJhdGlvfHxlKSYmKHQ9YS5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxzPWEubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxpPWEubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sbj1hLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sdD5hLm1pbldpZHRoJiYoYS5taW5XaWR0aD10KSxzPmEubWluSGVpZ2h0JiYoYS5taW5IZWlnaHQ9cyksYS5tYXhXaWR0aD5pJiYoYS5tYXhXaWR0aD1pKSxhLm1heEhlaWdodD5uJiYoYS5tYXhIZWlnaHQ9bikpLHRoaXMuX3ZCb3VuZGFyaWVzPWF9LF91cGRhdGVDYWNoZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLl9pc051bWJlcihlLmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PWUubGVmdCksdGhpcy5faXNOdW1iZXIoZS50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9ZS50b3ApLHRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9ZS5oZWlnaHQpLHRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPWUud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbixpPXRoaXMuc2l6ZSxzPXRoaXMuYXhpcztyZXR1cm4gdGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpP2Uud2lkdGg9ZS5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzp0aGlzLl9pc051bWJlcihlLndpZHRoKSYmKGUuaGVpZ2h0PWUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksXCJzd1wiPT09cyYmKGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksXCJud1wiPT09cyYmKGUudG9wPXQudG9wKyhpLmhlaWdodC1lLmhlaWdodCksZS5sZWZ0PXQubGVmdCsoaS53aWR0aC1lLndpZHRoKSksZX0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZCb3VuZGFyaWVzLGk9dGhpcy5heGlzLHM9dGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJnQubWF4V2lkdGgmJnQubWF4V2lkdGg8ZS53aWR0aCxuPXRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmdC5tYXhIZWlnaHQmJnQubWF4SGVpZ2h0PGUuaGVpZ2h0LGE9dGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJnQubWluV2lkdGgmJnQubWluV2lkdGg+ZS53aWR0aCxvPXRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmdC5taW5IZWlnaHQmJnQubWluSGVpZ2h0PmUuaGVpZ2h0LHI9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsaD10aGlzLnBvc2l0aW9uLnRvcCt0aGlzLnNpemUuaGVpZ2h0LGw9L3N3fG53fHcvLnRlc3QoaSksdT0vbnd8bmV8bi8udGVzdChpKTtyZXR1cm4gYSYmKGUud2lkdGg9dC5taW5XaWR0aCksbyYmKGUuaGVpZ2h0PXQubWluSGVpZ2h0KSxzJiYoZS53aWR0aD10Lm1heFdpZHRoKSxuJiYoZS5oZWlnaHQ9dC5tYXhIZWlnaHQpLGEmJmwmJihlLmxlZnQ9ci10Lm1pbldpZHRoKSxzJiZsJiYoZS5sZWZ0PXItdC5tYXhXaWR0aCksbyYmdSYmKGUudG9wPWgtdC5taW5IZWlnaHQpLG4mJnUmJihlLnRvcD1oLXQubWF4SGVpZ2h0KSxlLndpZHRofHxlLmhlaWdodHx8ZS5sZWZ0fHwhZS50b3A/ZS53aWR0aHx8ZS5oZWlnaHR8fGUudG9wfHwhZS5sZWZ0fHwoZS5sZWZ0PW51bGwpOmUudG9wPW51bGwsZX0sX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9uczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxpPVtdLHM9W2UuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksZS5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLGUuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksZS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIildLG49W2UuY3NzKFwicGFkZGluZ1RvcFwiKSxlLmNzcyhcInBhZGRpbmdSaWdodFwiKSxlLmNzcyhcInBhZGRpbmdCb3R0b21cIiksZS5jc3MoXCJwYWRkaW5nTGVmdFwiKV07ND50O3QrKylpW3RdPXBhcnNlSW50KHNbdF0sMTApfHwwLGlbdF0rPXBhcnNlSW50KG5bdF0sMTApfHwwO3JldHVybntoZWlnaHQ6aVswXStpWzJdLHdpZHRoOmlbMV0raVszXX19LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgZSx0PTAsaT10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoPnQ7dCsrKWU9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1t0XSx0aGlzLm91dGVyRGltZW5zaW9uc3x8KHRoaXMub3V0ZXJEaW1lbnNpb25zPXRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyhlKSksZS5jc3Moe2hlaWdodDppLmhlaWdodCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodHx8MCx3aWR0aDppLndpZHRoKCktdGhpcy5vdXRlckRpbWVuc2lvbnMud2lkdGh8fDB9KX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD10Lm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGUoXCI8ZGl2IHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj5cIiksdGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCktMSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktMSxwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCtcInB4XCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArXCJweFwiLHpJbmRleDorK2kuekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oXCJib2R5XCIpLmRpc2FibGVTZWxlY3Rpb24oKSk6dGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKGUsdCl7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK3R9fSx3OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue2xlZnQ6cy5sZWZ0K3Qsd2lkdGg6aS53aWR0aC10fX0sbjpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcy5vcmlnaW5hbFNpemUsbj10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue3RvcDpuLnRvcCtpLGhlaWdodDpzLmhlaWdodC1pfX0sczpmdW5jdGlvbihlLHQsaSl7cmV0dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQraX19LHNlOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxzdzpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LGksc10pKX0sbmU6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxpLHNdKSl9LG53OmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsaSxzXSkpfX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbih0LGkpe2UudWkucGx1Z2luLmNhbGwodGhpcyx0LFtpLHRoaXMudWkoKV0pLFwicmVzaXplXCIhPT10JiZ0aGlzLl90cmlnZ2VyKHQsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiYW5pbWF0ZVwiLHtzdG9wOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscz1pLm9wdGlvbnMsbj1pLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLGE9bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksbz1hJiZpLl9oYXNTY3JvbGwoblswXSxcImxlZnRcIik/MDppLnNpemVEaWZmLmhlaWdodCxyPWE/MDppLnNpemVEaWZmLndpZHRoLGg9e3dpZHRoOmkuc2l6ZS53aWR0aC1yLGhlaWdodDppLnNpemUuaGVpZ2h0LW99LGw9cGFyc2VJbnQoaS5lbGVtZW50LmNzcyhcImxlZnRcIiksMTApKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLHU9cGFyc2VJbnQoaS5lbGVtZW50LmNzcyhcInRvcFwiKSwxMCkrKGkucG9zaXRpb24udG9wLWkub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2kuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGgsdSYmbD97dG9wOnUsbGVmdDpsfTp7fSkse2R1cmF0aW9uOnMuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpzLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBzPXt3aWR0aDpwYXJzZUludChpLmVsZW1lbnQuY3NzKFwid2lkdGhcIiksMTApLGhlaWdodDpwYXJzZUludChpLmVsZW1lbnQuY3NzKFwiaGVpZ2h0XCIpLDEwKSx0b3A6cGFyc2VJbnQoaS5lbGVtZW50LmNzcyhcInRvcFwiKSwxMCksbGVmdDpwYXJzZUludChpLmVsZW1lbnQuY3NzKFwibGVmdFwiKSwxMCl9O24mJm4ubGVuZ3RoJiZlKG5bMF0pLmNzcyh7d2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHR9KSxpLl91cGRhdGVDYWNoZShzKSxpLl9wcm9wYWdhdGUoXCJyZXNpemVcIix0KX19KX19KSxlLnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImNvbnRhaW5tZW50XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sYSxvLHIsaD1lKHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGw9aC5vcHRpb25zLHU9aC5lbGVtZW50LGQ9bC5jb250YWlubWVudCxjPWQgaW5zdGFuY2VvZiBlP2QuZ2V0KDApOi9wYXJlbnQvLnRlc3QoZCk/dS5wYXJlbnQoKS5nZXQoMCk6ZDtjJiYoaC5jb250YWluZXJFbGVtZW50PWUoYyksL2RvY3VtZW50Ly50ZXN0KGQpfHxkPT09ZG9jdW1lbnQ/KGguY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGguY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0saC5wYXJlbnREYXRhPXtlbGVtZW50OmUoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDplKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDplKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH0pOih0PWUoYyksaT1bXSxlKFtcIlRvcFwiLFwiUmlnaHRcIixcIkxlZnRcIixcIkJvdHRvbVwiXSkuZWFjaChmdW5jdGlvbihlLHMpe2lbZV09aC5fbnVtKHQuY3NzKFwicGFkZGluZ1wiK3MpKX0pLGguY29udGFpbmVyT2Zmc2V0PXQub2Zmc2V0KCksaC5jb250YWluZXJQb3NpdGlvbj10LnBvc2l0aW9uKCksaC5jb250YWluZXJTaXplPXtoZWlnaHQ6dC5pbm5lckhlaWdodCgpLWlbM10sd2lkdGg6dC5pbm5lcldpZHRoKCktaVsxXX0scz1oLmNvbnRhaW5lck9mZnNldCxuPWguY29udGFpbmVyU2l6ZS5oZWlnaHQsYT1oLmNvbnRhaW5lclNpemUud2lkdGgsbz1oLl9oYXNTY3JvbGwoYyxcImxlZnRcIik/Yy5zY3JvbGxXaWR0aDphLHI9aC5faGFzU2Nyb2xsKGMpP2Muc2Nyb2xsSGVpZ2h0Om4saC5wYXJlbnREYXRhPXtlbGVtZW50OmMsbGVmdDpzLmxlZnQsdG9wOnMudG9wLHdpZHRoOm8saGVpZ2h0OnJ9KSl9LHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPWUodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscj1vLm9wdGlvbnMsaD1vLmNvbnRhaW5lck9mZnNldCxsPW8ucG9zaXRpb24sdT1vLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxkPXt0b3A6MCxsZWZ0OjB9LGM9by5jb250YWluZXJFbGVtZW50LHA9ITA7Y1swXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKFwicG9zaXRpb25cIikpJiYoZD1oKSxsLmxlZnQ8KG8uX2hlbHBlcj9oLmxlZnQ6MCkmJihvLnNpemUud2lkdGg9by5zaXplLndpZHRoKyhvLl9oZWxwZXI/by5wb3NpdGlvbi5sZWZ0LWgubGVmdDpvLnBvc2l0aW9uLmxlZnQtZC5sZWZ0KSx1JiYoby5zaXplLmhlaWdodD1vLnNpemUud2lkdGgvby5hc3BlY3RSYXRpbyxwPSExKSxvLnBvc2l0aW9uLmxlZnQ9ci5oZWxwZXI/aC5sZWZ0OjApLGwudG9wPChvLl9oZWxwZXI/aC50b3A6MCkmJihvLnNpemUuaGVpZ2h0PW8uc2l6ZS5oZWlnaHQrKG8uX2hlbHBlcj9vLnBvc2l0aW9uLnRvcC1oLnRvcDpvLnBvc2l0aW9uLnRvcCksdSYmKG8uc2l6ZS53aWR0aD1vLnNpemUuaGVpZ2h0Km8uYXNwZWN0UmF0aW8scD0hMSksby5wb3NpdGlvbi50b3A9by5faGVscGVyP2gudG9wOjApLG49by5jb250YWluZXJFbGVtZW50LmdldCgwKT09PW8uZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksYT0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3Qoby5jb250YWluZXJFbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpKSxuJiZhPyhvLm9mZnNldC5sZWZ0PW8ucGFyZW50RGF0YS5sZWZ0K28ucG9zaXRpb24ubGVmdCxvLm9mZnNldC50b3A9by5wYXJlbnREYXRhLnRvcCtvLnBvc2l0aW9uLnRvcCk6KG8ub2Zmc2V0LmxlZnQ9by5lbGVtZW50Lm9mZnNldCgpLmxlZnQsby5vZmZzZXQudG9wPW8uZWxlbWVudC5vZmZzZXQoKS50b3ApLGk9TWF0aC5hYnMoby5zaXplRGlmZi53aWR0aCsoby5faGVscGVyP28ub2Zmc2V0LmxlZnQtZC5sZWZ0Om8ub2Zmc2V0LmxlZnQtaC5sZWZ0KSkscz1NYXRoLmFicyhvLnNpemVEaWZmLmhlaWdodCsoby5faGVscGVyP28ub2Zmc2V0LnRvcC1kLnRvcDpvLm9mZnNldC50b3AtaC50b3ApKSxpK28uc2l6ZS53aWR0aD49by5wYXJlbnREYXRhLndpZHRoJiYoby5zaXplLndpZHRoPW8ucGFyZW50RGF0YS53aWR0aC1pLHUmJihvLnNpemUuaGVpZ2h0PW8uc2l6ZS53aWR0aC9vLmFzcGVjdFJhdGlvLHA9ITEpKSxzK28uc2l6ZS5oZWlnaHQ+PW8ucGFyZW50RGF0YS5oZWlnaHQmJihvLnNpemUuaGVpZ2h0PW8ucGFyZW50RGF0YS5oZWlnaHQtcyx1JiYoby5zaXplLndpZHRoPW8uc2l6ZS5oZWlnaHQqby5hc3BlY3RSYXRpbyxwPSExKSkscHx8KG8ucG9zaXRpb24ubGVmdD1vLnByZXZQb3NpdGlvbi5sZWZ0LG8ucG9zaXRpb24udG9wPW8ucHJldlBvc2l0aW9uLnRvcCxvLnNpemUud2lkdGg9by5wcmV2U2l6ZS53aWR0aCxvLnNpemUuaGVpZ2h0PW8ucHJldlNpemUuaGVpZ2h0KX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksaT10Lm9wdGlvbnMscz10LmNvbnRhaW5lck9mZnNldCxuPXQuY29udGFpbmVyUG9zaXRpb24sYT10LmNvbnRhaW5lckVsZW1lbnQsbz1lKHQuaGVscGVyKSxyPW8ub2Zmc2V0KCksaD1vLm91dGVyV2lkdGgoKS10LnNpemVEaWZmLndpZHRoLGw9by5vdXRlckhlaWdodCgpLXQuc2l6ZURpZmYuaGVpZ2h0O3QuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KGEuY3NzKFwicG9zaXRpb25cIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSksdC5faGVscGVyJiYhaS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGEuY3NzKFwicG9zaXRpb25cIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSl9fSksZS51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJhbHNvUmVzaXplXCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPXQub3B0aW9ucztlKGkuYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcyhcImxlZnRcIiksMTApLHRvcDpwYXJzZUludCh0LmNzcyhcInRvcFwiKSwxMCl9KX0pfSxyZXNpemU6ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLG49cy5vcHRpb25zLGE9cy5vcmlnaW5hbFNpemUsbz1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtYS5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLWEud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLW8udG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LW8ubGVmdHx8MH07ZShuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHM9ZSh0aGlzKS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIiksbj17fSxhPXQucGFyZW50cyhpLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1tcIndpZHRoXCIsXCJoZWlnaHRcIl06W1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCJdO2UuZWFjaChhLGZ1bmN0aW9uKGUsdCl7dmFyIGk9KHNbdF18fDApKyhyW3RdfHwwKTtpJiZpPj0wJiYoblt0XT1pfHxudWxsKX0pLHQuY3NzKG4pfSl9LHN0b3A6ZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZURhdGEoXCJyZXNpemFibGUtYWxzb3Jlc2l6ZVwiKX19KSxlLnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdob3N0XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPXQub3B0aW9ucyxzPXQuc2l6ZTt0Lmdob3N0PXQub3JpZ2luYWxFbGVtZW50LmNsb25lKCksdC5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6XCJibG9ja1wiLHBvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6cy5oZWlnaHQsd2lkdGg6cy53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1naG9zdFwiKS5hZGRDbGFzcyhcInN0cmluZ1wiPT10eXBlb2YgaS5naG9zdD9pLmdob3N0OlwiXCIpLHQuZ2hvc3QuYXBwZW5kVG8odC5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO3QuZ2hvc3QmJnQuZ2hvc3QuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsaGVpZ2h0OnQuc2l6ZS5oZWlnaHQsd2lkdGg6dC5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO3QuZ2hvc3QmJnQuaGVscGVyJiZ0LmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQodC5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiZ3JpZFwiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdCxpPWUodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscz1pLm9wdGlvbnMsbj1pLnNpemUsYT1pLm9yaWdpbmFsU2l6ZSxvPWkub3JpZ2luYWxQb3NpdGlvbixyPWkuYXhpcyxoPVwibnVtYmVyXCI9PXR5cGVvZiBzLmdyaWQ/W3MuZ3JpZCxzLmdyaWRdOnMuZ3JpZCxsPWhbMF18fDEsdT1oWzFdfHwxLGQ9TWF0aC5yb3VuZCgobi53aWR0aC1hLndpZHRoKS9sKSpsLGM9TWF0aC5yb3VuZCgobi5oZWlnaHQtYS5oZWlnaHQpL3UpKnUscD1hLndpZHRoK2QsZj1hLmhlaWdodCtjLG09cy5tYXhXaWR0aCYmcD5zLm1heFdpZHRoLGc9cy5tYXhIZWlnaHQmJmY+cy5tYXhIZWlnaHQsdj1zLm1pbldpZHRoJiZzLm1pbldpZHRoPnAseT1zLm1pbkhlaWdodCYmcy5taW5IZWlnaHQ+ZjtzLmdyaWQ9aCx2JiYocCs9bCkseSYmKGYrPXUpLG0mJihwLT1sKSxnJiYoZi09dSksL14oc2V8c3xlKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9Zik6L14obmUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPW8udG9wLWMpOi9eKHN3KSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLmxlZnQ9by5sZWZ0LWQpOigoMD49Zi11fHwwPj1wLWwpJiYodD1pLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModGhpcykpLGYtdT4wPyhpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9by50b3AtYyk6KGY9dS10LmhlaWdodCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9by50b3ArYS5oZWlnaHQtZikscC1sPjA/KGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1vLmxlZnQtZCk6KHA9bC10LndpZHRoLGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1vLmxlZnQrYS53aWR0aC1wKSl9fSksZS51aS5yZXNpemFibGUsZS53aWRnZXQoXCJ1aS5kaWFsb2dcIix7dmVyc2lvbjpcIjEuMTEuNFwiLG9wdGlvbnM6e2FwcGVuZFRvOlwiYm9keVwiLGF1dG9PcGVuOiEwLGJ1dHRvbnM6W10sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6XCJDbG9zZVwiLGRpYWxvZ0NsYXNzOlwiXCIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6XCJhdXRvXCIsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6XCJjZW50ZXJcIixhdDpcImNlbnRlclwiLG9mOndpbmRvdyxjb2xsaXNpb246XCJmaXRcIix1c2luZzpmdW5jdGlvbih0KXt2YXIgaT1lKHRoaXMpLmNzcyh0KS5vZmZzZXQoKS50b3A7MD5pJiZlKHRoaXMpLmNzcyhcInRvcFwiLHQudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9wdGlvbnMudGl0bGV8fHRoaXMub3JpZ2luYWxUaXRsZSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKFwidGl0bGVcIikuYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudFwiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9jcmVhdGVUaXRsZWJhcigpLHRoaXMuX2NyZWF0ZUJ1dHRvblBhbmUoKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHRoaXMub3B0aW9ucy5yZXNpemFibGUmJmUuZm4ucmVzaXphYmxlJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCksdGhpcy5faXNPcGVuPSExLHRoaXMuX3RyYWNrRm9jdXMoKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0LmpxdWVyeXx8dC5ub2RlVHlwZSk/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodHx8XCJib2R5XCIpLmVxKDApfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQ2xhc3MoXCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudFwiKS5jc3ModGhpcy5vcmlnaW5hbENzcykuZGV0YWNoKCksdGhpcy51aURpYWxvZy5zdG9wKCEwLCEwKS5yZW1vdmUoKSx0aGlzLm9yaWdpbmFsVGl0bGUmJnRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIix0aGlzLm9yaWdpbmFsVGl0bGUpLGU9dC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSxlLmxlbmd0aCYmZVswXSE9PXRoaXMuZWxlbWVudFswXT9lLmJlZm9yZSh0aGlzLmVsZW1lbnQpOnQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sZGlzYWJsZTplLm5vb3AsZW5hYmxlOmUubm9vcCxjbG9zZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXM7aWYodGhpcy5faXNPcGVuJiZ0aGlzLl90cmlnZ2VyKFwiYmVmb3JlQ2xvc2VcIix0KSE9PSExKXtpZih0aGlzLl9pc09wZW49ITEsdGhpcy5fZm9jdXNlZEVsZW1lbnQ9bnVsbCx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpLCF0aGlzLm9wZW5lci5maWx0ZXIoXCI6Zm9jdXNhYmxlXCIpLmZvY3VzKCkubGVuZ3RoKXRyeXtpPXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCxpJiZcImJvZHlcIiE9PWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpKS5ibHVyKCl9Y2F0Y2gobil7fXRoaXMuX2hpZGUodGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe3MuX3RyaWdnZXIoXCJjbG9zZVwiLHQpfSl9fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlVG9Ub3AoKX0sX21vdmVUb1RvcDpmdW5jdGlvbih0LGkpe3ZhciBzPSExLG49dGhpcy51aURpYWxvZy5zaWJsaW5ncyhcIi51aS1mcm9udDp2aXNpYmxlXCIpLm1hcChmdW5jdGlvbigpe3JldHVybitlKHRoaXMpLmNzcyhcInotaW5kZXhcIil9KS5nZXQoKSxhPU1hdGgubWF4LmFwcGx5KG51bGwsbik7cmV0dXJuIGE+PSt0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIikmJih0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIixhKzEpLHM9ITApLHMmJiFpJiZ0aGlzLl90cmlnZ2VyKFwiZm9jdXNcIix0KSxzfSxvcGVuOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5faXNPcGVuPyh0aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpLHZvaWQgMCk6KHRoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX21vdmVUb1RvcChudWxsLCEwKSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5jc3MoXCJ6LWluZGV4XCIsdGhpcy51aURpYWxvZy5jc3MoXCJ6LWluZGV4XCIpLTEpLHRoaXMuX3Nob3codGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuc2hvdyxmdW5jdGlvbigpe3QuX2ZvY3VzVGFiYmFibGUoKSx0Ll90cmlnZ2VyKFwiZm9jdXNcIil9KSx0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiKSx2b2lkIDApfSxfZm9jdXNUYWJiYWJsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRFbGVtZW50O2V8fChlPXRoaXMuZWxlbWVudC5maW5kKFwiW2F1dG9mb2N1c11cIikpLGUubGVuZ3RofHwoZT10aGlzLmVsZW1lbnQuZmluZChcIjp0YWJiYWJsZVwiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmZpbmQoXCI6dGFiYmFibGVcIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5maWx0ZXIoXCI6dGFiYmFibGVcIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nKSxlLmVxKDApLmZvY3VzKCl9LF9rZWVwRm9jdXM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCxpPXRoaXMudWlEaWFsb2dbMF09PT10fHxlLmNvbnRhaW5zKHRoaXMudWlEaWFsb2dbMF0sdCk7aXx8dGhpcy5fZm9jdXNUYWJiYWJsZSgpfXQucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5fZGVsYXkoaSl9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZz1lKFwiPGRpdj5cIikuYWRkQ2xhc3MoXCJ1aS1kaWFsb2cgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktZnJvbnQgXCIrdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTpcImRpYWxvZ1wifSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fb24odGhpcy51aURpYWxvZyx7a2V5ZG93bjpmdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuY2xvc2VPbkVzY2FwZSYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkmJnQua2V5Q29kZSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UodCksdm9pZCAwO1xuaWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlRBQiYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBpPXRoaXMudWlEaWFsb2cuZmluZChcIjp0YWJiYWJsZVwiKSxzPWkuZmlsdGVyKFwiOmZpcnN0XCIpLG49aS5maWx0ZXIoXCI6bGFzdFwiKTt0LnRhcmdldCE9PW5bMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8dC5zaGlmdEtleT90LnRhcmdldCE9PXNbMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8IXQuc2hpZnRLZXl8fCh0aGlzLl9kZWxheShmdW5jdGlvbigpe24uZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cy5mb2N1cygpfSksdC5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlVG9Ub3AoZSkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZChcIlthcmlhLWRlc2NyaWJlZGJ5XVwiKS5sZW5ndGh8fHRoaXMudWlEaWFsb2cuYXR0cih7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciB0O3RoaXMudWlEaWFsb2dUaXRsZWJhcj1lKFwiPGRpdj5cIikuYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeFwiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLHttb3VzZWRvd246ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdChcIi51aS1kaWFsb2ctdGl0bGViYXItY2xvc2VcIil8fHRoaXMudWlEaWFsb2cuZm9jdXMoKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT1lKFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiKS5idXR0b24oe2xhYmVsOnRoaXMub3B0aW9ucy5jbG9zZVRleHQsaWNvbnM6e3ByaW1hcnk6XCJ1aS1pY29uLWNsb3NldGhpY2tcIn0sdGV4dDohMX0pLmFkZENsYXNzKFwidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpfX0pLHQ9ZShcIjxzcGFuPlwiKS51bmlxdWVJZCgpLmFkZENsYXNzKFwidWktZGlhbG9nLXRpdGxlXCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX3RpdGxlKHQpLHRoaXMudWlEaWFsb2cuYXR0cih7XCJhcmlhLWxhYmVsbGVkYnlcIjp0LmF0dHIoXCJpZFwiKX0pfSxfdGl0bGU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLnRpdGxlfHxlLmh0bWwoXCImIzE2MDtcIiksZS50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSl9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZShcIjxkaXY+XCIpLmFkZENsYXNzKFwidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMudWlCdXR0b25TZXQ9ZShcIjxkaXY+XCIpLmFkZENsYXNzKFwidWktZGlhbG9nLWJ1dHRvbnNldFwiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSksdGhpcy5fY3JlYXRlQnV0dG9ucygpfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMuYnV0dG9ucztyZXR1cm4gdGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksdGhpcy51aUJ1dHRvblNldC5lbXB0eSgpLGUuaXNFbXB0eU9iamVjdChpKXx8ZS5pc0FycmF5KGkpJiYhaS5sZW5ndGg/KHRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3MoXCJ1aS1kaWFsb2ctYnV0dG9uc1wiKSx2b2lkIDApOihlLmVhY2goaSxmdW5jdGlvbihpLHMpe3ZhciBuLGE7cz1lLmlzRnVuY3Rpb24ocyk/e2NsaWNrOnMsdGV4dDppfTpzLHM9ZS5leHRlbmQoe3R5cGU6XCJidXR0b25cIn0scyksbj1zLmNsaWNrLHMuY2xpY2s9ZnVuY3Rpb24oKXtuLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxhPXtpY29uczpzLmljb25zLHRleHQ6cy5zaG93VGV4dH0sZGVsZXRlIHMuaWNvbnMsZGVsZXRlIHMuc2hvd1RleHQsZShcIjxidXR0b24+PC9idXR0b24+XCIscykuYnV0dG9uKGEpLmFwcGVuZFRvKHQudWlCdXR0b25TZXQpfSksdGhpcy51aURpYWxvZy5hZGRDbGFzcyhcInVpLWRpYWxvZy1idXR0b25zXCIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHZvaWQgMCl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtyZXR1cm57cG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5vZmZzZXR9fXZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiLGhhbmRsZTpcIi51aS1kaWFsb2ctdGl0bGViYXJcIixjb250YWlubWVudDpcImRvY3VtZW50XCIsc3RhcnQ6ZnVuY3Rpb24ocyxuKXtlKHRoaXMpLmFkZENsYXNzKFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdGFydFwiLHMsdChuKSl9LGRyYWc6ZnVuY3Rpb24oZSxzKXtpLl90cmlnZ2VyKFwiZHJhZ1wiLGUsdChzKSl9LHN0b3A6ZnVuY3Rpb24obixhKXt2YXIgbz1hLm9mZnNldC5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLHI9YS5vZmZzZXQudG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhvPj0wP1wiK1wiOlwiXCIpK28rXCIgXCIrXCJ0b3BcIisocj49MD9cIitcIjpcIlwiKStyLG9mOmkud2luZG93fSxlKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0b3BcIixuLHQoYSkpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsYT10aGlzLnVpRGlhbG9nLmNzcyhcInBvc2l0aW9uXCIpLG89XCJzdHJpbmdcIj09dHlwZW9mIG4/bjpcIm4sZSxzLHcsc2Usc3csbmUsbndcIjt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50XCIsY29udGFpbm1lbnQ6XCJkb2N1bWVudFwiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOnMubWF4V2lkdGgsbWF4SGVpZ2h0OnMubWF4SGVpZ2h0LG1pbldpZHRoOnMubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6byxzdGFydDpmdW5jdGlvbihzLG4pe2UodGhpcykuYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RhcnRcIixzLHQobikpfSxyZXNpemU6ZnVuY3Rpb24oZSxzKXtpLl90cmlnZ2VyKFwicmVzaXplXCIsZSx0KHMpKX0sc3RvcDpmdW5jdGlvbihuLGEpe3ZhciBvPWkudWlEaWFsb2cub2Zmc2V0KCkscj1vLmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCksaD1vLnRvcC1pLmRvY3VtZW50LnNjcm9sbFRvcCgpO3MuaGVpZ2h0PWkudWlEaWFsb2cuaGVpZ2h0KCkscy53aWR0aD1pLnVpRGlhbG9nLndpZHRoKCkscy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhyPj0wP1wiK1wiOlwiXCIpK3IrXCIgXCIrXCJ0b3BcIisoaD49MD9cIitcIjpcIlwiKStoLG9mOmkud2luZG93fSxlKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGlhbG9nLXJlc2l6aW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RvcFwiLG4sdChhKSl9fSkuY3NzKFwicG9zaXRpb25cIixhKX0sX3RyYWNrRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9vbih0aGlzLndpZGdldCgpLHtmb2N1c2luOmZ1bmN0aW9uKHQpe3RoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX2ZvY3VzZWRFbGVtZW50PWUodC50YXJnZXQpfX0pfSxfbWFrZUZvY3VzVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5fdW50cmFja0luc3RhbmNlKCksdGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKS51bnNoaWZ0KHRoaXMpfSxfdW50cmFja0luc3RhbmNlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKSxpPWUuaW5BcnJheSh0aGlzLHQpOy0xIT09aSYmdC5zcGxpY2UoaSwxKX0sX3RyYWNraW5nSW5zdGFuY2VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLWluc3RhbmNlc1wiKTtyZXR1cm4gZXx8KGU9W10sdGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLWluc3RhbmNlc1wiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVyblwiYXV0b1wiPT09ZS5oZWlnaHQ/ZS5taW5IZWlnaHQ6TWF0aC5taW4oZS5taW5IZWlnaHQsZS5oZWlnaHQpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpRGlhbG9nLmlzKFwiOnZpc2libGVcIik7ZXx8dGhpcy51aURpYWxvZy5zaG93KCksdGhpcy51aURpYWxvZy5wb3NpdGlvbih0aGlzLm9wdGlvbnMucG9zaXRpb24pLGV8fHRoaXMudWlEaWFsb2cuaGlkZSgpfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITEsbj17fTtlLmVhY2godCxmdW5jdGlvbihlLHQpe2kuX3NldE9wdGlvbihlLHQpLGUgaW4gaS5zaXplUmVsYXRlZE9wdGlvbnMmJihzPSEwKSxlIGluIGkucmVzaXphYmxlUmVsYXRlZE9wdGlvbnMmJihuW2VdPXQpfSkscyYmKHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpKSx0aGlzLnVpRGlhbG9nLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoXCJvcHRpb25cIixuKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj10aGlzLnVpRGlhbG9nO1wiZGlhbG9nQ2xhc3NcIj09PWUmJm4ucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyh0KSxcImRpc2FibGVkXCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSxcImFwcGVuZFRvXCI9PT1lJiZ0aGlzLnVpRGlhbG9nLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiYnV0dG9uc1wiPT09ZSYmdGhpcy5fY3JlYXRlQnV0dG9ucygpLFwiY2xvc2VUZXh0XCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOlwiXCIrdH0pLFwiZHJhZ2dhYmxlXCI9PT1lJiYoaT1uLmlzKFwiOmRhdGEodWktZHJhZ2dhYmxlKVwiKSxpJiYhdCYmbi5kcmFnZ2FibGUoXCJkZXN0cm95XCIpLCFpJiZ0JiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCkpLFwicG9zaXRpb25cIj09PWUmJnRoaXMuX3Bvc2l0aW9uKCksXCJyZXNpemFibGVcIj09PWUmJihzPW4uaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpLHMmJiF0JiZuLnJlc2l6YWJsZShcImRlc3Ryb3lcIikscyYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKFwib3B0aW9uXCIsXCJoYW5kbGVzXCIsdCksc3x8dD09PSExfHx0aGlzLl9tYWtlUmVzaXphYmxlKCkpLFwidGl0bGVcIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKFwiLnVpLWRpYWxvZy10aXRsZVwiKSkpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciBlLHQsaSxzPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuc2hvdygpLmNzcyh7d2lkdGg6XCJhdXRvXCIsbWluSGVpZ2h0OjAsbWF4SGVpZ2h0Olwibm9uZVwiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6XCJhdXRvXCIsd2lkdGg6cy53aWR0aH0pLm91dGVySGVpZ2h0KCksdD1NYXRoLm1heCgwLHMubWluSGVpZ2h0LWUpLGk9XCJudW1iZXJcIj09dHlwZW9mIHMubWF4SGVpZ2h0P01hdGgubWF4KDAscy5tYXhIZWlnaHQtZSk6XCJub25lXCIsXCJhdXRvXCI9PT1zLmhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6dCxtYXhIZWlnaHQ6aSxoZWlnaHQ6XCJhdXRvXCJ9KTp0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KDAscy5oZWlnaHQtZSkpLHRoaXMudWlEaWFsb2cuaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZShcIm9wdGlvblwiLFwibWluSGVpZ2h0XCIsdGhpcy5fbWluSGVpZ2h0KCkpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQoXCJpZnJhbWVcIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZShcIjxkaXY+XCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCl9KS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vZmZzZXQodC5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9hbGxvd0ludGVyYWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRpYWxvZ1wiKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRhdGVwaWNrZXJcIikubGVuZ3RofSxfY3JlYXRlT3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCl7dmFyIHQ9ITA7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0PSExfSksdGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtmb2N1c2luOmZ1bmN0aW9uKGUpe3R8fHRoaXMuX2FsbG93SW50ZXJhY3Rpb24oZSl8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKVswXS5fZm9jdXNUYWJiYWJsZSgpKX19KSx0aGlzLm92ZXJsYXk9ZShcIjxkaXY+XCIpLmFkZENsYXNzKFwidWktd2lkZ2V0LW92ZXJsYXkgdWktZnJvbnRcIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fb24odGhpcy5vdmVybGF5LHttb3VzZWRvd246XCJfa2VlcEZvY3VzXCJ9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiwodGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHwwKSsxKX19LF9kZXN0cm95T3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCYmdGhpcy5vdmVybGF5KXt2YXIgZT10aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiktMTtlP3RoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKFwiZm9jdXNpblwiKS5yZW1vdmVEYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpLHRoaXMub3ZlcmxheS5yZW1vdmUoKSx0aGlzLm92ZXJsYXk9bnVsbH19fSksZS53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix7dmVyc2lvbjpcIjEuMTEuNFwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJvcFwiLG9wdGlvbnM6e2FjY2VwdDpcIipcIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOlwiZGVmYXVsdFwiLHRvbGVyYW5jZTpcImludGVyc2VjdFwiLGFjdGl2YXRlOm51bGwsZGVhY3RpdmF0ZTpudWxsLGRyb3A6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuYWNjZXB0O3RoaXMuaXNvdmVyPSExLHRoaXMuaXNvdXQ9ITAsdGhpcy5hY2NlcHQ9ZS5pc0Z1bmN0aW9uKHMpP3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXMocyl9LHRoaXMucHJvcG9ydGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hcmd1bWVudHNbMF0sdm9pZCAwKTp0P3Q6dD17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fX0sdGhpcy5fYWRkVG9NYW5hZ2VyKGkuc2NvcGUpLGkuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktZHJvcHBhYmxlXCIpfSxfYWRkVG9NYW5hZ2VyOmZ1bmN0aW9uKHQpe2UudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdF09ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XXx8W10sZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XS5wdXNoKHRoaXMpfSxfc3BsaWNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO2UubGVuZ3RoPnQ7dCsrKWVbdF09PT10aGlzJiZlLnNwbGljZSh0LDEpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UodCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktZHJvcHBhYmxlIHVpLWRyb3BwYWJsZS1kaXNhYmxlZFwiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe2lmKFwiYWNjZXB0XCI9PT10KXRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihpKT9pOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKGkpfTtlbHNlIGlmKFwic2NvcGVcIj09PXQpe3ZhciBzPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UocyksdGhpcy5fYWRkVG9NYW5hZ2VyKGkpfXRoaXMuX3N1cGVyKHQsaSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksaSYmdGhpcy5fdHJpZ2dlcihcImFjdGl2YXRlXCIsdCx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLGkmJnRoaXMuX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsdCx0aGlzLnVpKGkpKX0sX292ZXI6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpJiYoaS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0saS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoXCJvdmVyXCIsdCx0aGlzLnVpKGkpKSl9LF9vdXQ6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpJiYoaS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0saS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoXCJvdXRcIix0LHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24odCxpKXt2YXIgcz1pfHxlLnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikubm90KFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKTtyZXR1cm4gaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChzLGUuZXh0ZW5kKGkse29mZnNldDppLmVsZW1lbnQub2Zmc2V0KCl9KSxpLm9wdGlvbnMudG9sZXJhbmNlLHQpPyhuPSEwLCExKTp2b2lkIDB9KSxuPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHMuY3VycmVudEl0ZW18fHMuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcihcImRyb3BcIix0LHRoaXMudWkocykpLHRoaXMuZWxlbWVudCk6ITEpOiExfSx1aTpmdW5jdGlvbihlKXtyZXR1cm57ZHJhZ2dhYmxlOmUuY3VycmVudEl0ZW18fGUuZWxlbWVudCxoZWxwZXI6ZS5oZWxwZXIscG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5wb3NpdGlvbkFic319fSksZS51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxpKXtyZXR1cm4gZT49dCYmdCtpPmV9cmV0dXJuIGZ1bmN0aW9uKHQsaSxzLG4pe2lmKCFpLm9mZnNldClyZXR1cm4hMTt2YXIgYT0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCt0Lm1hcmdpbnMubGVmdCxvPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3ArdC5tYXJnaW5zLnRvcCxyPWErdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxoPW8rdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbD1pLm9mZnNldC5sZWZ0LHU9aS5vZmZzZXQudG9wLGQ9bCtpLnByb3BvcnRpb25zKCkud2lkdGgsYz11K2kucHJvcG9ydGlvbnMoKS5oZWlnaHQ7c3dpdGNoKHMpe2Nhc2VcImZpdFwiOnJldHVybiBhPj1sJiZkPj1yJiZvPj11JiZjPj1oO2Nhc2VcImludGVyc2VjdFwiOnJldHVybiBhK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5sJiZkPnItdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZvK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+dSYmYz5oLXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI7Y2FzZVwicG9pbnRlclwiOnJldHVybiBlKG4ucGFnZVksdSxpLnByb3BvcnRpb25zKCkuaGVpZ2h0KSYmZShuLnBhZ2VYLGwsaS5wcm9wb3J0aW9ucygpLndpZHRoKTtjYXNlXCJ0b3VjaFwiOnJldHVybihvPj11JiZjPj1vfHxoPj11JiZjPj1ofHx1Pm8mJmg+YykmJihhPj1sJiZkPj1hfHxyPj1sJiZkPj1yfHxsPmEmJnI+ZCk7ZGVmYXVsdDpyZXR1cm4hMX19fSgpLGUudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7XCJkZWZhdWx0XCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sbz1pP2kudHlwZTpudWxsLHI9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikuYWRkQmFjaygpO2U6Zm9yKHM9MDthLmxlbmd0aD5zO3MrKylpZighKGFbc10ub3B0aW9ucy5kaXNhYmxlZHx8dCYmIWFbc10uYWNjZXB0LmNhbGwoYVtzXS5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkpKXtmb3Iobj0wO3IubGVuZ3RoPm47bisrKWlmKHJbbl09PT1hW3NdLmVsZW1lbnRbMF0pe2Fbc10ucHJvcG9ydGlvbnMoKS5oZWlnaHQ9MDtjb250aW51ZSBlfWFbc10udmlzaWJsZT1cIm5vbmVcIiE9PWFbc10uZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIpLGFbc10udmlzaWJsZSYmKFwibW91c2Vkb3duXCI9PT1vJiZhW3NdLl9hY3RpdmF0ZS5jYWxsKGFbc10saSksYVtzXS5vZmZzZXQ9YVtzXS5lbGVtZW50Lm9mZnNldCgpLGFbc10ucHJvcG9ydGlvbnMoe3dpZHRoOmFbc10uZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6YVtzXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodH0pKX19LGRyb3A6ZnVuY3Rpb24odCxpKXt2YXIgcz0hMTtyZXR1cm4gZS5lYWNoKChlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdKS5zbGljZSgpLGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZlLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSYmKHM9dGhpcy5fZHJvcC5jYWxsKHRoaXMsaSl8fHMpLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdC5jdXJyZW50SXRlbXx8dC5lbGVtZW50KSYmKHRoaXMuaXNvdXQ9ITAsdGhpcy5pc292ZXI9ITEsdGhpcy5fZGVhY3RpdmF0ZS5jYWxsKHRoaXMsaSkpKX0pLHN9LGRyYWdTdGFydDpmdW5jdGlvbih0LGkpe3QuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLmJpbmQoXCJzY3JvbGwuZHJvcHBhYmxlXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxpKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSl7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRpc2FibGVkJiYhdGhpcy5ncmVlZHlDaGlsZCYmdGhpcy52aXNpYmxlKXt2YXIgcyxuLGEsbz1lLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFvJiZ0aGlzLmlzb3Zlcj9cImlzb3V0XCI6byYmIXRoaXMuaXNvdmVyP1wiaXNvdmVyXCI6bnVsbDtyJiYodGhpcy5vcHRpb25zLmdyZWVkeSYmKG49dGhpcy5vcHRpb25zLnNjb3BlLGE9dGhpcy5lbGVtZW50LnBhcmVudHMoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmRyb3BwYWJsZShcImluc3RhbmNlXCIpLm9wdGlvbnMuc2NvcGU9PT1ufSksYS5sZW5ndGgmJihzPWUoYVswXSkuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIikscy5ncmVlZHlDaGlsZD1cImlzb3ZlclwiPT09cikpLHMmJlwiaXNvdmVyXCI9PT1yJiYocy5pc292ZXI9ITEscy5pc291dD0hMCxzLl9vdXQuY2FsbChzLGkpKSx0aGlzW3JdPSEwLHRoaXNbXCJpc291dFwiPT09cj9cImlzb3ZlclwiOlwiaXNvdXRcIl09ITEsdGhpc1tcImlzb3ZlclwiPT09cj9cIl9vdmVyXCI6XCJfb3V0XCJdLmNhbGwodGhpcyxpKSxzJiZcImlzb3V0XCI9PT1yJiYocy5pc291dD0hMSxzLmlzb3Zlcj0hMCxzLl9vdmVyLmNhbGwocyxpKSkpfX0pfSxkcmFnU3RvcDpmdW5jdGlvbih0LGkpe3QuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLnVuYmluZChcInNjcm9sbC5kcm9wcGFibGVcIiksdC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fGUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSl9fSxlLnVpLmRyb3BwYWJsZTt2YXIgeT1cInVpLWVmZmVjdHMtXCIsYj1lO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBzPWRbdC50eXBlXXx8e307cmV0dXJuIG51bGw9PWU/aXx8IXQuZGVmP251bGw6dC5kZWY6KGU9cy5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpzLm1vZD8oZStzLm1vZCklcy5tb2Q6MD5lPzA6ZT5zLm1heD9zLm1heDplKX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbihlLGEpe3ZhciBvLHI9YS5yZS5leGVjKGkpLGg9ciYmYS5wYXJzZShyKSxsPWEuc3BhY2V8fFwicmdiYVwiO3JldHVybiBoPyhvPXNbbF0oaCksc1t1W2xdLmNhY2hlXT1vW3VbbF0uY2FjaGVdLG49cy5fcmdiYT1vLl9yZ2JhLCExKTp0fSksbi5sZW5ndGg/KFwiMCwwLDAsMFwiPT09bi5qb2luKCkmJmUuZXh0ZW5kKG4sYS50cmFuc3BhcmVudCkscyk6YVtpXX1mdW5jdGlvbiBuKGUsdCxpKXtyZXR1cm4gaT0oaSsxKSUxLDE+NippP2UrNioodC1lKSppOjE+MippP3Q6Mj4zKmk/ZSs2Kih0LWUpKigyLzMtaSk6ZX12YXIgYSxvPVwiYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvclwiLHI9L14oW1xcLStdKT1cXHMqKFxcZCtcXC4/XFxkKikvLGg9W3tyZTovcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuWzIuNTUqZVsxXSwyLjU1KmVbMl0sMi41NSplWzNdLGVbNF1dfX0se3JlOi8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfX0se3JlOi8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXStlWzFdLDE2KSxwYXJzZUludChlWzJdK2VbMl0sMTYpLHBhcnNlSW50KGVbM10rZVszXSwxNildfX0se3JlOi9oc2xhP1xcKFxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHNwYWNlOlwiaHNsYVwiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLGw9ZS5Db2xvcj1mdW5jdGlvbih0LGkscyxuKXtyZXR1cm4gbmV3IGUuQ29sb3IuZm4ucGFyc2UodCxpLHMsbil9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6XCJieXRlXCJ9LGdyZWVuOntpZHg6MSx0eXBlOlwiYnl0ZVwifSxibHVlOntpZHg6Mix0eXBlOlwiYnl0ZVwifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6XCJkZWdyZWVzXCJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6XCJwZXJjZW50XCJ9LGxpZ2h0bmVzczp7aWR4OjIsdHlwZTpcInBlcmNlbnRcIn19fX0sZD17XCJieXRlXCI6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sYz1sLnN1cHBvcnQ9e30scD1lKFwiPHA+XCIpWzBdLGY9ZS5lYWNoO3Auc3R5bGUuY3NzVGV4dD1cImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSlcIixjLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZihcInJnYmFcIik+LTEsZih1LGZ1bmN0aW9uKGUsdCl7dC5jYWNoZT1cIl9cIitlLHQucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6XCJwZXJjZW50XCIsZGVmOjF9fSksbC5mbj1lLmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixvLHIsaCl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49ZShuKS5jc3Mobyksbz10KTt2YXIgZD10aGlzLGM9ZS50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gbyE9PXQmJihuPVtuLG8scixoXSxjPVwiYXJyYXlcIiksXCJzdHJpbmdcIj09PWM/dGhpcy5wYXJzZShzKG4pfHxhLl9kZWZhdWx0KTpcImFycmF5XCI9PT1jPyhmKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3BbdC5pZHhdPWkoblt0LmlkeF0sdCl9KSx0aGlzKTpcIm9iamVjdFwiPT09Yz8obiBpbnN0YW5jZW9mIGw/Zih1LGZ1bmN0aW9uKGUsdCl7blt0LmNhY2hlXSYmKGRbdC5jYWNoZV09blt0LmNhY2hlXS5zbGljZSgpKX0pOmYodSxmdW5jdGlvbih0LHMpe3ZhciBhPXMuY2FjaGU7ZihzLnByb3BzLGZ1bmN0aW9uKGUsdCl7aWYoIWRbYV0mJnMudG8pe2lmKFwiYWxwaGFcIj09PWV8fG51bGw9PW5bZV0pcmV0dXJuO2RbYV09cy50byhkLl9yZ2JhKX1kW2FdW3QuaWR4XT1pKG5bZV0sdCwhMCl9KSxkW2FdJiYwPmUuaW5BcnJheShudWxsLGRbYV0uc2xpY2UoMCwzKSkmJihkW2FdWzNdPTEscy5mcm9tJiYoZC5fcmdiYT1zLmZyb20oZFthXSkpKX0pLHRoaXMpOnR9LGlzOmZ1bmN0aW9uKGUpe3ZhciBpPWwoZSkscz0hMCxuPXRoaXM7cmV0dXJuIGYodSxmdW5jdGlvbihlLGEpe3ZhciBvLHI9aVthLmNhY2hlXTtyZXR1cm4gciYmKG89blthLmNhY2hlXXx8YS50byYmYS50byhuLl9yZ2JhKXx8W10sZihhLnByb3BzLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXJbaS5pZHhdP3M9cltpLmlkeF09PT1vW2kuaWR4XTp0fSkpLHN9KSxzfSxfc3BhY2U6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXM7cmV0dXJuIGYodSxmdW5jdGlvbihpLHMpe3Rbcy5jYWNoZV0mJmUucHVzaChpKX0pLGUucG9wKCl9LHRyYW5zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcz1sKGUpLG49cy5fc3BhY2UoKSxhPXVbbl0sbz0wPT09dGhpcy5hbHBoYSgpP2woXCJ0cmFuc3BhcmVudFwiKTp0aGlzLHI9b1thLmNhY2hlXXx8YS50byhvLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW2EuY2FjaGVdLGYoYS5wcm9wcyxmdW5jdGlvbihlLG4pe3ZhciBhPW4uaWR4LG89clthXSxsPXNbYV0sdT1kW24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PW8/aFthXT1sOih1Lm1vZCYmKGwtbz51Lm1vZC8yP28rPXUubW9kOm8tbD51Lm1vZC8yJiYoby09dS5tb2QpKSxoW2FdPWkoKGwtbykqdCtvLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbih0KXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bCh0KS5fcmdiYTtyZXR1cm4gbChlLm1hcChpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcykqblt0XStzKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PVwicmdiYShcIixpPWUubWFwKHRoaXMuX3JnYmEsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT90PjI/MTowOmV9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLHQ9XCJyZ2IoXCIpLHQraS5qb2luKCkrXCIpXCJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PVwiaHNsYShcIixpPWUubWFwKHRoaXMuaHNsYSgpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUmJihlPXQ+Mj8xOjApLHQmJjM+dCYmKGU9TWF0aC5yb3VuZCgxMDAqZSkrXCIlXCIpLGV9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLHQ9XCJoc2woXCIpLHQraS5qb2luKCkrXCIpXCJ9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCk7cmV0dXJuIHQmJmkucHVzaCh+figyNTUqcykpLFwiI1wiK2UubWFwKGksZnVuY3Rpb24oZSl7cmV0dXJuIGU9KGV8fDApLnRvU3RyaW5nKDE2KSwxPT09ZS5sZW5ndGg/XCIwXCIrZTplfSkuam9pbihcIlwiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX3JnYmFbM10/XCJ0cmFuc3BhcmVudFwiOnRoaXMudG9SZ2JhU3RyaW5nKCl9fSksbC5mbi5wYXJzZS5wcm90b3R5cGU9bC5mbix1LmhzbGEudG89ZnVuY3Rpb24oZSl7aWYobnVsbD09ZVswXXx8bnVsbD09ZVsxXXx8bnVsbD09ZVsyXSlyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQsaSxzPWVbMF0vMjU1LG49ZVsxXS8yNTUsYT1lWzJdLzI1NSxvPWVbM10scj1NYXRoLm1heChzLG4sYSksaD1NYXRoLm1pbihzLG4sYSksbD1yLWgsdT1yK2gsZD0uNSp1O3JldHVybiB0PWg9PT1yPzA6cz09PXI/NjAqKG4tYSkvbCszNjA6bj09PXI/NjAqKGEtcykvbCsxMjA6NjAqKHMtbikvbCsyNDAsaT0wPT09bD8wOi41Pj1kP2wvdTpsLygyLXUpLFtNYXRoLnJvdW5kKHQpJTM2MCxpLGQsbnVsbD09bz8xOm9dfSx1LmhzbGEuZnJvbT1mdW5jdGlvbihlKXtpZihudWxsPT1lWzBdfHxudWxsPT1lWzFdfHxudWxsPT1lWzJdKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdD1lWzBdLzM2MCxpPWVbMV0scz1lWzJdLGE9ZVszXSxvPS41Pj1zP3MqKDEraSk6cytpLXMqaSxyPTIqcy1vO3JldHVybltNYXRoLnJvdW5kKDI1NSpuKHIsbyx0KzEvMykpLE1hdGgucm91bmQoMjU1Km4ocixvLHQpKSxNYXRoLnJvdW5kKDI1NSpuKHIsbyx0LTEvMykpLGFdfSxmKHUsZnVuY3Rpb24ocyxuKXt2YXIgYT1uLnByb3BzLG89bi5jYWNoZSxoPW4udG8sdT1uLmZyb207bC5mbltzXT1mdW5jdGlvbihzKXtpZihoJiYhdGhpc1tvXSYmKHRoaXNbb109aCh0aGlzLl9yZ2JhKSkscz09PXQpcmV0dXJuIHRoaXNbb10uc2xpY2UoKTt2YXIgbixyPWUudHlwZShzKSxkPVwiYXJyYXlcIj09PXJ8fFwib2JqZWN0XCI9PT1yP3M6YXJndW1lbnRzLGM9dGhpc1tvXS5zbGljZSgpO3JldHVybiBmKGEsZnVuY3Rpb24oZSx0KXt2YXIgcz1kW1wib2JqZWN0XCI9PT1yP2U6dC5pZHhdO251bGw9PXMmJihzPWNbdC5pZHhdKSxjW3QuaWR4XT1pKHMsdCl9KSx1PyhuPWwodShjKSksbltvXT1jLG4pOmwoYyl9LGYoYSxmdW5jdGlvbih0LGkpe2wuZm5bdF18fChsLmZuW3RdPWZ1bmN0aW9uKG4pe3ZhciBhLG89ZS50eXBlKG4pLGg9XCJhbHBoYVwiPT09dD90aGlzLl9oc2xhP1wiaHNsYVwiOlwicmdiYVwiOnMsbD10aGlzW2hdKCksdT1sW2kuaWR4XTtyZXR1cm5cInVuZGVmaW5lZFwiPT09bz91OihcImZ1bmN0aW9uXCI9PT1vJiYobj1uLmNhbGwodGhpcyx1KSxvPWUudHlwZShuKSksbnVsbD09biYmaS5lbXB0eT90aGlzOihcInN0cmluZ1wiPT09byYmKGE9ci5leGVjKG4pLGEmJihuPXUrcGFyc2VGbG9hdChhWzJdKSooXCIrXCI9PT1hWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKHQpe3ZhciBpPXQuc3BsaXQoXCIgXCIpO2YoaSxmdW5jdGlvbih0LGkpe2UuY3NzSG9va3NbaV09e3NldDpmdW5jdGlvbih0LG4pe3ZhciBhLG8scj1cIlwiO2lmKFwidHJhbnNwYXJlbnRcIiE9PW4mJihcInN0cmluZ1wiIT09ZS50eXBlKG4pfHwoYT1zKG4pKSkpe2lmKG49bChhfHxuKSwhYy5yZ2JhJiYxIT09bi5fcmdiYVszXSl7Zm9yKG89XCJiYWNrZ3JvdW5kQ29sb3JcIj09PWk/dC5wYXJlbnROb2RlOnQ7KFwiXCI9PT1yfHxcInRyYW5zcGFyZW50XCI9PT1yKSYmbyYmby5zdHlsZTspdHJ5e3I9ZS5jc3MobyxcImJhY2tncm91bmRDb2xvclwiKSxvPW8ucGFyZW50Tm9kZX1jYXRjaChoKXt9bj1uLmJsZW5kKHImJlwidHJhbnNwYXJlbnRcIiE9PXI/cjpcIl9kZWZhdWx0XCIpfW49bi50b1JnYmFTdHJpbmcoKX10cnl7dC5zdHlsZVtpXT1ufWNhdGNoKGgpe319fSxlLmZ4LnN0ZXBbaV09ZnVuY3Rpb24odCl7dC5jb2xvckluaXR8fCh0LnN0YXJ0PWwodC5lbGVtLGkpLHQuZW5kPWwodC5lbmQpLHQuY29sb3JJbml0PSEwKSxlLmNzc0hvb2tzW2ldLnNldCh0LmVsZW0sdC5zdGFydC50cmFuc2l0aW9uKHQuZW5kLHQucG9zKSl9fSl9LGwuaG9vayhvKSxlLmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGYoW1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGZ1bmN0aW9uKGkscyl7dFtcImJvcmRlclwiK3MrXCJDb2xvclwiXT1lfSksdH19LGE9ZS5Db2xvci5uYW1lcz17YXF1YTpcIiMwMGZmZmZcIixibGFjazpcIiMwMDAwMDBcIixibHVlOlwiIzAwMDBmZlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixsaW1lOlwiIzAwZmYwMFwiLG1hcm9vbjpcIiM4MDAwMDBcIixuYXZ5OlwiIzAwMDA4MFwiLG9saXZlOlwiIzgwODAwMFwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHRlYWw6XCIjMDA4MDgwXCIsd2hpdGU6XCIjZmZmZmZmXCIseWVsbG93OlwiI2ZmZmYwMFwiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDpcIiNmZmZmZmZcIn19KGIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxzLG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P3Qub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk6dC5jdXJyZW50U3R5bGUsYT17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSxcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKGFbZS5jYW1lbENhc2UoaSldPW5baV0pO2Vsc2UgZm9yKGkgaW4gbilcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKGFbaV09bltpXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaSh0LGkpe3ZhciBzLGEsbz17fTtmb3IocyBpbiBpKWE9aVtzXSx0W3NdIT09YSYmKG5bc118fChlLmZ4LnN0ZXBbc118fCFpc05hTihwYXJzZUZsb2F0KGEpKSkmJihvW3NdPWEpKTtyZXR1cm4gb312YXIgcz1bXCJhZGRcIixcInJlbW92ZVwiLFwidG9nZ2xlXCJdLG49e2JvcmRlcjoxLGJvcmRlckJvdHRvbToxLGJvcmRlckNvbG9yOjEsYm9yZGVyTGVmdDoxLGJvcmRlclJpZ2h0OjEsYm9yZGVyVG9wOjEsYm9yZGVyV2lkdGg6MSxtYXJnaW46MSxwYWRkaW5nOjF9O2UuZWFjaChbXCJib3JkZXJMZWZ0U3R5bGVcIixcImJvcmRlclJpZ2h0U3R5bGVcIixcImJvcmRlckJvdHRvbVN0eWxlXCIsXCJib3JkZXJUb3BTdHlsZVwiXSxmdW5jdGlvbih0LGkpe2UuZnguc3RlcFtpXT1mdW5jdGlvbihlKXsoXCJub25lXCIhPT1lLmVuZCYmIWUuc2V0QXR0cnx8MT09PWUucG9zJiYhZS5zZXRBdHRyKSYmKGIuc3R5bGUoZS5lbGVtLGksZS5lbmQpLGUuc2V0QXR0cj0hMCl9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUuZWZmZWN0cy5hbmltYXRlQ2xhc3M9ZnVuY3Rpb24obixhLG8scil7dmFyIGg9ZS5zcGVlZChhLG8scik7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYSxvPWUodGhpcykscj1vLmF0dHIoXCJjbGFzc1wiKXx8XCJcIixsPWguY2hpbGRyZW4/by5maW5kKFwiKlwiKS5hZGRCYWNrKCk6bztsPWwubWFwKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKTtyZXR1cm57ZWw6aSxzdGFydDp0KHRoaXMpfX0pLGE9ZnVuY3Rpb24oKXtlLmVhY2gocyxmdW5jdGlvbihlLHQpe25bdF0mJm9bdCtcIkNsYXNzXCJdKG5bdF0pfSl9LGEoKSxsPWwubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kPXQodGhpcy5lbFswXSksdGhpcy5kaWZmPWkodGhpcy5zdGFydCx0aGlzLmVuZCksdGhpc30pLG8uYXR0cihcImNsYXNzXCIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1lLkRlZmVycmVkKCkscz1lLmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXthKCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLFwiXCIpfSl9KSxoLmNvbXBsZXRlLmNhbGwob1swXSl9KX0pfSxlLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEpe3JldHVybiBzP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aX0scyxuLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5hZGRDbGFzcykscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTppfSxzLG4sYSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShlLmZuLnJlbW92ZUNsYXNzKSx0b2dnbGVDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSxzLG4sYSxvKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHN8fHZvaWQgMD09PXM/bj9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxzP3thZGQ6aX06e3JlbW92ZTppfSxuLGEsbyk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTppfSxzLG4sYSl9fShlLmZuLnRvZ2dsZUNsYXNzKSxzd2l0Y2hDbGFzczpmdW5jdGlvbih0LGkscyxuLGEpe3JldHVybiBlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOmkscmVtb3ZlOnR9LHMsbixhKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxpLHMsbil7cmV0dXJuIGUuaXNQbGFpbk9iamVjdCh0KSYmKGk9dCx0PXQuZWZmZWN0KSx0PXtlZmZlY3Q6dH0sbnVsbD09aSYmKGk9e30pLGUuaXNGdW5jdGlvbihpKSYmKG49aSxzPW51bGwsaT17fSksKFwibnVtYmVyXCI9PXR5cGVvZiBpfHxlLmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLGUuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJmUuZXh0ZW5kKHQsaSkscz1zfHxpLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2Ygcz9zOnMgaW4gZS5meC5zcGVlZHM/ZS5meC5zcGVlZHNbc106ZS5meC5zcGVlZHMuX2RlZmF1bHQsdC5jb21wbGV0ZT1ufHxpLmNvbXBsZXRlLHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fGUuZnguc3BlZWRzW3RdPyEwOlwic3RyaW5nXCIhPXR5cGVvZiB0fHxlLmVmZmVjdHMuZWZmZWN0W3RdP2UuaXNGdW5jdGlvbih0KT8hMDpcIm9iamVjdFwiIT10eXBlb2YgdHx8dC5lZmZlY3Q/ITE6ITA6ITB9ZS5leHRlbmQoZS5lZmZlY3RzLHt2ZXJzaW9uOlwiMS4xMS40XCIsc2F2ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO3QubGVuZ3RoPmk7aSsrKW51bGwhPT10W2ldJiZlLmRhdGEoeSt0W2ldLGVbMF0uc3R5bGVbdFtpXV0pfSxyZXN0b3JlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscztmb3Iocz0wO3QubGVuZ3RoPnM7cysrKW51bGwhPT10W3NdJiYoaT1lLmRhdGEoeSt0W3NdKSx2b2lkIDA9PT1pJiYoaT1cIlwiKSxlLmNzcyh0W3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbihlLHQpe3JldHVyblwidG9nZ2xlXCI9PT10JiYodD1lLmlzKFwiOmhpZGRlblwiKT9cInNob3dcIjpcImhpZGVcIiksdH0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3N3aXRjaChlWzBdKXtjYXNlXCJ0b3BcIjppPTA7YnJlYWs7Y2FzZVwibWlkZGxlXCI6aT0uNTticmVhaztjYXNlXCJib3R0b21cIjppPTE7YnJlYWs7ZGVmYXVsdDppPWVbMF0vdC5oZWlnaHR9c3dpdGNoKGVbMV0pe2Nhc2VcImxlZnRcIjpzPTA7YnJlYWs7Y2FzZVwiY2VudGVyXCI6cz0uNTticmVhaztjYXNlXCJyaWdodFwiOnM9MTticmVhaztkZWZhdWx0OnM9ZVsxXS90LndpZHRofXJldHVybnt4OnMseTppfX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbih0KXtpZih0LnBhcmVudCgpLmlzKFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiKSlyZXR1cm4gdC5wYXJlbnQoKTt2YXIgaT17d2lkdGg6dC5vdXRlcldpZHRoKCEwKSxoZWlnaHQ6dC5vdXRlckhlaWdodCghMCksXCJmbG9hdFwiOnQuY3NzKFwiZmxvYXRcIil9LHM9ZShcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKFwidWktZWZmZWN0cy13cmFwcGVyXCIpLmNzcyh7Zm9udFNpemU6XCIxMDAlXCIsYmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsYm9yZGVyOlwibm9uZVwiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0sYT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXthLmlkfWNhdGNoKG8pe2E9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHMpLCh0WzBdPT09YXx8ZS5jb250YWlucyh0WzBdLGEpKSYmZShhKS5mb2N1cygpLHM9dC5wYXJlbnQoKSxcInN0YXRpY1wiPT09dC5jc3MoXCJwb3NpdGlvblwiKT8ocy5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIn0pLHQuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCJ9KSk6KGUuZXh0ZW5kKGkse3Bvc2l0aW9uOnQuY3NzKFwicG9zaXRpb25cIiksekluZGV4OnQuY3NzKFwiei1pbmRleFwiKX0pLGUuZWFjaChbXCJ0b3BcIixcImxlZnRcIixcImJvdHRvbVwiLFwicmlnaHRcIl0sZnVuY3Rpb24oZSxzKXtpW3NdPXQuY3NzKHMpLGlzTmFOKHBhcnNlSW50KGlbc10sMTApKSYmKGlbc109XCJhdXRvXCIpfSksdC5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIix0b3A6MCxsZWZ0OjAscmlnaHQ6XCJhdXRvXCIsYm90dG9tOlwiYXV0b1wifSkpLHQuY3NzKG4pLHMuY3NzKGkpLnNob3coKX0scmVtb3ZlV3JhcHBlcjpmdW5jdGlvbih0KXt2YXIgaT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiB0LnBhcmVudCgpLmlzKFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1pfHxlLmNvbnRhaW5zKHRbMF0saSkpJiZlKGkpLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxpLHMsbil7cmV0dXJuIG49bnx8e30sZS5lYWNoKGksZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNzc1VuaXQoaSk7YVswXT4wJiYobltpXT1hWzBdKnMrYVsxXSl9KSxufX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGkoKXtlLmlzRnVuY3Rpb24oYSkmJmEuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLGE9cy5jb21wbGV0ZSxyPXMubW9kZTsobi5pcyhcIjpoaWRkZW5cIik/XCJoaWRlXCI9PT1yOlwic2hvd1wiPT09cik/KG5bcl0oKSxpKCkpOm8uY2FsbChuWzBdLHMsaSl9dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1zLm1vZGUsYT1zLnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF07cmV0dXJuIGUuZngub2ZmfHwhbz9uP3RoaXNbbl0ocy5kdXJhdGlvbixzLmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzLmNvbXBsZXRlJiZzLmNvbXBsZXRlLmNhbGwodGhpcyl9KTphPT09ITE/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYXx8XCJmeFwiLGkpfSxzaG93OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPVwic2hvd1wiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX19KGUuZm4uc2hvdyksaGlkZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT1cImhpZGVcIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8XCJib29sZWFuXCI9PXR5cGVvZiBzKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPVwidG9nZ2xlXCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0oZS5mbi50b2dnbGUpLGNzc1VuaXQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jc3ModCkscz1bXTtyZXR1cm4gZS5lYWNoKFtcImVtXCIsXCJweFwiLFwiJVwiLFwicHRcIl0sZnVuY3Rpb24oZSx0KXtpLmluZGV4T2YodCk+MCYmKHM9W3BhcnNlRmxvYXQoaSksdF0pfSksc319KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbXCJRdWFkXCIsXCJDdWJpY1wiLFwiUXVhcnRcIixcIlF1aW50XCIsXCJFeHBvXCJdLGZ1bmN0aW9uKGUsaSl7dFtpXT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKzIpfX0pLGUuZXh0ZW5kKHQse1NpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSpNYXRoLlBJLzIpfSxDaXJjOmZ1bmN0aW9uKGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9LEVsYXN0aWM6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfHwxPT09ZT9lOi1NYXRoLnBvdygyLDgqKGUtMSkpKk1hdGguc2luKCg4MCooZS0xKS03LjUpKk1hdGguUEkvMTUpfSxCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlKmUqKDMqZS0yKX0sQm91bmNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTQ7KCh0PU1hdGgucG93KDIsLS1pKSktMSkvMTE+ZTspO3JldHVybiAxL01hdGgucG93KDQsMy1pKS03LjU2MjUqTWF0aC5wb3coKDMqdC0yKS8yMi1lLDIpfX0pLGUuZWFjaCh0LGZ1bmN0aW9uKHQsaSl7ZS5lYXNpbmdbXCJlYXNlSW5cIit0XT1pLGUuZWFzaW5nW1wiZWFzZU91dFwiK3RdPWZ1bmN0aW9uKGUpe3JldHVybiAxLWkoMS1lKX0sZS5lYXNpbmdbXCJlYXNlSW5PdXRcIit0XT1mdW5jdGlvbihlKXtyZXR1cm4uNT5lP2koMiplKS8yOjEtaSgtMiplKzIpLzJ9fSl9KCksZS5lZmZlY3RzLGUuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9L3VwfGRvd258dmVydGljYWwvLGg9L3VwfGxlZnR8dmVydGljYWx8aG9yaXpvbnRhbC8sbD1bXCJwb3NpdGlvblwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJoZWlnaHRcIixcIndpZHRoXCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fFwiaGlkZVwiKSxkPXQuZGlyZWN0aW9ufHxcInVwXCIsYz1yLnRlc3QoZCkscD1jP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiLGY9Yz9cInRvcFwiOlwibGVmdFwiLG09aC50ZXN0KGQpLGc9e30sdj1cInNob3dcIj09PXU7by5wYXJlbnQoKS5pcyhcIi51aS1lZmZlY3RzLXdyYXBwZXJcIik/ZS5lZmZlY3RzLnNhdmUoby5wYXJlbnQoKSxsKTplLmVmZmVjdHMuc2F2ZShvLGwpLG8uc2hvdygpLHM9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobykuY3NzKHtvdmVyZmxvdzpcImhpZGRlblwifSksbj1zW3BdKCksYT1wYXJzZUZsb2F0KHMuY3NzKGYpKXx8MCxnW3BdPXY/bjowLG18fChvLmNzcyhjP1wiYm90dG9tXCI6XCJyaWdodFwiLDApLmNzcyhjP1widG9wXCI6XCJsZWZ0XCIsXCJhdXRvXCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwifSksZ1tmXT12P2E6bithKSx2JiYocy5jc3MocCwwKSxtfHxzLmNzcyhmLGErbikpLHMuYW5pbWF0ZShnLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe1wiaGlkZVwiPT09dSYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyxsKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QuYm91bmNlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVtcInBvc2l0aW9uXCIsXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcImhlaWdodFwiLFwid2lkdGhcIl0saD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8XCJlZmZlY3RcIiksbD1cImhpZGVcIj09PWgsdT1cInNob3dcIj09PWgsZD10LmRpcmVjdGlvbnx8XCJ1cFwiLGM9dC5kaXN0YW5jZSxwPXQudGltZXN8fDUsZj0yKnArKHV8fGw/MTowKSxtPXQuZHVyYXRpb24vZixnPXQuZWFzaW5nLHY9XCJ1cFwiPT09ZHx8XCJkb3duXCI9PT1kP1widG9wXCI6XCJsZWZ0XCIseT1cInVwXCI9PT1kfHxcImxlZnRcIj09PWQsYj1vLnF1ZXVlKCksXz1iLmxlbmd0aDtmb3IoKHV8fGwpJiZyLnB1c2goXCJvcGFjaXR5XCIpLGUuZWZmZWN0cy5zYXZlKG8sciksby5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobyksY3x8KGM9b1tcInRvcFwiPT09dj9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCkvMyksdSYmKGE9e29wYWNpdHk6MX0sYVt2XT0wLG8uY3NzKFwib3BhY2l0eVwiLDApLmNzcyh2LHk/MiotYzoyKmMpLmFuaW1hdGUoYSxtLGcpKSxsJiYoYy89TWF0aC5wb3coMixwLTEpKSxhPXt9LGFbdl09MCxzPTA7cD5zO3MrKyluPXt9LG5bdl09KHk/XCItPVwiOlwiKz1cIikrYyxvLmFuaW1hdGUobixtLGcpLmFuaW1hdGUoYSxtLGcpLGM9bD8yKmM6Yy8yO2wmJihuPXtvcGFjaXR5OjB9LG5bdl09KHk/XCItPVwiOlwiKz1cIikrYyxvLmFuaW1hdGUobixtLGcpKSxvLnF1ZXVlKGZ1bmN0aW9uKCl7bCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyxyKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9KSxfPjEmJmIuc3BsaWNlLmFwcGx5KGIsWzEsMF0uY29uY2F0KGIuc3BsaWNlKF8sZisxKSkpLG8uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LmNsaXA9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9W1wicG9zaXRpb25cIixcInRvcFwiLFwiYm90dG9tXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxoPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHxcImhpZGVcIiksbD1cInNob3dcIj09PWgsdT10LmRpcmVjdGlvbnx8XCJ2ZXJ0aWNhbFwiLGQ9XCJ2ZXJ0aWNhbFwiPT09dSxjPWQ/XCJoZWlnaHRcIjpcIndpZHRoXCIscD1kP1widG9wXCI6XCJsZWZ0XCIsZj17fTtlLmVmZmVjdHMuc2F2ZShvLHIpLG8uc2hvdygpLHM9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobykuY3NzKHtvdmVyZmxvdzpcImhpZGRlblwifSksbj1cIklNR1wiPT09b1swXS50YWdOYW1lP3M6byxhPW5bY10oKSxsJiYobi5jc3MoYywwKSxuLmNzcyhwLGEvMikpLGZbY109bD9hOjAsZltwXT1sPzA6YS8yLG4uYW5pbWF0ZShmLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2x8fG8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmRyb3A9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1bXCJwb3NpdGlvblwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJvcGFjaXR5XCIsXCJoZWlnaHRcIixcIndpZHRoXCJdLG89ZS5lZmZlY3RzLnNldE1vZGUobix0Lm1vZGV8fFwiaGlkZVwiKSxyPVwic2hvd1wiPT09byxoPXQuZGlyZWN0aW9ufHxcImxlZnRcIixsPVwidXBcIj09PWh8fFwiZG93blwiPT09aD9cInRvcFwiOlwibGVmdFwiLHU9XCJ1cFwiPT09aHx8XCJsZWZ0XCI9PT1oP1wicG9zXCI6XCJuZWdcIixkPXtvcGFjaXR5OnI/MTowfTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG4pLHM9dC5kaXN0YW5jZXx8bltcInRvcFwiPT09bD9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCEwKS8yLHImJm4uY3NzKFwib3BhY2l0eVwiLDApLmNzcyhsLFwicG9zXCI9PT11Py1zOnMpLGRbbF09KHI/XCJwb3NcIj09PXU/XCIrPVwiOlwiLT1cIjpcInBvc1wiPT09dT9cIi09XCI6XCIrPVwiKStzLG4uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe1wiaGlkZVwiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QuZXhwbG9kZT1mdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtiLnB1c2godGhpcyksYi5sZW5ndGg9PT1kKmMmJm4oKX1mdW5jdGlvbiBuKCl7cC5jc3Moe3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCJ9KSxlKGIpLnJlbW92ZSgpLG18fHAuaGlkZSgpLGkoKX12YXIgYSxvLHIsaCxsLHUsZD10LnBpZWNlcz9NYXRoLnJvdW5kKE1hdGguc3FydCh0LnBpZWNlcykpOjMsYz1kLHA9ZSh0aGlzKSxmPWUuZWZmZWN0cy5zZXRNb2RlKHAsdC5tb2RlfHxcImhpZGVcIiksbT1cInNob3dcIj09PWYsZz1wLnNob3coKS5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIikub2Zmc2V0KCksdj1NYXRoLmNlaWwocC5vdXRlcldpZHRoKCkvYykseT1NYXRoLmNlaWwocC5vdXRlckhlaWdodCgpL2QpLGI9W107Zm9yKGE9MDtkPmE7YSsrKWZvcihoPWcudG9wK2EqeSx1PWEtKGQtMSkvMixvPTA7Yz5vO28rKylyPWcubGVmdCtvKnYsbD1vLShjLTEpLzIscC5jbG9uZSgpLmFwcGVuZFRvKFwiYm9keVwiKS53cmFwKFwiPGRpdj48L2Rpdj5cIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcInZpc2libGVcIixsZWZ0Oi1vKnYsdG9wOi1hKnl9KS5wYXJlbnQoKS5hZGRDbGFzcyhcInVpLWVmZmVjdHMtZXhwbG9kZVwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixvdmVyZmxvdzpcImhpZGRlblwiLHdpZHRoOnYsaGVpZ2h0OnksbGVmdDpyKyhtP2wqdjowKSx0b3A6aCsobT91Knk6MCksb3BhY2l0eTptPzA6MX0pLmFuaW1hdGUoe2xlZnQ6cisobT8wOmwqdiksdG9wOmgrKG0/MDp1KnkpLG9wYWNpdHk6bT8xOjB9LHQuZHVyYXRpb258fDUwMCx0LmVhc2luZyxzKX0sZS5lZmZlY3RzLmVmZmVjdC5mYWRlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHxcInRvZ2dsZVwiKTtzLmFuaW1hdGUoe29wYWNpdHk6bn0se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOml9KX0sZS5lZmZlY3RzLmVmZmVjdC5mb2xkPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhPWUodGhpcyksbz1bXCJwb3NpdGlvblwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJoZWlnaHRcIixcIndpZHRoXCJdLHI9ZS5lZmZlY3RzLnNldE1vZGUoYSx0Lm1vZGV8fFwiaGlkZVwiKSxoPVwic2hvd1wiPT09cixsPVwiaGlkZVwiPT09cix1PXQuc2l6ZXx8MTUsZD0vKFswLTldKyklLy5leGVjKHUpLGM9ISF0Lmhvcml6Rmlyc3QscD1oIT09YyxmPXA/W1wid2lkdGhcIixcImhlaWdodFwiXTpbXCJoZWlnaHRcIixcIndpZHRoXCJdLG09dC5kdXJhdGlvbi8yLGc9e30sdj17fTtlLmVmZmVjdHMuc2F2ZShhLG8pLGEuc2hvdygpLHM9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYSkuY3NzKHtvdmVyZmxvdzpcImhpZGRlblwifSksbj1wP1tzLndpZHRoKCkscy5oZWlnaHQoKV06W3MuaGVpZ2h0KCkscy53aWR0aCgpXSxkJiYodT1wYXJzZUludChkWzFdLDEwKS8xMDAqbltsPzA6MV0pLGgmJnMuY3NzKGM/e2hlaWdodDowLHdpZHRoOnV9OntoZWlnaHQ6dSx3aWR0aDowfSksZ1tmWzBdXT1oP25bMF06dSx2W2ZbMV1dPWg/blsxXTowLHMuYW5pbWF0ZShnLG0sdC5lYXNpbmcpLmFuaW1hdGUodixtLHQuZWFzaW5nLGZ1bmN0aW9uKCl7bCYmYS5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUoYSxvKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihhKSxpKCl9KX0sZS5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQ9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49W1wiYmFja2dyb3VuZEltYWdlXCIsXCJiYWNrZ3JvdW5kQ29sb3JcIixcIm9wYWNpdHlcIl0sYT1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8XCJzaG93XCIpLG89e2JhY2tncm91bmRDb2xvcjpzLmNzcyhcImJhY2tncm91bmRDb2xvclwiKX07XCJoaWRlXCI9PT1hJiYoby5vcGFjaXR5PTApLGUuZWZmZWN0cy5zYXZlKHMsbikscy5zaG93KCkuY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6XCJub25lXCIsYmFja2dyb3VuZENvbG9yOnQuY29sb3J8fFwiI2ZmZmY5OVwifSkuYW5pbWF0ZShvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe1wiaGlkZVwiPT09YSYmcy5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocyxuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3Quc2l6ZT1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj1bXCJwb3NpdGlvblwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJvdmVyZmxvd1wiLFwib3BhY2l0eVwiXSxoPVtcInBvc2l0aW9uXCIsXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcIm92ZXJmbG93XCIsXCJvcGFjaXR5XCJdLGw9W1wid2lkdGhcIixcImhlaWdodFwiLFwib3ZlcmZsb3dcIl0sdT1bXCJmb250U2l6ZVwiXSxkPVtcImJvcmRlclRvcFdpZHRoXCIsXCJib3JkZXJCb3R0b21XaWR0aFwiLFwicGFkZGluZ1RvcFwiLFwicGFkZGluZ0JvdHRvbVwiXSxjPVtcImJvcmRlckxlZnRXaWR0aFwiLFwiYm9yZGVyUmlnaHRXaWR0aFwiLFwicGFkZGluZ0xlZnRcIixcInBhZGRpbmdSaWdodFwiXSxwPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHxcImVmZmVjdFwiKSxmPXQucmVzdG9yZXx8XCJlZmZlY3RcIiE9PXAsbT10LnNjYWxlfHxcImJvdGhcIixnPXQub3JpZ2lufHxbXCJtaWRkbGVcIixcImNlbnRlclwiXSx2PW8uY3NzKFwicG9zaXRpb25cIikseT1mP3I6aCxiPXtoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTtcInNob3dcIj09PXAmJm8uc2hvdygpLHM9e2hlaWdodDpvLmhlaWdodCgpLHdpZHRoOm8ud2lkdGgoKSxvdXRlckhlaWdodDpvLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpvLm91dGVyV2lkdGgoKX0sXCJ0b2dnbGVcIj09PXQubW9kZSYmXCJzaG93XCI9PT1wPyhvLmZyb209dC50b3x8YixvLnRvPXQuZnJvbXx8cyk6KG8uZnJvbT10LmZyb218fChcInNob3dcIj09PXA/YjpzKSxvLnRvPXQudG98fChcImhpZGVcIj09PXA/YjpzKSksYT17ZnJvbTp7eTpvLmZyb20uaGVpZ2h0L3MuaGVpZ2h0LHg6by5mcm9tLndpZHRoL3Mud2lkdGh9LHRvOnt5Om8udG8uaGVpZ2h0L3MuaGVpZ2h0LHg6by50by53aWR0aC9zLndpZHRofX0sKFwiYm94XCI9PT1tfHxcImJvdGhcIj09PW0pJiYoYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KGQpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGQsYS5mcm9tLnksby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sZCxhLnRvLnksby50bykpLGEuZnJvbS54IT09YS50by54JiYoeT15LmNvbmNhdChjKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLGEuZnJvbS54LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGMsYS50by54LG8udG8pKSksKFwiY29udGVudFwiPT09bXx8XCJib3RoXCI9PT1tKSYmYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KHUpLmNvbmNhdChsKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyx1LGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLHUsYS50by55LG8udG8pKSxlLmVmZmVjdHMuc2F2ZShvLHkpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLG8uY3NzKFwib3ZlcmZsb3dcIixcImhpZGRlblwiKS5jc3Moby5mcm9tKSxnJiYobj1lLmVmZmVjdHMuZ2V0QmFzZWxpbmUoZyxzKSxvLmZyb20udG9wPShzLm91dGVySGVpZ2h0LW8ub3V0ZXJIZWlnaHQoKSkqbi55LG8uZnJvbS5sZWZ0PShzLm91dGVyV2lkdGgtby5vdXRlcldpZHRoKCkpKm4ueCxvLnRvLnRvcD0ocy5vdXRlckhlaWdodC1vLnRvLm91dGVySGVpZ2h0KSpuLnksby50by5sZWZ0PShzLm91dGVyV2lkdGgtby50by5vdXRlcldpZHRoKSpuLngpLG8uY3NzKG8uZnJvbSksKFwiY29udGVudFwiPT09bXx8XCJib3RoXCI9PT1tKSYmKGQ9ZC5jb25jYXQoW1wibWFyZ2luVG9wXCIsXCJtYXJnaW5Cb3R0b21cIl0pLmNvbmNhdCh1KSxjPWMuY29uY2F0KFtcIm1hcmdpbkxlZnRcIixcIm1hcmdpblJpZ2h0XCJdKSxsPXIuY29uY2F0KGQpLmNvbmNhdChjKSxvLmZpbmQoXCIqW3dpZHRoXVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPXtoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCksb3V0ZXJIZWlnaHQ6aS5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6aS5vdXRlcldpZHRoKCl9O1xuZiYmZS5lZmZlY3RzLnNhdmUoaSxsKSxpLmZyb209e2hlaWdodDpzLmhlaWdodCphLmZyb20ueSx3aWR0aDpzLndpZHRoKmEuZnJvbS54LG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQqYS5mcm9tLnksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgqYS5mcm9tLnh9LGkudG89e2hlaWdodDpzLmhlaWdodCphLnRvLnksd2lkdGg6cy53aWR0aCphLnRvLngsb3V0ZXJIZWlnaHQ6cy5oZWlnaHQqYS50by55LG91dGVyV2lkdGg6cy53aWR0aCphLnRvLnh9LGEuZnJvbS55IT09YS50by55JiYoaS5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksZCxhLmZyb20ueSxpLmZyb20pLGkudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxkLGEudG8ueSxpLnRvKSksYS5mcm9tLnghPT1hLnRvLngmJihpLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxjLGEuZnJvbS54LGkuZnJvbSksaS50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGMsYS50by54LGkudG8pKSxpLmNzcyhpLmZyb20pLGkuYW5pbWF0ZShpLnRvLHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtmJiZlLmVmZmVjdHMucmVzdG9yZShpLGwpfSl9KSksby5hbmltYXRlKG8udG8se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7MD09PW8udG8ub3BhY2l0eSYmby5jc3MoXCJvcGFjaXR5XCIsby5mcm9tLm9wYWNpdHkpLFwiaGlkZVwiPT09cCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyx5KSxmfHwoXCJzdGF0aWNcIj09PXY/by5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIix0b3A6by50by50b3AsbGVmdDpvLnRvLmxlZnR9KTplLmVhY2goW1widG9wXCIsXCJsZWZ0XCJdLGZ1bmN0aW9uKGUsdCl7by5jc3ModCxmdW5jdGlvbih0LGkpe3ZhciBzPXBhcnNlSW50KGksMTApLG49ZT9vLnRvLmxlZnQ6by50by50b3A7cmV0dXJuXCJhdXRvXCI9PT1pP24rXCJweFwiOnMrbitcInB4XCJ9KX0pKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3Quc2NhbGU9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49ZS5leHRlbmQoITAse30sdCksYT1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8XCJlZmZlY3RcIiksbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwoMD09PXBhcnNlSW50KHQucGVyY2VudCwxMCk/MDpcImhpZGVcIj09PWE/MDoxMDApLHI9dC5kaXJlY3Rpb258fFwiYm90aFwiLGg9dC5vcmlnaW4sbD17aGVpZ2h0OnMuaGVpZ2h0KCksd2lkdGg6cy53aWR0aCgpLG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCgpfSx1PXt5OlwiaG9yaXpvbnRhbFwiIT09cj9vLzEwMDoxLHg6XCJ2ZXJ0aWNhbFwiIT09cj9vLzEwMDoxfTtuLmVmZmVjdD1cInNpemVcIixuLnF1ZXVlPSExLG4uY29tcGxldGU9aSxcImVmZmVjdFwiIT09YSYmKG4ub3JpZ2luPWh8fFtcIm1pZGRsZVwiLFwiY2VudGVyXCJdLG4ucmVzdG9yZT0hMCksbi5mcm9tPXQuZnJvbXx8KFwic2hvd1wiPT09YT97aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH06bCksbi50bz17aGVpZ2h0OmwuaGVpZ2h0KnUueSx3aWR0aDpsLndpZHRoKnUueCxvdXRlckhlaWdodDpsLm91dGVySGVpZ2h0KnUueSxvdXRlcldpZHRoOmwub3V0ZXJXaWR0aCp1Lnh9LG4uZmFkZSYmKFwic2hvd1wiPT09YSYmKG4uZnJvbS5vcGFjaXR5PTAsbi50by5vcGFjaXR5PTEpLFwiaGlkZVwiPT09YSYmKG4uZnJvbS5vcGFjaXR5PTEsbi50by5vcGFjaXR5PTApKSxzLmVmZmVjdChuKX0sZS5lZmZlY3RzLmVmZmVjdC5wdWZmPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHxcImhpZGVcIiksYT1cImhpZGVcIj09PW4sbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwxNTAscj1vLzEwMCxoPXtoZWlnaHQ6cy5oZWlnaHQoKSx3aWR0aDpzLndpZHRoKCksb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKCl9O2UuZXh0ZW5kKHQse2VmZmVjdDpcInNjYWxlXCIscXVldWU6ITEsZmFkZTohMCxtb2RlOm4sY29tcGxldGU6aSxwZXJjZW50OmE/bzoxMDAsZnJvbTphP2g6e2hlaWdodDpoLmhlaWdodCpyLHdpZHRoOmgud2lkdGgqcixvdXRlckhlaWdodDpoLm91dGVySGVpZ2h0KnIsb3V0ZXJXaWR0aDpoLm91dGVyV2lkdGgqcn19KSxzLmVmZmVjdCh0KX0sZS5lZmZlY3RzLmVmZmVjdC5wdWxzYXRlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9ZS5lZmZlY3RzLnNldE1vZGUobix0Lm1vZGV8fFwic2hvd1wiKSxvPVwic2hvd1wiPT09YSxyPVwiaGlkZVwiPT09YSxoPW98fFwiaGlkZVwiPT09YSxsPTIqKHQudGltZXN8fDUpKyhoPzE6MCksdT10LmR1cmF0aW9uL2wsZD0wLGM9bi5xdWV1ZSgpLHA9Yy5sZW5ndGg7Zm9yKChvfHwhbi5pcyhcIjp2aXNpYmxlXCIpKSYmKG4uY3NzKFwib3BhY2l0eVwiLDApLnNob3coKSxkPTEpLHM9MTtsPnM7cysrKW4uYW5pbWF0ZSh7b3BhY2l0eTpkfSx1LHQuZWFzaW5nKSxkPTEtZDtuLmFuaW1hdGUoe29wYWNpdHk6ZH0sdSx0LmVhc2luZyksbi5xdWV1ZShmdW5jdGlvbigpe3ImJm4uaGlkZSgpLGkoKX0pLHA+MSYmYy5zcGxpY2UuYXBwbHkoYyxbMSwwXS5jb25jYXQoYy5zcGxpY2UocCxsKzEpKSksbi5kZXF1ZXVlKCl9LGUuZWZmZWN0cy5lZmZlY3Quc2hha2U9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1bXCJwb3NpdGlvblwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJoZWlnaHRcIixcIndpZHRoXCJdLG89ZS5lZmZlY3RzLnNldE1vZGUobix0Lm1vZGV8fFwiZWZmZWN0XCIpLHI9dC5kaXJlY3Rpb258fFwibGVmdFwiLGg9dC5kaXN0YW5jZXx8MjAsbD10LnRpbWVzfHwzLHU9MipsKzEsZD1NYXRoLnJvdW5kKHQuZHVyYXRpb24vdSksYz1cInVwXCI9PT1yfHxcImRvd25cIj09PXI/XCJ0b3BcIjpcImxlZnRcIixwPVwidXBcIj09PXJ8fFwibGVmdFwiPT09cixmPXt9LG09e30sZz17fSx2PW4ucXVldWUoKSx5PXYubGVuZ3RoO2ZvcihlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG4pLGZbY109KHA/XCItPVwiOlwiKz1cIikraCxtW2NdPShwP1wiKz1cIjpcIi09XCIpKzIqaCxnW2NdPShwP1wiLT1cIjpcIis9XCIpKzIqaCxuLmFuaW1hdGUoZixkLHQuZWFzaW5nKSxzPTE7bD5zO3MrKyluLmFuaW1hdGUobSxkLHQuZWFzaW5nKS5hbmltYXRlKGcsZCx0LmVhc2luZyk7bi5hbmltYXRlKG0sZCx0LmVhc2luZykuYW5pbWF0ZShmLGQvMix0LmVhc2luZykucXVldWUoZnVuY3Rpb24oKXtcImhpZGVcIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfSkseT4xJiZ2LnNwbGljZS5hcHBseSh2LFsxLDBdLmNvbmNhdCh2LnNwbGljZSh5LHUrMSkpKSxuLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5zbGlkZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPVtcInBvc2l0aW9uXCIsXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcIndpZHRoXCIsXCJoZWlnaHRcIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8XCJzaG93XCIpLHI9XCJzaG93XCI9PT1vLGg9dC5kaXJlY3Rpb258fFwibGVmdFwiLGw9XCJ1cFwiPT09aHx8XCJkb3duXCI9PT1oP1widG9wXCI6XCJsZWZ0XCIsdT1cInVwXCI9PT1ofHxcImxlZnRcIj09PWgsZD17fTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLHM9dC5kaXN0YW5jZXx8bltcInRvcFwiPT09bD9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCEwKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKS5jc3Moe292ZXJmbG93OlwiaGlkZGVuXCJ9KSxyJiZuLmNzcyhsLHU/aXNOYU4ocyk/XCItXCIrczotczpzKSxkW2xdPShyP3U/XCIrPVwiOlwiLT1cIjp1P1wiLT1cIjpcIis9XCIpK3Msbi5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7XCJoaWRlXCI9PT1vJiZuLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShuLGEpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG4pLGkoKX19KX0sZS5lZmZlY3RzLmVmZmVjdC50cmFuc2Zlcj1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lKHQudG8pLGE9XCJmaXhlZFwiPT09bi5jc3MoXCJwb3NpdGlvblwiKSxvPWUoXCJib2R5XCIpLHI9YT9vLnNjcm9sbFRvcCgpOjAsaD1hP28uc2Nyb2xsTGVmdCgpOjAsbD1uLm9mZnNldCgpLHU9e3RvcDpsLnRvcC1yLGxlZnQ6bC5sZWZ0LWgsaGVpZ2h0Om4uaW5uZXJIZWlnaHQoKSx3aWR0aDpuLmlubmVyV2lkdGgoKX0sZD1zLm9mZnNldCgpLGM9ZShcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyh0LmNsYXNzTmFtZSkuY3NzKHt0b3A6ZC50b3AtcixsZWZ0OmQubGVmdC1oLGhlaWdodDpzLmlubmVySGVpZ2h0KCksd2lkdGg6cy5pbm5lcldpZHRoKCkscG9zaXRpb246YT9cImZpeGVkXCI6XCJhYnNvbHV0ZVwifSkuYW5pbWF0ZSh1LHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtjLnJlbW92ZSgpLGkoKX0pfSxlLndpZGdldChcInVpLnByb2dyZXNzYmFyXCIse3ZlcnNpb246XCIxLjExLjRcIixvcHRpb25zOnttYXg6MTAwLHZhbHVlOjAsY2hhbmdlOm51bGwsY29tcGxldGU6bnVsbH0sbWluOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub2xkVmFsdWU9dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbFwiKS5hdHRyKHtyb2xlOlwicHJvZ3Jlc3NiYXJcIixcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm1pbn0pLHRoaXMudmFsdWVEaXY9ZShcIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLXZhbHVlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWxlZnQnPjwvZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsXCIpLnJlbW92ZUF0dHIoXCJyb2xlXCIpLnJlbW92ZUF0dHIoXCJhcmlhLXZhbHVlbWluXCIpLnJlbW92ZUF0dHIoXCJhcmlhLXZhbHVlbWF4XCIpLnJlbW92ZUF0dHIoXCJhcmlhLXZhbHVlbm93XCIpLHRoaXMudmFsdWVEaXYucmVtb3ZlKCl9LHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMub3B0aW9ucy52YWx1ZToodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdm9pZCAwKX0sX2NvbnN0cmFpbmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5pbmRldGVybWluYXRlPWU9PT0hMSxcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sZSkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2RlbGV0ZSBlLnZhbHVlLHRoaXMuX3N1cGVyKGUpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7XCJtYXhcIj09PWUmJih0PU1hdGgubWF4KHRoaXMubWluLHQpKSxcImRpc2FibGVkXCI9PT1lJiZ0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCkuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl9zdXBlcihlLHQpfSxfcGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU/MTAwOjEwMCoodGhpcy5vcHRpb25zLnZhbHVlLXRoaXMubWluKS8odGhpcy5vcHRpb25zLm1heC10aGlzLm1pbil9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmFsdWUsaT10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlfHx0PnRoaXMubWluKS50b2dnbGVDbGFzcyhcInVpLWNvcm5lci1yaWdodFwiLHQ9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aChpLnRvRml4ZWQoMCkrXCIlXCIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcyhcInVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGVcIix0aGlzLmluZGV0ZXJtaW5hdGUpLHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLXZhbHVlbm93XCIpLHRoaXMub3ZlcmxheURpdnx8KHRoaXMub3ZlcmxheURpdj1lKFwiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItb3ZlcmxheSc+PC9kaXY+XCIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtYXhcIjp0aGlzLm9wdGlvbnMubWF4LFwiYXJpYS12YWx1ZW5vd1wiOnR9KSx0aGlzLm92ZXJsYXlEaXYmJih0aGlzLm92ZXJsYXlEaXYucmVtb3ZlKCksdGhpcy5vdmVybGF5RGl2PW51bGwpKSx0aGlzLm9sZFZhbHVlIT09dCYmKHRoaXMub2xkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIpKSx0PT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcihcImNvbXBsZXRlXCIpfX0pLGUud2lkZ2V0KFwidWkuc2VsZWN0YWJsZVwiLGUudWkubW91c2Use3ZlcnNpb246XCIxLjExLjRcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjpcIipcIix0b2xlcmFuY2U6XCJ0b3VjaFwiLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktc2VsZWN0YWJsZVwiKSx0aGlzLmRyYWdnZWQ9ITEsdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7dD1lKGkub3B0aW9ucy5maWx0ZXIsaS5lbGVtZW50WzBdKSx0LmFkZENsYXNzKFwidWktc2VsZWN0ZWVcIiksdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQub2Zmc2V0KCk7ZS5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDppLmxlZnQsdG9wOmkudG9wLHJpZ2h0OmkubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206aS50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcyhcInVpLXNlbGVjdGVkXCIpLHNlbGVjdGluZzp0Lmhhc0NsYXNzKFwidWktc2VsZWN0aW5nXCIpLHVuc2VsZWN0aW5nOnQuaGFzQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPXQuYWRkQ2xhc3MoXCJ1aS1zZWxlY3RlZVwiKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmhlbHBlcj1lKFwiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PlwiKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcyhcInVpLXNlbGVjdGVlXCIpLnJlbW92ZURhdGEoXCJzZWxlY3RhYmxlLWl0ZW1cIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkXCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zO3RoaXMub3Bvcz1bdC5wYWdlWCx0LnBhZ2VZXSx0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVlcz1lKHMuZmlsdGVyLHRoaXMuZWxlbWVudFswXSksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCksZShzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoXCIudWktc2VsZWN0ZWRcIikuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO3Muc3RhcnRzZWxlY3RlZD0hMCx0Lm1ldGFLZXl8fHQuY3RybEtleXx8KHMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJ1aS1zZWxlY3RlZFwiKSxzLnNlbGVjdGVkPSExLHMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKSxzLnVuc2VsZWN0aW5nPSEwLGkuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLHQse3Vuc2VsZWN0aW5nOnMuZWxlbWVudH0pKX0pLGUodC50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciBzLG49ZS5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7cmV0dXJuIG4/KHM9IXQubWV0YUtleSYmIXQuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoXCJ1aS1zZWxlY3RlZFwiKSxuLiRlbGVtZW50LnJlbW92ZUNsYXNzKHM/XCJ1aS11bnNlbGVjdGluZ1wiOlwidWktc2VsZWN0ZWRcIikuYWRkQ2xhc3Mocz9cInVpLXNlbGVjdGluZ1wiOlwidWktdW5zZWxlY3RpbmdcIiksbi51bnNlbGVjdGluZz0hcyxuLnNlbGVjdGluZz1zLG4uc2VsZWN0ZWQ9cyxzP2kuX3RyaWdnZXIoXCJzZWxlY3RpbmdcIix0LHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsdCx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSksITEpOnZvaWQgMH0pKX0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXtpZih0aGlzLmRyYWdnZWQ9ITAsIXRoaXMub3B0aW9ucy5kaXNhYmxlZCl7dmFyIGkscz10aGlzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5vcG9zWzBdLG89dGhpcy5vcG9zWzFdLHI9dC5wYWdlWCxoPXQucGFnZVk7cmV0dXJuIGE+ciYmKGk9cixyPWEsYT1pKSxvPmgmJihpPWgsaD1vLG89aSksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmEsdG9wOm8sd2lkdGg6ci1hLGhlaWdodDpoLW99KSx0aGlzLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZS5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIiksbD0hMTtpJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJihcInRvdWNoXCI9PT1uLnRvbGVyYW5jZT9sPSEoaS5sZWZ0PnJ8fGE+aS5yaWdodHx8aS50b3A+aHx8bz5pLmJvdHRvbSk6XCJmaXRcIj09PW4udG9sZXJhbmNlJiYobD1pLmxlZnQ+YSYmcj5pLnJpZ2h0JiZpLnRvcD5vJiZoPmkuYm90dG9tKSxsPyhpLnNlbGVjdGVkJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITEpLGkudW5zZWxlY3RpbmcmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMSksaS5zZWxlY3Rpbmd8fChpLiRlbGVtZW50LmFkZENsYXNzKFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoXCJzZWxlY3RpbmdcIix0LHtzZWxlY3Rpbmc6aS5lbGVtZW50fSkpKTooaS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZpLnN0YXJ0c2VsZWN0ZWQ/KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJ1aS1zZWxlY3RpbmdcIiksaS5zZWxlY3Rpbmc9ITEsaS4kZWxlbWVudC5hZGRDbGFzcyhcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITApOihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSExLGkuc3RhcnRzZWxlY3RlZCYmKGkuJGVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSEwKSxzLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpLGkuc2VsZWN0ZWQmJih0Lm1ldGFLZXl8fHQuY3RybEtleXx8aS5zdGFydHNlbGVjdGVkfHwoaS4kZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcyhcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsdCx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSkpfSksITF9fSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXM7cmV0dXJuIHRoaXMuZHJhZ2dlZD0hMSxlKFwiLnVpLXVuc2VsZWN0aW5nXCIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9ZS5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7cy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXVuc2VsZWN0aW5nXCIpLHMudW5zZWxlY3Rpbmc9ITEscy5zdGFydHNlbGVjdGVkPSExLGkuX3RyaWdnZXIoXCJ1bnNlbGVjdGVkXCIsdCx7dW5zZWxlY3RlZDpzLmVsZW1lbnR9KX0pLGUoXCIudWktc2VsZWN0aW5nXCIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9ZS5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7cy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXNlbGVjdGluZ1wiKS5hZGRDbGFzcyhcInVpLXNlbGVjdGVkXCIpLHMuc2VsZWN0aW5nPSExLHMuc2VsZWN0ZWQ9ITAscy5zdGFydHNlbGVjdGVkPSEwLGkuX3RyaWdnZXIoXCJzZWxlY3RlZFwiLHQse3NlbGVjdGVkOnMuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcihcInN0b3BcIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KSxlLndpZGdldChcInVpLnNlbGVjdG1lbnVcIix7dmVyc2lvbjpcIjEuMTEuNFwiLGRlZmF1bHRFbGVtZW50OlwiPHNlbGVjdD5cIixvcHRpb25zOnthcHBlbmRUbzpudWxsLGRpc2FibGVkOm51bGwsaWNvbnM6e2J1dHRvbjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCJ9LHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcIm5vbmVcIn0sd2lkdGg6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO3RoaXMuaWRzPXtlbGVtZW50OmUsYnV0dG9uOmUrXCItYnV0dG9uXCIsbWVudTplK1wiLW1lbnVcIn0sdGhpcy5fZHJhd0J1dHRvbigpLHRoaXMuX2RyYXdNZW51KCksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2RyYXdCdXR0b246ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubGFiZWw9ZShcImxhYmVsW2Zvcj0nXCIrdGhpcy5pZHMuZWxlbWVudCtcIiddXCIpLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5idXR0b24pLHRoaXMuX29uKHRoaXMubGFiZWwse2NsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuYnV0dG9uLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpfX0pLHRoaXMuZWxlbWVudC5oaWRlKCksdGhpcy5idXR0b249ZShcIjxzcGFuPlwiLHtcImNsYXNzXCI6XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsXCIsdGFiaW5kZXg6dGhpcy5vcHRpb25zLmRpc2FibGVkPy0xOjAsaWQ6dGhpcy5pZHMuYnV0dG9uLHJvbGU6XCJjb21ib2JveFwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIixcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCIsXCJhcmlhLW93bnNcIjp0aGlzLmlkcy5tZW51LFwiYXJpYS1oYXNwb3B1cFwiOlwidHJ1ZVwifSkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSxlKFwiPHNwYW4+XCIse1wiY2xhc3NcIjpcInVpLWljb24gXCIrdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbn0pLnByZXBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5idXR0b25UZXh0PWUoXCI8c3Bhbj5cIix7XCJjbGFzc1wiOlwidWktc2VsZWN0bWVudS10ZXh0XCJ9KS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsdGhpcy5lbGVtZW50LmZpbmQoXCJvcHRpb246c2VsZWN0ZWRcIikudGV4dCgpKSx0aGlzLl9yZXNpemVCdXR0b24oKSx0aGlzLl9vbih0aGlzLmJ1dHRvbix0aGlzLl9idXR0b25FdmVudHMpLHRoaXMuYnV0dG9uLm9uZShcImZvY3VzaW5cIixmdW5jdGlvbigpe3QubWVudUl0ZW1zfHx0Ll9yZWZyZXNoTWVudSgpfSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uKSx0aGlzLl9mb2N1c2FibGUodGhpcy5idXR0b24pfSxfZHJhd01lbnU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubWVudT1lKFwiPHVsPlwiLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsXCJhcmlhLWxhYmVsbGVkYnlcIjp0aGlzLmlkcy5idXR0b24saWQ6dGhpcy5pZHMubWVudX0pLHRoaXMubWVudVdyYXA9ZShcIjxkaXY+XCIse1wiY2xhc3NcIjpcInVpLXNlbGVjdG1lbnUtbWVudSB1aS1mcm9udFwifSkuYXBwZW5kKHRoaXMubWVudSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5tZW51SW5zdGFuY2U9dGhpcy5tZW51Lm1lbnUoe3JvbGU6XCJsaXN0Ym94XCIsc2VsZWN0OmZ1bmN0aW9uKGUsaSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQuX3NldFNlbGVjdGlvbigpLHQuX3NlbGVjdChpLml0ZW0uZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKSxlKX0sZm9jdXM6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pLml0ZW0uZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKTtudWxsIT10LmZvY3VzSW5kZXgmJnMuaW5kZXghPT10LmZvY3VzSW5kZXgmJih0Ll90cmlnZ2VyKFwiZm9jdXNcIixlLHtpdGVtOnN9KSx0LmlzT3Blbnx8dC5fc2VsZWN0KHMsZSkpLHQuZm9jdXNJbmRleD1zLmluZGV4LHQuYnV0dG9uLmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIix0Lm1lbnVJdGVtcy5lcShzLmluZGV4KS5hdHRyKFwiaWRcIikpfX0pLm1lbnUoXCJpbnN0YW5jZVwiKSx0aGlzLm1lbnUuYWRkQ2xhc3MoXCJ1aS1jb3JuZXItYm90dG9tXCIpLnJlbW92ZUNsYXNzKFwidWktY29ybmVyLWFsbFwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKHRoaXMubWVudSxcIm1vdXNlbGVhdmVcIiksdGhpcy5tZW51SW5zdGFuY2UuX2Nsb3NlT25Eb2N1bWVudENsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMubWVudUluc3RhbmNlLl9pc0RpdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuX3NldFRleHQodGhpcy5idXR0b25UZXh0LHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLnRleHQoKSksdGhpcy5vcHRpb25zLndpZHRofHx0aGlzLl9yZXNpemVCdXR0b24oKX0sX3JlZnJlc2hNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51LmVtcHR5KCk7dmFyIGUsdD10aGlzLmVsZW1lbnQuZmluZChcIm9wdGlvblwiKTt0Lmxlbmd0aCYmKHRoaXMuX3BhcnNlT3B0aW9ucyh0KSx0aGlzLl9yZW5kZXJNZW51KHRoaXMubWVudSx0aGlzLml0ZW1zKSx0aGlzLm1lbnVJbnN0YW5jZS5yZWZyZXNoKCksdGhpcy5tZW51SXRlbXM9dGhpcy5tZW51LmZpbmQoXCJsaVwiKS5ub3QoXCIudWktc2VsZWN0bWVudS1vcHRncm91cFwiKSxlPXRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsZSksdGhpcy5fc2V0QXJpYShlLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIikpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSkpfSxvcGVuOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMubWVudUl0ZW1zPyh0aGlzLm1lbnUuZmluZChcIi51aS1zdGF0ZS1mb2N1c1wiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWZvY3VzXCIpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkpKTp0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuaXNPcGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLl9yZXNpemVNZW51KCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHRoaXMuX2RvY3VtZW50Q2xpY2spLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsZSkpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLm1lbnVXcmFwLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjp0aGlzLmJ1dHRvbn0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSl9LGNsb3NlOmZ1bmN0aW9uKGUpe3RoaXMuaXNPcGVuJiYodGhpcy5pc09wZW49ITEsdGhpcy5fdG9nZ2xlQXR0cigpLHRoaXMucmFuZ2U9bnVsbCx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCksdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsZSkpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b259LG1lbnVXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51fSxfcmVuZGVyTWVudTpmdW5jdGlvbih0LGkpe3ZhciBzPXRoaXMsbj1cIlwiO2UuZWFjaChpLGZ1bmN0aW9uKGksYSl7YS5vcHRncm91cCE9PW4mJihlKFwiPGxpPlwiLHtcImNsYXNzXCI6XCJ1aS1zZWxlY3RtZW51LW9wdGdyb3VwIHVpLW1lbnUtZGl2aWRlclwiKyhhLmVsZW1lbnQucGFyZW50KFwib3B0Z3JvdXBcIikucHJvcChcImRpc2FibGVkXCIpP1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIiksdGV4dDphLm9wdGdyb3VwfSkuYXBwZW5kVG8odCksbj1hLm9wdGdyb3VwKSxzLl9yZW5kZXJJdGVtRGF0YSh0LGEpfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKGUsdCkuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LGkpe3ZhciBzPWUoXCI8bGk+XCIpO3JldHVybiBpLmRpc2FibGVkJiZzLmFkZENsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIiksdGhpcy5fc2V0VGV4dChzLGkubGFiZWwpLHMuYXBwZW5kVG8odCl9LF9zZXRUZXh0OmZ1bmN0aW9uKGUsdCl7dD9lLnRleHQodCk6ZS5odG1sKFwiJiMxNjA7XCIpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj1cIi51aS1tZW51LWl0ZW1cIjt0aGlzLmlzT3Blbj9pPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCk6KGk9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLG4rPVwiOm5vdCgudWktc3RhdGUtZGlzYWJsZWQpXCIpLHM9XCJmaXJzdFwiPT09ZXx8XCJsYXN0XCI9PT1lP2lbXCJmaXJzdFwiPT09ZT9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0obikuZXEoLTEpOmlbZStcIkFsbFwiXShuKS5lcSgwKSxzLmxlbmd0aCYmdGhpcy5tZW51SW5zdGFuY2UuZm9jdXModCxzKX0sX2dldFNlbGVjdGVkSXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCl9LF90b2dnbGU6ZnVuY3Rpb24oZSl7dGhpc1t0aGlzLmlzT3Blbj9cImNsb3NlXCI6XCJvcGVuXCJdKGUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5yYW5nZSYmKHdpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZSh0aGlzLnJhbmdlKSk6dGhpcy5yYW5nZS5zZWxlY3QoKSx0aGlzLmJ1dHRvbi5mb2N1cygpKX0sX2RvY3VtZW50Q2xpY2s6e21vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLmlzT3BlbiYmKGUodC50YXJnZXQpLmNsb3Nlc3QoXCIudWktc2VsZWN0bWVudS1tZW51LCAjXCIrdGhpcy5pZHMuYnV0dG9uKS5sZW5ndGh8fHRoaXMuY2xvc2UodCkpfX0sX2J1dHRvbkV2ZW50czp7bW91c2Vkb3duOmZ1bmN0aW9uKCl7dmFyIGU7d2luZG93LmdldFNlbGVjdGlvbj8oZT13aW5kb3cuZ2V0U2VsZWN0aW9uKCksZS5yYW5nZUNvdW50JiYodGhpcy5yYW5nZT1lLmdldFJhbmdlQXQoMCkpKTp0aGlzLnJhbmdlPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfSxjbGljazpmdW5jdGlvbihlKXt0aGlzLl9zZXRTZWxlY3Rpb24oKSx0aGlzLl90b2dnbGUoZSl9LGtleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9ITA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuVEFCOmNhc2UgZS51aS5rZXlDb2RlLkVTQ0FQRTp0aGlzLmNsb3NlKHQpLGk9ITE7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6dGhpcy5pc09wZW4mJnRoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOnQuYWx0S2V5P3RoaXMuX3RvZ2dsZSh0KTp0aGlzLl9tb3ZlKFwicHJldlwiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dC5hbHRLZXk/dGhpcy5fdG9nZ2xlKHQpOnRoaXMuX21vdmUoXCJuZXh0XCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5pc09wZW4/dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0odCk6dGhpcy5fdG9nZ2xlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5fbW92ZShcInByZXZcIix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLl9tb3ZlKFwibmV4dFwiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLl9tb3ZlKFwiZmlyc3RcIix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJsYXN0XCIsdCk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1lbnUudHJpZ2dlcih0KSxpPSExfWkmJnQucHJldmVudERlZmF1bHQoKX19LF9zZWxlY3RGb2N1c2VkSXRlbTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpO3QuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKXx8dGhpcy5fc2VsZWN0KHQuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKSxlKX0sX3NlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4O3RoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4PWUuaW5kZXgsdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsZS5sYWJlbCksdGhpcy5fc2V0QXJpYShlKSx0aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsdCx7aXRlbTplfSksZS5pbmRleCE9PWkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHtpdGVtOmV9KSx0aGlzLmNsb3NlKHQpfSxfc2V0QXJpYTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1lbnVJdGVtcy5lcShlLmluZGV4KS5hdHRyKFwiaWRcIik7dGhpcy5idXR0b24uYXR0cih7XCJhcmlhLWxhYmVsbGVkYnlcIjp0LFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6dH0pLHRoaXMubWVudS5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsdCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtcImljb25zXCI9PT1lJiZ0aGlzLmJ1dHRvbi5maW5kKFwic3Bhbi51aS1pY29uXCIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy5idXR0b24pLmFkZENsYXNzKHQuYnV0dG9uKSx0aGlzLl9zdXBlcihlLHQpLFwiYXBwZW5kVG9cIj09PWUmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksXCJkaXNhYmxlZFwiPT09ZSYmKHRoaXMubWVudUluc3RhbmNlLm9wdGlvbihcImRpc2FibGVkXCIsdCksdGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLHQpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLHQpLHQ/KHRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLDApKSxcIndpZHRoXCI9PT1lJiZ0aGlzLl9yZXNpemVCdXR0b24oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiB0JiYodD10LmpxdWVyeXx8dC5ub2RlVHlwZT9lKHQpOnRoaXMuZG9jdW1lbnQuZmluZCh0KS5lcSgwKSksdCYmdFswXXx8KHQ9dGhpcy5lbGVtZW50LmNsb3Nlc3QoXCIudWktZnJvbnRcIikpLHQubGVuZ3RofHwodD10aGlzLmRvY3VtZW50WzBdLmJvZHkpLHR9LF90b2dnbGVBdHRyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoXCJ1aS1jb3JuZXItdG9wXCIsdGhpcy5pc09wZW4pLnRvZ2dsZUNsYXNzKFwidWktY29ybmVyLWFsbFwiLCF0aGlzLmlzT3BlbikuYXR0cihcImFyaWEtZXhwYW5kZWRcIix0aGlzLmlzT3BlbiksdGhpcy5tZW51V3JhcC50b2dnbGVDbGFzcyhcInVpLXNlbGVjdG1lbnUtb3BlblwiLHRoaXMuaXNPcGVuKSx0aGlzLm1lbnUuYXR0cihcImFyaWEtaGlkZGVuXCIsIXRoaXMuaXNPcGVuKX0sX3Jlc2l6ZUJ1dHRvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy53aWR0aDtlfHwoZT10aGlzLmVsZW1lbnQuc2hvdygpLm91dGVyV2lkdGgoKSx0aGlzLmVsZW1lbnQuaGlkZSgpKSx0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKGUpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5vdXRlcldpZHRoKE1hdGgubWF4KHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoKSx0aGlzLm1lbnUud2lkdGgoXCJcIikub3V0ZXJXaWR0aCgpKzEpKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzYWJsZWQ6dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKX19LF9wYXJzZU9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGk9W107dC5lYWNoKGZ1bmN0aW9uKHQscyl7dmFyIG49ZShzKSxhPW4ucGFyZW50KFwib3B0Z3JvdXBcIik7aS5wdXNoKHtlbGVtZW50Om4saW5kZXg6dCx2YWx1ZTpuLnZhbCgpLGxhYmVsOm4udGV4dCgpLG9wdGdyb3VwOmEuYXR0cihcImxhYmVsXCIpfHxcIlwiLGRpc2FibGVkOmEucHJvcChcImRpc2FibGVkXCIpfHxuLnByb3AoXCJkaXNhYmxlZFwiKX0pfSksdGhpcy5pdGVtcz1pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVsLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5lbGVtZW50KX19KSxlLndpZGdldChcInVpLnNsaWRlclwiLGUudWkubW91c2Use3ZlcnNpb246XCIxLjExLjRcIix3aWRnZXRFdmVudFByZWZpeDpcInNsaWRlXCIsb3B0aW9uczp7YW5pbWF0ZTohMSxkaXN0YW5jZTowLG1heDoxMDAsbWluOjAsb3JpZW50YXRpb246XCJob3Jpem9udGFsXCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGwsY2hhbmdlOm51bGwsc2xpZGU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sbnVtUGFnZXM6NSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktc2xpZGVyIHVpLXNsaWRlci1cIit0aGlzLm9yaWVudGF0aW9uK1wiIHVpLXdpZGdldFwiK1wiIHVpLXdpZGdldC1jb250ZW50XCIrXCIgdWktY29ybmVyLWFsbFwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2FuaW1hdGVPZmY9ITF9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlUmFuZ2UoKSx0aGlzLl9jcmVhdGVIYW5kbGVzKCksdGhpcy5fc2V0dXBFdmVudHMoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2NyZWF0ZUhhbmRsZXM6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcy5vcHRpb25zLG49dGhpcy5lbGVtZW50LmZpbmQoXCIudWktc2xpZGVyLWhhbmRsZVwiKS5hZGRDbGFzcyhcInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbFwiKSxhPVwiPHNwYW4gY2xhc3M9J3VpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyB0YWJpbmRleD0nMCc+PC9zcGFuPlwiLG89W107Zm9yKGk9cy52YWx1ZXMmJnMudmFsdWVzLmxlbmd0aHx8MSxuLmxlbmd0aD5pJiYobi5zbGljZShpKS5yZW1vdmUoKSxuPW4uc2xpY2UoMCxpKSksdD1uLmxlbmd0aDtpPnQ7dCsrKW8ucHVzaChhKTt0aGlzLmhhbmRsZXM9bi5hZGQoZShvLmpvaW4oXCJcIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbih0KXtlKHRoaXMpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIsdCl9KX0sX2NyZWF0ZVJhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9XCJcIjt0LnJhbmdlPyh0LnJhbmdlPT09ITAmJih0LnZhbHVlcz90LnZhbHVlcy5sZW5ndGgmJjIhPT10LnZhbHVlcy5sZW5ndGg/dC52YWx1ZXM9W3QudmFsdWVzWzBdLHQudmFsdWVzWzBdXTplLmlzQXJyYXkodC52YWx1ZXMpJiYodC52YWx1ZXM9dC52YWx1ZXMuc2xpY2UoMCkpOnQudmFsdWVzPVt0aGlzLl92YWx1ZU1pbigpLHRoaXMuX3ZhbHVlTWluKCldKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLmxlbmd0aD90aGlzLnJhbmdlLnJlbW92ZUNsYXNzKFwidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4XCIpLmNzcyh7bGVmdDpcIlwiLGJvdHRvbTpcIlwifSk6KHRoaXMucmFuZ2U9ZShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksaT1cInVpLXNsaWRlci1yYW5nZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGxcIiksdGhpcy5yYW5nZS5hZGRDbGFzcyhpKyhcIm1pblwiPT09dC5yYW5nZXx8XCJtYXhcIj09PXQucmFuZ2U/XCIgdWktc2xpZGVyLXJhbmdlLVwiK3QucmFuZ2U6XCJcIikpKToodGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLnJhbmdlPW51bGwpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLl9vZmYodGhpcy5oYW5kbGVzKSx0aGlzLl9vbih0aGlzLmhhbmRsZXMsdGhpcy5faGFuZGxlRXZlbnRzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oYW5kbGVzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oYW5kbGVzKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXMucmVtb3ZlKCksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsXCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLGQ9dGhpcy5vcHRpb25zO3JldHVybiBkLmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxpPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxzPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShpKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHMtdS52YWx1ZXModCkpOyhuPml8fG49PT1pJiYodD09PXUuX2xhc3RDaGFuZ2VkVmFsdWV8fHUudmFsdWVzKHQpPT09ZC5taW4pKSYmKG49aSxhPWUodGhpcyksbz10KX0pLHI9dGhpcy5fc3RhcnQodCxvKSxyPT09ITE/ITE6KHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1vLGEuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIikuZm9jdXMoKSxoPWEub2Zmc2V0KCksbD0hZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5pcyhcIi51aS1zbGlkZXItaGFuZGxlXCIpLHRoaXMuX2NsaWNrT2Zmc2V0PWw/e2xlZnQ6MCx0b3A6MH06e2xlZnQ6dC5wYWdlWC1oLmxlZnQtYS53aWR0aCgpLzIsdG9wOnQucGFnZVktaC50b3AtYS5oZWlnaHQoKS8yLShwYXJzZUludChhLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KGEuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoYS5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwKX0sdGhpcy5oYW5kbGVzLmhhc0NsYXNzKFwidWktc3RhdGUtaG92ZXJcIil8fHRoaXMuX3NsaWRlKHQsbyxzKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9e3g6ZS5wYWdlWCx5OmUucGFnZVl9LGk9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKHQpO3JldHVybiB0aGlzLl9zbGlkZShlLHRoaXMuX2hhbmRsZUluZGV4LGkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYTtyZXR1cm5cImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24/KHQ9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxpPWUueC10aGlzLmVsZW1lbnRPZmZzZXQubGVmdC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQubGVmdDowKSk6KHQ9dGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsaT1lLnktdGhpcy5lbGVtZW50T2Zmc2V0LnRvcC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQudG9wOjApKSxzPWkvdCxzPjEmJihzPTEpLDA+cyYmKHM9MCksXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmKHM9MS1zKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxhPXRoaXMuX3ZhbHVlTWluKCkrcypuLHRoaXMuX3RyaW1BbGlnblZhbHVlKGEpfSxfc3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXModCksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSxpKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxuLGE7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHM9dGhpcy52YWx1ZXModD8wOjEpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJigwPT09dCYmaT5zfHwxPT09dCYmcz5pKSYmKGk9cyksaSE9PXRoaXMudmFsdWVzKHQpJiYobj10aGlzLnZhbHVlcygpLG5bdF09aSxhPXRoaXMuX3RyaWdnZXIoXCJzbGlkZVwiLGUse2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6aSx2YWx1ZXM6bn0pLHM9dGhpcy52YWx1ZXModD8wOjEpLGEhPT0hMSYmdGhpcy52YWx1ZXModCxpKSkpOmkhPT10aGlzLnZhbHVlKCkmJihhPXRoaXMuX3RyaWdnZXIoXCJzbGlkZVwiLGUse2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6aX0pLGEhPT0hMSYmdGhpcy52YWx1ZShpKSl9LF9zdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIGk9e2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXModCksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcihcInN0b3BcIixlLGkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihpLnZhbHVlPXRoaXMudmFsdWVzKHQpLGkudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSxpKX19LHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCksdm9pZCAwKTp0aGlzLl92YWx1ZSgpfSx2YWx1ZXM6ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzW3RdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLHQpLHZvaWQgMDtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdmFsdWVzKCk7aWYoIWUuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLl92YWx1ZXModCk6dGhpcy52YWx1ZSgpO2ZvcihzPXRoaXMub3B0aW9ucy52YWx1ZXMsbj1hcmd1bWVudHNbMF0sYT0wO3MubGVuZ3RoPmE7YSs9MSlzW2FdPXRoaXMuX3RyaW1BbGlnblZhbHVlKG5bYV0pLHRoaXMuX2NoYW5nZShudWxsLGEpO3RoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbj0wO3N3aXRjaChcInJhbmdlXCI9PT10JiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKFwibWluXCI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6XCJtYXhcIj09PWkmJih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoLTEpLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCkpLGUuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSYmKG49dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpLFwiZGlzYWJsZWRcIj09PXQmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIsISFpKSx0aGlzLl9zdXBlcih0LGkpLHQpe2Nhc2VcIm9yaWVudGF0aW9uXCI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWxcIikuYWRkQ2xhc3MoXCJ1aS1zbGlkZXItXCIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5oYW5kbGVzLmNzcyhcImhvcml6b250YWxcIj09PWk/XCJib3R0b21cIjpcImxlZnRcIixcIlwiKTticmVhaztjYXNlXCJ2YWx1ZVwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJ2YWx1ZXNcIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPTA7bj5zO3MrPTEpdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJzdGVwXCI6Y2FzZVwibWluXCI6Y2FzZVwibWF4XCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInJhbmdlXCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX19LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKX0sX3ZhbHVlczpmdW5jdGlvbihlKXt2YXIgdCxpLHM7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdD10aGlzLm9wdGlvbnMudmFsdWVzW2VdLHQ9dGhpcy5fdHJpbUFsaWduVmFsdWUodCk7aWYodGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpe2ZvcihpPXRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKSxzPTA7aS5sZW5ndGg+cztzKz0xKWlbc109dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSk7cmV0dXJuIGl9cmV0dXJuW119LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl92YWx1ZU1pbigpPj1lKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKGU+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIHQ9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLGk9KGUtdGhpcy5fdmFsdWVNaW4oKSkldCxzPWUtaTtyZXR1cm4gMipNYXRoLmFicyhpKT49dCYmKHMrPWk+MD90Oi10KSxwYXJzZUZsb2F0KHMudG9GaXhlZCg1KSl9LF9jYWxjdWxhdGVOZXdNYXg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMubWF4LHQ9dGhpcy5fdmFsdWVNaW4oKSxpPXRoaXMub3B0aW9ucy5zdGVwLHM9TWF0aC5mbG9vcigrKGUtdCkudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkvaSkqaTtlPXMrdCx0aGlzLm1heD1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKGU9TWF0aC5tYXgoZSx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLGV9LF9wcmVjaXNpb25PZjpmdW5jdGlvbihlKXt2YXIgdD1cIlwiK2UsaT10LmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsaD10aGlzLGw9dGhpcy5fYW5pbWF0ZU9mZj8hMTpyLmFuaW1hdGUsdT17fTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihzKXtpPTEwMCooKGgudmFsdWVzKHMpLWguX3ZhbHVlTWluKCkpLyhoLl92YWx1ZU1heCgpLWguX3ZhbHVlTWluKCkpKSx1W1wiaG9yaXpvbnRhbFwiPT09aC5vcmllbnRhdGlvbj9cImxlZnRcIjpcImJvdHRvbVwiXT1pK1wiJVwiLGUodGhpcykuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0odSxyLmFuaW1hdGUpLGgub3B0aW9ucy5yYW5nZT09PSEwJiYoXCJob3Jpem9udGFsXCI9PT1oLm9yaWVudGF0aW9uPygwPT09cyYmaC5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7bGVmdDppK1wiJVwifSxyLmFuaW1hdGUpLDE9PT1zJiZoLnJhbmdlW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe3dpZHRoOmktdCtcIiVcIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKTooMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2JvdHRvbTppK1wiJVwifSxyLmFuaW1hdGUpLDE9PT1zJiZoLnJhbmdlW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2hlaWdodDppLXQrXCIlXCJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSkpLHQ9aX0pOihzPXRoaXMudmFsdWUoKSxuPXRoaXMuX3ZhbHVlTWluKCksYT10aGlzLl92YWx1ZU1heCgpLGk9YSE9PW4/MTAwKigocy1uKS8oYS1uKSk6MCx1W1wiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbj9cImxlZnRcIjpcImJvdHRvbVwiXT1pK1wiJVwiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHUsci5hbmltYXRlKSxcIm1pblwiPT09byYmXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppK1wiJVwifSxyLmFuaW1hdGUpLFwibWF4XCI9PT1vJiZcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6MTAwLWkrXCIlXCJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSxcIm1pblwiPT09byYmXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OmkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtYXhcIj09PW8mJlwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OjEwMC1pK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0LnRhcmdldCkuZGF0YShcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIik7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpjYXNlIGUudWkua2V5Q29kZS5QQUdFX0RPV046Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpjYXNlIGUudWkua2V5Q29kZS5MRUZUOmlmKHQucHJldmVudERlZmF1bHQoKSwhdGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITAsZSh0LnRhcmdldCkuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIiksaT10aGlzLl9zdGFydCh0LG8pLGk9PT0hMSkpcmV0dXJufXN3aXRjaChhPXRoaXMub3B0aW9ucy5zdGVwLHM9bj10aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLnZhbHVlcyhvKTp0aGlzLnZhbHVlKCksdC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5IT01FOm49dGhpcy5fdmFsdWVNaW4oKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6bj10aGlzLl92YWx1ZU1heCgpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6bj10aGlzLl90cmltQWxpZ25WYWx1ZShzKyh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL3RoaXMubnVtUGFnZXMpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMtKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6aWYocz09PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocythKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5ET1dOOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aWYocz09PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocy1hKX10aGlzLl9zbGlkZSh0LG8sbil9LGtleXVwOmZ1bmN0aW9uKHQpe3ZhciBpPWUodC50YXJnZXQpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxpKSx0aGlzLl9jaGFuZ2UodCxpKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSl9fX0pLGUud2lkZ2V0KFwidWkuc29ydGFibGVcIixlLnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMS40XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzb3J0XCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86XCJwYXJlbnRcIixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjpcImF1dG9cIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOlwib3JpZ2luYWxcIixpdGVtczpcIj4gKlwiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIix6SW5kZXg6MWUzLGFjdGl2YXRlOm51bGwsYmVmb3JlU3RvcDpudWxsLGNoYW5nZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGwscmVjZWl2ZTpudWxsLHJlbW92ZTpudWxsLHNvcnQ6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1cGRhdGU6bnVsbH0sX2lzT3ZlckF4aXM6ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBlPj10JiZ0K2k+ZX0sX2lzRmxvYXRpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuL2xlZnR8cmlnaHQvLnRlc3QoZS5jc3MoXCJmbG9hdFwiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdChlLmNzcyhcImRpc3BsYXlcIikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS1zb3J0YWJsZVwiKSx0aGlzLnJlZnJlc2goKSx0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWFkeT0hMH0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3N1cGVyKGUsdCksXCJoYW5kbGVcIj09PWUmJnRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpfSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQoXCIudWktc29ydGFibGUtaGFuZGxlXCIpLnJlbW92ZUNsYXNzKFwidWktc29ydGFibGUtaGFuZGxlXCIpLGUuZWFjaCh0aGlzLml0ZW1zLGZ1bmN0aW9uKCl7KHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGU/dGhpcy5pdGVtLmZpbmQodGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZSk6dGhpcy5pdGVtKS5hZGRDbGFzcyhcInVpLXNvcnRhYmxlLWhhbmRsZVwiKX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXNvcnRhYmxlIHVpLXNvcnRhYmxlLWRpc2FibGVkXCIpLmZpbmQoXCIudWktc29ydGFibGUtaGFuZGxlXCIpLnJlbW92ZUNsYXNzKFwidWktc29ydGFibGUtaGFuZGxlXCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuaXRlbXNbZV0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZStcIi1pdGVtXCIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsaSl7dmFyIHM9bnVsbCxuPSExLGE9dGhpcztyZXR1cm4gdGhpcy5yZXZlcnRpbmc/ITE6dGhpcy5vcHRpb25zLmRpc2FibGVkfHxcInN0YXRpY1wiPT09dGhpcy5vcHRpb25zLnR5cGU/ITE6KHRoaXMuX3JlZnJlc2hJdGVtcyh0KSxlKHQudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiBlLmRhdGEodGhpcyxhLndpZGdldE5hbWUrXCItaXRlbVwiKT09PWE/KHM9ZSh0aGlzKSwhMSk6dm9pZCAwfSksZS5kYXRhKHQudGFyZ2V0LGEud2lkZ2V0TmFtZStcIi1pdGVtXCIpPT09YSYmKHM9ZSh0LnRhcmdldCkpLHM/IXRoaXMub3B0aW9ucy5oYW5kbGV8fGl8fChlKHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZChcIipcIikuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT09dC50YXJnZXQmJihuPSEwKX0pLG4pPyh0aGlzLmN1cnJlbnRJdGVtPXMsdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMCk6ITE6ITEpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG4sYSxvPXRoaXMub3B0aW9ucztpZih0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcyx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIodCksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0PXRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGUuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDp0LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOnQucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMub3JpZ2luYWxQYWdlWD10LnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT10LnBhZ2VZLG8uY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoby5jdXJzb3JBdCksdGhpcy5kb21Qb3NpdGlvbj17cHJldjp0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVswXSxwYXJlbnQ6dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXX0sdGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSx0aGlzLl9jcmVhdGVQbGFjZWhvbGRlcigpLG8uY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksby5jdXJzb3ImJlwiYXV0b1wiIT09by5jdXJzb3ImJihhPXRoaXMuZG9jdW1lbnQuZmluZChcImJvZHlcIiksdGhpcy5zdG9yZWRDdXJzb3I9YS5jc3MoXCJjdXJzb3JcIiksYS5jc3MoXCJjdXJzb3JcIixvLmN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0PWUoXCI8c3R5bGU+KnsgY3Vyc29yOiBcIitvLmN1cnNvcitcIiAhaW1wb3J0YW50OyB9PC9zdHlsZT5cIikuYXBwZW5kVG8oYSkpLG8ub3BhY2l0eSYmKHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikpLHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIixvLm9wYWNpdHkpKSxvLnpJbmRleCYmKHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIikpLHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLG8uekluZGV4KSksdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUmJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKFwic3RhcnRcIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIXMpZm9yKG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsdCx0aGlzLl91aUhhc2godGhpcykpO1xucmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSxlLnVpLmRkbWFuYWdlciYmIW8uZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyx0KSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuaGVscGVyLmFkZENsYXNzKFwidWktc29ydGFibGUtaGVscGVyXCIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLHRoaXMubGFzdFBvc2l0aW9uQWJzfHwodGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicyksdGhpcy5vcHRpb25zLnNjcm9sbCYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmXCJIVE1MXCIhPT10aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lPyh0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxvLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtvLnNjcm9sbFNwZWVkOnQucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8by5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1vLnNjcm9sbFNwZWVkKSx0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxvLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K28uc2Nyb2xsU3BlZWQ6dC5wYWdlWC10aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQ8by5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LW8uc2Nyb2xsU3BlZWQpKToodC5wYWdlWS10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/cj10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCh0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpLW8uc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LmhlaWdodCgpLSh0LnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkrby5zY3JvbGxTcGVlZCkpLHQucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCk8by5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKS1vLnNjcm9sbFNwZWVkKTp0aGlzLndpbmRvdy53aWR0aCgpLSh0LnBhZ2VYLXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpKTxvLnNjcm9sbFNlbnNpdGl2aXR5JiYocj10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQodGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkrby5zY3JvbGxTcGVlZCkpKSxyIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIiksdGhpcy5vcHRpb25zLmF4aXMmJlwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIpLHRoaXMub3B0aW9ucy5heGlzJiZcInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIiksaT10aGlzLml0ZW1zLmxlbmd0aC0xO2k+PTA7aS0tKWlmKHM9dGhpcy5pdGVtc1tpXSxuPXMuaXRlbVswXSxhPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihzKSxhJiZzLmluc3RhbmNlPT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiZuIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5wbGFjZWhvbGRlclsxPT09YT9cIm5leHRcIjpcInByZXZcIl0oKVswXSE9PW4mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbikmJihcInNlbWktZHluYW1pY1wiPT09dGhpcy5vcHRpb25zLnR5cGU/IWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLG4pOiEwKSl7aWYodGhpcy5kaXJlY3Rpb249MT09PWE/XCJkb3duXCI6XCJ1cFwiLFwicG9pbnRlclwiIT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZSYmIXRoaXMuX2ludGVyc2VjdHNXaXRoU2lkZXMocykpYnJlYWs7dGhpcy5fcmVhcnJhbmdlKHQscyksdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLHQsdGhpcy5fdWlIYXNoKCkpO2JyZWFrfXJldHVybiB0aGlzLl9jb250YWN0Q29udGFpbmVycyh0KSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLHRoaXMuX3RyaWdnZXIoXCJzb3J0XCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LGkpe2lmKHQpe2lmKGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxhPXRoaXMub3B0aW9ucy5heGlzLG89e307YSYmXCJ4XCIhPT1hfHwoby5sZWZ0PW4ubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdC10aGlzLm1hcmdpbnMubGVmdCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxMZWZ0KSksYSYmXCJ5XCIhPT1hfHwoby50b3A9bi50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcC10aGlzLm1hcmdpbnMudG9wKyh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbFRvcCkpLHRoaXMucmV2ZXJ0aW5nPSEwLGUodGhpcy5oZWxwZXIpLmFuaW1hdGUobyxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7cy5fY2xlYXIodCl9KX1lbHNlIHRoaXMuX2NsZWFyKHQsaSk7cmV0dXJuITF9fSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLl9tb3VzZVVwKHt0YXJnZXQ6bnVsbH0pLFwib3JpZ2luYWxcIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcyhcInVpLXNvcnRhYmxlLWhlbHBlclwiKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIHQ9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoXCJvdXRcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSxcIm9yaWdpbmFsXCIhPT10aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLmhlbHBlciYmdGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksZS5leHRlbmQodGhpcyx7aGVscGVyOm51bGwsZHJhZ2dpbmc6ITEscmV2ZXJ0aW5nOiExLF9ub0ZpbmFsU29ydDpudWxsfSksdGhpcy5kb21Qb3NpdGlvbi5wcmV2P2UodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKTplKHRoaXMuZG9tUG9zaXRpb24ucGFyZW50KS5wcmVwZW5kKHRoaXMuY3VycmVudEl0ZW0pKSx0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSh0JiZ0LmNvbm5lY3RlZCkscz1bXTtyZXR1cm4gdD10fHx7fSxlKGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT0oZSh0Lml0ZW18fHRoaXMpLmF0dHIodC5hdHRyaWJ1dGV8fFwiaWRcIil8fFwiXCIpLm1hdGNoKHQuZXhwcmVzc2lvbnx8LyguKylbXFwtPV9dKC4rKS8pO2kmJnMucHVzaCgodC5rZXl8fGlbMV0rXCJbXVwiKStcIj1cIisodC5rZXkmJnQuZXhwcmVzc2lvbj9pWzFdOmlbMl0pKX0pLCFzLmxlbmd0aCYmdC5rZXkmJnMucHVzaCh0LmtleStcIj1cIikscy5qb2luKFwiJlwiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxzPVtdO3JldHVybiB0PXR8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8XCJpZFwiKXx8XCJcIil9KSxzfSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGk9dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHM9dGhpcy5wb3NpdGlvbkFicy50b3Asbj1zK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGE9ZS5sZWZ0LG89YStlLndpZHRoLHI9ZS50b3AsaD1yK2UuaGVpZ2h0LGw9dGhpcy5vZmZzZXQuY2xpY2sudG9wLHU9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxkPVwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZoPnMrbCxjPVwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHQrdT5hJiZvPnQrdSxwPWQmJmM7cmV0dXJuXCJwb2ludGVyXCI9PT10aGlzLm9wdGlvbnMudG9sZXJhbmNlfHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8XCJwb2ludGVyXCIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJdPmVbdGhpcy5mbG9hdGluZz9cIndpZHRoXCI6XCJoZWlnaHRcIl0/cDp0K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5hJiZvPmktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZzK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+ciYmaD5uLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzJ9LF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsZS50b3AsZS5oZWlnaHQpLGk9XCJ5XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQsZS53aWR0aCkscz10JiZpLG49dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBzP3RoaXMuZmxvYXRpbmc/YSYmXCJyaWdodFwiPT09YXx8XCJkb3duXCI9PT1uPzI6MTpuJiYoXCJkb3duXCI9PT1uPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGUudG9wK2UuaGVpZ2h0LzIsZS5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQrZS53aWR0aC8yLGUud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuP1wicmlnaHRcIj09PW4mJml8fFwibGVmdFwiPT09biYmIWk6cyYmKFwiZG93blwiPT09cyYmdHx8XCJ1cFwiPT09cyYmIXQpfSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiAwIT09ZSYmKGU+MD9cImRvd25cIjpcInVwXCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PWUmJihlPjA/XCJyaWdodFwiOlwibGVmdFwiKX0scmVmcmVzaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVmcmVzaEl0ZW1zKGUpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXN9LF9jb25uZWN0V2l0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5jb25uZWN0V2l0aC5jb25zdHJ1Y3Rvcj09PVN0cmluZz9bZS5jb25uZWN0V2l0aF06ZS5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaSgpe3IucHVzaCh0aGlzKX12YXIgcyxuLGEsbyxyPVtdLGg9W10sbD10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGwmJnQpZm9yKHM9bC5sZW5ndGgtMTtzPj0wO3MtLSlmb3IoYT1lKGxbc10sdGhpcy5kb2N1bWVudFswXSksbj1hLmxlbmd0aC0xO24+PTA7bi0tKW89ZS5kYXRhKGFbbl0sdGhpcy53aWRnZXRGdWxsTmFtZSksbyYmbyE9PXRoaXMmJiFvLm9wdGlvbnMuZGlzYWJsZWQmJmgucHVzaChbZS5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcyk/by5vcHRpb25zLml0ZW1zLmNhbGwoby5lbGVtZW50KTplKG8ub3B0aW9ucy5pdGVtcyxvLmVsZW1lbnQpLm5vdChcIi51aS1zb3J0YWJsZS1oZWxwZXJcIikubm90KFwiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIpLG9dKTtmb3IoaC5wdXNoKFtlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnQsbnVsbCx7b3B0aW9uczp0aGlzLm9wdGlvbnMsaXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpLm5vdChcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gZShyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKFwiOmRhdGEoXCIrdGhpcy53aWRnZXROYW1lK1wiLWl0ZW0pXCIpO3RoaXMuaXRlbXM9ZS5ncmVwKHRoaXMuaXRlbXMsZnVuY3Rpb24oZSl7Zm9yKHZhciBpPTA7dC5sZW5ndGg+aTtpKyspaWYodFtpXT09PWUuaXRlbVswXSlyZXR1cm4hMTtyZXR1cm4hMH0pfSxfcmVmcmVzaEl0ZW1zOmZ1bmN0aW9uKHQpe3RoaXMuaXRlbXM9W10sdGhpcy5jb250YWluZXJzPVt0aGlzXTt2YXIgaSxzLG4sYSxvLHIsaCxsLHU9dGhpcy5pdGVtcyxkPVtbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50WzBdLHQse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCksdGhpc11dLGM9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihjJiZ0aGlzLnJlYWR5KWZvcihpPWMubGVuZ3RoLTE7aT49MDtpLS0pZm9yKG49ZShjW2ldLHRoaXMuZG9jdW1lbnRbMF0pLHM9bi5sZW5ndGgtMTtzPj0wO3MtLSlhPWUuZGF0YShuW3NdLHRoaXMud2lkZ2V0RnVsbE5hbWUpLGEmJmEhPT10aGlzJiYhYS5vcHRpb25zLmRpc2FibGVkJiYoZC5wdXNoKFtlLmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZShhLm9wdGlvbnMuaXRlbXMsYS5lbGVtZW50KSxhXSksdGhpcy5jb250YWluZXJzLnB1c2goYSkpO2ZvcihpPWQubGVuZ3RoLTE7aT49MDtpLS0pZm9yKG89ZFtpXVsxXSxyPWRbaV1bMF0scz0wLGw9ci5sZW5ndGg7bD5zO3MrKyloPWUocltzXSksaC5kYXRhKHRoaXMud2lkZ2V0TmFtZStcIi1pdGVtXCIsbyksdS5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/XCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNGbG9hdGluZyh0aGlzLml0ZW1zWzBdLml0ZW0pOiExLHRoaXMub2Zmc2V0UGFyZW50JiZ0aGlzLmhlbHBlciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSk7dmFyIGkscyxuLGE7Zm9yKGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlzPXRoaXMuaXRlbXNbaV0scy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZzLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdfHwobj10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD9lKHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHMuaXRlbSk6cy5pdGVtLHR8fChzLndpZHRoPW4ub3V0ZXJXaWR0aCgpLHMuaGVpZ2h0PW4ub3V0ZXJIZWlnaHQoKSksYT1uLm9mZnNldCgpLHMubGVmdD1hLmxlZnQscy50b3A9YS50b3ApO2lmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWE9dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmxlZnQ9YS5sZWZ0LHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS50b3A9YS50b3AsdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbih0KXt0PXR8fHRoaXM7dmFyIGkscz10Lm9wdGlvbnM7cy5wbGFjZWhvbGRlciYmcy5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciE9PVN0cmluZ3x8KGk9cy5wbGFjZWhvbGRlcixzLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIHM9dC5jdXJyZW50SXRlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49ZShcIjxcIitzK1wiPlwiLHQuZG9jdW1lbnRbMF0pLmFkZENsYXNzKGl8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lK1wiIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIpLnJlbW92ZUNsYXNzKFwidWktc29ydGFibGUtaGVscGVyXCIpO3JldHVyblwidGJvZHlcIj09PXM/dC5fY3JlYXRlVHJQbGFjZWhvbGRlcih0LmN1cnJlbnRJdGVtLmZpbmQoXCJ0clwiKS5lcSgwKSxlKFwiPHRyPlwiLHQuZG9jdW1lbnRbMF0pLmFwcGVuZFRvKG4pKTpcInRyXCI9PT1zP3QuX2NyZWF0ZVRyUGxhY2Vob2xkZXIodC5jdXJyZW50SXRlbSxuKTpcImltZ1wiPT09cyYmbi5hdHRyKFwic3JjXCIsdC5jdXJyZW50SXRlbS5hdHRyKFwic3JjXCIpKSxpfHxuLmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxufSx1cGRhdGU6ZnVuY3Rpb24oZSxuKXsoIWl8fHMuZm9yY2VQbGFjZWhvbGRlclNpemUpJiYobi5oZWlnaHQoKXx8bi5oZWlnaHQodC5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1RvcFwiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpfHwwLDEwKSksbi53aWR0aCgpfHxuLndpZHRoKHQuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ0xlZnRcIil8fDAsMTApLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1JpZ2h0XCIpfHwwLDEwKSkpfX0pLHQucGxhY2Vob2xkZXI9ZShzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO3QuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7ZShcIjx0ZD4mIzE2MDs8L3RkPlwiLHMuZG9jdW1lbnRbMF0pLmF0dHIoXCJjb2xzcGFuXCIsZSh0aGlzKS5hdHRyKFwiY29sc3BhblwiKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdSxkLGM9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCFlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcihcIm91dFwiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZihjKWlmKDE9PT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoKXRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xKTtlbHNle2ZvcihuPTFlNCxhPW51bGwsdT1jLmZsb2F0aW5nfHx0aGlzLl9pc0Zsb2F0aW5nKHRoaXMuY3VycmVudEl0ZW0pLG89dT9cImxlZnRcIjpcInRvcFwiLHI9dT9cIndpZHRoXCI6XCJoZWlnaHRcIixkPXU/XCJjbGllbnRYXCI6XCJjbGllbnRZXCIscz10aGlzLml0ZW1zLmxlbmd0aC0xO3M+PTA7cy0tKWUuY29udGFpbnModGhpcy5jb250YWluZXJzW3BdLmVsZW1lbnRbMF0sdGhpcy5pdGVtc1tzXS5pdGVtWzBdKSYmdGhpcy5pdGVtc1tzXS5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmKGg9dGhpcy5pdGVtc1tzXS5pdGVtLm9mZnNldCgpW29dLGw9ITEsdFtkXS1oPnRoaXMuaXRlbXNbc11bcl0vMiYmKGw9ITApLG4+TWF0aC5hYnModFtkXS1oKSYmKG49TWF0aC5hYnModFtkXS1oKSxhPXRoaXMuaXRlbXNbc10sdGhpcy5kaXJlY3Rpb249bD9cInVwXCI6XCJkb3duXCIpKTtpZighYSYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSlyZXR1cm47aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPT09dGhpcy5jb250YWluZXJzW3BdKXJldHVybiB0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcIm92ZXJcIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3Zlcj0xKSx2b2lkIDA7YT90aGlzLl9yZWFycmFuZ2UodCxhLG51bGwsITApOnRoaXMuX3JlYXJyYW5nZSh0LG51bGwsdGhpcy5jb250YWluZXJzW3BdLmVsZW1lbnQsITApLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1twXSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJvdmVyXCIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTF9fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPWUuaXNGdW5jdGlvbihpLmhlbHBlcik/ZShpLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3QsdGhpcy5jdXJyZW50SXRlbV0pKTpcImNsb25lXCI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKFwiYm9keVwiKS5sZW5ndGh8fGUoXCJwYXJlbnRcIiE9PWkuYXBwZW5kVG8/aS5hcHBlbmRUbzp0aGlzLmN1cnJlbnRJdGVtWzBdLnBhcmVudE5vZGUpWzBdLmFwcGVuZENoaWxkKHNbMF0pLHNbMF09PT10aGlzLmN1cnJlbnRJdGVtWzBdJiYodGhpcy5fc3RvcmVkQ1NTPXt3aWR0aDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCxwb3NpdGlvbjp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcInBvc2l0aW9uXCIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcInRvcFwiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKFwibGVmdFwiKX0pLCghc1swXS5zdHlsZS53aWR0aHx8aS5mb3JjZUhlbHBlclNpemUpJiZzLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksKCFzWzBdLnN0eWxlLmhlaWdodHx8aS5mb3JjZUhlbHBlclNpemUpJiZzLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxzfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC5zcGxpdChcIiBcIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksXCJsZWZ0XCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLFwicmlnaHRcImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksXCJ0b3BcImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksXCJib3R0b21cImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJlwiaHRtbFwiPT09dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnVpLmllKSYmKHQ9e3RvcDowLGxlZnQ6MH0pLHt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCksbGVmdDp0LmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoXCJyZWxhdGl2ZVwiPT09dGhpcy5jc3NQb3NpdGlvbil7dmFyIGU9dGhpcy5jdXJyZW50SXRlbS5wb3NpdGlvbigpO3JldHVybnt0b3A6ZS50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6ZS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpbkxlZnRcIiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpblRvcFwiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciB0LGkscyxuPXRoaXMub3B0aW9ucztcInBhcmVudFwiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksKFwiZG9jdW1lbnRcIj09PW4uY29udGFpbm1lbnR8fFwid2luZG93XCI9PT1uLmNvbnRhaW5tZW50KSYmKHRoaXMuY29udGFpbm1lbnQ9WzAtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCwwLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLFwiZG9jdW1lbnRcIj09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoXCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudD90aGlzLmRvY3VtZW50LndpZHRoKCk6dGhpcy53aW5kb3cuaGVpZ2h0KCl8fHRoaXMuZG9jdW1lbnRbMF0uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pLC9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChuLmNvbnRhaW5tZW50KXx8KHQ9ZShuLmNvbnRhaW5tZW50KVswXSxpPWUobi5jb250YWlubWVudCkub2Zmc2V0KCkscz1cImhpZGRlblwiIT09ZSh0KS5jc3MoXCJvdmVyZmxvd1wiKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KGUodCkuY3NzKFwicGFkZGluZ0xlZnRcIiksMTApfHwwKS10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsocGFyc2VJbnQoZSh0KS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcyhcInBhZGRpbmdUb3BcIiksMTApfHwwKS10aGlzLm1hcmdpbnMudG9wLGkubGVmdCsocz9NYXRoLm1heCh0LnNjcm9sbFdpZHRoLHQub2Zmc2V0V2lkdGgpOnQub2Zmc2V0V2lkdGgpLShwYXJzZUludChlKHQpLmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChlKHQpLmNzcyhcInBhZGRpbmdSaWdodFwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChlKHQpLmNzcyhcInBhZGRpbmdCb3R0b21cIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSl9LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbih0LGkpe2l8fChpPXRoaXMucG9zaXRpb24pO3ZhciBzPVwiYWJzb2x1dGVcIj09PXQ/MTotMSxuPVwiYWJzb2x1dGVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsYT0vKGh0bWx8Ym9keSkvaS50ZXN0KG5bMF0udGFnTmFtZSk7cmV0dXJue3RvcDppLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3Aqcyt0aGlzLm9mZnNldC5wYXJlbnQudG9wKnMtKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmE/MDpuLnNjcm9sbFRvcCgpKSpzLGxlZnQ6aS5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqcyt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpzLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6YT8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxhPXQucGFnZVgsbz10LnBhZ2VZLHI9XCJhYnNvbHV0ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxoPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKTtyZXR1cm5cInJlbGF0aXZlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5vZmZzZXRQYXJlbnRbMF18fCh0aGlzLm9mZnNldC5yZWxhdGl2ZT10aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpKSx0aGlzLm9yaWdpbmFsUG9zaXRpb24mJih0aGlzLmNvbnRhaW5tZW50JiYodC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihhPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKG89dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYoYT10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihvPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksbi5ncmlkJiYoaT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdLG89dGhpcy5jb250YWlubWVudD9pLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXSYmaS10aGlzLm9mZnNldC5jbGljay50b3A8PXRoaXMuY29udGFpbm1lbnRbM10/aTppLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXT9pLW4uZ3JpZFsxXTppK24uZ3JpZFsxXTppLHM9dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGEtdGhpcy5vcmlnaW5hbFBhZ2VYKS9uLmdyaWRbMF0pKm4uZ3JpZFswXSxhPXRoaXMuY29udGFpbm1lbnQ/cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdJiZzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8PXRoaXMuY29udGFpbm1lbnRbMl0/czpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0/cy1uLmdyaWRbMF06cytuLmdyaWRbMF06cykpLHt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aD8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24oZSx0LGkscyl7aT9pWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOnQuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLFwiZG93blwiPT09dGhpcy5kaXJlY3Rpb24/dC5pdGVtWzBdOnQuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBuPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe249PT10aGlzLmNvdW50ZXImJnRoaXMucmVmcmVzaFBvc2l0aW9ucyghcyl9KX0sX2NsZWFyOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlLHQsaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe2kuX3RyaWdnZXIoZSxzLHQuX3VpSGFzaCh0KSl9fXRoaXMucmV2ZXJ0aW5nPSExO3ZhciBzLG49W107aWYoIXRoaXMuX25vRmluYWxTb3J0JiZ0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpLmxlbmd0aCYmdGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSksdGhpcy5fbm9GaW5hbFNvcnQ9bnVsbCx0aGlzLmhlbHBlclswXT09PXRoaXMuY3VycmVudEl0ZW1bMF0pe2ZvcihzIGluIHRoaXMuX3N0b3JlZENTUykoXCJhdXRvXCI9PT10aGlzLl9zdG9yZWRDU1Nbc118fFwic3RhdGljXCI9PT10aGlzLl9zdG9yZWRDU1Nbc10pJiYodGhpcy5fc3RvcmVkQ1NTW3NdPVwiXCIpO3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIXQmJm4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKFwicmVjZWl2ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKX0pLCF0aGlzLmZyb21PdXRzaWRlJiZ0aGlzLmRvbVBvc2l0aW9uLnByZXY9PT10aGlzLmN1cnJlbnRJdGVtLnByZXYoKS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpWzBdJiZ0aGlzLmRvbVBvc2l0aW9uLnBhcmVudD09PXRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF18fHR8fG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsZSx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYodHx8KG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsZSx0aGlzLl91aUhhc2goKSl9KSxuLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoXCJyZWNlaXZlXCIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLG4ucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcihcInVwZGF0ZVwiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXR8fG4ucHVzaChpKFwiZGVhY3RpdmF0ZVwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXImJihuLnB1c2goaShcIm91dFwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYodGhpcy5zdG9yZWRDdXJzb3ImJih0aGlzLmRvY3VtZW50LmZpbmQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLHRoaXMuc3RvcmVkQ3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQucmVtb3ZlKCkpLHRoaXMuX3N0b3JlZE9wYWNpdHkmJnRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIix0aGlzLl9zdG9yZWRPcGFjaXR5KSx0aGlzLl9zdG9yZWRaSW5kZXgmJnRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLFwiYXV0b1wiPT09dGhpcy5fc3RvcmVkWkluZGV4P1wiXCI6dGhpcy5fc3RvcmVkWkluZGV4KSx0aGlzLmRyYWdnaW5nPSExLHR8fHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVTdG9wXCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIXQpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsZSk7dGhpcy5fdHJpZ2dlcihcInN0b3BcIixlLHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2UuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbih0KXt2YXIgaT10fHx0aGlzO3JldHVybntoZWxwZXI6aS5oZWxwZXIscGxhY2Vob2xkZXI6aS5wbGFjZWhvbGRlcnx8ZShbXSkscG9zaXRpb246aS5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOmkub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6aS5wb3NpdGlvbkFicyxpdGVtOmkuY3VycmVudEl0ZW0sc2VuZGVyOnQ/dC5lbGVtZW50Om51bGx9fX0pLGUud2lkZ2V0KFwidWkuc3Bpbm5lclwiLHt2ZXJzaW9uOlwiMS4xMS40XCIsZGVmYXVsdEVsZW1lbnQ6XCI8aW5wdXQ+XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzcGluXCIsb3B0aW9uczp7Y3VsdHVyZTpudWxsLGljb25zOntkb3duOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIix1cDpcInVpLWljb24tdHJpYW5nbGUtMS1uXCJ9LGluY3JlbWVudGFsOiEwLG1heDpudWxsLG1pbjpudWxsLG51bWJlckZvcm1hdDpudWxsLHBhZ2U6MTAsc3RlcDoxLGNoYW5nZTpudWxsLHNwaW46bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbihcIm1heFwiLHRoaXMub3B0aW9ucy5tYXgpLHRoaXMuX3NldE9wdGlvbihcIm1pblwiLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbihcInN0ZXBcIix0aGlzLm9wdGlvbnMuc3RlcCksXCJcIiE9PXRoaXMudmFsdWUoKSYmdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCEwKSx0aGlzLl9kcmF3KCksdGhpcy5fb24odGhpcy5fZXZlbnRzKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LGk9dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goW1wibWluXCIsXCJtYXhcIixcInN0ZXBcIl0sZnVuY3Rpb24oZSxzKXt2YXIgbj1pLmF0dHIocyk7dm9pZCAwIT09biYmbi5sZW5ndGgmJih0W3NdPW4pfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDpcIl9zdG9wXCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KHRoaXMuX3N0b3AoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLGUpLHZvaWQgMCl9LG1vdXNld2hlZWw6ZnVuY3Rpb24oZSx0KXtpZih0KXtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KGUpKXJldHVybiExO3RoaXMuX3NwaW4oKHQ+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCxlKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcChlKX0sMTAwKSxlLnByZXZlbnREZWZhdWx0KCl9fSxcIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLGkuY2FsbCh0aGlzKX0pLHRoaXMuX3N0YXJ0KHQpIT09ITEmJnRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXNwaW5uZXItdXBcIik/MTotMSx0KX0sXCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvblwiOlwiX3N0b3BcIixcIm1vdXNlZW50ZXIgLnVpLXNwaW5uZXItYnV0dG9uXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKT90aGlzLl9zdGFydCh0KT09PSExPyExOih0aGlzLl9yZXBlYXQobnVsbCxlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsdCksdm9pZCAwKTp2b2lkIDB9LFwibW91c2VsZWF2ZSAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCJ9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmFkZENsYXNzKFwidWktc3Bpbm5lci1pbnB1dFwiKS5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIikud3JhcCh0aGlzLl91aVNwaW5uZXJIdG1sKCkpLnBhcmVudCgpLmFwcGVuZCh0aGlzLl9idXR0b25IdG1sKCkpO3RoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwic3BpbmJ1dHRvblwiKSx0aGlzLmJ1dHRvbnM9ZS5maW5kKFwiLnVpLXNwaW5uZXItYnV0dG9uXCIpLmF0dHIoXCJ0YWJJbmRleFwiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcyhcInVpLWNvcm5lci1hbGxcIiksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbCguNSplLmhlaWdodCgpKSYmZS5oZWlnaHQoKT4wJiZlLmhlaWdodChlLmhlaWdodCgpKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZGlzYWJsZSgpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz1lLnVpLmtleUNvZGU7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBzLlVQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwxLHQpLCEwO2Nhc2Ugcy5ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtMSx0KSwhMDtjYXNlIHMuUEFHRV9VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsaS5wYWdlLHQpLCEwO2Nhc2Ugcy5QQUdFX0RPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC1pLnBhZ2UsdCksITB9cmV0dXJuITF9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuXCI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPlwifSxfYnV0dG9uSHRtbDpmdW5jdGlvbigpe3JldHVyblwiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXAgdWktY29ybmVyLXRyJz48c3BhbiBjbGFzcz0ndWktaWNvbiBcIit0aGlzLm9wdGlvbnMuaWNvbnMudXArXCInPiYjOTY1MDs8L3NwYW4+XCIrXCI8L2E+XCIrXCI8YSBjbGFzcz0ndWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duIHVpLWNvcm5lci1icic+XCIrXCI8c3BhbiBjbGFzcz0ndWktaWNvbiBcIit0aGlzLm9wdGlvbnMuaWNvbnMuZG93bitcIic+JiM5NjYwOzwvc3Bhbj5cIitcIjwvYT5cIn0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNwaW5uaW5nfHx0aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlKSE9PSExPyh0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwhMCk6ITF9LF9yZXBlYXQ6ZnVuY3Rpb24oZSx0LGkpe2U9ZXx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLHQsaSl9LGUpLHRoaXMuX3NwaW4odCp0aGlzLm9wdGlvbnMuc3RlcCxpKX0sX3NwaW46ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLGk9dGhpcy5fYWRqdXN0VmFsdWUoaStlKnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKSx0aGlzLnNwaW5uaW5nJiZ0aGlzLl90cmlnZ2VyKFwic3BpblwiLHQse3ZhbHVlOml9KT09PSExfHwodGhpcy5fdmFsdWUoaSksdGhpcy5jb3VudGVyKyspfSxfaW5jcmVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gaT9lLmlzRnVuY3Rpb24oaSk/aSh0KTpNYXRoLmZsb29yKHQqdCp0LzVlNC10KnQvNTAwKzE3KnQvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIG51bGwhPT10aGlzLm9wdGlvbnMubWluJiYoZT1NYXRoLm1heChlLHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksZX0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrZSxpPXQuaW5kZXhPZihcIi5cIik7cmV0dXJuLTE9PT1pPzA6dC5sZW5ndGgtaS0xfSxfYWRqdXN0VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzPXRoaXMub3B0aW9ucztyZXR1cm4gdD1udWxsIT09cy5taW4/cy5taW46MCxpPWUtdCxpPU1hdGgucm91bmQoaS9zLnN0ZXApKnMuc3RlcCxlPXQraSxlPXBhcnNlRmxvYXQoZS50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksbnVsbCE9PXMubWF4JiZlPnMubWF4P3MubWF4Om51bGwhPT1zLm1pbiYmcy5taW4+ZT9zLm1pbjplfSxfc3RvcDpmdW5jdGlvbihlKXt0aGlzLnNwaW5uaW5nJiYoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5jb3VudGVyPTAsdGhpcy5zcGlubmluZz0hMSx0aGlzLl90cmlnZ2VyKFwic3RvcFwiLGUpKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKFwiY3VsdHVyZVwiPT09ZXx8XCJudW1iZXJGb3JtYXRcIj09PWUpe3ZhciBpPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKSx2b2lkIDB9KFwibWF4XCI9PT1lfHxcIm1pblwiPT09ZXx8XCJzdGVwXCI9PT1lKSYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXRoaXMuX3BhcnNlKHQpKSxcImljb25zXCI9PT1lJiYodGhpcy5idXR0b25zLmZpcnN0KCkuZmluZChcIi51aS1pY29uXCIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy51cCkuYWRkQ2xhc3ModC51cCksdGhpcy5idXR0b25zLmxhc3QoKS5maW5kKFwiLnVpLWljb25cIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLmRvd24pLmFkZENsYXNzKHQuZG93bikpLHRoaXMuX3N1cGVyKGUsdCksXCJkaXNhYmxlZFwiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCEhdCksdGhpcy5idXR0b25zLmJ1dHRvbih0P1wiZGlzYWJsZVwiOlwiZW5hYmxlXCIpKX0sX3NldE9wdGlvbnM6aChmdW5jdGlvbihlKXt0aGlzLl9zdXBlcihlKX0pLF9wYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmXCJcIiE9PWUmJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLFwiXCI9PT1lfHxpc05hTihlKT9udWxsOmV9LF9mb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIj09PWU/XCJcIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQoZSx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTplfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm9wdGlvbnMubWluLFwiYXJpYS12YWx1ZW1heFwiOnRoaXMub3B0aW9ucy5tYXgsXCJhcmlhLXZhbHVlbm93XCI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZSgpO3JldHVybiBudWxsPT09ZT8hMTplPT09dGhpcy5fYWRqdXN0VmFsdWUoZSl9LF92YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBpO1wiXCIhPT1lJiYoaT10aGlzLl9wYXJzZShlKSxudWxsIT09aSYmKHR8fChpPXRoaXMuX2FkanVzdFZhbHVlKGkpKSxlPXRoaXMuX2Zvcm1hdChpKSkpLHRoaXMuZWxlbWVudC52YWwoZSksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXNwaW5uZXItaW5wdXRcIikucHJvcChcImRpc2FibGVkXCIsITEpLnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIikucmVtb3ZlQXR0cihcInJvbGVcIikucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVtaW5cIikucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVtYXhcIikucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVub3dcIiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOmgoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKGUpfSksX3N0ZXBVcDpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOmgoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oZSl9KSxfc3RlcERvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOmgoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpoKGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaCh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpLHZvaWQgMCk6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pLGUud2lkZ2V0KFwidWkudGFic1wiLHt2ZXJzaW9uOlwiMS4xMS40XCIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNvbGxhcHNpYmxlOiExLGV2ZW50OlwiY2xpY2tcIixoZWlnaHRTdHlsZTpcImNvbnRlbnRcIixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfaXNMb2NhbDpmdW5jdGlvbigpe3ZhciBlPS8jLiokLztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGksczt0PXQuY2xvbmVOb2RlKCExKSxpPXQuaHJlZi5yZXBsYWNlKGUsXCJcIikscz1sb2NhdGlvbi5ocmVmLnJlcGxhY2UoZSxcIlwiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2gobil7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaChuKXt9cmV0dXJuIHQuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsXCIpLnRvZ2dsZUNsYXNzKFwidWktdGFicy1jb2xsYXBzaWJsZVwiLGkuY29sbGFwc2libGUpLHRoaXMuX3Byb2Nlc3NUYWJzKCksaS5hY3RpdmU9dGhpcy5faW5pdGlhbEFjdGl2ZSgpLGUuaXNBcnJheShpLmRpc2FibGVkKSYmKGkuZGlzYWJsZWQ9ZS51bmlxdWUoaS5kaXNhYmxlZC5jb25jYXQoZS5tYXAodGhpcy50YWJzLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSxmdW5jdGlvbihlKXtyZXR1cm4gdC50YWJzLmluZGV4KGUpfSkpKS5zb3J0KCkpLHRoaXMuYWN0aXZlPXRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTplKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT10JiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtyZXR1cm4gZShuKS5hdHRyKFwiYXJpYS1jb250cm9sc1wiKT09PXM/KHQ9aSwhMSk6dm9pZCAwfSksbnVsbD09PXQmJih0PXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKFwiLnVpLXRhYnMtYWN0aXZlXCIpKSksKG51bGw9PT10fHwtMT09PXQpJiYodD10aGlzLnRhYnMubGVuZ3RoPzA6ITEpKSx0IT09ITEmJih0PXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEodCkpLC0xPT09dCYmKHQ9aT8hMTowKSksIWkmJnQ9PT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKHQ9MCksdH0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTplKCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdChcImxpXCIpLHM9dGhpcy50YWJzLmluZGV4KGkpLG49ITA7aWYoIXRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cysrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6bj0hMSxzLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnM9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocyksdm9pZCAwO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocz09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6cyksdm9pZCAwO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxzPXRoaXMuX2ZvY3VzTmV4dFRhYihzLG4pLHQuY3RybEtleXx8dC5tZXRhS2V5fHwoaS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwiZmFsc2VcIiksdGhpcy50YWJzLmVxKHMpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsXCJ0cnVlXCIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKFwiYWN0aXZlXCIscyl9LHRoaXMuZGVsYXkpKX19LF9wYW5lbEtleWRvd246ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxlUGFnZU5hdih0KXx8dC5jdHJsS2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmUuZm9jdXMoKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfVVA/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlLTEsITEpKSwhMCk6dC5hbHRLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5QQUdFX0RPV04/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlKzEsITApKSwhMCk6dm9pZCAwfSxfZmluZE5leHRUYWI6ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKCl7cmV0dXJuIHQ+biYmKHQ9MCksMD50JiYodD1uKSx0fWZvcih2YXIgbj10aGlzLnRhYnMubGVuZ3RoLTE7LTEhPT1lLmluQXJyYXkocygpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCk7KXQ9aT90KzE6dC0xO3JldHVybiB0fSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9dGhpcy5fZmluZE5leHRUYWIoZSx0KSx0aGlzLnRhYnMuZXEoZSkuZm9jdXMoKSxlfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJhY3RpdmVcIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6XCJkaXNhYmxlZFwiPT09ZT8odGhpcy5fc2V0dXBEaXNhYmxlZCh0KSx2b2lkIDApOih0aGlzLl9zdXBlcihlLHQpLFwiY29sbGFwc2libGVcIj09PWUmJih0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsdCksdHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSksXCJldmVudFwiPT09ZSYmdGhpcy5fc2V0dXBFdmVudHModCksXCJoZWlnaHRTdHlsZVwiPT09ZSYmdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0KSx2b2lkIDApfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLnJlcGxhY2UoL1shXCIkJSYnKCkqKywuXFwvOjs8PT4/QFxcW1xcXVxcXmB7fH1+XS9nLFwiXFxcXCQmXCIpOlwiXCJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oXCI6aGFzKGFbaHJlZl0pXCIpO3QuZGlzYWJsZWQ9ZS5tYXAoaS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIiksZnVuY3Rpb24oZSl7cmV0dXJuIGkuaW5kZXgoZSl9KSx0aGlzLl9wcm9jZXNzVGFicygpLHQuYWN0aXZlIT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT10LmRpc2FibGVkLmxlbmd0aD8odC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLHQuYWN0aXZlLTEpLCExKSk6dC5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKToodC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0dXBEaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hZGRDbGFzcyhcInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZVwiKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKFwidGFiSW5kZXhcIiwwKX0sX3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPXRoaXMudGFicyxzPXRoaXMuYW5jaG9ycyxuPXRoaXMucGFuZWxzO1xudGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hZGRDbGFzcyhcInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsXCIpLmF0dHIoXCJyb2xlXCIsXCJ0YWJsaXN0XCIpLmRlbGVnYXRlKFwiPiBsaVwiLFwibW91c2Vkb3duXCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtlKHRoaXMpLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0LnByZXZlbnREZWZhdWx0KCl9KS5kZWxlZ2F0ZShcIi51aS10YWJzLWFuY2hvclwiLFwiZm9jdXNcIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ZSh0aGlzKS5jbG9zZXN0KFwibGlcIikuaXMoXCIudWktc3RhdGUtZGlzYWJsZWRcIikmJnRoaXMuYmx1cigpfSksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKFwiPiBsaTpoYXMoYVtocmVmXSlcIikuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3BcIikuYXR0cih7cm9sZTpcInRhYlwiLHRhYkluZGV4Oi0xfSksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZShcImFcIix0aGlzKVswXX0pLmFkZENsYXNzKFwidWktdGFicy1hbmNob3JcIikuYXR0cih7cm9sZTpcInByZXNlbnRhdGlvblwiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHM9ZSgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGkscyl7dmFyIG4sYSxvLHI9ZShzKS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKSxoPWUocykuY2xvc2VzdChcImxpXCIpLGw9aC5hdHRyKFwiYXJpYS1jb250cm9sc1wiKTt0Ll9pc0xvY2FsKHMpPyhuPXMuaGFzaCxvPW4uc3Vic3RyaW5nKDEpLGE9dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihuKSkpOihvPWguYXR0cihcImFyaWEtY29udHJvbHNcIil8fGUoe30pLnVuaXF1ZUlkKClbMF0uaWQsbj1cIiNcIitvLGE9dC5lbGVtZW50LmZpbmQobiksYS5sZW5ndGh8fChhPXQuX2NyZWF0ZVBhbmVsKG8pLGEuaW5zZXJ0QWZ0ZXIodC5wYW5lbHNbaS0xXXx8dC50YWJsaXN0KSksYS5hdHRyKFwiYXJpYS1saXZlXCIsXCJwb2xpdGVcIikpLGEubGVuZ3RoJiYodC5wYW5lbHM9dC5wYW5lbHMuYWRkKGEpKSxsJiZoLmRhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIixsKSxoLmF0dHIoe1wiYXJpYS1jb250cm9sc1wiOm8sXCJhcmlhLWxhYmVsbGVkYnlcIjpyfSksYS5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIscil9KSx0aGlzLnBhbmVscy5hZGRDbGFzcyhcInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbVwiKS5hdHRyKFwicm9sZVwiLFwidGFicGFuZWxcIiksaSYmKHRoaXMuX29mZihpLm5vdCh0aGlzLnRhYnMpKSx0aGlzLl9vZmYocy5ub3QodGhpcy5hbmNob3JzKSksdGhpcy5fb2ZmKG4ubm90KHRoaXMucGFuZWxzKSkpfSxfZ2V0TGlzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhYmxpc3R8fHRoaXMuZWxlbWVudC5maW5kKFwib2wsdWxcIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZShcIjxkaXY+XCIpLmF0dHIoXCJpZFwiLHQpLmFkZENsYXNzKFwidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tXCIpLmRhdGEoXCJ1aS10YWJzLWRlc3Ryb3lcIiwhMCl9LF9zZXR1cERpc2FibGVkOmZ1bmN0aW9uKHQpe2UuaXNBcnJheSh0KSYmKHQubGVuZ3RoP3QubGVuZ3RoPT09dGhpcy5hbmNob3JzLmxlbmd0aCYmKHQ9ITApOnQ9ITEpO2Zvcih2YXIgaSxzPTA7aT10aGlzLnRhYnNbc107cysrKXQ9PT0hMHx8LTEhPT1lLmluQXJyYXkocyx0KT9lKGkpLmFkZENsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIik6ZShpKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e307dCYmZS5lYWNoKHQuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7aVt0XT1cIl9ldmVudEhhbmRsZXJcIn0pLHRoaXMuX29mZih0aGlzLmFuY2hvcnMuYWRkKHRoaXMudGFicykuYWRkKHRoaXMucGFuZWxzKSksdGhpcy5fb24oITAsdGhpcy5hbmNob3JzLHtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9fSksdGhpcy5fb24odGhpcy5hbmNob3JzLGkpLHRoaXMuX29uKHRoaXMudGFicyx7a2V5ZG93bjpcIl90YWJLZXlkb3duXCJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjpcIl9wYW5lbEtleWRvd25cIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXMuZWxlbWVudC5wYXJlbnQoKTtcImZpbGxcIj09PXQ/KGk9cy5oZWlnaHQoKSxpLT10aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKS10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKFwiOnZpc2libGVcIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz10LmNzcyhcInBvc2l0aW9uXCIpO1wiYWJzb2x1dGVcIiE9PXMmJlwiZml4ZWRcIiE9PXMmJihpLT10Lm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcyhcIm92ZXJmbG93XCIsXCJhdXRvXCIpKTpcImF1dG9cIj09PXQmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSxlKHRoaXMpLmhlaWdodChcIlwiKS5oZWlnaHQoKSl9KS5oZWlnaHQoaSkpfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXRoaXMuYWN0aXZlLG49ZSh0LmN1cnJlbnRUYXJnZXQpLGE9bi5jbG9zZXN0KFwibGlcIiksbz1hWzBdPT09c1swXSxyPW8mJmkuY29sbGFwc2libGUsaD1yP2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihhKSxsPXMubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHMpOmUoKSx1PXtvbGRUYWI6cyxvbGRQYW5lbDpsLG5ld1RhYjpyP2UoKTphLG5ld1BhbmVsOmh9O3QucHJldmVudERlZmF1bHQoKSxhLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIil8fGEuaGFzQ2xhc3MoXCJ1aS10YWJzLWxvYWRpbmdcIil8fHRoaXMucnVubmluZ3x8byYmIWkuY29sbGFwc2libGV8fHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVBY3RpdmF0ZVwiLHQsdSk9PT0hMXx8KGkuYWN0aXZlPXI/ITE6dGhpcy50YWJzLmluZGV4KGEpLHRoaXMuYWN0aXZlPW8/ZSgpOmEsdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksbC5sZW5ndGh8fGgubGVuZ3RofHxlLmVycm9yKFwialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuXCIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLHQpLHRoaXMuX3RvZ2dsZSh0LHUpKX0sX3RvZ2dsZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXthLnJ1bm5pbmc9ITEsYS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsdCxpKX1mdW5jdGlvbiBuKCl7aS5uZXdUYWIuY2xvc2VzdChcImxpXCIpLmFkZENsYXNzKFwidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlXCIpLG8ubGVuZ3RoJiZhLm9wdGlvbnMuc2hvdz9hLl9zaG93KG8sYS5vcHRpb25zLnNob3cscyk6KG8uc2hvdygpLHMoKSl9dmFyIGE9dGhpcyxvPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLnJlbW92ZUNsYXNzKFwidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlXCIpLG4oKX0pOihpLm9sZFRhYi5jbG9zZXN0KFwibGlcIikucmVtb3ZlQ2xhc3MoXCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmVcIiksci5oaWRlKCksbigpKSxyLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxpLm9sZFRhYi5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSksby5sZW5ndGgmJnIubGVuZ3RoP2kub2xkVGFiLmF0dHIoXCJ0YWJJbmRleFwiLC0xKTpvLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09ZSh0aGlzKS5hdHRyKFwidGFiSW5kZXhcIil9KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksby5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLGkubmV3VGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcy5fZmluZEFjdGl2ZSh0KTtzWzBdIT09dGhpcy5hY3RpdmVbMF0mJihzLmxlbmd0aHx8KHM9dGhpcy5hY3RpdmUpLGk9cy5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKFwiW2hyZWYkPSdcIitlK1wiJ11cIikpKSxlfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZVwiKSx0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoXCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbFwiKS5yZW1vdmVBdHRyKFwicm9sZVwiKSx0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoXCJ1aS10YWJzLWFuY2hvclwiKS5yZW1vdmVBdHRyKFwicm9sZVwiKS5yZW1vdmVBdHRyKFwidGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYmxpc3QudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMudGFicy5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtlLmRhdGEodGhpcyxcInVpLXRhYnMtZGVzdHJveVwiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktd2lkZ2V0LWNvbnRlbnQgdWktdGFicy1hY3RpdmUgdWktdGFicy1wYW5lbFwiKS5yZW1vdmVBdHRyKFwidGFiSW5kZXhcIikucmVtb3ZlQXR0cihcImFyaWEtbGl2ZVwiKS5yZW1vdmVBdHRyKFwiYXJpYS1idXN5XCIpLnJlbW92ZUF0dHIoXCJhcmlhLXNlbGVjdGVkXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIikucmVtb3ZlQXR0cihcImFyaWEtaGlkZGVuXCIpLnJlbW92ZUF0dHIoXCJhcmlhLWV4cGFuZGVkXCIpLnJlbW92ZUF0dHIoXCJyb2xlXCIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5kYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpO2k/dC5hdHRyKFwiYXJpYS1jb250cm9sc1wiLGkpLnJlbW92ZURhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIik6dC5yZW1vdmVBdHRyKFwiYXJpYS1jb250cm9sc1wiKX0pLHRoaXMucGFuZWxzLnNob3coKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdGhpcy5wYW5lbHMuY3NzKFwiaGVpZ2h0XCIsXCJcIil9LGVuYWJsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aSE9PSExJiYodm9pZCAwPT09dD9pPSExOih0PXRoaXMuX2dldEluZGV4KHQpLGk9ZS5pc0FycmF5KGkpP2UubWFwKGksZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10P2U6bnVsbH0pOmUubWFwKHRoaXMudGFicyxmdW5jdGlvbihlLGkpe3JldHVybiBpIT09dD9pOm51bGx9KSksdGhpcy5fc2V0dXBEaXNhYmxlZChpKSl9LGRpc2FibGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkO2lmKGkhPT0hMCl7aWYodm9pZCAwPT09dClpPSEwO2Vsc2V7aWYodD10aGlzLl9nZXRJbmRleCh0KSwtMSE9PWUuaW5BcnJheSh0LGkpKXJldHVybjtpPWUuaXNBcnJheShpKT9lLm1lcmdlKFt0XSxpKS5zb3J0KCk6W3RdfXRoaXMuX3NldHVwRGlzYWJsZWQoaSl9fSxsb2FkOmZ1bmN0aW9uKHQsaSl7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgcz10aGlzLG49dGhpcy50YWJzLmVxKHQpLGE9bi5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpLG89dGhpcy5fZ2V0UGFuZWxGb3JUYWIobikscj17dGFiOm4scGFuZWw6b30saD1mdW5jdGlvbihlLHQpe1wiYWJvcnRcIj09PXQmJnMucGFuZWxzLnN0b3AoITEsITApLG4ucmVtb3ZlQ2xhc3MoXCJ1aS10YWJzLWxvYWRpbmdcIiksby5yZW1vdmVBdHRyKFwiYXJpYS1idXN5XCIpLGU9PT1zLnhociYmZGVsZXRlIHMueGhyfTt0aGlzLl9pc0xvY2FsKGFbMF0pfHwodGhpcy54aHI9ZS5hamF4KHRoaXMuX2FqYXhTZXR0aW5ncyhhLGkscikpLHRoaXMueGhyJiZcImNhbmNlbGVkXCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYobi5hZGRDbGFzcyhcInVpLXRhYnMtbG9hZGluZ1wiKSxvLmF0dHIoXCJhcmlhLWJ1c3lcIixcInRydWVcIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbihlLHQsbil7c2V0VGltZW91dChmdW5jdGlvbigpe28uaHRtbChlKSxzLl90cmlnZ2VyKFwibG9hZFwiLGksciksaChuLHQpfSwxKX0pLmZhaWwoZnVuY3Rpb24oZSx0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aChlLHQpfSwxKX0pKSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXRoaXM7cmV0dXJue3VybDp0LmF0dHIoXCJocmVmXCIpLGJlZm9yZVNlbmQ6ZnVuY3Rpb24odCxhKXtyZXR1cm4gbi5fdHJpZ2dlcihcImJlZm9yZUxvYWRcIixpLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczphfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCkuYXR0cihcImFyaWEtY29udHJvbHNcIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoXCIjXCIraSkpfX0pLGUud2lkZ2V0KFwidWkudG9vbHRpcFwiLHt2ZXJzaW9uOlwiMS4xMS40XCIsb3B0aW9uczp7Y29udGVudDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykuYXR0cihcInRpdGxlXCIpfHxcIlwiO3JldHVybiBlKFwiPGE+XCIpLnRleHQodCkuaHRtbCgpfSxoaWRlOiEwLGl0ZW1zOlwiW3RpdGxlXTpub3QoW2Rpc2FibGVkXSlcIixwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcCsxNVwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJmbGlwZml0IGZsaXBcIn0sc2hvdzohMCx0b29sdGlwQ2xhc3M6bnVsbCx0cmFjazohMSxjbG9zZTpudWxsLG9wZW46bnVsbH0sX2FkZERlc2NyaWJlZEJ5OmZ1bmN0aW9uKHQsaSl7dmFyIHM9KHQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIil8fFwiXCIpLnNwbGl0KC9cXHMrLyk7cy5wdXNoKGkpLHQuZGF0YShcInVpLXRvb2x0aXAtaWRcIixpKS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLGUudHJpbShzLmpvaW4oXCIgXCIpKSl9LF9yZW1vdmVEZXNjcmliZWRCeTpmdW5jdGlvbih0KXt2YXIgaT10LmRhdGEoXCJ1aS10b29sdGlwLWlkXCIpLHM9KHQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIil8fFwiXCIpLnNwbGl0KC9cXHMrLyksbj1lLmluQXJyYXkoaSxzKTstMSE9PW4mJnMuc3BsaWNlKG4sMSksdC5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1pZFwiKSxzPWUudHJpbShzLmpvaW4oXCIgXCIpKSxzP3QuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixzKTp0LnJlbW92ZUF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3ZlcjpcIm9wZW5cIixmb2N1c2luOlwib3BlblwifSksdGhpcy50b29sdGlwcz17fSx0aGlzLnBhcmVudHM9e30sdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlKCksdGhpcy5saXZlUmVnaW9uPWUoXCI8ZGl2PlwiKS5hdHRyKHtyb2xlOlwibG9nXCIsXCJhcmlhLWxpdmVcIjpcImFzc2VydGl2ZVwiLFwiYXJpYS1yZWxldmFudFwiOlwiYWRkaXRpb25zXCJ9KS5hZGRDbGFzcyhcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztyZXR1cm5cImRpc2FibGVkXCI9PT10Pyh0aGlzW2k/XCJfZGlzYWJsZVwiOlwiX2VuYWJsZVwiXSgpLHRoaXMub3B0aW9uc1t0XT1pLHZvaWQgMCk6KHRoaXMuX3N1cGVyKHQsaSksXCJjb250ZW50XCI9PT10JiZlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihlLHQpe3MuX3VwZGF0ZUNvbnRlbnQodC5lbGVtZW50KX0pLHZvaWQgMCl9LF9kaXNhYmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPWUuRXZlbnQoXCJibHVyXCIpO24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1zLmVsZW1lbnRbMF0sdC5jbG9zZShuLCEwKX0pLHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuaXMoXCJbdGl0bGVdXCIpJiZ0LmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIsdC5hdHRyKFwidGl0bGVcIikpLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKX0pfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSYmdC5hdHRyKFwidGl0bGVcIix0LmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKX0pfSxvcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7cy5sZW5ndGgmJiFzLmRhdGEoXCJ1aS10b29sdGlwLWlkXCIpJiYocy5hdHRyKFwidGl0bGVcIikmJnMuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixzLmF0dHIoXCJ0aXRsZVwiKSkscy5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIsITApLHQmJlwibW91c2VvdmVyXCI9PT10LnR5cGUmJnMucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxzPWUodGhpcyk7cy5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpJiYodD1lLkV2ZW50KFwiYmx1clwiKSx0LnRhcmdldD10LmN1cnJlbnRUYXJnZXQ9dGhpcyxpLmNsb3NlKHQsITApKSxzLmF0dHIoXCJ0aXRsZVwiKSYmKHMudW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpzLmF0dHIoXCJ0aXRsZVwiKX0scy5hdHRyKFwidGl0bGVcIixcIlwiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnModCxzKSx0aGlzLl91cGRhdGVDb250ZW50KHMsdCkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dGhpcy5vcHRpb25zLmNvbnRlbnQsbj10aGlzLGE9dD90LnR5cGU6bnVsbDtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygcz90aGlzLl9vcGVuKHQsZSxzKTooaT1zLmNhbGwoZVswXSxmdW5jdGlvbihpKXtuLl9kZWxheShmdW5jdGlvbigpe2UuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKHQmJih0LnR5cGU9YSksdGhpcy5fb3Blbih0LGUsaSkpfSl9KSxpJiZ0aGlzLl9vcGVuKHQsZSxpKSx2b2lkIDApfSxfb3BlbjpmdW5jdGlvbih0LGkscyl7ZnVuY3Rpb24gbihlKXtsLm9mPWUsby5pcyhcIjpoaWRkZW5cIil8fG8ucG9zaXRpb24obCl9dmFyIGEsbyxyLGgsbD1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKGE9dGhpcy5fZmluZChpKSlyZXR1cm4gYS50b29sdGlwLmZpbmQoXCIudWktdG9vbHRpcC1jb250ZW50XCIpLmh0bWwocyksdm9pZCAwO2kuaXMoXCJbdGl0bGVdXCIpJiYodCYmXCJtb3VzZW92ZXJcIj09PXQudHlwZT9pLmF0dHIoXCJ0aXRsZVwiLFwiXCIpOmkucmVtb3ZlQXR0cihcInRpdGxlXCIpKSxhPXRoaXMuX3Rvb2x0aXAoaSksbz1hLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxvLmF0dHIoXCJpZFwiKSksby5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKHMpLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxzLmNsb25lPyhoPXMuY2xvbmUoKSxoLnJlbW92ZUF0dHIoXCJpZFwiKS5maW5kKFwiW2lkXVwiKS5yZW1vdmVBdHRyKFwiaWRcIikpOmg9cyxlKFwiPGRpdj5cIikuaHRtbChoKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pLHRoaXMub3B0aW9ucy50cmFjayYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpPyh0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZW1vdmU6bn0pLG4odCkpOm8ucG9zaXRpb24oZS5leHRlbmQoe29mOml9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLG8uaGlkZSgpLHRoaXMuX3Nob3cobyx0aGlzLm9wdGlvbnMuc2hvdyksdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7by5pcyhcIjp2aXNpYmxlXCIpJiYobihsLm9mKSxjbGVhckludGVydmFsKHIpKX0sZS5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsdCx7dG9vbHRpcDpvfSl9fSxfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOmZ1bmN0aW9uKHQsaSl7dmFyIHM9e2tleXVwOmZ1bmN0aW9uKHQpe2lmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBzPWUuRXZlbnQodCk7cy5jdXJyZW50VGFyZ2V0PWlbMF0sdGhpcy5jbG9zZShzLCEwKX19fTtpWzBdIT09dGhpcy5lbGVtZW50WzBdJiYocy5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVUb29sdGlwKHRoaXMuX2ZpbmQoaSkudG9vbHRpcCl9KSx0JiZcIm1vdXNlb3ZlclwiIT09dC50eXBlfHwocy5tb3VzZWxlYXZlPVwiY2xvc2VcIiksdCYmXCJmb2N1c2luXCIhPT10LnR5cGV8fChzLmZvY3Vzb3V0PVwiY2xvc2VcIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLG49ZSh0P3QuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLGE9dGhpcy5fZmluZChuKTtyZXR1cm4gYT8oaT1hLnRvb2x0aXAsYS5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYhbi5hdHRyKFwidGl0bGVcIikmJm4uYXR0cihcInRpdGxlXCIsbi5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksdGhpcy5fcmVtb3ZlRGVzY3JpYmVkQnkobiksYS5oaWRpbmc9ITAsaS5zdG9wKCEwKSx0aGlzLl9oaWRlKGksdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtzLl9yZW1vdmVUb29sdGlwKGUodGhpcykpfSksbi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHRoaXMuX29mZihuLFwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cFwiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobixcInJlbW92ZVwiKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlbW92ZVwiKSx0JiZcIm1vdXNlbGVhdmVcIj09PXQudHlwZSYmZS5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbih0LGkpe2UoaS5lbGVtZW50KS5hdHRyKFwidGl0bGVcIixpLnRpdGxlKSxkZWxldGUgcy5wYXJlbnRzW3RdfSksYS5jbG9zaW5nPSEwLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLHQse3Rvb2x0aXA6aX0pLGEuaGlkaW5nfHwoYS5jbG9zaW5nPSExKSksdm9pZCAwKToobi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHZvaWQgMCl9LF90b29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPWUoXCI8ZGl2PlwiKS5hdHRyKFwicm9sZVwiLFwidG9vbHRpcFwiKS5hZGRDbGFzcyhcInVpLXRvb2x0aXAgdWktd2lkZ2V0IHVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWNvbnRlbnQgXCIrKHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3N8fFwiXCIpKSxzPWkudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7cmV0dXJuIGUoXCI8ZGl2PlwiKS5hZGRDbGFzcyhcInVpLXRvb2x0aXAtY29udGVudFwiKS5hcHBlbmRUbyhpKSxpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy50b29sdGlwc1tzXT17ZWxlbWVudDp0LHRvb2x0aXA6aX19LF9maW5kOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YShcInVpLXRvb2x0aXAtaWRcIik7cmV0dXJuIHQ/dGhpcy50b29sdGlwc1t0XTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbihlKXtlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW2UuYXR0cihcImlkXCIpXX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGkscyl7dmFyIG49ZS5FdmVudChcImJsdXJcIiksYT1zLmVsZW1lbnQ7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PWFbMF0sdC5jbG9zZShuLCEwKSxlKFwiI1wiK2kpLnJlbW92ZSgpLGEuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikmJihhLmF0dHIoXCJ0aXRsZVwiKXx8YS5hdHRyKFwidGl0bGVcIixhLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKSxhLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKX0pLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX19KX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnktdWkvanF1ZXJ5LXVpLm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNDlcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///49\n"); +eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==\"function\"&&__webpack_require__(11)&&!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function(){return w}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9kaXN0L2pxdWVyeS5taW4uanM/OTVkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsYUFBYSx1R0FBdUcsMkVBQTJFLFlBQVksTUFBTSxzREFBc0QsYUFBYSw0RkFBNEYsbUVBQW1FLGlCQUFpQix3REFBd0QsaUJBQWlCLDZCQUE2QixJQUFJLDRCQUE0QixrQkFBa0IseUNBQXlDLDJDQUEyQyxnREFBZ0QsY0FBYyw2RkFBNkYsOEJBQThCLDBCQUEwQix3Q0FBd0Msa0JBQWtCLHlEQUF5RCxvQkFBb0IsaUJBQWlCLDREQUE0RCx1QkFBdUIsb0NBQW9DLDJCQUEyQixrQkFBa0Isc0JBQXNCLGlCQUFpQiwrQ0FBK0MscUJBQXFCLEdBQUcsa0JBQWtCLCtDQUErQyxrQkFBa0Isa0JBQWtCLGlCQUFpQixtQkFBbUIsZ0JBQWdCLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLDJDQUEyQyxvQ0FBb0MsaUNBQWlDLGtDQUFrQyw2QkFBNkIsZ0RBQWdELHFDQUFxQyxzQkFBc0IsSUFBSSxpTEFBaUwsNkNBQTZDLFNBQVMsV0FBVyx3RkFBd0YsbUJBQW1CLGtCQUFrQiwyQkFBMkIsUUFBUSxxSUFBcUksMkJBQTJCLE1BQU0sb0JBQW9CLFNBQVMsd0JBQXdCLEtBQUssb0JBQW9CLFVBQVUsU0FBUyxlQUFlLElBQUksc0NBQXNDLGtEQUFrRCxTQUFTLGtCQUFrQix1Q0FBdUMseUJBQXlCLFlBQVksaUZBQWlGLHlCQUF5QixnQ0FBZ0MscUJBQXFCLG1DQUFtQyxJQUFJLGdCQUFnQixvQkFBb0Isc0JBQXNCLG1DQUFtQyxJQUFJLHFDQUFxQyxTQUFTLHFCQUFxQixpQkFBaUIsdUJBQXVCLElBQUkscUNBQXFDLGlEQUFpRCxxQkFBcUIsa0JBQWtCLCtLQUErSyxvQ0FBb0MsRUFBRSxjQUFjLHlDQUF5Qyw0RUFBNEUsa0JBQWtCLDBIQUEw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LHlEQUF5RCxhQUFhLEdBQUcsVUFBVSxpREFBaUQsZUFBZSx3QkFBd0Isb0JBQW9CLDhCQUE4QixNQUFNLDRFQUE0RSx5REFBeUQsd0JBQXdCLHNDQUFzQywrQ0FBK0MsMkRBQTJELEVBQUUsVUFBVSw4QkFBOEIsZUFBZSxRQUFRLHlDQUF5QyxlQUFlLHNCQUFzQix5RkFBeUYsOEJBQThCLE1BQU0sK1BBQStQLGtCQUFrQixFQUFFLDBOQUEwTixzQkFBc0IsK0RBQStELGVBQWUsb0JBQW9CLDRDQUE0QyxlQUFlLHFCQUFxQiwyQkFBMkIsc0JBQXNCLDBCQUEwQiw0QkFBNEIsd0JBQXdCLDRCQUE0QixvRUFBb0Usd0JBQXdCLFVBQVUsdUZBQXVGLG9EQUFvRCxrQ0FBa0MseUJBQXlCLDRCQUE0Qix1SkFBdUosZ0JBQWdCLDREQUE0RCxtSUFBc0UsU0FBUztBQUFBLHFHQUFFLHVCQUF1QixnQ0FBZ0MsMERBQTBELHVCQUF1QiIsImZpbGUiOiI0OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBqUXVlcnkgdjMuMy4xIHwgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqL1xuIWZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiB0KGUpfTp0KGUpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W10scj1lLmRvY3VtZW50LGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLG89bi5zbGljZSxhPW4uY29uY2F0LHM9bi5wdXNoLHU9bi5pbmRleE9mLGw9e30sYz1sLnRvU3RyaW5nLGY9bC5oYXNPd25Qcm9wZXJ0eSxwPWYudG9TdHJpbmcsZD1wLmNhbGwoT2JqZWN0KSxoPXt9LGc9ZnVuY3Rpb24gZSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdC5ub2RlVHlwZX0seT1mdW5jdGlvbiBlKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHY9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxvPSh0PXR8fHIpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aWYoby50ZXh0PWUsbilmb3IoaSBpbiB2KW5baV0mJihvW2ldPW5baV0pO3QuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9PWU/ZStcIlwiOlwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2xbYy5jYWxsKGUpXXx8XCJvYmplY3RcIjp0eXBlb2YgZX12YXIgYj1cIjMuMy4xXCIsdz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdy5mbi5pbml0KGUsdCl9LFQ9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO3cuZm49dy5wcm90b3R5cGU9e2pxdWVyeTpcIjMuMy4xXCIsY29uc3RydWN0b3I6dyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP28uY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHcuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobj49MCYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpzLHNvcnQ6bi5zb3J0LHNwbGljZTpuLnNwbGljZX0sdy5leHRlbmQ9dy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBhJiYobD1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLFwib2JqZWN0XCI9PXR5cGVvZiBhfHxnKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0sYSE9PShyPWVbdF0pJiYobCYmciYmKHcuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJncuaXNQbGFpbk9iamVjdChuKT9uOnt9LGFbdF09dy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHcuZXh0ZW5kKHtleHBhbmRvOlwialF1ZXJ5XCIrKFwiMy4zLjFcIitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cXEQvZyxcIlwiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fFwiW29iamVjdCBPYmplY3RdXCIhPT1jLmNhbGwoZSkpJiYoISh0PWkoZSkpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWYuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3IpJiZwLmNhbGwobik9PT1kKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe20oZSl9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYoQyhlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOihlK1wiXCIpLnJlcGxhY2UoVCxcIlwiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihDKE9iamVjdChlKSk/dy5tZXJnZShuLFwic3RyaW5nXCI9PXR5cGVvZiBlP1tlXTplKTpzLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6dS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGgscz0hbjtvPGE7bysrKShyPSF0KGVbb10sbykpIT09cyYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLHM9W107aWYoQyhlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmcy5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJnMucHVzaChpKTtyZXR1cm4gYS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6aH0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHcuZm5bU3ltYm9sLml0ZXJhdG9yXT1uW1N5bWJvbC5pdGVyYXRvcl0pLHcuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7bFtcIltvYmplY3QgXCIrdCtcIl1cIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gQyhlKXt2YXIgdD0hIWUmJlwibGVuZ3RoXCJpbiBlJiZlLmxlbmd0aCxuPXgoZSk7cmV0dXJuIWcoZSkmJiF5KGUpJiYoXCJhcnJheVwiPT09bnx8MD09PXR8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX12YXIgRT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGwsYyxmLHAsZCxoLGcseSx2LG0seCxiPVwic2l6emxlXCIrMSpuZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxFPWFlKCksaz1hZSgpLFM9YWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoZj0hMCksMH0sTj17fS5oYXNPd25Qcm9wZXJ0eSxBPVtdLGo9QS5wb3AscT1BLnB1c2gsTD1BLnB1c2gsSD1BLnNsaWNlLE89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFA9XCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLE09XCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFI9XCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLEk9XCJcXFxcW1wiK00rXCIqKFwiK1IrXCIpKD86XCIrTStcIiooWypeJHwhfl0/PSlcIitNK1wiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIrUitcIikpfClcIitNK1wiKlxcXFxdXCIsVz1cIjooXCIrUitcIikoPzpcXFxcKCgoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXwoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIrSStcIikqKXwuKilcXFxcKXwpXCIsJD1uZXcgUmVnRXhwKE0rXCIrXCIsXCJnXCIpLEI9bmV3IFJlZ0V4cChcIl5cIitNK1wiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIitNK1wiKyRcIixcImdcIiksRj1uZXcgUmVnRXhwKFwiXlwiK00rXCIqLFwiK00rXCIqXCIpLF89bmV3IFJlZ0V4cChcIl5cIitNK1wiKihbPit+XXxcIitNK1wiKVwiK00rXCIqXCIpLHo9bmV3IFJlZ0V4cChcIj1cIitNK1wiKihbXlxcXFxdJ1xcXCJdKj8pXCIrTStcIipcXFxcXVwiLFwiZ1wiKSxYPW5ldyBSZWdFeHAoVyksVT1uZXcgUmVnRXhwKFwiXlwiK1IrXCIkXCIpLFY9e0lEOm5ldyBSZWdFeHAoXCJeIyhcIitSK1wiKVwiKSxDTEFTUzpuZXcgUmVnRXhwKFwiXlxcXFwuKFwiK1IrXCIpXCIpLFRBRzpuZXcgUmVnRXhwKFwiXihcIitSK1wifFsqXSlcIiksQVRUUjpuZXcgUmVnRXhwKFwiXlwiK0kpLFBTRVVETzpuZXcgUmVnRXhwKFwiXlwiK1cpLENISUxEOm5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiK00rXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIitNK1wiKig/OihbKy1dfClcIitNK1wiKihcXFxcZCspfCkpXCIrTStcIipcXFxcKXwpXCIsXCJpXCIpLGJvb2w6bmV3IFJlZ0V4cChcIl4oPzpcIitQK1wiKSRcIixcImlcIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoXCJeXCIrTStcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIrTStcIiooKD86LVxcXFxkKT9cXFxcZCopXCIrTStcIipcXFxcKXwpKD89W14tXXwkKVwiLFwiaVwiKX0sRz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXFxkJC9pLFE9L15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxKPS9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLEs9L1srfl0vLFo9bmV3IFJlZ0V4cChcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiK00rXCI/fChcIitNK1wiKXwuKVwiLFwiaWdcIiksZWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwiMHhcIit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sdGU9LyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9cIlxcMFwiPT09ZT9cIlxcdWZmZmRcIjplLnNsaWNlKDAsLTEpK1wiXFxcXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrXCIgXCI6XCJcXFxcXCIrZX0scmU9ZnVuY3Rpb24oKXtwKCl9LGllPW1lKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmKFwiZm9ybVwiaW4gZXx8XCJsYWJlbFwiaW4gZSl9LHtkaXI6XCJwYXJlbnROb2RlXCIsbmV4dDpcImxlZ2VuZFwifSk7dHJ5e0wuYXBwbHkoQT1ILmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7TD17YXBwbHk6QS5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsSC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UoZSx0LHIsaSl7dmFyIG8scyxsLGMsZixoLHYsbT10JiZ0Lm93bmVyRG9jdW1lbnQsVD10P3Qubm9kZVR5cGU6OTtpZihyPXJ8fFtdLFwic3RyaW5nXCIhPXR5cGVvZiBlfHwhZXx8MSE9PVQmJjkhPT1UJiYxMSE9PVQpcmV0dXJuIHI7aWYoIWkmJigodD90Lm93bmVyRG9jdW1lbnR8fHQ6dykhPT1kJiZwKHQpLHQ9dHx8ZCxnKSl7aWYoMTEhPT1UJiYoZj1KLmV4ZWMoZSkpKWlmKG89ZlsxXSl7aWYoOT09PVQpe2lmKCEobD10LmdldEVsZW1lbnRCeUlkKG8pKSlyZXR1cm4gcjtpZihsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZSBpZihtJiYobD1tLmdldEVsZW1lbnRCeUlkKG8pKSYmeCh0LGwpJiZsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZXtpZihmWzJdKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigobz1mWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEwuYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLHJ9aWYobi5xc2EmJiFTW2UrXCIgXCJdJiYoIXl8fCF5LnRlc3QoZSkpKXtpZigxIT09VCltPXQsdj1lO2Vsc2UgaWYoXCJvYmplY3RcIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGM9dC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/Yz1jLnJlcGxhY2UodGUsbmUpOnQuc2V0QXR0cmlidXRlKFwiaWRcIixjPWIpLHM9KGg9YShlKSkubGVuZ3RoO3doaWxlKHMtLSloW3NdPVwiI1wiK2MrXCIgXCIrdmUoaFtzXSk7dj1oLmpvaW4oXCIsXCIpLG09Sy50ZXN0KGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0fWlmKHYpdHJ5e3JldHVybiBMLmFwcGx5KHIsbS5xdWVyeVNlbGVjdG9yQWxsKHYpKSxyfWNhdGNoKGUpe31maW5hbGx5e2M9PT1iJiZ0LnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIHUoZS5yZXBsYWNlKEIsXCIkMVwiKSx0LHIsaSl9ZnVuY3Rpb24gYWUoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4saSl7cmV0dXJuIGUucHVzaChuK1wiIFwiKT5yLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbitcIiBcIl09aX1yZXR1cm4gdH1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZVtiXT0hMCxlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49ZS5zcGxpdChcInxcIiksaT1uLmxlbmd0aDt3aGlsZShpLS0pci5hdHRySGFuZGxlW25baV1dPXR9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cImlucHV0XCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHBlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKFwiaW5wdXRcIj09PW58fFwiYnV0dG9uXCI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVyblwiZm9ybVwiaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD9cImxhYmVsXCJpbiB0P1wibGFiZWxcImluIHQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUuZGlzYWJsZWQ9PT1lOnQuZGlzYWJsZWQ9PT1lOnQuaXNEaXNhYmxlZD09PWV8fHQuaXNEaXNhYmxlZCE9PSFlJiZpZSh0KT09PWU6dC5kaXNhYmxlZD09PWU6XCJsYWJlbFwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBzZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxzZShmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1uPW9lLnN1cHBvcnQ9e30sbz1vZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISF0JiZcIkhUTUxcIiE9PXQubm9kZU5hbWV9LHA9b2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsaSxhPWU/ZS5vd25lckRvY3VtZW50fHxlOnc7cmV0dXJuIGEhPT1kJiY5PT09YS5ub2RlVHlwZSYmYS5kb2N1bWVudEVsZW1lbnQ/KGQ9YSxoPWQuZG9jdW1lbnRFbGVtZW50LGc9IW8oZCksdyE9PWQmJihpPWQuZGVmYXVsdFZpZXcpJiZpLnRvcCE9PWkmJihpLmFkZEV2ZW50TGlzdGVuZXI/aS5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIscmUsITEpOmkuYXR0YWNoRXZlbnQmJmkuYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLHJlKSksbi5hdHRyaWJ1dGVzPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT1cImlcIiwhZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGQuY3JlYXRlQ29tbWVudChcIlwiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1RLnRlc3QoZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxuLmdldEJ5SWQ9dWUoZnVuY3Rpb24oZSl7cmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQ9YiwhZC5nZXRFbGVtZW50c0J5TmFtZXx8IWQuZ2V0RWxlbWVudHNCeU5hbWUoYikubGVuZ3RofSksbi5nZXRCeUlkPyhyLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZShcImlkXCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZnKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooci5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlJiZlLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXTtpPXQuZ2V0RWxlbWVudHNCeU5hbWUoZSkscj0wO3doaWxlKG89aVtyKytdKWlmKChuPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6bi5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoXCIqXCI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxyLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sdj1bXSx5PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJih1ZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD1cIjxhIGlkPSdcIitiK1wiJz48L2E+PHNlbGVjdCBpZD0nXCIrYitcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLGUucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCYmeS5wdXNoKFwiWypeJF09XCIrTStcIiooPzonJ3xcXFwiXFxcIilcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fHkucHVzaChcIlxcXFxbXCIrTStcIiooPzp2YWx1ZXxcIitQK1wiKVwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWR+PVwiK2IrXCItXVwiKS5sZW5ndGh8fHkucHVzaChcIn49XCIpLGUucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aHx8eS5wdXNoKFwiOmNoZWNrZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiYSNcIitiK1wiKypcIikubGVuZ3RofHx5LnB1c2goXCIuIy4rWyt+XVwiKX0pLHVlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIHQ9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmeS5wdXNoKFwibmFtZVwiK00rXCIqWypeJHwhfl0/PVwiKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoJiZ5LnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGgmJnkucHVzaChcIjplbmFibGVkXCIsXCI6ZGlzYWJsZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKSx5LnB1c2goXCIsLio6XCIpfSkpLChuLm1hdGNoZXNTZWxlY3Rvcj1RLnRlc3QobT1oLm1hdGNoZXN8fGgud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxoLm1vek1hdGNoZXNTZWxlY3Rvcnx8aC5vTWF0Y2hlc1NlbGVjdG9yfHxoLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnVlKGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsXCIqXCIpLG0uY2FsbChlLFwiW3MhPScnXTp4XCIpLHYucHVzaChcIiE9XCIsVyl9KSx5PXkubGVuZ3RoJiZuZXcgUmVnRXhwKHkuam9pbihcInxcIikpLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKFwifFwiKSksdD1RLnRlc3QoaC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseD10fHxRLnRlc3QoaC5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciByPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiByfHwoMSYocj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFuLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PXI/ZT09PWR8fGUub3duZXJEb2N1bWVudD09PXcmJngodyxlKT8tMTp0PT09ZHx8dC5vd25lckRvY3VtZW50PT09dyYmeCh3LHQpPzE6Yz9PKGMsZSktTyhjLHQpOjA6NCZyPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBmPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PWQ/LTE6dD09PWQ/MTppPy0xOm8/MTpjP08oYyxlKS1PKGMsdCk6MDtpZihpPT09bylyZXR1cm4gY2UoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP2NlKGFbcl0sc1tyXSk6YVtyXT09PXc/LTE6c1tyXT09PXc/MTowfSxkKTpkfSxvZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKGUsbnVsbCxudWxsLHQpfSxvZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtpZigoZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSksdD10LnJlcGxhY2UoeixcIj0nJDEnXVwiKSxuLm1hdGNoZXNTZWxlY3RvciYmZyYmIVNbdCtcIiBcIl0mJighdnx8IXYudGVzdCh0KSkmJigheXx8IXkudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQpO2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG9lKHQsZCxudWxsLFtlXSkubGVuZ3RoPjB9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHgoZSx0KX0sb2UuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKTt2YXIgaT1yLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPWkmJk4uY2FsbChyLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9pKGUsdCwhZyk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1vP286bi5hdHRyaWJ1dGVzfHwhZz9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGx9LG9lLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZStcIlwiKS5yZXBsYWNlKHRlLG5lKX0sb2UuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIrZSl9LG9lLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKGY9IW4uZGV0ZWN0RHVwbGljYXRlcyxjPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGYpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBjPW51bGwsZX0saT1vZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49XCJcIixyPTAsbz1lLm5vZGVUeXBlO2lmKG8pe2lmKDE9PT1vfHw5PT09b3x8MTE9PT1vKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9aShlKX1lbHNlIGlmKDM9PT1vfHw0PT09bylyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSB3aGlsZSh0PWVbcisrXSluKz1pKHQpO3JldHVybiBufSwocj1vZS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpzZSxtYXRjaDpWLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7XCI+XCI6e2RpcjpcInBhcmVudE5vZGVcIixmaXJzdDohMH0sXCIgXCI6e2RpcjpcInBhcmVudE5vZGVcIn0sXCIrXCI6e2RpcjpcInByZXZpb3VzU2libGluZ1wiLGZpcnN0OiEwfSxcIn5cIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKFosZWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fFwiXCIpLnJlcGxhY2UoWixlZSksXCJ+PVwiPT09ZVsyXSYmKGVbM109XCIgXCIrZVszXStcIiBcIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksXCJudGhcIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b2UuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooXCJldmVuXCI9PT1lWzNdfHxcIm9kZFwiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fFwib2RkXCI9PT1lWzNdKSk6ZVszXSYmb2UuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNl0mJmVbMl07cmV0dXJuIFYuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8XCJcIjpuJiZYLnRlc3QobikmJih0PWEobiwhMCkpJiYodD1uLmluZGV4T2YoXCIpXCIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSkudG9Mb3dlckNhc2UoKTtyZXR1cm5cIipcIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1FW2UrXCIgXCJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKFwiKF58XCIrTStcIilcIitlK1wiKFwiK00rXCJ8JClcIikpJiZFKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChcInN0cmluZ1wiPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vZS5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/XCIhPVwiPT09dDohdHx8KGkrPVwiXCIsXCI9XCI9PT10P2k9PT1uOlwiIT1cIj09PXQ/aSE9PW46XCJePVwiPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOlwiKj1cIj09PXQ/biYmaS5pbmRleE9mKG4pPi0xOlwiJD1cIj09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjpcIn49XCI9PT10PyhcIiBcIitpLnJlcGxhY2UoJCxcIiBcIikrXCIgXCIpLmluZGV4T2Yobik+LTE6XCJ8PVwiPT09dCYmKGk9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uK1wiLVwiKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPVwibnRoXCIhPT1lLnNsaWNlKDAsMyksYT1cImxhc3RcIiE9PWUuc2xpY2UoLTQpLHM9XCJvZi10eXBlXCI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT9cIm5leHRTaWJsaW5nXCI6XCJwcmV2aW91c1NpYmxpbmdcIix5PXQucGFyZW50Tm9kZSx2PXMmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxtPSF1JiYhcyx4PSExO2lmKHkpe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT12OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz1cIm9ubHlcIj09PWUmJiFoJiZcIm5leHRTaWJsaW5nXCJ9cmV0dXJuITB9aWYoaD1bYT95LmZpcnN0Q2hpbGQ6eS5sYXN0Q2hpbGRdLGEmJm0pe3g9KGQ9KGw9KGM9KGY9KHA9eSlbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV18fFtdKVswXT09PVQmJmxbMV0pJiZsWzJdLHA9ZCYmeS5jaGlsZE5vZGVzW2RdO3doaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKDE9PT1wLm5vZGVUeXBlJiYrK3gmJnA9PT10KXtjW2VdPVtULGQseF07YnJlYWt9fWVsc2UgaWYobSYmKHg9ZD0obD0oYz0oZj0ocD10KVtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXXx8W10pWzBdPT09VCYmbFsxXSksITE9PT14KXdoaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpJiYrK3gmJihtJiYoKGM9KGY9cFtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXT1bVCx4XSkscD09PXQpKWJyZWFrO3JldHVybih4LT1pKT09PXJ8fHglcj09MCYmeC9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLGk9ci5wc2V1ZG9zW2VdfHxyLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b2UuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2UpO3JldHVybiBpW2JdP2kodCk6aS5sZW5ndGg+MT8obj1bZSxlLFwiXCIsdF0sci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/c2UoZnVuY3Rpb24oZSxuKXt2YXIgcixvPWkoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSllW3I9TyhlLG9bYV0pXT0hKG5bcl09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gaShlLDAsbil9KTppfX0scHNldWRvczp7bm90OnNlKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1zKGUucmVwbGFjZShCLFwiJDFcIikpO3JldHVybiByW2JdP3NlKGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGE9cihlLG51bGwsaSxbXSkscz1lLmxlbmd0aDt3aGlsZShzLS0pKG89YVtzXSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6c2UoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvZShlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZShaLGVlKSxmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGkodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpzZShmdW5jdGlvbihlKXtyZXR1cm4gVS50ZXN0KGV8fFwiXCIpfHxvZS5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK2UpLGU9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG97aWYobj1nP3QubGFuZzp0LmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpfHx0LmdldEF0dHJpYnV0ZShcImxhbmdcIikpcmV0dXJuKG49bi50b0xvd2VyQ2FzZSgpKT09PWV8fDA9PT1uLmluZGV4T2YoZStcIi1cIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09aH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kLmFjdGl2ZUVsZW1lbnQmJighZC5oYXNGb2N1c3x8ZC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpkZSghMSksZGlzYWJsZWQ6ZGUoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PXQmJiEhZS5jaGVja2VkfHxcIm9wdGlvblwiPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hci5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFkudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEcudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT10JiZcImJ1dHRvblwiPT09ZS50eXBlfHxcImJ1dHRvblwiPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImlucHV0XCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpoZShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aGUoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmhlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpoZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OmhlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1yLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pci5wc2V1ZG9zW3RdPWZlKHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0pci5wc2V1ZG9zW3RdPXBlKHQpO2Z1bmN0aW9uIHllKCl7fXllLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgeWUsYT1vZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLGksbyxhLHMsdSxsLGM9a1tlK1wiIFwiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsdT1bXSxsPXIucHJlRmlsdGVyO3doaWxlKHMpe24mJiEoaT1GLmV4ZWMocykpfHwoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLHUucHVzaChvPVtdKSksbj0hMSwoaT1fLmV4ZWMocykpJiYobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6aVswXS5yZXBsYWNlKEIsXCIgXCIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gci5maWx0ZXIpIShpPVZbYV0uZXhlYyhzKSl8fGxbYV0mJiEoaT1sW2FdKGkpKXx8KG49aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczppfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9vZS5lcnJvcihlKTprKGUsdSkuc2xpY2UoMCl9O2Z1bmN0aW9uIHZlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj1cIlwiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBtZShlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmXCJwYXJlbnROb2RlXCI9PT1vLHM9QysrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixpKXt3aGlsZSh0PXRbcl0paWYoMT09PXQubm9kZVR5cGV8fGEpcmV0dXJuIGUodCxuLGkpO3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxmLHA9W1Qsc107aWYodSl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8YSkmJmUodCxuLHUpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKWlmKGY9dFtiXXx8KHRbYl09e30pLGM9Zlt0LnVuaXF1ZUlEXXx8KGZbdC51bmlxdWVJRF09e30pLGkmJmk9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpdD10W3JdfHx0O2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT1UJiZsWzFdPT09cylyZXR1cm4gcFsyXT1sWzJdO2lmKGNbb109cCxwWzJdPWUodCxuLHUpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBiZShlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKW9lKGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB3ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhPVtdLHM9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtzPHU7cysrKShvPWVbc10pJiYobiYmIW4obyxyLGkpfHwoYS5wdXNoKG8pLGwmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPVRlKHIpKSxpJiYhaVtiXSYmKGk9VGUoaSxvKSksc2UoZnVuY3Rpb24obyxhLHMsdSl7dmFyIGwsYyxmLHA9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8YmUodHx8XCIqXCIscy5ub2RlVHlwZT9bc106cyxbXSkseT0hZXx8IW8mJnQ/Zzp3ZShnLHAsZSxzLHUpLHY9bj9pfHwobz9lOmh8fHIpP1tdOmE6eTtpZihuJiZuKHksdixzLHUpLHIpe2w9d2UodixkKSxyKGwsW10scyx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkoZj1sW2NdKSYmKHZbZFtjXV09ISh5W2RbY11dPWYpKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiZsLnB1c2goeVtjXT1mKTtpKG51bGwsdj1bXSxsLHUpfWM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiYobD1pP08obyxmKTpwW2NdKT4tMSYmKG9bbF09IShhW2xdPWYpKX19ZWxzZSB2PXdlKHY9PT1hP3Yuc3BsaWNlKGgsdi5sZW5ndGgpOnYpLGk/aShudWxsLGEsdix1KTpMLmFwcGx5KGEsdil9KX1mdW5jdGlvbiBDZShlKXtmb3IodmFyIHQsbixpLG89ZS5sZW5ndGgsYT1yLnJlbGF0aXZlW2VbMF0udHlwZV0scz1hfHxyLnJlbGF0aXZlW1wiIFwiXSx1PWE/MTowLGM9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxmPW1lKGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSk+LTF9LHMsITApLHA9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hYSYmKHJ8fG4hPT1sKXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOmYoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTt1PG87dSsrKWlmKG49ci5yZWxhdGl2ZVtlW3VdLnR5cGVdKXA9W21lKHhlKHApLG4pXTtlbHNle2lmKChuPXIuZmlsdGVyW2VbdV0udHlwZV0uYXBwbHkobnVsbCxlW3VdLm1hdGNoZXMpKVtiXSl7Zm9yKGk9Kyt1O2k8bztpKyspaWYoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKWJyZWFrO3JldHVybiBUZSh1PjEmJnhlKHApLHU+MSYmdmUoZS5zbGljZSgwLHUtMSkuY29uY2F0KHt2YWx1ZTpcIiBcIj09PWVbdS0yXS50eXBlP1wiKlwiOlwiXCJ9KSkucmVwbGFjZShCLFwiJDFcIiksbix1PGkmJkNlKGUuc2xpY2UodSxpKSksaTxvJiZDZShlPWUuc2xpY2UoaSkpLGk8byYmdmUoZSkpfXAucHVzaChuKX1yZXR1cm4geGUocCl9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgbj10Lmxlbmd0aD4wLGk9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKG8sYSxzLHUsYyl7dmFyIGYsaCx5LHY9MCxtPVwiMFwiLHg9byYmW10sYj1bXSx3PWwsQz1vfHxpJiZyLmZpbmQuVEFHKFwiKlwiLGMpLEU9VCs9bnVsbD09dz8xOk1hdGgucmFuZG9tKCl8fC4xLGs9Qy5sZW5ndGg7Zm9yKGMmJihsPWE9PT1kfHxhfHxjKTttIT09ayYmbnVsbCE9KGY9Q1ttXSk7bSsrKXtpZihpJiZmKXtoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7d2hpbGUoeT1lW2grK10paWYoeShmLGF8fGQscykpe3UucHVzaChmKTticmVha31jJiYoVD1FKX1uJiYoKGY9IXkmJmYpJiZ2LS0sbyYmeC5wdXNoKGYpKX1pZih2Kz1tLG4mJm0hPT12KXtoPTA7d2hpbGUoeT10W2grK10peSh4LGIsYSxzKTtpZihvKXtpZih2PjApd2hpbGUobS0tKXhbbV18fGJbbV18fChiW21dPWouY2FsbCh1KSk7Yj13ZShiKX1MLmFwcGx5KHUsYiksYyYmIW8mJmIubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb2UudW5pcXVlU29ydCh1KX1yZXR1cm4gYyYmKFQ9RSxsPXcpLHh9O3JldHVybiBuP3NlKG8pOm99cmV0dXJuIHM9b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVNbZStcIiBcIl07aWYoIW8pe3R8fCh0PWEoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShvPUNlKHRbbl0pKVtiXT9yLnB1c2gobyk6aS5wdXNoKG8pOyhvPVMoZSxFZShpLHIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gb30sdT1vZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sdSxsLGMsZixwPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsZD0haSYmYShlPXAuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PWQubGVuZ3RoKXtpZigodT1kWzBdPWRbMF0uc2xpY2UoMCkpLmxlbmd0aD4yJiZcIklEXCI9PT0obD11WzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmZyYmci5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZighKHQ9KHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLGVlKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtwJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1vPVYubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShvLS0pe2lmKGw9dVtvXSxyLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigoZj1yLmZpbmRbY10pJiYoaT1mKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLEsudGVzdCh1WzBdLnR5cGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKG8sMSksIShlPWkubGVuZ3RoJiZ2ZSh1KSkpcmV0dXJuIEwuYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuKHB8fHMoZSxkKSkoaSx0LCFnLG4sIXR8fEsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPWIuc3BsaXQoXCJcIikuc29ydChEKS5qb2luKFwiXCIpPT09YixuLmRldGVjdER1cGxpY2F0ZXM9ISFmLHAoKSxuLnNvcnREZXRhY2hlZD11ZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpKX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD1cIjxhIGhyZWY9JyMnPjwvYT5cIixcIiNcIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfSl8fGxlKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCxcInR5cGVcIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9XCI8aW5wdXQvPlwiLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIpLFwiXCI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIil9KXx8bGUoXCJ2YWx1ZVwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpfSl8fGxlKFAsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKCFuKXJldHVybiEwPT09ZVt0XT90LnRvTG93ZXJDYXNlKCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSksb2V9KGUpO3cuZmluZD1FLHcuZXhwcj1FLnNlbGVjdG9ycyx3LmV4cHJbXCI6XCJdPXcuZXhwci5wc2V1ZG9zLHcudW5pcXVlU29ydD13LnVuaXF1ZT1FLnVuaXF1ZVNvcnQsdy50ZXh0PUUuZ2V0VGV4dCx3LmlzWE1MRG9jPUUuaXNYTUwsdy5jb250YWlucz1FLmNvbnRhaW5zLHcuZXNjYXBlU2VsZWN0b3I9RS5lc2NhcGU7dmFyIGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJncoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxTPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxEPXcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gTihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIEE9L148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2k7ZnVuY3Rpb24gaihlLHQsbil7cmV0dXJuIGcodCk/dy5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk6dC5ub2RlVHlwZT93LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk6XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbCh0LGUpPi0xIT09bn0pOncuZmlsdGVyKHQsZSxuKX13LmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9XCI6bm90KFwiK2UrXCIpXCIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/dy5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp3LmZpbmQubWF0Y2hlcyhlLHcuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sdy5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYody5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3LmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/dy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZELnRlc3QoZSk/dyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC87KHcuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZihuPW58fHEsXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCEoaT1cIjxcIj09PWVbMF0mJlwiPlwiPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpMLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKGlbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHc/dFswXTp0LHcubWVyZ2UodGhpcyx3LnBhcnNlSFRNTChpWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OnIsITApKSxBLnRlc3QoaVsxXSkmJncuaXNQbGFpbk9iamVjdCh0KSlmb3IoaSBpbiB0KWcodGhpc1tpXSk/dGhpc1tpXSh0W2ldKTp0aGlzLmF0dHIoaSx0W2ldKTtyZXR1cm4gdGhpc31yZXR1cm4obz1yLmdldEVsZW1lbnRCeUlkKGlbMl0pKSYmKHRoaXNbMF09byx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpnKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHcpOncubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9dy5mbixxPXcocik7dmFyIEg9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXcoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYody5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9XCJzdHJpbmdcIiE9dHlwZW9mIGUmJncoZSk7aWYoIUQudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/dy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT9cInN0cmluZ1wiPT10eXBlb2YgZT91LmNhbGwodyhlKSx0aGlzWzBdKTp1LmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcudW5pcXVlU29ydCh3Lm1lcmdlKHRoaXMuZ2V0KCksdyhlLHQpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBQKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX13LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwicHJldmlvdXNTaWJsaW5nXCIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gTihlLFwiaWZyYW1lXCIpP2UuY29udGVudERvY3VtZW50OihOKGUsXCJ0ZW1wbGF0ZVwiKSYmKGU9ZS5jb250ZW50fHxlKSx3Lm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9dy5tYXAodGhpcyx0LG4pO3JldHVyblwiVW50aWxcIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiZcInN0cmluZ1wiPT10eXBlb2YgciYmKGk9dy5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKE9bZV18fHcudW5pcXVlU29ydChpKSxILnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KTt2YXIgTT0vW15cXHgyMFxcdFxcclxcblxcZl0rL2c7ZnVuY3Rpb24gUihlKXt2YXIgdD17fTtyZXR1cm4gdy5lYWNoKGUubWF0Y2goTSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9dy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT1cInN0cmluZ1wiPT10eXBlb2YgZT9SKGUpOncuZXh0ZW5kKHt9LGUpO3ZhciB0LG4scixpLG89W10sYT1bXSxzPS0xLHU9ZnVuY3Rpb24oKXtmb3IoaT1pfHxlLm9uY2Uscj10PSEwO2EubGVuZ3RoO3M9LTEpe249YS5zaGlmdCgpO3doaWxlKCsrczxvLmxlbmd0aCkhMT09PW9bc10uYXBwbHkoblswXSxuWzFdKSYmZS5zdG9wT25GYWxzZSYmKHM9by5sZW5ndGgsbj0hMSl9ZS5tZW1vcnl8fChuPSExKSx0PSExLGkmJihvPW4/W106XCJcIil9LGw9e2FkZDpmdW5jdGlvbigpe3JldHVybiBvJiYobiYmIXQmJihzPW8ubGVuZ3RoLTEsYS5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7ZyhyKT9lLnVuaXF1ZSYmbC5oYXMocil8fG8ucHVzaChyKTpyJiZyLmxlbmd0aCYmXCJzdHJpbmdcIiE9PXgocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYmdSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXcuaW5BcnJheSh0LG8sbikpPi0xKW8uc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3cuaW5BcnJheShlLG8pPi0xOm8ubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihvPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxvPW49XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFvfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxufHx0fHwobz1uPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhaX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXx8KG49W2UsKG49bnx8W10pLnNsaWNlP24uc2xpY2UoKTpuXSxhLnB1c2gobiksdHx8dSgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGwuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX07cmV0dXJuIGx9O2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gVyhlKXt0aHJvdyBlfWZ1bmN0aW9uICQoZSx0LG4scil7dmFyIGk7dHJ5e2UmJmcoaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmZyhpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fXcuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbih0KXt2YXIgbj1bW1wibm90aWZ5XCIsXCJwcm9ncmVzc1wiLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLDJdLFtcInJlc29sdmVcIixcImRvbmVcIix3LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMCxcInJlc29sdmVkXCJdLFtcInJlamVjdFwiLFwiZmFpbFwiLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksdy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwxLFwicmVqZWN0ZWRcIl1dLHI9XCJwZW5kaW5nXCIsaT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG8uZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSxcImNhdGNoXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKHQpe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZyhlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmZyhlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdK1wiV2l0aFwiXSh0aGlzLGk/W2VdOmFyZ3VtZW50cyl9KX0pLGU9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbih0LHIsaSl7dmFyIG89MDtmdW5jdGlvbiBhKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMsdT1hcmd1bWVudHMsbD1mdW5jdGlvbigpe3ZhciBlLGw7aWYoISh0PG8pKXtpZigoZT1yLmFwcGx5KHMsdSkpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTtsPWUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJmUudGhlbixnKGwpP2k/bC5jYWxsKGUsYShvLG4sSSxpKSxhKG8sbixXLGkpKToobysrLGwuY2FsbChlLGEobyxuLEksaSksYShvLG4sVyxpKSxhKG8sbixJLG4ubm90aWZ5V2l0aCkpKToociE9PUkmJihzPXZvaWQgMCx1PVtlXSksKGl8fG4ucmVzb2x2ZVdpdGgpKHMsdSkpfX0sYz1pP2w6ZnVuY3Rpb24oKXt0cnl7bCgpfWNhdGNoKGUpe3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsYy5zdGFja1RyYWNlKSx0KzE+PW8mJihyIT09VyYmKHM9dm9pZCAwLHU9W2VdKSxuLnJlamVjdFdpdGgocyx1KSl9fTt0P2MoKToody5EZWZlcnJlZC5nZXRTdGFja0hvb2smJihjLnN0YWNrVHJhY2U9dy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGMpKX19cmV0dXJuIHcuRGVmZXJyZWQoZnVuY3Rpb24oZSl7blswXVszXS5hZGQoYSgwLGUsZyhpKT9pOkksZS5ub3RpZnlXaXRoKSksblsxXVszXS5hZGQoYSgwLGUsZyh0KT90OkkpKSxuWzJdWzNdLmFkZChhKDAsZSxnKHIpP3I6VykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3cuZXh0ZW5kKGUsaSk6aX19LG89e307cmV0dXJuIHcuZWFjaChuLGZ1bmN0aW9uKGUsdCl7dmFyIGE9dFsyXSxzPXRbNV07aVt0WzFdXT1hLmFkZCxzJiZhLmFkZChmdW5jdGlvbigpe3I9c30sblszLWVdWzJdLmRpc2FibGUsblszLWVdWzNdLmRpc2FibGUsblswXVsyXS5sb2NrLG5bMF1bM10ubG9jayksYS5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXStcIldpdGhcIl0odGhpcz09PW8/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxvW3RbMF0rXCJXaXRoXCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9by5jYWxsKGFyZ3VtZW50cyksYT13LkRlZmVycmVkKCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP28uY2FsbChhcmd1bWVudHMpOm4sLS10fHxhLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoJChlLGEuZG9uZShzKG4pKS5yZXNvbHZlLGEucmVqZWN0LCF0KSxcInBlbmRpbmdcIj09PWEuc3RhdGUoKXx8ZyhpW25dJiZpW25dLnRoZW4pKSlyZXR1cm4gYS50aGVuKCk7d2hpbGUobi0tKSQoaVtuXSxzKG4pLGEucmVqZWN0KTtyZXR1cm4gYS5wcm9taXNlKCl9fSk7dmFyIEI9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87dy5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYmQi50ZXN0KHQubmFtZSkmJmUuY29uc29sZS53YXJuKFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIrdC5tZXNzYWdlLHQuc3RhY2ssbil9LHcucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24odCl7ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfTt2YXIgRj13LkRlZmVycmVkKCk7dy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpW1wiY2F0Y2hcIl0oZnVuY3Rpb24oZSl7dy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHcuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13LnJlYWR5V2FpdDp3LmlzUmVhZHkpfHwody5pc1JlYWR5PSEwLCEwIT09ZSYmLS13LnJlYWR5V2FpdD4wfHxGLnJlc29sdmVXaXRoKHIsW3ddKSl9fSksdy5yZWFkeS50aGVuPUYudGhlbjtmdW5jdGlvbiBfKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSx3LnJlYWR5KCl9XCJjb21wbGV0ZVwiPT09ci5yZWFkeVN0YXRlfHxcImxvYWRpbmdcIiE9PXIucmVhZHlTdGF0ZSYmIXIuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Uuc2V0VGltZW91dCh3LnJlYWR5KTooci5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSk7dmFyIHo9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZihcIm9iamVjdFwiPT09eChuKSl7aT0hMDtmb3IocyBpbiBuKXooZSx0LHMsbltzXSwhMCxvLGEpfWVsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsZyhyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbCh3KGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LFg9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFYoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUucmVwbGFjZShYLFwibXMtXCIpLnJlcGxhY2UoVSxWKX12YXIgWT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9O2Z1bmN0aW9uIFEoKXt0aGlzLmV4cGFuZG89dy5leHBhbmRvK1EudWlkKyt9US51aWQ9MSxRLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLmV4cGFuZG9dO3JldHVybiB0fHwodD17fSxZKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5jYWNoZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpW0codCldPW47ZWxzZSBmb3IociBpbiB0KWlbRyhyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtHKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKEcpOih0PUcodCkpaW4gcj9bdF06dC5tYXRjaChNKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fHcuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIXcuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBKPW5ldyBRLEs9bmV3IFEsWj0vXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sZWU9L1tBLVpdL2c7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuXCJ0cnVlXCI9PT1lfHxcImZhbHNlXCIhPT1lJiYoXCJudWxsXCI9PT1lP251bGw6ZT09PStlK1wiXCI/K2U6Wi50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9XCJkYXRhLVwiK3QucmVwbGFjZShlZSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dGUobil9Y2F0Y2goZSl7fUsuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufXcuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBLLmhhc0RhdGEoZSl8fEouaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEsuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0sucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSi5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9fSksdy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT1LLmdldChvKSwxPT09by5ub2RlVHlwZSYmIUouZ2V0KG8sXCJoYXNEYXRhQXR0cnNcIikpKXtuPWEubGVuZ3RoO3doaWxlKG4tLSlhW25dJiYwPT09KHI9YVtuXS5uYW1lKS5pbmRleE9mKFwiZGF0YS1cIikmJihyPUcoci5zbGljZSg1KSksbmUobyxyLGlbcl0pKTtKLnNldChvLFwiaGFzRGF0YUF0dHJzXCIsITApfXJldHVybiBpfXJldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0suc2V0KHRoaXMsZSl9KTp6KHRoaXMsZnVuY3Rpb24odCl7dmFyIG47aWYobyYmdm9pZCAwPT09dCl7aWYodm9pZCAwIT09KG49Sy5nZXQobyxlKSkpcmV0dXJuIG47aWYodm9pZCAwIT09KG49bmUobyxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5yZW1vdmUodGhpcyxlKX0pfX0pLHcuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8XCJmeFwiKStcInF1ZXVlXCIscj1KLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPUouYWNjZXNzKGUsdCx3Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8XCJmeFwiO3ZhciBuPXcucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89dy5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt3LmRlcXVldWUoZSx0KX07XCJpbnByb2dyZXNzXCI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoXCJmeFwiPT09dCYmbi51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGEsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10K1wicXVldWVIb29rc1wiO3JldHVybiBKLmdldChlLG4pfHxKLmFjY2VzcyhlLG4se2VtcHR5OncuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7Si5yZW1vdmUoZSxbdCtcInF1ZXVlXCIsbl0pfSl9KX19KSx3LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlJiYodD1lLGU9XCJmeFwiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3cucXVldWUodGhpc1swXSxlKTp2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dy5xdWV1ZSh0aGlzLGUsdCk7dy5fcXVldWVIb29rcyh0aGlzLGUpLFwiZnhcIj09PWUmJlwiaW5wcm9ncmVzc1wiIT09blswXSYmdy5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9dy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHxcImZ4XCI7d2hpbGUoYS0tKShuPUouZ2V0KG9bYV0sZStcInF1ZXVlSG9va3NcIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLGllPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3JlK1wiKShbYS16JV0qKSRcIixcImlcIiksb2U9W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJub25lXCI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHxcIlwiPT09ZS5zdHlsZS5kaXNwbGF5JiZ3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSYmXCJub25lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiKX0sc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9O2Z1bmN0aW9uIHVlKGUsdCxuLHIpe3ZhciBpLG8sYT0yMCxzPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gdy5jc3MoZSx0LFwiXCIpfSx1PXMoKSxsPW4mJm5bM118fCh3LmNzc051bWJlclt0XT9cIlwiOlwicHhcIiksYz0ody5jc3NOdW1iZXJbdF18fFwicHhcIiE9PWwmJit1KSYmaWUuZXhlYyh3LmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pdy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLHcuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgbGU9e307ZnVuY3Rpb24gY2UoZSl7dmFyIHQsbj1lLm93bmVyRG9jdW1lbnQscj1lLm5vZGVOYW1lLGk9bGVbcl07cmV0dXJuIGl8fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0ZUVsZW1lbnQocikpLGk9dy5jc3ModCxcImRpc3BsYXlcIiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLFwibm9uZVwiPT09aSYmKGk9XCJibG9ja1wiKSxsZVtyXT1pLGkpfWZ1bmN0aW9uIGZlKGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKShyPWVbb10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oXCJub25lXCI9PT1uJiYoaVtvXT1KLmdldChyLFwiZGlzcGxheVwiKXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGlbb109Y2UocikpKTpcIm5vbmVcIiE9PW4mJihpW29dPVwibm9uZVwiLEouc2V0KHIsXCJkaXNwbGF5XCIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX13LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP3codGhpcykuc2hvdygpOncodGhpcykuaGlkZSgpfSl9fSk7dmFyIHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSxoZT0vXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLGdlPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7ZnVuY3Rpb24geWUoZSx0KXt2YXIgbjtyZXR1cm4gbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fFwiKlwiKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHxcIipcIik6W10sdm9pZCAwPT09dHx8dCYmTihlLHQpP3cubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspSi5zZXQoZVtuXSxcImdsb2JhbEV2YWxcIiwhdHx8Si5nZXQodFtuXSxcImdsb2JhbEV2YWxcIikpfXZhciBtZT0vPHwmIz9cXHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZihcIm9iamVjdFwiPT09eChvKSl3Lm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxzPShkZS5leGVjKG8pfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK3cuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDt3Lm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD1cIlwiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiZ3LmluQXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPXcuY29udGFpbnMoby5vd25lckRvY3VtZW50LG8pLGE9eWUoZi5hcHBlbmRDaGlsZChvKSxcInNjcmlwdFwiKSxsJiZ2ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fFwiXCIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9IWZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0PXIuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3Quc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksdC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLHQuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSxlLmFwcGVuZENoaWxkKHQpLGguY2hlY2tDbG9uZT1lLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxlLmlubmVySFRNTD1cIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIixoLm5vQ2xvbmVDaGVja2VkPSEhZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGJlPXIuZG9jdW1lbnRFbGVtZW50LHdlPS9ea2V5LyxUZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sQ2U9L14oW14uXSopKD86XFwuKC4rKXwpLztmdW5jdGlvbiBFZSgpe3JldHVybiEwfWZ1bmN0aW9uIGtlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoKXt0cnl7cmV0dXJuIHIuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIERlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtcInN0cmluZ1wiIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCk7Zm9yKHMgaW4gdClEZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPWtlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiB3KCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9dy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9dy5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcseT1KLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJlLGkpLG4uZ3VpZHx8KG4uZ3VpZD13Lmd1aWQrKyksKHU9eS5ldmVudHMpfHwodT15LmV2ZW50cz17fSksKGE9eS5oYW5kbGUpfHwoYT15LmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgdyYmdy5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/dy5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksbD0odD0odHx8XCJcIikubWF0Y2goTSl8fFtcIlwiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9Q2UuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksZCYmKGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPXcuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJncuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKFwiLlwiKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwoZSxyLGgsYSl8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSx3LmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9Si5oYXNEYXRhKGUpJiZKLmdldChlKTtpZih5JiYodT15LmV2ZW50cykpe2w9KHQ9KHR8fFwiXCIpLm1hdGNoKE0pfHxbXCJcIl0pLmxlbmd0aDt3aGlsZShsLS0paWYocz1DZS5leGVjKHRbbF0pfHxbXSxkPWc9c1sxXSxoPShzWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLGQpe2Y9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2guam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJihcIioqXCIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx5LmhhbmRsZSl8fHcucmVtb3ZlRXZlbnQoZSxkLHkuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KXcuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7dy5pc0VtcHR5T2JqZWN0KHUpJiZKLnJlbW92ZShlLFwiaGFuZGxlIGV2ZW50c1wiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PXcuZXZlbnQuZml4KGUpLG4scixpLG8sYSxzLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KEouZ2V0KHRoaXMsXCJldmVudHNcIil8fHt9KVt0LnR5cGVdfHxbXSxjPXcuZXZlbnQuc3BlY2lhbFt0LnR5cGVdfHx7fTtmb3IodVswXT10LG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXVbbl09YXJndW1lbnRzW25dO2lmKHQuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx0KSl7cz13LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx0LGwpLG49MDt3aGlsZSgobz1zW24rK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXt0LmN1cnJlbnRUYXJnZXQ9by5lbGVtLHI9MDt3aGlsZSgoYT1vLmhhbmRsZXJzW3IrK10pJiYhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKXQucm5hbWVzcGFjZSYmIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKXx8KHQuaGFuZGxlT2JqPWEsdC5kYXRhPWEuZGF0YSx2b2lkIDAhPT0oaT0oKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8YS5oYW5kbGVyKS5hcHBseShvLmVsZW0sdSkpJiYhMT09PSh0LnJlc3VsdD1pKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsdCksdC5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscz1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHUmJmwubm9kZVR5cGUmJiEoXCJjbGlja1wiPT09ZS50eXBlJiZlLmJ1dHRvbj49MSkpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKFwiY2xpY2tcIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrXCIgXCJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD93KGksdGhpcykuaW5kZXgobCk+LTE6dy5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpnKHQpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZVt3LmV4cGFuZG9dP2U6bmV3IHcuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1TZSgpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT1TZSgpJiZ0aGlzLmJsdXIpcmV0dXJuIHRoaXMuYmx1cigpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKFwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmTih0aGlzLFwiaW5wdXRcIikpcmV0dXJuIHRoaXMuY2xpY2soKSwhMX0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LHcucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHcuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3LkV2ZW50KSlyZXR1cm4gbmV3IHcuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FZTprZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbdy5leHBhbmRvXT0hMH0sdy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmtlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sdy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLFwiY2hhclwiOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0dG9uO3JldHVybiBudWxsPT1lLndoaWNoJiZ3ZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5jaGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53aGljaCYmdm9pZCAwIT09dCYmVGUudGVzdChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53aGljaH19LHcuZXZlbnQuYWRkUHJvcCksdy5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGUsdCl7dy5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4gaSYmKGk9PT1yfHx3LmNvbnRhaW5zKHIsaSkpfHwoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx3LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIERlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRGUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZStcIi5cIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49a2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLEFlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGplPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2kscWU9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z1bmN0aW9uIExlKGUsdCl7cmV0dXJuIE4oZSxcInRhYmxlXCIpJiZOKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCxcInRyXCIpP3coZSkuY2hpbGRyZW4oXCJ0Ym9keVwiKVswXXx8ZTplfWZ1bmN0aW9uIEhlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2UudHlwZSxlfWZ1bmN0aW9uIE9lKGUpe3JldHVyblwidHJ1ZS9cIj09PShlLnR5cGV8fFwiXCIpLnNsaWNlKDAsNSk/ZS50eXBlPWUudHlwZS5zbGljZSg1KTplLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksZX1mdW5jdGlvbiBQZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKEouaGFzRGF0YShlKSYmKG89Si5hY2Nlc3MoZSksYT1KLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9Sy5oYXNEYXRhKGUpJiYocz1LLmFjY2VzcyhlKSx1PXcuZXh0ZW5kKHt9LHMpLEsuc2V0KHQsdSkpfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1uJiZwZS50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDpcImlucHV0XCIhPT1uJiZcInRleHRhcmVhXCIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe3Q9YS5hcHBseShbXSx0KTt2YXIgaSxvLHMsdSxsLGMsZj0wLHA9ZS5sZW5ndGgsZD1wLTEseT10WzBdLHY9Zyh5KTtpZih2fHxwPjEmJlwic3RyaW5nXCI9PXR5cGVvZiB5JiYhaC5jaGVja0Nsb25lJiZqZS50ZXN0KHkpKXJldHVybiBlLmVhY2goZnVuY3Rpb24oaSl7dmFyIG89ZS5lcShpKTt2JiYodFswXT15LmNhbGwodGhpcyxpLG8uaHRtbCgpKSksUmUobyx0LG4scil9KTtpZihwJiYoaT14ZSh0LGVbMF0ub3duZXJEb2N1bWVudCwhMSxlLHIpLG89aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3RoJiYoaT1vKSxvfHxyKSl7Zm9yKHU9KHM9dy5tYXAoeWUoaSxcInNjcmlwdFwiKSxIZSkpLmxlbmd0aDtmPHA7ZisrKWw9aSxmIT09ZCYmKGw9dy5jbG9uZShsLCEwLCEwKSx1JiZ3Lm1lcmdlKHMseWUobCxcInNjcmlwdFwiKSkpLG4uY2FsbChlW2ZdLGwsZik7aWYodSlmb3IoYz1zW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsdy5tYXAocyxPZSksZj0wO2Y8dTtmKyspbD1zW2ZdLGhlLnRlc3QobC50eXBlfHxcIlwiKSYmIUouYWNjZXNzKGwsXCJnbG9iYWxFdmFsXCIpJiZ3LmNvbnRhaW5zKGMsbCkmJihsLnNyYyYmXCJtb2R1bGVcIiE9PShsLnR5cGV8fFwiXCIpLnRvTG93ZXJDYXNlKCk/dy5fZXZhbFVybCYmdy5fZXZhbFVybChsLnNyYyk6bShsLnRleHRDb250ZW50LnJlcGxhY2UocWUsXCJcIiksYyxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gSWUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/dy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fHcuY2xlYW5EYXRhKHllKHIpKSxyLnBhcmVudE5vZGUmJihuJiZ3LmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKSYmdmUoeWUocixcInNjcmlwdFwiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX13LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE5lLFwiPCQxPjwvJDI+XCIpfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNsb25lTm9kZSghMCksdT13LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKGgubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHcuaXNYTUxEb2MoZSkpKWZvcihhPXllKHMpLHI9MCxpPShvPXllKGUpKS5sZW5ndGg7cjxpO3IrKylNZShvW3JdLGFbcl0pO2lmKHQpaWYobilmb3Iobz1vfHx5ZShlKSxhPWF8fHllKHMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspUGUob1tyXSxhW3JdKTtlbHNlIFBlKGUscyk7cmV0dXJuKGE9eWUocyxcInNjcmlwdFwiKSkubGVuZ3RoPjAmJnZlKGEsIXUmJnllKGUsXCJzY3JpcHRcIikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9dy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoWShuKSl7aWYodD1uW0ouZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/dy5ldmVudC5yZW1vdmUobixyKTp3LnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltKLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksdy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxMZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUxlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKGUsITEpKSxlLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB3LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhQWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9dy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTt3LmluQXJyYXkodGhpcyxlKTwwJiYody5jbGVhbkRhdGEoeWUodGhpcykpLG4mJm4ucmVwbGFjZUNoaWxkKHQsdGhpcykpfSxlKX19KSx3LmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9dyhlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3KGlbYV0pW3RdKG4pLHMuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIFdlPW5ldyBSZWdFeHAoXCJeKFwiK3JlK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLCRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sQmU9bmV3IFJlZ0V4cChvZS5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKGMpe2wuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixjLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsYmUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7dmFyIHQ9ZS5nZXRDb21wdXRlZFN0eWxlKGMpO2k9XCIxJVwiIT09dC50b3AsdT0xMj09PW4odC5tYXJnaW5MZWZ0KSxjLnN0eWxlLnJpZ2h0PVwiNjAlXCIscz0zNj09PW4odC5yaWdodCksbz0zNj09PW4odC53aWR0aCksYy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsYT0zNj09PWMub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixiZS5yZW1vdmVDaGlsZChsKSxjPW51bGx9fWZ1bmN0aW9uIG4oZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIGksbyxhLHMsdSxsPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLnN0eWxlJiYoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsYy5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsaC5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09Yy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx3LmV4dGVuZChoLHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiB0KCksb30scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHN9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGl9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiB0KCksdX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0KCksYX19KSl9KCk7ZnVuY3Rpb24gRmUoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHwkZShlKSkmJihcIlwiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8dy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXcuc3R5bGUoZSx0KSksIWgucGl4ZWxCb3hTdHlsZXMoKSYmV2UudGVzdChhKSYmQmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hK1wiXCI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19dmFyIHplPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxYZT0vXi0tLyxVZT17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0sVmU9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxHZT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sWWU9ci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO2Z1bmN0aW9uIFFlKGUpe2lmKGUgaW4gWWUpcmV0dXJuIGU7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1HZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUdlW25dK3QpaW4gWWUpcmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSl7dmFyIHQ9dy5jc3NQcm9wc1tlXTtyZXR1cm4gdHx8KHQ9dy5jc3NQcm9wc1tlXT1RZShlKXx8ZSksdH1mdW5jdGlvbiBLZShlLHQsbil7dmFyIHI9aWUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8XCJweFwiKTp0fWZ1bmN0aW9uIFplKGUsdCxuLHIsaSxvKXt2YXIgYT1cIndpZHRoXCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj9cImJvcmRlclwiOlwiY29udGVudFwiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKVwibWFyZ2luXCI9PT1uJiYodSs9dy5jc3MoZSxuK29lW2FdLCEwLGkpKSxyPyhcImNvbnRlbnRcIj09PW4mJih1LT13LmNzcyhlLFwicGFkZGluZ1wiK29lW2FdLCEwLGkpKSxcIm1hcmdpblwiIT09biYmKHUtPXcuY3NzKGUsXCJib3JkZXJcIitvZVthXStcIldpZHRoXCIsITAsaSkpKToodSs9dy5jc3MoZSxcInBhZGRpbmdcIitvZVthXSwhMCxpKSxcInBhZGRpbmdcIiE9PW4/dSs9dy5jc3MoZSxcImJvcmRlclwiK29lW2FdK1wiV2lkdGhcIiwhMCxpKTpzKz13LmNzcyhlLFwiYm9yZGVyXCIrb2VbYV0rXCJXaWR0aFwiLCEwLGkpKTtyZXR1cm4hciYmbz49MCYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKSksdX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9JGUoZSksaT1GZShlLHQsciksbz1cImJvcmRlci1ib3hcIj09PXcuY3NzKGUsXCJib3hTaXppbmdcIiwhMSxyKSxhPW87aWYoV2UudGVzdChpKSl7aWYoIW4pcmV0dXJuIGk7aT1cImF1dG9cIn1yZXR1cm4gYT1hJiYoaC5ib3hTaXppbmdSZWxpYWJsZSgpfHxpPT09ZS5zdHlsZVt0XSksKFwiYXV0b1wiPT09aXx8IXBhcnNlRmxvYXQoaSkmJlwiaW5saW5lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiLCExLHIpKSYmKGk9ZVtcIm9mZnNldFwiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKStaZShlLHQsbnx8KG8/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksYSxyLGkpK1wicHhcIn13LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUZlKGUsXCJvcGFjaXR5XCIpO3JldHVyblwiXCI9PT1uP1wiMVwiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1HKHQpLHU9WGUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9SmUocykpLGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdO1wic3RyaW5nXCI9PShvPXR5cGVvZiBuKSYmKGk9aWUuZXhlYyhuKSkmJmlbMV0mJihuPXVlKGUsdCxpKSxvPVwibnVtYmVyXCIpLG51bGwhPW4mJm49PT1uJiYoXCJudW1iZXJcIj09PW8mJihuKz1pJiZpWzNdfHwody5jc3NOdW1iZXJbc10/XCJcIjpcInB4XCIpKSxoLmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PW58fDAhPT10LmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwobFt0XT1cImluaGVyaXRcIiksYSYmXCJzZXRcImluIGEmJnZvaWQgMD09PShuPWEuc2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHkodCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1HKHQpO3JldHVybiBYZS50ZXN0KHQpfHwodD1KZShzKSksKGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSkmJlwiZ2V0XCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1GZShlLHQscikpLFwibm9ybWFsXCI9PT1pJiZ0IGluIFZlJiYoaT1WZVt0XSksXCJcIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298fDA6aSk6aX19KSx3LmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hemUudGVzdCh3LmNzcyhlLFwiZGlzcGxheVwiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/ZXQoZSx0LHIpOnNlKGUsVWUsZnVuY3Rpb24oKXtyZXR1cm4gZXQoZSx0LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz0kZShlKSxhPVwiYm9yZGVyLWJveFwiPT09dy5jc3MoZSxcImJveFNpemluZ1wiLCExLG8pLHM9ciYmWmUoZSx0LHIsYSxvKTtyZXR1cm4gYSYmaC5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tcGFyc2VGbG9hdChvW3RdKS1aZShlLHQsXCJib3JkZXJcIiwhMSxvKS0uNSkpLHMmJihpPWllLmV4ZWMobikpJiZcInB4XCIhPT0oaVszXXx8XCJweFwiKSYmKGUuc3R5bGVbdF09bixuPXcuY3NzKGUsdCkpLEtlKGUsbixzKX19fSksdy5jc3NIb29rcy5tYXJnaW5MZWZ0PV9lKGgucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChGZShlLFwibWFyZ2luTGVmdFwiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1zZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKStcInB4XCJ9KSx3LmVhY2goe21hcmdpbjpcIlwiLHBhZGRpbmc6XCJcIixib3JkZXI6XCJXaWR0aFwifSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLGk9e30sbz1cInN0cmluZ1wiPT10eXBlb2Ygbj9uLnNwbGl0KFwiIFwiKTpbbl07cjw0O3IrKylpW2Urb2Vbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sXCJtYXJnaW5cIiE9PWUmJih3LmNzc0hvb2tzW2UrdF0uc2V0PUtlKX0pLHcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPSRlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXcuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj93LnN0eWxlKGUsdCxuKTp3LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KTtmdW5jdGlvbiB0dChlLHQsbixyLGkpe3JldHVybiBuZXcgdHQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX13LlR3ZWVuPXR0LHR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8dy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3LmNzc051bWJlcltuXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPXR0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTp0dC5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj10dC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9dy5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOnR0LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LHR0LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT10dC5wcm90b3R5cGUsdHQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9dy5jc3MoZS5lbGVtLGUucHJvcCxcIlwiKSkmJlwiYXV0b1wiIT09dD90OjB9LHNldDpmdW5jdGlvbihlKXt3LmZ4LnN0ZXBbZS5wcm9wXT93LmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsPT1lLmVsZW0uc3R5bGVbdy5jc3NQcm9wc1tlLnByb3BdXSYmIXcuY3NzSG9va3NbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzp3LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSx0dC5wcm9wSG9va3Muc2Nyb2xsVG9wPXR0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LHcuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6XCJzd2luZ1wifSx3LmZ4PXR0LnByb3RvdHlwZS5pbml0LHcuZnguc3RlcD17fTt2YXIgbnQscnQsaXQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLG90PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gYXQoKXtydCYmKCExPT09ci5oaWRkZW4mJmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lP2UucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGF0KTplLnNldFRpbWVvdXQoYXQsdy5meC5pbnRlcnZhbCksdy5meC50aWNrKCkpfWZ1bmN0aW9uIHN0KCl7cmV0dXJuIGUuc2V0VGltZW91dChmdW5jdGlvbigpe250PXZvaWQgMH0pLG50PURhdGUubm93KCl9ZnVuY3Rpb24gdXQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVtcIm1hcmdpblwiKyhuPW9lW3JdKV09aVtcInBhZGRpbmdcIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBsdChlLHQsbil7Zm9yKHZhciByLGk9KHB0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KHB0LnR3ZWVuZXJzW1wiKlwiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gY3QoZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj1cIndpZHRoXCJpbiB0fHxcImhlaWdodFwiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx5PUouZ2V0KGUsXCJmeHNob3dcIik7bi5xdWV1ZXx8KG51bGw9PShhPXcuX3F1ZXVlSG9va3MoZSxcImZ4XCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx3LnF1ZXVlKGUsXCJmeFwiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0saXQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHxcInRvZ2dsZVwiPT09aSxpPT09KGc/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PWl8fCF5fHx2b2lkIDA9PT15W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT15JiZ5W3JdfHx3LnN0eWxlKGUscil9aWYoKHU9IXcuaXNFbXB0eU9iamVjdCh0KSl8fCF3LmlzRW1wdHlPYmplY3QoZCkpe2YmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9eSYmeS5kaXNwbGF5KSYmKGw9Si5nZXQoZSxcImRpc3BsYXlcIikpLFwibm9uZVwiPT09KGM9dy5jc3MoZSxcImRpc3BsYXlcIikpJiYobD9jPWw6KGZlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz13LmNzcyhlLFwiZGlzcGxheVwiKSxmZShbZV0pKSksKFwiaW5saW5lXCI9PT1jfHxcImlubGluZS1ibG9ja1wiPT09YyYmbnVsbCE9bCkmJlwibm9uZVwiPT09dy5jc3MoZSxcImZsb2F0XCIpJiYodXx8KHAuZG9uZShmdW5jdGlvbigpe2guZGlzcGxheT1sfSksbnVsbD09bCYmKGM9aC5kaXNwbGF5LGw9XCJub25lXCI9PT1jP1wiXCI6YykpLGguZGlzcGxheT1cImlubGluZS1ibG9ja1wiKSksbi5vdmVyZmxvdyYmKGgub3ZlcmZsb3c9XCJoaWRkZW5cIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMTtmb3IociBpbiBkKXV8fCh5P1wiaGlkZGVuXCJpbiB5JiYoZz15LmhpZGRlbik6eT1KLmFjY2VzcyhlLFwiZnhzaG93XCIse2Rpc3BsYXk6bH0pLG8mJih5LmhpZGRlbj0hZyksZyYmZmUoW2VdLCEwKSxwLmRvbmUoZnVuY3Rpb24oKXtnfHxmZShbZV0pLEoucmVtb3ZlKGUsXCJmeHNob3dcIik7Zm9yKHIgaW4gZCl3LnN0eWxlKGUscixkW3JdKX0pKSx1PWx0KGc/eVtyXTowLHIscCksciBpbiB5fHwoeVtyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfX1mdW5jdGlvbiBmdChlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPUcobiksaT10W3JdLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9dy5jc3NIb29rc1tyXSkmJlwiZXhwYW5kXCJpbiBhKXtvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByLGksbz0wLGE9cHQucHJlZmlsdGVycy5sZW5ndGgscz13LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD1udHx8c3QoKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPTEtKG4vbC5kdXJhdGlvbnx8MCksbz0wLGE9bC50d2VlbnMubGVuZ3RoO288YTtvKyspbC50d2VlbnNbb10ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbbCxyLG5dKSxyPDEmJmE/bjooYXx8cy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOncuZXh0ZW5kKHt9LHQpLG9wdHM6dy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOncuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6bnR8fHN0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO248cjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2wsdF0pKTpzLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKGZ0KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1wdC5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gZyhyLnN0b3ApJiYody5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPXIuc3RvcC5iaW5kKHIpKSxyO3JldHVybiB3Lm1hcChjLGx0LGwpLGcobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3LmZ4LnRpbWVyKHcuZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9dy5BbmltYXRpb249dy5leHRlbmQocHQse3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHVlKG4uZWxlbSxlLGllLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7ZyhlKT8odD1lLGU9W1wiKlwiXSk6ZT1lLm1hdGNoKE0pO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxwdC50d2VlbmVyc1tuXT1wdC50d2VlbmVyc1tuXXx8W10scHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbY3RdLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/cHQucHJlZmlsdGVycy51bnNoaWZ0KGUpOnB0LnByZWZpbHRlcnMucHVzaChlKX19KSx3LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZcIm9iamVjdFwiPT10eXBlb2YgZT93LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGcoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWcodCkmJnR9O3JldHVybiB3LmZ4Lm9mZj9yLmR1cmF0aW9uPTA6XCJudW1iZXJcIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIHcuZnguc3BlZWRzP3IuZHVyYXRpb249dy5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj13LmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT1cImZ4XCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe2coci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJncuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx3LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihhZSkuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13LmlzRW1wdHlPYmplY3QoZSksbz13LnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cHQodGhpcyx3LmV4dGVuZCh7fSxlKSxvKTsoaXx8Si5nZXQodGhpcyxcImZpbmlzaFwiKSkmJnQuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKG49dCx0PWUsZT12b2lkIDApLHQmJiExIT09ZSYmdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZStcInF1ZXVlSG9va3NcIixvPXcudGltZXJzLGE9Si5nZXQodGhpcyk7aWYoaSlhW2ldJiZhW2ldLnN0b3AmJnIoYVtpXSk7ZWxzZSBmb3IoaSBpbiBhKWFbaV0mJmFbaV0uc3RvcCYmb3QudGVzdChpKSYmcihhW2ldKTtmb3IoaT1vLmxlbmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTshdCYmbnx8dy5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPUouZ2V0KHRoaXMpLHI9bltlK1wicXVldWVcIl0saT1uW2UrXCJxdWV1ZUhvb2tzXCJdLG89dy50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHcucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksdy5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXcuZm5bdF07dy5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUodXQodCwhMCksZSxyLGkpfX0pLHcuZWFjaCh7c2xpZGVEb3duOnV0KFwic2hvd1wiKSxzbGlkZVVwOnV0KFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTp1dChcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKGUsdCl7dy5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx3LnRpbWVycz1bXSx3LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj13LnRpbWVycztmb3IobnQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHx3LmZ4LnN0b3AoKSxudD12b2lkIDB9LHcuZngudGltZXI9ZnVuY3Rpb24oZSl7dy50aW1lcnMucHVzaChlKSx3LmZ4LnN0YXJ0KCl9LHcuZnguaW50ZXJ2YWw9MTMsdy5meC5zdGFydD1mdW5jdGlvbigpe3J0fHwocnQ9ITAsYXQoKSl9LHcuZnguc3RvcD1mdW5jdGlvbigpe3J0PW51bGx9LHcuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHcuZm4uZGVsYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD13LmZ4P3cuZnguc3BlZWRzW3RdfHx0OnQsbj1ufHxcImZ4XCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCk7ci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksdD1yLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIikuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTtlLnR5cGU9XCJjaGVja2JveFwiLGguY2hlY2tPbj1cIlwiIT09ZS52YWx1ZSxoLm9wdFNlbGVjdGVkPXQuc2VsZWN0ZWQsKGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnZhbHVlPVwidFwiLGUudHlwZT1cInJhZGlvXCIsaC5yYWRpb1ZhbHVlPVwidFwiPT09ZS52YWx1ZX0oKTt2YXIgZHQsaHQ9dy5leHByLmF0dHJIYW5kbGU7dy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/dy5wcm9wKGUsdCxuKTooMT09PW8mJncuaXNYTUxEb2MoZSl8fChpPXcuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fCh3LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2R0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCB3LnJlbW92ZUF0dHIoZSx0KTppJiZcInNldFwiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rXCJcIiksbik6aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPXcuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZighaC5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT10JiZOKGUsXCJpbnB1dFwiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goTSk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksZHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P3cucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LHcuZWFjaCh3LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1xcdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj1odFt0XXx8dy5maW5kLmF0dHI7aHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPWh0W2FdLGh0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsaHRbYV09byksaX19KTt2YXIgZ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7dy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdfHxlXX0pfX0pLHcuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmdy5pc1hNTERvYyhlKXx8KHQ9dy5wcm9wRml4W3RdfHx0LGk9dy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmXCJzZXRcImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD13LmZpbmQuYXR0cihlLFwidGFiaW5kZXhcIik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Z3QudGVzdChlLm5vZGVOYW1lKXx8eXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn19KSxoLm9wdFNlbGVjdGVkfHwody5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLHcuZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXt3LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuKGUubWF0Y2goTSl8fFtdKS5qb2luKFwiIFwiKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLm1hdGNoKE0pfHxbXTpbXX13LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKGcoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsbXQodGhpcykpKX0pO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxyPTE9PT1uLm5vZGVUeXBlJiZcIiBcIit2dChpKStcIiBcIil7YT0wO3doaWxlKG89dFthKytdKXIuaW5kZXhPZihcIiBcIitvK1wiIFwiKTwwJiYocis9bytcIiBcIik7aSE9PShzPXZ0KHIpKSYmbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYoKHQ9eHQoZSkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPW10KG4pLHI9MT09PW4ubm9kZVR5cGUmJlwiIFwiK3Z0KGkpK1wiIFwiKXthPTA7d2hpbGUobz10W2ErK10pd2hpbGUoci5pbmRleE9mKFwiIFwiK28rXCIgXCIpPi0xKXI9ci5yZXBsYWNlKFwiIFwiK28rXCIgXCIsXCIgXCIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPVwic3RyaW5nXCI9PT1ufHxBcnJheS5pc0FycmF5KGUpO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdCYmcj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTpnKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sbXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKXtpPTAsbz13KHRoaXMpLGE9eHQoZSk7d2hpbGUodD1hW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZSB2b2lkIDAhPT1lJiZcImJvb2xlYW5cIiE9PW58fCgodD1tdCh0aGlzKSkmJkouc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsdCksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIix0fHwhMT09PWU/XCJcIjpKLmdldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiKXx8XCJcIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9XCIgXCIrZStcIiBcIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmKFwiIFwiK3Z0KG10KG4pKStcIiBcIikuaW5kZXhPZih0KT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgYnQ9L1xcci9nO3cuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1nKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShpPXI/ZS5jYWxsKHRoaXMsbix3KHRoaXMpLnZhbCgpKTplKT9pPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGk/aSs9XCJcIjpBcnJheS5pc0FycmF5KGkpJiYoaT13Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6ZStcIlwifSkpLCh0PXcudmFsSG9va3NbdGhpcy50eXBlXXx8dy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJzZXRcImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSxcInZhbHVlXCIpfHwodGhpcy52YWx1ZT1pKSl9KTtpZihpKXJldHVybih0PXcudmFsSG9va3NbaS50eXBlXXx8dy52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJnZXRcImluIHQmJnZvaWQgMCE9PShuPXQuZ2V0KGksXCJ2YWx1ZVwiKSk/bjpcInN0cmluZ1wiPT10eXBlb2Yobj1pLnZhbHVlKT9uLnJlcGxhY2UoYnQsXCJcIik6bnVsbD09bj9cIlwiOm59fX0pLHcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5maW5kLmF0dHIoZSxcInZhbHVlXCIpO3JldHVybiBudWxsIT10P3Q6dnQody50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPVwic2VsZWN0LW9uZVwiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhTihuLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKHQ9dyhuKS52YWwoKSxhKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXcubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKSgocj1pW2FdKS5zZWxlY3RlZD13LmluQXJyYXkody52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksdy5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe3cudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD13LmluQXJyYXkodyhlKS52YWwoKSx0KT4tMX19LGguY2hlY2tPbnx8KHcudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6ZS52YWx1ZX0pfSksaC5mb2N1c2luPVwib25mb2N1c2luXCJpbiBlO3ZhciB3dD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sVHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07dy5leHRlbmQody5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbih0LG4saSxvKXt2YXIgYSxzLHUsbCxjLHAsZCxoLHY9W2l8fHJdLG09Zi5jYWxsKHQsXCJ0eXBlXCIpP3QudHlwZTp0LHg9Zi5jYWxsKHQsXCJuYW1lc3BhY2VcIik/dC5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpOltdO2lmKHM9aD11PWk9aXx8ciwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiF3dC50ZXN0KG0rdy5ldmVudC50cmlnZ2VyZWQpJiYobS5pbmRleE9mKFwiLlwiKT4tMSYmKG09KHg9bS5zcGxpdChcIi5cIikpLnNoaWZ0KCkseC5zb3J0KCkpLGM9bS5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrbSx0PXRbdy5leHBhbmRvXT90Om5ldyB3LkV2ZW50KG0sXCJvYmplY3RcIj09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPW8/MjozLHQubmFtZXNwYWNlPXguam9pbihcIi5cIiksdC5ybmFtZXNwYWNlPXQubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIit4LmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PWkpLG49bnVsbD09bj9bdF06dy5tYWtlQXJyYXkobixbdF0pLGQ9dy5ldmVudC5zcGVjaWFsW21dfHx7fSxvfHwhZC50cmlnZ2VyfHwhMSE9PWQudHJpZ2dlci5hcHBseShpLG4pKSl7aWYoIW8mJiFkLm5vQnViYmxlJiYheShpKSl7Zm9yKGw9ZC5kZWxlZ2F0ZVR5cGV8fG0sd3QudGVzdChsK20pfHwocz1zLnBhcmVudE5vZGUpO3M7cz1zLnBhcmVudE5vZGUpdi5wdXNoKHMpLHU9czt1PT09KGkub3duZXJEb2N1bWVudHx8cikmJnYucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9YT0wO3doaWxlKChzPXZbYSsrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpaD1zLHQudHlwZT1hPjE/bDpkLmJpbmRUeXBlfHxtLChwPShKLmdldChzLFwiZXZlbnRzXCIpfHx7fSlbdC50eXBlXSYmSi5nZXQocyxcImhhbmRsZVwiKSkmJnAuYXBwbHkocyxuKSwocD1jJiZzW2NdKSYmcC5hcHBseSYmWShzKSYmKHQucmVzdWx0PXAuYXBwbHkocyxuKSwhMT09PXQucmVzdWx0JiZ0LnByZXZlbnREZWZhdWx0KCkpO3JldHVybiB0LnR5cGU9bSxvfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxkLl9kZWZhdWx0JiYhMSE9PWQuX2RlZmF1bHQuYXBwbHkodi5wb3AoKSxuKXx8IVkoaSl8fGMmJmcoaVttXSkmJiF5KGkpJiYoKHU9aVtjXSkmJihpW2NdPW51bGwpLHcuZXZlbnQudHJpZ2dlcmVkPW0sdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZoLmFkZEV2ZW50TGlzdGVuZXIobSxUdCksaVttXSgpLHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmaC5yZW1vdmVFdmVudExpc3RlbmVyKG0sVHQpLHcuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCx1JiYoaVtjXT11KSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dy5leHRlbmQobmV3IHcuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwfSk7dy5ldmVudC50cmlnZ2VyKHIsbnVsbCx0KX19KSx3LmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLGguZm9jdXNpbnx8dy5lYWNoKHtmb2N1czpcImZvY3VzaW5cIixibHVyOlwiZm9jdXNvdXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt3LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdy5ldmVudC5maXgoZSkpfTt3LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGk9Si5hY2Nlc3Mocix0KTtpfHxyLmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKSxKLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCktMTtpP0ouYWNjZXNzKHIsdCxpKTooci5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMCksSi5yZW1vdmUocix0KSl9fX0pO3ZhciBDdD1lLmxvY2F0aW9uLEV0PURhdGUubm93KCksa3Q9L1xcPy87dy5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbjtpZighdHx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dHJ5e249KG5ldyBlLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsXCJ0ZXh0L3htbFwiKX1jYXRjaChlKXtuPXZvaWQgMH1yZXR1cm4gbiYmIW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKS5sZW5ndGh8fHcuZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrdCksbn07dmFyIFN0PS9cXFtcXF0kLyxEdD0vXFxyP1xcbi9nLE50PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxBdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24ganQoZSx0LG4scil7dmFyIGk7aWYoQXJyYXkuaXNBcnJheSh0KSl3LmVhY2godCxmdW5jdGlvbih0LGkpe258fFN0LnRlc3QoZSk/cihlLGkpOmp0KGUrXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT1pP3Q6XCJcIikrXCJdXCIsaSxuLHIpfSk7ZWxzZSBpZihufHxcIm9iamVjdFwiIT09eCh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWp0KGUrXCJbXCIraStcIl1cIix0W2ldLG4scil9dy5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWcodCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uP1wiXCI6bil9O2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdy5pc1BsYWluT2JqZWN0KGUpKXcuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbihcIiZcIil9LHcuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXcucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGU/dy5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhdyh0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmQXQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIU50LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXcodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3cubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShEdCxcIlxcclxcblwiKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKER0LFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pO3ZhciBxdD0vJTIwL2csTHQ9LyMuKiQvLEh0PS8oWz8mXSlfPVteJl0qLyxPdD0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLFB0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE10PS9eKD86R0VUfEhFQUQpJC8sUnQ9L15cXC9cXC8vLEl0PXt9LFd0PXt9LCR0PVwiKi9cIi5jb25jYXQoXCIqXCIpLEJ0PXIuY3JlYXRlRWxlbWVudChcImFcIik7QnQuaHJlZj1DdC5ocmVmO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiBmdW5jdGlvbih0LG4pe1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj10LHQ9XCIqXCIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChNKXx8W107aWYoZyhuKSl3aGlsZShyPW9baSsrXSlcIitcIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8XCIqXCIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1XdDtmdW5jdGlvbiBhKHMpe3ZhciB1O3JldHVybiBpW3NdPSEwLHcuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBsfHxvfHxpW2xdP28/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxhKGwpLCExKX0pLHV9cmV0dXJuIGEodC5kYXRhVHlwZXNbMF0pfHwhaVtcIipcIl0mJmEoXCIqXCIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPXcuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJncuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoXCIqXCI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpK1wiIFwiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBVdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKFwiKlwiPT09bylvPXU7ZWxzZSBpZihcIipcIiE9PXUmJnUhPT1vKXtpZighKGE9bFt1K1wiIFwiK29dfHxsW1wiKiBcIitvXSkpZm9yKGkgaW4gbClpZigocz1pLnNwbGl0KFwiIFwiKSlbMV09PT1vJiYoYT1sW3UrXCIgXCIrc1swXV18fGxbXCIqIFwiK3NbMF1dKSl7ITA9PT1hP2E9bFtpXTohMCE9PWxbaV0mJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYmZVtcInRocm93c1wiXSl0PWEodCk7ZWxzZSB0cnl7dD1hKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6YT9lOlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK3UrXCIgdG8gXCIrb319fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOnR9fXcuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpDdC5ocmVmLHR5cGU6XCJHRVRcIixpc0xvY2FsOlB0LnRlc3QoQ3QucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGFjY2VwdHM6e1wiKlwiOiR0LHRleHQ6XCJ0ZXh0L3BsYWluXCIsaHRtbDpcInRleHQvaHRtbFwiLHhtbDpcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixqc29uOlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJ9LGNvbnRlbnRzOnt4bWw6L1xcYnhtbFxcYi8saHRtbDovXFxiaHRtbC8sanNvbjovXFxianNvblxcYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6XCJyZXNwb25zZVhNTFwiLHRleHQ6XCJyZXNwb25zZVRleHRcIixqc29uOlwicmVzcG9uc2VKU09OXCJ9LGNvbnZlcnRlcnM6e1wiKiB0ZXh0XCI6U3RyaW5nLFwidGV4dCBodG1sXCI6ITAsXCJ0ZXh0IGpzb25cIjpKU09OLnBhcnNlLFwidGV4dCB4bWxcIjp3LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD96dCh6dChlLHcuYWpheFNldHRpbmdzKSx0KTp6dCh3LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjpGdChJdCksYWpheFRyYW5zcG9ydDpGdChXdCksYWpheDpmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58fHt9O3ZhciBpLG8sYSxzLHUsbCxjLGYscCxkLGg9dy5hamF4U2V0dXAoe30sbiksZz1oLmNvbnRleHR8fGgseT1oLmNvbnRleHQmJihnLm5vZGVUeXBlfHxnLmpxdWVyeSk/dyhnKTp3LmV2ZW50LHY9dy5EZWZlcnJlZCgpLG09dy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSx4PWguc3RhdHVzQ29kZXx8e30sYj17fSxUPXt9LEM9XCJjYW5jZWxlZFwiLEU9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcyl7cz17fTt3aGlsZSh0PU90LmV4ZWMoYSkpc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9VFtlLnRvTG93ZXJDYXNlKCldPVRbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUUuYWx3YXlzKGVbRS5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8QztyZXR1cm4gaSYmaS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKHYucHJvbWlzZShFKSxoLnVybD0oKHR8fGgudXJsfHxDdC5ocmVmKStcIlwiKS5yZXBsYWNlKFJ0LEN0LnByb3RvY29sK1wiLy9cIiksaC50eXBlPW4ubWV0aG9kfHxuLnR5cGV8fGgubWV0aG9kfHxoLnR5cGUsaC5kYXRhVHlwZXM9KGguZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKE0pfHxbXCJcIl0sbnVsbD09aC5jcm9zc0RvbWFpbil7bD1yLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3RyeXtsLmhyZWY9aC51cmwsbC5ocmVmPWwuaHJlZixoLmNyb3NzRG9tYWluPUJ0LnByb3RvY29sK1wiLy9cIitCdC5ob3N0IT1sLnByb3RvY29sK1wiLy9cIitsLmhvc3R9Y2F0Y2goZSl7aC5jcm9zc0RvbWFpbj0hMH19aWYoaC5kYXRhJiZoLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgaC5kYXRhJiYoaC5kYXRhPXcucGFyYW0oaC5kYXRhLGgudHJhZGl0aW9uYWwpKSxfdChJdCxoLG4sRSksYylyZXR1cm4gRTsoZj13LmV2ZW50JiZoLmdsb2JhbCkmJjA9PXcuYWN0aXZlKysmJncuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSFNdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKEx0LFwiXCIpLGguaGFzQ29udGVudD9oLmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShxdCxcIitcIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRhfHxcInN0cmluZ1wiPT10eXBlb2YgaC5kYXRhKSYmKG8rPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStoLmRhdGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UoSHQsXCIkMVwiKSxkPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStcIl89XCIrRXQrKytkKSxoLnVybD1vK2QpLGguaWZNb2RpZmllZCYmKHcubGFzdE1vZGlmaWVkW29dJiZFLnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLHcubGFzdE1vZGlmaWVkW29dKSx3LmV0YWdbb10mJkUuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIix3LmV0YWdbb10pKSwoaC5kYXRhJiZoLmhhc0NvbnRlbnQmJiExIT09aC5jb250ZW50VHlwZXx8bi5jb250ZW50VHlwZSkmJkUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGguY29udGVudFR5cGUpLEUuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLGguZGF0YVR5cGVzWzBdJiZoLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dP2guYWNjZXB0c1toLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09aC5kYXRhVHlwZXNbMF0/XCIsIFwiKyR0K1wiOyBxPTAuMDFcIjpcIlwiKTpoLmFjY2VwdHNbXCIqXCJdKTtmb3IocCBpbiBoLmhlYWRlcnMpRS5zZXRSZXF1ZXN0SGVhZGVyKHAsaC5oZWFkZXJzW3BdKTtpZihoLmJlZm9yZVNlbmQmJighMT09PWguYmVmb3JlU2VuZC5jYWxsKGcsRSxoKXx8YykpcmV0dXJuIEUuYWJvcnQoKTtpZihDPVwiYWJvcnRcIixtLmFkZChoLmNvbXBsZXRlKSxFLmRvbmUoaC5zdWNjZXNzKSxFLmZhaWwoaC5lcnJvciksaT1fdChXdCxoLG4sRSkpe2lmKEUucmVhZHlTdGF0ZT0xLGYmJnkudHJpZ2dlcihcImFqYXhTZW5kXCIsW0UsaF0pLGMpcmV0dXJuIEU7aC5hc3luYyYmaC50aW1lb3V0PjAmJih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe0UuYWJvcnQoXCJ0aW1lb3V0XCIpfSxoLnRpbWVvdXQpKTt0cnl7Yz0hMSxpLnNlbmQoYixrKX1jYXRjaChlKXtpZihjKXRocm93IGU7aygtMSxlKX19ZWxzZSBrKC0xLFwiTm8gVHJhbnNwb3J0XCIpO2Z1bmN0aW9uIGsodCxuLHIscyl7dmFyIGwscCxkLGIsVCxDPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHxcIlwiLEUucmVhZHlTdGF0ZT10PjA/NDowLGw9dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoYj1YdChoLEUscikpLGI9VXQoaCxiLEUsbCksbD8oaC5pZk1vZGlmaWVkJiYoKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIikpJiYody5sYXN0TW9kaWZpZWRbb109VCksKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIikpJiYody5ldGFnW29dPVQpKSwyMDQ9PT10fHxcIkhFQURcIj09PWgudHlwZT9DPVwibm9jb250ZW50XCI6MzA0PT09dD9DPVwibm90bW9kaWZpZWRcIjooQz1iLnN0YXRlLHA9Yi5kYXRhLGw9IShkPWIuZXJyb3IpKSk6KGQ9QywhdCYmQ3x8KEM9XCJlcnJvclwiLHQ8MCYmKHQ9MCkpKSxFLnN0YXR1cz10LEUuc3RhdHVzVGV4dD0obnx8QykrXCJcIixsP3YucmVzb2x2ZVdpdGgoZyxbcCxDLEVdKTp2LnJlamVjdFdpdGgoZyxbRSxDLGRdKSxFLnN0YXR1c0NvZGUoeCkseD12b2lkIDAsZiYmeS50cmlnZ2VyKGw/XCJhamF4U3VjY2Vzc1wiOlwiYWpheEVycm9yXCIsW0UsaCxsP3A6ZF0pLG0uZmlyZVdpdGgoZyxbRSxDXSksZiYmKHkudHJpZ2dlcihcImFqYXhDb21wbGV0ZVwiLFtFLGhdKSwtLXcuYWN0aXZlfHx3LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfXJldHVybiBFfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5nZXQoZSx0LG4sXCJqc29uXCIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdy5nZXQoZSx2b2lkIDAsdCxcInNjcmlwdFwiKX19KSx3LmVhY2goW1wiZ2V0XCIsXCJwb3N0XCJdLGZ1bmN0aW9uKGUsdCl7d1t0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gZyhuKSYmKGk9aXx8cixyPW4sbj12b2lkIDApLHcuYWpheCh3LmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sdy5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksdy5fZXZhbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gdy5hamF4KHt1cmw6ZSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsXCJ0aHJvd3NcIjohMH0pfSx3LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKGcoZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD13KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gZyhlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dyh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1nKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7dyh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoXCJib2R5XCIpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLHcuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hdy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sdy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LHcuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFZ0PXswOjIwMCwxMjIzOjIwNH0sR3Q9dy5hamF4U2V0dGluZ3MueGhyKCk7aC5jb3JzPSEhR3QmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBHdCxoLmFqYXg9R3Q9ISFHdCx3LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZihoLmNvcnN8fEd0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoaVtcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsXCJhYm9ydFwiPT09ZT9zLmFib3J0KCk6XCJlcnJvclwiPT09ZT9cIm51bWJlclwiIT10eXBlb2Ygcy5zdGF0dXM/bygwLFwiZXJyb3JcIik6byhzLnN0YXR1cyxzLnN0YXR1c1RleHQpOm8oVnRbcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsXCJ0ZXh0XCIhPT0ocy5yZXNwb25zZVR5cGV8fFwidGV4dFwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHMucmVzcG9uc2VUZXh0P3tiaW5hcnk6cy5yZXNwb25zZX06e3RleHQ6cy5yZXNwb25zZVRleHR9LHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPW4oKSxyPXMub25lcnJvcj1zLm9udGltZW91dD1uKFwiZXJyb3JcIiksdm9pZCAwIT09cy5vbmFib3J0P3Mub25hYm9ydD1yOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXMucmVhZHlTdGF0ZSYmZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcigpfSl9LG49bihcImFib3J0XCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLHcuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6XCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwifSxjb250ZW50czp7c2NyaXB0Oi9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL30sY29udmVydGVyczp7XCJ0ZXh0IHNjcmlwdFwiOmZ1bmN0aW9uKGUpe3JldHVybiB3Lmdsb2JhbEV2YWwoZSksZX19fSksdy5hamF4UHJlZmlsdGVyKFwic2NyaXB0XCIsZnVuY3Rpb24oZSl7dm9pZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9XCJHRVRcIil9KSx3LmFqYXhUcmFuc3BvcnQoXCJzY3JpcHRcIixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKGksbyl7dD13KFwiPHNjcmlwdD5cIikucHJvcCh7Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oXCJsb2FkIGVycm9yXCIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZvKFwiZXJyb3JcIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxyLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIFl0PVtdLFF0PS8oPSlcXD8oPz0mfCQpfFxcP1xcPy87dy5hamF4U2V0dXAoe2pzb25wOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WXQucG9wKCl8fHcuZXhwYW5kbytcIl9cIitFdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksdy5hamF4UHJlZmlsdGVyKFwianNvbiBqc29ucFwiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLGEscz0hMSE9PXQuanNvbnAmJihRdC50ZXN0KHQudXJsKT9cInVybFwiOlwic3RyaW5nXCI9PXR5cGVvZiB0LmRhdGEmJjA9PT0odC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmUXQudGVzdCh0LmRhdGEpJiZcImRhdGFcIik7aWYoc3x8XCJqc29ucFwiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9dC5qc29ucENhbGxiYWNrPWcodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShRdCxcIiQxXCIraSk6ITEhPT10Lmpzb25wJiYodC51cmwrPShrdC50ZXN0KHQudXJsKT9cIiZcIjpcIj9cIikrdC5qc29ucCtcIj1cIitpKSx0LmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXT1mdW5jdGlvbigpe3JldHVybiBhfHx3LmVycm9yKGkrXCIgd2FzIG5vdCBjYWxsZWRcIiksYVswXX0sdC5kYXRhVHlwZXNbMF09XCJqc29uXCIsbz1lW2ldLGVbaV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1vP3coZSkucmVtb3ZlUHJvcChpKTplW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssWXQucHVzaChpKSksYSYmZyhvKSYmbyhhWzBdKSxhPW89dm9pZCAwfSksXCJzY3JpcHRcIn0pLGguY3JlYXRlSFRNTERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9ci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIikuYm9keTtyZXR1cm4gZS5pbm5lckhUTUw9XCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiLDI9PT1lLmNoaWxkTm9kZXMubGVuZ3RofSgpLHcucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm5bXTtcImJvb2xlYW5cIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIGksbyxhO3JldHVybiB0fHwoaC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChpPSh0PXIuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpKS5jcmVhdGVFbGVtZW50KFwiYmFzZVwiKSkuaHJlZj1yLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKGkpKTp0PXIpLG89QS5leGVjKGUpLGE9IW4mJltdLG8/W3QuY3JlYXRlRWxlbWVudChvWzFdKV06KG89eGUoW2VdLHQsYSksYSYmYS5sZW5ndGgmJncoYSkucmVtb3ZlKCksdy5tZXJnZShbXSxvLmNoaWxkTm9kZXMpKX0sdy5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT10aGlzLHM9ZS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gcz4tMSYmKHI9dnQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLGcodCk/KG49dCx0PXZvaWQgMCk6dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPVwiUE9TVFwiKSxhLmxlbmd0aD4wJiZ3LmFqYXgoe3VybDplLHR5cGU6aXx8XCJHRVRcIixkYXRhVHlwZTpcImh0bWxcIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP3coXCI8ZGl2PlwiKS5hcHBlbmQody5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSx3LmVhY2goW1wiYWpheFN0YXJ0XCIsXCJhamF4U3RvcFwiLFwiYWpheENvbXBsZXRlXCIsXCJhamF4RXJyb3JcIixcImFqYXhTdWNjZXNzXCIsXCJhamF4U2VuZFwiXSxmdW5jdGlvbihlLHQpe3cuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx3LmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gdy5ncmVwKHcudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSx3Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPXcuY3NzKGUsXCJwb3NpdGlvblwiKSxmPXcoZSkscD17fTtcInN0YXRpY1wiPT09YyYmKGUuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxzPWYub2Zmc2V0KCksbz13LmNzcyhlLFwidG9wXCIpLHU9dy5jc3MoZSxcImxlZnRcIiksKGw9KFwiYWJzb2x1dGVcIj09PWN8fFwiZml4ZWRcIj09PWMpJiYobyt1KS5pbmRleE9mKFwiYXV0b1wiKT4tMSk/KGE9KHI9Zi5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxnKHQpJiYodD10LmNhbGwoZSxuLHcuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihwLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihwLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSxcInVzaW5nXCJpbiB0P3QudXNpbmcuY2FsbChlLHApOmYuY3NzKHApfX0sdy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3cub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLHI9dGhpc1swXTtpZihyKXJldHVybiByLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyh0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDp0LnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6dC5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoXCJmaXhlZFwiPT09dy5jc3MocixcInBvc2l0aW9uXCIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT13KGUpLm9mZnNldCgpKS50b3ArPXcuY3NzKGUsXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxpLmxlZnQrPXcuY3NzKGUsXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3Atdy5jc3MocixcIm1hcmdpblRvcFwiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtdy5jc3MocixcIm1hcmdpbkxlZnRcIiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxiZX0pfX0pLHcuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1cInBhZ2VZT2Zmc2V0XCI9PT10O3cuZm5bZV09ZnVuY3Rpb24ocil7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksdy5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09X2UoaC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsbil7aWYobilyZXR1cm4gbj1GZShlLHQpLFdlLnRlc3Qobik/dyhlKS5wb3NpdGlvbigpW3RdK1wicHhcIjpufSl9KSx3LmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2UsY29udGVudDp0LFwiXCI6XCJvdXRlclwiK2V9LGZ1bmN0aW9uKG4scil7dy5mbltyXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihufHxcImJvb2xlYW5cIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIHoodGhpcyxmdW5jdGlvbih0LG4saSl7dmFyIG87cmV0dXJuIHkodCk/MD09PXIuaW5kZXhPZihcIm91dGVyXCIpP3RbXCJpbm5lclwiK2VdOnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W1wiY2xpZW50XCIrZV06OT09PXQubm9kZVR5cGU/KG89dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5W1wic2Nyb2xsXCIrZV0sb1tcInNjcm9sbFwiK2VdLHQuYm9keVtcIm9mZnNldFwiK2VdLG9bXCJvZmZzZXRcIitlXSxvW1wiY2xpZW50XCIrZV0pKTp2b2lkIDA9PT1pP3cuY3NzKHQsbixzKTp3LnN0eWxlKHQsbixpLHMpfSx0LGE/aTp2b2lkIDAsYSl9fSl9KSx3LmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksdy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHcuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLFwiKipcIik6dGhpcy5vZmYodCxlfHxcIioqXCIsbil9fSksdy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxnKGUpKXJldHVybiByPW8uY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHcuZ3VpZCsrLGl9LHcuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/dy5yZWFkeVdhaXQrKzp3LnJlYWR5KCEwKX0sdy5pc0FycmF5PUFycmF5LmlzQXJyYXksdy5wYXJzZUpTT049SlNPTi5wYXJzZSx3Lm5vZGVOYW1lPU4sdy5pc0Z1bmN0aW9uPWcsdy5pc1dpbmRvdz15LHcuY2FtZWxDYXNlPUcsdy50eXBlPXgsdy5ub3c9RGF0ZS5ub3csdy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dy50eXBlKGUpO3JldHVybihcIm51bWJlclwiPT09dHx8XCJzdHJpbmdcIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiB3fSk7dmFyIEp0PWUualF1ZXJ5LEt0PWUuJDtyZXR1cm4gdy5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT13JiYoZS4kPUt0KSx0JiZlLmpRdWVyeT09PXcmJihlLmpRdWVyeT1KdCksd30sdHx8KGUualF1ZXJ5PWUuJD13KSx3fSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n"); /***/ }), -/* 50 */ -/***/ (function(module, exports) { - -eval("/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(\"#\"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.7\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target).closest(\".btn\");b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(c.preventDefault(),d.is(\"input,button\")?d.trigger(\"focus\"):d.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.7\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger(\"focus\")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(\"click.bs.dropdown.data-api\",c).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(a){a.stopPropagation()}).on(\"click.bs.dropdown.data-api\",f,g.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",f,g.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",g.prototype.keydown)}(jQuery),+function(a){\"use strict\";function b(b,d){return this.each(function(){var e=a(this),f=e.data(\"bs.modal\"),g=a.extend({},c.DEFAULTS,e.data(),\"object\"==typeof b&&b);f||e.data(\"bs.modal\",f=new c(this,g)),\"string\"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event(\"show.bs.modal\",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){d.$element.one(\"mouseup.dismiss.bs.modal\",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass(\"fade\");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass(\"in\"),d.enforceFocus();var f=a.Event(\"shown.bs.modal\",{relatedTarget:b});e?d.$dialog.one(\"bsTransitionEnd\",function(){d.$element.trigger(\"focus\").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger(\"focus\").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(\"hide.bs.modal\"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger(\"focus\")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},c.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass(\"modal-open\"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger(\"hidden.bs.modal\")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+e).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!b)return;f?this.$backdrop.one(\"bsTransitionEnd\",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement(\"div\");a.className=\"modal-scrollbar-measure\",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(c){var d=a(this),e=d.attr(\"href\"),f=a(d.attr(\"data-target\")||e&&e.replace(/.*(?=#[^\\s]+$)/,\"\")),g=f.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is(\"a\")&&c.preventDefault(),f.one(\"show.bs.modal\",function(a){a.isDefaultPrevented()||f.one(\"hidden.bs.modal\",function(){d.is(\":visible\")&&d.trigger(\"focus\")})}),b.call(f,g,this)})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tooltip\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.tooltip\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",a,b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-m<o.top?\"bottom\":\"right\"==h&&k.right+l>o.width?\"left\":\"left\"==h&&k.left-l<o.left?\"right\":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger(\"shown.bs.\"+e.type),e.hoverState=null,\"out\"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css(\"margin-top\"),10),h=parseInt(d.css(\"margin-left\"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass(\"in\");var i=d[0].offsetWidth,j=d[0].offsetHeight;\"top\"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?\"offsetWidth\":\"offsetHeight\";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?\"left\":\"top\",50*(1-a/b)+\"%\").css(c?\"top\":\"left\",\"\")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](b),a.removeClass(\"fade in top bottom left right\")},c.prototype.hide=function(b){function d(){\"in\"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event(\"hide.bs.\"+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass(\"in\"),a.support.transition&&f.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(\"title\")||\"string\"!=typeof a.attr(\"data-original-title\"))&&a.attr(\"data-original-title\",a.attr(\"title\")||\"\").attr(\"title\",\"\")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d=\"BODY\"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return\"bottom\"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:\"top\"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:\"left\"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.7\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.7\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){\nthis.activeTarget=b,this.clear();var c=this.selector+'[data-target=\"'+b+'\"],'+this.selector+'[href=\"'+b+'\"]',d=a(c).parents(\"li\").addClass(\"active\");d.parent(\".dropdown-menu\").length&&(d=d.closest(\"li.dropdown\").addClass(\"active\")),d.trigger(\"activate.bs.scrollspy\")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on(\"load.bs.scrollspy.data-api\",function(){a('[data-spy=\"scroll\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tab\");e||d.data(\"bs.tab\",e=new c(this)),\"string\"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest(\"ul:not(.dropdown-menu)\"),d=b.data(\"target\");if(d||(d=b.attr(\"href\"),d=d&&d.replace(/.*(?=#[^\\s]*$)/,\"\")),!b.parent(\"li\").hasClass(\"active\")){var e=c.find(\".active:last a\"),f=a.Event(\"hide.bs.tab\",{relatedTarget:b[0]}),g=a.Event(\"show.bs.tab\",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest(\"li\"),c),this.activate(h,h.parent(),function(){e.trigger({type:\"hidden.bs.tab\",relatedTarget:b[0]}),b.trigger({type:\"shown.bs.tab\",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.7\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return e<c&&\"top\";if(\"bottom\"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&\"bottom\":!(e+g<=a-d)&&\"bottom\";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?\"top\":null!=d&&i+j>=a-d&&\"bottom\"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanM/OGZhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLGFBQWEsYUFBYSwyQ0FBMkMsZ0tBQWdLLHNCQUFzQixhQUFhLGFBQWEsNkNBQTZDLDZJQUE2SSw2Q0FBNkMsVUFBVSxTQUFTLHNDQUFzQyxnQkFBZ0IseUNBQXlDLEtBQUssRUFBRSxpQkFBaUIsMkNBQTJDLDRCQUE0QixjQUFjLGlGQUFpRiwyRkFBMkYsMEVBQTBFLEVBQUUsRUFBRSxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0QixtQ0FBbUMscUVBQXFFLEVBQUUsNkNBQTZDLCtCQUErQiwwRUFBMEUsYUFBYSwrQ0FBK0Msc0NBQXNDLDBEQUEwRCxzQkFBc0Isa1FBQWtRLGlCQUFpQix1RUFBdUUseUJBQXlCLCtEQUErRCxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0Qiw0REFBNEQsK0VBQStFLEVBQUUsb0JBQW9CLDJDQUEyQyxrQ0FBa0MsOEJBQThCLHlCQUF5QixrQ0FBa0MseUVBQXlFLHNGQUFzRiw0TEFBNEwsVUFBVSwrQkFBK0IsNERBQTRELGFBQWEsa0NBQWtDLHNVQUFzVSwrR0FBK0csa0JBQWtCLDBFQUEwRSwwQkFBMEIsaUZBQWlGLGtDQUFrQywrTUFBK00sOEZBQThGLDZFQUE2RSxFQUFFLHNCQUFzQixhQUFhLGNBQWMsNEJBQTRCLG1EQUFtRCwyRUFBMkUsMkdBQTJHLEVBQUUsb0JBQW9CLHVkQUF1ZCx3REFBd0QsK0NBQStDLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLG9CQUFvQixNQUFNLG9CQUFvQixNQUFNLGVBQWUsb0JBQW9CLCtCQUErQiw0TEFBNEwsc0NBQXNDLG1GQUFtRiwrQ0FBK0Msa0ZBQWtGLGtDQUFrQyxnREFBZ0QseUJBQXlCLDRCQUE0QixnRkFB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QUFjLDRCQUE0QiwyREFBMkQsaUVBQWlFLEVBQUUsb0JBQW9CLHdCQUF3QixpU0FBaVMscUVBQXFFLHVCQUF1Qix3Q0FBd0MsZ0ZBQWdGLGtEQUFrRCxnR0FBZ0csNkNBQTZDLHVEQUF1RCx3Q0FBd0MsOENBQThDLHFEQUFxRCx3REFBd0QsaUNBQWlDLG1EQUFtRCwrQ0FBK0Msc0NBQXNDLGlDQUFpQyxpSUFBaUksNkhBQTZILDZCQUE2QixvQkFBb0IsOENBQThDLG9EQUFvRCwwREFBMEQsbUtBQW1LLG1DQUFtQyxVQUFVLElBQUksaUJBQWlCLHVFQUF1RSx5QkFBeUIsZ0NBQWdDLHdDQUF3Qyx5QkFBeUIscUJBQXFCLGtIQUFrSCxFQUFFLEVBQUUiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEJvb3RzdHJhcCB2My4zLjcgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNiBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeVwiKTsrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9YS5mbi5qcXVlcnkuc3BsaXQoXCIgXCIpWzBdLnNwbGl0KFwiLlwiKTtpZihiWzBdPDImJmJbMV08OXx8MT09YlswXSYmOT09YlsxXSYmYlsyXTwxfHxiWzBdPjMpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gNFwiKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib290c3RyYXBcIiksYj17V2Via2l0VHJhbnNpdGlvbjpcIndlYmtpdFRyYW5zaXRpb25FbmRcIixNb3pUcmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwiLE9UcmFuc2l0aW9uOlwib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmRcIix0cmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwifTtmb3IodmFyIGMgaW4gYilpZih2b2lkIDAhPT1hLnN0eWxlW2NdKXJldHVybntlbmQ6YltjXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihiKXt2YXIgYz0hMSxkPXRoaXM7YSh0aGlzKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2M9ITB9KTt2YXIgZT1mdW5jdGlvbigpe2N8fGEoZCkudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfTtyZXR1cm4gc2V0VGltZW91dChlLGIpLHRoaXN9LGEoZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbj1iKCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oYil7aWYoYShiLnRhcmdldCkuaXModGhpcykpcmV0dXJuIGIuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5hbGVydFwiKTtlfHxjLmRhdGEoXCJicy5hbGVydFwiLGU9bmV3IGQodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdLmNhbGwoYyl9KX12YXIgYz0nW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oXCJjbGlja1wiLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj1cIjMuMy43XCIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBjKCl7Zy5kZXRhY2goKS50cmlnZ2VyKFwiY2xvc2VkLmJzLmFsZXJ0XCIpLnJlbW92ZSgpfXZhciBlPWEodGhpcyksZj1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtmfHwoZj1lLmF0dHIoXCJocmVmXCIpLGY9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZz1hKFwiI1wiPT09Zj9bXTpmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdChcIi5hbGVydFwiKSksZy50cmlnZ2VyKGI9YS5FdmVudChcImNsb3NlLmJzLmFsZXJ0XCIpKSxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZy5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKFwiZmFkZVwiKT9nLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6YygpKX07dmFyIGU9YS5mbi5hbGVydDthLmZuLmFsZXJ0PWIsYS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1kLGEuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFsZXJ0PWUsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5hbGVydC5kYXRhLWFwaVwiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuYnV0dG9uXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYnV0dG9uXCIsZT1uZXcgYyh0aGlzLGYpKSxcInRvZ2dsZVwiPT1iP2UudG9nZ2xlKCk6YiYmZS5zZXRTdGF0ZShiKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuaXNMb2FkaW5nPSExfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OlwibG9hZGluZy4uLlwifSxjLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihiKXt2YXIgYz1cImRpc2FibGVkXCIsZD10aGlzLiRlbGVtZW50LGU9ZC5pcyhcImlucHV0XCIpP1widmFsXCI6XCJodG1sXCIsZj1kLmRhdGEoKTtiKz1cIlRleHRcIixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKFwicmVzZXRUZXh0XCIsZFtlXSgpKSxzZXRUaW1lb3V0KGEucHJveHkoZnVuY3Rpb24oKXtkW2VdKG51bGw9PWZbYl0/dGhpcy5vcHRpb25zW2JdOmZbYl0pLFwibG9hZGluZ1RleHRcIj09Yj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcyhjKS5hdHRyKGMsYykucHJvcChjLCEwKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykucHJvcChjLCExKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWMucHJvcChcInR5cGVcIik/KGMucHJvcChcImNoZWNrZWRcIikmJihhPSExKSxiLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJhY3RpdmVcIikpOlwiY2hlY2tib3hcIj09Yy5wcm9wKFwidHlwZVwiKSYmKGMucHJvcChcImNoZWNrZWRcIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpJiYoYT0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSksYy5wcm9wKFwiY2hlY2tlZFwiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLGEmJmMudHJpZ2dlcihcImNoYW5nZVwiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtcHJlc3NlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpO2IuY2FsbChkLFwidG9nZ2xlXCIpLGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGQuaXMoXCJpbnB1dCxidXR0b25cIik/ZC50cmlnZ2VyKFwiZm9jdXNcIik6ZC5maW5kKFwiaW5wdXQ6dmlzaWJsZSxidXR0b246dmlzaWJsZVwiKS5maXJzdCgpLnRyaWdnZXIoXCJmb2N1c1wiKSl9KS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKS50b2dnbGVDbGFzcyhcImZvY3VzXCIsL15mb2N1cyhpbik/JC8udGVzdChiLnR5cGUpKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuY2Fyb3VzZWxcIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxnPVwic3RyaW5nXCI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoXCJicy5jYXJvdXNlbFwiLGU9bmV3IGModGhpcyxmKSksXCJudW1iZXJcIj09dHlwZW9mIGI/ZS50byhiKTpnP2VbZ10oKTpmLmludGVydmFsJiZlLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLFwiaG92ZXJcIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKFwibW91c2VlbnRlci5icy5jYXJvdXNlbFwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oXCIuaXRlbVwiKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRJdGVtSW5kZXgoYiksZD1cInByZXZcIj09YSYmMD09PWN8fFwibmV4dFwiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9XCJwcmV2XCI9PWE/LTE6MSxmPShjK2UpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZil9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtpZighKGE+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fGE8MCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2IudG8oYSl9KTpjPT1hP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYT5jP1wibmV4dFwiOlwicHJldlwiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zbGlkaW5nKXJldHVybiB0aGlzLnNsaWRlKFwibmV4dFwiKX0sYy5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJwcmV2XCIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxmPWR8fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihiLGUpLGc9dGhpcy5pbnRlcnZhbCxoPVwibmV4dFwiPT1iP1wibGVmdFwiOlwicmlnaHRcIixpPXRoaXM7aWYoZi5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBqPWZbMF0saz1hLkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBsPWEodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KGYpXSk7bCYmbC5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgbT1hLkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmh9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8oZi5hZGRDbGFzcyhiKSxmWzBdLm9mZnNldFdpZHRoLGUuYWRkQ2xhc3MoaCksZi5hZGRDbGFzcyhoKSxlLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksZS5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixoXS5qb2luKFwiIFwiKSksaS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLiRlbGVtZW50LnRyaWdnZXIobSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KGUucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksZi5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChkPWUuYXR0cihcImhyZWZcIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpO2lmKGYuaGFzQ2xhc3MoXCJjYXJvdXNlbFwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKFwiZGF0YS1zbGlkZS10b1wiKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8oaCksYy5wcmV2ZW50RGVmYXVsdCgpfX07YShkb2N1bWVudCkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGVdXCIsZSkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGUtdG9dXCIsZSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jYWxsKGMsYy5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHwoYz1iLmF0dHIoXCJocmVmXCIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIGMoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmL3Nob3d8aGlkZS8udGVzdChiKSYmKGYudG9nZ2xlPSExKSxlfHxjLmRhdGEoXCJicy5jb2xsYXBzZVwiLGU9bmV3IGQodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnK2IuaWQrJ1wiXSxbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXRhcmdldD1cIiMnK2IuaWQrJ1wiXScpLHRoaXMudHJhbnNpdGlvbmluZz1udWxsLHRoaXMub3B0aW9ucy5wYXJlbnQ/dGhpcy4kcGFyZW50PXRoaXMuZ2V0UGFyZW50KCk6dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy4kZWxlbWVudCx0aGlzLiR0cmlnZ2VyKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTtkLlZFUlNJT049XCIzLjMuN1wiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0zNTAsZC5ERUZBVUxUUz17dG9nZ2xlOiEwfSxkLnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwid2lkdGhcIik7cmV0dXJuIGE/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJ9LGQucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiYhdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKFwiLnBhbmVsXCIpLmNoaWxkcmVuKFwiLmluLCAuY29sbGFwc2luZ1wiKTtpZighKGUmJmUubGVuZ3RoJiYoYj1lLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpLCFmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtlJiZlLmxlbmd0aCYmKGMuY2FsbChlLFwiaGlkZVwiKSxifHxlLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbZ10oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgaD1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbZ10oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGddLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGI9YS5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLCFiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgYz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbY10odGhpcy4kZWxlbWVudFtjXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24/dm9pZCB0aGlzLiRlbGVtZW50W2NdKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoZSx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTplLmNhbGwodGhpcyl9fX0sZC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIik/XCJoaWRlXCI6XCJzaG93XCJdKCl9LGQucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyt0aGlzLm9wdGlvbnMucGFyZW50KydcIl0nKS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYyxkKXt2YXIgZT1hKGQpO3RoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGIoZSksZSl9LHRoaXMpKS5lbmQoKX0sZC5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5oYXNDbGFzcyhcImluXCIpO2EuYXR0cihcImFyaWEtZXhwYW5kZWRcIixjKSxiLnRvZ2dsZUNsYXNzKFwiY29sbGFwc2VkXCIsIWMpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsYyl9O3ZhciBlPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1jLGEuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9ZCxhLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jb2xsYXBzZT1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7ZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fGQucHJldmVudERlZmF1bHQoKTt2YXIgZj1iKGUpLGc9Zi5kYXRhKFwiYnMuY29sbGFwc2VcIiksaD1nP1widG9nZ2xlXCI6ZS5kYXRhKCk7Yy5jYWxsKGYsaCl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYz1iLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtjfHwoYz1iLmF0dHIoXCJocmVmXCIpLGM9YyYmLyNbQS1aYS16XS8udGVzdChjKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZD1jJiZhKGMpO3JldHVybiBkJiZkLmxlbmd0aD9kOmIucGFyZW50KCl9ZnVuY3Rpb24gYyhjKXtjJiYzPT09Yy53aGljaHx8KGEoZSkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWIoZCksZj17cmVsYXRlZFRhcmdldDp0aGlzfTtlLmhhc0NsYXNzKFwib3BlblwiKSYmKGMmJlwiY2xpY2tcIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudChcImhpZGUuYnMuZHJvcGRvd25cIixmKSksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGQuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLGUucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIoYS5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLGYpKSkpKX0pKX1mdW5jdGlvbiBkKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKFwiYnMuZHJvcGRvd25cIik7ZHx8Yy5kYXRhKFwiYnMuZHJvcGRvd25cIixkPW5ldyBnKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZFtiXS5jYWxsKGMpfSl9dmFyIGU9XCIuZHJvcGRvd24tYmFja2Ryb3BcIixmPSdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScsZz1mdW5jdGlvbihiKXthKGIpLm9uKFwiY2xpY2suYnMuZHJvcGRvd25cIix0aGlzLnRvZ2dsZSl9O2cuVkVSU0lPTj1cIjMuMy43XCIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIGY9YihlKSxnPWYuaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKGMoKSwhZyl7XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdChcIi5uYXZiYXItbmF2XCIpLmxlbmd0aCYmYShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcImRyb3Bkb3duLWJhY2tkcm9wXCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKFwiY2xpY2tcIixjKTt2YXIgaD17cmVsYXRlZFRhcmdldDp0aGlzfTtpZihmLnRyaWdnZXIoZD1hLkV2ZW50KFwic2hvdy5icy5kcm9wZG93blwiLGgpKSxkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtlLnRyaWdnZXIoXCJmb2N1c1wiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxmLnRvZ2dsZUNsYXNzKFwib3BlblwiKS50cmlnZ2VyKGEuRXZlbnQoXCJzaG93bi5icy5kcm9wZG93blwiLGgpKX1yZXR1cm4hMX19LGcucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oYyl7aWYoLygzOHw0MHwyN3wzMikvLnRlc3QoYy53aGljaCkmJiEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpKXt2YXIgZD1hKHRoaXMpO2lmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCFkLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBlPWIoZCksZz1lLmhhc0NsYXNzKFwib3BlblwiKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoXCJmb2N1c1wiKSxkLnRyaWdnZXIoXCJjbGlja1wiKTt2YXIgaD1cIiBsaTpub3QoLmRpc2FibGVkKTp2aXNpYmxlIGFcIixpPWUuZmluZChcIi5kcm9wZG93bi1tZW51XCIraCk7aWYoaS5sZW5ndGgpe3ZhciBqPWkuaW5kZXgoYy50YXJnZXQpOzM4PT1jLndoaWNoJiZqPjAmJmotLSw0MD09Yy53aGljaCYmajxpLmxlbmd0aC0xJiZqKyssfmp8fChqPTApLGkuZXEoaikudHJpZ2dlcihcImZvY3VzXCIpfX19fTt2YXIgaD1hLmZuLmRyb3Bkb3duO2EuZm4uZHJvcGRvd249ZCxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWcsYS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZHJvcGRvd249aCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsYykub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixmLGcucHJvdG90eXBlLmtleWRvd24pLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpLGY9ZS5kYXRhKFwiYnMubW9kYWxcIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoXCJicy5tb2RhbFwiLGY9bmV3IGModGhpcyxnKSksXCJzdHJpbmdcIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRkaWFsb2c9dGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWRpYWxvZ1wiKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtY29udGVudFwiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihcImxvYWRlZC5icy5tb2RhbFwiKX0sdGhpcykpfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoXCJzaG93LmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsYS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMuJGRpYWxvZy5vbihcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50Lm9uZShcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKTtkLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8ZC4kZWxlbWVudC5hcHBlbmRUbyhkLiRib2R5KSxkLiRlbGVtZW50LnNob3coKS5zY3JvbGxUb3AoMCksZC5hZGp1c3REaWFsb2coKSxlJiZkLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGQuJGVsZW1lbnQuYWRkQ2xhc3MoXCJpblwiKSxkLmVuZm9yY2VGb2N1cygpO3ZhciBmPWEuRXZlbnQoXCJzaG93bi5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmQuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudChcImhpZGUuYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLHRoaXMuaXNTaG93biYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImluXCIpLm9mZihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIikub2ZmKFwibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsXCIpLHRoaXMuJGRpYWxvZy5vZmYoXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnRoaXMuaGlkZU1vZGFsKCkpfSxjLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXthKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7ZG9jdW1lbnQ9PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0sdGhpcykpfSxjLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpfSxjLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/YSh3aW5kb3cpLm9uKFwicmVzaXplLmJzLm1vZGFsXCIsYS5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSx0aGlzKSk6YSh3aW5kb3cpLm9mZihcInJlc2l6ZS5icy5tb2RhbFwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcyhcIm1vZGFsLW9wZW5cIiksYS5yZXNldEFkanVzdG1lbnRzKCksYS5yZXNldFNjcm9sbGJhcigpLGEuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pfSxjLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxjLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/XCJmYWRlXCI6XCJcIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGY9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmU7aWYodGhpcy4kYmFja2Ryb3A9YShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcIm1vZGFsLWJhY2tkcm9wIFwiK2UpLmFwcGVuZFRvKHRoaXMuJGJvZHkpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrP3ZvaWQodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExKTp2b2lkKGEudGFyZ2V0PT09YS5jdXJyZW50VGFyZ2V0JiYoXCJzdGF0aWNcIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoXCJpblwiKSwhYilyZXR1cm47Zj90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixiKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmIoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcyhcImluXCIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGJhY2tkcm9wLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGcpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6ZygpfWVsc2UgYiYmYigpfSxjLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxjLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmYT90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6XCJcIn0pfSxjLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OlwiXCIscGFkZGluZ1JpZ2h0OlwiXCJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fFwiXCIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2EuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YSh0aGlzKSxlPWQuYXR0cihcImhyZWZcIiksZj1hKGQuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGc9Zi5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoXCJhXCIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24oYSl7YS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe2QuaXMoXCI6dmlzaWJsZVwiKSYmZC50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGIuY2FsbChmLGcsdGhpcyl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRvb2x0aXBcIiksZj1cIm9iamVjdFwiPT10eXBlb2YgYiYmYjshZSYmL2Rlc3Ryb3l8aGlkZS8udGVzdChiKXx8KGV8fGQuZGF0YShcImJzLnRvb2x0aXBcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLGEsYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZihcImNsaWNrXCI9PWcpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1nKXt2YXIgaD1cImhvdmVyXCI9PWc/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsaT1cImhvdmVyXCI9PWc/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24oaCtcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihpK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5ERUZBVUxUU30sYy5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihiKXtyZXR1cm4gYj1hLmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksYiksYi5kZWxheSYmXCJudW1iZXJcIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVtcImZvY3VzaW5cIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSEwKSxjLnRpcCgpLmhhc0NsYXNzKFwiaW5cIil8fFwiaW5cIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPVwiaW5cIik6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cImluXCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJpblwiPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtpZihjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlW1wiZm9jdXNvdXRcIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSExKSwhYy5pc0luU3RhdGVUcnVlKCkpcmV0dXJuIGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cIm91dFwiLGMub3B0aW9ucy5kZWxheSYmYy5vcHRpb25zLmRlbGF5LmhpZGU/dm9pZChjLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihiKTt2YXIgZD1hLmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy4kZWxlbWVudFswXSk7aWYoYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWQpcmV0dXJuO3ZhciBlPXRoaXMsZj10aGlzLnRpcCgpLGc9dGhpcy5nZXRVSUQodGhpcy50eXBlKTt0aGlzLnNldENvbnRlbnQoKSxmLmF0dHIoXCJpZFwiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9cXHM/YXV0bz9cXHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksXCJcIil8fFwidG9wXCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheTpcImJsb2NrXCJ9KS5hZGRDbGFzcyhoKS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLHRoaXMpLHRoaXMub3B0aW9ucy5jb250YWluZXI/Zi5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTpmLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImluc2VydGVkLmJzLlwiK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPVwiYm90dG9tXCI9PWgmJmsuYm90dG9tK20+by5ib3R0b20/XCJ0b3BcIjpcInRvcFwiPT1oJiZrLnRvcC1tPG8udG9wP1wiYm90dG9tXCI6XCJyaWdodFwiPT1oJiZrLnJpZ2h0K2w+by53aWR0aD9cImxlZnRcIjpcImxlZnRcIj09aCYmay5sZWZ0LWw8by5sZWZ0P1wicmlnaHRcIjpoLGYucmVtb3ZlQ2xhc3MobikuYWRkQ2xhc3MoaCl9dmFyIHA9dGhpcy5nZXRDYWxjdWxhdGVkT2Zmc2V0KGgsayxsLG0pO3RoaXMuYXBwbHlQbGFjZW1lbnQocCxoKTt2YXIgcT1mdW5jdGlvbigpe3ZhciBhPWUuaG92ZXJTdGF0ZTtlLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5cIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLFwib3V0XCI9PWEmJmUubGVhdmUoZSl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoXCJmYWRlXCIpP2Yub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcyhcIm1hcmdpbi10b3BcIiksMTApLGg9cGFyc2VJbnQoZC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwxMCk7aXNOYU4oZykmJihnPTApLGlzTmFOKGgpJiYoaD0wKSxiLnRvcCs9ZyxiLmxlZnQrPWgsYS5vZmZzZXQuc2V0T2Zmc2V0KGRbMF0sYS5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKGEpe2QuY3NzKHt0b3A6TWF0aC5yb3VuZChhLnRvcCksbGVmdDpNYXRoLnJvdW5kKGEubGVmdCl9KX19LGIpLDApLGQuYWRkQ2xhc3MoXCJpblwiKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7XCJ0b3BcIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjP1wibGVmdFwiOlwidG9wXCIsNTAqKDEtYS9iKStcIiVcIikuY3NzKGM/XCJ0b3BcIjpcImxlZnRcIixcIlwiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKFwiLnRvb2x0aXAtaW5uZXJcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEucmVtb3ZlQ2xhc3MoXCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodFwiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7XCJpblwiIT1lLmhvdmVyU3RhdGUmJmYuZGV0YWNoKCksZS4kZWxlbWVudCYmZS4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLlwiK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj1hKHRoaXMuJHRpcCksZz1hLkV2ZW50KFwiaGlkZS5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm4gZi5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKFwiZmFkZVwiKT9mLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXN9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPXR5cGVvZiBhLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpKSYmYS5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLGEuYXR0cihcInRpdGxlXCIpfHxcIlwiKS5hdHRyKFwidGl0bGVcIixcIlwiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9XCJCT0RZXCI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPXdpbmRvdy5TVkdFbGVtZW50JiZjIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQsZz1kP3t0b3A6MCxsZWZ0OjB9OmY/bnVsbDpiLm9mZnNldCgpLGg9e3Njcm9sbDpkP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOmIuc2Nyb2xsVG9wKCl9LGk9ZD97d2lkdGg6YSh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OmEod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gYS5leHRlbmQoe30sZSxoLGksZyl9LGMucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuXCJib3R0b21cIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwidG9wXCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwibGVmdFwiPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQtY306e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdCtiLndpZHRofX0sYy5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gZTt2YXIgZj10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGc9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QoYSkpe3ZhciBoPWIudG9wLWYtZy5zY3JvbGwsaT1iLnRvcCtmLWcuc2Nyb2xsK2Q7aDxnLnRvcD9lLnRvcD1nLnRvcC1oOmk+Zy50b3ArZy5oZWlnaHQmJihlLnRvcD1nLnRvcCtnLmhlaWdodC1pKX1lbHNle3ZhciBqPWIubGVmdC1mLGs9Yi5sZWZ0K2YrYztqPGcubGVmdD9lLmxlZnQ9Zy5sZWZ0LWo6az5nLnJpZ2h0JiYoZS5sZWZ0PWcubGVmdCtnLndpZHRoLWspfXJldHVybiBlfSxjLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kZWxlbWVudCxjPXRoaXMub3B0aW9ucztyZXR1cm4gYT1iLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPWEodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlK1wiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhXCIpO3JldHVybiB0aGlzLiR0aXB9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoXCIudG9vbHRpcC1hcnJvd1wiKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpKSxiPyhjLmluU3RhdGUuY2xpY2s9IWMuaW5TdGF0ZS5jbGljayxjLmlzSW5TdGF0ZVRydWUoKT9jLmVudGVyKGMpOmMubGVhdmUoYykpOmMudGlwKCkuaGFzQ2xhc3MoXCJpblwiKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKFwiLlwiK2EudHlwZSkucmVtb3ZlRGF0YShcImJzLlwiK2EudHlwZSksYS4kdGlwJiZhLiR0aXAuZGV0YWNoKCksYS4kdGlwPW51bGwsYS4kYXJyb3c9bnVsbCxhLiR2aWV3cG9ydD1udWxsLGEuJGVsZW1lbnQ9bnVsbH0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy5wb3BvdmVyXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7IWUmJi9kZXN0cm95fGhpZGUvLnRlc3QoYil8fChlfHxkLmRhdGEoXCJicy5wb3BvdmVyXCIsZT1uZXcgYyh0aGlzLGYpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KFwicG9wb3ZlclwiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKFwiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzXCIpO2MuVkVSU0lPTj1cIjMuMy43XCIsYy5ERUZBVUxUUz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDpcInJpZ2h0XCIsdHJpZ2dlcjpcImNsaWNrXCIsY29udGVudDpcIlwiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2Pid9KSxjLnByb3RvdHlwZT1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRpcCgpLGI9dGhpcy5nZXRUaXRsZSgpLGM9dGhpcy5nZXRDb250ZW50KCk7YS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgYz9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShjKSxhLnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksYS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHxhLmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuY29udGVudD9iLmNvbnRlbnQuY2FsbChhWzBdKTpiLmNvbnRlbnQpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYyxkKXt0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD1hKGEoYykuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIixhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gYyhjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnNjcm9sbHNweVwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YShcImJzLnNjcm9sbHNweVwiLGU9bmV3IGIodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGMmJmVbY10oKX0pfWIuVkVSU0lPTj1cIjMuMy43XCIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVwib2Zmc2V0XCIsZD0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxhLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYz1cInBvc2l0aW9uXCIsZD10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWIuZGF0YShcInRhcmdldFwiKXx8Yi5hdHRyKFwiaHJlZlwiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKFwiOnZpc2libGVcIikmJltbZltjXSgpLnRvcCtkLGVdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlvbigpe2Iub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGIudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGIucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxjPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0K2MtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxlPXRoaXMub2Zmc2V0cyxmPXRoaXMudGFyZ2V0cyxnPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1jJiZ0aGlzLnJlZnJlc2goKSxiPj1kKXJldHVybiBnIT0oYT1mW2YubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZShhKTtpZihnJiZiPGVbMF0pcmV0dXJuIHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5jbGVhcigpO2ZvcihhPWUubGVuZ3RoO2EtLTspZyE9ZlthXSYmYj49ZVthXSYmKHZvaWQgMD09PWVbYSsxXXx8YjxlW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXtcbnRoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrYisnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2IrJ1wiXScsZD1hKGMpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtkLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKGQ9ZC5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLGQudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRhYlwiKTtlfHxkLmRhdGEoXCJicy50YWJcIixlPW5ldyBjKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KFwidWw6bm90KC5kcm9wZG93bi1tZW51KVwiKSxkPWIuZGF0YShcInRhcmdldFwiKTtpZihkfHwoZD1iLmF0dHIoXCJocmVmXCIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKSwhYi5wYXJlbnQoXCJsaVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSl7dmFyIGU9Yy5maW5kKFwiLmFjdGl2ZTpsYXN0IGFcIiksZj1hLkV2ZW50KFwiaGlkZS5icy50YWJcIix7cmVsYXRlZFRhcmdldDpiWzBdfSksZz1hLkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDplWzBdfSk7aWYoZS50cmlnZ2VyKGYpLGIudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBoPWEoZCk7dGhpcy5hY3RpdmF0ZShiLmNsb3Nlc3QoXCJsaVwiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZTpcImhpZGRlbi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmJbMF19KSxiLnRyaWdnZXIoe3R5cGU6XCJzaG93bi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmVbMF19KX0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksYi5hZGRDbGFzcyhcImFjdGl2ZVwiKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSxoPyhiWzBdLm9mZnNldFdpZHRoLGIuYWRkQ2xhc3MoXCJpblwiKSk6Yi5yZW1vdmVDbGFzcyhcImZhZGVcIiksYi5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJmIuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLGUmJmUoKX12YXIgZz1kLmZpbmQoXCI+IC5hY3RpdmVcIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKFwiZmFkZVwiKXx8ISFkLmZpbmQoXCI+IC5mYWRlXCIpLmxlbmd0aCk7Zy5sZW5ndGgmJmg/Zy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKFwiaW5cIil9O3ZhciBkPWEuZm4udGFiO2EuZm4udGFiPWIsYS5mbi50YWIuQ29uc3RydWN0b3I9YyxhLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udGFiPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwic2hvd1wiKX07YShkb2N1bWVudCkub24oXCJjbGljay5icy50YWIuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJyxlKS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmFmZml4XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYWZmaXhcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKFwic2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpXCIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKFwiY2xpY2suYnMuYWZmaXguZGF0YS1hcGlcIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsdGhpcykpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLmFmZml4ZWQ9bnVsbCx0aGlzLnVucGluPW51bGwsdGhpcy5waW5uZWRPZmZzZXQ9bnVsbCx0aGlzLmNoZWNrUG9zaXRpb24oKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlJFU0VUPVwiYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbVwiLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmXCJ0b3BcIj09dGhpcy5hZmZpeGVkKXJldHVybiBlPGMmJlwidG9wXCI7aWYoXCJib3R0b21cIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jPyEoZSt0aGlzLnVucGluPD1mLnRvcCkmJlwiYm90dG9tXCI6IShlK2c8PWEtZCkmJlwiYm90dG9tXCI7dmFyIGg9bnVsbD09dGhpcy5hZmZpeGVkLGk9aD9lOmYudG9wLGo9aD9nOmI7cmV0dXJuIG51bGwhPWMmJmU8PWM/XCJ0b3BcIjpudWxsIT1kJiZpK2o+PWEtZCYmXCJib3R0b21cIn0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoXCJhZmZpeFwiKTt2YXIgYT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksYj10aGlzLiRlbGVtZW50Lm9mZnNldCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD1iLnRvcC1hfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikpe3ZhciBiPXRoaXMuJGVsZW1lbnQuaGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0LGU9ZC50b3AsZj1kLmJvdHRvbSxnPU1hdGgubWF4KGEoZG9jdW1lbnQpLmhlaWdodCgpLGEoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpO1wib2JqZWN0XCIhPXR5cGVvZiBkJiYoZj1lPWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWQudG9wKHRoaXMuJGVsZW1lbnQpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmJiYoZj1kLmJvdHRvbSh0aGlzLiRlbGVtZW50KSk7dmFyIGg9dGhpcy5nZXRTdGF0ZShnLGIsZSxmKTtpZih0aGlzLmFmZml4ZWQhPWgpe251bGwhPXRoaXMudW5waW4mJnRoaXMuJGVsZW1lbnQuY3NzKFwidG9wXCIsXCJcIik7dmFyIGk9XCJhZmZpeFwiKyhoP1wiLVwiK2g6XCJcIiksaj1hLkV2ZW50KGkrXCIuYnMuYWZmaXhcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGopLGouaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuYWZmaXhlZD1oLHRoaXMudW5waW49XCJib3R0b21cIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZShcImFmZml4XCIsXCJhZmZpeGVkXCIpK1wiLmJzLmFmZml4XCIpfVwiYm90dG9tXCI9PWgmJnRoaXMuJGVsZW1lbnQub2Zmc2V0KHt0b3A6Zy1iLWZ9KX19O3ZhciBkPWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1iLGEuZm4uYWZmaXguQ29uc3RydWN0b3I9YyxhLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hZmZpeD1kLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n"); -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("!function t(e,r){ true?module.exports=r():\"function\"==typeof define&&define.amd?define([],r):\"object\"==typeof exports?exports.Raphael=r():e.Raphael=r()}(this,function(){return function(t){function e(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return t[i].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var r={};return e.m=t,e.c=r,e.p=\"\",e(0)}([function(t,e,r){var i,n;i=[r(1),r(3),r(4)],n=function(t){return t}.apply(e,i),!(void 0!==n&&(t.exports=n))},function(t,e,r){var i,n;i=[r(2)],n=function(t){function e(r){if(e.is(r,\"function\"))return w?r():t.on(\"raphael.DOMload\",r);if(e.is(r,Q))return e._engine.create[z](e,r.splice(0,3+e.is(r[0],$))).add(r);var i=Array.prototype.slice.call(arguments,0);if(e.is(i[i.length-1],\"function\")){var n=i.pop();return w?n.call(e._engine.create[z](e,i)):t.on(\"raphael.DOMload\",function(){n.call(e._engine.create[z](e,i))})}return e._engine.create[z](e,arguments)}function r(t){if(\"function\"==typeof t||Object(t)!==t)return t;var e=new t.constructor;for(var i in t)t[A](i)&&(e[i]=r(t[i]));return e}function i(t,e){for(var r=0,i=t.length;r<i;r++)if(t[r]===e)return t.push(t.splice(r,1)[0])}function n(t,e,r){function n(){var a=Array.prototype.slice.call(arguments,0),s=a.join(\"␀\"),o=n.cache=n.cache||{},l=n.count=n.count||[];return o[A](s)?(i(l,s),r?r(o[s]):o[s]):(l.length>=1e3&&delete o[l.shift()],l.push(s),o[s]=t[z](e,a),r?r(o[s]):o[s])}return n}function a(){return this.hex}function s(t,e){for(var r=[],i=0,n=t.length;n-2*!e>i;i+=2){var a=[{x:+t[i-2],y:+t[i-1]},{x:+t[i],y:+t[i+1]},{x:+t[i+2],y:+t[i+3]},{x:+t[i+4],y:+t[i+5]}];e?i?n-4==i?a[3]={x:+t[0],y:+t[1]}:n-2==i&&(a[2]={x:+t[0],y:+t[1]},a[3]={x:+t[2],y:+t[3]}):a[0]={x:+t[n-2],y:+t[n-1]}:n-4==i?a[3]=a[2]:i||(a[0]={x:+t[i],y:+t[i+1]}),r.push([\"C\",(-a[0].x+6*a[1].x+a[2].x)/6,(-a[0].y+6*a[1].y+a[2].y)/6,(a[1].x+6*a[2].x-a[3].x)/6,(a[1].y+6*a[2].y-a[3].y)/6,a[2].x,a[2].y])}return r}function o(t,e,r,i,n){var a=-3*e+9*r-9*i+3*n,s=t*a+6*e-12*r+6*i;return t*s-3*e+3*r}function l(t,e,r,i,n,a,s,l,h){null==h&&(h=1),h=h>1?1:h<0?0:h;for(var u=h/2,c=12,f=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0,g=0;g<c;g++){var v=u*f[g]+u,x=o(v,t,r,n,s),y=o(v,e,i,a,l),m=x*x+y*y;d+=p[g]*Y.sqrt(m)}return u*d}function h(t,e,r,i,n,a,s,o,h){if(!(h<0||l(t,e,r,i,n,a,s,o)<h)){var u=1,c=u/2,f=u-c,p,d=.01;for(p=l(t,e,r,i,n,a,s,o,f);H(p-h)>d;)c/=2,f+=(p<h?1:-1)*c,p=l(t,e,r,i,n,a,s,o,f);return f}}function u(t,e,r,i,n,a,s,o){if(!(W(t,r)<G(n,s)||G(t,r)>W(n,s)||W(e,i)<G(a,o)||G(e,i)>W(a,o))){var l=(t*i-e*r)*(n-s)-(t-r)*(n*o-a*s),h=(t*i-e*r)*(a-o)-(e-i)*(n*o-a*s),u=(t-r)*(a-o)-(e-i)*(n-s);if(u){var c=l/u,f=h/u,p=+c.toFixed(2),d=+f.toFixed(2);if(!(p<+G(t,r).toFixed(2)||p>+W(t,r).toFixed(2)||p<+G(n,s).toFixed(2)||p>+W(n,s).toFixed(2)||d<+G(e,i).toFixed(2)||d>+W(e,i).toFixed(2)||d<+G(a,o).toFixed(2)||d>+W(a,o).toFixed(2)))return{x:c,y:f}}}}function c(t,e){return p(t,e)}function f(t,e){return p(t,e,1)}function p(t,r,i){var n=e.bezierBBox(t),a=e.bezierBBox(r);if(!e.isBBoxIntersect(n,a))return i?0:[];for(var s=l.apply(0,t),o=l.apply(0,r),h=W(~~(s/5),1),c=W(~~(o/5),1),f=[],p=[],d={},g=i?0:[],v=0;v<h+1;v++){var x=e.findDotsAtSegment.apply(e,t.concat(v/h));f.push({x:x.x,y:x.y,t:v/h})}for(v=0;v<c+1;v++)x=e.findDotsAtSegment.apply(e,r.concat(v/c)),p.push({x:x.x,y:x.y,t:v/c});for(v=0;v<h;v++)for(var y=0;y<c;y++){var m=f[v],b=f[v+1],_=p[y],w=p[y+1],k=H(b.x-m.x)<.001?\"y\":\"x\",B=H(w.x-_.x)<.001?\"y\":\"x\",C=u(m.x,m.y,b.x,b.y,_.x,_.y,w.x,w.y);if(C){if(d[C.x.toFixed(4)]==C.y.toFixed(4))continue;d[C.x.toFixed(4)]=C.y.toFixed(4);var S=m.t+H((C[k]-m[k])/(b[k]-m[k]))*(b.t-m.t),A=_.t+H((C[B]-_[B])/(w[B]-_[B]))*(w.t-_.t);S>=0&&S<=1.001&&A>=0&&A<=1.001&&(i?g++:g.push({x:C.x,y:C.y,t1:G(S,1),t2:G(A,1)}))}}return g}function d(t,r,i){t=e._path2curve(t),r=e._path2curve(r);for(var n,a,s,o,l,h,u,c,f,d,g=i?0:[],v=0,x=t.length;v<x;v++){var y=t[v];if(\"M\"==y[0])n=l=y[1],a=h=y[2];else{\"C\"==y[0]?(f=[n,a].concat(y.slice(1)),n=f[6],a=f[7]):(f=[n,a,n,a,l,h,l,h],n=l,a=h);for(var m=0,b=r.length;m<b;m++){var _=r[m];if(\"M\"==_[0])s=u=_[1],o=c=_[2];else{\"C\"==_[0]?(d=[s,o].concat(_.slice(1)),s=d[6],o=d[7]):(d=[s,o,s,o,u,c,u,c],s=u,o=c);var w=p(f,d,i);if(i)g+=w;else{for(var k=0,B=w.length;k<B;k++)w[k].segment1=v,w[k].segment2=m,w[k].bez1=f,w[k].bez2=d;g=g.concat(w)}}}}}return g}function g(t,e,r,i,n,a){null!=t?(this.a=+t,this.b=+e,this.c=+r,this.d=+i,this.e=+n,this.f=+a):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function v(){return this.x+j+this.y}function x(){return this.x+j+this.y+j+this.width+\" × \"+this.height}function y(t,e,r,i,n,a){function s(t){return((c*t+u)*t+h)*t}function o(t,e){var r=l(t,e);return((d*r+p)*r+f)*r}function l(t,e){var r,i,n,a,o,l;for(n=t,l=0;l<8;l++){if(a=s(n)-t,H(a)<e)return n;if(o=(3*c*n+2*u)*n+h,H(o)<1e-6)break;n-=a/o}if(r=0,i=1,n=t,n<r)return r;if(n>i)return i;for(;r<i;){if(a=s(n),H(a-t)<e)return n;t>a?r=n:i=n,n=(i-r)/2+r}return n}var h=3*e,u=3*(i-e)-h,c=1-h-u,f=3*r,p=3*(n-r)-f,d=1-f-p;return o(t,1/(200*a))}function m(t,e){var r=[],i={};if(this.ms=e,this.times=1,t){for(var n in t)t[A](n)&&(i[ht(n)]=t[n],r.push(ht(n)));r.sort(Bt)}this.anim=i,this.top=r[r.length-1],this.percents=r}function b(r,i,n,a,s,o){n=ht(n);var l,h,u,c=[],f,p,d,v=r.ms,x={},m={},b={};if(a)for(w=0,B=Ee.length;w<B;w++){var _=Ee[w];if(_.el.id==i.id&&_.anim==r){_.percent!=n?(Ee.splice(w,1),u=1):h=_,i.attr(_.totalOrigin);break}}else a=+m;for(var w=0,B=r.percents.length;w<B;w++){if(r.percents[w]==n||r.percents[w]>a*r.top){n=r.percents[w],p=r.percents[w-1]||0,v=v/r.top*(n-p),f=r.percents[w+1],l=r.anim[n];break}a&&i.attr(r.anim[r.percents[w]])}if(l){if(h)h.initstatus=a,h.start=new Date-h.ms*a;else{for(var C in l)if(l[A](C)&&(pt[A](C)||i.paper.customAttributes[A](C)))switch(x[C]=i.attr(C),null==x[C]&&(x[C]=ft[C]),m[C]=l[C],pt[C]){case $:b[C]=(m[C]-x[C])/v;break;case\"colour\":x[C]=e.getRGB(x[C]);var S=e.getRGB(m[C]);b[C]={r:(S.r-x[C].r)/v,g:(S.g-x[C].g)/v,b:(S.b-x[C].b)/v};break;case\"path\":var T=Qt(x[C],m[C]),E=T[1];for(x[C]=T[0],b[C]=[],w=0,B=x[C].length;w<B;w++){b[C][w]=[0];for(var M=1,N=x[C][w].length;M<N;M++)b[C][w][M]=(E[w][M]-x[C][w][M])/v}break;case\"transform\":var L=i._,z=le(L[C],m[C]);if(z)for(x[C]=z.from,m[C]=z.to,b[C]=[],b[C].real=!0,w=0,B=x[C].length;w<B;w++)for(b[C][w]=[x[C][w][0]],M=1,N=x[C][w].length;M<N;M++)b[C][w][M]=(m[C][w][M]-x[C][w][M])/v;else{var F=i.matrix||new g,R={_:{transform:L.transform},getBBox:function(){return i.getBBox(1)}};x[C]=[F.a,F.b,F.c,F.d,F.e,F.f],se(R,m[C]),m[C]=R._.transform,b[C]=[(R.matrix.a-F.a)/v,(R.matrix.b-F.b)/v,(R.matrix.c-F.c)/v,(R.matrix.d-F.d)/v,(R.matrix.e-F.e)/v,(R.matrix.f-F.f)/v]}break;case\"csv\":var j=I(l[C])[q](k),D=I(x[C])[q](k);if(\"clip-rect\"==C)for(x[C]=D,b[C]=[],w=D.length;w--;)b[C][w]=(j[w]-x[C][w])/v;m[C]=j;break;default:for(j=[][P](l[C]),D=[][P](x[C]),b[C]=[],w=i.paper.customAttributes[C].length;w--;)b[C][w]=((j[w]||0)-(D[w]||0))/v}var V=l.easing,O=e.easing_formulas[V];if(!O)if(O=I(V).match(st),O&&5==O.length){var Y=O;O=function(t){return y(t,+Y[1],+Y[2],+Y[3],+Y[4],v)}}else O=St;if(d=l.start||r.start||+new Date,_={anim:r,percent:n,timestamp:d,start:d+(r.del||0),status:0,initstatus:a||0,stop:!1,ms:v,easing:O,from:x,diff:b,to:m,el:i,callback:l.callback,prev:p,next:f,repeat:o||r.times,origin:i.attr(),totalOrigin:s},Ee.push(_),a&&!h&&!u&&(_.stop=!0,_.start=new Date-v*a,1==Ee.length))return Ne();u&&(_.start=new Date-_.ms*a),1==Ee.length&&Me(Ne)}t(\"raphael.anim.start.\"+i.id,i,r)}}function _(t){for(var e=0;e<Ee.length;e++)Ee[e].el.paper==t&&Ee.splice(e--,1)}e.version=\"2.2.0\",e.eve=t;var w,k=/[, ]+/,B={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},C=/\\{(\\d+)\\}/g,S=\"prototype\",A=\"hasOwnProperty\",T={doc:document,win:window},E={was:Object.prototype[A].call(T.win,\"Raphael\"),is:T.win.Raphael},M=function(){this.ca=this.customAttributes={}},N,L=\"appendChild\",z=\"apply\",P=\"concat\",F=\"ontouchstart\"in T.win||T.win.DocumentTouch&&T.doc instanceof DocumentTouch,R=\"\",j=\" \",I=String,q=\"split\",D=\"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[q](j),V={mousedown:\"touchstart\",mousemove:\"touchmove\",mouseup:\"touchend\"},O=I.prototype.toLowerCase,Y=Math,W=Y.max,G=Y.min,H=Y.abs,X=Y.pow,U=Y.PI,$=\"number\",Z=\"string\",Q=\"array\",J=\"toString\",K=\"fill\",tt=Object.prototype.toString,et={},rt=\"push\",it=e._ISURL=/^url\\(['\"]?(.+?)['\"]?\\)$/i,nt=/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,at={NaN:1,Infinity:1,\"-Infinity\":1},st=/^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,ot=Y.round,lt=\"setAttribute\",ht=parseFloat,ut=parseInt,ct=I.prototype.toUpperCase,ft=e._availableAttrs={\"arrow-end\":\"none\",\"arrow-start\":\"none\",blur:0,\"clip-rect\":\"0 0 1e9 1e9\",cursor:\"default\",cx:0,cy:0,fill:\"#fff\",\"fill-opacity\":1,font:'10px \"Arial\"',\"font-family\":'\"Arial\"',\"font-size\":\"10\",\"font-style\":\"normal\",\"font-weight\":400,gradient:0,height:0,href:\"http://raphaeljs.com/\",\"letter-spacing\":0,opacity:1,path:\"M0,0\",r:0,rx:0,ry:0,src:\"\",stroke:\"#000\",\"stroke-dasharray\":\"\",\"stroke-linecap\":\"butt\",\"stroke-linejoin\":\"butt\",\"stroke-miterlimit\":0,\"stroke-opacity\":1,\"stroke-width\":1,target:\"_blank\",\"text-anchor\":\"middle\",title:\"Raphael\",transform:\"\",width:0,x:0,y:0,\"class\":\"\"},pt=e._availableAnimAttrs={blur:$,\"clip-rect\":\"csv\",cx:$,cy:$,fill:\"colour\",\"fill-opacity\":$,\"font-size\":$,height:$,opacity:$,path:\"path\",r:$,rx:$,ry:$,stroke:\"colour\",\"stroke-opacity\":$,\"stroke-width\":$,transform:\"transform\",width:$,x:$,y:$},dt=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]/g,gt=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,vt={hs:1,rg:1},xt=/,?([achlmqrstvxz]),?/gi,yt=/([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,mt=/([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,bt=/(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/gi,_t=e._radial_gradient=/^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,wt={},kt=function(t,e){return t.key-e.key},Bt=function(t,e){return ht(t)-ht(e)},Ct=function(){},St=function(t){return t},At=e._rectPath=function(t,e,r,i,n){return n?[[\"M\",t+n,e],[\"l\",r-2*n,0],[\"a\",n,n,0,0,1,n,n],[\"l\",0,i-2*n],[\"a\",n,n,0,0,1,-n,n],[\"l\",2*n-r,0],[\"a\",n,n,0,0,1,-n,-n],[\"l\",0,2*n-i],[\"a\",n,n,0,0,1,n,-n],[\"z\"]]:[[\"M\",t,e],[\"l\",r,0],[\"l\",0,i],[\"l\",-r,0],[\"z\"]]},Tt=function(t,e,r,i){return null==i&&(i=r),[[\"M\",t,e],[\"m\",0,-i],[\"a\",r,i,0,1,1,0,2*i],[\"a\",r,i,0,1,1,0,-2*i],[\"z\"]]},Et=e._getPath={path:function(t){return t.attr(\"path\")},circle:function(t){var e=t.attrs;return Tt(e.cx,e.cy,e.r)},ellipse:function(t){var e=t.attrs;return Tt(e.cx,e.cy,e.rx,e.ry)},rect:function(t){var e=t.attrs;return At(e.x,e.y,e.width,e.height,e.r)},image:function(t){var e=t.attrs;return At(e.x,e.y,e.width,e.height)},text:function(t){var e=t._getBBox();return At(e.x,e.y,e.width,e.height)},set:function(t){var e=t._getBBox();return At(e.x,e.y,e.width,e.height)}},Mt=e.mapPath=function(t,e){if(!e)return t;var r,i,n,a,s,o,l;for(t=Qt(t),n=0,s=t.length;n<s;n++)for(l=t[n],a=1,o=l.length;a<o;a+=2)r=e.x(l[a],l[a+1]),i=e.y(l[a],l[a+1]),l[a]=r,l[a+1]=i;return t};if(e._g=T,e.type=T.win.SVGAngle||T.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")?\"SVG\":\"VML\",\"VML\"==e.type){var Nt=T.doc.createElement(\"div\"),Lt;if(Nt.innerHTML='<v:shape adj=\"1\"/>',Lt=Nt.firstChild,Lt.style.behavior=\"url(#default#VML)\",!Lt||\"object\"!=typeof Lt.adj)return e.type=R;Nt=null}e.svg=!(e.vml=\"VML\"==e.type),e._Paper=M,e.fn=N=M.prototype=e.prototype,e._id=0,e.is=function(t,e){return e=O.call(e),\"finite\"==e?!at[A](+t):\"array\"==e?t instanceof Array:\"null\"==e&&null===t||e==typeof t&&null!==t||\"object\"==e&&t===Object(t)||\"array\"==e&&Array.isArray&&Array.isArray(t)||tt.call(t).slice(8,-1).toLowerCase()==e},e.angle=function(t,r,i,n,a,s){if(null==a){var o=t-i,l=r-n;return o||l?(180+180*Y.atan2(-l,-o)/U+360)%360:0}return e.angle(t,r,a,s)-e.angle(i,n,a,s)},e.rad=function(t){return t%360*U/180},e.deg=function(t){return Math.round(180*t/U%360*1e3)/1e3},e.snapTo=function(t,r,i){if(i=e.is(i,\"finite\")?i:10,e.is(t,Q)){for(var n=t.length;n--;)if(H(t[n]-r)<=i)return t[n]}else{t=+t;var a=r%t;if(a<i)return r-a;if(a>t-i)return r-a+t}return r};var zt=e.createUUID=function(t,e){return function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(t,e).toUpperCase()}}(/[xy]/g,function(t){var e=16*Y.random()|0,r=\"x\"==t?e:3&e|8;return r.toString(16)});e.setWindow=function(r){t(\"raphael.setWindow\",e,T.win,r),T.win=r,T.doc=T.win.document,e._engine.initWin&&e._engine.initWin(T.win)};var Pt=function(t){if(e.vml){var r=/^\\s+|\\s+$/g,i;try{var a=new ActiveXObject(\"htmlfile\");a.write(\"<body>\"),a.close(),i=a.body}catch(s){i=createPopup().document.body}var o=i.createTextRange();Pt=n(function(t){try{i.style.color=I(t).replace(r,R);var e=o.queryCommandValue(\"ForeColor\");return e=(255&e)<<16|65280&e|(16711680&e)>>>16,\"#\"+(\"000000\"+e.toString(16)).slice(-6)}catch(n){return\"none\"}})}else{var l=T.doc.createElement(\"i\");l.title=\"Raphaël Colour Picker\",l.style.display=\"none\",T.doc.body.appendChild(l),Pt=n(function(t){return l.style.color=t,T.doc.defaultView.getComputedStyle(l,R).getPropertyValue(\"color\")})}return Pt(t)},Ft=function(){return\"hsb(\"+[this.h,this.s,this.b]+\")\"},Rt=function(){return\"hsl(\"+[this.h,this.s,this.l]+\")\"},jt=function(){return this.hex},It=function(t,r,i){if(null==r&&e.is(t,\"object\")&&\"r\"in t&&\"g\"in t&&\"b\"in t&&(i=t.b,r=t.g,t=t.r),null==r&&e.is(t,Z)){var n=e.getRGB(t);t=n.r,r=n.g,i=n.b}return(t>1||r>1||i>1)&&(t/=255,r/=255,i/=255),[t,r,i]},qt=function(t,r,i,n){t*=255,r*=255,i*=255;var a={r:t,g:r,b:i,hex:e.rgb(t,r,i),toString:jt};return e.is(n,\"finite\")&&(a.opacity=n),a};e.color=function(t){var r;return e.is(t,\"object\")&&\"h\"in t&&\"s\"in t&&\"b\"in t?(r=e.hsb2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):e.is(t,\"object\")&&\"h\"in t&&\"s\"in t&&\"l\"in t?(r=e.hsl2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):(e.is(t,\"string\")&&(t=e.getRGB(t)),e.is(t,\"object\")&&\"r\"in t&&\"g\"in t&&\"b\"in t?(r=e.rgb2hsl(t),t.h=r.h,t.s=r.s,t.l=r.l,r=e.rgb2hsb(t),t.v=r.b):(t={hex:\"none\"},t.r=t.g=t.b=t.h=t.s=t.v=t.l=-1)),t.toString=jt,t},e.hsb2rgb=function(t,e,r,i){this.is(t,\"object\")&&\"h\"in t&&\"s\"in t&&\"b\"in t&&(r=t.b,e=t.s,i=t.o,t=t.h),t*=360;var n,a,s,o,l;return t=t%360/60,l=r*e,o=l*(1-H(t%2-1)),n=a=s=r-l,t=~~t,n+=[l,o,0,0,o,l][t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],qt(n,a,s,i)},e.hsl2rgb=function(t,e,r,i){this.is(t,\"object\")&&\"h\"in t&&\"s\"in t&&\"l\"in t&&(r=t.l,e=t.s,t=t.h),(t>1||e>1||r>1)&&(t/=360,e/=100,r/=100),t*=360;var n,a,s,o,l;return t=t%360/60,l=2*e*(r<.5?r:1-r),o=l*(1-H(t%2-1)),n=a=s=r-l/2,t=~~t,n+=[l,o,0,0,o,l][t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],qt(n,a,s,i)},e.rgb2hsb=function(t,e,r){r=It(t,e,r),t=r[0],e=r[1],r=r[2];var i,n,a,s;return a=W(t,e,r),s=a-G(t,e,r),i=0==s?null:a==t?(e-r)/s:a==e?(r-t)/s+2:(t-e)/s+4,i=(i+360)%6*60/360,n=0==s?0:s/a,{h:i,s:n,b:a,toString:Ft}},e.rgb2hsl=function(t,e,r){r=It(t,e,r),t=r[0],e=r[1],r=r[2];var i,n,a,s,o,l;return s=W(t,e,r),o=G(t,e,r),l=s-o,i=0==l?null:s==t?(e-r)/l:s==e?(r-t)/l+2:(t-e)/l+4,i=(i+360)%6*60/360,a=(s+o)/2,n=0==l?0:a<.5?l/(2*a):l/(2-2*a),{h:i,s:n,l:a,toString:Rt}},e._path2string=function(){return this.join(\",\").replace(xt,\"$1\")};var Dt=e._preload=function(t,e){var r=T.doc.createElement(\"img\");r.style.cssText=\"position:absolute;left:-9999em;top:-9999em\",r.onload=function(){e.call(this),this.onload=null,T.doc.body.removeChild(this)},r.onerror=function(){T.doc.body.removeChild(this)},T.doc.body.appendChild(r),r.src=t};e.getRGB=n(function(t){if(!t||(t=I(t)).indexOf(\"-\")+1)return{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:a};if(\"none\"==t)return{r:-1,g:-1,b:-1,hex:\"none\",toString:a};!(vt[A](t.toLowerCase().substring(0,2))||\"#\"==t.charAt())&&(t=Pt(t));var r,i,n,s,o,l,h,u=t.match(nt);return u?(u[2]&&(s=ut(u[2].substring(5),16),n=ut(u[2].substring(3,5),16),i=ut(u[2].substring(1,3),16)),u[3]&&(s=ut((l=u[3].charAt(3))+l,16),n=ut((l=u[3].charAt(2))+l,16),i=ut((l=u[3].charAt(1))+l,16)),u[4]&&(h=u[4][q](gt),i=ht(h[0]),\"%\"==h[0].slice(-1)&&(i*=2.55),n=ht(h[1]),\"%\"==h[1].slice(-1)&&(n*=2.55),s=ht(h[2]),\"%\"==h[2].slice(-1)&&(s*=2.55),\"rgba\"==u[1].toLowerCase().slice(0,4)&&(o=ht(h[3])),h[3]&&\"%\"==h[3].slice(-1)&&(o/=100)),u[5]?(h=u[5][q](gt),i=ht(h[0]),\"%\"==h[0].slice(-1)&&(i*=2.55),n=ht(h[1]),\"%\"==h[1].slice(-1)&&(n*=2.55),s=ht(h[2]),\"%\"==h[2].slice(-1)&&(s*=2.55),(\"deg\"==h[0].slice(-3)||\"°\"==h[0].slice(-1))&&(i/=360),\"hsba\"==u[1].toLowerCase().slice(0,4)&&(o=ht(h[3])),h[3]&&\"%\"==h[3].slice(-1)&&(o/=100),e.hsb2rgb(i,n,s,o)):u[6]?(h=u[6][q](gt),i=ht(h[0]),\"%\"==h[0].slice(-1)&&(i*=2.55),n=ht(h[1]),\"%\"==h[1].slice(-1)&&(n*=2.55),s=ht(h[2]),\"%\"==h[2].slice(-1)&&(s*=2.55),(\"deg\"==h[0].slice(-3)||\"°\"==h[0].slice(-1))&&(i/=360),\"hsla\"==u[1].toLowerCase().slice(0,4)&&(o=ht(h[3])),h[3]&&\"%\"==h[3].slice(-1)&&(o/=100),e.hsl2rgb(i,n,s,o)):(u={r:i,g:n,b:s,toString:a},u.hex=\"#\"+(16777216|s|n<<8|i<<16).toString(16).slice(1),e.is(o,\"finite\")&&(u.opacity=o),u)):{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:a}},e),e.hsb=n(function(t,r,i){return e.hsb2rgb(t,r,i).hex}),e.hsl=n(function(t,r,i){return e.hsl2rgb(t,r,i).hex}),e.rgb=n(function(t,e,r){function i(t){return t+.5|0}return\"#\"+(16777216|i(r)|i(e)<<8|i(t)<<16).toString(16).slice(1)}),e.getColor=function(t){var e=this.getColor.start=this.getColor.start||{h:0,s:1,b:t||.75},r=this.hsb2rgb(e.h,e.s,e.b);return e.h+=.075,e.h>1&&(e.h=0,e.s-=.2,e.s<=0&&(this.getColor.start={h:0,s:1,b:e.b})),r.hex},e.getColor.reset=function(){delete this.start},e.parsePathString=function(t){if(!t)return null;var r=Vt(t);if(r.arr)return Yt(r.arr);var i={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},n=[];return e.is(t,Q)&&e.is(t[0],Q)&&(n=Yt(t)),n.length||I(t).replace(yt,function(t,e,r){var a=[],s=e.toLowerCase();if(r.replace(bt,function(t,e){e&&a.push(+e)}),\"m\"==s&&a.length>2&&(n.push([e][P](a.splice(0,2))),s=\"l\",e=\"m\"==e?\"l\":\"L\"),\"r\"==s)n.push([e][P](a));else for(;a.length>=i[s]&&(n.push([e][P](a.splice(0,i[s]))),i[s]););}),n.toString=e._path2string,r.arr=Yt(n),n},e.parseTransformString=n(function(t){if(!t)return null;var r={r:3,s:4,t:2,m:6},i=[];return e.is(t,Q)&&e.is(t[0],Q)&&(i=Yt(t)),i.length||I(t).replace(mt,function(t,e,r){var n=[],a=O.call(e);r.replace(bt,function(t,e){e&&n.push(+e)}),i.push([e][P](n))}),i.toString=e._path2string,i});var Vt=function(t){var e=Vt.ps=Vt.ps||{};return e[t]?e[t].sleep=100:e[t]={sleep:100},setTimeout(function(){for(var r in e)e[A](r)&&r!=t&&(e[r].sleep--,!e[r].sleep&&delete e[r])}),e[t]};e.findDotsAtSegment=function(t,e,r,i,n,a,s,o,l){var h=1-l,u=X(h,3),c=X(h,2),f=l*l,p=f*l,d=u*t+3*c*l*r+3*h*l*l*n+p*s,g=u*e+3*c*l*i+3*h*l*l*a+p*o,v=t+2*l*(r-t)+f*(n-2*r+t),x=e+2*l*(i-e)+f*(a-2*i+e),y=r+2*l*(n-r)+f*(s-2*n+r),m=i+2*l*(a-i)+f*(o-2*a+i),b=h*t+l*r,_=h*e+l*i,w=h*n+l*s,k=h*a+l*o,B=90-180*Y.atan2(v-y,x-m)/U;return(v>y||x<m)&&(B+=180),{x:d,y:g,m:{x:v,y:x},n:{x:y,y:m},start:{x:b,y:_},end:{x:w,y:k},alpha:B}},e.bezierBBox=function(t,r,i,n,a,s,o,l){e.is(t,\"array\")||(t=[t,r,i,n,a,s,o,l]);var h=Zt.apply(null,t);return{x:h.min.x,y:h.min.y,x2:h.max.x,y2:h.max.y,width:h.max.x-h.min.x,height:h.max.y-h.min.y}},e.isPointInsideBBox=function(t,e,r){return e>=t.x&&e<=t.x2&&r>=t.y&&r<=t.y2},e.isBBoxIntersect=function(t,r){var i=e.isPointInsideBBox;return i(r,t.x,t.y)||i(r,t.x2,t.y)||i(r,t.x,t.y2)||i(r,t.x2,t.y2)||i(t,r.x,r.y)||i(t,r.x2,r.y)||i(t,r.x,r.y2)||i(t,r.x2,r.y2)||(t.x<r.x2&&t.x>r.x||r.x<t.x2&&r.x>t.x)&&(t.y<r.y2&&t.y>r.y||r.y<t.y2&&r.y>t.y)},e.pathIntersection=function(t,e){return d(t,e)},e.pathIntersectionNumber=function(t,e){return d(t,e,1)},e.isPointInsidePath=function(t,r,i){var n=e.pathBBox(t);return e.isPointInsideBBox(n,r,i)&&d(t,[[\"M\",r,i],[\"H\",n.x2+10]],1)%2==1},e._removedFactory=function(e){return function(){t(\"raphael.log\",null,\"Raphaël: you are calling to method “\"+e+\"” of removed object\",e)}};var Ot=e.pathBBox=function(t){var e=Vt(t);if(e.bbox)return r(e.bbox);if(!t)return{x:0,y:0,width:0,height:0,x2:0,y2:0};t=Qt(t);for(var i=0,n=0,a=[],s=[],o,l=0,h=t.length;l<h;l++)if(o=t[l],\"M\"==o[0])i=o[1],n=o[2],a.push(i),s.push(n);else{var u=Zt(i,n,o[1],o[2],o[3],o[4],o[5],o[6]);a=a[P](u.min.x,u.max.x),s=s[P](u.min.y,u.max.y),i=o[5],n=o[6]}var c=G[z](0,a),f=G[z](0,s),p=W[z](0,a),d=W[z](0,s),g=p-c,v=d-f,x={x:c,y:f,x2:p,y2:d,width:g,height:v,cx:c+g/2,cy:f+v/2};return e.bbox=r(x),x},Yt=function(t){var i=r(t);return i.toString=e._path2string,i},Wt=e._pathToRelative=function(t){var r=Vt(t);if(r.rel)return Yt(r.rel);e.is(t,Q)&&e.is(t&&t[0],Q)||(t=e.parsePathString(t));var i=[],n=0,a=0,s=0,o=0,l=0;\"M\"==t[0][0]&&(n=t[0][1],a=t[0][2],s=n,o=a,l++,i.push([\"M\",n,a]));for(var h=l,u=t.length;h<u;h++){var c=i[h]=[],f=t[h];if(f[0]!=O.call(f[0]))switch(c[0]=O.call(f[0]),c[0]){case\"a\":c[1]=f[1],c[2]=f[2],c[3]=f[3],c[4]=f[4],c[5]=f[5],c[6]=+(f[6]-n).toFixed(3),c[7]=+(f[7]-a).toFixed(3);break;case\"v\":c[1]=+(f[1]-a).toFixed(3);break;case\"m\":s=f[1],o=f[2];default:for(var p=1,d=f.length;p<d;p++)c[p]=+(f[p]-(p%2?n:a)).toFixed(3)}else{c=i[h]=[],\"m\"==f[0]&&(s=f[1]+n,o=f[2]+a);for(var g=0,v=f.length;g<v;g++)i[h][g]=f[g]}var x=i[h].length;switch(i[h][0]){case\"z\":n=s,a=o;break;case\"h\":n+=+i[h][x-1];break;case\"v\":a+=+i[h][x-1];break;default:n+=+i[h][x-2],a+=+i[h][x-1]}}return i.toString=e._path2string,r.rel=Yt(i),i},Gt=e._pathToAbsolute=function(t){var r=Vt(t);if(r.abs)return Yt(r.abs);if(e.is(t,Q)&&e.is(t&&t[0],Q)||(t=e.parsePathString(t)),!t||!t.length)return[[\"M\",0,0]];var i=[],n=0,a=0,o=0,l=0,h=0;\"M\"==t[0][0]&&(n=+t[0][1],a=+t[0][2],o=n,l=a,h++,i[0]=[\"M\",n,a]);for(var u=3==t.length&&\"M\"==t[0][0]&&\"R\"==t[1][0].toUpperCase()&&\"Z\"==t[2][0].toUpperCase(),c,f,p=h,d=t.length;p<d;p++){if(i.push(c=[]),f=t[p],f[0]!=ct.call(f[0]))switch(c[0]=ct.call(f[0]),c[0]){case\"A\":c[1]=f[1],c[2]=f[2],c[3]=f[3],c[4]=f[4],c[5]=f[5],c[6]=+(f[6]+n),c[7]=+(f[7]+a);break;case\"V\":c[1]=+f[1]+a;break;case\"H\":c[1]=+f[1]+n;break;case\"R\":for(var g=[n,a][P](f.slice(1)),v=2,x=g.length;v<x;v++)g[v]=+g[v]+n,g[++v]=+g[v]+a;i.pop(),i=i[P](s(g,u));break;case\"M\":o=+f[1]+n,l=+f[2]+a;default:for(v=1,x=f.length;v<x;v++)c[v]=+f[v]+(v%2?n:a)}else if(\"R\"==f[0])g=[n,a][P](f.slice(1)),i.pop(),i=i[P](s(g,u)),c=[\"R\"][P](f.slice(-2));else for(var y=0,m=f.length;y<m;y++)c[y]=f[y];switch(c[0]){case\"Z\":n=o,a=l;break;case\"H\":n=c[1];break;case\"V\":a=c[1];break;case\"M\":o=c[c.length-2],l=c[c.length-1];default:n=c[c.length-2],a=c[c.length-1]}}return i.toString=e._path2string,r.abs=Yt(i),i},Ht=function(t,e,r,i){return[t,e,r,i,r,i]},Xt=function(t,e,r,i,n,a){var s=1/3,o=2/3;return[s*t+o*r,s*e+o*i,s*n+o*r,s*a+o*i,n,a]},Ut=function(t,e,r,i,a,s,o,l,h,u){var c=120*U/180,f=U/180*(+a||0),p=[],d,g=n(function(t,e,r){var i=t*Y.cos(r)-e*Y.sin(r),n=t*Y.sin(r)+e*Y.cos(r);return{x:i,y:n}});if(u)S=u[0],A=u[1],B=u[2],C=u[3];else{d=g(t,e,-f),t=d.x,e=d.y,d=g(l,h,-f),l=d.x,h=d.y;var v=Y.cos(U/180*a),x=Y.sin(U/180*a),y=(t-l)/2,m=(e-h)/2,b=y*y/(r*r)+m*m/(i*i);b>1&&(b=Y.sqrt(b),r=b*r,i=b*i);var _=r*r,w=i*i,k=(s==o?-1:1)*Y.sqrt(H((_*w-_*m*m-w*y*y)/(_*m*m+w*y*y))),B=k*r*m/i+(t+l)/2,C=k*-i*y/r+(e+h)/2,S=Y.asin(((e-C)/i).toFixed(9)),A=Y.asin(((h-C)/i).toFixed(9));S=t<B?U-S:S,A=l<B?U-A:A,S<0&&(S=2*U+S),A<0&&(A=2*U+A),o&&S>A&&(S-=2*U),!o&&A>S&&(A-=2*U)}var T=A-S;if(H(T)>c){var E=A,M=l,N=h;A=S+c*(o&&A>S?1:-1),l=B+r*Y.cos(A),h=C+i*Y.sin(A),p=Ut(l,h,r,i,a,0,o,M,N,[A,E,B,C])}T=A-S;var L=Y.cos(S),z=Y.sin(S),F=Y.cos(A),R=Y.sin(A),j=Y.tan(T/4),I=4/3*r*j,D=4/3*i*j,V=[t,e],O=[t+I*z,e-D*L],W=[l+I*R,h-D*F],G=[l,h];if(O[0]=2*V[0]-O[0],O[1]=2*V[1]-O[1],u)return[O,W,G][P](p);p=[O,W,G][P](p).join()[q](\",\");for(var X=[],$=0,Z=p.length;$<Z;$++)X[$]=$%2?g(p[$-1],p[$],f).y:g(p[$],p[$+1],f).x;return X},$t=function(t,e,r,i,n,a,s,o,l){var h=1-l;return{x:X(h,3)*t+3*X(h,2)*l*r+3*h*l*l*n+X(l,3)*s,y:X(h,3)*e+3*X(h,2)*l*i+3*h*l*l*a+X(l,3)*o}},Zt=n(function(t,e,r,i,n,a,s,o){var l=n-2*r+t-(s-2*n+r),h=2*(r-t)-2*(n-r),u=t-r,c=(-h+Y.sqrt(h*h-4*l*u))/2/l,f=(-h-Y.sqrt(h*h-4*l*u))/2/l,p=[e,o],d=[t,s],g;return H(c)>\"1e12\"&&(c=.5),H(f)>\"1e12\"&&(f=.5),c>0&&c<1&&(g=$t(t,e,r,i,n,a,s,o,c),d.push(g.x),p.push(g.y)),f>0&&f<1&&(g=$t(t,e,r,i,n,a,s,o,f),d.push(g.x),p.push(g.y)),l=a-2*i+e-(o-2*a+i),h=2*(i-e)-2*(a-i),u=e-i,c=(-h+Y.sqrt(h*h-4*l*u))/2/l,f=(-h-Y.sqrt(h*h-4*l*u))/2/l,H(c)>\"1e12\"&&(c=.5),H(f)>\"1e12\"&&(f=.5),c>0&&c<1&&(g=$t(t,e,r,i,n,a,s,o,c),d.push(g.x),p.push(g.y)),f>0&&f<1&&(g=$t(t,e,r,i,n,a,s,o,f),d.push(g.x),p.push(g.y)),{min:{x:G[z](0,d),y:G[z](0,p)},max:{x:W[z](0,d),y:W[z](0,p)}}}),Qt=e._path2curve=n(function(t,e){var r=!e&&Vt(t);if(!e&&r.curve)return Yt(r.curve);for(var i=Gt(t),n=e&&Gt(e),a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},s={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o=(function(t,e,r){var i,n,a={T:1,Q:1};if(!t)return[\"C\",e.x,e.y,e.x,e.y,e.x,e.y];switch(!(t[0]in a)&&(e.qx=e.qy=null),t[0]){case\"M\":e.X=t[1],e.Y=t[2];break;case\"A\":t=[\"C\"][P](Ut[z](0,[e.x,e.y][P](t.slice(1))));break;case\"S\":\"C\"==r||\"S\"==r?(i=2*e.x-e.bx,n=2*e.y-e.by):(i=e.x,n=e.y),t=[\"C\",i,n][P](t.slice(1));break;case\"T\":\"Q\"==r||\"T\"==r?(e.qx=2*e.x-e.qx,e.qy=2*e.y-e.qy):(e.qx=e.x,e.qy=e.y),t=[\"C\"][P](Xt(e.x,e.y,e.qx,e.qy,t[1],t[2]));break;case\"Q\":e.qx=t[1],e.qy=t[2],t=[\"C\"][P](Xt(e.x,e.y,t[1],t[2],t[3],t[4]));break;case\"L\":t=[\"C\"][P](Ht(e.x,e.y,t[1],t[2]));break;case\"H\":t=[\"C\"][P](Ht(e.x,e.y,t[1],e.y));break;case\"V\":t=[\"C\"][P](Ht(e.x,e.y,e.x,t[1]));break;case\"Z\":t=[\"C\"][P](Ht(e.x,e.y,e.X,e.Y))}return t}),l=function(t,e){if(t[e].length>7){t[e].shift();for(var r=t[e];r.length;)u[e]=\"A\",n&&(c[e]=\"A\"),t.splice(e++,0,[\"C\"][P](r.splice(0,6)));t.splice(e,1),g=W(i.length,n&&n.length||0)}},h=function(t,e,r,a,s){t&&e&&\"M\"==t[s][0]&&\"M\"!=e[s][0]&&(e.splice(s,0,[\"M\",a.x,a.y]),r.bx=0,r.by=0,r.x=t[s][1],r.y=t[s][2],g=W(i.length,n&&n.length||0))},u=[],c=[],f=\"\",p=\"\",d=0,g=W(i.length,n&&n.length||0);d<g;d++){i[d]&&(f=i[d][0]),\"C\"!=f&&(u[d]=f,d&&(p=u[d-1])),i[d]=o(i[d],a,p),\"A\"!=u[d]&&\"C\"==f&&(u[d]=\"C\"),l(i,d),n&&(n[d]&&(f=n[d][0]),\"C\"!=f&&(c[d]=f,d&&(p=c[d-1])),n[d]=o(n[d],s,p),\"A\"!=c[d]&&\"C\"==f&&(c[d]=\"C\"),l(n,d)),h(i,n,a,s,d),h(n,i,s,a,d);var v=i[d],x=n&&n[d],y=v.length,m=n&&x.length;a.x=v[y-2],a.y=v[y-1],a.bx=ht(v[y-4])||a.x,a.by=ht(v[y-3])||a.y,s.bx=n&&(ht(x[m-4])||s.x),s.by=n&&(ht(x[m-3])||s.y),s.x=n&&x[m-2],s.y=n&&x[m-1]}return n||(r.curve=Yt(i)),n?[i,n]:i},null,Yt),Jt=e._parseDots=n(function(t){for(var r=[],i=0,n=t.length;i<n;i++){var a={},s=t[i].match(/^([^:]*):?([\\d\\.]*)/);if(a.color=e.getRGB(s[1]),a.color.error)return null;a.opacity=a.color.opacity,a.color=a.color.hex,s[2]&&(a.offset=s[2]+\"%\"),r.push(a)}for(i=1,n=r.length-1;i<n;i++)if(!r[i].offset){for(var o=ht(r[i-1].offset||0),l=0,h=i+1;h<n;h++)if(r[h].offset){l=r[h].offset;break}l||(l=100,h=n),l=ht(l);for(var u=(l-o)/(h-i+1);i<h;i++)o+=u,r[i].offset=o+\"%\"}return r}),Kt=e._tear=function(t,e){t==e.top&&(e.top=t.prev),t==e.bottom&&(e.bottom=t.next),t.next&&(t.next.prev=t.prev),t.prev&&(t.prev.next=t.next)},te=e._tofront=function(t,e){e.top!==t&&(Kt(t,e),t.next=null,t.prev=e.top,e.top.next=t,e.top=t)},ee=e._toback=function(t,e){e.bottom!==t&&(Kt(t,e),t.next=e.bottom,t.prev=null,e.bottom.prev=t,e.bottom=t)},re=e._insertafter=function(t,e,r){Kt(t,r),e==r.top&&(r.top=t),e.next&&(e.next.prev=t),t.next=e.next,t.prev=e,e.next=t},ie=e._insertbefore=function(t,e,r){Kt(t,r),e==r.bottom&&(r.bottom=t),e.prev&&(e.prev.next=t),t.prev=e.prev,e.prev=t,t.next=e},ne=e.toMatrix=function(t,e){var r=Ot(t),i={_:{transform:R},getBBox:function(){return r}};return se(i,e),i.matrix},ae=e.transformPath=function(t,e){return Mt(t,ne(t,e))},se=e._extractTransform=function(t,r){if(null==r)return t._.transform;r=I(r).replace(/\\.{3}|\\u2026/g,t._.transform||R);var i=e.parseTransformString(r),n=0,a=0,s=0,o=1,l=1,h=t._,u=new g;if(h.transform=i||[],i)for(var c=0,f=i.length;c<f;c++){var p=i[c],d=p.length,v=I(p[0]).toLowerCase(),x=p[0]!=v,y=x?u.invert():0,m,b,_,w,k;\"t\"==v&&3==d?x?(m=y.x(0,0),b=y.y(0,0),_=y.x(p[1],p[2]),w=y.y(p[1],p[2]),u.translate(_-m,w-b)):u.translate(p[1],p[2]):\"r\"==v?2==d?(k=k||t.getBBox(1),u.rotate(p[1],k.x+k.width/2,k.y+k.height/2),n+=p[1]):4==d&&(x?(_=y.x(p[2],p[3]),w=y.y(p[2],p[3]),u.rotate(p[1],_,w)):u.rotate(p[1],p[2],p[3]),n+=p[1]):\"s\"==v?2==d||3==d?(k=k||t.getBBox(1),u.scale(p[1],p[d-1],k.x+k.width/2,k.y+k.height/2),o*=p[1],l*=p[d-1]):5==d&&(x?(_=y.x(p[3],p[4]),w=y.y(p[3],p[4]),u.scale(p[1],p[2],_,w)):u.scale(p[1],p[2],p[3],p[4]),o*=p[1],l*=p[2]):\"m\"==v&&7==d&&u.add(p[1],p[2],p[3],p[4],p[5],p[6]),h.dirtyT=1,t.matrix=u}t.matrix=u,h.sx=o,h.sy=l,h.deg=n,h.dx=a=u.e,h.dy=s=u.f,1==o&&1==l&&!n&&h.bbox?(h.bbox.x+=+a,h.bbox.y+=+s):h.dirtyT=1},oe=function(t){var e=t[0];switch(e.toLowerCase()){case\"t\":return[e,0,0];case\"m\":return[e,1,0,0,1,0,0];case\"r\":return 4==t.length?[e,0,t[2],t[3]]:[e,0];case\"s\":return 5==t.length?[e,1,1,t[3],t[4]]:3==t.length?[e,1,1]:[e,1]}},le=e._equaliseTransform=function(t,r){r=I(r).replace(/\\.{3}|\\u2026/g,t),t=e.parseTransformString(t)||[],r=e.parseTransformString(r)||[];for(var i=W(t.length,r.length),n=[],a=[],s=0,o,l,h,u;s<i;s++){if(h=t[s]||oe(r[s]),u=r[s]||oe(h),h[0]!=u[0]||\"r\"==h[0].toLowerCase()&&(h[2]!=u[2]||h[3]!=u[3])||\"s\"==h[0].toLowerCase()&&(h[3]!=u[3]||h[4]!=u[4]))return;for(n[s]=[],a[s]=[],o=0,l=W(h.length,u.length);o<l;o++)o in h&&(n[s][o]=h[o]),o in u&&(a[s][o]=u[o])}return{from:n,to:a}};e._getContainer=function(t,r,i,n){var a;if(a=null!=n||e.is(t,\"object\")?t:T.doc.getElementById(t),null!=a)return a.tagName?null==r?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:r,height:i}:{container:1,x:t,y:r,width:i,height:n}},e.pathToRelative=Wt,e._engine={},e.path2curve=Qt,e.matrix=function(t,e,r,i,n,a){return new g(t,e,r,i,n,a)},function(t){function r(t){return t[0]*t[0]+t[1]*t[1]}function i(t){var e=Y.sqrt(r(t));t[0]&&(t[0]/=e),t[1]&&(t[1]/=e)}t.add=function(t,e,r,i,n,a){var s=[[],[],[]],o=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],l=[[t,r,n],[e,i,a],[0,0,1]],h,u,c,f;for(t&&t instanceof g&&(l=[[t.a,t.c,t.e],[t.b,t.d,t.f],[0,0,1]]),h=0;h<3;h++)for(u=0;u<3;u++){for(f=0,c=0;c<3;c++)f+=o[h][c]*l[c][u];s[h][u]=f}this.a=s[0][0],this.b=s[1][0],this.c=s[0][1],this.d=s[1][1],this.e=s[0][2],this.f=s[1][2]},t.invert=function(){var t=this,e=t.a*t.d-t.b*t.c;return new g(t.d/e,-t.b/e,-t.c/e,t.a/e,(t.c*t.f-t.d*t.e)/e,(t.b*t.e-t.a*t.f)/e)},t.clone=function(){return new g(this.a,this.b,this.c,this.d,this.e,this.f)},t.translate=function(t,e){\nthis.add(1,0,0,1,t,e)},t.scale=function(t,e,r,i){null==e&&(e=t),(r||i)&&this.add(1,0,0,1,r,i),this.add(t,0,0,e,0,0),(r||i)&&this.add(1,0,0,1,-r,-i)},t.rotate=function(t,r,i){t=e.rad(t),r=r||0,i=i||0;var n=+Y.cos(t).toFixed(9),a=+Y.sin(t).toFixed(9);this.add(n,a,-a,n,r,i),this.add(1,0,0,1,-r,-i)},t.x=function(t,e){return t*this.a+e*this.c+this.e},t.y=function(t,e){return t*this.b+e*this.d+this.f},t.get=function(t){return+this[I.fromCharCode(97+t)].toFixed(4)},t.toString=function(){return e.svg?\"matrix(\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+\")\":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},t.toFilter=function(){return\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+this.get(0)+\", M12=\"+this.get(2)+\", M21=\"+this.get(1)+\", M22=\"+this.get(3)+\", Dx=\"+this.get(4)+\", Dy=\"+this.get(5)+\", sizingmethod='auto expand')\"},t.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},t.split=function(){var t={};t.dx=this.e,t.dy=this.f;var n=[[this.a,this.c],[this.b,this.d]];t.scalex=Y.sqrt(r(n[0])),i(n[0]),t.shear=n[0][0]*n[1][0]+n[0][1]*n[1][1],n[1]=[n[1][0]-n[0][0]*t.shear,n[1][1]-n[0][1]*t.shear],t.scaley=Y.sqrt(r(n[1])),i(n[1]),t.shear/=t.scaley;var a=-n[0][1],s=n[1][1];return s<0?(t.rotate=e.deg(Y.acos(s)),a<0&&(t.rotate=360-t.rotate)):t.rotate=e.deg(Y.asin(a)),t.isSimple=!(+t.shear.toFixed(9)||t.scalex.toFixed(9)!=t.scaley.toFixed(9)&&t.rotate),t.isSuperSimple=!+t.shear.toFixed(9)&&t.scalex.toFixed(9)==t.scaley.toFixed(9)&&!t.rotate,t.noRotation=!+t.shear.toFixed(9)&&!t.rotate,t},t.toTransformString=function(t){var e=t||this[q]();return e.isSimple?(e.scalex=+e.scalex.toFixed(4),e.scaley=+e.scaley.toFixed(4),e.rotate=+e.rotate.toFixed(4),(e.dx||e.dy?\"t\"+[e.dx,e.dy]:R)+(1!=e.scalex||1!=e.scaley?\"s\"+[e.scalex,e.scaley,0,0]:R)+(e.rotate?\"r\"+[e.rotate,0,0]:R)):\"m\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(g.prototype);for(var he=function(){this.returnValue=!1},ue=function(){return this.originalEvent.preventDefault()},ce=function(){this.cancelBubble=!0},fe=function(){return this.originalEvent.stopPropagation()},pe=function(t){var e=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,r=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft;return{x:t.clientX+r,y:t.clientY+e}},de=function(){return T.doc.addEventListener?function(t,e,r,i){var n=function(t){var e=pe(t);return r.call(i,t,e.x,e.y)};if(t.addEventListener(e,n,!1),F&&V[e]){var a=function(e){for(var n=pe(e),a=e,s=0,o=e.targetTouches&&e.targetTouches.length;s<o;s++)if(e.targetTouches[s].target==t){e=e.targetTouches[s],e.originalEvent=a,e.preventDefault=ue,e.stopPropagation=fe;break}return r.call(i,e,n.x,n.y)};t.addEventListener(V[e],a,!1)}return function(){return t.removeEventListener(e,n,!1),F&&V[e]&&t.removeEventListener(V[e],a,!1),!0}}:T.doc.attachEvent?function(t,e,r,i){var n=function(t){t=t||T.win.event;var e=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,n=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft,a=t.clientX+n,s=t.clientY+e;return t.preventDefault=t.preventDefault||he,t.stopPropagation=t.stopPropagation||ce,r.call(i,t,a,s)};t.attachEvent(\"on\"+e,n);var a=function(){return t.detachEvent(\"on\"+e,n),!0};return a}:void 0}(),ge=[],ve=function(e){for(var r=e.clientX,i=e.clientY,n=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,a=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft,s,o=ge.length;o--;){if(s=ge[o],F&&e.touches){for(var l=e.touches.length,h;l--;)if(h=e.touches[l],h.identifier==s.el._drag.id){r=h.clientX,i=h.clientY,(e.originalEvent?e.originalEvent:e).preventDefault();break}}else e.preventDefault();var u=s.el.node,c,f=u.nextSibling,p=u.parentNode,d=u.style.display;T.win.opera&&p.removeChild(u),u.style.display=\"none\",c=s.el.paper.getElementByPoint(r,i),u.style.display=d,T.win.opera&&(f?p.insertBefore(u,f):p.appendChild(u)),c&&t(\"raphael.drag.over.\"+s.el.id,s.el,c),r+=a,i+=n,t(\"raphael.drag.move.\"+s.el.id,s.move_scope||s.el,r-s.el._drag.x,i-s.el._drag.y,r,i,e)}},xe=function(r){e.unmousemove(ve).unmouseup(xe);for(var i=ge.length,n;i--;)n=ge[i],n.el._drag={},t(\"raphael.drag.end.\"+n.el.id,n.end_scope||n.start_scope||n.move_scope||n.el,r);ge=[]},ye=e.el={},me=D.length;me--;)!function(t){e[t]=ye[t]=function(r,i){return e.is(r,\"function\")&&(this.events=this.events||[],this.events.push({name:t,f:r,unbind:de(this.shape||this.node||T.doc,t,r,i||this)})),this},e[\"un\"+t]=ye[\"un\"+t]=function(r){for(var i=this.events||[],n=i.length;n--;)i[n].name!=t||!e.is(r,\"undefined\")&&i[n].f!=r||(i[n].unbind(),i.splice(n,1),!i.length&&delete this.events);return this}}(D[me]);ye.data=function(r,i){var n=wt[this.id]=wt[this.id]||{};if(0==arguments.length)return n;if(1==arguments.length){if(e.is(r,\"object\")){for(var a in r)r[A](a)&&this.data(a,r[a]);return this}return t(\"raphael.data.get.\"+this.id,this,n[r],r),n[r]}return n[r]=i,t(\"raphael.data.set.\"+this.id,this,i,r),this},ye.removeData=function(t){return null==t?wt[this.id]={}:wt[this.id]&&delete wt[this.id][t],this},ye.getData=function(){return r(wt[this.id]||{})},ye.hover=function(t,e,r,i){return this.mouseover(t,r).mouseout(e,i||r)},ye.unhover=function(t,e){return this.unmouseover(t).unmouseout(e)};var be=[];ye.drag=function(r,i,n,a,s,o){function l(l){(l.originalEvent||l).preventDefault();var h=l.clientX,u=l.clientY,c=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,f=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft;if(this._drag.id=l.identifier,F&&l.touches)for(var p=l.touches.length,d;p--;)if(d=l.touches[p],this._drag.id=d.identifier,d.identifier==this._drag.id){h=d.clientX,u=d.clientY;break}this._drag.x=h+f,this._drag.y=u+c,!ge.length&&e.mousemove(ve).mouseup(xe),ge.push({el:this,move_scope:a,start_scope:s,end_scope:o}),i&&t.on(\"raphael.drag.start.\"+this.id,i),r&&t.on(\"raphael.drag.move.\"+this.id,r),n&&t.on(\"raphael.drag.end.\"+this.id,n),t(\"raphael.drag.start.\"+this.id,s||a||this,l.clientX+f,l.clientY+c,l)}return this._drag={},be.push({el:this,start:l}),this.mousedown(l),this},ye.onDragOver=function(e){e?t.on(\"raphael.drag.over.\"+this.id,e):t.unbind(\"raphael.drag.over.\"+this.id)},ye.undrag=function(){for(var r=be.length;r--;)be[r].el==this&&(this.unmousedown(be[r].start),be.splice(r,1),t.unbind(\"raphael.drag.*.\"+this.id));!be.length&&e.unmousemove(ve).unmouseup(xe),ge=[]},N.circle=function(t,r,i){var n=e._engine.circle(this,t||0,r||0,i||0);return this.__set__&&this.__set__.push(n),n},N.rect=function(t,r,i,n,a){var s=e._engine.rect(this,t||0,r||0,i||0,n||0,a||0);return this.__set__&&this.__set__.push(s),s},N.ellipse=function(t,r,i,n){var a=e._engine.ellipse(this,t||0,r||0,i||0,n||0);return this.__set__&&this.__set__.push(a),a},N.path=function(t){t&&!e.is(t,Z)&&!e.is(t[0],Q)&&(t+=R);var r=e._engine.path(e.format[z](e,arguments),this);return this.__set__&&this.__set__.push(r),r},N.image=function(t,r,i,n,a){var s=e._engine.image(this,t||\"about:blank\",r||0,i||0,n||0,a||0);return this.__set__&&this.__set__.push(s),s},N.text=function(t,r,i){var n=e._engine.text(this,t||0,r||0,I(i));return this.__set__&&this.__set__.push(n),n},N.set=function(t){!e.is(t,\"array\")&&(t=Array.prototype.splice.call(arguments,0,arguments.length));var r=new ze(t);return this.__set__&&this.__set__.push(r),r.paper=this,r.type=\"set\",r},N.setStart=function(t){this.__set__=t||this.set()},N.setFinish=function(t){var e=this.__set__;return delete this.__set__,e},N.getSize=function(){var t=this.canvas.parentNode;return{width:t.offsetWidth,height:t.offsetHeight}},N.setSize=function(t,r){return e._engine.setSize.call(this,t,r)},N.setViewBox=function(t,r,i,n,a){return e._engine.setViewBox.call(this,t,r,i,n,a)},N.top=N.bottom=null,N.raphael=e;var _e=function(t){var e=t.getBoundingClientRect(),r=t.ownerDocument,i=r.body,n=r.documentElement,a=n.clientTop||i.clientTop||0,s=n.clientLeft||i.clientLeft||0,o=e.top+(T.win.pageYOffset||n.scrollTop||i.scrollTop)-a,l=e.left+(T.win.pageXOffset||n.scrollLeft||i.scrollLeft)-s;return{y:o,x:l}};N.getElementByPoint=function(t,e){var r=this,i=r.canvas,n=T.doc.elementFromPoint(t,e);if(T.win.opera&&\"svg\"==n.tagName){var a=_e(i),s=i.createSVGRect();s.x=t-a.x,s.y=e-a.y,s.width=s.height=1;var o=i.getIntersectionList(s,null);o.length&&(n=o[o.length-1])}if(!n)return null;for(;n.parentNode&&n!=i.parentNode&&!n.raphael;)n=n.parentNode;return n==r.canvas.parentNode&&(n=i),n=n&&n.raphael?r.getById(n.raphaelid):null},N.getElementsByBBox=function(t){var r=this.set();return this.forEach(function(i){e.isBBoxIntersect(i.getBBox(),t)&&r.push(i)}),r},N.getById=function(t){for(var e=this.bottom;e;){if(e.id==t)return e;e=e.next}return null},N.forEach=function(t,e){for(var r=this.bottom;r;){if(t.call(e,r)===!1)return this;r=r.next}return this},N.getElementsByPoint=function(t,e){var r=this.set();return this.forEach(function(i){i.isPointInside(t,e)&&r.push(i)}),r},ye.isPointInside=function(t,r){var i=this.realPath=Et[this.type](this);return this.attr(\"transform\")&&this.attr(\"transform\").length&&(i=e.transformPath(i,this.attr(\"transform\"))),e.isPointInsidePath(i,t,r)},ye.getBBox=function(t){if(this.removed)return{};var e=this._;return t?(!e.dirty&&e.bboxwt||(this.realPath=Et[this.type](this),e.bboxwt=Ot(this.realPath),e.bboxwt.toString=x,e.dirty=0),e.bboxwt):((e.dirty||e.dirtyT||!e.bbox)&&(!e.dirty&&this.realPath||(e.bboxwt=0,this.realPath=Et[this.type](this)),e.bbox=Ot(Mt(this.realPath,this.matrix)),e.bbox.toString=x,e.dirty=e.dirtyT=0),e.bbox)},ye.clone=function(){if(this.removed)return null;var t=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(t),t},ye.glow=function(t){if(\"text\"==this.type)return null;t=t||{};var e={width:(t.width||10)+(+this.attr(\"stroke-width\")||1),fill:t.fill||!1,opacity:null==t.opacity?.5:t.opacity,offsetx:t.offsetx||0,offsety:t.offsety||0,color:t.color||\"#000\"},r=e.width/2,i=this.paper,n=i.set(),a=this.realPath||Et[this.type](this);a=this.matrix?Mt(a,this.matrix):a;for(var s=1;s<r+1;s++)n.push(i.path(a).attr({stroke:e.color,fill:e.fill?e.color:\"none\",\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"stroke-width\":+(e.width/r*s).toFixed(3),opacity:+(e.opacity/r).toFixed(3)}));return n.insertBefore(this).translate(e.offsetx,e.offsety)};var we={},ke=function(t,r,i,n,a,s,o,u,c){return null==c?l(t,r,i,n,a,s,o,u):e.findDotsAtSegment(t,r,i,n,a,s,o,u,h(t,r,i,n,a,s,o,u,c))},Be=function(t,r){return function(i,n,a){i=Qt(i);for(var s,o,l,h,u=\"\",c={},f,p=0,d=0,g=i.length;d<g;d++){if(l=i[d],\"M\"==l[0])s=+l[1],o=+l[2];else{if(h=ke(s,o,l[1],l[2],l[3],l[4],l[5],l[6]),p+h>n){if(r&&!c.start){if(f=ke(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p),u+=[\"C\"+f.start.x,f.start.y,f.m.x,f.m.y,f.x,f.y],a)return u;c.start=u,u=[\"M\"+f.x,f.y+\"C\"+f.n.x,f.n.y,f.end.x,f.end.y,l[5],l[6]].join(),p+=h,s=+l[5],o=+l[6];continue}if(!t&&!r)return f=ke(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p),{x:f.x,y:f.y,alpha:f.alpha}}p+=h,s=+l[5],o=+l[6]}u+=l.shift()+l}return c.end=u,f=t?p:r?c:e.findDotsAtSegment(s,o,l[0],l[1],l[2],l[3],l[4],l[5],1),f.alpha&&(f={x:f.x,y:f.y,alpha:f.alpha}),f}},Ce=Be(1),Se=Be(),Ae=Be(0,1);e.getTotalLength=Ce,e.getPointAtLength=Se,e.getSubpath=function(t,e,r){if(this.getTotalLength(t)-r<1e-6)return Ae(t,e).end;var i=Ae(t,r,1);return e?Ae(i,e).end:i},ye.getTotalLength=function(){var t=this.getPath();if(t)return this.node.getTotalLength?this.node.getTotalLength():Ce(t)},ye.getPointAtLength=function(t){var e=this.getPath();if(e)return Se(e,t)},ye.getPath=function(){var t,r=e._getPath[this.type];if(\"text\"!=this.type&&\"set\"!=this.type)return r&&(t=r(this)),t},ye.getSubpath=function(t,r){var i=this.getPath();if(i)return e.getSubpath(i,t,r)};var Te=e.easing_formulas={linear:function(t){return t},\"<\":function(t){return X(t,1.7)},\">\":function(t){return X(t,.48)},\"<>\":function(t){var e=.48-t/1.04,r=Y.sqrt(.1734+e*e),i=r-e,n=X(H(i),1/3)*(i<0?-1:1),a=-r-e,s=X(H(a),1/3)*(a<0?-1:1),o=n+s+.5;return 3*(1-o)*o*o+o*o*o},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){t-=1;var e=1.70158;return t*t*((e+1)*t+e)+1},elastic:function(t){return t==!!t?t:X(2,-10*t)*Y.sin((t-.075)*(2*U)/.3)+1},bounce:function(t){var e=7.5625,r=2.75,i;return t<1/r?i=e*t*t:t<2/r?(t-=1.5/r,i=e*t*t+.75):t<2.5/r?(t-=2.25/r,i=e*t*t+.9375):(t-=2.625/r,i=e*t*t+.984375),i}};Te.easeIn=Te[\"ease-in\"]=Te[\"<\"],Te.easeOut=Te[\"ease-out\"]=Te[\">\"],Te.easeInOut=Te[\"ease-in-out\"]=Te[\"<>\"],Te[\"back-in\"]=Te.backIn,Te[\"back-out\"]=Te.backOut;var Ee=[],Me=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){setTimeout(t,16)},Ne=function(){for(var r=+new Date,i=0;i<Ee.length;i++){var n=Ee[i];if(!n.el.removed&&!n.paused){var a=r-n.start,s=n.ms,o=n.easing,l=n.from,h=n.diff,u=n.to,c=n.t,f=n.el,p={},d,g={},v;if(n.initstatus?(a=(n.initstatus*n.anim.top-n.prev)/(n.percent-n.prev)*s,n.status=n.initstatus,delete n.initstatus,n.stop&&Ee.splice(i--,1)):n.status=(n.prev+(n.percent-n.prev)*(a/s))/n.anim.top,!(a<0))if(a<s){var x=o(a/s);for(var y in l)if(l[A](y)){switch(pt[y]){case $:d=+l[y]+x*s*h[y];break;case\"colour\":d=\"rgb(\"+[Le(ot(l[y].r+x*s*h[y].r)),Le(ot(l[y].g+x*s*h[y].g)),Le(ot(l[y].b+x*s*h[y].b))].join(\",\")+\")\";break;case\"path\":d=[];for(var m=0,_=l[y].length;m<_;m++){d[m]=[l[y][m][0]];for(var w=1,k=l[y][m].length;w<k;w++)d[m][w]=+l[y][m][w]+x*s*h[y][m][w];d[m]=d[m].join(j)}d=d.join(j);break;case\"transform\":if(h[y].real)for(d=[],m=0,_=l[y].length;m<_;m++)for(d[m]=[l[y][m][0]],w=1,k=l[y][m].length;w<k;w++)d[m][w]=l[y][m][w]+x*s*h[y][m][w];else{var B=function(t){return+l[y][t]+x*s*h[y][t]};d=[[\"m\",B(0),B(1),B(2),B(3),B(4),B(5)]]}break;case\"csv\":if(\"clip-rect\"==y)for(d=[],m=4;m--;)d[m]=+l[y][m]+x*s*h[y][m];break;default:var C=[][P](l[y]);for(d=[],m=f.paper.customAttributes[y].length;m--;)d[m]=+C[m]+x*s*h[y][m]}p[y]=d}f.attr(p),function(e,r,i){setTimeout(function(){t(\"raphael.anim.frame.\"+e,r,i)})}(f.id,f,n.anim)}else{if(function(r,i,n){setTimeout(function(){t(\"raphael.anim.frame.\"+i.id,i,n),t(\"raphael.anim.finish.\"+i.id,i,n),e.is(r,\"function\")&&r.call(i)})}(n.callback,f,n.anim),f.attr(u),Ee.splice(i--,1),n.repeat>1&&!n.next){for(v in u)u[A](v)&&(g[v]=n.totalOrigin[v]);n.el.attr(g),b(n.anim,n.el,n.anim.percents[0],null,n.totalOrigin,n.repeat-1)}n.next&&!n.stop&&b(n.anim,n.el,n.next,null,n.totalOrigin,n.repeat)}}}Ee.length&&Me(Ne)},Le=function(t){return t>255?255:t<0?0:t};ye.animateWith=function(t,r,i,n,a,s){var o=this;if(o.removed)return s&&s.call(o),o;var l=i instanceof m?i:e.animation(i,n,a,s),h,u;b(l,o,l.percents[0],null,o.attr());for(var c=0,f=Ee.length;c<f;c++)if(Ee[c].anim==r&&Ee[c].el==t){Ee[f-1].start=Ee[c].start;break}return o},ye.onAnimation=function(e){return e?t.on(\"raphael.anim.frame.\"+this.id,e):t.unbind(\"raphael.anim.frame.\"+this.id),this},m.prototype.delay=function(t){var e=new m(this.anim,this.ms);return e.times=this.times,e.del=+t||0,e},m.prototype.repeat=function(t){var e=new m(this.anim,this.ms);return e.del=this.del,e.times=Y.floor(W(t,0))||1,e},e.animation=function(t,r,i,n){if(t instanceof m)return t;!e.is(i,\"function\")&&i||(n=n||i||null,i=null),t=Object(t),r=+r||0;var a={},s,o;for(o in t)t[A](o)&&ht(o)!=o&&ht(o)+\"%\"!=o&&(s=!0,a[o]=t[o]);if(s)return i&&(a.easing=i),n&&(a.callback=n),new m({100:a},r);if(n){var l=0;for(var h in t){var u=ut(h);t[A](h)&&u>l&&(l=u)}l+=\"%\",!t[l].callback&&(t[l].callback=n)}return new m(t,r)},ye.animate=function(t,r,i,n){var a=this;if(a.removed)return n&&n.call(a),a;var s=t instanceof m?t:e.animation(t,r,i,n);return b(s,a,s.percents[0],null,a.attr()),a},ye.setTime=function(t,e){return t&&null!=e&&this.status(t,G(e,t.ms)/t.ms),this},ye.status=function(t,e){var r=[],i=0,n,a;if(null!=e)return b(t,this,-1,G(e,1)),this;for(n=Ee.length;i<n;i++)if(a=Ee[i],a.el.id==this.id&&(!t||a.anim==t)){if(t)return a.status;r.push({anim:a.anim,status:a.status})}return t?0:r},ye.pause=function(e){for(var r=0;r<Ee.length;r++)Ee[r].el.id!=this.id||e&&Ee[r].anim!=e||t(\"raphael.anim.pause.\"+this.id,this,Ee[r].anim)!==!1&&(Ee[r].paused=!0);return this},ye.resume=function(e){for(var r=0;r<Ee.length;r++)if(Ee[r].el.id==this.id&&(!e||Ee[r].anim==e)){var i=Ee[r];t(\"raphael.anim.resume.\"+this.id,this,i.anim)!==!1&&(delete i.paused,this.status(i.anim,i.status))}return this},ye.stop=function(e){for(var r=0;r<Ee.length;r++)Ee[r].el.id!=this.id||e&&Ee[r].anim!=e||t(\"raphael.anim.stop.\"+this.id,this,Ee[r].anim)!==!1&&Ee.splice(r--,1);return this},t.on(\"raphael.remove\",_),t.on(\"raphael.clear\",_),ye.toString=function(){return\"Raphaël’s object\"};var ze=function(t){if(this.items=[],this.length=0,this.type=\"set\",t)for(var e=0,r=t.length;e<r;e++)!t[e]||t[e].constructor!=ye.constructor&&t[e].constructor!=ze||(this[this.items.length]=this.items[this.items.length]=t[e],this.length++)},Pe=ze.prototype;Pe.push=function(){for(var t,e,r=0,i=arguments.length;r<i;r++)t=arguments[r],!t||t.constructor!=ye.constructor&&t.constructor!=ze||(e=this.items.length,this[e]=this.items[e]=t,this.length++);return this},Pe.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},Pe.forEach=function(t,e){for(var r=0,i=this.items.length;r<i;r++)if(t.call(e,this.items[r],r)===!1)return this;return this};for(var Fe in ye)ye[A](Fe)&&(Pe[Fe]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t][z](r,e)})}}(Fe));return Pe.attr=function(t,r){if(t&&e.is(t,Q)&&e.is(t[0],\"object\"))for(var i=0,n=t.length;i<n;i++)this.items[i].attr(t[i]);else for(var a=0,s=this.items.length;a<s;a++)this.items[a].attr(t,r);return this},Pe.clear=function(){for(;this.length;)this.pop()},Pe.splice=function(t,e,r){t=t<0?W(this.length+t,0):t,e=W(0,G(this.length-t,e));var i=[],n=[],a=[],s;for(s=2;s<arguments.length;s++)a.push(arguments[s]);for(s=0;s<e;s++)n.push(this[t+s]);for(;s<this.length-t;s++)i.push(this[t+s]);var o=a.length;for(s=0;s<o+i.length;s++)this.items[t+s]=this[t+s]=s<o?a[s]:i[s-o];for(s=this.items.length=this.length-=e-o;this[s];)delete this[s++];return new ze(n)},Pe.exclude=function(t){for(var e=0,r=this.length;e<r;e++)if(this[e]==t)return this.splice(e,1),!0},Pe.animate=function(t,r,i,n){(e.is(i,\"function\")||!i)&&(n=i||null);var a=this.items.length,s=a,o,l=this,h;if(!a)return this;n&&(h=function(){!--a&&n.call(l)}),i=e.is(i,Z)?i:h;var u=e.animation(t,r,i,h);for(o=this.items[--s].animate(u);s--;)this.items[s]&&!this.items[s].removed&&this.items[s].animateWith(o,u,u),this.items[s]&&!this.items[s].removed||a--;return this},Pe.insertAfter=function(t){for(var e=this.items.length;e--;)this.items[e].insertAfter(t);return this},Pe.getBBox=function(){for(var t=[],e=[],r=[],i=[],n=this.items.length;n--;)if(!this.items[n].removed){var a=this.items[n].getBBox();t.push(a.x),e.push(a.y),r.push(a.x+a.width),i.push(a.y+a.height)}return t=G[z](0,t),e=G[z](0,e),r=W[z](0,r),i=W[z](0,i),{x:t,y:e,x2:r,y2:i,width:r-t,height:i-e}},Pe.clone=function(t){t=this.paper.set();for(var e=0,r=this.items.length;e<r;e++)t.push(this.items[e].clone());return t},Pe.toString=function(){return\"Raphaël‘s set\"},Pe.glow=function(t){var e=this.paper.set();return this.forEach(function(r,i){var n=r.glow(t);null!=n&&n.forEach(function(t,r){e.push(t)})}),e},Pe.isPointInside=function(t,e){var r=!1;return this.forEach(function(i){if(i.isPointInside(t,e))return r=!0,!1}),r},e.registerFont=function(t){if(!t.face)return t;this.fonts=this.fonts||{};var e={w:t.w,face:{},glyphs:{}},r=t.face[\"font-family\"];for(var i in t.face)t.face[A](i)&&(e.face[i]=t.face[i]);if(this.fonts[r]?this.fonts[r].push(e):this.fonts[r]=[e],!t.svg){e.face[\"units-per-em\"]=ut(t.face[\"units-per-em\"],10);for(var n in t.glyphs)if(t.glyphs[A](n)){var a=t.glyphs[n];if(e.glyphs[n]={w:a.w,k:{},d:a.d&&\"M\"+a.d.replace(/[mlcxtrv]/g,function(t){return{l:\"L\",c:\"C\",x:\"z\",t:\"m\",r:\"l\",v:\"c\"}[t]||\"M\"})+\"z\"},a.k)for(var s in a.k)a[A](s)&&(e.glyphs[n].k[s]=a.k[s])}}return t},N.getFont=function(t,r,i,n){if(n=n||\"normal\",i=i||\"normal\",r=+r||{normal:400,bold:700,lighter:300,bolder:800}[r]||400,e.fonts){var a=e.fonts[t];if(!a){var s=new RegExp(\"(^|\\\\s)\"+t.replace(/[^\\w\\d\\s+!~.:_-]/g,R)+\"(\\\\s|$)\",\"i\");for(var o in e.fonts)if(e.fonts[A](o)&&s.test(o)){a=e.fonts[o];break}}var l;if(a)for(var h=0,u=a.length;h<u&&(l=a[h],l.face[\"font-weight\"]!=r||l.face[\"font-style\"]!=i&&l.face[\"font-style\"]||l.face[\"font-stretch\"]!=n);h++);return l}},N.print=function(t,r,i,n,a,s,o,l){s=s||\"middle\",o=W(G(o||0,1),-1),l=W(G(l||1,3),1);var h=I(i)[q](R),u=0,c=0,f=R,p;if(e.is(n,\"string\")&&(n=this.getFont(n)),n){p=(a||16)/n.face[\"units-per-em\"];for(var d=n.face.bbox[q](k),g=+d[0],v=d[3]-d[1],x=0,y=+d[1]+(\"baseline\"==s?v+ +n.face.descent:v/2),m=0,b=h.length;m<b;m++){if(\"\\n\"==h[m])u=0,w=0,c=0,x+=v*l;else{var _=c&&n.glyphs[h[m-1]]||{},w=n.glyphs[h[m]];u+=c?(_.w||n.w)+(_.k&&_.k[h[m]]||0)+n.w*o:0,c=1}w&&w.d&&(f+=e.transformPath(w.d,[\"t\",u*p,x*p,\"s\",p,p,g,y,\"t\",(t-g)/p,(r-y)/p]))}}return this.path(f).attr({fill:\"#000\",stroke:\"none\"})},N.add=function(t){if(e.is(t,\"array\"))for(var r=this.set(),i=0,n=t.length,a;i<n;i++)a=t[i]||{},B[A](a.type)&&r.push(this[a.type]().attr(a));return r},e.format=function(t,r){var i=e.is(r,Q)?[0][P](r):arguments;return t&&e.is(t,Z)&&i.length-1&&(t=t.replace(C,function(t,e){return null==i[++e]?R:i[e]})),t||R},e.fullfill=function(){var t=/\\{([^\\}]+)\\}/g,e=/(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g,r=function(t,r,i){var n=i;return r.replace(e,function(t,e,r,i,a){e=e||i,n&&(e in n&&(n=n[e]),\"function\"==typeof n&&a&&(n=n()))}),n=(null==n||n==i?t:n)+\"\"};return function(e,i){return String(e).replace(t,function(t,e){return r(t,e,i)})}}(),e.ninja=function(){if(E.was)T.win.Raphael=E.is;else{window.Raphael=void 0;try{delete window.Raphael}catch(t){}}return e},e.st=Pe,t.on(\"raphael.DOMload\",function(){w=!0}),function(t,r,i){function n(){/in/.test(t.readyState)?setTimeout(n,9):e.eve(\"raphael.DOMload\")}null==t.readyState&&t.addEventListener&&(t.addEventListener(r,i=function(){t.removeEventListener(r,i,!1),t.readyState=\"complete\"},!1),t.readyState=\"loading\"),n()}(document,\"DOMContentLoaded\"),e}.apply(e,i),!(void 0!==n&&(t.exports=n))},function(t,e,r){var i,n;!function(r){var a=\"0.5.0\",s=\"hasOwnProperty\",o=/[\\.\\/]/,l=/\\s*,\\s*/,h=\"*\",u=function(){},c=function(t,e){return t-e},f,p,d={n:{}},g=function(){for(var t=0,e=this.length;t<e;t++)if(\"undefined\"!=typeof this[t])return this[t]},v=function(){for(var t=this.length;--t;)if(\"undefined\"!=typeof this[t])return this[t]},x=Object.prototype.toString,y=String,m=Array.isArray||function(t){return t instanceof Array||\"[object Array]\"==x.call(t)};eve=function(t,e){var r=d,i=p,n=Array.prototype.slice.call(arguments,2),a=eve.listeners(t),s=0,o=!1,l,h=[],u={},x=[],y=f,m=[];x.firstDefined=g,x.lastDefined=v,f=t,p=0;for(var b=0,_=a.length;b<_;b++)\"zIndex\"in a[b]&&(h.push(a[b].zIndex),a[b].zIndex<0&&(u[a[b].zIndex]=a[b]));for(h.sort(c);h[s]<0;)if(l=u[h[s++]],x.push(l.apply(e,n)),p)return p=i,x;for(b=0;b<_;b++)if(l=a[b],\"zIndex\"in l)if(l.zIndex==h[s]){if(x.push(l.apply(e,n)),p)break;do if(s++,l=u[h[s]],l&&x.push(l.apply(e,n)),p)break;while(l)}else u[l.zIndex]=l;else if(x.push(l.apply(e,n)),p)break;return p=i,f=y,x},eve._events=d,eve.listeners=function(t){var e=m(t)?t:t.split(o),r=d,i,n,a,s,l,u,c,f,p=[r],g=[];for(s=0,l=e.length;s<l;s++){for(f=[],u=0,c=p.length;u<c;u++)for(r=p[u].n,n=[r[e[s]],r[h]],a=2;a--;)i=n[a],i&&(f.push(i),g=g.concat(i.f||[]));p=f}return g},eve.separator=function(t){t?(t=y(t).replace(/(?=[\\.\\^\\]\\[\\-])/g,\"\\\\\"),t=\"[\"+t+\"]\",o=new RegExp(t)):o=/[\\.\\/]/},eve.on=function(t,e){if(\"function\"!=typeof e)return function(){};for(var r=m(t)?m(t[0])?t:[t]:y(t).split(l),i=0,n=r.length;i<n;i++)!function(t){for(var r=m(t)?t:y(t).split(o),i=d,n,a=0,s=r.length;a<s;a++)i=i.n,i=i.hasOwnProperty(r[a])&&i[r[a]]||(i[r[a]]={n:{}});for(i.f=i.f||[],a=0,s=i.f.length;a<s;a++)if(i.f[a]==e){n=!0;break}!n&&i.f.push(e)}(r[i]);return function(t){+t==+t&&(e.zIndex=+t)}},eve.f=function(t){var e=[].slice.call(arguments,1);return function(){eve.apply(null,[t,null].concat(e).concat([].slice.call(arguments,0)))}},eve.stop=function(){p=1},eve.nt=function(t){var e=m(f)?f.join(\".\"):f;return t?new RegExp(\"(?:\\\\.|\\\\/|^)\"+t+\"(?:\\\\.|\\\\/|$)\").test(e):e},eve.nts=function(){return m(f)?f:f.split(o)},eve.off=eve.unbind=function(t,e){if(!t)return void(eve._events=d={n:{}});var r=m(t)?m(t[0])?t:[t]:y(t).split(l);if(r.length>1)for(var i=0,n=r.length;i<n;i++)eve.off(r[i],e);else{r=m(t)?t:y(t).split(o);var a,u,c,i,n,f,p,g=[d];for(i=0,n=r.length;i<n;i++)for(f=0;f<g.length;f+=c.length-2){if(c=[f,1],a=g[f].n,r[i]!=h)a[r[i]]&&c.push(a[r[i]]);else for(u in a)a[s](u)&&c.push(a[u]);g.splice.apply(g,c)}for(i=0,n=g.length;i<n;i++)for(a=g[i];a.n;){if(e){if(a.f){for(f=0,p=a.f.length;f<p;f++)if(a.f[f]==e){a.f.splice(f,1);break}!a.f.length&&delete a.f}for(u in a.n)if(a.n[s](u)&&a.n[u].f){var v=a.n[u].f;for(f=0,p=v.length;f<p;f++)if(v[f]==e){v.splice(f,1);break}!v.length&&delete a.n[u].f}}else{delete a.f;for(u in a.n)a.n[s](u)&&a.n[u].f&&delete a.n[u].f}a=a.n}}},eve.once=function(t,e){var r=function(){return eve.off(t,r),e.apply(this,arguments)};return eve.on(t,r)},eve.version=a,eve.toString=function(){return\"You are running Eve \"+a},\"undefined\"!=typeof t&&t.exports?t.exports=eve:(i=[],n=function(){return eve}.apply(e,i),!(void 0!==n&&(t.exports=n)))}(this)},function(t,e,r){var i,n;i=[r(1)],n=function(t){if(!t||t.svg){var e=\"hasOwnProperty\",r=String,i=parseFloat,n=parseInt,a=Math,s=a.max,o=a.abs,l=a.pow,h=/[, ]+/,u=t.eve,c=\"\",f=\" \",p=\"http://www.w3.org/1999/xlink\",d={block:\"M5,0 0,2.5 5,5z\",classic:\"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",diamond:\"M2.5,0 5,2.5 2.5,5 0,2.5z\",open:\"M6,1 1,3.5 6,6\",oval:\"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"},g={};t.toString=function(){return\"Your browser supports SVG.\\nYou are running Raphaël \"+this.version};var v=function(i,n){if(n){\"string\"==typeof i&&(i=v(i));for(var a in n)n[e](a)&&(\"xlink:\"==a.substring(0,6)?i.setAttributeNS(p,a.substring(6),r(n[a])):i.setAttribute(a,r(n[a])))}else i=t._g.doc.createElementNS(\"http://www.w3.org/2000/svg\",i),i.style&&(i.style.webkitTapHighlightColor=\"rgba(0,0,0,0)\");return i},x=function(e,n){var h=\"linear\",u=e.id+n,f=.5,p=.5,d=e.node,g=e.paper,x=d.style,y=t._g.doc.getElementById(u);if(!y){if(n=r(n).replace(t._radial_gradient,function(t,e,r){if(h=\"radial\",e&&r){f=i(e),p=i(r);var n=2*(p>.5)-1;l(f-.5,2)+l(p-.5,2)>.25&&(p=a.sqrt(.25-l(f-.5,2))*n+.5)&&.5!=p&&(p=p.toFixed(5)-1e-5*n)}return c}),n=n.split(/\\s*\\-\\s*/),\"linear\"==h){var b=n.shift();if(b=-i(b),isNaN(b))return null;var _=[0,0,a.cos(t.rad(b)),a.sin(t.rad(b))],w=1/(s(o(_[2]),o(_[3]))||1);_[2]*=w,_[3]*=w,_[2]<0&&(_[0]=-_[2],_[2]=0),_[3]<0&&(_[1]=-_[3],_[3]=0)}var k=t._parseDots(n);if(!k)return null;if(u=u.replace(/[\\(\\)\\s,\\xb0#]/g,\"_\"),e.gradient&&u!=e.gradient.id&&(g.defs.removeChild(e.gradient),delete e.gradient),!e.gradient){y=v(h+\"Gradient\",{id:u}),e.gradient=y,v(y,\"radial\"==h?{fx:f,fy:p}:{x1:_[0],y1:_[1],x2:_[2],y2:_[3],gradientTransform:e.matrix.invert()}),g.defs.appendChild(y);for(var B=0,C=k.length;B<C;B++)y.appendChild(v(\"stop\",{offset:k[B].offset?k[B].offset:B?\"100%\":\"0%\",\"stop-color\":k[B].color||\"#fff\",\"stop-opacity\":isFinite(k[B].opacity)?k[B].opacity:1}))}}return v(d,{fill:m(u),opacity:1,\"fill-opacity\":1}),x.fill=c,x.opacity=1,x.fillOpacity=1,1},y=function(){var t=document.documentMode;return t&&(9===t||10===t)},m=function(t){if(y())return\"url('#\"+t+\"')\";var e=document.location,r=e.protocol+\"//\"+e.host+e.pathname+e.search;return\"url('\"+r+\"#\"+t+\"')\"},b=function(t){var e=t.getBBox(1);v(t.pattern,{patternTransform:t.matrix.invert()+\" translate(\"+e.x+\",\"+e.y+\")\"})},_=function(i,n,a){if(\"path\"==i.type){for(var s=r(n).toLowerCase().split(\"-\"),o=i.paper,l=a?\"end\":\"start\",h=i.node,u=i.attrs,f=u[\"stroke-width\"],p=s.length,x=\"classic\",y,m,b,_,w,k=3,B=3,C=5;p--;)switch(s[p]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":x=s[p];break;case\"wide\":B=5;break;case\"narrow\":B=2;break;case\"long\":k=5;break;case\"short\":k=2}if(\"open\"==x?(k+=2,B+=2,C+=2,b=1,_=a?4:1,w={fill:\"none\",stroke:u.stroke}):(_=b=k/2,w={fill:u.stroke,stroke:\"none\"}),i._.arrows?a?(i._.arrows.endPath&&g[i._.arrows.endPath]--,i._.arrows.endMarker&&g[i._.arrows.endMarker]--):(i._.arrows.startPath&&g[i._.arrows.startPath]--,i._.arrows.startMarker&&g[i._.arrows.startMarker]--):i._.arrows={},\"none\"!=x){var S=\"raphael-marker-\"+x,A=\"raphael-marker-\"+l+x+k+B+\"-obj\"+i.id;t._g.doc.getElementById(S)?g[S]++:(o.defs.appendChild(v(v(\"path\"),{\"stroke-linecap\":\"round\",d:d[x],id:S})),g[S]=1);var T=t._g.doc.getElementById(A),E;T?(g[A]++,E=T.getElementsByTagName(\"use\")[0]):(T=v(v(\"marker\"),{id:A,markerHeight:B,markerWidth:k,orient:\"auto\",refX:_,refY:B/2}),E=v(v(\"use\"),{\"xlink:href\":\"#\"+S,transform:(a?\"rotate(180 \"+k/2+\" \"+B/2+\") \":c)+\"scale(\"+k/C+\",\"+B/C+\")\",\"stroke-width\":(1/((k/C+B/C)/2)).toFixed(4)}),T.appendChild(E),o.defs.appendChild(T),g[A]=1),v(E,w);var M=b*(\"diamond\"!=x&&\"oval\"!=x);a?(y=i._.arrows.startdx*f||0,m=t.getTotalLength(u.path)-M*f):(y=M*f,m=t.getTotalLength(u.path)-(i._.arrows.enddx*f||0)),w={},w[\"marker-\"+l]=\"url(#\"+A+\")\",(m||y)&&(w.d=t.getSubpath(u.path,y,m)),v(h,w),i._.arrows[l+\"Path\"]=S,i._.arrows[l+\"Marker\"]=A,i._.arrows[l+\"dx\"]=M,i._.arrows[l+\"Type\"]=x,i._.arrows[l+\"String\"]=n}else a?(y=i._.arrows.startdx*f||0,m=t.getTotalLength(u.path)-y):(y=0,m=t.getTotalLength(u.path)-(i._.arrows.enddx*f||0)),i._.arrows[l+\"Path\"]&&v(h,{d:t.getSubpath(u.path,y,m)}),delete i._.arrows[l+\"Path\"],delete i._.arrows[l+\"Marker\"],delete i._.arrows[l+\"dx\"],delete i._.arrows[l+\"Type\"],delete i._.arrows[l+\"String\"];for(w in g)if(g[e](w)&&!g[w]){var N=t._g.doc.getElementById(w);N&&N.parentNode.removeChild(N)}}},w={\"-\":[3,1],\".\":[1,1],\"-.\":[3,1,1,1],\"-..\":[3,1,1,1,1,1],\". \":[1,3],\"- \":[4,3],\"--\":[8,3],\"- .\":[4,3,1,3],\"--.\":[8,3,1,3],\"--..\":[8,3,1,3,1,3]},k=function(t,e,i){if(e=w[r(e).toLowerCase()]){for(var n=t.attrs[\"stroke-width\"]||\"1\",a={round:n,square:n,butt:0}[t.attrs[\"stroke-linecap\"]||i[\"stroke-linecap\"]]||0,s=[],o=e.length;o--;)s[o]=e[o]*n+(o%2?1:-1)*a;v(t.node,{\"stroke-dasharray\":s.join(\",\")})}else v(t.node,{\"stroke-dasharray\":\"none\"})},B=function(i,a){var l=i.node,u=i.attrs,f=l.style.visibility;l.style.visibility=\"hidden\";for(var d in a)if(a[e](d)){if(!t._availableAttrs[e](d))continue;var g=a[d];switch(u[d]=g,d){case\"blur\":i.blur(g);break;case\"title\":var y=l.getElementsByTagName(\"title\");if(y.length&&(y=y[0]))y.firstChild.nodeValue=g;else{y=v(\"title\");var m=t._g.doc.createTextNode(g);y.appendChild(m),l.appendChild(y)}break;case\"href\":case\"target\":var w=l.parentNode;if(\"a\"!=w.tagName.toLowerCase()){var B=v(\"a\");w.insertBefore(B,l),B.appendChild(l),w=B}\"target\"==d?w.setAttributeNS(p,\"show\",\"blank\"==g?\"new\":g):w.setAttributeNS(p,d,g);break;case\"cursor\":l.style.cursor=g;break;case\"transform\":i.transform(g);break;case\"arrow-start\":_(i,g);break;case\"arrow-end\":_(i,g,1);break;case\"clip-rect\":var C=r(g).split(h);if(4==C.length){i.clip&&i.clip.parentNode.parentNode.removeChild(i.clip.parentNode);var A=v(\"clipPath\"),T=v(\"rect\");A.id=t.createUUID(),v(T,{x:C[0],y:C[1],width:C[2],height:C[3]}),A.appendChild(T),i.paper.defs.appendChild(A),v(l,{\"clip-path\":\"url(#\"+A.id+\")\"}),i.clip=T}if(!g){var E=l.getAttribute(\"clip-path\");if(E){var M=t._g.doc.getElementById(E.replace(/(^url\\(#|\\)$)/g,c));M&&M.parentNode.removeChild(M),v(l,{\"clip-path\":c}),delete i.clip}}break;case\"path\":\"path\"==i.type&&(v(l,{d:g?u.path=t._pathToAbsolute(g):\"M0,0\"}),i._.dirty=1,i._.arrows&&(\"startString\"in i._.arrows&&_(i,i._.arrows.startString),\"endString\"in i._.arrows&&_(i,i._.arrows.endString,1)));break;case\"width\":if(l.setAttribute(d,g),i._.dirty=1,!u.fx)break;d=\"x\",g=u.x;case\"x\":u.fx&&(g=-u.x-(u.width||0));case\"rx\":if(\"rx\"==d&&\"rect\"==i.type)break;case\"cx\":l.setAttribute(d,g),i.pattern&&b(i),i._.dirty=1;break;case\"height\":if(l.setAttribute(d,g),i._.dirty=1,!u.fy)break;d=\"y\",g=u.y;case\"y\":u.fy&&(g=-u.y-(u.height||0));case\"ry\":if(\"ry\"==d&&\"rect\"==i.type)break;case\"cy\":l.setAttribute(d,g),i.pattern&&b(i),i._.dirty=1;break;case\"r\":\"rect\"==i.type?v(l,{rx:g,ry:g}):l.setAttribute(d,g),i._.dirty=1;break;case\"src\":\"image\"==i.type&&l.setAttributeNS(p,\"href\",g);break;case\"stroke-width\":1==i._.sx&&1==i._.sy||(g/=s(o(i._.sx),o(i._.sy))||1),l.setAttribute(d,g),u[\"stroke-dasharray\"]&&k(i,u[\"stroke-dasharray\"],a),\ni._.arrows&&(\"startString\"in i._.arrows&&_(i,i._.arrows.startString),\"endString\"in i._.arrows&&_(i,i._.arrows.endString,1));break;case\"stroke-dasharray\":k(i,g,a);break;case\"fill\":var N=r(g).match(t._ISURL);if(N){A=v(\"pattern\");var L=v(\"image\");A.id=t.createUUID(),v(A,{x:0,y:0,patternUnits:\"userSpaceOnUse\",height:1,width:1}),v(L,{x:0,y:0,\"xlink:href\":N[1]}),A.appendChild(L),function(e){t._preload(N[1],function(){var t=this.offsetWidth,r=this.offsetHeight;v(e,{width:t,height:r}),v(L,{width:t,height:r})})}(A),i.paper.defs.appendChild(A),v(l,{fill:\"url(#\"+A.id+\")\"}),i.pattern=A,i.pattern&&b(i);break}var z=t.getRGB(g);if(z.error){if((\"circle\"==i.type||\"ellipse\"==i.type||\"r\"!=r(g).charAt())&&x(i,g)){if(\"opacity\"in u||\"fill-opacity\"in u){var P=t._g.doc.getElementById(l.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,c));if(P){var F=P.getElementsByTagName(\"stop\");v(F[F.length-1],{\"stop-opacity\":(\"opacity\"in u?u.opacity:1)*(\"fill-opacity\"in u?u[\"fill-opacity\"]:1)})}}u.gradient=g,u.fill=\"none\";break}}else delete a.gradient,delete u.gradient,!t.is(u.opacity,\"undefined\")&&t.is(a.opacity,\"undefined\")&&v(l,{opacity:u.opacity}),!t.is(u[\"fill-opacity\"],\"undefined\")&&t.is(a[\"fill-opacity\"],\"undefined\")&&v(l,{\"fill-opacity\":u[\"fill-opacity\"]});z[e](\"opacity\")&&v(l,{\"fill-opacity\":z.opacity>1?z.opacity/100:z.opacity});case\"stroke\":z=t.getRGB(g),l.setAttribute(d,z.hex),\"stroke\"==d&&z[e](\"opacity\")&&v(l,{\"stroke-opacity\":z.opacity>1?z.opacity/100:z.opacity}),\"stroke\"==d&&i._.arrows&&(\"startString\"in i._.arrows&&_(i,i._.arrows.startString),\"endString\"in i._.arrows&&_(i,i._.arrows.endString,1));break;case\"gradient\":(\"circle\"==i.type||\"ellipse\"==i.type||\"r\"!=r(g).charAt())&&x(i,g);break;case\"opacity\":u.gradient&&!u[e](\"stroke-opacity\")&&v(l,{\"stroke-opacity\":g>1?g/100:g});case\"fill-opacity\":if(u.gradient){P=t._g.doc.getElementById(l.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,c)),P&&(F=P.getElementsByTagName(\"stop\"),v(F[F.length-1],{\"stop-opacity\":g}));break}default:\"font-size\"==d&&(g=n(g,10)+\"px\");var R=d.replace(/(\\-.)/g,function(t){return t.substring(1).toUpperCase()});l.style[R]=g,i._.dirty=1,l.setAttribute(d,g)}}S(i,a),l.style.visibility=f},C=1.2,S=function(i,a){if(\"text\"==i.type&&(a[e](\"text\")||a[e](\"font\")||a[e](\"font-size\")||a[e](\"x\")||a[e](\"y\"))){var s=i.attrs,o=i.node,l=o.firstChild?n(t._g.doc.defaultView.getComputedStyle(o.firstChild,c).getPropertyValue(\"font-size\"),10):10;if(a[e](\"text\")){for(s.text=a.text;o.firstChild;)o.removeChild(o.firstChild);for(var h=r(a.text).split(\"\\n\"),u=[],f,p=0,d=h.length;p<d;p++)f=v(\"tspan\"),p&&v(f,{dy:l*C,x:s.x}),f.appendChild(t._g.doc.createTextNode(h[p])),o.appendChild(f),u[p]=f}else for(u=o.getElementsByTagName(\"tspan\"),p=0,d=u.length;p<d;p++)p?v(u[p],{dy:l*C,x:s.x}):v(u[0],{dy:0});v(o,{x:s.x,y:s.y}),i._.dirty=1;var g=i._getBBox(),x=s.y-(g.y+g.height/2);x&&t.is(x,\"finite\")&&v(u[0],{dy:x})}},A=function(t){return t.parentNode&&\"a\"===t.parentNode.tagName.toLowerCase()?t.parentNode:t},T=function(e,r){function i(){return(\"0000\"+(Math.random()*Math.pow(36,5)<<0).toString(36)).slice(-5)}var n=0,a=0;this[0]=this.node=e,e.raphael=!0,this.id=i(),e.raphaelid=this.id,this.matrix=t.matrix(),this.realPath=null,this.paper=r,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!r.bottom&&(r.bottom=this),this.prev=r.top,r.top&&(r.top.next=this),r.top=this,this.next=null},E=t.el;T.prototype=E,E.constructor=T,t._engine.path=function(t,e){var r=v(\"path\");e.canvas&&e.canvas.appendChild(r);var i=new T(r,e);return i.type=\"path\",B(i,{fill:\"none\",stroke:\"#000\",path:t}),i},E.rotate=function(t,e,n){if(this.removed)return this;if(t=r(t).split(h),t.length-1&&(e=i(t[1]),n=i(t[2])),t=i(t[0]),null==n&&(e=n),null==e||null==n){var a=this.getBBox(1);e=a.x+a.width/2,n=a.y+a.height/2}return this.transform(this._.transform.concat([[\"r\",t,e,n]])),this},E.scale=function(t,e,n,a){if(this.removed)return this;if(t=r(t).split(h),t.length-1&&(e=i(t[1]),n=i(t[2]),a=i(t[3])),t=i(t[0]),null==e&&(e=t),null==a&&(n=a),null==n||null==a)var s=this.getBBox(1);return n=null==n?s.x+s.width/2:n,a=null==a?s.y+s.height/2:a,this.transform(this._.transform.concat([[\"s\",t,e,n,a]])),this},E.translate=function(t,e){return this.removed?this:(t=r(t).split(h),t.length-1&&(e=i(t[1])),t=i(t[0])||0,e=+e||0,this.transform(this._.transform.concat([[\"t\",t,e]])),this)},E.transform=function(r){var i=this._;if(null==r)return i.transform;if(t._extractTransform(this,r),this.clip&&v(this.clip,{transform:this.matrix.invert()}),this.pattern&&b(this),this.node&&v(this.node,{transform:this.matrix}),1!=i.sx||1!=i.sy){var n=this.attrs[e](\"stroke-width\")?this.attrs[\"stroke-width\"]:1;this.attr({\"stroke-width\":n})}return this},E.hide=function(){return this.removed||(this.node.style.display=\"none\"),this},E.show=function(){return this.removed||(this.node.style.display=\"\"),this},E.remove=function(){var e=A(this.node);if(!this.removed&&e.parentNode){var r=this.paper;r.__set__&&r.__set__.exclude(this),u.unbind(\"raphael.*.*.\"+this.id),this.gradient&&r.defs.removeChild(this.gradient),t._tear(this,r),e.parentNode.removeChild(e),this.removeData();for(var i in this)this[i]=\"function\"==typeof this[i]?t._removedFactory(i):null;this.removed=!0}},E._getBBox=function(){if(\"none\"==this.node.style.display){this.show();var t=!0}var e=!1,r;this.paper.canvas.parentElement?r=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(r=this.paper.canvas.parentNode.style),r&&\"none\"==r.display&&(e=!0,r.display=\"\");var i={};try{i=this.node.getBBox()}catch(n){i={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}}finally{i=i||{},e&&(r.display=\"none\")}return t&&this.hide(),i},E.attr=function(r,i){if(this.removed)return this;if(null==r){var n={};for(var a in this.attrs)this.attrs[e](a)&&(n[a]=this.attrs[a]);return n.gradient&&\"none\"==n.fill&&(n.fill=n.gradient)&&delete n.gradient,n.transform=this._.transform,n}if(null==i&&t.is(r,\"string\")){if(\"fill\"==r&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if(\"transform\"==r)return this._.transform;for(var s=r.split(h),o={},l=0,c=s.length;l<c;l++)r=s[l],r in this.attrs?o[r]=this.attrs[r]:t.is(this.paper.customAttributes[r],\"function\")?o[r]=this.paper.customAttributes[r].def:o[r]=t._availableAttrs[r];return c-1?o:o[s[0]]}if(null==i&&t.is(r,\"array\")){for(o={},l=0,c=r.length;l<c;l++)o[r[l]]=this.attr(r[l]);return o}if(null!=i){var f={};f[r]=i}else null!=r&&t.is(r,\"object\")&&(f=r);for(var p in f)u(\"raphael.attr.\"+p+\".\"+this.id,this,f[p]);for(p in this.paper.customAttributes)if(this.paper.customAttributes[e](p)&&f[e](p)&&t.is(this.paper.customAttributes[p],\"function\")){var d=this.paper.customAttributes[p].apply(this,[].concat(f[p]));this.attrs[p]=f[p];for(var g in d)d[e](g)&&(f[g]=d[g])}return B(this,f),this},E.toFront=function(){if(this.removed)return this;var e=A(this.node);e.parentNode.appendChild(e);var r=this.paper;return r.top!=this&&t._tofront(this,r),this},E.toBack=function(){if(this.removed)return this;var e=A(this.node),r=e.parentNode;r.insertBefore(e,r.firstChild),t._toback(this,this.paper);var i=this.paper;return this},E.insertAfter=function(e){if(this.removed||!e)return this;var r=A(this.node),i=A(e.node||e[e.length-1].node);return i.nextSibling?i.parentNode.insertBefore(r,i.nextSibling):i.parentNode.appendChild(r),t._insertafter(this,e,this.paper),this},E.insertBefore=function(e){if(this.removed||!e)return this;var r=A(this.node),i=A(e.node||e[0].node);return i.parentNode.insertBefore(r,i),t._insertbefore(this,e,this.paper),this},E.blur=function(e){var r=this;if(0!==+e){var i=v(\"filter\"),n=v(\"feGaussianBlur\");r.attrs.blur=e,i.id=t.createUUID(),v(n,{stdDeviation:+e||1.5}),i.appendChild(n),r.paper.defs.appendChild(i),r._blur=i,v(r.node,{filter:\"url(#\"+i.id+\")\"})}else r._blur&&(r._blur.parentNode.removeChild(r._blur),delete r._blur,delete r.attrs.blur),r.node.removeAttribute(\"filter\");return r},t._engine.circle=function(t,e,r,i){var n=v(\"circle\");t.canvas&&t.canvas.appendChild(n);var a=new T(n,t);return a.attrs={cx:e,cy:r,r:i,fill:\"none\",stroke:\"#000\"},a.type=\"circle\",v(n,a.attrs),a},t._engine.rect=function(t,e,r,i,n,a){var s=v(\"rect\");t.canvas&&t.canvas.appendChild(s);var o=new T(s,t);return o.attrs={x:e,y:r,width:i,height:n,rx:a||0,ry:a||0,fill:\"none\",stroke:\"#000\"},o.type=\"rect\",v(s,o.attrs),o},t._engine.ellipse=function(t,e,r,i,n){var a=v(\"ellipse\");t.canvas&&t.canvas.appendChild(a);var s=new T(a,t);return s.attrs={cx:e,cy:r,rx:i,ry:n,fill:\"none\",stroke:\"#000\"},s.type=\"ellipse\",v(a,s.attrs),s},t._engine.image=function(t,e,r,i,n,a){var s=v(\"image\");v(s,{x:r,y:i,width:n,height:a,preserveAspectRatio:\"none\"}),s.setAttributeNS(p,\"href\",e),t.canvas&&t.canvas.appendChild(s);var o=new T(s,t);return o.attrs={x:r,y:i,width:n,height:a,src:e},o.type=\"image\",o},t._engine.text=function(e,r,i,n){var a=v(\"text\");e.canvas&&e.canvas.appendChild(a);var s=new T(a,e);return s.attrs={x:r,y:i,\"text-anchor\":\"middle\",text:n,\"font-family\":t._availableAttrs[\"font-family\"],\"font-size\":t._availableAttrs[\"font-size\"],stroke:\"none\",fill:\"#000\"},s.type=\"text\",B(s,s.attrs),s},t._engine.setSize=function(t,e){return this.width=t||this.width,this.height=e||this.height,this.canvas.setAttribute(\"width\",this.width),this.canvas.setAttribute(\"height\",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},t._engine.create=function(){var e=t._getContainer.apply(0,arguments),r=e&&e.container,i=e.x,n=e.y,a=e.width,s=e.height;if(!r)throw new Error(\"SVG container not found.\");var o=v(\"svg\"),l=\"overflow:hidden;\",h;return i=i||0,n=n||0,a=a||512,s=s||342,v(o,{height:s,version:1.1,width:a,xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}),1==r?(o.style.cssText=l+\"position:absolute;left:\"+i+\"px;top:\"+n+\"px\",t._g.doc.body.appendChild(o),h=1):(o.style.cssText=l+\"position:relative\",r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o)),r=new t._Paper,r.width=a,r.height=s,r.canvas=o,r.clear(),r._left=r._top=0,h&&(r.renderfix=function(){}),r.renderfix(),r},t._engine.setViewBox=function(t,e,r,i,n){u(\"raphael.setViewBox\",this,this._viewBox,[t,e,r,i,n]);var a=this.getSize(),o=s(r/a.width,i/a.height),l=this.top,h=n?\"xMidYMid meet\":\"xMinYMin\",c,p;for(null==t?(this._vbSize&&(o=1),delete this._vbSize,c=\"0 0 \"+this.width+f+this.height):(this._vbSize=o,c=t+f+e+f+r+f+i),v(this.canvas,{viewBox:c,preserveAspectRatio:h});o&&l;)p=\"stroke-width\"in l.attrs?l.attrs[\"stroke-width\"]:1,l.attr({\"stroke-width\":p}),l._.dirty=1,l._.dirtyT=1,l=l.prev;return this._viewBox=[t,e,r,i,!!n],this},t.prototype.renderfix=function(){var t=this.canvas,e=t.style,r;try{r=t.getScreenCTM()||t.createSVGMatrix()}catch(i){r=t.createSVGMatrix()}var n=-r.e%1,a=-r.f%1;(n||a)&&(n&&(this._left=(this._left+n)%1,e.left=this._left+\"px\"),a&&(this._top=(this._top+a)%1,e.top=this._top+\"px\"))},t.prototype.clear=function(){t.eve(\"raphael.clear\",this);for(var e=this.canvas;e.firstChild;)e.removeChild(e.firstChild);this.bottom=this.top=null,(this.desc=v(\"desc\")).appendChild(t._g.doc.createTextNode(\"Created with Raphaël \"+t.version)),e.appendChild(this.desc),e.appendChild(this.defs=v(\"defs\"))},t.prototype.remove=function(){u(\"raphael.remove\",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var e in this)this[e]=\"function\"==typeof this[e]?t._removedFactory(e):null};var M=t.st;for(var N in E)E[e](N)&&!M[e](N)&&(M[N]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t].apply(r,e)})}}(N))}}.apply(e,i),!(void 0!==n&&(t.exports=n))},function(t,e,r){var i,n;i=[r(1)],n=function(t){if(!t||t.vml){var e=\"hasOwnProperty\",r=String,i=parseFloat,n=Math,a=n.round,s=n.max,o=n.min,l=n.abs,h=\"fill\",u=/[, ]+/,c=t.eve,f=\" progid:DXImageTransform.Microsoft\",p=\" \",d=\"\",g={M:\"m\",L:\"l\",C:\"c\",Z:\"x\",m:\"t\",l:\"r\",c:\"v\",z:\"x\"},v=/([clmz]),?([^clmz]*)/gi,x=/ progid:\\S+Blur\\([^\\)]+\\)/g,y=/-?[^,\\s-]+/g,m=\"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",b=21600,_={path:1,rect:1,image:1},w={circle:1,ellipse:1},k=function(e){var i=/[ahqstv]/gi,n=t._pathToAbsolute;if(r(e).match(i)&&(n=t._path2curve),i=/[clmz]/g,n==t._pathToAbsolute&&!r(e).match(i)){var s=r(e).replace(v,function(t,e,r){var i=[],n=\"m\"==e.toLowerCase(),s=g[e];return r.replace(y,function(t){n&&2==i.length&&(s+=i+g[\"m\"==e?\"l\":\"L\"],i=[]),i.push(a(t*b))}),s+i});return s}var o=n(e),l,h;s=[];for(var u=0,c=o.length;u<c;u++){l=o[u],h=o[u][0].toLowerCase(),\"z\"==h&&(h=\"x\");for(var f=1,x=l.length;f<x;f++)h+=a(l[f]*b)+(f!=x-1?\",\":d);s.push(h)}return s.join(p)},B=function(e,r,i){var n=t.matrix();return n.rotate(-e,.5,.5),{dx:n.x(r,i),dy:n.y(r,i)}},C=function(t,e,r,i,n,a){var s=t._,o=t.matrix,u=s.fillpos,c=t.node,f=c.style,d=1,g=\"\",v,x=b/e,y=b/r;if(f.visibility=\"hidden\",e&&r){if(c.coordsize=l(x)+p+l(y),f.rotation=a*(e*r<0?-1:1),a){var m=B(a,i,n);i=m.dx,n=m.dy}if(e<0&&(g+=\"x\"),r<0&&(g+=\" y\")&&(d=-1),f.flip=g,c.coordorigin=i*-x+p+n*-y,u||s.fillsize){var _=c.getElementsByTagName(h);_=_&&_[0],c.removeChild(_),u&&(m=B(a,o.x(u[0],u[1]),o.y(u[0],u[1])),_.position=m.dx*d+p+m.dy*d),s.fillsize&&(_.size=s.fillsize[0]*l(e)+p+s.fillsize[1]*l(r)),c.appendChild(_)}f.visibility=\"visible\"}};t.toString=function(){return\"Your browser doesn’t support SVG. Falling down to VML.\\nYou are running Raphaël \"+this.version};var S=function(t,e,i){for(var n=r(e).toLowerCase().split(\"-\"),a=i?\"end\":\"start\",s=n.length,o=\"classic\",l=\"medium\",h=\"medium\";s--;)switch(n[s]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":o=n[s];break;case\"wide\":case\"narrow\":h=n[s];break;case\"long\":case\"short\":l=n[s]}var u=t.node.getElementsByTagName(\"stroke\")[0];u[a+\"arrow\"]=o,u[a+\"arrowlength\"]=l,u[a+\"arrowwidth\"]=h},A=function(n,l){n.attrs=n.attrs||{};var c=n.node,f=n.attrs,g=c.style,v,x=_[n.type]&&(l.x!=f.x||l.y!=f.y||l.width!=f.width||l.height!=f.height||l.cx!=f.cx||l.cy!=f.cy||l.rx!=f.rx||l.ry!=f.ry||l.r!=f.r),y=w[n.type]&&(f.cx!=l.cx||f.cy!=l.cy||f.r!=l.r||f.rx!=l.rx||f.ry!=l.ry),m=n;for(var B in l)l[e](B)&&(f[B]=l[B]);if(x&&(f.path=t._getPath[n.type](n),n._.dirty=1),l.href&&(c.href=l.href),l.title&&(c.title=l.title),l.target&&(c.target=l.target),l.cursor&&(g.cursor=l.cursor),\"blur\"in l&&n.blur(l.blur),(l.path&&\"path\"==n.type||x)&&(c.path=k(~r(f.path).toLowerCase().indexOf(\"r\")?t._pathToAbsolute(f.path):f.path),n._.dirty=1,\"image\"==n.type&&(n._.fillpos=[f.x,f.y],n._.fillsize=[f.width,f.height],C(n,1,1,0,0,0))),\"transform\"in l&&n.transform(l.transform),y){var A=+f.cx,E=+f.cy,M=+f.rx||+f.r||0,L=+f.ry||+f.r||0;c.path=t.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\",a((A-M)*b),a((E-L)*b),a((A+M)*b),a((E+L)*b),a(A*b)),n._.dirty=1}if(\"clip-rect\"in l){var z=r(l[\"clip-rect\"]).split(u);if(4==z.length){z[2]=+z[2]+ +z[0],z[3]=+z[3]+ +z[1];var P=c.clipRect||t._g.doc.createElement(\"div\"),F=P.style;F.clip=t.format(\"rect({1}px {2}px {3}px {0}px)\",z),c.clipRect||(F.position=\"absolute\",F.top=0,F.left=0,F.width=n.paper.width+\"px\",F.height=n.paper.height+\"px\",c.parentNode.insertBefore(P,c),P.appendChild(c),c.clipRect=P)}l[\"clip-rect\"]||c.clipRect&&(c.clipRect.style.clip=\"auto\")}if(n.textpath){var R=n.textpath.style;l.font&&(R.font=l.font),l[\"font-family\"]&&(R.fontFamily='\"'+l[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g,d)+'\"'),l[\"font-size\"]&&(R.fontSize=l[\"font-size\"]),l[\"font-weight\"]&&(R.fontWeight=l[\"font-weight\"]),l[\"font-style\"]&&(R.fontStyle=l[\"font-style\"])}if(\"arrow-start\"in l&&S(m,l[\"arrow-start\"]),\"arrow-end\"in l&&S(m,l[\"arrow-end\"],1),null!=l.opacity||null!=l.fill||null!=l.src||null!=l.stroke||null!=l[\"stroke-width\"]||null!=l[\"stroke-opacity\"]||null!=l[\"fill-opacity\"]||null!=l[\"stroke-dasharray\"]||null!=l[\"stroke-miterlimit\"]||null!=l[\"stroke-linejoin\"]||null!=l[\"stroke-linecap\"]){var j=c.getElementsByTagName(h),I=!1;if(j=j&&j[0],!j&&(I=j=N(h)),\"image\"==n.type&&l.src&&(j.src=l.src),l.fill&&(j.on=!0),null!=j.on&&\"none\"!=l.fill&&null!==l.fill||(j.on=!1),j.on&&l.fill){var q=r(l.fill).match(t._ISURL);if(q){j.parentNode==c&&c.removeChild(j),j.rotate=!0,j.src=q[1],j.type=\"tile\";var D=n.getBBox(1);j.position=D.x+p+D.y,n._.fillpos=[D.x,D.y],t._preload(q[1],function(){n._.fillsize=[this.offsetWidth,this.offsetHeight]})}else j.color=t.getRGB(l.fill).hex,j.src=d,j.type=\"solid\",t.getRGB(l.fill).error&&(m.type in{circle:1,ellipse:1}||\"r\"!=r(l.fill).charAt())&&T(m,l.fill,j)&&(f.fill=\"none\",f.gradient=l.fill,j.rotate=!1)}if(\"fill-opacity\"in l||\"opacity\"in l){var V=((+f[\"fill-opacity\"]+1||2)-1)*((+f.opacity+1||2)-1)*((+t.getRGB(l.fill).o+1||2)-1);V=o(s(V,0),1),j.opacity=V,j.src&&(j.color=\"none\")}c.appendChild(j);var O=c.getElementsByTagName(\"stroke\")&&c.getElementsByTagName(\"stroke\")[0],Y=!1;!O&&(Y=O=N(\"stroke\")),(l.stroke&&\"none\"!=l.stroke||l[\"stroke-width\"]||null!=l[\"stroke-opacity\"]||l[\"stroke-dasharray\"]||l[\"stroke-miterlimit\"]||l[\"stroke-linejoin\"]||l[\"stroke-linecap\"])&&(O.on=!0),(\"none\"==l.stroke||null===l.stroke||null==O.on||0==l.stroke||0==l[\"stroke-width\"])&&(O.on=!1);var W=t.getRGB(l.stroke);O.on&&l.stroke&&(O.color=W.hex),V=((+f[\"stroke-opacity\"]+1||2)-1)*((+f.opacity+1||2)-1)*((+W.o+1||2)-1);var G=.75*(i(l[\"stroke-width\"])||1);if(V=o(s(V,0),1),null==l[\"stroke-width\"]&&(G=f[\"stroke-width\"]),l[\"stroke-width\"]&&(O.weight=G),G&&G<1&&(V*=G)&&(O.weight=1),O.opacity=V,l[\"stroke-linejoin\"]&&(O.joinstyle=l[\"stroke-linejoin\"]||\"miter\"),O.miterlimit=l[\"stroke-miterlimit\"]||8,l[\"stroke-linecap\"]&&(O.endcap=\"butt\"==l[\"stroke-linecap\"]?\"flat\":\"square\"==l[\"stroke-linecap\"]?\"square\":\"round\"),\"stroke-dasharray\"in l){var H={\"-\":\"shortdash\",\".\":\"shortdot\",\"-.\":\"shortdashdot\",\"-..\":\"shortdashdotdot\",\". \":\"dot\",\"- \":\"dash\",\"--\":\"longdash\",\"- .\":\"dashdot\",\"--.\":\"longdashdot\",\"--..\":\"longdashdotdot\"};O.dashstyle=H[e](l[\"stroke-dasharray\"])?H[l[\"stroke-dasharray\"]]:d}Y&&c.appendChild(O)}if(\"text\"==m.type){m.paper.canvas.style.display=d;var X=m.paper.span,U=100,$=f.font&&f.font.match(/\\d+(?:\\.\\d*)?(?=px)/);g=X.style,f.font&&(g.font=f.font),f[\"font-family\"]&&(g.fontFamily=f[\"font-family\"]),f[\"font-weight\"]&&(g.fontWeight=f[\"font-weight\"]),f[\"font-style\"]&&(g.fontStyle=f[\"font-style\"]),$=i(f[\"font-size\"]||$&&$[0])||10,g.fontSize=$*U+\"px\",m.textpath.string&&(X.innerHTML=r(m.textpath.string).replace(/</g,\"<\").replace(/&/g,\"&\").replace(/\\n/g,\"<br>\"));var Z=X.getBoundingClientRect();m.W=f.w=(Z.right-Z.left)/U,m.H=f.h=(Z.bottom-Z.top)/U,m.X=f.x,m.Y=f.y+m.H/2,(\"x\"in l||\"y\"in l)&&(m.path.v=t.format(\"m{0},{1}l{2},{1}\",a(f.x*b),a(f.y*b),a(f.x*b)+1));for(var Q=[\"x\",\"y\",\"text\",\"font\",\"font-family\",\"font-weight\",\"font-style\",\"font-size\"],J=0,K=Q.length;J<K;J++)if(Q[J]in l){m._.dirty=1;break}switch(f[\"text-anchor\"]){case\"start\":m.textpath.style[\"v-text-align\"]=\"left\",m.bbx=m.W/2;break;case\"end\":m.textpath.style[\"v-text-align\"]=\"right\",m.bbx=-m.W/2;break;default:m.textpath.style[\"v-text-align\"]=\"center\",m.bbx=0}m.textpath.style[\"v-text-kern\"]=!0}},T=function(e,a,s){e.attrs=e.attrs||{};var o=e.attrs,l=Math.pow,h,u,c=\"linear\",f=\".5 .5\";if(e.attrs.gradient=a,a=r(a).replace(t._radial_gradient,function(t,e,r){return c=\"radial\",e&&r&&(e=i(e),r=i(r),l(e-.5,2)+l(r-.5,2)>.25&&(r=n.sqrt(.25-l(e-.5,2))*(2*(r>.5)-1)+.5),f=e+p+r),d}),a=a.split(/\\s*\\-\\s*/),\"linear\"==c){var g=a.shift();if(g=-i(g),isNaN(g))return null}var v=t._parseDots(a);if(!v)return null;if(e=e.shape||e.node,v.length){e.removeChild(s),s.on=!0,s.method=\"none\",s.color=v[0].color,s.color2=v[v.length-1].color;for(var x=[],y=0,m=v.length;y<m;y++)v[y].offset&&x.push(v[y].offset+p+v[y].color);s.colors=x.length?x.join():\"0% \"+s.color,\"radial\"==c?(s.type=\"gradientTitle\",s.focus=\"100%\",s.focussize=\"0 0\",s.focusposition=f,s.angle=0):(s.type=\"gradient\",s.angle=(270-g)%360),e.appendChild(s)}return 1},E=function(e,r){this[0]=this.node=e,e.raphael=!0,this.id=t._oid++,e.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=r,this.matrix=t.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!r.bottom&&(r.bottom=this),this.prev=r.top,r.top&&(r.top.next=this),r.top=this,this.next=null},M=t.el;E.prototype=M,M.constructor=E,M.transform=function(e){if(null==e)return this._.transform;var i=this.paper._viewBoxShift,n=i?\"s\"+[i.scale,i.scale]+\"-1-1t\"+[i.dx,i.dy]:d,a;i&&(a=e=r(e).replace(/\\.{3}|\\u2026/g,this._.transform||d)),t._extractTransform(this,n+e);var s=this.matrix.clone(),o=this.skew,l=this.node,h,u=~r(this.attrs.fill).indexOf(\"-\"),c=!r(this.attrs.fill).indexOf(\"url(\");if(s.translate(1,1),c||u||\"image\"==this.type)if(o.matrix=\"1 0 0 1\",o.offset=\"0 0\",h=s.split(),u&&h.noRotation||!h.isSimple){l.style.filter=s.toFilter();var f=this.getBBox(),g=this.getBBox(1),v=f.x-g.x,x=f.y-g.y;l.coordorigin=v*-b+p+x*-b,C(this,1,1,v,x,0)}else l.style.filter=d,C(this,h.scalex,h.scaley,h.dx,h.dy,h.rotate);else l.style.filter=d,o.matrix=r(s),o.offset=s.offset();return null!==a&&(this._.transform=a,t._extractTransform(this,a)),this},M.rotate=function(t,e,n){if(this.removed)return this;if(null!=t){if(t=r(t).split(u),t.length-1&&(e=i(t[1]),n=i(t[2])),t=i(t[0]),null==n&&(e=n),null==e||null==n){var a=this.getBBox(1);e=a.x+a.width/2,n=a.y+a.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([[\"r\",t,e,n]])),this}},M.translate=function(t,e){return this.removed?this:(t=r(t).split(u),t.length-1&&(e=i(t[1])),t=i(t[0])||0,e=+e||0,this._.bbox&&(this._.bbox.x+=t,this._.bbox.y+=e),this.transform(this._.transform.concat([[\"t\",t,e]])),this)},M.scale=function(t,e,n,a){if(this.removed)return this;if(t=r(t).split(u),t.length-1&&(e=i(t[1]),n=i(t[2]),a=i(t[3]),isNaN(n)&&(n=null),isNaN(a)&&(a=null)),t=i(t[0]),null==e&&(e=t),null==a&&(n=a),null==n||null==a)var s=this.getBBox(1);return n=null==n?s.x+s.width/2:n,a=null==a?s.y+s.height/2:a,this.transform(this._.transform.concat([[\"s\",t,e,n,a]])),this._.dirtyT=1,this},M.hide=function(){return!this.removed&&(this.node.style.display=\"none\"),this},M.show=function(){return!this.removed&&(this.node.style.display=d),this},M.auxGetBBox=t.el.getBBox,M.getBBox=function(){var t=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var e={},r=1/this.paper._viewBoxShift.scale;return e.x=t.x-this.paper._viewBoxShift.dx,e.x*=r,e.y=t.y-this.paper._viewBoxShift.dy,e.y*=r,e.width=t.width*r,e.height=t.height*r,e.x2=e.x+e.width,e.y2=e.y+e.height,e}return t},M._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},M.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),t.eve.unbind(\"raphael.*.*.\"+this.id),t._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var e in this)this[e]=\"function\"==typeof this[e]?t._removedFactory(e):null;this.removed=!0}},M.attr=function(r,i){if(this.removed)return this;if(null==r){var n={};for(var a in this.attrs)this.attrs[e](a)&&(n[a]=this.attrs[a]);return n.gradient&&\"none\"==n.fill&&(n.fill=n.gradient)&&delete n.gradient,n.transform=this._.transform,n}if(null==i&&t.is(r,\"string\")){if(r==h&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var s=r.split(u),o={},l=0,f=s.length;l<f;l++)r=s[l],r in this.attrs?o[r]=this.attrs[r]:t.is(this.paper.customAttributes[r],\"function\")?o[r]=this.paper.customAttributes[r].def:o[r]=t._availableAttrs[r];return f-1?o:o[s[0]]}if(this.attrs&&null==i&&t.is(r,\"array\")){for(o={},l=0,f=r.length;l<f;l++)o[r[l]]=this.attr(r[l]);return o}var p;null!=i&&(p={},p[r]=i),null==i&&t.is(r,\"object\")&&(p=r);for(var d in p)c(\"raphael.attr.\"+d+\".\"+this.id,this,p[d]);if(p){for(d in this.paper.customAttributes)if(this.paper.customAttributes[e](d)&&p[e](d)&&t.is(this.paper.customAttributes[d],\"function\")){var g=this.paper.customAttributes[d].apply(this,[].concat(p[d]));this.attrs[d]=p[d];for(var v in g)g[e](v)&&(p[v]=g[v])}p.text&&\"text\"==this.type&&(this.textpath.string=p.text),A(this,p)}return this},M.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&t._tofront(this,this.paper),this},M.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),t._toback(this,this.paper)),this)},M.insertAfter=function(e){return this.removed?this:(e.constructor==t.st.constructor&&(e=e[e.length-1]),e.node.nextSibling?e.node.parentNode.insertBefore(this.node,e.node.nextSibling):e.node.parentNode.appendChild(this.node),t._insertafter(this,e,this.paper),this)},M.insertBefore=function(e){return this.removed?this:(e.constructor==t.st.constructor&&(e=e[0]),e.node.parentNode.insertBefore(this.node,e.node),t._insertbefore(this,e,this.paper),this)},M.blur=function(e){var r=this.node.runtimeStyle,i=r.filter;return i=i.replace(x,d),0!==+e?(this.attrs.blur=e,r.filter=i+p+f+\".Blur(pixelradius=\"+(+e||1.5)+\")\",r.margin=t.format(\"-{0}px 0 0 -{0}px\",a(+e||1.5))):(r.filter=i,r.margin=0,delete this.attrs.blur),this},t._engine.path=function(t,e){var r=N(\"shape\");r.style.cssText=m,r.coordsize=b+p+b,r.coordorigin=e.coordorigin;var i=new E(r,e),n={fill:\"none\",stroke:\"#000\"};t&&(n.path=t),i.type=\"path\",i.path=[],i.Path=d,A(i,n),e.canvas&&e.canvas.appendChild(r);var a=N(\"skew\");return a.on=!0,r.appendChild(a),i.skew=a,i.transform(d),i},t._engine.rect=function(e,r,i,n,a,s){var o=t._rectPath(r,i,n,a,s),l=e.path(o),h=l.attrs;return l.X=h.x=r,l.Y=h.y=i,l.W=h.width=n,l.H=h.height=a,h.r=s,h.path=o,l.type=\"rect\",l},t._engine.ellipse=function(t,e,r,i,n){var a=t.path(),s=a.attrs;return a.X=e-i,a.Y=r-n,a.W=2*i,a.H=2*n,a.type=\"ellipse\",A(a,{cx:e,cy:r,rx:i,ry:n}),a},t._engine.circle=function(t,e,r,i){var n=t.path(),a=n.attrs;return n.X=e-i,n.Y=r-i,n.W=n.H=2*i,n.type=\"circle\",A(n,{cx:e,cy:r,r:i}),n},t._engine.image=function(e,r,i,n,a,s){var o=t._rectPath(i,n,a,s),l=e.path(o).attr({stroke:\"none\"}),u=l.attrs,c=l.node,f=c.getElementsByTagName(h)[0];return u.src=r,l.X=u.x=i,l.Y=u.y=n,l.W=u.width=a,l.H=u.height=s,u.path=o,l.type=\"image\",f.parentNode==c&&c.removeChild(f),f.rotate=!0,f.src=r,f.type=\"tile\",l._.fillpos=[i,n],l._.fillsize=[a,s],c.appendChild(f),C(l,1,1,0,0,0),l},t._engine.text=function(e,i,n,s){var o=N(\"shape\"),l=N(\"path\"),h=N(\"textpath\");i=i||0,n=n||0,s=s||\"\",l.v=t.format(\"m{0},{1}l{2},{1}\",a(i*b),a(n*b),a(i*b)+1),l.textpathok=!0,h.string=r(s),h.on=!0,o.style.cssText=m,o.coordsize=b+p+b,o.coordorigin=\"0 0\";var u=new E(o,e),c={fill:\"#000\",stroke:\"none\",font:t._availableAttrs.font,text:s};u.shape=o,u.path=l,u.textpath=h,u.type=\"text\",u.attrs.text=r(s),u.attrs.x=i,u.attrs.y=n,u.attrs.w=1,u.attrs.h=1,A(u,c),o.appendChild(h),o.appendChild(l),e.canvas.appendChild(o);var f=N(\"skew\");return f.on=!0,o.appendChild(f),u.skew=f,u.transform(d),u},t._engine.setSize=function(e,r){var i=this.canvas.style;return this.width=e,this.height=r,e==+e&&(e+=\"px\"),r==+r&&(r+=\"px\"),i.width=e,i.height=r,i.clip=\"rect(0 \"+e+\" \"+r+\" 0)\",this._viewBox&&t._engine.setViewBox.apply(this,this._viewBox),this},t._engine.setViewBox=function(e,r,i,n,a){t.eve(\"raphael.setViewBox\",this,this._viewBox,[e,r,i,n,a]);var s=this.getSize(),o=s.width,l=s.height,h,u;return a&&(h=l/n,u=o/i,i*h<o&&(e-=(o-i*h)/2/h),n*u<l&&(r-=(l-n*u)/2/u)),this._viewBox=[e,r,i,n,!!a],this._viewBoxShift={dx:-e,dy:-r,scale:s},this.forEach(function(t){t.transform(\"...\")}),this};var N;t._engine.initWin=function(t){var e=t.document;e.styleSheets.length<31?e.createStyleSheet().addRule(\".rvml\",\"behavior:url(#default#VML)\"):e.styleSheets[0].addRule(\".rvml\",\"behavior:url(#default#VML)\");try{!e.namespaces.rvml&&e.namespaces.add(\"rvml\",\"urn:schemas-microsoft-com:vml\"),N=function(t){return e.createElement(\"<rvml:\"+t+' class=\"rvml\">')}}catch(r){N=function(t){return e.createElement(\"<\"+t+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">')}}},t._engine.initWin(t._g.win),t._engine.create=function(){var e=t._getContainer.apply(0,arguments),r=e.container,i=e.height,n,a=e.width,s=e.x,o=e.y;if(!r)throw new Error(\"VML container not found.\");var l=new t._Paper,h=l.canvas=t._g.doc.createElement(\"div\"),u=h.style;return s=s||0,o=o||0,a=a||512,i=i||342,l.width=a,l.height=i,a==+a&&(a+=\"px\"),i==+i&&(i+=\"px\"),l.coordsize=1e3*b+p+1e3*b,l.coordorigin=\"0 0\",l.span=t._g.doc.createElement(\"span\"),l.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\",h.appendChild(l.span),u.cssText=t.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\",a,i),1==r?(t._g.doc.body.appendChild(h),u.left=s+\"px\",u.top=o+\"px\",u.position=\"absolute\"):r.firstChild?r.insertBefore(h,r.firstChild):r.appendChild(h),l.renderfix=function(){},l},t.prototype.clear=function(){t.eve(\"raphael.clear\",this),this.canvas.innerHTML=d,this.span=t._g.doc.createElement(\"span\"),this.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\",this.canvas.appendChild(this.span),this.bottom=this.top=null},t.prototype.remove=function(){t.eve(\"raphael.remove\",this),this.canvas.parentNode.removeChild(this.canvas);for(var e in this)this[e]=\"function\"==typeof this[e]?t._removedFactory(e):null;return!0};var L=t.st;for(var z in M)M[e](z)&&!L[e](z)&&(L[z]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t].apply(r,e)})}}(z))}}.apply(e,i),!(void 0!==n&&(t.exports=n))}])});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL3JhcGhhZWwvcmFwaGFlbC5taW4uanM/YmYwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsdUlBQW1MLGlCQUFpQixtQkFBbUIsY0FBYyw0QkFBNEIsWUFBWSxVQUFVLGlCQUFpQixnRUFBZ0UsU0FBUywrQkFBK0Isa0JBQWtCLFFBQVEsaUNBQWlDLFNBQVMseUNBQXlDLGlCQUFpQixRQUFRLHVCQUF1QixjQUFjLDZEQUE2RCw2RUFBNkUsOENBQThDLG1DQUFtQyxjQUFjLDRFQUE0RSxpQ0FBaUMsRUFBRSx3Q0FBd0MsY0FBYyxnREFBZ0Qsd0JBQXdCLHVDQUF1QyxTQUFTLGdCQUFnQix1QkFBdUIsSUFBSSxnREFBZ0Qsa0JBQWtCLGFBQWEsaUZBQWlGLHVCQUF1QixvSEFBb0gsU0FBUyxhQUFhLGdCQUFnQixnQkFBZ0IsNEJBQTRCLFNBQVMsTUFBTSxRQUFRLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixPQUFPLGdCQUFnQixRQUFRLG9CQUFvQiw0QkFBNEIsa0JBQWtCLDRJQUE0SSxTQUFTLHNCQUFzQiwwQ0FBMEMsbUJBQW1CLDhCQUE4QiwrQkFBK0IseUxBQXlMLElBQUksS0FBSyx1REFBdUQsa0JBQWtCLFdBQVcsOEJBQThCLGlDQUFpQyw0QkFBNEIsMkJBQTJCLFNBQVMsNkNBQTZDLFVBQVUsNEJBQTRCLGtFQUFrRSxrR0FBa0csTUFBTSxnREFBZ0QsNExBQTRMLFdBQVcsZ0JBQWdCLGNBQWMsZ0JBQWdCLGdCQUFnQixrQkFBa0Isd0NBQXdDLHlDQUF5QyxrRkFBa0YsY0FBYyxNQUFNLEtBQUssaURBQWlELFFBQVEsa0JBQWtCLEVBQUUsUUFBUSxNQUFNLHlEQUF5RCxrQkFBa0IsRUFBRSxRQUFRLElBQUksZ0JBQWdCLElBQUks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Z0Usb0JBQW9CLDJCQUEyQix3RkFBd0YsZ0JBQWdCLDBEQUEwRCxzQ0FBc0MsbURBQW1ELHVGQUF1Rix1Q0FBdUMseUJBQXlCLDZEQUE2RCxvQkFBb0IsSUFBSSxvQ0FBb0MseUJBQXlCLHdEQUF3RCxjQUFjLElBQUksdUNBQXVDLDZDQUE2QyxjQUFjLG9EQUFvRCxtT0FBbU8sa0NBQWtDLDZDQUE2QyxzQ0FBc0MsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSx3SEFBd0gsb0JBQW9CLDhEQUE4RCxpTEFBaUwsZ0JBQWdCLDBEQUEwRCxpQ0FBaUMsd0JBQXdCLDJMQUEyTCwwQ0FBMEMsMkRBQTJELDhDQUE4Qyx3SEFBd0gsb0JBQW9CLDBCQUEwQixtQkFBbUIsUUFBUSxNQUFNLDhCQUE4QixpQkFBaUIsMEpBQTBKLElBQUksMkZBQTJGLHFEQUFxRCxTQUFTLGNBQWMsdUZBQXVGLHlEQUF5RCwwRkFBMEYsa0RBQWtELHNFQUFzRSwwTkFBME4sYUFBYSxZQUFZLFVBQVUsU0FBUyxjQUFjLGtEQUFrRCxPQUFPLE9BQU8sR0FBRyxRQUFRLEdBQUcscUJBQXFCLGtCQUFrQixhQUFhLEVBQUUsRUFBRSxFQUFFLElBQUksZ01BQWdNLEdBQUcsOEJBQThCLHdJQUF3SSxhQUFhLFlBQVksVUFBVSxTQUFTLGNBQWMsZUFBZSwrREFBK0QsK0JBQStCLDZFQUE2RSwrRUFBK0UsVUFBVSxXQUFXLG9EQUFvRCxrQkFBa0IsZ0JBQWdCLGdDQUFnQyxnQkFBZ0IsR0FBRyxNQUFNLHlDQUF5QyxHQUFHIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uIHQoZSxyKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1yKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSxyKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLlJhcGhhZWw9cigpOmUuUmFwaGFlbD1yKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIG49cltpXT17ZXhwb3J0czp7fSxpZDppLGxvYWRlZDohMX07cmV0dXJuIHRbaV0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsZSksbi5sb2FkZWQ9ITAsbi5leHBvcnRzfXZhciByPXt9O3JldHVybiBlLm09dCxlLmM9cixlLnA9XCJcIixlKDApfShbZnVuY3Rpb24odCxlLHIpe3ZhciBpLG47aT1bcigxKSxyKDMpLHIoNCldLG49ZnVuY3Rpb24odCl7cmV0dXJuIHR9LmFwcGx5KGUsaSksISh2b2lkIDAhPT1uJiYodC5leHBvcnRzPW4pKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBpLG47aT1bcigyKV0sbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2lmKGUuaXMocixcImZ1bmN0aW9uXCIpKXJldHVybiB3P3IoKTp0Lm9uKFwicmFwaGFlbC5ET01sb2FkXCIscik7aWYoZS5pcyhyLFEpKXJldHVybiBlLl9lbmdpbmUuY3JlYXRlW3pdKGUsci5zcGxpY2UoMCwzK2UuaXMoclswXSwkKSkpLmFkZChyKTt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7aWYoZS5pcyhpW2kubGVuZ3RoLTFdLFwiZnVuY3Rpb25cIikpe3ZhciBuPWkucG9wKCk7cmV0dXJuIHc/bi5jYWxsKGUuX2VuZ2luZS5jcmVhdGVbel0oZSxpKSk6dC5vbihcInJhcGhhZWwuRE9NbG9hZFwiLGZ1bmN0aW9uKCl7bi5jYWxsKGUuX2VuZ2luZS5jcmVhdGVbel0oZSxpKSl9KX1yZXR1cm4gZS5fZW5naW5lLmNyZWF0ZVt6XShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxPYmplY3QodCkhPT10KXJldHVybiB0O3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yO2Zvcih2YXIgaSBpbiB0KXRbQV0oaSkmJihlW2ldPXIodFtpXSkpO3JldHVybiBlfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspaWYodFtyXT09PWUpcmV0dXJuIHQucHVzaCh0LnNwbGljZShyLDEpWzBdKX1mdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLHM9YS5qb2luKFwi4pCAXCIpLG89bi5jYWNoZT1uLmNhY2hlfHx7fSxsPW4uY291bnQ9bi5jb3VudHx8W107cmV0dXJuIG9bQV0ocyk/KGkobCxzKSxyP3Iob1tzXSk6b1tzXSk6KGwubGVuZ3RoPj0xZTMmJmRlbGV0ZSBvW2wuc2hpZnQoKV0sbC5wdXNoKHMpLG9bc109dFt6XShlLGEpLHI/cihvW3NdKTpvW3NdKX1yZXR1cm4gbn1mdW5jdGlvbiBhKCl7cmV0dXJuIHRoaXMuaGV4fWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9W10saT0wLG49dC5sZW5ndGg7bi0yKiFlPmk7aSs9Mil7dmFyIGE9W3t4Oit0W2ktMl0seTordFtpLTFdfSx7eDordFtpXSx5Oit0W2krMV19LHt4Oit0W2krMl0seTordFtpKzNdfSx7eDordFtpKzRdLHk6K3RbaSs1XX1dO2U/aT9uLTQ9PWk/YVszXT17eDordFswXSx5Oit0WzFdfTpuLTI9PWkmJihhWzJdPXt4Oit0WzBdLHk6K3RbMV19LGFbM109e3g6K3RbMl0seTordFszXX0pOmFbMF09e3g6K3Rbbi0yXSx5Oit0W24tMV19Om4tND09aT9hWzNdPWFbMl06aXx8KGFbMF09e3g6K3RbaV0seTordFtpKzFdfSksci5wdXNoKFtcIkNcIiwoLWFbMF0ueCs2KmFbMV0ueCthWzJdLngpLzYsKC1hWzBdLnkrNiphWzFdLnkrYVsyXS55KS82LChhWzFdLngrNiphWzJdLngtYVszXS54KS82LChhWzFdLnkrNiphWzJdLnktYVszXS55KS82LGFbMl0ueCxhWzJdLnldKX1yZXR1cm4gcn1mdW5jdGlvbiBvKHQsZSxyLGksbil7dmFyIGE9LTMqZSs5KnItOSppKzMqbixzPXQqYSs2KmUtMTIqcis2Kmk7cmV0dXJuIHQqcy0zKmUrMypyfWZ1bmN0aW9uIGwodCxlLHIsaSxuLGEscyxsLGgpe251bGw9PWgmJihoPTEpLGg9aD4xPzE6aDwwPzA6aDtmb3IodmFyIHU9aC8yLGM9MTIsZj1bLS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLHA9Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxkPTAsZz0wO2c8YztnKyspe3ZhciB2PXUqZltnXSt1LHg9byh2LHQscixuLHMpLHk9byh2LGUsaSxhLGwpLG09eCp4K3kqeTtkKz1wW2ddKlkuc3FydChtKX1yZXR1cm4gdSpkfWZ1bmN0aW9uIGgodCxlLHIsaSxuLGEscyxvLGgpe2lmKCEoaDwwfHxsKHQsZSxyLGksbixhLHMsbyk8aCkpe3ZhciB1PTEsYz11LzIsZj11LWMscCxkPS4wMTtmb3IocD1sKHQsZSxyLGksbixhLHMsbyxmKTtIKHAtaCk+ZDspYy89MixmKz0ocDxoPzE6LTEpKmMscD1sKHQsZSxyLGksbixhLHMsbyxmKTtyZXR1cm4gZn19ZnVuY3Rpb24gdSh0LGUscixpLG4sYSxzLG8pe2lmKCEoVyh0LHIpPEcobixzKXx8Ryh0LHIpPlcobixzKXx8VyhlLGkpPEcoYSxvKXx8RyhlLGkpPlcoYSxvKSkpe3ZhciBsPSh0KmktZSpyKSoobi1zKS0odC1yKSoobipvLWEqcyksaD0odCppLWUqcikqKGEtbyktKGUtaSkqKG4qby1hKnMpLHU9KHQtcikqKGEtbyktKGUtaSkqKG4tcyk7aWYodSl7dmFyIGM9bC91LGY9aC91LHA9K2MudG9GaXhlZCgyKSxkPStmLnRvRml4ZWQoMik7aWYoIShwPCtHKHQscikudG9GaXhlZCgyKXx8cD4rVyh0LHIpLnRvRml4ZWQoMil8fHA8K0cobixzKS50b0ZpeGVkKDIpfHxwPitXKG4scykudG9GaXhlZCgyKXx8ZDwrRyhlLGkpLnRvRml4ZWQoMil8fGQ+K1coZSxpKS50b0ZpeGVkKDIpfHxkPCtHKGEsbykudG9GaXhlZCgyKXx8ZD4rVyhhLG8pLnRvRml4ZWQoMikpKXJldHVybnt4OmMseTpmfX19fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gcCh0LGUpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gcCh0LGUsMSl9ZnVuY3Rpb24gcCh0LHIsaSl7dmFyIG49ZS5iZXppZXJCQm94KHQpLGE9ZS5iZXppZXJCQm94KHIpO2lmKCFlLmlzQkJveEludGVyc2VjdChuLGEpKXJldHVybiBpPzA6W107Zm9yKHZhciBzPWwuYXBwbHkoMCx0KSxvPWwuYXBwbHkoMCxyKSxoPVcofn4ocy81KSwxKSxjPVcofn4oby81KSwxKSxmPVtdLHA9W10sZD17fSxnPWk/MDpbXSx2PTA7djxoKzE7disrKXt2YXIgeD1lLmZpbmREb3RzQXRTZWdtZW50LmFwcGx5KGUsdC5jb25jYXQodi9oKSk7Zi5wdXNoKHt4OngueCx5OngueSx0OnYvaH0pfWZvcih2PTA7djxjKzE7disrKXg9ZS5maW5kRG90c0F0U2VnbWVudC5hcHBseShlLHIuY29uY2F0KHYvYykpLHAucHVzaCh7eDp4LngseTp4LnksdDp2L2N9KTtmb3Iodj0wO3Y8aDt2KyspZm9yKHZhciB5PTA7eTxjO3krKyl7dmFyIG09Zlt2XSxiPWZbdisxXSxfPXBbeV0sdz1wW3krMV0saz1IKGIueC1tLngpPC4wMDE/XCJ5XCI6XCJ4XCIsQj1IKHcueC1fLngpPC4wMDE/XCJ5XCI6XCJ4XCIsQz11KG0ueCxtLnksYi54LGIueSxfLngsXy55LHcueCx3LnkpO2lmKEMpe2lmKGRbQy54LnRvRml4ZWQoNCldPT1DLnkudG9GaXhlZCg0KSljb250aW51ZTtkW0MueC50b0ZpeGVkKDQpXT1DLnkudG9GaXhlZCg0KTt2YXIgUz1tLnQrSCgoQ1trXS1tW2tdKS8oYltrXS1tW2tdKSkqKGIudC1tLnQpLEE9Xy50K0goKENbQl0tX1tCXSkvKHdbQl0tX1tCXSkpKih3LnQtXy50KTtTPj0wJiZTPD0xLjAwMSYmQT49MCYmQTw9MS4wMDEmJihpP2crKzpnLnB1c2goe3g6Qy54LHk6Qy55LHQxOkcoUywxKSx0MjpHKEEsMSl9KSl9fXJldHVybiBnfWZ1bmN0aW9uIGQodCxyLGkpe3Q9ZS5fcGF0aDJjdXJ2ZSh0KSxyPWUuX3BhdGgyY3VydmUocik7Zm9yKHZhciBuLGEscyxvLGwsaCx1LGMsZixkLGc9aT8wOltdLHY9MCx4PXQubGVuZ3RoO3Y8eDt2Kyspe3ZhciB5PXRbdl07aWYoXCJNXCI9PXlbMF0pbj1sPXlbMV0sYT1oPXlbMl07ZWxzZXtcIkNcIj09eVswXT8oZj1bbixhXS5jb25jYXQoeS5zbGljZSgxKSksbj1mWzZdLGE9Zls3XSk6KGY9W24sYSxuLGEsbCxoLGwsaF0sbj1sLGE9aCk7Zm9yKHZhciBtPTAsYj1yLmxlbmd0aDttPGI7bSsrKXt2YXIgXz1yW21dO2lmKFwiTVwiPT1fWzBdKXM9dT1fWzFdLG89Yz1fWzJdO2Vsc2V7XCJDXCI9PV9bMF0/KGQ9W3Msb10uY29uY2F0KF8uc2xpY2UoMSkpLHM9ZFs2XSxvPWRbN10pOihkPVtzLG8scyxvLHUsYyx1LGNdLHM9dSxvPWMpO3ZhciB3PXAoZixkLGkpO2lmKGkpZys9dztlbHNle2Zvcih2YXIgaz0wLEI9dy5sZW5ndGg7azxCO2srKyl3W2tdLnNlZ21lbnQxPXYsd1trXS5zZWdtZW50Mj1tLHdba10uYmV6MT1mLHdba10uYmV6Mj1kO2c9Zy5jb25jYXQodyl9fX19fXJldHVybiBnfWZ1bmN0aW9uIGcodCxlLHIsaSxuLGEpe251bGwhPXQ/KHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5jPStyLHRoaXMuZD0raSx0aGlzLmU9K24sdGhpcy5mPSthKToodGhpcy5hPTEsdGhpcy5iPTAsdGhpcy5jPTAsdGhpcy5kPTEsdGhpcy5lPTAsdGhpcy5mPTApfWZ1bmN0aW9uIHYoKXtyZXR1cm4gdGhpcy54K2ordGhpcy55fWZ1bmN0aW9uIHgoKXtyZXR1cm4gdGhpcy54K2ordGhpcy55K2ordGhpcy53aWR0aCtcIiDDlyBcIit0aGlzLmhlaWdodH1mdW5jdGlvbiB5KHQsZSxyLGksbixhKXtmdW5jdGlvbiBzKHQpe3JldHVybigoYyp0K3UpKnQraCkqdH1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybigoZCpyK3ApKnIrZikqcn1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsaSxuLGEsbyxsO2ZvcihuPXQsbD0wO2w8ODtsKyspe2lmKGE9cyhuKS10LEgoYSk8ZSlyZXR1cm4gbjtpZihvPSgzKmMqbisyKnUpKm4raCxIKG8pPDFlLTYpYnJlYWs7bi09YS9vfWlmKHI9MCxpPTEsbj10LG48cilyZXR1cm4gcjtpZihuPmkpcmV0dXJuIGk7Zm9yKDtyPGk7KXtpZihhPXMobiksSChhLXQpPGUpcmV0dXJuIG47dD5hP3I9bjppPW4sbj0oaS1yKS8yK3J9cmV0dXJuIG59dmFyIGg9MyplLHU9MyooaS1lKS1oLGM9MS1oLXUsZj0zKnIscD0zKihuLXIpLWYsZD0xLWYtcDtyZXR1cm4gbyh0LDEvKDIwMCphKSl9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPVtdLGk9e307aWYodGhpcy5tcz1lLHRoaXMudGltZXM9MSx0KXtmb3IodmFyIG4gaW4gdCl0W0FdKG4pJiYoaVtodChuKV09dFtuXSxyLnB1c2goaHQobikpKTtyLnNvcnQoQnQpfXRoaXMuYW5pbT1pLHRoaXMudG9wPXJbci5sZW5ndGgtMV0sdGhpcy5wZXJjZW50cz1yfWZ1bmN0aW9uIGIocixpLG4sYSxzLG8pe249aHQobik7dmFyIGwsaCx1LGM9W10sZixwLGQsdj1yLm1zLHg9e30sbT17fSxiPXt9O2lmKGEpZm9yKHc9MCxCPUVlLmxlbmd0aDt3PEI7dysrKXt2YXIgXz1FZVt3XTtpZihfLmVsLmlkPT1pLmlkJiZfLmFuaW09PXIpe18ucGVyY2VudCE9bj8oRWUuc3BsaWNlKHcsMSksdT0xKTpoPV8saS5hdHRyKF8udG90YWxPcmlnaW4pO2JyZWFrfX1lbHNlIGE9K207Zm9yKHZhciB3PTAsQj1yLnBlcmNlbnRzLmxlbmd0aDt3PEI7dysrKXtpZihyLnBlcmNlbnRzW3ddPT1ufHxyLnBlcmNlbnRzW3ddPmEqci50b3Ape249ci5wZXJjZW50c1t3XSxwPXIucGVyY2VudHNbdy0xXXx8MCx2PXYvci50b3AqKG4tcCksZj1yLnBlcmNlbnRzW3crMV0sbD1yLmFuaW1bbl07YnJlYWt9YSYmaS5hdHRyKHIuYW5pbVtyLnBlcmNlbnRzW3ddXSl9aWYobCl7aWYoaCloLmluaXRzdGF0dXM9YSxoLnN0YXJ0PW5ldyBEYXRlLWgubXMqYTtlbHNle2Zvcih2YXIgQyBpbiBsKWlmKGxbQV0oQykmJihwdFtBXShDKXx8aS5wYXBlci5jdXN0b21BdHRyaWJ1dGVzW0FdKEMpKSlzd2l0Y2goeFtDXT1pLmF0dHIoQyksbnVsbD09eFtDXSYmKHhbQ109ZnRbQ10pLG1bQ109bFtDXSxwdFtDXSl7Y2FzZSAkOmJbQ109KG1bQ10teFtDXSkvdjticmVhaztjYXNlXCJjb2xvdXJcIjp4W0NdPWUuZ2V0UkdCKHhbQ10pO3ZhciBTPWUuZ2V0UkdCKG1bQ10pO2JbQ109e3I6KFMuci14W0NdLnIpL3YsZzooUy5nLXhbQ10uZykvdixiOihTLmIteFtDXS5iKS92fTticmVhaztjYXNlXCJwYXRoXCI6dmFyIFQ9UXQoeFtDXSxtW0NdKSxFPVRbMV07Zm9yKHhbQ109VFswXSxiW0NdPVtdLHc9MCxCPXhbQ10ubGVuZ3RoO3c8Qjt3Kyspe2JbQ11bd109WzBdO2Zvcih2YXIgTT0xLE49eFtDXVt3XS5sZW5ndGg7TTxOO00rKyliW0NdW3ddW01dPShFW3ddW01dLXhbQ11bd11bTV0pL3Z9YnJlYWs7Y2FzZVwidHJhbnNmb3JtXCI6dmFyIEw9aS5fLHo9bGUoTFtDXSxtW0NdKTtpZih6KWZvcih4W0NdPXouZnJvbSxtW0NdPXoudG8sYltDXT1bXSxiW0NdLnJlYWw9ITAsdz0wLEI9eFtDXS5sZW5ndGg7dzxCO3crKylmb3IoYltDXVt3XT1beFtDXVt3XVswXV0sTT0xLE49eFtDXVt3XS5sZW5ndGg7TTxOO00rKyliW0NdW3ddW01dPShtW0NdW3ddW01dLXhbQ11bd11bTV0pL3Y7ZWxzZXt2YXIgRj1pLm1hdHJpeHx8bmV3IGcsUj17Xzp7dHJhbnNmb3JtOkwudHJhbnNmb3JtfSxnZXRCQm94OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0QkJveCgxKX19O3hbQ109W0YuYSxGLmIsRi5jLEYuZCxGLmUsRi5mXSxzZShSLG1bQ10pLG1bQ109Ui5fLnRyYW5zZm9ybSxiW0NdPVsoUi5tYXRyaXguYS1GLmEpL3YsKFIubWF0cml4LmItRi5iKS92LChSLm1hdHJpeC5jLUYuYykvdiwoUi5tYXRyaXguZC1GLmQpL3YsKFIubWF0cml4LmUtRi5lKS92LChSLm1hdHJpeC5mLUYuZikvdl19YnJlYWs7Y2FzZVwiY3N2XCI6dmFyIGo9SShsW0NdKVtxXShrKSxEPUkoeFtDXSlbcV0oayk7aWYoXCJjbGlwLXJlY3RcIj09Qylmb3IoeFtDXT1ELGJbQ109W10sdz1ELmxlbmd0aDt3LS07KWJbQ11bd109KGpbd10teFtDXVt3XSkvdjttW0NdPWo7YnJlYWs7ZGVmYXVsdDpmb3Ioaj1bXVtQXShsW0NdKSxEPVtdW1BdKHhbQ10pLGJbQ109W10sdz1pLnBhcGVyLmN1c3RvbUF0dHJpYnV0ZXNbQ10ubGVuZ3RoO3ctLTspYltDXVt3XT0oKGpbd118fDApLShEW3ddfHwwKSkvdn12YXIgVj1sLmVhc2luZyxPPWUuZWFzaW5nX2Zvcm11bGFzW1ZdO2lmKCFPKWlmKE89SShWKS5tYXRjaChzdCksTyYmNT09Ty5sZW5ndGgpe3ZhciBZPU87Tz1mdW5jdGlvbih0KXtyZXR1cm4geSh0LCtZWzFdLCtZWzJdLCtZWzNdLCtZWzRdLHYpfX1lbHNlIE89U3Q7aWYoZD1sLnN0YXJ0fHxyLnN0YXJ0fHwrbmV3IERhdGUsXz17YW5pbTpyLHBlcmNlbnQ6bix0aW1lc3RhbXA6ZCxzdGFydDpkKyhyLmRlbHx8MCksc3RhdHVzOjAsaW5pdHN0YXR1czphfHwwLHN0b3A6ITEsbXM6dixlYXNpbmc6Tyxmcm9tOngsZGlmZjpiLHRvOm0sZWw6aSxjYWxsYmFjazpsLmNhbGxiYWNrLHByZXY6cCxuZXh0OmYscmVwZWF0Om98fHIudGltZXMsb3JpZ2luOmkuYXR0cigpLHRvdGFsT3JpZ2luOnN9LEVlLnB1c2goXyksYSYmIWgmJiF1JiYoXy5zdG9wPSEwLF8uc3RhcnQ9bmV3IERhdGUtdiphLDE9PUVlLmxlbmd0aCkpcmV0dXJuIE5lKCk7dSYmKF8uc3RhcnQ9bmV3IERhdGUtXy5tcyphKSwxPT1FZS5sZW5ndGgmJk1lKE5lKX10KFwicmFwaGFlbC5hbmltLnN0YXJ0LlwiK2kuaWQsaSxyKX19ZnVuY3Rpb24gXyh0KXtmb3IodmFyIGU9MDtlPEVlLmxlbmd0aDtlKyspRWVbZV0uZWwucGFwZXI9PXQmJkVlLnNwbGljZShlLS0sMSl9ZS52ZXJzaW9uPVwiMi4yLjBcIixlLmV2ZT10O3ZhciB3LGs9L1ssIF0rLyxCPXtjaXJjbGU6MSxyZWN0OjEscGF0aDoxLGVsbGlwc2U6MSx0ZXh0OjEsaW1hZ2U6MX0sQz0vXFx7KFxcZCspXFx9L2csUz1cInByb3RvdHlwZVwiLEE9XCJoYXNPd25Qcm9wZXJ0eVwiLFQ9e2RvYzpkb2N1bWVudCx3aW46d2luZG93fSxFPXt3YXM6T2JqZWN0LnByb3RvdHlwZVtBXS5jYWxsKFQud2luLFwiUmFwaGFlbFwiKSxpczpULndpbi5SYXBoYWVsfSxNPWZ1bmN0aW9uKCl7dGhpcy5jYT10aGlzLmN1c3RvbUF0dHJpYnV0ZXM9e319LE4sTD1cImFwcGVuZENoaWxkXCIsej1cImFwcGx5XCIsUD1cImNvbmNhdFwiLEY9XCJvbnRvdWNoc3RhcnRcImluIFQud2lufHxULndpbi5Eb2N1bWVudFRvdWNoJiZULmRvYyBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2gsUj1cIlwiLGo9XCIgXCIsST1TdHJpbmcscT1cInNwbGl0XCIsRD1cImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZW1vdmUgbW91c2VvdXQgbW91c2VvdmVyIG1vdXNldXAgdG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWxcIltxXShqKSxWPXttb3VzZWRvd246XCJ0b3VjaHN0YXJ0XCIsbW91c2Vtb3ZlOlwidG91Y2htb3ZlXCIsbW91c2V1cDpcInRvdWNoZW5kXCJ9LE89SS5wcm90b3R5cGUudG9Mb3dlckNhc2UsWT1NYXRoLFc9WS5tYXgsRz1ZLm1pbixIPVkuYWJzLFg9WS5wb3csVT1ZLlBJLCQ9XCJudW1iZXJcIixaPVwic3RyaW5nXCIsUT1cImFycmF5XCIsSj1cInRvU3RyaW5nXCIsSz1cImZpbGxcIix0dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGV0PXt9LHJ0PVwicHVzaFwiLGl0PWUuX0lTVVJMPS9edXJsXFwoWydcIl0/KC4rPylbJ1wiXT9cXCkkL2ksbnQ9L15cXHMqKCgjW2EtZlxcZF17Nn0pfCgjW2EtZlxcZF17M30pfHJnYmE/XFwoXFxzKihbXFxkXFwuXSslP1xccyosXFxzKltcXGRcXC5dKyU/XFxzKixcXHMqW1xcZFxcLl0rJT8oPzpcXHMqLFxccypbXFxkXFwuXSslPyk/KVxccypcXCl8aHNiYT9cXChcXHMqKFtcXGRcXC5dKyg/OmRlZ3xcXHhiMHwlKT9cXHMqLFxccypbXFxkXFwuXSslP1xccyosXFxzKltcXGRcXC5dKyg/OiU/XFxzKixcXHMqW1xcZFxcLl0rKT8pJT9cXHMqXFwpfGhzbGE/XFwoXFxzKihbXFxkXFwuXSsoPzpkZWd8XFx4YjB8JSk/XFxzKixcXHMqW1xcZFxcLl0rJT9cXHMqLFxccypbXFxkXFwuXSsoPzolP1xccyosXFxzKltcXGRcXC5dKyk/KSU/XFxzKlxcKSlcXHMqJC9pLGF0PXtOYU46MSxJbmZpbml0eToxLFwiLUluZmluaXR5XCI6MX0sc3Q9L14oPzpjdWJpYy0pP2JlemllclxcKChbXixdKyksKFteLF0rKSwoW14sXSspLChbXlxcKV0rKVxcKS8sb3Q9WS5yb3VuZCxsdD1cInNldEF0dHJpYnV0ZVwiLGh0PXBhcnNlRmxvYXQsdXQ9cGFyc2VJbnQsY3Q9SS5wcm90b3R5cGUudG9VcHBlckNhc2UsZnQ9ZS5fYXZhaWxhYmxlQXR0cnM9e1wiYXJyb3ctZW5kXCI6XCJub25lXCIsXCJhcnJvdy1zdGFydFwiOlwibm9uZVwiLGJsdXI6MCxcImNsaXAtcmVjdFwiOlwiMCAwIDFlOSAxZTlcIixjdXJzb3I6XCJkZWZhdWx0XCIsY3g6MCxjeTowLGZpbGw6XCIjZmZmXCIsXCJmaWxsLW9wYWNpdHlcIjoxLGZvbnQ6JzEwcHggXCJBcmlhbFwiJyxcImZvbnQtZmFtaWx5XCI6J1wiQXJpYWxcIicsXCJmb250LXNpemVcIjpcIjEwXCIsXCJmb250LXN0eWxlXCI6XCJub3JtYWxcIixcImZvbnQtd2VpZ2h0XCI6NDAwLGdyYWRpZW50OjAsaGVpZ2h0OjAsaHJlZjpcImh0dHA6Ly9yYXBoYWVsanMuY29tL1wiLFwibGV0dGVyLXNwYWNpbmdcIjowLG9wYWNpdHk6MSxwYXRoOlwiTTAsMFwiLHI6MCxyeDowLHJ5OjAsc3JjOlwiXCIsc3Ryb2tlOlwiIzAwMFwiLFwic3Ryb2tlLWRhc2hhcnJheVwiOlwiXCIsXCJzdHJva2UtbGluZWNhcFwiOlwiYnV0dFwiLFwic3Ryb2tlLWxpbmVqb2luXCI6XCJidXR0XCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiOjAsXCJzdHJva2Utb3BhY2l0eVwiOjEsXCJzdHJva2Utd2lkdGhcIjoxLHRhcmdldDpcIl9ibGFua1wiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwiLHRpdGxlOlwiUmFwaGFlbFwiLHRyYW5zZm9ybTpcIlwiLHdpZHRoOjAseDowLHk6MCxcImNsYXNzXCI6XCJcIn0scHQ9ZS5fYXZhaWxhYmxlQW5pbUF0dHJzPXtibHVyOiQsXCJjbGlwLXJlY3RcIjpcImNzdlwiLGN4OiQsY3k6JCxmaWxsOlwiY29sb3VyXCIsXCJmaWxsLW9wYWNpdHlcIjokLFwiZm9udC1zaXplXCI6JCxoZWlnaHQ6JCxvcGFjaXR5OiQscGF0aDpcInBhdGhcIixyOiQscng6JCxyeTokLHN0cm9rZTpcImNvbG91clwiLFwic3Ryb2tlLW9wYWNpdHlcIjokLFwic3Ryb2tlLXdpZHRoXCI6JCx0cmFuc2Zvcm06XCJ0cmFuc2Zvcm1cIix3aWR0aDokLHg6JCx5OiR9LGR0PS9bXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldL2csZ3Q9L1tcXHgwOVxceDBhXFx4MGJcXHgwY1xceDBkXFx4MjBcXHhhMFxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUyMDI4XFx1MjAyOV0qLFtcXHgwOVxceDBhXFx4MGJcXHgwY1xceDBkXFx4MjBcXHhhMFxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUyMDI4XFx1MjAyOV0qLyx2dD17aHM6MSxyZzoxfSx4dD0vLD8oW2FjaGxtcXJzdHZ4el0pLD8vZ2kseXQ9LyhbYWNobG1ycXN0dnpdKVtcXHgwOVxceDBhXFx4MGJcXHgwY1xceDBkXFx4MjBcXHhhMFxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUyMDI4XFx1MjAyOSxdKigoLT9cXGQqXFwuP1xcZCooPzplW1xcLStdP1xcZCspP1tcXHgwOVxceDBhXFx4MGJcXHgwY1xceDBkXFx4MjBcXHhhMFxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUyMDI4XFx1MjAyOV0qLD9bXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldKikrKS9naSxtdD0vKFtyc3RtXSlbXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjksXSooKC0/XFxkKlxcLj9cXGQqKD86ZVtcXC0rXT9cXGQrKT9bXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldKiw/W1xceDA5XFx4MGFcXHgwYlxceDBjXFx4MGRcXHgyMFxceGEwXFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTIwMjhcXHUyMDI5XSopKykvZ2ksYnQ9LygtP1xcZCpcXC4/XFxkKig/OmVbXFwtK10/XFxkKyk/KVtcXHgwOVxceDBhXFx4MGJcXHgwY1xceDBkXFx4MjBcXHhhMFxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUyMDI4XFx1MjAyOV0qLD9bXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldKi9naSxfdD1lLl9yYWRpYWxfZ3JhZGllbnQ9L15yKD86XFwoKFteLF0rPylbXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldKixbXFx4MDlcXHgwYVxceDBiXFx4MGNcXHgwZFxceDIwXFx4YTBcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MjAyOFxcdTIwMjldKihbXlxcKV0rPylcXCkpPy8sd3Q9e30sa3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5rZXktZS5rZXl9LEJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGh0KHQpLWh0KGUpfSxDdD1mdW5jdGlvbigpe30sU3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEF0PWUuX3JlY3RQYXRoPWZ1bmN0aW9uKHQsZSxyLGksbil7cmV0dXJuIG4/W1tcIk1cIix0K24sZV0sW1wibFwiLHItMipuLDBdLFtcImFcIixuLG4sMCwwLDEsbixuXSxbXCJsXCIsMCxpLTIqbl0sW1wiYVwiLG4sbiwwLDAsMSwtbixuXSxbXCJsXCIsMipuLXIsMF0sW1wiYVwiLG4sbiwwLDAsMSwtbiwtbl0sW1wibFwiLDAsMipuLWldLFtcImFcIixuLG4sMCwwLDEsbiwtbl0sW1wielwiXV06W1tcIk1cIix0LGVdLFtcImxcIixyLDBdLFtcImxcIiwwLGldLFtcImxcIiwtciwwXSxbXCJ6XCJdXX0sVHQ9ZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG51bGw9PWkmJihpPXIpLFtbXCJNXCIsdCxlXSxbXCJtXCIsMCwtaV0sW1wiYVwiLHIsaSwwLDEsMSwwLDIqaV0sW1wiYVwiLHIsaSwwLDEsMSwwLC0yKmldLFtcInpcIl1dfSxFdD1lLl9nZXRQYXRoPXtwYXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0LmF0dHIoXCJwYXRoXCIpfSxjaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hdHRycztyZXR1cm4gVHQoZS5jeCxlLmN5LGUucil9LGVsbGlwc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5hdHRycztyZXR1cm4gVHQoZS5jeCxlLmN5LGUucngsZS5yeSl9LHJlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5hdHRycztyZXR1cm4gQXQoZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0LGUucil9LGltYWdlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYXR0cnM7cmV0dXJuIEF0KGUueCxlLnksZS53aWR0aCxlLmhlaWdodCl9LHRleHQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZ2V0QkJveCgpO3JldHVybiBBdChlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZ2V0QkJveCgpO3JldHVybiBBdChlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfX0sTXQ9ZS5tYXBQYXRoPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHIsaSxuLGEscyxvLGw7Zm9yKHQ9UXQodCksbj0wLHM9dC5sZW5ndGg7bjxzO24rKylmb3IobD10W25dLGE9MSxvPWwubGVuZ3RoO2E8bzthKz0yKXI9ZS54KGxbYV0sbFthKzFdKSxpPWUueShsW2FdLGxbYSsxXSksbFthXT1yLGxbYSsxXT1pO3JldHVybiB0fTtpZihlLl9nPVQsZS50eXBlPVQud2luLlNWR0FuZ2xlfHxULmRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKFwiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZVwiLFwiMS4xXCIpP1wiU1ZHXCI6XCJWTUxcIixcIlZNTFwiPT1lLnR5cGUpe3ZhciBOdD1ULmRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLEx0O2lmKE50LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPVwiMVwiLz4nLEx0PU50LmZpcnN0Q2hpbGQsTHQuc3R5bGUuYmVoYXZpb3I9XCJ1cmwoI2RlZmF1bHQjVk1MKVwiLCFMdHx8XCJvYmplY3RcIiE9dHlwZW9mIEx0LmFkailyZXR1cm4gZS50eXBlPVI7TnQ9bnVsbH1lLnN2Zz0hKGUudm1sPVwiVk1MXCI9PWUudHlwZSksZS5fUGFwZXI9TSxlLmZuPU49TS5wcm90b3R5cGU9ZS5wcm90b3R5cGUsZS5faWQ9MCxlLmlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9Ty5jYWxsKGUpLFwiZmluaXRlXCI9PWU/IWF0W0FdKCt0KTpcImFycmF5XCI9PWU/dCBpbnN0YW5jZW9mIEFycmF5OlwibnVsbFwiPT1lJiZudWxsPT09dHx8ZT09dHlwZW9mIHQmJm51bGwhPT10fHxcIm9iamVjdFwiPT1lJiZ0PT09T2JqZWN0KHQpfHxcImFycmF5XCI9PWUmJkFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodCl8fHR0LmNhbGwodCkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKT09ZX0sZS5hbmdsZT1mdW5jdGlvbih0LHIsaSxuLGEscyl7aWYobnVsbD09YSl7dmFyIG89dC1pLGw9ci1uO3JldHVybiBvfHxsPygxODArMTgwKlkuYXRhbjIoLWwsLW8pL1UrMzYwKSUzNjA6MH1yZXR1cm4gZS5hbmdsZSh0LHIsYSxzKS1lLmFuZ2xlKGksbixhLHMpfSxlLnJhZD1mdW5jdGlvbih0KXtyZXR1cm4gdCUzNjAqVS8xODB9LGUuZGVnPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDE4MCp0L1UlMzYwKjFlMykvMWUzfSxlLnNuYXBUbz1mdW5jdGlvbih0LHIsaSl7aWYoaT1lLmlzKGksXCJmaW5pdGVcIik/aToxMCxlLmlzKHQsUSkpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKEgodFtuXS1yKTw9aSlyZXR1cm4gdFtuXX1lbHNle3Q9K3Q7dmFyIGE9ciV0O2lmKGE8aSlyZXR1cm4gci1hO2lmKGE+dC1pKXJldHVybiByLWErdH1yZXR1cm4gcn07dmFyIHp0PWUuY3JlYXRlVVVJRD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVyblwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZSh0LGUpLnRvVXBwZXJDYXNlKCl9fSgvW3h5XS9nLGZ1bmN0aW9uKHQpe3ZhciBlPTE2KlkucmFuZG9tKCl8MCxyPVwieFwiPT10P2U6MyZlfDg7cmV0dXJuIHIudG9TdHJpbmcoMTYpfSk7ZS5zZXRXaW5kb3c9ZnVuY3Rpb24ocil7dChcInJhcGhhZWwuc2V0V2luZG93XCIsZSxULndpbixyKSxULndpbj1yLFQuZG9jPVQud2luLmRvY3VtZW50LGUuX2VuZ2luZS5pbml0V2luJiZlLl9lbmdpbmUuaW5pdFdpbihULndpbil9O3ZhciBQdD1mdW5jdGlvbih0KXtpZihlLnZtbCl7dmFyIHI9L15cXHMrfFxccyskL2csaTt0cnl7dmFyIGE9bmV3IEFjdGl2ZVhPYmplY3QoXCJodG1sZmlsZVwiKTthLndyaXRlKFwiPGJvZHk+XCIpLGEuY2xvc2UoKSxpPWEuYm9keX1jYXRjaChzKXtpPWNyZWF0ZVBvcHVwKCkuZG9jdW1lbnQuYm9keX12YXIgbz1pLmNyZWF0ZVRleHRSYW5nZSgpO1B0PW4oZnVuY3Rpb24odCl7dHJ5e2kuc3R5bGUuY29sb3I9SSh0KS5yZXBsYWNlKHIsUik7dmFyIGU9by5xdWVyeUNvbW1hbmRWYWx1ZShcIkZvcmVDb2xvclwiKTtyZXR1cm4gZT0oMjU1JmUpPDwxNnw2NTI4MCZlfCgxNjcxMTY4MCZlKT4+PjE2LFwiI1wiKyhcIjAwMDAwMFwiK2UudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Y2F0Y2gobil7cmV0dXJuXCJub25lXCJ9fSl9ZWxzZXt2YXIgbD1ULmRvYy5jcmVhdGVFbGVtZW50KFwiaVwiKTtsLnRpdGxlPVwiUmFwaGHDq2wgQ29sb3VyIFBpY2tlclwiLGwuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixULmRvYy5ib2R5LmFwcGVuZENoaWxkKGwpLFB0PW4oZnVuY3Rpb24odCl7cmV0dXJuIGwuc3R5bGUuY29sb3I9dCxULmRvYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGwsUikuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpfSl9cmV0dXJuIFB0KHQpfSxGdD1mdW5jdGlvbigpe3JldHVyblwiaHNiKFwiK1t0aGlzLmgsdGhpcy5zLHRoaXMuYl0rXCIpXCJ9LFJ0PWZ1bmN0aW9uKCl7cmV0dXJuXCJoc2woXCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5sXStcIilcIn0sanQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZXh9LEl0PWZ1bmN0aW9uKHQscixpKXtpZihudWxsPT1yJiZlLmlzKHQsXCJvYmplY3RcIikmJlwiclwiaW4gdCYmXCJnXCJpbiB0JiZcImJcImluIHQmJihpPXQuYixyPXQuZyx0PXQuciksbnVsbD09ciYmZS5pcyh0LFopKXt2YXIgbj1lLmdldFJHQih0KTt0PW4ucixyPW4uZyxpPW4uYn1yZXR1cm4odD4xfHxyPjF8fGk+MSkmJih0Lz0yNTUsci89MjU1LGkvPTI1NSksW3QscixpXX0scXQ9ZnVuY3Rpb24odCxyLGksbil7dCo9MjU1LHIqPTI1NSxpKj0yNTU7dmFyIGE9e3I6dCxnOnIsYjppLGhleDplLnJnYih0LHIsaSksdG9TdHJpbmc6anR9O3JldHVybiBlLmlzKG4sXCJmaW5pdGVcIikmJihhLm9wYWNpdHk9biksYX07ZS5jb2xvcj1mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5pcyh0LFwib2JqZWN0XCIpJiZcImhcImluIHQmJlwic1wiaW4gdCYmXCJiXCJpbiB0PyhyPWUuaHNiMnJnYih0KSx0LnI9ci5yLHQuZz1yLmcsdC5iPXIuYix0LmhleD1yLmhleCk6ZS5pcyh0LFwib2JqZWN0XCIpJiZcImhcImluIHQmJlwic1wiaW4gdCYmXCJsXCJpbiB0PyhyPWUuaHNsMnJnYih0KSx0LnI9ci5yLHQuZz1yLmcsdC5iPXIuYix0LmhleD1yLmhleCk6KGUuaXModCxcInN0cmluZ1wiKSYmKHQ9ZS5nZXRSR0IodCkpLGUuaXModCxcIm9iamVjdFwiKSYmXCJyXCJpbiB0JiZcImdcImluIHQmJlwiYlwiaW4gdD8ocj1lLnJnYjJoc2wodCksdC5oPXIuaCx0LnM9ci5zLHQubD1yLmwscj1lLnJnYjJoc2IodCksdC52PXIuYik6KHQ9e2hleDpcIm5vbmVcIn0sdC5yPXQuZz10LmI9dC5oPXQucz10LnY9dC5sPS0xKSksdC50b1N0cmluZz1qdCx0fSxlLmhzYjJyZ2I9ZnVuY3Rpb24odCxlLHIsaSl7dGhpcy5pcyh0LFwib2JqZWN0XCIpJiZcImhcImluIHQmJlwic1wiaW4gdCYmXCJiXCJpbiB0JiYocj10LmIsZT10LnMsaT10Lm8sdD10LmgpLHQqPTM2MDt2YXIgbixhLHMsbyxsO3JldHVybiB0PXQlMzYwLzYwLGw9ciplLG89bCooMS1IKHQlMi0xKSksbj1hPXM9ci1sLHQ9fn50LG4rPVtsLG8sMCwwLG8sbF1bdF0sYSs9W28sbCxsLG8sMCwwXVt0XSxzKz1bMCwwLG8sbCxsLG9dW3RdLHF0KG4sYSxzLGkpfSxlLmhzbDJyZ2I9ZnVuY3Rpb24odCxlLHIsaSl7dGhpcy5pcyh0LFwib2JqZWN0XCIpJiZcImhcImluIHQmJlwic1wiaW4gdCYmXCJsXCJpbiB0JiYocj10LmwsZT10LnMsdD10LmgpLCh0PjF8fGU+MXx8cj4xKSYmKHQvPTM2MCxlLz0xMDAsci89MTAwKSx0Kj0zNjA7dmFyIG4sYSxzLG8sbDtyZXR1cm4gdD10JTM2MC82MCxsPTIqZSoocjwuNT9yOjEtciksbz1sKigxLUgodCUyLTEpKSxuPWE9cz1yLWwvMix0PX5+dCxuKz1bbCxvLDAsMCxvLGxdW3RdLGErPVtvLGwsbCxvLDAsMF1bdF0scys9WzAsMCxvLGwsbCxvXVt0XSxxdChuLGEscyxpKX0sZS5yZ2IyaHNiPWZ1bmN0aW9uKHQsZSxyKXtyPUl0KHQsZSxyKSx0PXJbMF0sZT1yWzFdLHI9clsyXTt2YXIgaSxuLGEscztyZXR1cm4gYT1XKHQsZSxyKSxzPWEtRyh0LGUsciksaT0wPT1zP251bGw6YT09dD8oZS1yKS9zOmE9PWU/KHItdCkvcysyOih0LWUpL3MrNCxpPShpKzM2MCklNio2MC8zNjAsbj0wPT1zPzA6cy9hLHtoOmksczpuLGI6YSx0b1N0cmluZzpGdH19LGUucmdiMmhzbD1mdW5jdGlvbih0LGUscil7cj1JdCh0LGUsciksdD1yWzBdLGU9clsxXSxyPXJbMl07dmFyIGksbixhLHMsbyxsO3JldHVybiBzPVcodCxlLHIpLG89Ryh0LGUsciksbD1zLW8saT0wPT1sP251bGw6cz09dD8oZS1yKS9sOnM9PWU/KHItdCkvbCsyOih0LWUpL2wrNCxpPShpKzM2MCklNio2MC8zNjAsYT0ocytvKS8yLG49MD09bD8wOmE8LjU/bC8oMiphKTpsLygyLTIqYSkse2g6aSxzOm4sbDphLHRvU3RyaW5nOlJ0fX0sZS5fcGF0aDJzdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qb2luKFwiLFwiKS5yZXBsYWNlKHh0LFwiJDFcIil9O3ZhciBEdD1lLl9wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9VC5kb2MuY3JlYXRlRWxlbWVudChcImltZ1wiKTtyLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5ZW07dG9wOi05OTk5ZW1cIixyLm9ubG9hZD1mdW5jdGlvbigpe2UuY2FsbCh0aGlzKSx0aGlzLm9ubG9hZD1udWxsLFQuZG9jLmJvZHkucmVtb3ZlQ2hpbGQodGhpcyl9LHIub25lcnJvcj1mdW5jdGlvbigpe1QuZG9jLmJvZHkucmVtb3ZlQ2hpbGQodGhpcyl9LFQuZG9jLmJvZHkuYXBwZW5kQ2hpbGQociksci5zcmM9dH07ZS5nZXRSR0I9bihmdW5jdGlvbih0KXtpZighdHx8KHQ9SSh0KSkuaW5kZXhPZihcIi1cIikrMSlyZXR1cm57cjotMSxnOi0xLGI6LTEsaGV4Olwibm9uZVwiLGVycm9yOjEsdG9TdHJpbmc6YX07aWYoXCJub25lXCI9PXQpcmV0dXJue3I6LTEsZzotMSxiOi0xLGhleDpcIm5vbmVcIix0b1N0cmluZzphfTshKHZ0W0FdKHQudG9Mb3dlckNhc2UoKS5zdWJzdHJpbmcoMCwyKSl8fFwiI1wiPT10LmNoYXJBdCgpKSYmKHQ9UHQodCkpO3ZhciByLGksbixzLG8sbCxoLHU9dC5tYXRjaChudCk7cmV0dXJuIHU/KHVbMl0mJihzPXV0KHVbMl0uc3Vic3RyaW5nKDUpLDE2KSxuPXV0KHVbMl0uc3Vic3RyaW5nKDMsNSksMTYpLGk9dXQodVsyXS5zdWJzdHJpbmcoMSwzKSwxNikpLHVbM10mJihzPXV0KChsPXVbM10uY2hhckF0KDMpKStsLDE2KSxuPXV0KChsPXVbM10uY2hhckF0KDIpKStsLDE2KSxpPXV0KChsPXVbM10uY2hhckF0KDEpKStsLDE2KSksdVs0XSYmKGg9dVs0XVtxXShndCksaT1odChoWzBdKSxcIiVcIj09aFswXS5zbGljZSgtMSkmJihpKj0yLjU1KSxuPWh0KGhbMV0pLFwiJVwiPT1oWzFdLnNsaWNlKC0xKSYmKG4qPTIuNTUpLHM9aHQoaFsyXSksXCIlXCI9PWhbMl0uc2xpY2UoLTEpJiYocyo9Mi41NSksXCJyZ2JhXCI9PXVbMV0udG9Mb3dlckNhc2UoKS5zbGljZSgwLDQpJiYobz1odChoWzNdKSksaFszXSYmXCIlXCI9PWhbM10uc2xpY2UoLTEpJiYoby89MTAwKSksdVs1XT8oaD11WzVdW3FdKGd0KSxpPWh0KGhbMF0pLFwiJVwiPT1oWzBdLnNsaWNlKC0xKSYmKGkqPTIuNTUpLG49aHQoaFsxXSksXCIlXCI9PWhbMV0uc2xpY2UoLTEpJiYobio9Mi41NSkscz1odChoWzJdKSxcIiVcIj09aFsyXS5zbGljZSgtMSkmJihzKj0yLjU1KSwoXCJkZWdcIj09aFswXS5zbGljZSgtMyl8fFwiwrBcIj09aFswXS5zbGljZSgtMSkpJiYoaS89MzYwKSxcImhzYmFcIj09dVsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNCkmJihvPWh0KGhbM10pKSxoWzNdJiZcIiVcIj09aFszXS5zbGljZSgtMSkmJihvLz0xMDApLGUuaHNiMnJnYihpLG4scyxvKSk6dVs2XT8oaD11WzZdW3FdKGd0KSxpPWh0KGhbMF0pLFwiJVwiPT1oWzBdLnNsaWNlKC0xKSYmKGkqPTIuNTUpLG49aHQoaFsxXSksXCIlXCI9PWhbMV0uc2xpY2UoLTEpJiYobio9Mi41NSkscz1odChoWzJdKSxcIiVcIj09aFsyXS5zbGljZSgtMSkmJihzKj0yLjU1KSwoXCJkZWdcIj09aFswXS5zbGljZSgtMyl8fFwiwrBcIj09aFswXS5zbGljZSgtMSkpJiYoaS89MzYwKSxcImhzbGFcIj09dVsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNCkmJihvPWh0KGhbM10pKSxoWzNdJiZcIiVcIj09aFszXS5zbGljZSgtMSkmJihvLz0xMDApLGUuaHNsMnJnYihpLG4scyxvKSk6KHU9e3I6aSxnOm4sYjpzLHRvU3RyaW5nOmF9LHUuaGV4PVwiI1wiKygxNjc3NzIxNnxzfG48PDh8aTw8MTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSxlLmlzKG8sXCJmaW5pdGVcIikmJih1Lm9wYWNpdHk9byksdSkpOntyOi0xLGc6LTEsYjotMSxoZXg6XCJub25lXCIsZXJyb3I6MSx0b1N0cmluZzphfX0sZSksZS5oc2I9bihmdW5jdGlvbih0LHIsaSl7cmV0dXJuIGUuaHNiMnJnYih0LHIsaSkuaGV4fSksZS5oc2w9bihmdW5jdGlvbih0LHIsaSl7cmV0dXJuIGUuaHNsMnJnYih0LHIsaSkuaGV4fSksZS5yZ2I9bihmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCsuNXwwfXJldHVyblwiI1wiKygxNjc3NzIxNnxpKHIpfGkoZSk8PDh8aSh0KTw8MTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX0pLGUuZ2V0Q29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb2xvci5zdGFydD10aGlzLmdldENvbG9yLnN0YXJ0fHx7aDowLHM6MSxiOnR8fC43NX0scj10aGlzLmhzYjJyZ2IoZS5oLGUucyxlLmIpO3JldHVybiBlLmgrPS4wNzUsZS5oPjEmJihlLmg9MCxlLnMtPS4yLGUuczw9MCYmKHRoaXMuZ2V0Q29sb3Iuc3RhcnQ9e2g6MCxzOjEsYjplLmJ9KSksci5oZXh9LGUuZ2V0Q29sb3IucmVzZXQ9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5zdGFydH0sZS5wYXJzZVBhdGhTdHJpbmc9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9VnQodCk7aWYoci5hcnIpcmV0dXJuIFl0KHIuYXJyKTt2YXIgaT17YTo3LGM6NixoOjEsbDoyLG06MixyOjQscTo0LHM6NCx0OjIsdjoxLHo6MH0sbj1bXTtyZXR1cm4gZS5pcyh0LFEpJiZlLmlzKHRbMF0sUSkmJihuPVl0KHQpKSxuLmxlbmd0aHx8SSh0KS5yZXBsYWNlKHl0LGZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1bXSxzPWUudG9Mb3dlckNhc2UoKTtpZihyLnJlcGxhY2UoYnQsZnVuY3Rpb24odCxlKXtlJiZhLnB1c2goK2UpfSksXCJtXCI9PXMmJmEubGVuZ3RoPjImJihuLnB1c2goW2VdW1BdKGEuc3BsaWNlKDAsMikpKSxzPVwibFwiLGU9XCJtXCI9PWU/XCJsXCI6XCJMXCIpLFwiclwiPT1zKW4ucHVzaChbZV1bUF0oYSkpO2Vsc2UgZm9yKDthLmxlbmd0aD49aVtzXSYmKG4ucHVzaChbZV1bUF0oYS5zcGxpY2UoMCxpW3NdKSkpLGlbc10pOyk7fSksbi50b1N0cmluZz1lLl9wYXRoMnN0cmluZyxyLmFycj1ZdChuKSxufSxlLnBhcnNlVHJhbnNmb3JtU3RyaW5nPW4oZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9e3I6MyxzOjQsdDoyLG06Nn0saT1bXTtyZXR1cm4gZS5pcyh0LFEpJiZlLmlzKHRbMF0sUSkmJihpPVl0KHQpKSxpLmxlbmd0aHx8SSh0KS5yZXBsYWNlKG10LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxhPU8uY2FsbChlKTtyLnJlcGxhY2UoYnQsZnVuY3Rpb24odCxlKXtlJiZuLnB1c2goK2UpfSksaS5wdXNoKFtlXVtQXShuKSl9KSxpLnRvU3RyaW5nPWUuX3BhdGgyc3RyaW5nLGl9KTt2YXIgVnQ9ZnVuY3Rpb24odCl7dmFyIGU9VnQucHM9VnQucHN8fHt9O3JldHVybiBlW3RdP2VbdF0uc2xlZXA9MTAwOmVbdF09e3NsZWVwOjEwMH0sc2V0VGltZW91dChmdW5jdGlvbigpe2Zvcih2YXIgciBpbiBlKWVbQV0ocikmJnIhPXQmJihlW3JdLnNsZWVwLS0sIWVbcl0uc2xlZXAmJmRlbGV0ZSBlW3JdKX0pLGVbdF19O2UuZmluZERvdHNBdFNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsaSxuLGEscyxvLGwpe3ZhciBoPTEtbCx1PVgoaCwzKSxjPVgoaCwyKSxmPWwqbCxwPWYqbCxkPXUqdCszKmMqbCpyKzMqaCpsKmwqbitwKnMsZz11KmUrMypjKmwqaSszKmgqbCpsKmErcCpvLHY9dCsyKmwqKHItdCkrZioobi0yKnIrdCkseD1lKzIqbCooaS1lKStmKihhLTIqaStlKSx5PXIrMipsKihuLXIpK2YqKHMtMipuK3IpLG09aSsyKmwqKGEtaSkrZiooby0yKmEraSksYj1oKnQrbCpyLF89aCplK2wqaSx3PWgqbitsKnMsaz1oKmErbCpvLEI9OTAtMTgwKlkuYXRhbjIodi15LHgtbSkvVTtyZXR1cm4odj55fHx4PG0pJiYoQis9MTgwKSx7eDpkLHk6ZyxtOnt4OnYseTp4fSxuOnt4OnkseTptfSxzdGFydDp7eDpiLHk6X30sZW5kOnt4OncseTprfSxhbHBoYTpCfX0sZS5iZXppZXJCQm94PWZ1bmN0aW9uKHQscixpLG4sYSxzLG8sbCl7ZS5pcyh0LFwiYXJyYXlcIil8fCh0PVt0LHIsaSxuLGEscyxvLGxdKTt2YXIgaD1adC5hcHBseShudWxsLHQpO3JldHVybnt4OmgubWluLngseTpoLm1pbi55LHgyOmgubWF4LngseTI6aC5tYXgueSx3aWR0aDpoLm1heC54LWgubWluLngsaGVpZ2h0OmgubWF4LnktaC5taW4ueX19LGUuaXNQb2ludEluc2lkZUJCb3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPj10LngmJmU8PXQueDImJnI+PXQueSYmcjw9dC55Mn0sZS5pc0JCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxyKXt2YXIgaT1lLmlzUG9pbnRJbnNpZGVCQm94O3JldHVybiBpKHIsdC54LHQueSl8fGkocix0LngyLHQueSl8fGkocix0LngsdC55Mil8fGkocix0LngyLHQueTIpfHxpKHQsci54LHIueSl8fGkodCxyLngyLHIueSl8fGkodCxyLngsci55Mil8fGkodCxyLngyLHIueTIpfHwodC54PHIueDImJnQueD5yLnh8fHIueDx0LngyJiZyLng+dC54KSYmKHQueTxyLnkyJiZ0Lnk+ci55fHxyLnk8dC55MiYmci55PnQueSl9LGUucGF0aEludGVyc2VjdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiBkKHQsZSl9LGUucGF0aEludGVyc2VjdGlvbk51bWJlcj1mdW5jdGlvbih0LGUpe3JldHVybiBkKHQsZSwxKX0sZS5pc1BvaW50SW5zaWRlUGF0aD1mdW5jdGlvbih0LHIsaSl7dmFyIG49ZS5wYXRoQkJveCh0KTtyZXR1cm4gZS5pc1BvaW50SW5zaWRlQkJveChuLHIsaSkmJmQodCxbW1wiTVwiLHIsaV0sW1wiSFwiLG4ueDIrMTBdXSwxKSUyPT0xfSxlLl9yZW1vdmVkRmFjdG9yeT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0KFwicmFwaGFlbC5sb2dcIixudWxsLFwiUmFwaGHDq2w6IHlvdSBhcmUgY2FsbGluZyB0byBtZXRob2Qg4oCcXCIrZStcIuKAnSBvZiByZW1vdmVkIG9iamVjdFwiLGUpfX07dmFyIE90PWUucGF0aEJCb3g9ZnVuY3Rpb24odCl7dmFyIGU9VnQodCk7aWYoZS5iYm94KXJldHVybiByKGUuYmJveCk7aWYoIXQpcmV0dXJue3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MCx4MjowLHkyOjB9O3Q9UXQodCk7Zm9yKHZhciBpPTAsbj0wLGE9W10scz1bXSxvLGw9MCxoPXQubGVuZ3RoO2w8aDtsKyspaWYobz10W2xdLFwiTVwiPT1vWzBdKWk9b1sxXSxuPW9bMl0sYS5wdXNoKGkpLHMucHVzaChuKTtlbHNle3ZhciB1PVp0KGksbixvWzFdLG9bMl0sb1szXSxvWzRdLG9bNV0sb1s2XSk7YT1hW1BdKHUubWluLngsdS5tYXgueCkscz1zW1BdKHUubWluLnksdS5tYXgueSksaT1vWzVdLG49b1s2XX12YXIgYz1HW3pdKDAsYSksZj1HW3pdKDAscykscD1XW3pdKDAsYSksZD1XW3pdKDAscyksZz1wLWMsdj1kLWYseD17eDpjLHk6Zix4MjpwLHkyOmQsd2lkdGg6ZyxoZWlnaHQ6dixjeDpjK2cvMixjeTpmK3YvMn07cmV0dXJuIGUuYmJveD1yKHgpLHh9LFl0PWZ1bmN0aW9uKHQpe3ZhciBpPXIodCk7cmV0dXJuIGkudG9TdHJpbmc9ZS5fcGF0aDJzdHJpbmcsaX0sV3Q9ZS5fcGF0aFRvUmVsYXRpdmU9ZnVuY3Rpb24odCl7dmFyIHI9VnQodCk7aWYoci5yZWwpcmV0dXJuIFl0KHIucmVsKTtlLmlzKHQsUSkmJmUuaXModCYmdFswXSxRKXx8KHQ9ZS5wYXJzZVBhdGhTdHJpbmcodCkpO3ZhciBpPVtdLG49MCxhPTAscz0wLG89MCxsPTA7XCJNXCI9PXRbMF1bMF0mJihuPXRbMF1bMV0sYT10WzBdWzJdLHM9bixvPWEsbCsrLGkucHVzaChbXCJNXCIsbixhXSkpO2Zvcih2YXIgaD1sLHU9dC5sZW5ndGg7aDx1O2grKyl7dmFyIGM9aVtoXT1bXSxmPXRbaF07aWYoZlswXSE9Ty5jYWxsKGZbMF0pKXN3aXRjaChjWzBdPU8uY2FsbChmWzBdKSxjWzBdKXtjYXNlXCJhXCI6Y1sxXT1mWzFdLGNbMl09ZlsyXSxjWzNdPWZbM10sY1s0XT1mWzRdLGNbNV09Zls1XSxjWzZdPSsoZls2XS1uKS50b0ZpeGVkKDMpLGNbN109KyhmWzddLWEpLnRvRml4ZWQoMyk7YnJlYWs7Y2FzZVwidlwiOmNbMV09KyhmWzFdLWEpLnRvRml4ZWQoMyk7YnJlYWs7Y2FzZVwibVwiOnM9ZlsxXSxvPWZbMl07ZGVmYXVsdDpmb3IodmFyIHA9MSxkPWYubGVuZ3RoO3A8ZDtwKyspY1twXT0rKGZbcF0tKHAlMj9uOmEpKS50b0ZpeGVkKDMpfWVsc2V7Yz1pW2hdPVtdLFwibVwiPT1mWzBdJiYocz1mWzFdK24sbz1mWzJdK2EpO2Zvcih2YXIgZz0wLHY9Zi5sZW5ndGg7Zzx2O2crKylpW2hdW2ddPWZbZ119dmFyIHg9aVtoXS5sZW5ndGg7c3dpdGNoKGlbaF1bMF0pe2Nhc2VcInpcIjpuPXMsYT1vO2JyZWFrO2Nhc2VcImhcIjpuKz0raVtoXVt4LTFdO2JyZWFrO2Nhc2VcInZcIjphKz0raVtoXVt4LTFdO2JyZWFrO2RlZmF1bHQ6bis9K2lbaF1beC0yXSxhKz0raVtoXVt4LTFdfX1yZXR1cm4gaS50b1N0cmluZz1lLl9wYXRoMnN0cmluZyxyLnJlbD1ZdChpKSxpfSxHdD1lLl9wYXRoVG9BYnNvbHV0ZT1mdW5jdGlvbih0KXt2YXIgcj1WdCh0KTtpZihyLmFicylyZXR1cm4gWXQoci5hYnMpO2lmKGUuaXModCxRKSYmZS5pcyh0JiZ0WzBdLFEpfHwodD1lLnBhcnNlUGF0aFN0cmluZyh0KSksIXR8fCF0Lmxlbmd0aClyZXR1cm5bW1wiTVwiLDAsMF1dO3ZhciBpPVtdLG49MCxhPTAsbz0wLGw9MCxoPTA7XCJNXCI9PXRbMF1bMF0mJihuPSt0WzBdWzFdLGE9K3RbMF1bMl0sbz1uLGw9YSxoKyssaVswXT1bXCJNXCIsbixhXSk7Zm9yKHZhciB1PTM9PXQubGVuZ3RoJiZcIk1cIj09dFswXVswXSYmXCJSXCI9PXRbMV1bMF0udG9VcHBlckNhc2UoKSYmXCJaXCI9PXRbMl1bMF0udG9VcHBlckNhc2UoKSxjLGYscD1oLGQ9dC5sZW5ndGg7cDxkO3ArKyl7aWYoaS5wdXNoKGM9W10pLGY9dFtwXSxmWzBdIT1jdC5jYWxsKGZbMF0pKXN3aXRjaChjWzBdPWN0LmNhbGwoZlswXSksY1swXSl7Y2FzZVwiQVwiOmNbMV09ZlsxXSxjWzJdPWZbMl0sY1szXT1mWzNdLGNbNF09Zls0XSxjWzVdPWZbNV0sY1s2XT0rKGZbNl0rbiksY1s3XT0rKGZbN10rYSk7YnJlYWs7Y2FzZVwiVlwiOmNbMV09K2ZbMV0rYTticmVhaztjYXNlXCJIXCI6Y1sxXT0rZlsxXStuO2JyZWFrO2Nhc2VcIlJcIjpmb3IodmFyIGc9W24sYV1bUF0oZi5zbGljZSgxKSksdj0yLHg9Zy5sZW5ndGg7djx4O3YrKylnW3ZdPStnW3ZdK24sZ1srK3ZdPStnW3ZdK2E7aS5wb3AoKSxpPWlbUF0ocyhnLHUpKTticmVhaztjYXNlXCJNXCI6bz0rZlsxXStuLGw9K2ZbMl0rYTtkZWZhdWx0OmZvcih2PTEseD1mLmxlbmd0aDt2PHg7disrKWNbdl09K2Zbdl0rKHYlMj9uOmEpfWVsc2UgaWYoXCJSXCI9PWZbMF0pZz1bbixhXVtQXShmLnNsaWNlKDEpKSxpLnBvcCgpLGk9aVtQXShzKGcsdSkpLGM9W1wiUlwiXVtQXShmLnNsaWNlKC0yKSk7ZWxzZSBmb3IodmFyIHk9MCxtPWYubGVuZ3RoO3k8bTt5KyspY1t5XT1mW3ldO3N3aXRjaChjWzBdKXtjYXNlXCJaXCI6bj1vLGE9bDticmVhaztjYXNlXCJIXCI6bj1jWzFdO2JyZWFrO2Nhc2VcIlZcIjphPWNbMV07YnJlYWs7Y2FzZVwiTVwiOm89Y1tjLmxlbmd0aC0yXSxsPWNbYy5sZW5ndGgtMV07ZGVmYXVsdDpuPWNbYy5sZW5ndGgtMl0sYT1jW2MubGVuZ3RoLTFdfX1yZXR1cm4gaS50b1N0cmluZz1lLl9wYXRoMnN0cmluZyxyLmFicz1ZdChpKSxpfSxIdD1mdW5jdGlvbih0LGUscixpKXtyZXR1cm5bdCxlLHIsaSxyLGldfSxYdD1mdW5jdGlvbih0LGUscixpLG4sYSl7dmFyIHM9MS8zLG89Mi8zO3JldHVybltzKnQrbypyLHMqZStvKmkscypuK28qcixzKmErbyppLG4sYV19LFV0PWZ1bmN0aW9uKHQsZSxyLGksYSxzLG8sbCxoLHUpe3ZhciBjPTEyMCpVLzE4MCxmPVUvMTgwKigrYXx8MCkscD1bXSxkLGc9bihmdW5jdGlvbih0LGUscil7dmFyIGk9dCpZLmNvcyhyKS1lKlkuc2luKHIpLG49dCpZLnNpbihyKStlKlkuY29zKHIpO3JldHVybnt4OmkseTpufX0pO2lmKHUpUz11WzBdLEE9dVsxXSxCPXVbMl0sQz11WzNdO2Vsc2V7ZD1nKHQsZSwtZiksdD1kLngsZT1kLnksZD1nKGwsaCwtZiksbD1kLngsaD1kLnk7dmFyIHY9WS5jb3MoVS8xODAqYSkseD1ZLnNpbihVLzE4MCphKSx5PSh0LWwpLzIsbT0oZS1oKS8yLGI9eSp5LyhyKnIpK20qbS8oaSppKTtiPjEmJihiPVkuc3FydChiKSxyPWIqcixpPWIqaSk7dmFyIF89cipyLHc9aSppLGs9KHM9PW8/LTE6MSkqWS5zcXJ0KEgoKF8qdy1fKm0qbS13KnkqeSkvKF8qbSptK3cqeSp5KSkpLEI9aypyKm0vaSsodCtsKS8yLEM9ayotaSp5L3IrKGUraCkvMixTPVkuYXNpbigoKGUtQykvaSkudG9GaXhlZCg5KSksQT1ZLmFzaW4oKChoLUMpL2kpLnRvRml4ZWQoOSkpO1M9dDxCP1UtUzpTLEE9bDxCP1UtQTpBLFM8MCYmKFM9MipVK1MpLEE8MCYmKEE9MipVK0EpLG8mJlM+QSYmKFMtPTIqVSksIW8mJkE+UyYmKEEtPTIqVSl9dmFyIFQ9QS1TO2lmKEgoVCk+Yyl7dmFyIEU9QSxNPWwsTj1oO0E9UytjKihvJiZBPlM/MTotMSksbD1CK3IqWS5jb3MoQSksaD1DK2kqWS5zaW4oQSkscD1VdChsLGgscixpLGEsMCxvLE0sTixbQSxFLEIsQ10pfVQ9QS1TO3ZhciBMPVkuY29zKFMpLHo9WS5zaW4oUyksRj1ZLmNvcyhBKSxSPVkuc2luKEEpLGo9WS50YW4oVC80KSxJPTQvMypyKmosRD00LzMqaSpqLFY9W3QsZV0sTz1bdCtJKnosZS1EKkxdLFc9W2wrSSpSLGgtRCpGXSxHPVtsLGhdO2lmKE9bMF09MipWWzBdLU9bMF0sT1sxXT0yKlZbMV0tT1sxXSx1KXJldHVybltPLFcsR11bUF0ocCk7cD1bTyxXLEddW1BdKHApLmpvaW4oKVtxXShcIixcIik7Zm9yKHZhciBYPVtdLCQ9MCxaPXAubGVuZ3RoOyQ8WjskKyspWFskXT0kJTI/ZyhwWyQtMV0scFskXSxmKS55OmcocFskXSxwWyQrMV0sZikueDtyZXR1cm4gWH0sJHQ9ZnVuY3Rpb24odCxlLHIsaSxuLGEscyxvLGwpe3ZhciBoPTEtbDtyZXR1cm57eDpYKGgsMykqdCszKlgoaCwyKSpsKnIrMypoKmwqbCpuK1gobCwzKSpzLHk6WChoLDMpKmUrMypYKGgsMikqbCppKzMqaCpsKmwqYStYKGwsMykqb319LFp0PW4oZnVuY3Rpb24odCxlLHIsaSxuLGEscyxvKXt2YXIgbD1uLTIqcit0LShzLTIqbityKSxoPTIqKHItdCktMioobi1yKSx1PXQtcixjPSgtaCtZLnNxcnQoaCpoLTQqbCp1KSkvMi9sLGY9KC1oLVkuc3FydChoKmgtNCpsKnUpKS8yL2wscD1bZSxvXSxkPVt0LHNdLGc7cmV0dXJuIEgoYyk+XCIxZTEyXCImJihjPS41KSxIKGYpPlwiMWUxMlwiJiYoZj0uNSksYz4wJiZjPDEmJihnPSR0KHQsZSxyLGksbixhLHMsbyxjKSxkLnB1c2goZy54KSxwLnB1c2goZy55KSksZj4wJiZmPDEmJihnPSR0KHQsZSxyLGksbixhLHMsbyxmKSxkLnB1c2goZy54KSxwLnB1c2goZy55KSksbD1hLTIqaStlLShvLTIqYStpKSxoPTIqKGktZSktMiooYS1pKSx1PWUtaSxjPSgtaCtZLnNxcnQoaCpoLTQqbCp1KSkvMi9sLGY9KC1oLVkuc3FydChoKmgtNCpsKnUpKS8yL2wsSChjKT5cIjFlMTJcIiYmKGM9LjUpLEgoZik+XCIxZTEyXCImJihmPS41KSxjPjAmJmM8MSYmKGc9JHQodCxlLHIsaSxuLGEscyxvLGMpLGQucHVzaChnLngpLHAucHVzaChnLnkpKSxmPjAmJmY8MSYmKGc9JHQodCxlLHIsaSxuLGEscyxvLGYpLGQucHVzaChnLngpLHAucHVzaChnLnkpKSx7bWluOnt4Okdbel0oMCxkKSx5Okdbel0oMCxwKX0sbWF4Ont4Oldbel0oMCxkKSx5Oldbel0oMCxwKX19fSksUXQ9ZS5fcGF0aDJjdXJ2ZT1uKGZ1bmN0aW9uKHQsZSl7dmFyIHI9IWUmJlZ0KHQpO2lmKCFlJiZyLmN1cnZlKXJldHVybiBZdChyLmN1cnZlKTtmb3IodmFyIGk9R3QodCksbj1lJiZHdChlKSxhPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0scz17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LG89KGZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxuLGE9e1Q6MSxROjF9O2lmKCF0KXJldHVybltcIkNcIixlLngsZS55LGUueCxlLnksZS54LGUueV07c3dpdGNoKCEodFswXWluIGEpJiYoZS5xeD1lLnF5PW51bGwpLHRbMF0pe2Nhc2VcIk1cIjplLlg9dFsxXSxlLlk9dFsyXTticmVhaztjYXNlXCJBXCI6dD1bXCJDXCJdW1BdKFV0W3pdKDAsW2UueCxlLnldW1BdKHQuc2xpY2UoMSkpKSk7YnJlYWs7Y2FzZVwiU1wiOlwiQ1wiPT1yfHxcIlNcIj09cj8oaT0yKmUueC1lLmJ4LG49MiplLnktZS5ieSk6KGk9ZS54LG49ZS55KSx0PVtcIkNcIixpLG5dW1BdKHQuc2xpY2UoMSkpO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09cnx8XCJUXCI9PXI/KGUucXg9MiplLngtZS5xeCxlLnF5PTIqZS55LWUucXkpOihlLnF4PWUueCxlLnF5PWUueSksdD1bXCJDXCJdW1BdKFh0KGUueCxlLnksZS5xeCxlLnF5LHRbMV0sdFsyXSkpO2JyZWFrO2Nhc2VcIlFcIjplLnF4PXRbMV0sZS5xeT10WzJdLHQ9W1wiQ1wiXVtQXShYdChlLngsZS55LHRbMV0sdFsyXSx0WzNdLHRbNF0pKTticmVhaztjYXNlXCJMXCI6dD1bXCJDXCJdW1BdKEh0KGUueCxlLnksdFsxXSx0WzJdKSk7YnJlYWs7Y2FzZVwiSFwiOnQ9W1wiQ1wiXVtQXShIdChlLngsZS55LHRbMV0sZS55KSk7YnJlYWs7Y2FzZVwiVlwiOnQ9W1wiQ1wiXVtQXShIdChlLngsZS55LGUueCx0WzFdKSk7YnJlYWs7Y2FzZVwiWlwiOnQ9W1wiQ1wiXVtQXShIdChlLngsZS55LGUuWCxlLlkpKX1yZXR1cm4gdH0pLGw9ZnVuY3Rpb24odCxlKXtpZih0W2VdLmxlbmd0aD43KXt0W2VdLnNoaWZ0KCk7Zm9yKHZhciByPXRbZV07ci5sZW5ndGg7KXVbZV09XCJBXCIsbiYmKGNbZV09XCJBXCIpLHQuc3BsaWNlKGUrKywwLFtcIkNcIl1bUF0oci5zcGxpY2UoMCw2KSkpO3Quc3BsaWNlKGUsMSksZz1XKGkubGVuZ3RoLG4mJm4ubGVuZ3RofHwwKX19LGg9ZnVuY3Rpb24odCxlLHIsYSxzKXt0JiZlJiZcIk1cIj09dFtzXVswXSYmXCJNXCIhPWVbc11bMF0mJihlLnNwbGljZShzLDAsW1wiTVwiLGEueCxhLnldKSxyLmJ4PTAsci5ieT0wLHIueD10W3NdWzFdLHIueT10W3NdWzJdLGc9VyhpLmxlbmd0aCxuJiZuLmxlbmd0aHx8MCkpfSx1PVtdLGM9W10sZj1cIlwiLHA9XCJcIixkPTAsZz1XKGkubGVuZ3RoLG4mJm4ubGVuZ3RofHwwKTtkPGc7ZCsrKXtpW2RdJiYoZj1pW2RdWzBdKSxcIkNcIiE9ZiYmKHVbZF09ZixkJiYocD11W2QtMV0pKSxpW2RdPW8oaVtkXSxhLHApLFwiQVwiIT11W2RdJiZcIkNcIj09ZiYmKHVbZF09XCJDXCIpLGwoaSxkKSxuJiYobltkXSYmKGY9bltkXVswXSksXCJDXCIhPWYmJihjW2RdPWYsZCYmKHA9Y1tkLTFdKSksbltkXT1vKG5bZF0scyxwKSxcIkFcIiE9Y1tkXSYmXCJDXCI9PWYmJihjW2RdPVwiQ1wiKSxsKG4sZCkpLGgoaSxuLGEscyxkKSxoKG4saSxzLGEsZCk7dmFyIHY9aVtkXSx4PW4mJm5bZF0seT12Lmxlbmd0aCxtPW4mJngubGVuZ3RoO2EueD12W3ktMl0sYS55PXZbeS0xXSxhLmJ4PWh0KHZbeS00XSl8fGEueCxhLmJ5PWh0KHZbeS0zXSl8fGEueSxzLmJ4PW4mJihodCh4W20tNF0pfHxzLngpLHMuYnk9biYmKGh0KHhbbS0zXSl8fHMueSkscy54PW4mJnhbbS0yXSxzLnk9biYmeFttLTFdfXJldHVybiBufHwoci5jdXJ2ZT1ZdChpKSksbj9baSxuXTppfSxudWxsLFl0KSxKdD1lLl9wYXJzZURvdHM9bihmdW5jdGlvbih0KXtmb3IodmFyIHI9W10saT0wLG49dC5sZW5ndGg7aTxuO2krKyl7dmFyIGE9e30scz10W2ldLm1hdGNoKC9eKFteOl0qKTo/KFtcXGRcXC5dKikvKTtpZihhLmNvbG9yPWUuZ2V0UkdCKHNbMV0pLGEuY29sb3IuZXJyb3IpcmV0dXJuIG51bGw7YS5vcGFjaXR5PWEuY29sb3Iub3BhY2l0eSxhLmNvbG9yPWEuY29sb3IuaGV4LHNbMl0mJihhLm9mZnNldD1zWzJdK1wiJVwiKSxyLnB1c2goYSl9Zm9yKGk9MSxuPXIubGVuZ3RoLTE7aTxuO2krKylpZighcltpXS5vZmZzZXQpe2Zvcih2YXIgbz1odChyW2ktMV0ub2Zmc2V0fHwwKSxsPTAsaD1pKzE7aDxuO2grKylpZihyW2hdLm9mZnNldCl7bD1yW2hdLm9mZnNldDticmVha31sfHwobD0xMDAsaD1uKSxsPWh0KGwpO2Zvcih2YXIgdT0obC1vKS8oaC1pKzEpO2k8aDtpKyspbys9dSxyW2ldLm9mZnNldD1vK1wiJVwifXJldHVybiByfSksS3Q9ZS5fdGVhcj1mdW5jdGlvbih0LGUpe3Q9PWUudG9wJiYoZS50b3A9dC5wcmV2KSx0PT1lLmJvdHRvbSYmKGUuYm90dG9tPXQubmV4dCksdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXYmJih0LnByZXYubmV4dD10Lm5leHQpfSx0ZT1lLl90b2Zyb250PWZ1bmN0aW9uKHQsZSl7ZS50b3AhPT10JiYoS3QodCxlKSx0Lm5leHQ9bnVsbCx0LnByZXY9ZS50b3AsZS50b3AubmV4dD10LGUudG9wPXQpfSxlZT1lLl90b2JhY2s9ZnVuY3Rpb24odCxlKXtlLmJvdHRvbSE9PXQmJihLdCh0LGUpLHQubmV4dD1lLmJvdHRvbSx0LnByZXY9bnVsbCxlLmJvdHRvbS5wcmV2PXQsZS5ib3R0b209dCl9LHJlPWUuX2luc2VydGFmdGVyPWZ1bmN0aW9uKHQsZSxyKXtLdCh0LHIpLGU9PXIudG9wJiYoci50b3A9dCksZS5uZXh0JiYoZS5uZXh0LnByZXY9dCksdC5uZXh0PWUubmV4dCx0LnByZXY9ZSxlLm5leHQ9dH0saWU9ZS5faW5zZXJ0YmVmb3JlPWZ1bmN0aW9uKHQsZSxyKXtLdCh0LHIpLGU9PXIuYm90dG9tJiYoci5ib3R0b209dCksZS5wcmV2JiYoZS5wcmV2Lm5leHQ9dCksdC5wcmV2PWUucHJldixlLnByZXY9dCx0Lm5leHQ9ZX0sbmU9ZS50b01hdHJpeD1mdW5jdGlvbih0LGUpe3ZhciByPU90KHQpLGk9e186e3RyYW5zZm9ybTpSfSxnZXRCQm94OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fTtyZXR1cm4gc2UoaSxlKSxpLm1hdHJpeH0sYWU9ZS50cmFuc2Zvcm1QYXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE10KHQsbmUodCxlKSl9LHNlPWUuX2V4dHJhY3RUcmFuc2Zvcm09ZnVuY3Rpb24odCxyKXtpZihudWxsPT1yKXJldHVybiB0Ll8udHJhbnNmb3JtO3I9SShyKS5yZXBsYWNlKC9cXC57M318XFx1MjAyNi9nLHQuXy50cmFuc2Zvcm18fFIpO3ZhciBpPWUucGFyc2VUcmFuc2Zvcm1TdHJpbmcociksbj0wLGE9MCxzPTAsbz0xLGw9MSxoPXQuXyx1PW5ldyBnO2lmKGgudHJhbnNmb3JtPWl8fFtdLGkpZm9yKHZhciBjPTAsZj1pLmxlbmd0aDtjPGY7YysrKXt2YXIgcD1pW2NdLGQ9cC5sZW5ndGgsdj1JKHBbMF0pLnRvTG93ZXJDYXNlKCkseD1wWzBdIT12LHk9eD91LmludmVydCgpOjAsbSxiLF8sdyxrO1widFwiPT12JiYzPT1kP3g/KG09eS54KDAsMCksYj15LnkoMCwwKSxfPXkueChwWzFdLHBbMl0pLHc9eS55KHBbMV0scFsyXSksdS50cmFuc2xhdGUoXy1tLHctYikpOnUudHJhbnNsYXRlKHBbMV0scFsyXSk6XCJyXCI9PXY/Mj09ZD8oaz1rfHx0LmdldEJCb3goMSksdS5yb3RhdGUocFsxXSxrLngray53aWR0aC8yLGsueStrLmhlaWdodC8yKSxuKz1wWzFdKTo0PT1kJiYoeD8oXz15LngocFsyXSxwWzNdKSx3PXkueShwWzJdLHBbM10pLHUucm90YXRlKHBbMV0sXyx3KSk6dS5yb3RhdGUocFsxXSxwWzJdLHBbM10pLG4rPXBbMV0pOlwic1wiPT12PzI9PWR8fDM9PWQ/KGs9a3x8dC5nZXRCQm94KDEpLHUuc2NhbGUocFsxXSxwW2QtMV0say54K2sud2lkdGgvMixrLnkray5oZWlnaHQvMiksbyo9cFsxXSxsKj1wW2QtMV0pOjU9PWQmJih4PyhfPXkueChwWzNdLHBbNF0pLHc9eS55KHBbM10scFs0XSksdS5zY2FsZShwWzFdLHBbMl0sXyx3KSk6dS5zY2FsZShwWzFdLHBbMl0scFszXSxwWzRdKSxvKj1wWzFdLGwqPXBbMl0pOlwibVwiPT12JiY3PT1kJiZ1LmFkZChwWzFdLHBbMl0scFszXSxwWzRdLHBbNV0scFs2XSksaC5kaXJ0eVQ9MSx0Lm1hdHJpeD11fXQubWF0cml4PXUsaC5zeD1vLGguc3k9bCxoLmRlZz1uLGguZHg9YT11LmUsaC5keT1zPXUuZiwxPT1vJiYxPT1sJiYhbiYmaC5iYm94PyhoLmJib3gueCs9K2EsaC5iYm94LnkrPStzKTpoLmRpcnR5VD0xfSxvZT1mdW5jdGlvbih0KXt2YXIgZT10WzBdO3N3aXRjaChlLnRvTG93ZXJDYXNlKCkpe2Nhc2VcInRcIjpyZXR1cm5bZSwwLDBdO2Nhc2VcIm1cIjpyZXR1cm5bZSwxLDAsMCwxLDAsMF07Y2FzZVwiclwiOnJldHVybiA0PT10Lmxlbmd0aD9bZSwwLHRbMl0sdFszXV06W2UsMF07Y2FzZVwic1wiOnJldHVybiA1PT10Lmxlbmd0aD9bZSwxLDEsdFszXSx0WzRdXTozPT10Lmxlbmd0aD9bZSwxLDFdOltlLDFdfX0sbGU9ZS5fZXF1YWxpc2VUcmFuc2Zvcm09ZnVuY3Rpb24odCxyKXtyPUkocikucmVwbGFjZSgvXFwuezN9fFxcdTIwMjYvZyx0KSx0PWUucGFyc2VUcmFuc2Zvcm1TdHJpbmcodCl8fFtdLHI9ZS5wYXJzZVRyYW5zZm9ybVN0cmluZyhyKXx8W107Zm9yKHZhciBpPVcodC5sZW5ndGgsci5sZW5ndGgpLG49W10sYT1bXSxzPTAsbyxsLGgsdTtzPGk7cysrKXtpZihoPXRbc118fG9lKHJbc10pLHU9cltzXXx8b2UoaCksaFswXSE9dVswXXx8XCJyXCI9PWhbMF0udG9Mb3dlckNhc2UoKSYmKGhbMl0hPXVbMl18fGhbM10hPXVbM10pfHxcInNcIj09aFswXS50b0xvd2VyQ2FzZSgpJiYoaFszXSE9dVszXXx8aFs0XSE9dVs0XSkpcmV0dXJuO2ZvcihuW3NdPVtdLGFbc109W10sbz0wLGw9VyhoLmxlbmd0aCx1Lmxlbmd0aCk7bzxsO28rKylvIGluIGgmJihuW3NdW29dPWhbb10pLG8gaW4gdSYmKGFbc11bb109dVtvXSl9cmV0dXJue2Zyb206bix0bzphfX07ZS5fZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKHQscixpLG4pe3ZhciBhO2lmKGE9bnVsbCE9bnx8ZS5pcyh0LFwib2JqZWN0XCIpP3Q6VC5kb2MuZ2V0RWxlbWVudEJ5SWQodCksbnVsbCE9YSlyZXR1cm4gYS50YWdOYW1lP251bGw9PXI/e2NvbnRhaW5lcjphLHdpZHRoOmEuc3R5bGUucGl4ZWxXaWR0aHx8YS5vZmZzZXRXaWR0aCxoZWlnaHQ6YS5zdHlsZS5waXhlbEhlaWdodHx8YS5vZmZzZXRIZWlnaHR9Ontjb250YWluZXI6YSx3aWR0aDpyLGhlaWdodDppfTp7Y29udGFpbmVyOjEseDp0LHk6cix3aWR0aDppLGhlaWdodDpufX0sZS5wYXRoVG9SZWxhdGl2ZT1XdCxlLl9lbmdpbmU9e30sZS5wYXRoMmN1cnZlPVF0LGUubWF0cml4PWZ1bmN0aW9uKHQsZSxyLGksbixhKXtyZXR1cm4gbmV3IGcodCxlLHIsaSxuLGEpfSxmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3JldHVybiB0WzBdKnRbMF0rdFsxXSp0WzFdfWZ1bmN0aW9uIGkodCl7dmFyIGU9WS5zcXJ0KHIodCkpO3RbMF0mJih0WzBdLz1lKSx0WzFdJiYodFsxXS89ZSl9dC5hZGQ9ZnVuY3Rpb24odCxlLHIsaSxuLGEpe3ZhciBzPVtbXSxbXSxbXV0sbz1bW3RoaXMuYSx0aGlzLmMsdGhpcy5lXSxbdGhpcy5iLHRoaXMuZCx0aGlzLmZdLFswLDAsMV1dLGw9W1t0LHIsbl0sW2UsaSxhXSxbMCwwLDFdXSxoLHUsYyxmO2Zvcih0JiZ0IGluc3RhbmNlb2YgZyYmKGw9W1t0LmEsdC5jLHQuZV0sW3QuYix0LmQsdC5mXSxbMCwwLDFdXSksaD0wO2g8MztoKyspZm9yKHU9MDt1PDM7dSsrKXtmb3IoZj0wLGM9MDtjPDM7YysrKWYrPW9baF1bY10qbFtjXVt1XTtzW2hdW3VdPWZ9dGhpcy5hPXNbMF1bMF0sdGhpcy5iPXNbMV1bMF0sdGhpcy5jPXNbMF1bMV0sdGhpcy5kPXNbMV1bMV0sdGhpcy5lPXNbMF1bMl0sdGhpcy5mPXNbMV1bMl19LHQuaW52ZXJ0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuYSp0LmQtdC5iKnQuYztyZXR1cm4gbmV3IGcodC5kL2UsLXQuYi9lLC10LmMvZSx0LmEvZSwodC5jKnQuZi10LmQqdC5lKS9lLCh0LmIqdC5lLXQuYSp0LmYpL2UpfSx0LmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCx0aGlzLmUsdGhpcy5mKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlKXtcbnRoaXMuYWRkKDEsMCwwLDEsdCxlKX0sdC5zY2FsZT1mdW5jdGlvbih0LGUscixpKXtudWxsPT1lJiYoZT10KSwocnx8aSkmJnRoaXMuYWRkKDEsMCwwLDEscixpKSx0aGlzLmFkZCh0LDAsMCxlLDAsMCksKHJ8fGkpJiZ0aGlzLmFkZCgxLDAsMCwxLC1yLC1pKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCxyLGkpe3Q9ZS5yYWQodCkscj1yfHwwLGk9aXx8MDt2YXIgbj0rWS5jb3ModCkudG9GaXhlZCg5KSxhPStZLnNpbih0KS50b0ZpeGVkKDkpO3RoaXMuYWRkKG4sYSwtYSxuLHIsaSksdGhpcy5hZGQoMSwwLDAsMSwtciwtaSl9LHQueD1mdW5jdGlvbih0LGUpe3JldHVybiB0KnRoaXMuYStlKnRoaXMuYyt0aGlzLmV9LHQueT1mdW5jdGlvbih0LGUpe3JldHVybiB0KnRoaXMuYitlKnRoaXMuZCt0aGlzLmZ9LHQuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybit0aGlzW0kuZnJvbUNoYXJDb2RlKDk3K3QpXS50b0ZpeGVkKDQpfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc3ZnP1wibWF0cml4KFwiK1t0aGlzLmdldCgwKSx0aGlzLmdldCgxKSx0aGlzLmdldCgyKSx0aGlzLmdldCgzKSx0aGlzLmdldCg0KSx0aGlzLmdldCg1KV0uam9pbigpK1wiKVwiOlt0aGlzLmdldCgwKSx0aGlzLmdldCgyKSx0aGlzLmdldCgxKSx0aGlzLmdldCgzKSwwLDBdLmpvaW4oKX0sdC50b0ZpbHRlcj1mdW5jdGlvbigpe3JldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lk1hdHJpeChNMTE9XCIrdGhpcy5nZXQoMCkrXCIsIE0xMj1cIit0aGlzLmdldCgyKStcIiwgTTIxPVwiK3RoaXMuZ2V0KDEpK1wiLCBNMjI9XCIrdGhpcy5nZXQoMykrXCIsIER4PVwiK3RoaXMuZ2V0KDQpK1wiLCBEeT1cIit0aGlzLmdldCg1KStcIiwgc2l6aW5nbWV0aG9kPSdhdXRvIGV4cGFuZCcpXCJ9LHQub2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZS50b0ZpeGVkKDQpLHRoaXMuZi50b0ZpeGVkKDQpXX0sdC5zcGxpdD1mdW5jdGlvbigpe3ZhciB0PXt9O3QuZHg9dGhpcy5lLHQuZHk9dGhpcy5mO3ZhciBuPVtbdGhpcy5hLHRoaXMuY10sW3RoaXMuYix0aGlzLmRdXTt0LnNjYWxleD1ZLnNxcnQocihuWzBdKSksaShuWzBdKSx0LnNoZWFyPW5bMF1bMF0qblsxXVswXStuWzBdWzFdKm5bMV1bMV0sblsxXT1bblsxXVswXS1uWzBdWzBdKnQuc2hlYXIsblsxXVsxXS1uWzBdWzFdKnQuc2hlYXJdLHQuc2NhbGV5PVkuc3FydChyKG5bMV0pKSxpKG5bMV0pLHQuc2hlYXIvPXQuc2NhbGV5O3ZhciBhPS1uWzBdWzFdLHM9blsxXVsxXTtyZXR1cm4gczwwPyh0LnJvdGF0ZT1lLmRlZyhZLmFjb3MocykpLGE8MCYmKHQucm90YXRlPTM2MC10LnJvdGF0ZSkpOnQucm90YXRlPWUuZGVnKFkuYXNpbihhKSksdC5pc1NpbXBsZT0hKCt0LnNoZWFyLnRvRml4ZWQoOSl8fHQuc2NhbGV4LnRvRml4ZWQoOSkhPXQuc2NhbGV5LnRvRml4ZWQoOSkmJnQucm90YXRlKSx0LmlzU3VwZXJTaW1wbGU9ISt0LnNoZWFyLnRvRml4ZWQoOSkmJnQuc2NhbGV4LnRvRml4ZWQoOSk9PXQuc2NhbGV5LnRvRml4ZWQoOSkmJiF0LnJvdGF0ZSx0Lm5vUm90YXRpb249ISt0LnNoZWFyLnRvRml4ZWQoOSkmJiF0LnJvdGF0ZSx0fSx0LnRvVHJhbnNmb3JtU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHRoaXNbcV0oKTtyZXR1cm4gZS5pc1NpbXBsZT8oZS5zY2FsZXg9K2Uuc2NhbGV4LnRvRml4ZWQoNCksZS5zY2FsZXk9K2Uuc2NhbGV5LnRvRml4ZWQoNCksZS5yb3RhdGU9K2Uucm90YXRlLnRvRml4ZWQoNCksKGUuZHh8fGUuZHk/XCJ0XCIrW2UuZHgsZS5keV06UikrKDEhPWUuc2NhbGV4fHwxIT1lLnNjYWxleT9cInNcIitbZS5zY2FsZXgsZS5zY2FsZXksMCwwXTpSKSsoZS5yb3RhdGU/XCJyXCIrW2Uucm90YXRlLDAsMF06UikpOlwibVwiK1t0aGlzLmdldCgwKSx0aGlzLmdldCgxKSx0aGlzLmdldCgyKSx0aGlzLmdldCgzKSx0aGlzLmdldCg0KSx0aGlzLmdldCg1KV19fShnLnByb3RvdHlwZSk7Zm9yKHZhciBoZT1mdW5jdGlvbigpe3RoaXMucmV0dXJuVmFsdWU9ITF9LHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxjZT1mdW5jdGlvbigpe3RoaXMuY2FuY2VsQnViYmxlPSEwfSxmZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9LHBlPWZ1bmN0aW9uKHQpe3ZhciBlPVQuZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fFQuZG9jLmJvZHkuc2Nyb2xsVG9wLHI9VC5kb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fFQuZG9jLmJvZHkuc2Nyb2xsTGVmdDtyZXR1cm57eDp0LmNsaWVudFgrcix5OnQuY2xpZW50WStlfX0sZGU9ZnVuY3Rpb24oKXtyZXR1cm4gVC5kb2MuYWRkRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbih0LGUscixpKXt2YXIgbj1mdW5jdGlvbih0KXt2YXIgZT1wZSh0KTtyZXR1cm4gci5jYWxsKGksdCxlLngsZS55KX07aWYodC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksRiYmVltlXSl7dmFyIGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXBlKGUpLGE9ZSxzPTAsbz1lLnRhcmdldFRvdWNoZXMmJmUudGFyZ2V0VG91Y2hlcy5sZW5ndGg7czxvO3MrKylpZihlLnRhcmdldFRvdWNoZXNbc10udGFyZ2V0PT10KXtlPWUudGFyZ2V0VG91Y2hlc1tzXSxlLm9yaWdpbmFsRXZlbnQ9YSxlLnByZXZlbnREZWZhdWx0PXVlLGUuc3RvcFByb3BhZ2F0aW9uPWZlO2JyZWFrfXJldHVybiByLmNhbGwoaSxlLG4ueCxuLnkpfTt0LmFkZEV2ZW50TGlzdGVuZXIoVltlXSxhLCExKX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSksRiYmVltlXSYmdC5yZW1vdmVFdmVudExpc3RlbmVyKFZbZV0sYSwhMSksITB9fTpULmRvYy5hdHRhY2hFdmVudD9mdW5jdGlvbih0LGUscixpKXt2YXIgbj1mdW5jdGlvbih0KXt0PXR8fFQud2luLmV2ZW50O3ZhciBlPVQuZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fFQuZG9jLmJvZHkuc2Nyb2xsVG9wLG49VC5kb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fFQuZG9jLmJvZHkuc2Nyb2xsTGVmdCxhPXQuY2xpZW50WCtuLHM9dC5jbGllbnRZK2U7cmV0dXJuIHQucHJldmVudERlZmF1bHQ9dC5wcmV2ZW50RGVmYXVsdHx8aGUsdC5zdG9wUHJvcGFnYXRpb249dC5zdG9wUHJvcGFnYXRpb258fGNlLHIuY2FsbChpLHQsYSxzKX07dC5hdHRhY2hFdmVudChcIm9uXCIrZSxuKTt2YXIgYT1mdW5jdGlvbigpe3JldHVybiB0LmRldGFjaEV2ZW50KFwib25cIitlLG4pLCEwfTtyZXR1cm4gYX06dm9pZCAwfSgpLGdlPVtdLHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLmNsaWVudFgsaT1lLmNsaWVudFksbj1ULmRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxULmRvYy5ib2R5LnNjcm9sbFRvcCxhPVQuZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxULmRvYy5ib2R5LnNjcm9sbExlZnQscyxvPWdlLmxlbmd0aDtvLS07KXtpZihzPWdlW29dLEYmJmUudG91Y2hlcyl7Zm9yKHZhciBsPWUudG91Y2hlcy5sZW5ndGgsaDtsLS07KWlmKGg9ZS50b3VjaGVzW2xdLGguaWRlbnRpZmllcj09cy5lbC5fZHJhZy5pZCl7cj1oLmNsaWVudFgsaT1oLmNsaWVudFksKGUub3JpZ2luYWxFdmVudD9lLm9yaWdpbmFsRXZlbnQ6ZSkucHJldmVudERlZmF1bHQoKTticmVha319ZWxzZSBlLnByZXZlbnREZWZhdWx0KCk7dmFyIHU9cy5lbC5ub2RlLGMsZj11Lm5leHRTaWJsaW5nLHA9dS5wYXJlbnROb2RlLGQ9dS5zdHlsZS5kaXNwbGF5O1Qud2luLm9wZXJhJiZwLnJlbW92ZUNoaWxkKHUpLHUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixjPXMuZWwucGFwZXIuZ2V0RWxlbWVudEJ5UG9pbnQocixpKSx1LnN0eWxlLmRpc3BsYXk9ZCxULndpbi5vcGVyYSYmKGY/cC5pbnNlcnRCZWZvcmUodSxmKTpwLmFwcGVuZENoaWxkKHUpKSxjJiZ0KFwicmFwaGFlbC5kcmFnLm92ZXIuXCIrcy5lbC5pZCxzLmVsLGMpLHIrPWEsaSs9bix0KFwicmFwaGFlbC5kcmFnLm1vdmUuXCIrcy5lbC5pZCxzLm1vdmVfc2NvcGV8fHMuZWwsci1zLmVsLl9kcmFnLngsaS1zLmVsLl9kcmFnLnkscixpLGUpfX0seGU9ZnVuY3Rpb24ocil7ZS51bm1vdXNlbW92ZSh2ZSkudW5tb3VzZXVwKHhlKTtmb3IodmFyIGk9Z2UubGVuZ3RoLG47aS0tOyluPWdlW2ldLG4uZWwuX2RyYWc9e30sdChcInJhcGhhZWwuZHJhZy5lbmQuXCIrbi5lbC5pZCxuLmVuZF9zY29wZXx8bi5zdGFydF9zY29wZXx8bi5tb3ZlX3Njb3BlfHxuLmVsLHIpO2dlPVtdfSx5ZT1lLmVsPXt9LG1lPUQubGVuZ3RoO21lLS07KSFmdW5jdGlvbih0KXtlW3RdPXllW3RdPWZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUuaXMocixcImZ1bmN0aW9uXCIpJiYodGhpcy5ldmVudHM9dGhpcy5ldmVudHN8fFtdLHRoaXMuZXZlbnRzLnB1c2goe25hbWU6dCxmOnIsdW5iaW5kOmRlKHRoaXMuc2hhcGV8fHRoaXMubm9kZXx8VC5kb2MsdCxyLGl8fHRoaXMpfSkpLHRoaXN9LGVbXCJ1blwiK3RdPXllW1widW5cIit0XT1mdW5jdGlvbihyKXtmb3IodmFyIGk9dGhpcy5ldmVudHN8fFtdLG49aS5sZW5ndGg7bi0tOylpW25dLm5hbWUhPXR8fCFlLmlzKHIsXCJ1bmRlZmluZWRcIikmJmlbbl0uZiE9cnx8KGlbbl0udW5iaW5kKCksaS5zcGxpY2UobiwxKSwhaS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmV2ZW50cyk7cmV0dXJuIHRoaXN9fShEW21lXSk7eWUuZGF0YT1mdW5jdGlvbihyLGkpe3ZhciBuPXd0W3RoaXMuaWRdPXd0W3RoaXMuaWRdfHx7fTtpZigwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO2lmKDE9PWFyZ3VtZW50cy5sZW5ndGgpe2lmKGUuaXMocixcIm9iamVjdFwiKSl7Zm9yKHZhciBhIGluIHIpcltBXShhKSYmdGhpcy5kYXRhKGEsclthXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQoXCJyYXBoYWVsLmRhdGEuZ2V0LlwiK3RoaXMuaWQsdGhpcyxuW3JdLHIpLG5bcl19cmV0dXJuIG5bcl09aSx0KFwicmFwaGFlbC5kYXRhLnNldC5cIit0aGlzLmlkLHRoaXMsaSxyKSx0aGlzfSx5ZS5yZW1vdmVEYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3d0W3RoaXMuaWRdPXt9Ond0W3RoaXMuaWRdJiZkZWxldGUgd3RbdGhpcy5pZF1bdF0sdGhpc30seWUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiByKHd0W3RoaXMuaWRdfHx7fSl9LHllLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiB0aGlzLm1vdXNlb3Zlcih0LHIpLm1vdXNlb3V0KGUsaXx8cil9LHllLnVuaG92ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy51bm1vdXNlb3Zlcih0KS51bm1vdXNlb3V0KGUpfTt2YXIgYmU9W107eWUuZHJhZz1mdW5jdGlvbihyLGksbixhLHMsbyl7ZnVuY3Rpb24gbChsKXsobC5vcmlnaW5hbEV2ZW50fHxsKS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBoPWwuY2xpZW50WCx1PWwuY2xpZW50WSxjPVQuZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fFQuZG9jLmJvZHkuc2Nyb2xsVG9wLGY9VC5kb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fFQuZG9jLmJvZHkuc2Nyb2xsTGVmdDtpZih0aGlzLl9kcmFnLmlkPWwuaWRlbnRpZmllcixGJiZsLnRvdWNoZXMpZm9yKHZhciBwPWwudG91Y2hlcy5sZW5ndGgsZDtwLS07KWlmKGQ9bC50b3VjaGVzW3BdLHRoaXMuX2RyYWcuaWQ9ZC5pZGVudGlmaWVyLGQuaWRlbnRpZmllcj09dGhpcy5fZHJhZy5pZCl7aD1kLmNsaWVudFgsdT1kLmNsaWVudFk7YnJlYWt9dGhpcy5fZHJhZy54PWgrZix0aGlzLl9kcmFnLnk9dStjLCFnZS5sZW5ndGgmJmUubW91c2Vtb3ZlKHZlKS5tb3VzZXVwKHhlKSxnZS5wdXNoKHtlbDp0aGlzLG1vdmVfc2NvcGU6YSxzdGFydF9zY29wZTpzLGVuZF9zY29wZTpvfSksaSYmdC5vbihcInJhcGhhZWwuZHJhZy5zdGFydC5cIit0aGlzLmlkLGkpLHImJnQub24oXCJyYXBoYWVsLmRyYWcubW92ZS5cIit0aGlzLmlkLHIpLG4mJnQub24oXCJyYXBoYWVsLmRyYWcuZW5kLlwiK3RoaXMuaWQsbiksdChcInJhcGhhZWwuZHJhZy5zdGFydC5cIit0aGlzLmlkLHN8fGF8fHRoaXMsbC5jbGllbnRYK2YsbC5jbGllbnRZK2MsbCl9cmV0dXJuIHRoaXMuX2RyYWc9e30sYmUucHVzaCh7ZWw6dGhpcyxzdGFydDpsfSksdGhpcy5tb3VzZWRvd24obCksdGhpc30seWUub25EcmFnT3Zlcj1mdW5jdGlvbihlKXtlP3Qub24oXCJyYXBoYWVsLmRyYWcub3Zlci5cIit0aGlzLmlkLGUpOnQudW5iaW5kKFwicmFwaGFlbC5kcmFnLm92ZXIuXCIrdGhpcy5pZCl9LHllLnVuZHJhZz1mdW5jdGlvbigpe2Zvcih2YXIgcj1iZS5sZW5ndGg7ci0tOyliZVtyXS5lbD09dGhpcyYmKHRoaXMudW5tb3VzZWRvd24oYmVbcl0uc3RhcnQpLGJlLnNwbGljZShyLDEpLHQudW5iaW5kKFwicmFwaGFlbC5kcmFnLiouXCIrdGhpcy5pZCkpOyFiZS5sZW5ndGgmJmUudW5tb3VzZW1vdmUodmUpLnVubW91c2V1cCh4ZSksZ2U9W119LE4uY2lyY2xlPWZ1bmN0aW9uKHQscixpKXt2YXIgbj1lLl9lbmdpbmUuY2lyY2xlKHRoaXMsdHx8MCxyfHwwLGl8fDApO3JldHVybiB0aGlzLl9fc2V0X18mJnRoaXMuX19zZXRfXy5wdXNoKG4pLG59LE4ucmVjdD1mdW5jdGlvbih0LHIsaSxuLGEpe3ZhciBzPWUuX2VuZ2luZS5yZWN0KHRoaXMsdHx8MCxyfHwwLGl8fDAsbnx8MCxhfHwwKTtyZXR1cm4gdGhpcy5fX3NldF9fJiZ0aGlzLl9fc2V0X18ucHVzaChzKSxzfSxOLmVsbGlwc2U9ZnVuY3Rpb24odCxyLGksbil7dmFyIGE9ZS5fZW5naW5lLmVsbGlwc2UodGhpcyx0fHwwLHJ8fDAsaXx8MCxufHwwKTtyZXR1cm4gdGhpcy5fX3NldF9fJiZ0aGlzLl9fc2V0X18ucHVzaChhKSxhfSxOLnBhdGg9ZnVuY3Rpb24odCl7dCYmIWUuaXModCxaKSYmIWUuaXModFswXSxRKSYmKHQrPVIpO3ZhciByPWUuX2VuZ2luZS5wYXRoKGUuZm9ybWF0W3pdKGUsYXJndW1lbnRzKSx0aGlzKTtyZXR1cm4gdGhpcy5fX3NldF9fJiZ0aGlzLl9fc2V0X18ucHVzaChyKSxyfSxOLmltYWdlPWZ1bmN0aW9uKHQscixpLG4sYSl7dmFyIHM9ZS5fZW5naW5lLmltYWdlKHRoaXMsdHx8XCJhYm91dDpibGFua1wiLHJ8fDAsaXx8MCxufHwwLGF8fDApO3JldHVybiB0aGlzLl9fc2V0X18mJnRoaXMuX19zZXRfXy5wdXNoKHMpLHN9LE4udGV4dD1mdW5jdGlvbih0LHIsaSl7dmFyIG49ZS5fZW5naW5lLnRleHQodGhpcyx0fHwwLHJ8fDAsSShpKSk7cmV0dXJuIHRoaXMuX19zZXRfXyYmdGhpcy5fX3NldF9fLnB1c2gobiksbn0sTi5zZXQ9ZnVuY3Rpb24odCl7IWUuaXModCxcImFycmF5XCIpJiYodD1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoYXJndW1lbnRzLDAsYXJndW1lbnRzLmxlbmd0aCkpO3ZhciByPW5ldyB6ZSh0KTtyZXR1cm4gdGhpcy5fX3NldF9fJiZ0aGlzLl9fc2V0X18ucHVzaChyKSxyLnBhcGVyPXRoaXMsci50eXBlPVwic2V0XCIscn0sTi5zZXRTdGFydD1mdW5jdGlvbih0KXt0aGlzLl9fc2V0X189dHx8dGhpcy5zZXQoKX0sTi5zZXRGaW5pc2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX3NldF9fO3JldHVybiBkZWxldGUgdGhpcy5fX3NldF9fLGV9LE4uZ2V0U2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FudmFzLnBhcmVudE5vZGU7cmV0dXJue3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fX0sTi5zZXRTaXplPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuX2VuZ2luZS5zZXRTaXplLmNhbGwodGhpcyx0LHIpfSxOLnNldFZpZXdCb3g9ZnVuY3Rpb24odCxyLGksbixhKXtyZXR1cm4gZS5fZW5naW5lLnNldFZpZXdCb3guY2FsbCh0aGlzLHQscixpLG4sYSl9LE4udG9wPU4uYm90dG9tPW51bGwsTi5yYXBoYWVsPWU7dmFyIF9lPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10Lm93bmVyRG9jdW1lbnQsaT1yLmJvZHksbj1yLmRvY3VtZW50RWxlbWVudCxhPW4uY2xpZW50VG9wfHxpLmNsaWVudFRvcHx8MCxzPW4uY2xpZW50TGVmdHx8aS5jbGllbnRMZWZ0fHwwLG89ZS50b3ArKFQud2luLnBhZ2VZT2Zmc2V0fHxuLnNjcm9sbFRvcHx8aS5zY3JvbGxUb3ApLWEsbD1lLmxlZnQrKFQud2luLnBhZ2VYT2Zmc2V0fHxuLnNjcm9sbExlZnR8fGkuc2Nyb2xsTGVmdCktcztyZXR1cm57eTpvLHg6bH19O04uZ2V0RWxlbWVudEJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci5jYW52YXMsbj1ULmRvYy5lbGVtZW50RnJvbVBvaW50KHQsZSk7aWYoVC53aW4ub3BlcmEmJlwic3ZnXCI9PW4udGFnTmFtZSl7dmFyIGE9X2UoaSkscz1pLmNyZWF0ZVNWR1JlY3QoKTtzLng9dC1hLngscy55PWUtYS55LHMud2lkdGg9cy5oZWlnaHQ9MTt2YXIgbz1pLmdldEludGVyc2VjdGlvbkxpc3QocyxudWxsKTtvLmxlbmd0aCYmKG49b1tvLmxlbmd0aC0xXSl9aWYoIW4pcmV0dXJuIG51bGw7Zm9yKDtuLnBhcmVudE5vZGUmJm4hPWkucGFyZW50Tm9kZSYmIW4ucmFwaGFlbDspbj1uLnBhcmVudE5vZGU7cmV0dXJuIG49PXIuY2FudmFzLnBhcmVudE5vZGUmJihuPWkpLG49biYmbi5yYXBoYWVsP3IuZ2V0QnlJZChuLnJhcGhhZWxpZCk6bnVsbH0sTi5nZXRFbGVtZW50c0J5QkJveD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLnNldCgpO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaSl7ZS5pc0JCb3hJbnRlcnNlY3QoaS5nZXRCQm94KCksdCkmJnIucHVzaChpKX0pLHJ9LE4uZ2V0QnlJZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5ib3R0b207ZTspe2lmKGUuaWQ9PXQpcmV0dXJuIGU7ZT1lLm5leHR9cmV0dXJuIG51bGx9LE4uZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmJvdHRvbTtyOyl7aWYodC5jYWxsKGUscik9PT0hMSlyZXR1cm4gdGhpcztyPXIubmV4dH1yZXR1cm4gdGhpc30sTi5nZXRFbGVtZW50c0J5UG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNldCgpO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaSl7aS5pc1BvaW50SW5zaWRlKHQsZSkmJnIucHVzaChpKX0pLHJ9LHllLmlzUG9pbnRJbnNpZGU9ZnVuY3Rpb24odCxyKXt2YXIgaT10aGlzLnJlYWxQYXRoPUV0W3RoaXMudHlwZV0odGhpcyk7cmV0dXJuIHRoaXMuYXR0cihcInRyYW5zZm9ybVwiKSYmdGhpcy5hdHRyKFwidHJhbnNmb3JtXCIpLmxlbmd0aCYmKGk9ZS50cmFuc2Zvcm1QYXRoKGksdGhpcy5hdHRyKFwidHJhbnNmb3JtXCIpKSksZS5pc1BvaW50SW5zaWRlUGF0aChpLHQscil9LHllLmdldEJCb3g9ZnVuY3Rpb24odCl7aWYodGhpcy5yZW1vdmVkKXJldHVybnt9O3ZhciBlPXRoaXMuXztyZXR1cm4gdD8oIWUuZGlydHkmJmUuYmJveHd0fHwodGhpcy5yZWFsUGF0aD1FdFt0aGlzLnR5cGVdKHRoaXMpLGUuYmJveHd0PU90KHRoaXMucmVhbFBhdGgpLGUuYmJveHd0LnRvU3RyaW5nPXgsZS5kaXJ0eT0wKSxlLmJib3h3dCk6KChlLmRpcnR5fHxlLmRpcnR5VHx8IWUuYmJveCkmJighZS5kaXJ0eSYmdGhpcy5yZWFsUGF0aHx8KGUuYmJveHd0PTAsdGhpcy5yZWFsUGF0aD1FdFt0aGlzLnR5cGVdKHRoaXMpKSxlLmJib3g9T3QoTXQodGhpcy5yZWFsUGF0aCx0aGlzLm1hdHJpeCkpLGUuYmJveC50b1N0cmluZz14LGUuZGlydHk9ZS5kaXJ0eVQ9MCksZS5iYm94KX0seWUuY2xvbmU9ZnVuY3Rpb24oKXtpZih0aGlzLnJlbW92ZWQpcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5wYXBlclt0aGlzLnR5cGVdKCkuYXR0cih0aGlzLmF0dHIoKSk7cmV0dXJuIHRoaXMuX19zZXRfXyYmdGhpcy5fX3NldF9fLnB1c2godCksdH0seWUuZ2xvdz1mdW5jdGlvbih0KXtpZihcInRleHRcIj09dGhpcy50eXBlKXJldHVybiBudWxsO3Q9dHx8e307dmFyIGU9e3dpZHRoOih0LndpZHRofHwxMCkrKCt0aGlzLmF0dHIoXCJzdHJva2Utd2lkdGhcIil8fDEpLGZpbGw6dC5maWxsfHwhMSxvcGFjaXR5Om51bGw9PXQub3BhY2l0eT8uNTp0Lm9wYWNpdHksb2Zmc2V0eDp0Lm9mZnNldHh8fDAsb2Zmc2V0eTp0Lm9mZnNldHl8fDAsY29sb3I6dC5jb2xvcnx8XCIjMDAwXCJ9LHI9ZS53aWR0aC8yLGk9dGhpcy5wYXBlcixuPWkuc2V0KCksYT10aGlzLnJlYWxQYXRofHxFdFt0aGlzLnR5cGVdKHRoaXMpO2E9dGhpcy5tYXRyaXg/TXQoYSx0aGlzLm1hdHJpeCk6YTtmb3IodmFyIHM9MTtzPHIrMTtzKyspbi5wdXNoKGkucGF0aChhKS5hdHRyKHtzdHJva2U6ZS5jb2xvcixmaWxsOmUuZmlsbD9lLmNvbG9yOlwibm9uZVwiLFwic3Ryb2tlLWxpbmVqb2luXCI6XCJyb3VuZFwiLFwic3Ryb2tlLWxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2Utd2lkdGhcIjorKGUud2lkdGgvcipzKS50b0ZpeGVkKDMpLG9wYWNpdHk6KyhlLm9wYWNpdHkvcikudG9GaXhlZCgzKX0pKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUodGhpcykudHJhbnNsYXRlKGUub2Zmc2V0eCxlLm9mZnNldHkpfTt2YXIgd2U9e30sa2U9ZnVuY3Rpb24odCxyLGksbixhLHMsbyx1LGMpe3JldHVybiBudWxsPT1jP2wodCxyLGksbixhLHMsbyx1KTplLmZpbmREb3RzQXRTZWdtZW50KHQscixpLG4sYSxzLG8sdSxoKHQscixpLG4sYSxzLG8sdSxjKSl9LEJlPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGksbixhKXtpPVF0KGkpO2Zvcih2YXIgcyxvLGwsaCx1PVwiXCIsYz17fSxmLHA9MCxkPTAsZz1pLmxlbmd0aDtkPGc7ZCsrKXtpZihsPWlbZF0sXCJNXCI9PWxbMF0pcz0rbFsxXSxvPStsWzJdO2Vsc2V7aWYoaD1rZShzLG8sbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0pLHAraD5uKXtpZihyJiYhYy5zdGFydCl7aWYoZj1rZShzLG8sbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0sbi1wKSx1Kz1bXCJDXCIrZi5zdGFydC54LGYuc3RhcnQueSxmLm0ueCxmLm0ueSxmLngsZi55XSxhKXJldHVybiB1O2Muc3RhcnQ9dSx1PVtcIk1cIitmLngsZi55K1wiQ1wiK2Yubi54LGYubi55LGYuZW5kLngsZi5lbmQueSxsWzVdLGxbNl1dLmpvaW4oKSxwKz1oLHM9K2xbNV0sbz0rbFs2XTtjb250aW51ZX1pZighdCYmIXIpcmV0dXJuIGY9a2UocyxvLGxbMV0sbFsyXSxsWzNdLGxbNF0sbFs1XSxsWzZdLG4tcCkse3g6Zi54LHk6Zi55LGFscGhhOmYuYWxwaGF9fXArPWgscz0rbFs1XSxvPStsWzZdfXUrPWwuc2hpZnQoKStsfXJldHVybiBjLmVuZD11LGY9dD9wOnI/YzplLmZpbmREb3RzQXRTZWdtZW50KHMsbyxsWzBdLGxbMV0sbFsyXSxsWzNdLGxbNF0sbFs1XSwxKSxmLmFscGhhJiYoZj17eDpmLngseTpmLnksYWxwaGE6Zi5hbHBoYX0pLGZ9fSxDZT1CZSgxKSxTZT1CZSgpLEFlPUJlKDAsMSk7ZS5nZXRUb3RhbExlbmd0aD1DZSxlLmdldFBvaW50QXRMZW5ndGg9U2UsZS5nZXRTdWJwYXRoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmdldFRvdGFsTGVuZ3RoKHQpLXI8MWUtNilyZXR1cm4gQWUodCxlKS5lbmQ7dmFyIGk9QWUodCxyLDEpO3JldHVybiBlP0FlKGksZSkuZW5kOml9LHllLmdldFRvdGFsTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoKCk7aWYodClyZXR1cm4gdGhpcy5ub2RlLmdldFRvdGFsTGVuZ3RoP3RoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpOkNlKHQpfSx5ZS5nZXRQb2ludEF0TGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0UGF0aCgpO2lmKGUpcmV0dXJuIFNlKGUsdCl9LHllLmdldFBhdGg9ZnVuY3Rpb24oKXt2YXIgdCxyPWUuX2dldFBhdGhbdGhpcy50eXBlXTtpZihcInRleHRcIiE9dGhpcy50eXBlJiZcInNldFwiIT10aGlzLnR5cGUpcmV0dXJuIHImJih0PXIodGhpcykpLHR9LHllLmdldFN1YnBhdGg9ZnVuY3Rpb24odCxyKXt2YXIgaT10aGlzLmdldFBhdGgoKTtpZihpKXJldHVybiBlLmdldFN1YnBhdGgoaSx0LHIpfTt2YXIgVGU9ZS5lYXNpbmdfZm9ybXVsYXM9e2xpbmVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdH0sXCI8XCI6ZnVuY3Rpb24odCl7cmV0dXJuIFgodCwxLjcpfSxcIj5cIjpmdW5jdGlvbih0KXtyZXR1cm4gWCh0LC40OCl9LFwiPD5cIjpmdW5jdGlvbih0KXt2YXIgZT0uNDgtdC8xLjA0LHI9WS5zcXJ0KC4xNzM0K2UqZSksaT1yLWUsbj1YKEgoaSksMS8zKSooaTwwPy0xOjEpLGE9LXItZSxzPVgoSChhKSwxLzMpKihhPDA/LTE6MSksbz1uK3MrLjU7cmV0dXJuIDMqKDEtbykqbypvK28qbypvfSxiYWNrSW46ZnVuY3Rpb24odCl7dmFyIGU9MS43MDE1ODtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfSxiYWNrT3V0OmZ1bmN0aW9uKHQpe3QtPTE7dmFyIGU9MS43MDE1ODtyZXR1cm4gdCp0KigoZSsxKSp0K2UpKzF9LGVsYXN0aWM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PSEhdD90OlgoMiwtMTAqdCkqWS5zaW4oKHQtLjA3NSkqKDIqVSkvLjMpKzF9LGJvdW5jZTpmdW5jdGlvbih0KXt2YXIgZT03LjU2MjUscj0yLjc1LGk7cmV0dXJuIHQ8MS9yP2k9ZSp0KnQ6dDwyL3I/KHQtPTEuNS9yLGk9ZSp0KnQrLjc1KTp0PDIuNS9yPyh0LT0yLjI1L3IsaT1lKnQqdCsuOTM3NSk6KHQtPTIuNjI1L3IsaT1lKnQqdCsuOTg0Mzc1KSxpfX07VGUuZWFzZUluPVRlW1wiZWFzZS1pblwiXT1UZVtcIjxcIl0sVGUuZWFzZU91dD1UZVtcImVhc2Utb3V0XCJdPVRlW1wiPlwiXSxUZS5lYXNlSW5PdXQ9VGVbXCJlYXNlLWluLW91dFwiXT1UZVtcIjw+XCJdLFRlW1wiYmFjay1pblwiXT1UZS5iYWNrSW4sVGVbXCJiYWNrLW91dFwiXT1UZS5iYWNrT3V0O3ZhciBFZT1bXSxNZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTYpfSxOZT1mdW5jdGlvbigpe2Zvcih2YXIgcj0rbmV3IERhdGUsaT0wO2k8RWUubGVuZ3RoO2krKyl7dmFyIG49RWVbaV07aWYoIW4uZWwucmVtb3ZlZCYmIW4ucGF1c2VkKXt2YXIgYT1yLW4uc3RhcnQscz1uLm1zLG89bi5lYXNpbmcsbD1uLmZyb20saD1uLmRpZmYsdT1uLnRvLGM9bi50LGY9bi5lbCxwPXt9LGQsZz17fSx2O2lmKG4uaW5pdHN0YXR1cz8oYT0obi5pbml0c3RhdHVzKm4uYW5pbS50b3Atbi5wcmV2KS8obi5wZXJjZW50LW4ucHJldikqcyxuLnN0YXR1cz1uLmluaXRzdGF0dXMsZGVsZXRlIG4uaW5pdHN0YXR1cyxuLnN0b3AmJkVlLnNwbGljZShpLS0sMSkpOm4uc3RhdHVzPShuLnByZXYrKG4ucGVyY2VudC1uLnByZXYpKihhL3MpKS9uLmFuaW0udG9wLCEoYTwwKSlpZihhPHMpe3ZhciB4PW8oYS9zKTtmb3IodmFyIHkgaW4gbClpZihsW0FdKHkpKXtzd2l0Y2gocHRbeV0pe2Nhc2UgJDpkPStsW3ldK3gqcypoW3ldO2JyZWFrO2Nhc2VcImNvbG91clwiOmQ9XCJyZ2IoXCIrW0xlKG90KGxbeV0ucit4KnMqaFt5XS5yKSksTGUob3QobFt5XS5nK3gqcypoW3ldLmcpKSxMZShvdChsW3ldLmIreCpzKmhbeV0uYikpXS5qb2luKFwiLFwiKStcIilcIjticmVhaztjYXNlXCJwYXRoXCI6ZD1bXTtmb3IodmFyIG09MCxfPWxbeV0ubGVuZ3RoO208XzttKyspe2RbbV09W2xbeV1bbV1bMF1dO2Zvcih2YXIgdz0xLGs9bFt5XVttXS5sZW5ndGg7dzxrO3crKylkW21dW3ddPStsW3ldW21dW3ddK3gqcypoW3ldW21dW3ddO2RbbV09ZFttXS5qb2luKGopfWQ9ZC5qb2luKGopO2JyZWFrO2Nhc2VcInRyYW5zZm9ybVwiOmlmKGhbeV0ucmVhbClmb3IoZD1bXSxtPTAsXz1sW3ldLmxlbmd0aDttPF87bSsrKWZvcihkW21dPVtsW3ldW21dWzBdXSx3PTEsaz1sW3ldW21dLmxlbmd0aDt3PGs7dysrKWRbbV1bd109bFt5XVttXVt3XSt4KnMqaFt5XVttXVt3XTtlbHNle3ZhciBCPWZ1bmN0aW9uKHQpe3JldHVybitsW3ldW3RdK3gqcypoW3ldW3RdfTtkPVtbXCJtXCIsQigwKSxCKDEpLEIoMiksQigzKSxCKDQpLEIoNSldXX1icmVhaztjYXNlXCJjc3ZcIjppZihcImNsaXAtcmVjdFwiPT15KWZvcihkPVtdLG09NDttLS07KWRbbV09K2xbeV1bbV0reCpzKmhbeV1bbV07YnJlYWs7ZGVmYXVsdDp2YXIgQz1bXVtQXShsW3ldKTtmb3IoZD1bXSxtPWYucGFwZXIuY3VzdG9tQXR0cmlidXRlc1t5XS5sZW5ndGg7bS0tOylkW21dPStDW21dK3gqcypoW3ldW21dfXBbeV09ZH1mLmF0dHIocCksZnVuY3Rpb24oZSxyLGkpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0KFwicmFwaGFlbC5hbmltLmZyYW1lLlwiK2UscixpKX0pfShmLmlkLGYsbi5hbmltKX1lbHNle2lmKGZ1bmN0aW9uKHIsaSxuKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChcInJhcGhhZWwuYW5pbS5mcmFtZS5cIitpLmlkLGksbiksdChcInJhcGhhZWwuYW5pbS5maW5pc2guXCIraS5pZCxpLG4pLGUuaXMocixcImZ1bmN0aW9uXCIpJiZyLmNhbGwoaSl9KX0obi5jYWxsYmFjayxmLG4uYW5pbSksZi5hdHRyKHUpLEVlLnNwbGljZShpLS0sMSksbi5yZXBlYXQ+MSYmIW4ubmV4dCl7Zm9yKHYgaW4gdSl1W0FdKHYpJiYoZ1t2XT1uLnRvdGFsT3JpZ2luW3ZdKTtuLmVsLmF0dHIoZyksYihuLmFuaW0sbi5lbCxuLmFuaW0ucGVyY2VudHNbMF0sbnVsbCxuLnRvdGFsT3JpZ2luLG4ucmVwZWF0LTEpfW4ubmV4dCYmIW4uc3RvcCYmYihuLmFuaW0sbi5lbCxuLm5leHQsbnVsbCxuLnRvdGFsT3JpZ2luLG4ucmVwZWF0KX19fUVlLmxlbmd0aCYmTWUoTmUpfSxMZT1mdW5jdGlvbih0KXtyZXR1cm4gdD4yNTU/MjU1OnQ8MD8wOnR9O3llLmFuaW1hdGVXaXRoPWZ1bmN0aW9uKHQscixpLG4sYSxzKXt2YXIgbz10aGlzO2lmKG8ucmVtb3ZlZClyZXR1cm4gcyYmcy5jYWxsKG8pLG87dmFyIGw9aSBpbnN0YW5jZW9mIG0/aTplLmFuaW1hdGlvbihpLG4sYSxzKSxoLHU7YihsLG8sbC5wZXJjZW50c1swXSxudWxsLG8uYXR0cigpKTtmb3IodmFyIGM9MCxmPUVlLmxlbmd0aDtjPGY7YysrKWlmKEVlW2NdLmFuaW09PXImJkVlW2NdLmVsPT10KXtFZVtmLTFdLnN0YXJ0PUVlW2NdLnN0YXJ0O2JyZWFrfXJldHVybiBvfSx5ZS5vbkFuaW1hdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZT90Lm9uKFwicmFwaGFlbC5hbmltLmZyYW1lLlwiK3RoaXMuaWQsZSk6dC51bmJpbmQoXCJyYXBoYWVsLmFuaW0uZnJhbWUuXCIrdGhpcy5pZCksdGhpc30sbS5wcm90b3R5cGUuZGVsYXk9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG0odGhpcy5hbmltLHRoaXMubXMpO3JldHVybiBlLnRpbWVzPXRoaXMudGltZXMsZS5kZWw9K3R8fDAsZX0sbS5wcm90b3R5cGUucmVwZWF0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBtKHRoaXMuYW5pbSx0aGlzLm1zKTtyZXR1cm4gZS5kZWw9dGhpcy5kZWwsZS50aW1lcz1ZLmZsb29yKFcodCwwKSl8fDEsZX0sZS5hbmltYXRpb249ZnVuY3Rpb24odCxyLGksbil7aWYodCBpbnN0YW5jZW9mIG0pcmV0dXJuIHQ7IWUuaXMoaSxcImZ1bmN0aW9uXCIpJiZpfHwobj1ufHxpfHxudWxsLGk9bnVsbCksdD1PYmplY3QodCkscj0rcnx8MDt2YXIgYT17fSxzLG87Zm9yKG8gaW4gdCl0W0FdKG8pJiZodChvKSE9byYmaHQobykrXCIlXCIhPW8mJihzPSEwLGFbb109dFtvXSk7aWYocylyZXR1cm4gaSYmKGEuZWFzaW5nPWkpLG4mJihhLmNhbGxiYWNrPW4pLG5ldyBtKHsxMDA6YX0scik7aWYobil7dmFyIGw9MDtmb3IodmFyIGggaW4gdCl7dmFyIHU9dXQoaCk7dFtBXShoKSYmdT5sJiYobD11KX1sKz1cIiVcIiwhdFtsXS5jYWxsYmFjayYmKHRbbF0uY2FsbGJhY2s9bil9cmV0dXJuIG5ldyBtKHQscil9LHllLmFuaW1hdGU9ZnVuY3Rpb24odCxyLGksbil7dmFyIGE9dGhpcztpZihhLnJlbW92ZWQpcmV0dXJuIG4mJm4uY2FsbChhKSxhO3ZhciBzPXQgaW5zdGFuY2VvZiBtP3Q6ZS5hbmltYXRpb24odCxyLGksbik7cmV0dXJuIGIocyxhLHMucGVyY2VudHNbMF0sbnVsbCxhLmF0dHIoKSksYX0seWUuc2V0VGltZT1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZudWxsIT1lJiZ0aGlzLnN0YXR1cyh0LEcoZSx0Lm1zKS90Lm1zKSx0aGlzfSx5ZS5zdGF0dXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxpPTAsbixhO2lmKG51bGwhPWUpcmV0dXJuIGIodCx0aGlzLC0xLEcoZSwxKSksdGhpcztmb3Iobj1FZS5sZW5ndGg7aTxuO2krKylpZihhPUVlW2ldLGEuZWwuaWQ9PXRoaXMuaWQmJighdHx8YS5hbmltPT10KSl7aWYodClyZXR1cm4gYS5zdGF0dXM7ci5wdXNoKHthbmltOmEuYW5pbSxzdGF0dXM6YS5zdGF0dXN9KX1yZXR1cm4gdD8wOnJ9LHllLnBhdXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8RWUubGVuZ3RoO3IrKylFZVtyXS5lbC5pZCE9dGhpcy5pZHx8ZSYmRWVbcl0uYW5pbSE9ZXx8dChcInJhcGhhZWwuYW5pbS5wYXVzZS5cIit0aGlzLmlkLHRoaXMsRWVbcl0uYW5pbSkhPT0hMSYmKEVlW3JdLnBhdXNlZD0hMCk7cmV0dXJuIHRoaXN9LHllLnJlc3VtZT1mdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPEVlLmxlbmd0aDtyKyspaWYoRWVbcl0uZWwuaWQ9PXRoaXMuaWQmJighZXx8RWVbcl0uYW5pbT09ZSkpe3ZhciBpPUVlW3JdO3QoXCJyYXBoYWVsLmFuaW0ucmVzdW1lLlwiK3RoaXMuaWQsdGhpcyxpLmFuaW0pIT09ITEmJihkZWxldGUgaS5wYXVzZWQsdGhpcy5zdGF0dXMoaS5hbmltLGkuc3RhdHVzKSl9cmV0dXJuIHRoaXN9LHllLnN0b3A9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjxFZS5sZW5ndGg7cisrKUVlW3JdLmVsLmlkIT10aGlzLmlkfHxlJiZFZVtyXS5hbmltIT1lfHx0KFwicmFwaGFlbC5hbmltLnN0b3AuXCIrdGhpcy5pZCx0aGlzLEVlW3JdLmFuaW0pIT09ITEmJkVlLnNwbGljZShyLS0sMSk7cmV0dXJuIHRoaXN9LHQub24oXCJyYXBoYWVsLnJlbW92ZVwiLF8pLHQub24oXCJyYXBoYWVsLmNsZWFyXCIsXykseWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlJhcGhhw6ts4oCZcyBvYmplY3RcIn07dmFyIHplPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXRlbXM9W10sdGhpcy5sZW5ndGg9MCx0aGlzLnR5cGU9XCJzZXRcIix0KWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyO2UrKykhdFtlXXx8dFtlXS5jb25zdHJ1Y3RvciE9eWUuY29uc3RydWN0b3ImJnRbZV0uY29uc3RydWN0b3IhPXplfHwodGhpc1t0aGlzLml0ZW1zLmxlbmd0aF09dGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aF09dFtlXSx0aGlzLmxlbmd0aCsrKX0sUGU9emUucHJvdG90eXBlO1BlLnB1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspdD1hcmd1bWVudHNbcl0sIXR8fHQuY29uc3RydWN0b3IhPXllLmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yIT16ZXx8KGU9dGhpcy5pdGVtcy5sZW5ndGgsdGhpc1tlXT10aGlzLml0ZW1zW2VdPXQsdGhpcy5sZW5ndGgrKyk7cmV0dXJuIHRoaXN9LFBlLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCYmZGVsZXRlIHRoaXNbdGhpcy5sZW5ndGgtLV0sdGhpcy5pdGVtcy5wb3AoKX0sUGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9dGhpcy5pdGVtcy5sZW5ndGg7cjxpO3IrKylpZih0LmNhbGwoZSx0aGlzLml0ZW1zW3JdLHIpPT09ITEpcmV0dXJuIHRoaXM7cmV0dXJuIHRoaXN9O2Zvcih2YXIgRmUgaW4geWUpeWVbQV0oRmUpJiYoUGVbRmVdPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JbdF1bel0ocixlKX0pfX0oRmUpKTtyZXR1cm4gUGUuYXR0cj1mdW5jdGlvbih0LHIpe2lmKHQmJmUuaXModCxRKSYmZS5pcyh0WzBdLFwib2JqZWN0XCIpKWZvcih2YXIgaT0wLG49dC5sZW5ndGg7aTxuO2krKyl0aGlzLml0ZW1zW2ldLmF0dHIodFtpXSk7ZWxzZSBmb3IodmFyIGE9MCxzPXRoaXMuaXRlbXMubGVuZ3RoO2E8czthKyspdGhpcy5pdGVtc1thXS5hdHRyKHQscik7cmV0dXJuIHRoaXN9LFBlLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aDspdGhpcy5wb3AoKX0sUGUuc3BsaWNlPWZ1bmN0aW9uKHQsZSxyKXt0PXQ8MD9XKHRoaXMubGVuZ3RoK3QsMCk6dCxlPVcoMCxHKHRoaXMubGVuZ3RoLXQsZSkpO3ZhciBpPVtdLG49W10sYT1bXSxzO2ZvcihzPTI7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhLnB1c2goYXJndW1lbnRzW3NdKTtmb3Iocz0wO3M8ZTtzKyspbi5wdXNoKHRoaXNbdCtzXSk7Zm9yKDtzPHRoaXMubGVuZ3RoLXQ7cysrKWkucHVzaCh0aGlzW3Qrc10pO3ZhciBvPWEubGVuZ3RoO2ZvcihzPTA7czxvK2kubGVuZ3RoO3MrKyl0aGlzLml0ZW1zW3Qrc109dGhpc1t0K3NdPXM8bz9hW3NdOmlbcy1vXTtmb3Iocz10aGlzLml0ZW1zLmxlbmd0aD10aGlzLmxlbmd0aC09ZS1vO3RoaXNbc107KWRlbGV0ZSB0aGlzW3MrK107cmV0dXJuIG5ldyB6ZShuKX0sUGUuZXhjbHVkZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoO2U8cjtlKyspaWYodGhpc1tlXT09dClyZXR1cm4gdGhpcy5zcGxpY2UoZSwxKSwhMH0sUGUuYW5pbWF0ZT1mdW5jdGlvbih0LHIsaSxuKXsoZS5pcyhpLFwiZnVuY3Rpb25cIil8fCFpKSYmKG49aXx8bnVsbCk7dmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgscz1hLG8sbD10aGlzLGg7aWYoIWEpcmV0dXJuIHRoaXM7biYmKGg9ZnVuY3Rpb24oKXshLS1hJiZuLmNhbGwobCl9KSxpPWUuaXMoaSxaKT9pOmg7dmFyIHU9ZS5hbmltYXRpb24odCxyLGksaCk7Zm9yKG89dGhpcy5pdGVtc1stLXNdLmFuaW1hdGUodSk7cy0tOyl0aGlzLml0ZW1zW3NdJiYhdGhpcy5pdGVtc1tzXS5yZW1vdmVkJiZ0aGlzLml0ZW1zW3NdLmFuaW1hdGVXaXRoKG8sdSx1KSx0aGlzLml0ZW1zW3NdJiYhdGhpcy5pdGVtc1tzXS5yZW1vdmVkfHxhLS07cmV0dXJuIHRoaXN9LFBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aDtlLS07KXRoaXMuaXRlbXNbZV0uaW5zZXJ0QWZ0ZXIodCk7cmV0dXJuIHRoaXN9LFBlLmdldEJCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT1bXSxyPVtdLGk9W10sbj10aGlzLml0ZW1zLmxlbmd0aDtuLS07KWlmKCF0aGlzLml0ZW1zW25dLnJlbW92ZWQpe3ZhciBhPXRoaXMuaXRlbXNbbl0uZ2V0QkJveCgpO3QucHVzaChhLngpLGUucHVzaChhLnkpLHIucHVzaChhLngrYS53aWR0aCksaS5wdXNoKGEueSthLmhlaWdodCl9cmV0dXJuIHQ9R1t6XSgwLHQpLGU9R1t6XSgwLGUpLHI9V1t6XSgwLHIpLGk9V1t6XSgwLGkpLHt4OnQseTplLHgyOnIseTI6aSx3aWR0aDpyLXQsaGVpZ2h0OmktZX19LFBlLmNsb25lPWZ1bmN0aW9uKHQpe3Q9dGhpcy5wYXBlci5zZXQoKTtmb3IodmFyIGU9MCxyPXRoaXMuaXRlbXMubGVuZ3RoO2U8cjtlKyspdC5wdXNoKHRoaXMuaXRlbXNbZV0uY2xvbmUoKSk7cmV0dXJuIHR9LFBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJSYXBoYcOrbOKAmHMgc2V0XCJ9LFBlLmdsb3c9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXBlci5zZXQoKTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIG49ci5nbG93KHQpO251bGwhPW4mJm4uZm9yRWFjaChmdW5jdGlvbih0LHIpe2UucHVzaCh0KX0pfSksZX0sUGUuaXNQb2ludEluc2lkZT1mdW5jdGlvbih0LGUpe3ZhciByPSExO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS5pc1BvaW50SW5zaWRlKHQsZSkpcmV0dXJuIHI9ITAsITF9KSxyfSxlLnJlZ2lzdGVyRm9udD1mdW5jdGlvbih0KXtpZighdC5mYWNlKXJldHVybiB0O3RoaXMuZm9udHM9dGhpcy5mb250c3x8e307dmFyIGU9e3c6dC53LGZhY2U6e30sZ2x5cGhzOnt9fSxyPXQuZmFjZVtcImZvbnQtZmFtaWx5XCJdO2Zvcih2YXIgaSBpbiB0LmZhY2UpdC5mYWNlW0FdKGkpJiYoZS5mYWNlW2ldPXQuZmFjZVtpXSk7aWYodGhpcy5mb250c1tyXT90aGlzLmZvbnRzW3JdLnB1c2goZSk6dGhpcy5mb250c1tyXT1bZV0sIXQuc3ZnKXtlLmZhY2VbXCJ1bml0cy1wZXItZW1cIl09dXQodC5mYWNlW1widW5pdHMtcGVyLWVtXCJdLDEwKTtmb3IodmFyIG4gaW4gdC5nbHlwaHMpaWYodC5nbHlwaHNbQV0obikpe3ZhciBhPXQuZ2x5cGhzW25dO2lmKGUuZ2x5cGhzW25dPXt3OmEudyxrOnt9LGQ6YS5kJiZcIk1cIithLmQucmVwbGFjZSgvW21sY3h0cnZdL2csZnVuY3Rpb24odCl7cmV0dXJue2w6XCJMXCIsYzpcIkNcIix4OlwielwiLHQ6XCJtXCIscjpcImxcIix2OlwiY1wifVt0XXx8XCJNXCJ9KStcInpcIn0sYS5rKWZvcih2YXIgcyBpbiBhLmspYVtBXShzKSYmKGUuZ2x5cGhzW25dLmtbc109YS5rW3NdKX19cmV0dXJuIHR9LE4uZ2V0Rm9udD1mdW5jdGlvbih0LHIsaSxuKXtpZihuPW58fFwibm9ybWFsXCIsaT1pfHxcIm5vcm1hbFwiLHI9K3J8fHtub3JtYWw6NDAwLGJvbGQ6NzAwLGxpZ2h0ZXI6MzAwLGJvbGRlcjo4MDB9W3JdfHw0MDAsZS5mb250cyl7dmFyIGE9ZS5mb250c1t0XTtpZighYSl7dmFyIHM9bmV3IFJlZ0V4cChcIihefFxcXFxzKVwiK3QucmVwbGFjZSgvW15cXHdcXGRcXHMrIX4uOl8tXS9nLFIpK1wiKFxcXFxzfCQpXCIsXCJpXCIpO2Zvcih2YXIgbyBpbiBlLmZvbnRzKWlmKGUuZm9udHNbQV0obykmJnMudGVzdChvKSl7YT1lLmZvbnRzW29dO2JyZWFrfX12YXIgbDtpZihhKWZvcih2YXIgaD0wLHU9YS5sZW5ndGg7aDx1JiYobD1hW2hdLGwuZmFjZVtcImZvbnQtd2VpZ2h0XCJdIT1yfHxsLmZhY2VbXCJmb250LXN0eWxlXCJdIT1pJiZsLmZhY2VbXCJmb250LXN0eWxlXCJdfHxsLmZhY2VbXCJmb250LXN0cmV0Y2hcIl0hPW4pO2grKyk7cmV0dXJuIGx9fSxOLnByaW50PWZ1bmN0aW9uKHQscixpLG4sYSxzLG8sbCl7cz1zfHxcIm1pZGRsZVwiLG89VyhHKG98fDAsMSksLTEpLGw9VyhHKGx8fDEsMyksMSk7dmFyIGg9SShpKVtxXShSKSx1PTAsYz0wLGY9UixwO2lmKGUuaXMobixcInN0cmluZ1wiKSYmKG49dGhpcy5nZXRGb250KG4pKSxuKXtwPShhfHwxNikvbi5mYWNlW1widW5pdHMtcGVyLWVtXCJdO2Zvcih2YXIgZD1uLmZhY2UuYmJveFtxXShrKSxnPStkWzBdLHY9ZFszXS1kWzFdLHg9MCx5PStkWzFdKyhcImJhc2VsaW5lXCI9PXM/disgK24uZmFjZS5kZXNjZW50OnYvMiksbT0wLGI9aC5sZW5ndGg7bTxiO20rKyl7aWYoXCJcXG5cIj09aFttXSl1PTAsdz0wLGM9MCx4Kz12Kmw7ZWxzZXt2YXIgXz1jJiZuLmdseXBoc1toW20tMV1dfHx7fSx3PW4uZ2x5cGhzW2hbbV1dO3UrPWM/KF8ud3x8bi53KSsoXy5rJiZfLmtbaFttXV18fDApK24udypvOjAsYz0xfXcmJncuZCYmKGYrPWUudHJhbnNmb3JtUGF0aCh3LmQsW1widFwiLHUqcCx4KnAsXCJzXCIscCxwLGcseSxcInRcIiwodC1nKS9wLChyLXkpL3BdKSl9fXJldHVybiB0aGlzLnBhdGgoZikuYXR0cih7ZmlsbDpcIiMwMDBcIixzdHJva2U6XCJub25lXCJ9KX0sTi5hZGQ9ZnVuY3Rpb24odCl7aWYoZS5pcyh0LFwiYXJyYXlcIikpZm9yKHZhciByPXRoaXMuc2V0KCksaT0wLG49dC5sZW5ndGgsYTtpPG47aSsrKWE9dFtpXXx8e30sQltBXShhLnR5cGUpJiZyLnB1c2godGhpc1thLnR5cGVdKCkuYXR0cihhKSk7cmV0dXJuIHJ9LGUuZm9ybWF0PWZ1bmN0aW9uKHQscil7dmFyIGk9ZS5pcyhyLFEpP1swXVtQXShyKTphcmd1bWVudHM7cmV0dXJuIHQmJmUuaXModCxaKSYmaS5sZW5ndGgtMSYmKHQ9dC5yZXBsYWNlKEMsZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09aVsrK2VdP1I6aVtlXX0pKSx0fHxSfSxlLmZ1bGxmaWxsPWZ1bmN0aW9uKCl7dmFyIHQ9L1xceyhbXlxcfV0rKVxcfS9nLGU9Lyg/Oig/Ol58XFwuKSguKz8pKD89XFxbfFxcLnwkfFxcKCl8XFxbKCd8XCIpKC4rPylcXDJcXF0pKFxcKFxcKSk/L2cscj1mdW5jdGlvbih0LHIsaSl7dmFyIG49aTtyZXR1cm4gci5yZXBsYWNlKGUsZnVuY3Rpb24odCxlLHIsaSxhKXtlPWV8fGksbiYmKGUgaW4gbiYmKG49bltlXSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmYSYmKG49bigpKSl9KSxuPShudWxsPT1ufHxuPT1pP3Q6bikrXCJcIn07cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKHQsZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsaSl9KX19KCksZS5uaW5qYT1mdW5jdGlvbigpe2lmKEUud2FzKVQud2luLlJhcGhhZWw9RS5pcztlbHNle3dpbmRvdy5SYXBoYWVsPXZvaWQgMDt0cnl7ZGVsZXRlIHdpbmRvdy5SYXBoYWVsfWNhdGNoKHQpe319cmV0dXJuIGV9LGUuc3Q9UGUsdC5vbihcInJhcGhhZWwuRE9NbG9hZFwiLGZ1bmN0aW9uKCl7dz0hMH0pLGZ1bmN0aW9uKHQscixpKXtmdW5jdGlvbiBuKCl7L2luLy50ZXN0KHQucmVhZHlTdGF0ZSk/c2V0VGltZW91dChuLDkpOmUuZXZlKFwicmFwaGFlbC5ET01sb2FkXCIpfW51bGw9PXQucmVhZHlTdGF0ZSYmdC5hZGRFdmVudExpc3RlbmVyJiYodC5hZGRFdmVudExpc3RlbmVyKHIsaT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLGksITEpLHQucmVhZHlTdGF0ZT1cImNvbXBsZXRlXCJ9LCExKSx0LnJlYWR5U3RhdGU9XCJsb2FkaW5nXCIpLG4oKX0oZG9jdW1lbnQsXCJET01Db250ZW50TG9hZGVkXCIpLGV9LmFwcGx5KGUsaSksISh2b2lkIDAhPT1uJiYodC5leHBvcnRzPW4pKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBpLG47IWZ1bmN0aW9uKHIpe3ZhciBhPVwiMC41LjBcIixzPVwiaGFzT3duUHJvcGVydHlcIixvPS9bXFwuXFwvXS8sbD0vXFxzKixcXHMqLyxoPVwiKlwiLHU9ZnVuY3Rpb24oKXt9LGM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxmLHAsZD17bjp7fX0sZz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpc1t0XSlyZXR1cm4gdGhpc1t0XX0sdj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aDstLXQ7KWlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzW3RdKXJldHVybiB0aGlzW3RdfSx4PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcseT1TdHJpbmcsbT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHxcIltvYmplY3QgQXJyYXldXCI9PXguY2FsbCh0KX07ZXZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZCxpPXAsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksYT1ldmUubGlzdGVuZXJzKHQpLHM9MCxvPSExLGwsaD1bXSx1PXt9LHg9W10seT1mLG09W107eC5maXJzdERlZmluZWQ9Zyx4Lmxhc3REZWZpbmVkPXYsZj10LHA9MDtmb3IodmFyIGI9MCxfPWEubGVuZ3RoO2I8XztiKyspXCJ6SW5kZXhcImluIGFbYl0mJihoLnB1c2goYVtiXS56SW5kZXgpLGFbYl0uekluZGV4PDAmJih1W2FbYl0uekluZGV4XT1hW2JdKSk7Zm9yKGguc29ydChjKTtoW3NdPDA7KWlmKGw9dVtoW3MrK11dLHgucHVzaChsLmFwcGx5KGUsbikpLHApcmV0dXJuIHA9aSx4O2ZvcihiPTA7YjxfO2IrKylpZihsPWFbYl0sXCJ6SW5kZXhcImluIGwpaWYobC56SW5kZXg9PWhbc10pe2lmKHgucHVzaChsLmFwcGx5KGUsbikpLHApYnJlYWs7ZG8gaWYocysrLGw9dVtoW3NdXSxsJiZ4LnB1c2gobC5hcHBseShlLG4pKSxwKWJyZWFrO3doaWxlKGwpfWVsc2UgdVtsLnpJbmRleF09bDtlbHNlIGlmKHgucHVzaChsLmFwcGx5KGUsbikpLHApYnJlYWs7cmV0dXJuIHA9aSxmPXkseH0sZXZlLl9ldmVudHM9ZCxldmUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPW0odCk/dDp0LnNwbGl0KG8pLHI9ZCxpLG4sYSxzLGwsdSxjLGYscD1bcl0sZz1bXTtmb3Iocz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7Zm9yKGY9W10sdT0wLGM9cC5sZW5ndGg7dTxjO3UrKylmb3Iocj1wW3VdLm4sbj1bcltlW3NdXSxyW2hdXSxhPTI7YS0tOylpPW5bYV0saSYmKGYucHVzaChpKSxnPWcuY29uY2F0KGkuZnx8W10pKTtwPWZ9cmV0dXJuIGd9LGV2ZS5zZXBhcmF0b3I9ZnVuY3Rpb24odCl7dD8odD15KHQpLnJlcGxhY2UoLyg/PVtcXC5cXF5cXF1cXFtcXC1dKS9nLFwiXFxcXFwiKSx0PVwiW1wiK3QrXCJdXCIsbz1uZXcgUmVnRXhwKHQpKTpvPS9bXFwuXFwvXS99LGV2ZS5vbj1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKCl7fTtmb3IodmFyIHI9bSh0KT9tKHRbMF0pP3Q6W3RdOnkodCkuc3BsaXQobCksaT0wLG49ci5sZW5ndGg7aTxuO2krKykhZnVuY3Rpb24odCl7Zm9yKHZhciByPW0odCk/dDp5KHQpLnNwbGl0KG8pLGk9ZCxuLGE9MCxzPXIubGVuZ3RoO2E8czthKyspaT1pLm4saT1pLmhhc093blByb3BlcnR5KHJbYV0pJiZpW3JbYV1dfHwoaVtyW2FdXT17bjp7fX0pO2ZvcihpLmY9aS5mfHxbXSxhPTAscz1pLmYubGVuZ3RoO2E8czthKyspaWYoaS5mW2FdPT1lKXtuPSEwO2JyZWFrfSFuJiZpLmYucHVzaChlKX0ocltpXSk7cmV0dXJuIGZ1bmN0aW9uKHQpeyt0PT0rdCYmKGUuekluZGV4PSt0KX19LGV2ZS5mPWZ1bmN0aW9uKHQpe3ZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe2V2ZS5hcHBseShudWxsLFt0LG51bGxdLmNvbmNhdChlKS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpKX19LGV2ZS5zdG9wPWZ1bmN0aW9uKCl7cD0xfSxldmUubnQ9ZnVuY3Rpb24odCl7dmFyIGU9bShmKT9mLmpvaW4oXCIuXCIpOmY7cmV0dXJuIHQ/bmV3IFJlZ0V4cChcIig/OlxcXFwufFxcXFwvfF4pXCIrdCtcIig/OlxcXFwufFxcXFwvfCQpXCIpLnRlc3QoZSk6ZX0sZXZlLm50cz1mdW5jdGlvbigpe3JldHVybiBtKGYpP2Y6Zi5zcGxpdChvKX0sZXZlLm9mZj1ldmUudW5iaW5kPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHZvaWQoZXZlLl9ldmVudHM9ZD17bjp7fX0pO3ZhciByPW0odCk/bSh0WzBdKT90Olt0XTp5KHQpLnNwbGl0KGwpO2lmKHIubGVuZ3RoPjEpZm9yKHZhciBpPTAsbj1yLmxlbmd0aDtpPG47aSsrKWV2ZS5vZmYocltpXSxlKTtlbHNle3I9bSh0KT90OnkodCkuc3BsaXQobyk7dmFyIGEsdSxjLGksbixmLHAsZz1bZF07Zm9yKGk9MCxuPXIubGVuZ3RoO2k8bjtpKyspZm9yKGY9MDtmPGcubGVuZ3RoO2YrPWMubGVuZ3RoLTIpe2lmKGM9W2YsMV0sYT1nW2ZdLm4scltpXSE9aClhW3JbaV1dJiZjLnB1c2goYVtyW2ldXSk7ZWxzZSBmb3IodSBpbiBhKWFbc10odSkmJmMucHVzaChhW3VdKTtnLnNwbGljZS5hcHBseShnLGMpfWZvcihpPTAsbj1nLmxlbmd0aDtpPG47aSsrKWZvcihhPWdbaV07YS5uOyl7aWYoZSl7aWYoYS5mKXtmb3IoZj0wLHA9YS5mLmxlbmd0aDtmPHA7ZisrKWlmKGEuZltmXT09ZSl7YS5mLnNwbGljZShmLDEpO2JyZWFrfSFhLmYubGVuZ3RoJiZkZWxldGUgYS5mfWZvcih1IGluIGEubilpZihhLm5bc10odSkmJmEublt1XS5mKXt2YXIgdj1hLm5bdV0uZjtmb3IoZj0wLHA9di5sZW5ndGg7ZjxwO2YrKylpZih2W2ZdPT1lKXt2LnNwbGljZShmLDEpO2JyZWFrfSF2Lmxlbmd0aCYmZGVsZXRlIGEublt1XS5mfX1lbHNle2RlbGV0ZSBhLmY7Zm9yKHUgaW4gYS5uKWEubltzXSh1KSYmYS5uW3VdLmYmJmRlbGV0ZSBhLm5bdV0uZn1hPWEubn19fSxldmUub25jZT1mdW5jdGlvbih0LGUpe3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGV2ZS5vZmYodCxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGV2ZS5vbih0LHIpfSxldmUudmVyc2lvbj1hLGV2ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiWW91IGFyZSBydW5uaW5nIEV2ZSBcIithfSxcInVuZGVmaW5lZFwiIT10eXBlb2YgdCYmdC5leHBvcnRzP3QuZXhwb3J0cz1ldmU6KGk9W10sbj1mdW5jdGlvbigpe3JldHVybiBldmV9LmFwcGx5KGUsaSksISh2b2lkIDAhPT1uJiYodC5leHBvcnRzPW4pKSl9KHRoaXMpfSxmdW5jdGlvbih0LGUscil7dmFyIGksbjtpPVtyKDEpXSxuPWZ1bmN0aW9uKHQpe2lmKCF0fHx0LnN2Zyl7dmFyIGU9XCJoYXNPd25Qcm9wZXJ0eVwiLHI9U3RyaW5nLGk9cGFyc2VGbG9hdCxuPXBhcnNlSW50LGE9TWF0aCxzPWEubWF4LG89YS5hYnMsbD1hLnBvdyxoPS9bLCBdKy8sdT10LmV2ZSxjPVwiXCIsZj1cIiBcIixwPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLGQ9e2Jsb2NrOlwiTTUsMCAwLDIuNSA1LDV6XCIsY2xhc3NpYzpcIk01LDAgMCwyLjUgNSw1IDMuNSwzIDMuNSwyelwiLGRpYW1vbmQ6XCJNMi41LDAgNSwyLjUgMi41LDUgMCwyLjV6XCIsb3BlbjpcIk02LDEgMSwzLjUgNiw2XCIsb3ZhbDpcIk0yLjUsMEEyLjUsMi41LDAsMCwxLDIuNSw1IDIuNSwyLjUsMCwwLDEsMi41LDB6XCJ9LGc9e307dC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiWW91ciBicm93c2VyIHN1cHBvcnRzIFNWRy5cXG5Zb3UgYXJlIHJ1bm5pbmcgUmFwaGHDq2wgXCIrdGhpcy52ZXJzaW9ufTt2YXIgdj1mdW5jdGlvbihpLG4pe2lmKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT12KGkpKTtmb3IodmFyIGEgaW4gbiluW2VdKGEpJiYoXCJ4bGluazpcIj09YS5zdWJzdHJpbmcoMCw2KT9pLnNldEF0dHJpYnV0ZU5TKHAsYS5zdWJzdHJpbmcoNikscihuW2FdKSk6aS5zZXRBdHRyaWJ1dGUoYSxyKG5bYV0pKSl9ZWxzZSBpPXQuX2cuZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsaSksaS5zdHlsZSYmKGkuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9XCJyZ2JhKDAsMCwwLDApXCIpO3JldHVybiBpfSx4PWZ1bmN0aW9uKGUsbil7dmFyIGg9XCJsaW5lYXJcIix1PWUuaWQrbixmPS41LHA9LjUsZD1lLm5vZGUsZz1lLnBhcGVyLHg9ZC5zdHlsZSx5PXQuX2cuZG9jLmdldEVsZW1lbnRCeUlkKHUpO2lmKCF5KXtpZihuPXIobikucmVwbGFjZSh0Ll9yYWRpYWxfZ3JhZGllbnQsZnVuY3Rpb24odCxlLHIpe2lmKGg9XCJyYWRpYWxcIixlJiZyKXtmPWkoZSkscD1pKHIpO3ZhciBuPTIqKHA+LjUpLTE7bChmLS41LDIpK2wocC0uNSwyKT4uMjUmJihwPWEuc3FydCguMjUtbChmLS41LDIpKSpuKy41KSYmLjUhPXAmJihwPXAudG9GaXhlZCg1KS0xZS01Km4pfXJldHVybiBjfSksbj1uLnNwbGl0KC9cXHMqXFwtXFxzKi8pLFwibGluZWFyXCI9PWgpe3ZhciBiPW4uc2hpZnQoKTtpZihiPS1pKGIpLGlzTmFOKGIpKXJldHVybiBudWxsO3ZhciBfPVswLDAsYS5jb3ModC5yYWQoYikpLGEuc2luKHQucmFkKGIpKV0sdz0xLyhzKG8oX1syXSksbyhfWzNdKSl8fDEpO19bMl0qPXcsX1szXSo9dyxfWzJdPDAmJihfWzBdPS1fWzJdLF9bMl09MCksX1szXTwwJiYoX1sxXT0tX1szXSxfWzNdPTApfXZhciBrPXQuX3BhcnNlRG90cyhuKTtpZighaylyZXR1cm4gbnVsbDtpZih1PXUucmVwbGFjZSgvW1xcKFxcKVxccyxcXHhiMCNdL2csXCJfXCIpLGUuZ3JhZGllbnQmJnUhPWUuZ3JhZGllbnQuaWQmJihnLmRlZnMucmVtb3ZlQ2hpbGQoZS5ncmFkaWVudCksZGVsZXRlIGUuZ3JhZGllbnQpLCFlLmdyYWRpZW50KXt5PXYoaCtcIkdyYWRpZW50XCIse2lkOnV9KSxlLmdyYWRpZW50PXksdih5LFwicmFkaWFsXCI9PWg/e2Z4OmYsZnk6cH06e3gxOl9bMF0seTE6X1sxXSx4MjpfWzJdLHkyOl9bM10sZ3JhZGllbnRUcmFuc2Zvcm06ZS5tYXRyaXguaW52ZXJ0KCl9KSxnLmRlZnMuYXBwZW5kQ2hpbGQoeSk7Zm9yKHZhciBCPTAsQz1rLmxlbmd0aDtCPEM7QisrKXkuYXBwZW5kQ2hpbGQodihcInN0b3BcIix7b2Zmc2V0OmtbQl0ub2Zmc2V0P2tbQl0ub2Zmc2V0OkI/XCIxMDAlXCI6XCIwJVwiLFwic3RvcC1jb2xvclwiOmtbQl0uY29sb3J8fFwiI2ZmZlwiLFwic3RvcC1vcGFjaXR5XCI6aXNGaW5pdGUoa1tCXS5vcGFjaXR5KT9rW0JdLm9wYWNpdHk6MX0pKX19cmV0dXJuIHYoZCx7ZmlsbDptKHUpLG9wYWNpdHk6MSxcImZpbGwtb3BhY2l0eVwiOjF9KSx4LmZpbGw9Yyx4Lm9wYWNpdHk9MSx4LmZpbGxPcGFjaXR5PTEsMX0seT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmRvY3VtZW50TW9kZTtyZXR1cm4gdCYmKDk9PT10fHwxMD09PXQpfSxtPWZ1bmN0aW9uKHQpe2lmKHkoKSlyZXR1cm5cInVybCgnI1wiK3QrXCInKVwiO3ZhciBlPWRvY3VtZW50LmxvY2F0aW9uLHI9ZS5wcm90b2NvbCtcIi8vXCIrZS5ob3N0K2UucGF0aG5hbWUrZS5zZWFyY2g7cmV0dXJuXCJ1cmwoJ1wiK3IrXCIjXCIrdCtcIicpXCJ9LGI9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRCQm94KDEpO3YodC5wYXR0ZXJuLHtwYXR0ZXJuVHJhbnNmb3JtOnQubWF0cml4LmludmVydCgpK1wiIHRyYW5zbGF0ZShcIitlLngrXCIsXCIrZS55K1wiKVwifSl9LF89ZnVuY3Rpb24oaSxuLGEpe2lmKFwicGF0aFwiPT1pLnR5cGUpe2Zvcih2YXIgcz1yKG4pLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCItXCIpLG89aS5wYXBlcixsPWE/XCJlbmRcIjpcInN0YXJ0XCIsaD1pLm5vZGUsdT1pLmF0dHJzLGY9dVtcInN0cm9rZS13aWR0aFwiXSxwPXMubGVuZ3RoLHg9XCJjbGFzc2ljXCIseSxtLGIsXyx3LGs9MyxCPTMsQz01O3AtLTspc3dpdGNoKHNbcF0pe2Nhc2VcImJsb2NrXCI6Y2FzZVwiY2xhc3NpY1wiOmNhc2VcIm92YWxcIjpjYXNlXCJkaWFtb25kXCI6Y2FzZVwib3BlblwiOmNhc2VcIm5vbmVcIjp4PXNbcF07YnJlYWs7Y2FzZVwid2lkZVwiOkI9NTticmVhaztjYXNlXCJuYXJyb3dcIjpCPTI7YnJlYWs7Y2FzZVwibG9uZ1wiOms9NTticmVhaztjYXNlXCJzaG9ydFwiOms9Mn1pZihcIm9wZW5cIj09eD8oays9MixCKz0yLEMrPTIsYj0xLF89YT80OjEsdz17ZmlsbDpcIm5vbmVcIixzdHJva2U6dS5zdHJva2V9KTooXz1iPWsvMix3PXtmaWxsOnUuc3Ryb2tlLHN0cm9rZTpcIm5vbmVcIn0pLGkuXy5hcnJvd3M/YT8oaS5fLmFycm93cy5lbmRQYXRoJiZnW2kuXy5hcnJvd3MuZW5kUGF0aF0tLSxpLl8uYXJyb3dzLmVuZE1hcmtlciYmZ1tpLl8uYXJyb3dzLmVuZE1hcmtlcl0tLSk6KGkuXy5hcnJvd3Muc3RhcnRQYXRoJiZnW2kuXy5hcnJvd3Muc3RhcnRQYXRoXS0tLGkuXy5hcnJvd3Muc3RhcnRNYXJrZXImJmdbaS5fLmFycm93cy5zdGFydE1hcmtlcl0tLSk6aS5fLmFycm93cz17fSxcIm5vbmVcIiE9eCl7dmFyIFM9XCJyYXBoYWVsLW1hcmtlci1cIit4LEE9XCJyYXBoYWVsLW1hcmtlci1cIitsK3graytCK1wiLW9ialwiK2kuaWQ7dC5fZy5kb2MuZ2V0RWxlbWVudEJ5SWQoUyk/Z1tTXSsrOihvLmRlZnMuYXBwZW5kQ2hpbGQodih2KFwicGF0aFwiKSx7XCJzdHJva2UtbGluZWNhcFwiOlwicm91bmRcIixkOmRbeF0saWQ6U30pKSxnW1NdPTEpO3ZhciBUPXQuX2cuZG9jLmdldEVsZW1lbnRCeUlkKEEpLEU7VD8oZ1tBXSsrLEU9VC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInVzZVwiKVswXSk6KFQ9dih2KFwibWFya2VyXCIpLHtpZDpBLG1hcmtlckhlaWdodDpCLG1hcmtlcldpZHRoOmssb3JpZW50OlwiYXV0b1wiLHJlZlg6XyxyZWZZOkIvMn0pLEU9dih2KFwidXNlXCIpLHtcInhsaW5rOmhyZWZcIjpcIiNcIitTLHRyYW5zZm9ybTooYT9cInJvdGF0ZSgxODAgXCIray8yK1wiIFwiK0IvMitcIikgXCI6YykrXCJzY2FsZShcIitrL0MrXCIsXCIrQi9DK1wiKVwiLFwic3Ryb2tlLXdpZHRoXCI6KDEvKChrL0MrQi9DKS8yKSkudG9GaXhlZCg0KX0pLFQuYXBwZW5kQ2hpbGQoRSksby5kZWZzLmFwcGVuZENoaWxkKFQpLGdbQV09MSksdihFLHcpO3ZhciBNPWIqKFwiZGlhbW9uZFwiIT14JiZcIm92YWxcIiE9eCk7YT8oeT1pLl8uYXJyb3dzLnN0YXJ0ZHgqZnx8MCxtPXQuZ2V0VG90YWxMZW5ndGgodS5wYXRoKS1NKmYpOih5PU0qZixtPXQuZ2V0VG90YWxMZW5ndGgodS5wYXRoKS0oaS5fLmFycm93cy5lbmRkeCpmfHwwKSksdz17fSx3W1wibWFya2VyLVwiK2xdPVwidXJsKCNcIitBK1wiKVwiLChtfHx5KSYmKHcuZD10LmdldFN1YnBhdGgodS5wYXRoLHksbSkpLHYoaCx3KSxpLl8uYXJyb3dzW2wrXCJQYXRoXCJdPVMsaS5fLmFycm93c1tsK1wiTWFya2VyXCJdPUEsaS5fLmFycm93c1tsK1wiZHhcIl09TSxpLl8uYXJyb3dzW2wrXCJUeXBlXCJdPXgsaS5fLmFycm93c1tsK1wiU3RyaW5nXCJdPW59ZWxzZSBhPyh5PWkuXy5hcnJvd3Muc3RhcnRkeCpmfHwwLG09dC5nZXRUb3RhbExlbmd0aCh1LnBhdGgpLXkpOih5PTAsbT10LmdldFRvdGFsTGVuZ3RoKHUucGF0aCktKGkuXy5hcnJvd3MuZW5kZHgqZnx8MCkpLGkuXy5hcnJvd3NbbCtcIlBhdGhcIl0mJnYoaCx7ZDp0LmdldFN1YnBhdGgodS5wYXRoLHksbSl9KSxkZWxldGUgaS5fLmFycm93c1tsK1wiUGF0aFwiXSxkZWxldGUgaS5fLmFycm93c1tsK1wiTWFya2VyXCJdLGRlbGV0ZSBpLl8uYXJyb3dzW2wrXCJkeFwiXSxkZWxldGUgaS5fLmFycm93c1tsK1wiVHlwZVwiXSxkZWxldGUgaS5fLmFycm93c1tsK1wiU3RyaW5nXCJdO2Zvcih3IGluIGcpaWYoZ1tlXSh3KSYmIWdbd10pe3ZhciBOPXQuX2cuZG9jLmdldEVsZW1lbnRCeUlkKHcpO04mJk4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChOKX19fSx3PXtcIi1cIjpbMywxXSxcIi5cIjpbMSwxXSxcIi0uXCI6WzMsMSwxLDFdLFwiLS4uXCI6WzMsMSwxLDEsMSwxXSxcIi4gXCI6WzEsM10sXCItIFwiOls0LDNdLFwiLS1cIjpbOCwzXSxcIi0gLlwiOls0LDMsMSwzXSxcIi0tLlwiOls4LDMsMSwzXSxcIi0tLi5cIjpbOCwzLDEsMywxLDNdfSxrPWZ1bmN0aW9uKHQsZSxpKXtpZihlPXdbcihlKS50b0xvd2VyQ2FzZSgpXSl7Zm9yKHZhciBuPXQuYXR0cnNbXCJzdHJva2Utd2lkdGhcIl18fFwiMVwiLGE9e3JvdW5kOm4sc3F1YXJlOm4sYnV0dDowfVt0LmF0dHJzW1wic3Ryb2tlLWxpbmVjYXBcIl18fGlbXCJzdHJva2UtbGluZWNhcFwiXV18fDAscz1bXSxvPWUubGVuZ3RoO28tLTspc1tvXT1lW29dKm4rKG8lMj8xOi0xKSphO3YodC5ub2RlLHtcInN0cm9rZS1kYXNoYXJyYXlcIjpzLmpvaW4oXCIsXCIpfSl9ZWxzZSB2KHQubm9kZSx7XCJzdHJva2UtZGFzaGFycmF5XCI6XCJub25lXCJ9KX0sQj1mdW5jdGlvbihpLGEpe3ZhciBsPWkubm9kZSx1PWkuYXR0cnMsZj1sLnN0eWxlLnZpc2liaWxpdHk7bC5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCI7Zm9yKHZhciBkIGluIGEpaWYoYVtlXShkKSl7aWYoIXQuX2F2YWlsYWJsZUF0dHJzW2VdKGQpKWNvbnRpbnVlO3ZhciBnPWFbZF07c3dpdGNoKHVbZF09ZyxkKXtjYXNlXCJibHVyXCI6aS5ibHVyKGcpO2JyZWFrO2Nhc2VcInRpdGxlXCI6dmFyIHk9bC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRpdGxlXCIpO2lmKHkubGVuZ3RoJiYoeT15WzBdKSl5LmZpcnN0Q2hpbGQubm9kZVZhbHVlPWc7ZWxzZXt5PXYoXCJ0aXRsZVwiKTt2YXIgbT10Ll9nLmRvYy5jcmVhdGVUZXh0Tm9kZShnKTt5LmFwcGVuZENoaWxkKG0pLGwuYXBwZW5kQ2hpbGQoeSl9YnJlYWs7Y2FzZVwiaHJlZlwiOmNhc2VcInRhcmdldFwiOnZhciB3PWwucGFyZW50Tm9kZTtpZihcImFcIiE9dy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBCPXYoXCJhXCIpO3cuaW5zZXJ0QmVmb3JlKEIsbCksQi5hcHBlbmRDaGlsZChsKSx3PUJ9XCJ0YXJnZXRcIj09ZD93LnNldEF0dHJpYnV0ZU5TKHAsXCJzaG93XCIsXCJibGFua1wiPT1nP1wibmV3XCI6Zyk6dy5zZXRBdHRyaWJ1dGVOUyhwLGQsZyk7YnJlYWs7Y2FzZVwiY3Vyc29yXCI6bC5zdHlsZS5jdXJzb3I9ZzticmVhaztjYXNlXCJ0cmFuc2Zvcm1cIjppLnRyYW5zZm9ybShnKTticmVhaztjYXNlXCJhcnJvdy1zdGFydFwiOl8oaSxnKTticmVhaztjYXNlXCJhcnJvdy1lbmRcIjpfKGksZywxKTticmVhaztjYXNlXCJjbGlwLXJlY3RcIjp2YXIgQz1yKGcpLnNwbGl0KGgpO2lmKDQ9PUMubGVuZ3RoKXtpLmNsaXAmJmkuY2xpcC5wYXJlbnROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaS5jbGlwLnBhcmVudE5vZGUpO3ZhciBBPXYoXCJjbGlwUGF0aFwiKSxUPXYoXCJyZWN0XCIpO0EuaWQ9dC5jcmVhdGVVVUlEKCksdihULHt4OkNbMF0seTpDWzFdLHdpZHRoOkNbMl0saGVpZ2h0OkNbM119KSxBLmFwcGVuZENoaWxkKFQpLGkucGFwZXIuZGVmcy5hcHBlbmRDaGlsZChBKSx2KGwse1wiY2xpcC1wYXRoXCI6XCJ1cmwoI1wiK0EuaWQrXCIpXCJ9KSxpLmNsaXA9VH1pZighZyl7dmFyIEU9bC5nZXRBdHRyaWJ1dGUoXCJjbGlwLXBhdGhcIik7aWYoRSl7dmFyIE09dC5fZy5kb2MuZ2V0RWxlbWVudEJ5SWQoRS5yZXBsYWNlKC8oXnVybFxcKCN8XFwpJCkvZyxjKSk7TSYmTS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKE0pLHYobCx7XCJjbGlwLXBhdGhcIjpjfSksZGVsZXRlIGkuY2xpcH19YnJlYWs7Y2FzZVwicGF0aFwiOlwicGF0aFwiPT1pLnR5cGUmJih2KGwse2Q6Zz91LnBhdGg9dC5fcGF0aFRvQWJzb2x1dGUoZyk6XCJNMCwwXCJ9KSxpLl8uZGlydHk9MSxpLl8uYXJyb3dzJiYoXCJzdGFydFN0cmluZ1wiaW4gaS5fLmFycm93cyYmXyhpLGkuXy5hcnJvd3Muc3RhcnRTdHJpbmcpLFwiZW5kU3RyaW5nXCJpbiBpLl8uYXJyb3dzJiZfKGksaS5fLmFycm93cy5lbmRTdHJpbmcsMSkpKTticmVhaztjYXNlXCJ3aWR0aFwiOmlmKGwuc2V0QXR0cmlidXRlKGQsZyksaS5fLmRpcnR5PTEsIXUuZngpYnJlYWs7ZD1cInhcIixnPXUueDtjYXNlXCJ4XCI6dS5meCYmKGc9LXUueC0odS53aWR0aHx8MCkpO2Nhc2VcInJ4XCI6aWYoXCJyeFwiPT1kJiZcInJlY3RcIj09aS50eXBlKWJyZWFrO2Nhc2VcImN4XCI6bC5zZXRBdHRyaWJ1dGUoZCxnKSxpLnBhdHRlcm4mJmIoaSksaS5fLmRpcnR5PTE7YnJlYWs7Y2FzZVwiaGVpZ2h0XCI6aWYobC5zZXRBdHRyaWJ1dGUoZCxnKSxpLl8uZGlydHk9MSwhdS5meSlicmVhaztkPVwieVwiLGc9dS55O2Nhc2VcInlcIjp1LmZ5JiYoZz0tdS55LSh1LmhlaWdodHx8MCkpO2Nhc2VcInJ5XCI6aWYoXCJyeVwiPT1kJiZcInJlY3RcIj09aS50eXBlKWJyZWFrO2Nhc2VcImN5XCI6bC5zZXRBdHRyaWJ1dGUoZCxnKSxpLnBhdHRlcm4mJmIoaSksaS5fLmRpcnR5PTE7YnJlYWs7Y2FzZVwiclwiOlwicmVjdFwiPT1pLnR5cGU/dihsLHtyeDpnLHJ5Omd9KTpsLnNldEF0dHJpYnV0ZShkLGcpLGkuXy5kaXJ0eT0xO2JyZWFrO2Nhc2VcInNyY1wiOlwiaW1hZ2VcIj09aS50eXBlJiZsLnNldEF0dHJpYnV0ZU5TKHAsXCJocmVmXCIsZyk7YnJlYWs7Y2FzZVwic3Ryb2tlLXdpZHRoXCI6MT09aS5fLnN4JiYxPT1pLl8uc3l8fChnLz1zKG8oaS5fLnN4KSxvKGkuXy5zeSkpfHwxKSxsLnNldEF0dHJpYnV0ZShkLGcpLHVbXCJzdHJva2UtZGFzaGFycmF5XCJdJiZrKGksdVtcInN0cm9rZS1kYXNoYXJyYXlcIl0sYSksXG5pLl8uYXJyb3dzJiYoXCJzdGFydFN0cmluZ1wiaW4gaS5fLmFycm93cyYmXyhpLGkuXy5hcnJvd3Muc3RhcnRTdHJpbmcpLFwiZW5kU3RyaW5nXCJpbiBpLl8uYXJyb3dzJiZfKGksaS5fLmFycm93cy5lbmRTdHJpbmcsMSkpO2JyZWFrO2Nhc2VcInN0cm9rZS1kYXNoYXJyYXlcIjprKGksZyxhKTticmVhaztjYXNlXCJmaWxsXCI6dmFyIE49cihnKS5tYXRjaCh0Ll9JU1VSTCk7aWYoTil7QT12KFwicGF0dGVyblwiKTt2YXIgTD12KFwiaW1hZ2VcIik7QS5pZD10LmNyZWF0ZVVVSUQoKSx2KEEse3g6MCx5OjAscGF0dGVyblVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixoZWlnaHQ6MSx3aWR0aDoxfSksdihMLHt4OjAseTowLFwieGxpbms6aHJlZlwiOk5bMV19KSxBLmFwcGVuZENoaWxkKEwpLGZ1bmN0aW9uKGUpe3QuX3ByZWxvYWQoTlsxXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMub2Zmc2V0V2lkdGgscj10aGlzLm9mZnNldEhlaWdodDt2KGUse3dpZHRoOnQsaGVpZ2h0OnJ9KSx2KEwse3dpZHRoOnQsaGVpZ2h0OnJ9KX0pfShBKSxpLnBhcGVyLmRlZnMuYXBwZW5kQ2hpbGQoQSksdihsLHtmaWxsOlwidXJsKCNcIitBLmlkK1wiKVwifSksaS5wYXR0ZXJuPUEsaS5wYXR0ZXJuJiZiKGkpO2JyZWFrfXZhciB6PXQuZ2V0UkdCKGcpO2lmKHouZXJyb3Ipe2lmKChcImNpcmNsZVwiPT1pLnR5cGV8fFwiZWxsaXBzZVwiPT1pLnR5cGV8fFwiclwiIT1yKGcpLmNoYXJBdCgpKSYmeChpLGcpKXtpZihcIm9wYWNpdHlcImluIHV8fFwiZmlsbC1vcGFjaXR5XCJpbiB1KXt2YXIgUD10Ll9nLmRvYy5nZXRFbGVtZW50QnlJZChsLmdldEF0dHJpYnV0ZShcImZpbGxcIikucmVwbGFjZSgvXnVybFxcKCN8XFwpJC9nLGMpKTtpZihQKXt2YXIgRj1QLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3RvcFwiKTt2KEZbRi5sZW5ndGgtMV0se1wic3RvcC1vcGFjaXR5XCI6KFwib3BhY2l0eVwiaW4gdT91Lm9wYWNpdHk6MSkqKFwiZmlsbC1vcGFjaXR5XCJpbiB1P3VbXCJmaWxsLW9wYWNpdHlcIl06MSl9KX19dS5ncmFkaWVudD1nLHUuZmlsbD1cIm5vbmVcIjticmVha319ZWxzZSBkZWxldGUgYS5ncmFkaWVudCxkZWxldGUgdS5ncmFkaWVudCwhdC5pcyh1Lm9wYWNpdHksXCJ1bmRlZmluZWRcIikmJnQuaXMoYS5vcGFjaXR5LFwidW5kZWZpbmVkXCIpJiZ2KGwse29wYWNpdHk6dS5vcGFjaXR5fSksIXQuaXModVtcImZpbGwtb3BhY2l0eVwiXSxcInVuZGVmaW5lZFwiKSYmdC5pcyhhW1wiZmlsbC1vcGFjaXR5XCJdLFwidW5kZWZpbmVkXCIpJiZ2KGwse1wiZmlsbC1vcGFjaXR5XCI6dVtcImZpbGwtb3BhY2l0eVwiXX0pO3pbZV0oXCJvcGFjaXR5XCIpJiZ2KGwse1wiZmlsbC1vcGFjaXR5XCI6ei5vcGFjaXR5PjE/ei5vcGFjaXR5LzEwMDp6Lm9wYWNpdHl9KTtjYXNlXCJzdHJva2VcIjp6PXQuZ2V0UkdCKGcpLGwuc2V0QXR0cmlidXRlKGQsei5oZXgpLFwic3Ryb2tlXCI9PWQmJnpbZV0oXCJvcGFjaXR5XCIpJiZ2KGwse1wic3Ryb2tlLW9wYWNpdHlcIjp6Lm9wYWNpdHk+MT96Lm9wYWNpdHkvMTAwOnoub3BhY2l0eX0pLFwic3Ryb2tlXCI9PWQmJmkuXy5hcnJvd3MmJihcInN0YXJ0U3RyaW5nXCJpbiBpLl8uYXJyb3dzJiZfKGksaS5fLmFycm93cy5zdGFydFN0cmluZyksXCJlbmRTdHJpbmdcImluIGkuXy5hcnJvd3MmJl8oaSxpLl8uYXJyb3dzLmVuZFN0cmluZywxKSk7YnJlYWs7Y2FzZVwiZ3JhZGllbnRcIjooXCJjaXJjbGVcIj09aS50eXBlfHxcImVsbGlwc2VcIj09aS50eXBlfHxcInJcIiE9cihnKS5jaGFyQXQoKSkmJngoaSxnKTticmVhaztjYXNlXCJvcGFjaXR5XCI6dS5ncmFkaWVudCYmIXVbZV0oXCJzdHJva2Utb3BhY2l0eVwiKSYmdihsLHtcInN0cm9rZS1vcGFjaXR5XCI6Zz4xP2cvMTAwOmd9KTtjYXNlXCJmaWxsLW9wYWNpdHlcIjppZih1LmdyYWRpZW50KXtQPXQuX2cuZG9jLmdldEVsZW1lbnRCeUlkKGwuZ2V0QXR0cmlidXRlKFwiZmlsbFwiKS5yZXBsYWNlKC9edXJsXFwoI3xcXCkkL2csYykpLFAmJihGPVAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdG9wXCIpLHYoRltGLmxlbmd0aC0xXSx7XCJzdG9wLW9wYWNpdHlcIjpnfSkpO2JyZWFrfWRlZmF1bHQ6XCJmb250LXNpemVcIj09ZCYmKGc9bihnLDEwKStcInB4XCIpO3ZhciBSPWQucmVwbGFjZSgvKFxcLS4pL2csZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCl9KTtsLnN0eWxlW1JdPWcsaS5fLmRpcnR5PTEsbC5zZXRBdHRyaWJ1dGUoZCxnKX19UyhpLGEpLGwuc3R5bGUudmlzaWJpbGl0eT1mfSxDPTEuMixTPWZ1bmN0aW9uKGksYSl7aWYoXCJ0ZXh0XCI9PWkudHlwZSYmKGFbZV0oXCJ0ZXh0XCIpfHxhW2VdKFwiZm9udFwiKXx8YVtlXShcImZvbnQtc2l6ZVwiKXx8YVtlXShcInhcIil8fGFbZV0oXCJ5XCIpKSl7dmFyIHM9aS5hdHRycyxvPWkubm9kZSxsPW8uZmlyc3RDaGlsZD9uKHQuX2cuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoby5maXJzdENoaWxkLGMpLmdldFByb3BlcnR5VmFsdWUoXCJmb250LXNpemVcIiksMTApOjEwO2lmKGFbZV0oXCJ0ZXh0XCIpKXtmb3Iocy50ZXh0PWEudGV4dDtvLmZpcnN0Q2hpbGQ7KW8ucmVtb3ZlQ2hpbGQoby5maXJzdENoaWxkKTtmb3IodmFyIGg9cihhLnRleHQpLnNwbGl0KFwiXFxuXCIpLHU9W10sZixwPTAsZD1oLmxlbmd0aDtwPGQ7cCsrKWY9dihcInRzcGFuXCIpLHAmJnYoZix7ZHk6bCpDLHg6cy54fSksZi5hcHBlbmRDaGlsZCh0Ll9nLmRvYy5jcmVhdGVUZXh0Tm9kZShoW3BdKSksby5hcHBlbmRDaGlsZChmKSx1W3BdPWZ9ZWxzZSBmb3IodT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidHNwYW5cIikscD0wLGQ9dS5sZW5ndGg7cDxkO3ArKylwP3YodVtwXSx7ZHk6bCpDLHg6cy54fSk6dih1WzBdLHtkeTowfSk7dihvLHt4OnMueCx5OnMueX0pLGkuXy5kaXJ0eT0xO3ZhciBnPWkuX2dldEJCb3goKSx4PXMueS0oZy55K2cuaGVpZ2h0LzIpO3gmJnQuaXMoeCxcImZpbml0ZVwiKSYmdih1WzBdLHtkeTp4fSl9fSxBPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJlwiYVwiPT09dC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT90LnBhcmVudE5vZGU6dH0sVD1mdW5jdGlvbihlLHIpe2Z1bmN0aW9uIGkoKXtyZXR1cm4oXCIwMDAwXCIrKE1hdGgucmFuZG9tKCkqTWF0aC5wb3coMzYsNSk8PDApLnRvU3RyaW5nKDM2KSkuc2xpY2UoLTUpfXZhciBuPTAsYT0wO3RoaXNbMF09dGhpcy5ub2RlPWUsZS5yYXBoYWVsPSEwLHRoaXMuaWQ9aSgpLGUucmFwaGFlbGlkPXRoaXMuaWQsdGhpcy5tYXRyaXg9dC5tYXRyaXgoKSx0aGlzLnJlYWxQYXRoPW51bGwsdGhpcy5wYXBlcj1yLHRoaXMuYXR0cnM9dGhpcy5hdHRyc3x8e30sdGhpcy5fPXt0cmFuc2Zvcm06W10sc3g6MSxzeToxLGRlZzowLGR4OjAsZHk6MCxkaXJ0eToxfSwhci5ib3R0b20mJihyLmJvdHRvbT10aGlzKSx0aGlzLnByZXY9ci50b3Asci50b3AmJihyLnRvcC5uZXh0PXRoaXMpLHIudG9wPXRoaXMsdGhpcy5uZXh0PW51bGx9LEU9dC5lbDtULnByb3RvdHlwZT1FLEUuY29uc3RydWN0b3I9VCx0Ll9lbmdpbmUucGF0aD1mdW5jdGlvbih0LGUpe3ZhciByPXYoXCJwYXRoXCIpO2UuY2FudmFzJiZlLmNhbnZhcy5hcHBlbmRDaGlsZChyKTt2YXIgaT1uZXcgVChyLGUpO3JldHVybiBpLnR5cGU9XCJwYXRoXCIsQihpLHtmaWxsOlwibm9uZVwiLHN0cm9rZTpcIiMwMDBcIixwYXRoOnR9KSxpfSxFLnJvdGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5yZW1vdmVkKXJldHVybiB0aGlzO2lmKHQ9cih0KS5zcGxpdChoKSx0Lmxlbmd0aC0xJiYoZT1pKHRbMV0pLG49aSh0WzJdKSksdD1pKHRbMF0pLG51bGw9PW4mJihlPW4pLG51bGw9PWV8fG51bGw9PW4pe3ZhciBhPXRoaXMuZ2V0QkJveCgxKTtlPWEueCthLndpZHRoLzIsbj1hLnkrYS5oZWlnaHQvMn1yZXR1cm4gdGhpcy50cmFuc2Zvcm0odGhpcy5fLnRyYW5zZm9ybS5jb25jYXQoW1tcInJcIix0LGUsbl1dKSksdGhpc30sRS5zY2FsZT1mdW5jdGlvbih0LGUsbixhKXtpZih0aGlzLnJlbW92ZWQpcmV0dXJuIHRoaXM7aWYodD1yKHQpLnNwbGl0KGgpLHQubGVuZ3RoLTEmJihlPWkodFsxXSksbj1pKHRbMl0pLGE9aSh0WzNdKSksdD1pKHRbMF0pLG51bGw9PWUmJihlPXQpLG51bGw9PWEmJihuPWEpLG51bGw9PW58fG51bGw9PWEpdmFyIHM9dGhpcy5nZXRCQm94KDEpO3JldHVybiBuPW51bGw9PW4/cy54K3Mud2lkdGgvMjpuLGE9bnVsbD09YT9zLnkrcy5oZWlnaHQvMjphLHRoaXMudHJhbnNmb3JtKHRoaXMuXy50cmFuc2Zvcm0uY29uY2F0KFtbXCJzXCIsdCxlLG4sYV1dKSksdGhpc30sRS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZW1vdmVkP3RoaXM6KHQ9cih0KS5zcGxpdChoKSx0Lmxlbmd0aC0xJiYoZT1pKHRbMV0pKSx0PWkodFswXSl8fDAsZT0rZXx8MCx0aGlzLnRyYW5zZm9ybSh0aGlzLl8udHJhbnNmb3JtLmNvbmNhdChbW1widFwiLHQsZV1dKSksdGhpcyl9LEUudHJhbnNmb3JtPWZ1bmN0aW9uKHIpe3ZhciBpPXRoaXMuXztpZihudWxsPT1yKXJldHVybiBpLnRyYW5zZm9ybTtpZih0Ll9leHRyYWN0VHJhbnNmb3JtKHRoaXMsciksdGhpcy5jbGlwJiZ2KHRoaXMuY2xpcCx7dHJhbnNmb3JtOnRoaXMubWF0cml4LmludmVydCgpfSksdGhpcy5wYXR0ZXJuJiZiKHRoaXMpLHRoaXMubm9kZSYmdih0aGlzLm5vZGUse3RyYW5zZm9ybTp0aGlzLm1hdHJpeH0pLDEhPWkuc3h8fDEhPWkuc3kpe3ZhciBuPXRoaXMuYXR0cnNbZV0oXCJzdHJva2Utd2lkdGhcIik/dGhpcy5hdHRyc1tcInN0cm9rZS13aWR0aFwiXToxO3RoaXMuYXR0cih7XCJzdHJva2Utd2lkdGhcIjpufSl9cmV0dXJuIHRoaXN9LEUuaGlkZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZWR8fCh0aGlzLm5vZGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIiksdGhpc30sRS5zaG93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlZHx8KHRoaXMubm9kZS5zdHlsZS5kaXNwbGF5PVwiXCIpLHRoaXN9LEUucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGU9QSh0aGlzLm5vZGUpO2lmKCF0aGlzLnJlbW92ZWQmJmUucGFyZW50Tm9kZSl7dmFyIHI9dGhpcy5wYXBlcjtyLl9fc2V0X18mJnIuX19zZXRfXy5leGNsdWRlKHRoaXMpLHUudW5iaW5kKFwicmFwaGFlbC4qLiouXCIrdGhpcy5pZCksdGhpcy5ncmFkaWVudCYmci5kZWZzLnJlbW92ZUNoaWxkKHRoaXMuZ3JhZGllbnQpLHQuX3RlYXIodGhpcyxyKSxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksdGhpcy5yZW1vdmVEYXRhKCk7Zm9yKHZhciBpIGluIHRoaXMpdGhpc1tpXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzW2ldP3QuX3JlbW92ZWRGYWN0b3J5KGkpOm51bGw7dGhpcy5yZW1vdmVkPSEwfX0sRS5fZ2V0QkJveD1mdW5jdGlvbigpe2lmKFwibm9uZVwiPT10aGlzLm5vZGUuc3R5bGUuZGlzcGxheSl7dGhpcy5zaG93KCk7dmFyIHQ9ITB9dmFyIGU9ITEscjt0aGlzLnBhcGVyLmNhbnZhcy5wYXJlbnRFbGVtZW50P3I9dGhpcy5wYXBlci5jYW52YXMucGFyZW50RWxlbWVudC5zdHlsZTp0aGlzLnBhcGVyLmNhbnZhcy5wYXJlbnROb2RlJiYocj10aGlzLnBhcGVyLmNhbnZhcy5wYXJlbnROb2RlLnN0eWxlKSxyJiZcIm5vbmVcIj09ci5kaXNwbGF5JiYoZT0hMCxyLmRpc3BsYXk9XCJcIik7dmFyIGk9e307dHJ5e2k9dGhpcy5ub2RlLmdldEJCb3goKX1jYXRjaChuKXtpPXt4OnRoaXMubm9kZS5jbGllbnRMZWZ0LHk6dGhpcy5ub2RlLmNsaWVudFRvcCx3aWR0aDp0aGlzLm5vZGUuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMubm9kZS5jbGllbnRIZWlnaHR9fWZpbmFsbHl7aT1pfHx7fSxlJiYoci5kaXNwbGF5PVwibm9uZVwiKX1yZXR1cm4gdCYmdGhpcy5oaWRlKCksaX0sRS5hdHRyPWZ1bmN0aW9uKHIsaSl7aWYodGhpcy5yZW1vdmVkKXJldHVybiB0aGlzO2lmKG51bGw9PXIpe3ZhciBuPXt9O2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJzKXRoaXMuYXR0cnNbZV0oYSkmJihuW2FdPXRoaXMuYXR0cnNbYV0pO3JldHVybiBuLmdyYWRpZW50JiZcIm5vbmVcIj09bi5maWxsJiYobi5maWxsPW4uZ3JhZGllbnQpJiZkZWxldGUgbi5ncmFkaWVudCxuLnRyYW5zZm9ybT10aGlzLl8udHJhbnNmb3JtLG59aWYobnVsbD09aSYmdC5pcyhyLFwic3RyaW5nXCIpKXtpZihcImZpbGxcIj09ciYmXCJub25lXCI9PXRoaXMuYXR0cnMuZmlsbCYmdGhpcy5hdHRycy5ncmFkaWVudClyZXR1cm4gdGhpcy5hdHRycy5ncmFkaWVudDtpZihcInRyYW5zZm9ybVwiPT1yKXJldHVybiB0aGlzLl8udHJhbnNmb3JtO2Zvcih2YXIgcz1yLnNwbGl0KGgpLG89e30sbD0wLGM9cy5sZW5ndGg7bDxjO2wrKylyPXNbbF0sciBpbiB0aGlzLmF0dHJzP29bcl09dGhpcy5hdHRyc1tyXTp0LmlzKHRoaXMucGFwZXIuY3VzdG9tQXR0cmlidXRlc1tyXSxcImZ1bmN0aW9uXCIpP29bcl09dGhpcy5wYXBlci5jdXN0b21BdHRyaWJ1dGVzW3JdLmRlZjpvW3JdPXQuX2F2YWlsYWJsZUF0dHJzW3JdO3JldHVybiBjLTE/bzpvW3NbMF1dfWlmKG51bGw9PWkmJnQuaXMocixcImFycmF5XCIpKXtmb3Iobz17fSxsPTAsYz1yLmxlbmd0aDtsPGM7bCsrKW9bcltsXV09dGhpcy5hdHRyKHJbbF0pO3JldHVybiBvfWlmKG51bGwhPWkpe3ZhciBmPXt9O2Zbcl09aX1lbHNlIG51bGwhPXImJnQuaXMocixcIm9iamVjdFwiKSYmKGY9cik7Zm9yKHZhciBwIGluIGYpdShcInJhcGhhZWwuYXR0ci5cIitwK1wiLlwiK3RoaXMuaWQsdGhpcyxmW3BdKTtmb3IocCBpbiB0aGlzLnBhcGVyLmN1c3RvbUF0dHJpYnV0ZXMpaWYodGhpcy5wYXBlci5jdXN0b21BdHRyaWJ1dGVzW2VdKHApJiZmW2VdKHApJiZ0LmlzKHRoaXMucGFwZXIuY3VzdG9tQXR0cmlidXRlc1twXSxcImZ1bmN0aW9uXCIpKXt2YXIgZD10aGlzLnBhcGVyLmN1c3RvbUF0dHJpYnV0ZXNbcF0uYXBwbHkodGhpcyxbXS5jb25jYXQoZltwXSkpO3RoaXMuYXR0cnNbcF09ZltwXTtmb3IodmFyIGcgaW4gZClkW2VdKGcpJiYoZltnXT1kW2ddKX1yZXR1cm4gQih0aGlzLGYpLHRoaXN9LEUudG9Gcm9udD1mdW5jdGlvbigpe2lmKHRoaXMucmVtb3ZlZClyZXR1cm4gdGhpczt2YXIgZT1BKHRoaXMubm9kZSk7ZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGUpO3ZhciByPXRoaXMucGFwZXI7cmV0dXJuIHIudG9wIT10aGlzJiZ0Ll90b2Zyb250KHRoaXMsciksdGhpc30sRS50b0JhY2s9ZnVuY3Rpb24oKXtpZih0aGlzLnJlbW92ZWQpcmV0dXJuIHRoaXM7dmFyIGU9QSh0aGlzLm5vZGUpLHI9ZS5wYXJlbnROb2RlO3IuaW5zZXJ0QmVmb3JlKGUsci5maXJzdENoaWxkKSx0Ll90b2JhY2sodGhpcyx0aGlzLnBhcGVyKTt2YXIgaT10aGlzLnBhcGVyO3JldHVybiB0aGlzfSxFLmluc2VydEFmdGVyPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVtb3ZlZHx8IWUpcmV0dXJuIHRoaXM7dmFyIHI9QSh0aGlzLm5vZGUpLGk9QShlLm5vZGV8fGVbZS5sZW5ndGgtMV0ubm9kZSk7cmV0dXJuIGkubmV4dFNpYmxpbmc/aS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGkubmV4dFNpYmxpbmcpOmkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChyKSx0Ll9pbnNlcnRhZnRlcih0aGlzLGUsdGhpcy5wYXBlciksdGhpc30sRS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5yZW1vdmVkfHwhZSlyZXR1cm4gdGhpczt2YXIgcj1BKHRoaXMubm9kZSksaT1BKGUubm9kZXx8ZVswXS5ub2RlKTtyZXR1cm4gaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGkpLHQuX2luc2VydGJlZm9yZSh0aGlzLGUsdGhpcy5wYXBlciksdGhpc30sRS5ibHVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoMCE9PStlKXt2YXIgaT12KFwiZmlsdGVyXCIpLG49dihcImZlR2F1c3NpYW5CbHVyXCIpO3IuYXR0cnMuYmx1cj1lLGkuaWQ9dC5jcmVhdGVVVUlEKCksdihuLHtzdGREZXZpYXRpb246K2V8fDEuNX0pLGkuYXBwZW5kQ2hpbGQobiksci5wYXBlci5kZWZzLmFwcGVuZENoaWxkKGkpLHIuX2JsdXI9aSx2KHIubm9kZSx7ZmlsdGVyOlwidXJsKCNcIitpLmlkK1wiKVwifSl9ZWxzZSByLl9ibHVyJiYoci5fYmx1ci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIuX2JsdXIpLGRlbGV0ZSByLl9ibHVyLGRlbGV0ZSByLmF0dHJzLmJsdXIpLHIubm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJmaWx0ZXJcIik7cmV0dXJuIHJ9LHQuX2VuZ2luZS5jaXJjbGU9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG49dihcImNpcmNsZVwiKTt0LmNhbnZhcyYmdC5jYW52YXMuYXBwZW5kQ2hpbGQobik7dmFyIGE9bmV3IFQobix0KTtyZXR1cm4gYS5hdHRycz17Y3g6ZSxjeTpyLHI6aSxmaWxsOlwibm9uZVwiLHN0cm9rZTpcIiMwMDBcIn0sYS50eXBlPVwiY2lyY2xlXCIsdihuLGEuYXR0cnMpLGF9LHQuX2VuZ2luZS5yZWN0PWZ1bmN0aW9uKHQsZSxyLGksbixhKXt2YXIgcz12KFwicmVjdFwiKTt0LmNhbnZhcyYmdC5jYW52YXMuYXBwZW5kQ2hpbGQocyk7dmFyIG89bmV3IFQocyx0KTtyZXR1cm4gby5hdHRycz17eDplLHk6cix3aWR0aDppLGhlaWdodDpuLHJ4OmF8fDAscnk6YXx8MCxmaWxsOlwibm9uZVwiLHN0cm9rZTpcIiMwMDBcIn0sby50eXBlPVwicmVjdFwiLHYocyxvLmF0dHJzKSxvfSx0Ll9lbmdpbmUuZWxsaXBzZT1mdW5jdGlvbih0LGUscixpLG4pe3ZhciBhPXYoXCJlbGxpcHNlXCIpO3QuY2FudmFzJiZ0LmNhbnZhcy5hcHBlbmRDaGlsZChhKTt2YXIgcz1uZXcgVChhLHQpO3JldHVybiBzLmF0dHJzPXtjeDplLGN5OnIscng6aSxyeTpuLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwiIzAwMFwifSxzLnR5cGU9XCJlbGxpcHNlXCIsdihhLHMuYXR0cnMpLHN9LHQuX2VuZ2luZS5pbWFnZT1mdW5jdGlvbih0LGUscixpLG4sYSl7dmFyIHM9dihcImltYWdlXCIpO3Yocyx7eDpyLHk6aSx3aWR0aDpuLGhlaWdodDphLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9KSxzLnNldEF0dHJpYnV0ZU5TKHAsXCJocmVmXCIsZSksdC5jYW52YXMmJnQuY2FudmFzLmFwcGVuZENoaWxkKHMpO3ZhciBvPW5ldyBUKHMsdCk7cmV0dXJuIG8uYXR0cnM9e3g6cix5Omksd2lkdGg6bixoZWlnaHQ6YSxzcmM6ZX0sby50eXBlPVwiaW1hZ2VcIixvfSx0Ll9lbmdpbmUudGV4dD1mdW5jdGlvbihlLHIsaSxuKXt2YXIgYT12KFwidGV4dFwiKTtlLmNhbnZhcyYmZS5jYW52YXMuYXBwZW5kQ2hpbGQoYSk7dmFyIHM9bmV3IFQoYSxlKTtyZXR1cm4gcy5hdHRycz17eDpyLHk6aSxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIix0ZXh0Om4sXCJmb250LWZhbWlseVwiOnQuX2F2YWlsYWJsZUF0dHJzW1wiZm9udC1mYW1pbHlcIl0sXCJmb250LXNpemVcIjp0Ll9hdmFpbGFibGVBdHRyc1tcImZvbnQtc2l6ZVwiXSxzdHJva2U6XCJub25lXCIsZmlsbDpcIiMwMDBcIn0scy50eXBlPVwidGV4dFwiLEIocyxzLmF0dHJzKSxzfSx0Ll9lbmdpbmUuc2V0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLndpZHRoPXR8fHRoaXMud2lkdGgsdGhpcy5oZWlnaHQ9ZXx8dGhpcy5oZWlnaHQsdGhpcy5jYW52YXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLmNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIix0aGlzLmhlaWdodCksdGhpcy5fdmlld0JveCYmdGhpcy5zZXRWaWV3Qm94LmFwcGx5KHRoaXMsdGhpcy5fdmlld0JveCksdGhpc30sdC5fZW5naW5lLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlPXQuX2dldENvbnRhaW5lci5hcHBseSgwLGFyZ3VtZW50cykscj1lJiZlLmNvbnRhaW5lcixpPWUueCxuPWUueSxhPWUud2lkdGgscz1lLmhlaWdodDtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJTVkcgY29udGFpbmVyIG5vdCBmb3VuZC5cIik7dmFyIG89dihcInN2Z1wiKSxsPVwib3ZlcmZsb3c6aGlkZGVuO1wiLGg7cmV0dXJuIGk9aXx8MCxuPW58fDAsYT1hfHw1MTIscz1zfHwzNDIsdihvLHtoZWlnaHQ6cyx2ZXJzaW9uOjEuMSx3aWR0aDphLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInhtbG5zOnhsaW5rXCI6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJ9KSwxPT1yPyhvLnN0eWxlLmNzc1RleHQ9bCtcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6XCIraStcInB4O3RvcDpcIituK1wicHhcIix0Ll9nLmRvYy5ib2R5LmFwcGVuZENoaWxkKG8pLGg9MSk6KG8uc3R5bGUuY3NzVGV4dD1sK1wicG9zaXRpb246cmVsYXRpdmVcIixyLmZpcnN0Q2hpbGQ/ci5pbnNlcnRCZWZvcmUobyxyLmZpcnN0Q2hpbGQpOnIuYXBwZW5kQ2hpbGQobykpLHI9bmV3IHQuX1BhcGVyLHIud2lkdGg9YSxyLmhlaWdodD1zLHIuY2FudmFzPW8sci5jbGVhcigpLHIuX2xlZnQ9ci5fdG9wPTAsaCYmKHIucmVuZGVyZml4PWZ1bmN0aW9uKCl7fSksci5yZW5kZXJmaXgoKSxyfSx0Ll9lbmdpbmUuc2V0Vmlld0JveD1mdW5jdGlvbih0LGUscixpLG4pe3UoXCJyYXBoYWVsLnNldFZpZXdCb3hcIix0aGlzLHRoaXMuX3ZpZXdCb3gsW3QsZSxyLGksbl0pO3ZhciBhPXRoaXMuZ2V0U2l6ZSgpLG89cyhyL2Eud2lkdGgsaS9hLmhlaWdodCksbD10aGlzLnRvcCxoPW4/XCJ4TWlkWU1pZCBtZWV0XCI6XCJ4TWluWU1pblwiLGMscDtmb3IobnVsbD09dD8odGhpcy5fdmJTaXplJiYobz0xKSxkZWxldGUgdGhpcy5fdmJTaXplLGM9XCIwIDAgXCIrdGhpcy53aWR0aCtmK3RoaXMuaGVpZ2h0KToodGhpcy5fdmJTaXplPW8sYz10K2YrZStmK3IrZitpKSx2KHRoaXMuY2FudmFzLHt2aWV3Qm94OmMscHJlc2VydmVBc3BlY3RSYXRpbzpofSk7byYmbDspcD1cInN0cm9rZS13aWR0aFwiaW4gbC5hdHRycz9sLmF0dHJzW1wic3Ryb2tlLXdpZHRoXCJdOjEsbC5hdHRyKHtcInN0cm9rZS13aWR0aFwiOnB9KSxsLl8uZGlydHk9MSxsLl8uZGlydHlUPTEsbD1sLnByZXY7cmV0dXJuIHRoaXMuX3ZpZXdCb3g9W3QsZSxyLGksISFuXSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJmaXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbnZhcyxlPXQuc3R5bGUscjt0cnl7cj10LmdldFNjcmVlbkNUTSgpfHx0LmNyZWF0ZVNWR01hdHJpeCgpfWNhdGNoKGkpe3I9dC5jcmVhdGVTVkdNYXRyaXgoKX12YXIgbj0tci5lJTEsYT0tci5mJTE7KG58fGEpJiYobiYmKHRoaXMuX2xlZnQ9KHRoaXMuX2xlZnQrbiklMSxlLmxlZnQ9dGhpcy5fbGVmdCtcInB4XCIpLGEmJih0aGlzLl90b3A9KHRoaXMuX3RvcCthKSUxLGUudG9wPXRoaXMuX3RvcCtcInB4XCIpKX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0LmV2ZShcInJhcGhhZWwuY2xlYXJcIix0aGlzKTtmb3IodmFyIGU9dGhpcy5jYW52YXM7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7dGhpcy5ib3R0b209dGhpcy50b3A9bnVsbCwodGhpcy5kZXNjPXYoXCJkZXNjXCIpKS5hcHBlbmRDaGlsZCh0Ll9nLmRvYy5jcmVhdGVUZXh0Tm9kZShcIkNyZWF0ZWQgd2l0aCBSYXBoYcOrbCBcIit0LnZlcnNpb24pKSxlLmFwcGVuZENoaWxkKHRoaXMuZGVzYyksZS5hcHBlbmRDaGlsZCh0aGlzLmRlZnM9dihcImRlZnNcIikpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt1KFwicmFwaGFlbC5yZW1vdmVcIix0aGlzKSx0aGlzLmNhbnZhcy5wYXJlbnROb2RlJiZ0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtmb3IodmFyIGUgaW4gdGhpcyl0aGlzW2VdPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXNbZV0/dC5fcmVtb3ZlZEZhY3RvcnkoZSk6bnVsbH07dmFyIE09dC5zdDtmb3IodmFyIE4gaW4gRSlFW2VdKE4pJiYhTVtlXShOKSYmKE1bTl09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24ocil7clt0XS5hcHBseShyLGUpfSl9fShOKSl9fS5hcHBseShlLGkpLCEodm9pZCAwIT09biYmKHQuZXhwb3J0cz1uKSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxuO2k9W3IoMSldLG49ZnVuY3Rpb24odCl7aWYoIXR8fHQudm1sKXt2YXIgZT1cImhhc093blByb3BlcnR5XCIscj1TdHJpbmcsaT1wYXJzZUZsb2F0LG49TWF0aCxhPW4ucm91bmQscz1uLm1heCxvPW4ubWluLGw9bi5hYnMsaD1cImZpbGxcIix1PS9bLCBdKy8sYz10LmV2ZSxmPVwiIHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdFwiLHA9XCIgXCIsZD1cIlwiLGc9e006XCJtXCIsTDpcImxcIixDOlwiY1wiLFo6XCJ4XCIsbTpcInRcIixsOlwiclwiLGM6XCJ2XCIsejpcInhcIn0sdj0vKFtjbG16XSksPyhbXmNsbXpdKikvZ2kseD0vIHByb2dpZDpcXFMrQmx1clxcKFteXFwpXStcXCkvZyx5PS8tP1teLFxccy1dKy9nLG09XCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTClcIixiPTIxNjAwLF89e3BhdGg6MSxyZWN0OjEsaW1hZ2U6MX0sdz17Y2lyY2xlOjEsZWxsaXBzZToxfSxrPWZ1bmN0aW9uKGUpe3ZhciBpPS9bYWhxc3R2XS9naSxuPXQuX3BhdGhUb0Fic29sdXRlO2lmKHIoZSkubWF0Y2goaSkmJihuPXQuX3BhdGgyY3VydmUpLGk9L1tjbG16XS9nLG49PXQuX3BhdGhUb0Fic29sdXRlJiYhcihlKS5tYXRjaChpKSl7dmFyIHM9cihlKS5yZXBsYWNlKHYsZnVuY3Rpb24odCxlLHIpe3ZhciBpPVtdLG49XCJtXCI9PWUudG9Mb3dlckNhc2UoKSxzPWdbZV07cmV0dXJuIHIucmVwbGFjZSh5LGZ1bmN0aW9uKHQpe24mJjI9PWkubGVuZ3RoJiYocys9aStnW1wibVwiPT1lP1wibFwiOlwiTFwiXSxpPVtdKSxpLnB1c2goYSh0KmIpKX0pLHMraX0pO3JldHVybiBzfXZhciBvPW4oZSksbCxoO3M9W107Zm9yKHZhciB1PTAsYz1vLmxlbmd0aDt1PGM7dSsrKXtsPW9bdV0saD1vW3VdWzBdLnRvTG93ZXJDYXNlKCksXCJ6XCI9PWgmJihoPVwieFwiKTtmb3IodmFyIGY9MSx4PWwubGVuZ3RoO2Y8eDtmKyspaCs9YShsW2ZdKmIpKyhmIT14LTE/XCIsXCI6ZCk7cy5wdXNoKGgpfXJldHVybiBzLmpvaW4ocCl9LEI9ZnVuY3Rpb24oZSxyLGkpe3ZhciBuPXQubWF0cml4KCk7cmV0dXJuIG4ucm90YXRlKC1lLC41LC41KSx7ZHg6bi54KHIsaSksZHk6bi55KHIsaSl9fSxDPWZ1bmN0aW9uKHQsZSxyLGksbixhKXt2YXIgcz10Ll8sbz10Lm1hdHJpeCx1PXMuZmlsbHBvcyxjPXQubm9kZSxmPWMuc3R5bGUsZD0xLGc9XCJcIix2LHg9Yi9lLHk9Yi9yO2lmKGYudmlzaWJpbGl0eT1cImhpZGRlblwiLGUmJnIpe2lmKGMuY29vcmRzaXplPWwoeCkrcCtsKHkpLGYucm90YXRpb249YSooZSpyPDA/LTE6MSksYSl7dmFyIG09QihhLGksbik7aT1tLmR4LG49bS5keX1pZihlPDAmJihnKz1cInhcIikscjwwJiYoZys9XCIgeVwiKSYmKGQ9LTEpLGYuZmxpcD1nLGMuY29vcmRvcmlnaW49aSoteCtwK24qLXksdXx8cy5maWxsc2l6ZSl7dmFyIF89Yy5nZXRFbGVtZW50c0J5VGFnTmFtZShoKTtfPV8mJl9bMF0sYy5yZW1vdmVDaGlsZChfKSx1JiYobT1CKGEsby54KHVbMF0sdVsxXSksby55KHVbMF0sdVsxXSkpLF8ucG9zaXRpb249bS5keCpkK3ArbS5keSpkKSxzLmZpbGxzaXplJiYoXy5zaXplPXMuZmlsbHNpemVbMF0qbChlKStwK3MuZmlsbHNpemVbMV0qbChyKSksYy5hcHBlbmRDaGlsZChfKX1mLnZpc2liaWxpdHk9XCJ2aXNpYmxlXCJ9fTt0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJZb3VyIGJyb3dzZXIgZG9lc27igJl0IHN1cHBvcnQgU1ZHLiBGYWxsaW5nIGRvd24gdG8gVk1MLlxcbllvdSBhcmUgcnVubmluZyBSYXBoYcOrbCBcIit0aGlzLnZlcnNpb259O3ZhciBTPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG49cihlKS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiLVwiKSxhPWk/XCJlbmRcIjpcInN0YXJ0XCIscz1uLmxlbmd0aCxvPVwiY2xhc3NpY1wiLGw9XCJtZWRpdW1cIixoPVwibWVkaXVtXCI7cy0tOylzd2l0Y2gobltzXSl7Y2FzZVwiYmxvY2tcIjpjYXNlXCJjbGFzc2ljXCI6Y2FzZVwib3ZhbFwiOmNhc2VcImRpYW1vbmRcIjpjYXNlXCJvcGVuXCI6Y2FzZVwibm9uZVwiOm89bltzXTticmVhaztjYXNlXCJ3aWRlXCI6Y2FzZVwibmFycm93XCI6aD1uW3NdO2JyZWFrO2Nhc2VcImxvbmdcIjpjYXNlXCJzaG9ydFwiOmw9bltzXX12YXIgdT10Lm5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHJva2VcIilbMF07dVthK1wiYXJyb3dcIl09byx1W2ErXCJhcnJvd2xlbmd0aFwiXT1sLHVbYStcImFycm93d2lkdGhcIl09aH0sQT1mdW5jdGlvbihuLGwpe24uYXR0cnM9bi5hdHRyc3x8e307dmFyIGM9bi5ub2RlLGY9bi5hdHRycyxnPWMuc3R5bGUsdix4PV9bbi50eXBlXSYmKGwueCE9Zi54fHxsLnkhPWYueXx8bC53aWR0aCE9Zi53aWR0aHx8bC5oZWlnaHQhPWYuaGVpZ2h0fHxsLmN4IT1mLmN4fHxsLmN5IT1mLmN5fHxsLnJ4IT1mLnJ4fHxsLnJ5IT1mLnJ5fHxsLnIhPWYucikseT13W24udHlwZV0mJihmLmN4IT1sLmN4fHxmLmN5IT1sLmN5fHxmLnIhPWwucnx8Zi5yeCE9bC5yeHx8Zi5yeSE9bC5yeSksbT1uO2Zvcih2YXIgQiBpbiBsKWxbZV0oQikmJihmW0JdPWxbQl0pO2lmKHgmJihmLnBhdGg9dC5fZ2V0UGF0aFtuLnR5cGVdKG4pLG4uXy5kaXJ0eT0xKSxsLmhyZWYmJihjLmhyZWY9bC5ocmVmKSxsLnRpdGxlJiYoYy50aXRsZT1sLnRpdGxlKSxsLnRhcmdldCYmKGMudGFyZ2V0PWwudGFyZ2V0KSxsLmN1cnNvciYmKGcuY3Vyc29yPWwuY3Vyc29yKSxcImJsdXJcImluIGwmJm4uYmx1cihsLmJsdXIpLChsLnBhdGgmJlwicGF0aFwiPT1uLnR5cGV8fHgpJiYoYy5wYXRoPWsofnIoZi5wYXRoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJyXCIpP3QuX3BhdGhUb0Fic29sdXRlKGYucGF0aCk6Zi5wYXRoKSxuLl8uZGlydHk9MSxcImltYWdlXCI9PW4udHlwZSYmKG4uXy5maWxscG9zPVtmLngsZi55XSxuLl8uZmlsbHNpemU9W2Yud2lkdGgsZi5oZWlnaHRdLEMobiwxLDEsMCwwLDApKSksXCJ0cmFuc2Zvcm1cImluIGwmJm4udHJhbnNmb3JtKGwudHJhbnNmb3JtKSx5KXt2YXIgQT0rZi5jeCxFPStmLmN5LE09K2Yucnh8fCtmLnJ8fDAsTD0rZi5yeXx8K2Yucnx8MDtjLnBhdGg9dC5mb3JtYXQoXCJhcnswfSx7MX0sezJ9LHszfSx7NH0sezF9LHs0fSx7MX14XCIsYSgoQS1NKSpiKSxhKChFLUwpKmIpLGEoKEErTSkqYiksYSgoRStMKSpiKSxhKEEqYikpLG4uXy5kaXJ0eT0xfWlmKFwiY2xpcC1yZWN0XCJpbiBsKXt2YXIgej1yKGxbXCJjbGlwLXJlY3RcIl0pLnNwbGl0KHUpO2lmKDQ9PXoubGVuZ3RoKXt6WzJdPSt6WzJdKyArelswXSx6WzNdPSt6WzNdKyArelsxXTt2YXIgUD1jLmNsaXBSZWN0fHx0Ll9nLmRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLEY9UC5zdHlsZTtGLmNsaXA9dC5mb3JtYXQoXCJyZWN0KHsxfXB4IHsyfXB4IHszfXB4IHswfXB4KVwiLHopLGMuY2xpcFJlY3R8fChGLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixGLnRvcD0wLEYubGVmdD0wLEYud2lkdGg9bi5wYXBlci53aWR0aCtcInB4XCIsRi5oZWlnaHQ9bi5wYXBlci5oZWlnaHQrXCJweFwiLGMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoUCxjKSxQLmFwcGVuZENoaWxkKGMpLGMuY2xpcFJlY3Q9UCl9bFtcImNsaXAtcmVjdFwiXXx8Yy5jbGlwUmVjdCYmKGMuY2xpcFJlY3Quc3R5bGUuY2xpcD1cImF1dG9cIil9aWYobi50ZXh0cGF0aCl7dmFyIFI9bi50ZXh0cGF0aC5zdHlsZTtsLmZvbnQmJihSLmZvbnQ9bC5mb250KSxsW1wiZm9udC1mYW1pbHlcIl0mJihSLmZvbnRGYW1pbHk9J1wiJytsW1wiZm9udC1mYW1pbHlcIl0uc3BsaXQoXCIsXCIpWzBdLnJlcGxhY2UoL15bJ1wiXSt8WydcIl0rJC9nLGQpKydcIicpLGxbXCJmb250LXNpemVcIl0mJihSLmZvbnRTaXplPWxbXCJmb250LXNpemVcIl0pLGxbXCJmb250LXdlaWdodFwiXSYmKFIuZm9udFdlaWdodD1sW1wiZm9udC13ZWlnaHRcIl0pLGxbXCJmb250LXN0eWxlXCJdJiYoUi5mb250U3R5bGU9bFtcImZvbnQtc3R5bGVcIl0pfWlmKFwiYXJyb3ctc3RhcnRcImluIGwmJlMobSxsW1wiYXJyb3ctc3RhcnRcIl0pLFwiYXJyb3ctZW5kXCJpbiBsJiZTKG0sbFtcImFycm93LWVuZFwiXSwxKSxudWxsIT1sLm9wYWNpdHl8fG51bGwhPWwuZmlsbHx8bnVsbCE9bC5zcmN8fG51bGwhPWwuc3Ryb2tlfHxudWxsIT1sW1wic3Ryb2tlLXdpZHRoXCJdfHxudWxsIT1sW1wic3Ryb2tlLW9wYWNpdHlcIl18fG51bGwhPWxbXCJmaWxsLW9wYWNpdHlcIl18fG51bGwhPWxbXCJzdHJva2UtZGFzaGFycmF5XCJdfHxudWxsIT1sW1wic3Ryb2tlLW1pdGVybGltaXRcIl18fG51bGwhPWxbXCJzdHJva2UtbGluZWpvaW5cIl18fG51bGwhPWxbXCJzdHJva2UtbGluZWNhcFwiXSl7dmFyIGo9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZShoKSxJPSExO2lmKGo9aiYmalswXSwhaiYmKEk9aj1OKGgpKSxcImltYWdlXCI9PW4udHlwZSYmbC5zcmMmJihqLnNyYz1sLnNyYyksbC5maWxsJiYoai5vbj0hMCksbnVsbCE9ai5vbiYmXCJub25lXCIhPWwuZmlsbCYmbnVsbCE9PWwuZmlsbHx8KGoub249ITEpLGoub24mJmwuZmlsbCl7dmFyIHE9cihsLmZpbGwpLm1hdGNoKHQuX0lTVVJMKTtpZihxKXtqLnBhcmVudE5vZGU9PWMmJmMucmVtb3ZlQ2hpbGQoaiksai5yb3RhdGU9ITAsai5zcmM9cVsxXSxqLnR5cGU9XCJ0aWxlXCI7dmFyIEQ9bi5nZXRCQm94KDEpO2oucG9zaXRpb249RC54K3ArRC55LG4uXy5maWxscG9zPVtELngsRC55XSx0Ll9wcmVsb2FkKHFbMV0sZnVuY3Rpb24oKXtuLl8uZmlsbHNpemU9W3RoaXMub2Zmc2V0V2lkdGgsdGhpcy5vZmZzZXRIZWlnaHRdfSl9ZWxzZSBqLmNvbG9yPXQuZ2V0UkdCKGwuZmlsbCkuaGV4LGouc3JjPWQsai50eXBlPVwic29saWRcIix0LmdldFJHQihsLmZpbGwpLmVycm9yJiYobS50eXBlIGlue2NpcmNsZToxLGVsbGlwc2U6MX18fFwiclwiIT1yKGwuZmlsbCkuY2hhckF0KCkpJiZUKG0sbC5maWxsLGopJiYoZi5maWxsPVwibm9uZVwiLGYuZ3JhZGllbnQ9bC5maWxsLGoucm90YXRlPSExKX1pZihcImZpbGwtb3BhY2l0eVwiaW4gbHx8XCJvcGFjaXR5XCJpbiBsKXt2YXIgVj0oKCtmW1wiZmlsbC1vcGFjaXR5XCJdKzF8fDIpLTEpKigoK2Yub3BhY2l0eSsxfHwyKS0xKSooKCt0LmdldFJHQihsLmZpbGwpLm8rMXx8MiktMSk7Vj1vKHMoViwwKSwxKSxqLm9wYWNpdHk9VixqLnNyYyYmKGouY29sb3I9XCJub25lXCIpfWMuYXBwZW5kQ2hpbGQoaik7dmFyIE89Yy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInN0cm9rZVwiKSYmYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInN0cm9rZVwiKVswXSxZPSExOyFPJiYoWT1PPU4oXCJzdHJva2VcIikpLChsLnN0cm9rZSYmXCJub25lXCIhPWwuc3Ryb2tlfHxsW1wic3Ryb2tlLXdpZHRoXCJdfHxudWxsIT1sW1wic3Ryb2tlLW9wYWNpdHlcIl18fGxbXCJzdHJva2UtZGFzaGFycmF5XCJdfHxsW1wic3Ryb2tlLW1pdGVybGltaXRcIl18fGxbXCJzdHJva2UtbGluZWpvaW5cIl18fGxbXCJzdHJva2UtbGluZWNhcFwiXSkmJihPLm9uPSEwKSwoXCJub25lXCI9PWwuc3Ryb2tlfHxudWxsPT09bC5zdHJva2V8fG51bGw9PU8ub258fDA9PWwuc3Ryb2tlfHwwPT1sW1wic3Ryb2tlLXdpZHRoXCJdKSYmKE8ub249ITEpO3ZhciBXPXQuZ2V0UkdCKGwuc3Ryb2tlKTtPLm9uJiZsLnN0cm9rZSYmKE8uY29sb3I9Vy5oZXgpLFY9KCgrZltcInN0cm9rZS1vcGFjaXR5XCJdKzF8fDIpLTEpKigoK2Yub3BhY2l0eSsxfHwyKS0xKSooKCtXLm8rMXx8MiktMSk7dmFyIEc9Ljc1KihpKGxbXCJzdHJva2Utd2lkdGhcIl0pfHwxKTtpZihWPW8ocyhWLDApLDEpLG51bGw9PWxbXCJzdHJva2Utd2lkdGhcIl0mJihHPWZbXCJzdHJva2Utd2lkdGhcIl0pLGxbXCJzdHJva2Utd2lkdGhcIl0mJihPLndlaWdodD1HKSxHJiZHPDEmJihWKj1HKSYmKE8ud2VpZ2h0PTEpLE8ub3BhY2l0eT1WLGxbXCJzdHJva2UtbGluZWpvaW5cIl0mJihPLmpvaW5zdHlsZT1sW1wic3Ryb2tlLWxpbmVqb2luXCJdfHxcIm1pdGVyXCIpLE8ubWl0ZXJsaW1pdD1sW1wic3Ryb2tlLW1pdGVybGltaXRcIl18fDgsbFtcInN0cm9rZS1saW5lY2FwXCJdJiYoTy5lbmRjYXA9XCJidXR0XCI9PWxbXCJzdHJva2UtbGluZWNhcFwiXT9cImZsYXRcIjpcInNxdWFyZVwiPT1sW1wic3Ryb2tlLWxpbmVjYXBcIl0/XCJzcXVhcmVcIjpcInJvdW5kXCIpLFwic3Ryb2tlLWRhc2hhcnJheVwiaW4gbCl7dmFyIEg9e1wiLVwiOlwic2hvcnRkYXNoXCIsXCIuXCI6XCJzaG9ydGRvdFwiLFwiLS5cIjpcInNob3J0ZGFzaGRvdFwiLFwiLS4uXCI6XCJzaG9ydGRhc2hkb3Rkb3RcIixcIi4gXCI6XCJkb3RcIixcIi0gXCI6XCJkYXNoXCIsXCItLVwiOlwibG9uZ2Rhc2hcIixcIi0gLlwiOlwiZGFzaGRvdFwiLFwiLS0uXCI6XCJsb25nZGFzaGRvdFwiLFwiLS0uLlwiOlwibG9uZ2Rhc2hkb3Rkb3RcIn07Ty5kYXNoc3R5bGU9SFtlXShsW1wic3Ryb2tlLWRhc2hhcnJheVwiXSk/SFtsW1wic3Ryb2tlLWRhc2hhcnJheVwiXV06ZH1ZJiZjLmFwcGVuZENoaWxkKE8pfWlmKFwidGV4dFwiPT1tLnR5cGUpe20ucGFwZXIuY2FudmFzLnN0eWxlLmRpc3BsYXk9ZDt2YXIgWD1tLnBhcGVyLnNwYW4sVT0xMDAsJD1mLmZvbnQmJmYuZm9udC5tYXRjaCgvXFxkKyg/OlxcLlxcZCopPyg/PXB4KS8pO2c9WC5zdHlsZSxmLmZvbnQmJihnLmZvbnQ9Zi5mb250KSxmW1wiZm9udC1mYW1pbHlcIl0mJihnLmZvbnRGYW1pbHk9ZltcImZvbnQtZmFtaWx5XCJdKSxmW1wiZm9udC13ZWlnaHRcIl0mJihnLmZvbnRXZWlnaHQ9ZltcImZvbnQtd2VpZ2h0XCJdKSxmW1wiZm9udC1zdHlsZVwiXSYmKGcuZm9udFN0eWxlPWZbXCJmb250LXN0eWxlXCJdKSwkPWkoZltcImZvbnQtc2l6ZVwiXXx8JCYmJFswXSl8fDEwLGcuZm9udFNpemU9JCpVK1wicHhcIixtLnRleHRwYXRoLnN0cmluZyYmKFguaW5uZXJIVE1MPXIobS50ZXh0cGF0aC5zdHJpbmcpLnJlcGxhY2UoLzwvZyxcIiYjNjA7XCIpLnJlcGxhY2UoLyYvZyxcIiYjMzg7XCIpLnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKSk7dmFyIFo9WC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttLlc9Zi53PShaLnJpZ2h0LVoubGVmdCkvVSxtLkg9Zi5oPShaLmJvdHRvbS1aLnRvcCkvVSxtLlg9Zi54LG0uWT1mLnkrbS5ILzIsKFwieFwiaW4gbHx8XCJ5XCJpbiBsKSYmKG0ucGF0aC52PXQuZm9ybWF0KFwibXswfSx7MX1sezJ9LHsxfVwiLGEoZi54KmIpLGEoZi55KmIpLGEoZi54KmIpKzEpKTtmb3IodmFyIFE9W1wieFwiLFwieVwiLFwidGV4dFwiLFwiZm9udFwiLFwiZm9udC1mYW1pbHlcIixcImZvbnQtd2VpZ2h0XCIsXCJmb250LXN0eWxlXCIsXCJmb250LXNpemVcIl0sSj0wLEs9US5sZW5ndGg7SjxLO0orKylpZihRW0pdaW4gbCl7bS5fLmRpcnR5PTE7YnJlYWt9c3dpdGNoKGZbXCJ0ZXh0LWFuY2hvclwiXSl7Y2FzZVwic3RhcnRcIjptLnRleHRwYXRoLnN0eWxlW1widi10ZXh0LWFsaWduXCJdPVwibGVmdFwiLG0uYmJ4PW0uVy8yO2JyZWFrO2Nhc2VcImVuZFwiOm0udGV4dHBhdGguc3R5bGVbXCJ2LXRleHQtYWxpZ25cIl09XCJyaWdodFwiLG0uYmJ4PS1tLlcvMjticmVhaztkZWZhdWx0Om0udGV4dHBhdGguc3R5bGVbXCJ2LXRleHQtYWxpZ25cIl09XCJjZW50ZXJcIixtLmJieD0wfW0udGV4dHBhdGguc3R5bGVbXCJ2LXRleHQta2VyblwiXT0hMH19LFQ9ZnVuY3Rpb24oZSxhLHMpe2UuYXR0cnM9ZS5hdHRyc3x8e307dmFyIG89ZS5hdHRycyxsPU1hdGgucG93LGgsdSxjPVwibGluZWFyXCIsZj1cIi41IC41XCI7aWYoZS5hdHRycy5ncmFkaWVudD1hLGE9cihhKS5yZXBsYWNlKHQuX3JhZGlhbF9ncmFkaWVudCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGM9XCJyYWRpYWxcIixlJiZyJiYoZT1pKGUpLHI9aShyKSxsKGUtLjUsMikrbChyLS41LDIpPi4yNSYmKHI9bi5zcXJ0KC4yNS1sKGUtLjUsMikpKigyKihyPi41KS0xKSsuNSksZj1lK3ArciksZH0pLGE9YS5zcGxpdCgvXFxzKlxcLVxccyovKSxcImxpbmVhclwiPT1jKXt2YXIgZz1hLnNoaWZ0KCk7aWYoZz0taShnKSxpc05hTihnKSlyZXR1cm4gbnVsbH12YXIgdj10Ll9wYXJzZURvdHMoYSk7aWYoIXYpcmV0dXJuIG51bGw7aWYoZT1lLnNoYXBlfHxlLm5vZGUsdi5sZW5ndGgpe2UucmVtb3ZlQ2hpbGQocykscy5vbj0hMCxzLm1ldGhvZD1cIm5vbmVcIixzLmNvbG9yPXZbMF0uY29sb3Iscy5jb2xvcjI9dlt2Lmxlbmd0aC0xXS5jb2xvcjtmb3IodmFyIHg9W10seT0wLG09di5sZW5ndGg7eTxtO3krKyl2W3ldLm9mZnNldCYmeC5wdXNoKHZbeV0ub2Zmc2V0K3Ardlt5XS5jb2xvcik7cy5jb2xvcnM9eC5sZW5ndGg/eC5qb2luKCk6XCIwJSBcIitzLmNvbG9yLFwicmFkaWFsXCI9PWM/KHMudHlwZT1cImdyYWRpZW50VGl0bGVcIixzLmZvY3VzPVwiMTAwJVwiLHMuZm9jdXNzaXplPVwiMCAwXCIscy5mb2N1c3Bvc2l0aW9uPWYscy5hbmdsZT0wKToocy50eXBlPVwiZ3JhZGllbnRcIixzLmFuZ2xlPSgyNzAtZyklMzYwKSxlLmFwcGVuZENoaWxkKHMpfXJldHVybiAxfSxFPWZ1bmN0aW9uKGUscil7dGhpc1swXT10aGlzLm5vZGU9ZSxlLnJhcGhhZWw9ITAsdGhpcy5pZD10Ll9vaWQrKyxlLnJhcGhhZWxpZD10aGlzLmlkLHRoaXMuWD0wLHRoaXMuWT0wLHRoaXMuYXR0cnM9e30sdGhpcy5wYXBlcj1yLHRoaXMubWF0cml4PXQubWF0cml4KCksdGhpcy5fPXt0cmFuc2Zvcm06W10sc3g6MSxzeToxLGR4OjAsZHk6MCxkZWc6MCxkaXJ0eToxLGRpcnR5VDoxfSwhci5ib3R0b20mJihyLmJvdHRvbT10aGlzKSx0aGlzLnByZXY9ci50b3Asci50b3AmJihyLnRvcC5uZXh0PXRoaXMpLHIudG9wPXRoaXMsdGhpcy5uZXh0PW51bGx9LE09dC5lbDtFLnByb3RvdHlwZT1NLE0uY29uc3RydWN0b3I9RSxNLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0aGlzLl8udHJhbnNmb3JtO3ZhciBpPXRoaXMucGFwZXIuX3ZpZXdCb3hTaGlmdCxuPWk/XCJzXCIrW2kuc2NhbGUsaS5zY2FsZV0rXCItMS0xdFwiK1tpLmR4LGkuZHldOmQsYTtpJiYoYT1lPXIoZSkucmVwbGFjZSgvXFwuezN9fFxcdTIwMjYvZyx0aGlzLl8udHJhbnNmb3JtfHxkKSksdC5fZXh0cmFjdFRyYW5zZm9ybSh0aGlzLG4rZSk7dmFyIHM9dGhpcy5tYXRyaXguY2xvbmUoKSxvPXRoaXMuc2tldyxsPXRoaXMubm9kZSxoLHU9fnIodGhpcy5hdHRycy5maWxsKS5pbmRleE9mKFwiLVwiKSxjPSFyKHRoaXMuYXR0cnMuZmlsbCkuaW5kZXhPZihcInVybChcIik7aWYocy50cmFuc2xhdGUoMSwxKSxjfHx1fHxcImltYWdlXCI9PXRoaXMudHlwZSlpZihvLm1hdHJpeD1cIjEgMCAwIDFcIixvLm9mZnNldD1cIjAgMFwiLGg9cy5zcGxpdCgpLHUmJmgubm9Sb3RhdGlvbnx8IWguaXNTaW1wbGUpe2wuc3R5bGUuZmlsdGVyPXMudG9GaWx0ZXIoKTt2YXIgZj10aGlzLmdldEJCb3goKSxnPXRoaXMuZ2V0QkJveCgxKSx2PWYueC1nLngseD1mLnktZy55O2wuY29vcmRvcmlnaW49diotYitwK3gqLWIsQyh0aGlzLDEsMSx2LHgsMCl9ZWxzZSBsLnN0eWxlLmZpbHRlcj1kLEModGhpcyxoLnNjYWxleCxoLnNjYWxleSxoLmR4LGguZHksaC5yb3RhdGUpO2Vsc2UgbC5zdHlsZS5maWx0ZXI9ZCxvLm1hdHJpeD1yKHMpLG8ub2Zmc2V0PXMub2Zmc2V0KCk7cmV0dXJuIG51bGwhPT1hJiYodGhpcy5fLnRyYW5zZm9ybT1hLHQuX2V4dHJhY3RUcmFuc2Zvcm0odGhpcyxhKSksdGhpc30sTS5yb3RhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMucmVtb3ZlZClyZXR1cm4gdGhpcztpZihudWxsIT10KXtpZih0PXIodCkuc3BsaXQodSksdC5sZW5ndGgtMSYmKGU9aSh0WzFdKSxuPWkodFsyXSkpLHQ9aSh0WzBdKSxudWxsPT1uJiYoZT1uKSxudWxsPT1lfHxudWxsPT1uKXt2YXIgYT10aGlzLmdldEJCb3goMSk7ZT1hLngrYS53aWR0aC8yLG49YS55K2EuaGVpZ2h0LzJ9cmV0dXJuIHRoaXMuXy5kaXJ0eVQ9MSx0aGlzLnRyYW5zZm9ybSh0aGlzLl8udHJhbnNmb3JtLmNvbmNhdChbW1wiclwiLHQsZSxuXV0pKSx0aGlzfX0sTS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZW1vdmVkP3RoaXM6KHQ9cih0KS5zcGxpdCh1KSx0Lmxlbmd0aC0xJiYoZT1pKHRbMV0pKSx0PWkodFswXSl8fDAsZT0rZXx8MCx0aGlzLl8uYmJveCYmKHRoaXMuXy5iYm94LngrPXQsdGhpcy5fLmJib3gueSs9ZSksdGhpcy50cmFuc2Zvcm0odGhpcy5fLnRyYW5zZm9ybS5jb25jYXQoW1tcInRcIix0LGVdXSkpLHRoaXMpfSxNLnNjYWxlPWZ1bmN0aW9uKHQsZSxuLGEpe2lmKHRoaXMucmVtb3ZlZClyZXR1cm4gdGhpcztpZih0PXIodCkuc3BsaXQodSksdC5sZW5ndGgtMSYmKGU9aSh0WzFdKSxuPWkodFsyXSksYT1pKHRbM10pLGlzTmFOKG4pJiYobj1udWxsKSxpc05hTihhKSYmKGE9bnVsbCkpLHQ9aSh0WzBdKSxudWxsPT1lJiYoZT10KSxudWxsPT1hJiYobj1hKSxudWxsPT1ufHxudWxsPT1hKXZhciBzPXRoaXMuZ2V0QkJveCgxKTtyZXR1cm4gbj1udWxsPT1uP3MueCtzLndpZHRoLzI6bixhPW51bGw9PWE/cy55K3MuaGVpZ2h0LzI6YSx0aGlzLnRyYW5zZm9ybSh0aGlzLl8udHJhbnNmb3JtLmNvbmNhdChbW1wic1wiLHQsZSxuLGFdXSkpLHRoaXMuXy5kaXJ0eVQ9MSx0aGlzfSxNLmhpZGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZW1vdmVkJiYodGhpcy5ub2RlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIpLHRoaXN9LE0uc2hvdz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJlbW92ZWQmJih0aGlzLm5vZGUuc3R5bGUuZGlzcGxheT1kKSx0aGlzfSxNLmF1eEdldEJCb3g9dC5lbC5nZXRCQm94LE0uZ2V0QkJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYXV4R2V0QkJveCgpO2lmKHRoaXMucGFwZXImJnRoaXMucGFwZXIuX3ZpZXdCb3hTaGlmdCl7dmFyIGU9e30scj0xL3RoaXMucGFwZXIuX3ZpZXdCb3hTaGlmdC5zY2FsZTtyZXR1cm4gZS54PXQueC10aGlzLnBhcGVyLl92aWV3Qm94U2hpZnQuZHgsZS54Kj1yLGUueT10LnktdGhpcy5wYXBlci5fdmlld0JveFNoaWZ0LmR5LGUueSo9cixlLndpZHRoPXQud2lkdGgqcixlLmhlaWdodD10LmhlaWdodCpyLGUueDI9ZS54K2Uud2lkdGgsZS55Mj1lLnkrZS5oZWlnaHQsZX1yZXR1cm4gdH0sTS5fZ2V0QkJveD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZWQ/e306e3g6dGhpcy5YKyh0aGlzLmJieHx8MCktdGhpcy5XLzIseTp0aGlzLlktdGhpcy5ILHdpZHRoOnRoaXMuVyxoZWlnaHQ6dGhpcy5IfX0sTS5yZW1vdmU9ZnVuY3Rpb24oKXtpZighdGhpcy5yZW1vdmVkJiZ0aGlzLm5vZGUucGFyZW50Tm9kZSl7dGhpcy5wYXBlci5fX3NldF9fJiZ0aGlzLnBhcGVyLl9fc2V0X18uZXhjbHVkZSh0aGlzKSx0LmV2ZS51bmJpbmQoXCJyYXBoYWVsLiouKi5cIit0aGlzLmlkKSx0Ll90ZWFyKHRoaXMsdGhpcy5wYXBlciksdGhpcy5ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlKSx0aGlzLnNoYXBlJiZ0aGlzLnNoYXBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zaGFwZSk7Zm9yKHZhciBlIGluIHRoaXMpdGhpc1tlXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzW2VdP3QuX3JlbW92ZWRGYWN0b3J5KGUpOm51bGw7dGhpcy5yZW1vdmVkPSEwfX0sTS5hdHRyPWZ1bmN0aW9uKHIsaSl7aWYodGhpcy5yZW1vdmVkKXJldHVybiB0aGlzO2lmKG51bGw9PXIpe3ZhciBuPXt9O2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJzKXRoaXMuYXR0cnNbZV0oYSkmJihuW2FdPXRoaXMuYXR0cnNbYV0pO3JldHVybiBuLmdyYWRpZW50JiZcIm5vbmVcIj09bi5maWxsJiYobi5maWxsPW4uZ3JhZGllbnQpJiZkZWxldGUgbi5ncmFkaWVudCxuLnRyYW5zZm9ybT10aGlzLl8udHJhbnNmb3JtLG59aWYobnVsbD09aSYmdC5pcyhyLFwic3RyaW5nXCIpKXtpZihyPT1oJiZcIm5vbmVcIj09dGhpcy5hdHRycy5maWxsJiZ0aGlzLmF0dHJzLmdyYWRpZW50KXJldHVybiB0aGlzLmF0dHJzLmdyYWRpZW50O2Zvcih2YXIgcz1yLnNwbGl0KHUpLG89e30sbD0wLGY9cy5sZW5ndGg7bDxmO2wrKylyPXNbbF0sciBpbiB0aGlzLmF0dHJzP29bcl09dGhpcy5hdHRyc1tyXTp0LmlzKHRoaXMucGFwZXIuY3VzdG9tQXR0cmlidXRlc1tyXSxcImZ1bmN0aW9uXCIpP29bcl09dGhpcy5wYXBlci5jdXN0b21BdHRyaWJ1dGVzW3JdLmRlZjpvW3JdPXQuX2F2YWlsYWJsZUF0dHJzW3JdO3JldHVybiBmLTE/bzpvW3NbMF1dfWlmKHRoaXMuYXR0cnMmJm51bGw9PWkmJnQuaXMocixcImFycmF5XCIpKXtmb3Iobz17fSxsPTAsZj1yLmxlbmd0aDtsPGY7bCsrKW9bcltsXV09dGhpcy5hdHRyKHJbbF0pO3JldHVybiBvfXZhciBwO251bGwhPWkmJihwPXt9LHBbcl09aSksbnVsbD09aSYmdC5pcyhyLFwib2JqZWN0XCIpJiYocD1yKTtmb3IodmFyIGQgaW4gcCljKFwicmFwaGFlbC5hdHRyLlwiK2QrXCIuXCIrdGhpcy5pZCx0aGlzLHBbZF0pO2lmKHApe2ZvcihkIGluIHRoaXMucGFwZXIuY3VzdG9tQXR0cmlidXRlcylpZih0aGlzLnBhcGVyLmN1c3RvbUF0dHJpYnV0ZXNbZV0oZCkmJnBbZV0oZCkmJnQuaXModGhpcy5wYXBlci5jdXN0b21BdHRyaWJ1dGVzW2RdLFwiZnVuY3Rpb25cIikpe3ZhciBnPXRoaXMucGFwZXIuY3VzdG9tQXR0cmlidXRlc1tkXS5hcHBseSh0aGlzLFtdLmNvbmNhdChwW2RdKSk7dGhpcy5hdHRyc1tkXT1wW2RdO2Zvcih2YXIgdiBpbiBnKWdbZV0odikmJihwW3ZdPWdbdl0pfXAudGV4dCYmXCJ0ZXh0XCI9PXRoaXMudHlwZSYmKHRoaXMudGV4dHBhdGguc3RyaW5nPXAudGV4dCksQSh0aGlzLHApfXJldHVybiB0aGlzfSxNLnRvRnJvbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZW1vdmVkJiZ0aGlzLm5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLHRoaXMucGFwZXImJnRoaXMucGFwZXIudG9wIT10aGlzJiZ0Ll90b2Zyb250KHRoaXMsdGhpcy5wYXBlciksdGhpc30sTS50b0JhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVkP3RoaXM6KHRoaXMubm9kZS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQhPXRoaXMubm9kZSYmKHRoaXMubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLm5vZGUsdGhpcy5ub2RlLnBhcmVudE5vZGUuZmlyc3RDaGlsZCksdC5fdG9iYWNrKHRoaXMsdGhpcy5wYXBlcikpLHRoaXMpfSxNLmluc2VydEFmdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlbW92ZWQ/dGhpczooZS5jb25zdHJ1Y3Rvcj09dC5zdC5jb25zdHJ1Y3RvciYmKGU9ZVtlLmxlbmd0aC0xXSksZS5ub2RlLm5leHRTaWJsaW5nP2Uubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLm5vZGUsZS5ub2RlLm5leHRTaWJsaW5nKTplLm5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLHQuX2luc2VydGFmdGVyKHRoaXMsZSx0aGlzLnBhcGVyKSx0aGlzKX0sTS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlZD90aGlzOihlLmNvbnN0cnVjdG9yPT10LnN0LmNvbnN0cnVjdG9yJiYoZT1lWzBdKSxlLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5ub2RlLGUubm9kZSksdC5faW5zZXJ0YmVmb3JlKHRoaXMsZSx0aGlzLnBhcGVyKSx0aGlzKX0sTS5ibHVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMubm9kZS5ydW50aW1lU3R5bGUsaT1yLmZpbHRlcjtyZXR1cm4gaT1pLnJlcGxhY2UoeCxkKSwwIT09K2U/KHRoaXMuYXR0cnMuYmx1cj1lLHIuZmlsdGVyPWkrcCtmK1wiLkJsdXIocGl4ZWxyYWRpdXM9XCIrKCtlfHwxLjUpK1wiKVwiLHIubWFyZ2luPXQuZm9ybWF0KFwiLXswfXB4IDAgMCAtezB9cHhcIixhKCtlfHwxLjUpKSk6KHIuZmlsdGVyPWksci5tYXJnaW49MCxkZWxldGUgdGhpcy5hdHRycy5ibHVyKSx0aGlzfSx0Ll9lbmdpbmUucGF0aD1mdW5jdGlvbih0LGUpe3ZhciByPU4oXCJzaGFwZVwiKTtyLnN0eWxlLmNzc1RleHQ9bSxyLmNvb3Jkc2l6ZT1iK3ArYixyLmNvb3Jkb3JpZ2luPWUuY29vcmRvcmlnaW47dmFyIGk9bmV3IEUocixlKSxuPXtmaWxsOlwibm9uZVwiLHN0cm9rZTpcIiMwMDBcIn07dCYmKG4ucGF0aD10KSxpLnR5cGU9XCJwYXRoXCIsaS5wYXRoPVtdLGkuUGF0aD1kLEEoaSxuKSxlLmNhbnZhcyYmZS5jYW52YXMuYXBwZW5kQ2hpbGQocik7dmFyIGE9TihcInNrZXdcIik7cmV0dXJuIGEub249ITAsci5hcHBlbmRDaGlsZChhKSxpLnNrZXc9YSxpLnRyYW5zZm9ybShkKSxpfSx0Ll9lbmdpbmUucmVjdD1mdW5jdGlvbihlLHIsaSxuLGEscyl7dmFyIG89dC5fcmVjdFBhdGgocixpLG4sYSxzKSxsPWUucGF0aChvKSxoPWwuYXR0cnM7cmV0dXJuIGwuWD1oLng9cixsLlk9aC55PWksbC5XPWgud2lkdGg9bixsLkg9aC5oZWlnaHQ9YSxoLnI9cyxoLnBhdGg9byxsLnR5cGU9XCJyZWN0XCIsbH0sdC5fZW5naW5lLmVsbGlwc2U9ZnVuY3Rpb24odCxlLHIsaSxuKXt2YXIgYT10LnBhdGgoKSxzPWEuYXR0cnM7cmV0dXJuIGEuWD1lLWksYS5ZPXItbixhLlc9MippLGEuSD0yKm4sYS50eXBlPVwiZWxsaXBzZVwiLEEoYSx7Y3g6ZSxjeTpyLHJ4Omkscnk6bn0pLGF9LHQuX2VuZ2luZS5jaXJjbGU9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG49dC5wYXRoKCksYT1uLmF0dHJzO3JldHVybiBuLlg9ZS1pLG4uWT1yLWksbi5XPW4uSD0yKmksbi50eXBlPVwiY2lyY2xlXCIsQShuLHtjeDplLGN5OnIscjppfSksbn0sdC5fZW5naW5lLmltYWdlPWZ1bmN0aW9uKGUscixpLG4sYSxzKXt2YXIgbz10Ll9yZWN0UGF0aChpLG4sYSxzKSxsPWUucGF0aChvKS5hdHRyKHtzdHJva2U6XCJub25lXCJ9KSx1PWwuYXR0cnMsYz1sLm5vZGUsZj1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdO3JldHVybiB1LnNyYz1yLGwuWD11Lng9aSxsLlk9dS55PW4sbC5XPXUud2lkdGg9YSxsLkg9dS5oZWlnaHQ9cyx1LnBhdGg9byxsLnR5cGU9XCJpbWFnZVwiLGYucGFyZW50Tm9kZT09YyYmYy5yZW1vdmVDaGlsZChmKSxmLnJvdGF0ZT0hMCxmLnNyYz1yLGYudHlwZT1cInRpbGVcIixsLl8uZmlsbHBvcz1baSxuXSxsLl8uZmlsbHNpemU9W2Esc10sYy5hcHBlbmRDaGlsZChmKSxDKGwsMSwxLDAsMCwwKSxsfSx0Ll9lbmdpbmUudGV4dD1mdW5jdGlvbihlLGksbixzKXt2YXIgbz1OKFwic2hhcGVcIiksbD1OKFwicGF0aFwiKSxoPU4oXCJ0ZXh0cGF0aFwiKTtpPWl8fDAsbj1ufHwwLHM9c3x8XCJcIixsLnY9dC5mb3JtYXQoXCJtezB9LHsxfWx7Mn0sezF9XCIsYShpKmIpLGEobipiKSxhKGkqYikrMSksbC50ZXh0cGF0aG9rPSEwLGguc3RyaW5nPXIocyksaC5vbj0hMCxvLnN0eWxlLmNzc1RleHQ9bSxvLmNvb3Jkc2l6ZT1iK3ArYixvLmNvb3Jkb3JpZ2luPVwiMCAwXCI7dmFyIHU9bmV3IEUobyxlKSxjPXtmaWxsOlwiIzAwMFwiLHN0cm9rZTpcIm5vbmVcIixmb250OnQuX2F2YWlsYWJsZUF0dHJzLmZvbnQsdGV4dDpzfTt1LnNoYXBlPW8sdS5wYXRoPWwsdS50ZXh0cGF0aD1oLHUudHlwZT1cInRleHRcIix1LmF0dHJzLnRleHQ9cihzKSx1LmF0dHJzLng9aSx1LmF0dHJzLnk9bix1LmF0dHJzLnc9MSx1LmF0dHJzLmg9MSxBKHUsYyksby5hcHBlbmRDaGlsZChoKSxvLmFwcGVuZENoaWxkKGwpLGUuY2FudmFzLmFwcGVuZENoaWxkKG8pO3ZhciBmPU4oXCJza2V3XCIpO3JldHVybiBmLm9uPSEwLG8uYXBwZW5kQ2hpbGQoZiksdS5za2V3PWYsdS50cmFuc2Zvcm0oZCksdX0sdC5fZW5naW5lLnNldFNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgaT10aGlzLmNhbnZhcy5zdHlsZTtyZXR1cm4gdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXIsZT09K2UmJihlKz1cInB4XCIpLHI9PStyJiYocis9XCJweFwiKSxpLndpZHRoPWUsaS5oZWlnaHQ9cixpLmNsaXA9XCJyZWN0KDAgXCIrZStcIiBcIityK1wiIDApXCIsdGhpcy5fdmlld0JveCYmdC5fZW5naW5lLnNldFZpZXdCb3guYXBwbHkodGhpcyx0aGlzLl92aWV3Qm94KSx0aGlzfSx0Ll9lbmdpbmUuc2V0Vmlld0JveD1mdW5jdGlvbihlLHIsaSxuLGEpe3QuZXZlKFwicmFwaGFlbC5zZXRWaWV3Qm94XCIsdGhpcyx0aGlzLl92aWV3Qm94LFtlLHIsaSxuLGFdKTt2YXIgcz10aGlzLmdldFNpemUoKSxvPXMud2lkdGgsbD1zLmhlaWdodCxoLHU7cmV0dXJuIGEmJihoPWwvbix1PW8vaSxpKmg8byYmKGUtPShvLWkqaCkvMi9oKSxuKnU8bCYmKHItPShsLW4qdSkvMi91KSksdGhpcy5fdmlld0JveD1bZSxyLGksbiwhIWFdLHRoaXMuX3ZpZXdCb3hTaGlmdD17ZHg6LWUsZHk6LXIsc2NhbGU6c30sdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudHJhbnNmb3JtKFwiLi4uXCIpfSksdGhpc307dmFyIE47dC5fZW5naW5lLmluaXRXaW49ZnVuY3Rpb24odCl7dmFyIGU9dC5kb2N1bWVudDtlLnN0eWxlU2hlZXRzLmxlbmd0aDwzMT9lLmNyZWF0ZVN0eWxlU2hlZXQoKS5hZGRSdWxlKFwiLnJ2bWxcIixcImJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpXCIpOmUuc3R5bGVTaGVldHNbMF0uYWRkUnVsZShcIi5ydm1sXCIsXCJiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKVwiKTt0cnl7IWUubmFtZXNwYWNlcy5ydm1sJiZlLm5hbWVzcGFjZXMuYWRkKFwicnZtbFwiLFwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWxcIiksTj1mdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiPHJ2bWw6XCIrdCsnIGNsYXNzPVwicnZtbFwiPicpfX1jYXRjaChyKXtOPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCI8XCIrdCsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInJ2bWxcIj4nKX19fSx0Ll9lbmdpbmUuaW5pdFdpbih0Ll9nLndpbiksdC5fZW5naW5lLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlPXQuX2dldENvbnRhaW5lci5hcHBseSgwLGFyZ3VtZW50cykscj1lLmNvbnRhaW5lcixpPWUuaGVpZ2h0LG4sYT1lLndpZHRoLHM9ZS54LG89ZS55O2lmKCFyKXRocm93IG5ldyBFcnJvcihcIlZNTCBjb250YWluZXIgbm90IGZvdW5kLlwiKTt2YXIgbD1uZXcgdC5fUGFwZXIsaD1sLmNhbnZhcz10Ll9nLmRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHU9aC5zdHlsZTtyZXR1cm4gcz1zfHwwLG89b3x8MCxhPWF8fDUxMixpPWl8fDM0MixsLndpZHRoPWEsbC5oZWlnaHQ9aSxhPT0rYSYmKGErPVwicHhcIiksaT09K2kmJihpKz1cInB4XCIpLGwuY29vcmRzaXplPTFlMypiK3ArMWUzKmIsbC5jb29yZG9yaWdpbj1cIjAgMFwiLGwuc3Bhbj10Ll9nLmRvYy5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxsLnNwYW4uc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTk5OTllbTt0b3A6LTk5OTllbTtwYWRkaW5nOjA7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MTtcIixoLmFwcGVuZENoaWxkKGwuc3BhbiksdS5jc3NUZXh0PXQuZm9ybWF0KFwidG9wOjA7bGVmdDowO3dpZHRoOnswfTtoZWlnaHQ6ezF9O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2NsaXA6cmVjdCgwIHswfSB7MX0gMCk7b3ZlcmZsb3c6aGlkZGVuXCIsYSxpKSwxPT1yPyh0Ll9nLmRvYy5ib2R5LmFwcGVuZENoaWxkKGgpLHUubGVmdD1zK1wicHhcIix1LnRvcD1vK1wicHhcIix1LnBvc2l0aW9uPVwiYWJzb2x1dGVcIik6ci5maXJzdENoaWxkP3IuaW5zZXJ0QmVmb3JlKGgsci5maXJzdENoaWxkKTpyLmFwcGVuZENoaWxkKGgpLGwucmVuZGVyZml4PWZ1bmN0aW9uKCl7fSxsfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3QuZXZlKFwicmFwaGFlbC5jbGVhclwiLHRoaXMpLHRoaXMuY2FudmFzLmlubmVySFRNTD1kLHRoaXMuc3Bhbj10Ll9nLmRvYy5jcmVhdGVFbGVtZW50KFwic3BhblwiKSx0aGlzLnNwYW4uc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTk5OTllbTt0b3A6LTk5OTllbTtwYWRkaW5nOjA7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MTtkaXNwbGF5OmlubGluZTtcIix0aGlzLmNhbnZhcy5hcHBlbmRDaGlsZCh0aGlzLnNwYW4pLHRoaXMuYm90dG9tPXRoaXMudG9wPW51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3QuZXZlKFwicmFwaGFlbC5yZW1vdmVcIix0aGlzKSx0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtmb3IodmFyIGUgaW4gdGhpcyl0aGlzW2VdPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXNbZV0/dC5fcmVtb3ZlZEZhY3RvcnkoZSk6bnVsbDtyZXR1cm4hMH07dmFyIEw9dC5zdDtmb3IodmFyIHogaW4gTSlNW2VdKHopJiYhTFtlXSh6KSYmKExbel09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24ocil7clt0XS5hcHBseShyLGUpfSl9fSh6KSl9fS5hcHBseShlLGkpLCEodm9pZCAwIT09biYmKHQuZXhwb3J0cz1uKSl9XSl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvcmFwaGFlbC9yYXBoYWVsLm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n"); - -/***/ }), -/* 52 */ +/***/ 49: /***/ (function(module, exports) { -eval("/* @license\nmorris.js v0.5.0\nCopyright 2014 Olly Smith All rights reserved.\nLicensed under the BSD-2-Clause License.\n*/\n(function(){var a,b,c,d,e=[].slice,f=function(a,b){return function(){return a.apply(b,arguments)}},g={}.hasOwnProperty,h=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},i=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=window.Morris={},a=jQuery,b.EventEmitter=function(){function a(){}return a.prototype.on=function(a,b){return null==this.handlers&&(this.handlers={}),null==this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this},a.prototype.fire=function(){var a,b,c,d,f,g,h;if(c=arguments[0],a=2<=arguments.length?e.call(arguments,1):[],null!=this.handlers&&null!=this.handlers[c]){for(g=this.handlers[c],h=[],d=0,f=g.length;f>d;d++)b=g[d],h.push(b.apply(null,a));return h}},a}(),b.commas=function(a){var b,c,d,e;return null!=a?(d=0>a?\"-\":\"\",b=Math.abs(a),c=Math.floor(b).toFixed(0),d+=c.replace(/(?=(?:\\d{3})+$)(?!^)/g,\",\"),e=b.toString(),e.length>c.length&&(d+=e.slice(c.length)),d):\"-\"},b.pad2=function(a){return(10>a?\"0\":\"\")+a},b.Grid=function(c){function d(b){this.resizeHandler=f(this.resizeHandler,this);var c=this;if(this.el=\"string\"==typeof b.element?a(document.getElementById(b.element)):a(b.element),null==this.el||0===this.el.length)throw new Error(\"Graph container element not found\");\"static\"===this.el.css(\"position\")&&this.el.css(\"position\",\"relative\"),this.options=a.extend({},this.gridDefaults,this.defaults||{},b),\"string\"==typeof this.options.units&&(this.options.postUnits=b.units),this.raphael=new Raphael(this.el[0]),this.elementWidth=null,this.elementHeight=null,this.dirty=!1,this.selectFrom=null,this.init&&this.init(),this.setData(this.options.data),this.el.bind(\"mousemove\",function(a){var b,d,e,f,g;return d=c.el.offset(),g=a.pageX-d.left,c.selectFrom?(b=c.data[c.hitTest(Math.min(g,c.selectFrom))]._x,e=c.data[c.hitTest(Math.max(g,c.selectFrom))]._x,f=e-b,c.selectionRect.attr({x:b,width:f})):c.fire(\"hovermove\",g,a.pageY-d.top)}),this.el.bind(\"mouseleave\",function(){return c.selectFrom&&(c.selectionRect.hide(),c.selectFrom=null),c.fire(\"hoverout\")}),this.el.bind(\"touchstart touchmove touchend\",function(a){var b,d;return d=a.originalEvent.touches[0]||a.originalEvent.changedTouches[0],b=c.el.offset(),c.fire(\"hovermove\",d.pageX-b.left,d.pageY-b.top)}),this.el.bind(\"click\",function(a){var b;return b=c.el.offset(),c.fire(\"gridclick\",a.pageX-b.left,a.pageY-b.top)}),this.options.rangeSelect&&(this.selectionRect=this.raphael.rect(0,0,0,this.el.innerHeight()).attr({fill:this.options.rangeSelectColor,stroke:!1}).toBack().hide(),this.el.bind(\"mousedown\",function(a){var b;return b=c.el.offset(),c.startRange(a.pageX-b.left)}),this.el.bind(\"mouseup\",function(a){var b;return b=c.el.offset(),c.endRange(a.pageX-b.left),c.fire(\"hovermove\",a.pageX-b.left,a.pageY-b.top)})),this.options.resize&&a(window).bind(\"resize\",function(){return null!=c.timeoutId&&window.clearTimeout(c.timeoutId),c.timeoutId=window.setTimeout(c.resizeHandler,100)}),this.el.css(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\"),this.postInit&&this.postInit()}return h(d,c),d.prototype.gridDefaults={dateFormat:null,axes:!0,grid:!0,gridLineColor:\"#aaa\",gridStrokeWidth:.5,gridTextColor:\"#888\",gridTextSize:12,gridTextFamily:\"sans-serif\",gridTextWeight:\"normal\",hideHover:!1,yLabelFormat:null,xLabelAngle:0,numLines:5,padding:25,parseTime:!0,postUnits:\"\",preUnits:\"\",ymax:\"auto\",ymin:\"auto 0\",goals:[],goalStrokeWidth:1,goalLineColors:[\"#666633\",\"#999966\",\"#cc6666\",\"#663333\"],events:[],eventStrokeWidth:1,eventLineColors:[\"#005a04\",\"#ccffbb\",\"#3a5f0b\",\"#005502\"],rangeSelect:null,rangeSelectColor:\"#eef\",resize:!1},d.prototype.setData=function(a,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;return null==c&&(c=!0),this.options.data=a,null==a||0===a.length?(this.data=[],this.raphael.clear(),null!=this.hover&&this.hover.hide(),void 0):(o=this.cumulative?0:null,p=this.cumulative?0:null,this.options.goals.length>0&&(h=Math.min.apply(Math,this.options.goals),g=Math.max.apply(Math,this.options.goals),p=null!=p?Math.min(p,h):h,o=null!=o?Math.max(o,g):g),this.data=function(){var c,d,g;for(g=[],f=c=0,d=a.length;d>c;f=++c)j=a[f],i={src:j},i.label=j[this.options.xkey],this.options.parseTime?(i.x=b.parseDate(i.label),this.options.dateFormat?i.label=this.options.dateFormat(i.x):\"number\"==typeof i.label&&(i.label=new Date(i.label).toString())):(i.x=f,this.options.xLabelFormat&&(i.label=this.options.xLabelFormat(i))),l=0,i.y=function(){var a,b,c,d;for(c=this.options.ykeys,d=[],e=a=0,b=c.length;b>a;e=++a)n=c[e],q=j[n],\"string\"==typeof q&&(q=parseFloat(q)),null!=q&&\"number\"!=typeof q&&(q=null),null!=q&&(this.cumulative?l+=q:null!=o?(o=Math.max(q,o),p=Math.min(q,p)):o=p=q),this.cumulative&&null!=l&&(o=Math.max(l,o),p=Math.min(l,p)),d.push(q);return d}.call(this),g.push(i);return g}.call(this),this.options.parseTime&&(this.data=this.data.sort(function(a,b){return(a.x>b.x)-(b.x>a.x)})),this.xmin=this.data[0].x,this.xmax=this.data[this.data.length-1].x,this.events=[],this.options.events.length>0&&(this.events=this.options.parseTime?function(){var a,c,e,f;for(e=this.options.events,f=[],a=0,c=e.length;c>a;a++)d=e[a],f.push(b.parseDate(d));return f}.call(this):this.options.events,this.xmax=Math.max(this.xmax,Math.max.apply(Math,this.events)),this.xmin=Math.min(this.xmin,Math.min.apply(Math,this.events))),this.xmin===this.xmax&&(this.xmin-=1,this.xmax+=1),this.ymin=this.yboundary(\"min\",p),this.ymax=this.yboundary(\"max\",o),this.ymin===this.ymax&&(p&&(this.ymin-=1),this.ymax+=1),((r=this.options.axes)===!0||\"both\"===r||\"y\"===r||this.options.grid===!0)&&(this.options.ymax===this.gridDefaults.ymax&&this.options.ymin===this.gridDefaults.ymin?(this.grid=this.autoGridLines(this.ymin,this.ymax,this.options.numLines),this.ymin=Math.min(this.ymin,this.grid[0]),this.ymax=Math.max(this.ymax,this.grid[this.grid.length-1])):(k=(this.ymax-this.ymin)/(this.options.numLines-1),this.grid=function(){var a,b,c,d;for(d=[],m=a=b=this.ymin,c=this.ymax;k>0?c>=a:a>=c;m=a+=k)d.push(m);return d}.call(this))),this.dirty=!0,c?this.redraw():void 0)},d.prototype.yboundary=function(a,b){var c,d;return c=this.options[\"y\"+a],\"string\"==typeof c?\"auto\"===c.slice(0,4)?c.length>5?(d=parseInt(c.slice(5),10),null==b?d:Math[a](b,d)):null!=b?b:0:parseInt(c,10):c},d.prototype.autoGridLines=function(a,b,c){var d,e,f,g,h,i,j,k,l;return h=b-a,l=Math.floor(Math.log(h)/Math.log(10)),j=Math.pow(10,l),e=Math.floor(a/j)*j,d=Math.ceil(b/j)*j,i=(d-e)/(c-1),1===j&&i>1&&Math.ceil(i)!==i&&(i=Math.ceil(i),d=e+i*(c-1)),0>e&&d>0&&(e=Math.floor(a/i)*i,d=Math.ceil(b/i)*i),1>i?(g=Math.floor(Math.log(i)/Math.log(10)),f=function(){var a,b;for(b=[],k=a=e;i>0?d>=a:a>=d;k=a+=i)b.push(parseFloat(k.toFixed(1-g)));return b}()):f=function(){var a,b;for(b=[],k=a=e;i>0?d>=a:a>=d;k=a+=i)b.push(k);return b}(),f},d.prototype._calc=function(){var a,b,c,d,e,f,g,h;return e=this.el.width(),c=this.el.height(),(this.elementWidth!==e||this.elementHeight!==c||this.dirty)&&(this.elementWidth=e,this.elementHeight=c,this.dirty=!1,this.left=this.options.padding,this.right=this.elementWidth-this.options.padding,this.top=this.options.padding,this.bottom=this.elementHeight-this.options.padding,((g=this.options.axes)===!0||\"both\"===g||\"y\"===g)&&(f=function(){var a,c,d,e;for(d=this.grid,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(this.measureText(this.yAxisFormat(b)).width);return e}.call(this),this.left+=Math.max.apply(Math,f)),((h=this.options.axes)===!0||\"both\"===h||\"x\"===h)&&(a=function(){var a,b,c;for(c=[],d=a=0,b=this.data.length;b>=0?b>a:a>b;d=b>=0?++a:--a)c.push(this.measureText(this.data[d].text,-this.options.xLabelAngle).height);return c}.call(this),this.bottom-=Math.max.apply(Math,a)),this.width=Math.max(1,this.right-this.left),this.height=Math.max(1,this.bottom-this.top),this.dx=this.width/(this.xmax-this.xmin),this.dy=this.height/(this.ymax-this.ymin),this.calc)?this.calc():void 0},d.prototype.transY=function(a){return this.bottom-(a-this.ymin)*this.dy},d.prototype.transX=function(a){return 1===this.data.length?(this.left+this.right)/2:this.left+(a-this.xmin)*this.dx},d.prototype.redraw=function(){return this.raphael.clear(),this._calc(),this.drawGrid(),this.drawGoals(),this.drawEvents(),this.draw?this.draw():void 0},d.prototype.measureText=function(a,b){var c,d;return null==b&&(b=0),d=this.raphael.text(100,100,a).attr(\"font-size\",this.options.gridTextSize).attr(\"font-family\",this.options.gridTextFamily).attr(\"font-weight\",this.options.gridTextWeight).rotate(b),c=d.getBBox(),d.remove(),c},d.prototype.yAxisFormat=function(a){return this.yLabelFormat(a)},d.prototype.yLabelFormat=function(a){return\"function\"==typeof this.options.yLabelFormat?this.options.yLabelFormat(a):\"\"+this.options.preUnits+b.commas(a)+this.options.postUnits},d.prototype.drawGrid=function(){var a,b,c,d,e,f,g,h;if(this.options.grid!==!1||(e=this.options.axes)===!0||\"both\"===e||\"y\"===e){for(f=this.grid,h=[],c=0,d=f.length;d>c;c++)a=f[c],b=this.transY(a),((g=this.options.axes)===!0||\"both\"===g||\"y\"===g)&&this.drawYAxisLabel(this.left-this.options.padding/2,b,this.yAxisFormat(a)),this.options.grid?h.push(this.drawGridLine(\"M\"+this.left+\",\"+b+\"H\"+(this.left+this.width))):h.push(void 0);return h}},d.prototype.drawGoals=function(){var a,b,c,d,e,f,g;for(f=this.options.goals,g=[],c=d=0,e=f.length;e>d;c=++d)b=f[c],a=this.options.goalLineColors[c%this.options.goalLineColors.length],g.push(this.drawGoal(b,a));return g},d.prototype.drawEvents=function(){var a,b,c,d,e,f,g;for(f=this.events,g=[],c=d=0,e=f.length;e>d;c=++d)b=f[c],a=this.options.eventLineColors[c%this.options.eventLineColors.length],g.push(this.drawEvent(b,a));return g},d.prototype.drawGoal=function(a,b){return this.raphael.path(\"M\"+this.left+\",\"+this.transY(a)+\"H\"+this.right).attr(\"stroke\",b).attr(\"stroke-width\",this.options.goalStrokeWidth)},d.prototype.drawEvent=function(a,b){return this.raphael.path(\"M\"+this.transX(a)+\",\"+this.bottom+\"V\"+this.top).attr(\"stroke\",b).attr(\"stroke-width\",this.options.eventStrokeWidth)},d.prototype.drawYAxisLabel=function(a,b,c){return this.raphael.text(a,b,c).attr(\"font-size\",this.options.gridTextSize).attr(\"font-family\",this.options.gridTextFamily).attr(\"font-weight\",this.options.gridTextWeight).attr(\"fill\",this.options.gridTextColor).attr(\"text-anchor\",\"end\")},d.prototype.drawGridLine=function(a){return this.raphael.path(a).attr(\"stroke\",this.options.gridLineColor).attr(\"stroke-width\",this.options.gridStrokeWidth)},d.prototype.startRange=function(a){return this.hover.hide(),this.selectFrom=a,this.selectionRect.attr({x:a,width:0}).show()},d.prototype.endRange=function(a){var b,c;return this.selectFrom?(c=Math.min(this.selectFrom,a),b=Math.max(this.selectFrom,a),this.options.rangeSelect.call(this.el,{start:this.data[this.hitTest(c)].x,end:this.data[this.hitTest(b)].x}),this.selectFrom=null):void 0},d.prototype.resizeHandler=function(){return this.timeoutId=null,this.raphael.setSize(this.el.width(),this.el.height()),this.redraw()},d}(b.EventEmitter),b.parseDate=function(a){var b,c,d,e,f,g,h,i,j,k,l;return\"number\"==typeof a?a:(c=a.match(/^(\\d+) Q(\\d)$/),e=a.match(/^(\\d+)-(\\d+)$/),f=a.match(/^(\\d+)-(\\d+)-(\\d+)$/),h=a.match(/^(\\d+) W(\\d+)$/),i=a.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+)(Z|([+-])(\\d\\d):?(\\d\\d))?$/),j=a.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+):(\\d+(\\.\\d+)?)(Z|([+-])(\\d\\d):?(\\d\\d))?$/),c?new Date(parseInt(c[1],10),3*parseInt(c[2],10)-1,1).getTime():e?new Date(parseInt(e[1],10),parseInt(e[2],10)-1,1).getTime():f?new Date(parseInt(f[1],10),parseInt(f[2],10)-1,parseInt(f[3],10)).getTime():h?(k=new Date(parseInt(h[1],10),0,1),4!==k.getDay()&&k.setMonth(0,1+(4-k.getDay()+7)%7),k.getTime()+6048e5*parseInt(h[2],10)):i?i[6]?(g=0,\"Z\"!==i[6]&&(g=60*parseInt(i[8],10)+parseInt(i[9],10),\"+\"===i[7]&&(g=0-g)),Date.UTC(parseInt(i[1],10),parseInt(i[2],10)-1,parseInt(i[3],10),parseInt(i[4],10),parseInt(i[5],10)+g)):new Date(parseInt(i[1],10),parseInt(i[2],10)-1,parseInt(i[3],10),parseInt(i[4],10),parseInt(i[5],10)).getTime():j?(l=parseFloat(j[6]),b=Math.floor(l),d=Math.round(1e3*(l-b)),j[8]?(g=0,\"Z\"!==j[8]&&(g=60*parseInt(j[10],10)+parseInt(j[11],10),\"+\"===j[9]&&(g=0-g)),Date.UTC(parseInt(j[1],10),parseInt(j[2],10)-1,parseInt(j[3],10),parseInt(j[4],10),parseInt(j[5],10)+g,b,d)):new Date(parseInt(j[1],10),parseInt(j[2],10)-1,parseInt(j[3],10),parseInt(j[4],10),parseInt(j[5],10),b,d).getTime()):new Date(parseInt(a,10),0,1).getTime())},b.Hover=function(){function c(c){null==c&&(c={}),this.options=a.extend({},b.Hover.defaults,c),this.el=a(\"<div class='\"+this.options[\"class\"]+\"'></div>\"),this.el.hide(),this.options.parent.append(this.el)}return c.defaults={\"class\":\"morris-hover morris-default-style\"},c.prototype.update=function(a,b,c){return a?(this.html(a),this.show(),this.moveTo(b,c)):this.hide()},c.prototype.html=function(a){return this.el.html(a)},c.prototype.moveTo=function(a,b){var c,d,e,f,g,h;return g=this.options.parent.innerWidth(),f=this.options.parent.innerHeight(),d=this.el.outerWidth(),c=this.el.outerHeight(),e=Math.min(Math.max(0,a-d/2),g-d),null!=b?(h=b-c-10,0>h&&(h=b+10,h+c>f&&(h=f/2-c/2))):h=f/2-c/2,this.el.css({left:e+\"px\",top:parseInt(h)+\"px\"})},c.prototype.show=function(){return this.el.show()},c.prototype.hide=function(){return this.el.hide()},c}(),b.Line=function(a){function c(a){return this.hilight=f(this.hilight,this),this.onHoverOut=f(this.onHoverOut,this),this.onHoverMove=f(this.onHoverMove,this),this.onGridClick=f(this.onGridClick,this),this instanceof b.Line?(c.__super__.constructor.call(this,a),void 0):new b.Line(a)}return h(c,a),c.prototype.init=function(){return\"always\"!==this.options.hideHover?(this.hover=new b.Hover({parent:this.el}),this.on(\"hovermove\",this.onHoverMove),this.on(\"hoverout\",this.onHoverOut),this.on(\"gridclick\",this.onGridClick)):void 0},c.prototype.defaults={lineWidth:3,pointSize:4,lineColors:[\"#0b62a4\",\"#7A92A3\",\"#4da74d\",\"#afd8f8\",\"#edc240\",\"#cb4b4b\",\"#9440ed\"],pointStrokeWidths:[1],pointStrokeColors:[\"#ffffff\"],pointFillColors:[],smooth:!0,xLabels:\"auto\",xLabelFormat:null,xLabelMargin:24,hideHover:!1},c.prototype.calc=function(){return this.calcPoints(),this.generatePaths()},c.prototype.calcPoints=function(){var a,b,c,d,e,f;for(e=this.data,f=[],c=0,d=e.length;d>c;c++)a=e[c],a._x=this.transX(a.x),a._y=function(){var c,d,e,f;for(e=a.y,f=[],c=0,d=e.length;d>c;c++)b=e[c],null!=b?f.push(this.transY(b)):f.push(b);return f}.call(this),f.push(a._ymax=Math.min.apply(Math,[this.bottom].concat(function(){var c,d,e,f;for(e=a._y,f=[],c=0,d=e.length;d>c;c++)b=e[c],null!=b&&f.push(b);return f}())));return f},c.prototype.hitTest=function(a){var b,c,d,e,f;if(0===this.data.length)return null;for(f=this.data.slice(1),b=d=0,e=f.length;e>d&&(c=f[b],!(a<(c._x+this.data[b]._x)/2));b=++d);return b},c.prototype.onGridClick=function(a,b){var c;return c=this.hitTest(a),this.fire(\"click\",c,this.data[c].src,a,b)},c.prototype.onHoverMove=function(a){var b;return b=this.hitTest(a),this.displayHoverForRow(b)},c.prototype.onHoverOut=function(){return this.options.hideHover!==!1?this.displayHoverForRow(null):void 0},c.prototype.displayHoverForRow=function(a){var b;return null!=a?((b=this.hover).update.apply(b,this.hoverContentForRow(a)),this.hilight(a)):(this.hover.hide(),this.hilight())},c.prototype.hoverContentForRow=function(a){var b,c,d,e,f,g,h;for(d=this.data[a],b=\"<div class='morris-hover-row-label'>\"+d.label+\"</div>\",h=d.y,c=f=0,g=h.length;g>f;c=++f)e=h[c],b+=\"<div class='morris-hover-point' style='color: \"+this.colorFor(d,c,\"label\")+\"'>\\n \"+this.options.labels[c]+\":\\n \"+this.yLabelFormat(e)+\"\\n</div>\";return\"function\"==typeof this.options.hoverCallback&&(b=this.options.hoverCallback(a,this.options,b,d.src)),[b,d._x,d._ymax]},c.prototype.generatePaths=function(){var a,c,d,e;return this.paths=function(){var f,g,h,j;for(j=[],c=f=0,g=this.options.ykeys.length;g>=0?g>f:f>g;c=g>=0?++f:--f)e=\"boolean\"==typeof this.options.smooth?this.options.smooth:(h=this.options.ykeys[c],i.call(this.options.smooth,h)>=0),a=function(){var a,b,e,f;for(e=this.data,f=[],a=0,b=e.length;b>a;a++)d=e[a],void 0!==d._y[c]&&f.push({x:d._x,y:d._y[c]});return f}.call(this),a.length>1?j.push(b.Line.createPath(a,e,this.bottom)):j.push(null);return j}.call(this)},c.prototype.draw=function(){var a;return((a=this.options.axes)===!0||\"both\"===a||\"x\"===a)&&this.drawXAxis(),this.drawSeries(),this.options.hideHover===!1?this.displayHoverForRow(this.data.length-1):void 0},c.prototype.drawXAxis=function(){var a,c,d,e,f,g,h,i,j,k,l=this;for(h=this.bottom+this.options.padding/2,f=null,e=null,a=function(a,b){var c,d,g,i,j;return c=l.drawXAxisLabel(l.transX(b),h,a),j=c.getBBox(),c.transform(\"r\"+-l.options.xLabelAngle),d=c.getBBox(),c.transform(\"t0,\"+d.height/2+\"...\"),0!==l.options.xLabelAngle&&(i=-.5*j.width*Math.cos(l.options.xLabelAngle*Math.PI/180),c.transform(\"t\"+i+\",0...\")),d=c.getBBox(),(null==f||f>=d.x+d.width||null!=e&&e>=d.x)&&d.x>=0&&d.x+d.width<l.el.width()?(0!==l.options.xLabelAngle&&(g=1.25*l.options.gridTextSize/Math.sin(l.options.xLabelAngle*Math.PI/180),e=d.x-g),f=d.x-l.options.xLabelMargin):c.remove()},d=this.options.parseTime?1===this.data.length&&\"auto\"===this.options.xLabels?[[this.data[0].label,this.data[0].x]]:b.labelSeries(this.xmin,this.xmax,this.width,this.options.xLabels,this.options.xLabelFormat):function(){var a,b,c,d;for(c=this.data,d=[],a=0,b=c.length;b>a;a++)g=c[a],d.push([g.label,g.x]);return d}.call(this),d.reverse(),k=[],i=0,j=d.length;j>i;i++)c=d[i],k.push(a(c[0],c[1]));return k},c.prototype.drawSeries=function(){var a,b,c,d,e,f;for(this.seriesPoints=[],a=b=d=this.options.ykeys.length-1;0>=d?0>=b:b>=0;a=0>=d?++b:--b)this._drawLineFor(a);for(f=[],a=c=e=this.options.ykeys.length-1;0>=e?0>=c:c>=0;a=0>=e?++c:--c)f.push(this._drawPointFor(a));return f},c.prototype._drawPointFor=function(a){var b,c,d,e,f,g;for(this.seriesPoints[a]=[],f=this.data,g=[],d=0,e=f.length;e>d;d++)c=f[d],b=null,null!=c._y[a]&&(b=this.drawLinePoint(c._x,c._y[a],this.colorFor(c,a,\"point\"),a)),g.push(this.seriesPoints[a].push(b));return g},c.prototype._drawLineFor=function(a){var b;return b=this.paths[a],null!==b?this.drawLinePath(b,this.colorFor(null,a,\"line\"),a):void 0},c.createPath=function(a,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(k=\"\",c&&(g=b.Line.gradients(a)),l={y:null},h=q=0,r=a.length;r>q;h=++q)e=a[h],null!=e.y&&(null!=l.y?c?(f=g[h],j=g[h-1],i=(e.x-l.x)/4,m=l.x+i,o=Math.min(d,l.y+i*j),n=e.x-i,p=Math.min(d,e.y-i*f),k+=\"C\"+m+\",\"+o+\",\"+n+\",\"+p+\",\"+e.x+\",\"+e.y):k+=\"L\"+e.x+\",\"+e.y:c&&null==g[h]||(k+=\"M\"+e.x+\",\"+e.y)),l=e;return k},c.gradients=function(a){var b,c,d,e,f,g,h,i;for(c=function(a,b){return(a.y-b.y)/(a.x-b.x)},i=[],d=g=0,h=a.length;h>g;d=++g)b=a[d],null!=b.y?(e=a[d+1]||{y:null},f=a[d-1]||{y:null},null!=f.y&&null!=e.y?i.push(c(f,e)):null!=f.y?i.push(c(f,b)):null!=e.y?i.push(c(b,e)):i.push(null)):i.push(null);return i},c.prototype.hilight=function(a){var b,c,d,e,f;if(null!==this.prevHilight&&this.prevHilight!==a)for(b=c=0,e=this.seriesPoints.length-1;e>=0?e>=c:c>=e;b=e>=0?++c:--c)this.seriesPoints[b][this.prevHilight]&&this.seriesPoints[b][this.prevHilight].animate(this.pointShrinkSeries(b));if(null!==a&&this.prevHilight!==a)for(b=d=0,f=this.seriesPoints.length-1;f>=0?f>=d:d>=f;b=f>=0?++d:--d)this.seriesPoints[b][a]&&this.seriesPoints[b][a].animate(this.pointGrowSeries(b));return this.prevHilight=a},c.prototype.colorFor=function(a,b,c){return\"function\"==typeof this.options.lineColors?this.options.lineColors.call(this,a,b,c):\"point\"===c?this.options.pointFillColors[b%this.options.pointFillColors.length]||this.options.lineColors[b%this.options.lineColors.length]:this.options.lineColors[b%this.options.lineColors.length]},c.prototype.drawXAxisLabel=function(a,b,c){return this.raphael.text(a,b,c).attr(\"font-size\",this.options.gridTextSize).attr(\"font-family\",this.options.gridTextFamily).attr(\"font-weight\",this.options.gridTextWeight).attr(\"fill\",this.options.gridTextColor)},c.prototype.drawLinePath=function(a,b,c){return this.raphael.path(a).attr(\"stroke\",b).attr(\"stroke-width\",this.lineWidthForSeries(c))},c.prototype.drawLinePoint=function(a,b,c,d){return this.raphael.circle(a,b,this.pointSizeForSeries(d)).attr(\"fill\",c).attr(\"stroke-width\",this.pointStrokeWidthForSeries(d)).attr(\"stroke\",this.pointStrokeColorForSeries(d))},c.prototype.pointStrokeWidthForSeries=function(a){return this.options.pointStrokeWidths[a%this.options.pointStrokeWidths.length]},c.prototype.pointStrokeColorForSeries=function(a){return this.options.pointStrokeColors[a%this.options.pointStrokeColors.length]},c.prototype.lineWidthForSeries=function(a){return this.options.lineWidth instanceof Array?this.options.lineWidth[a%this.options.lineWidth.length]:this.options.lineWidth},c.prototype.pointSizeForSeries=function(a){return this.options.pointSize instanceof Array?this.options.pointSize[a%this.options.pointSize.length]:this.options.pointSize},c.prototype.pointGrowSeries=function(a){return Raphael.animation({r:this.pointSizeForSeries(a)+3},25,\"linear\")},c.prototype.pointShrinkSeries=function(a){return Raphael.animation({r:this.pointSizeForSeries(a)},25,\"linear\")},c}(b.Grid),b.labelSeries=function(c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r;if(j=200*(d-c)/e,i=new Date(c),n=b.LABEL_SPECS[f],void 0===n)for(r=b.AUTO_LABEL_ORDER,p=0,q=r.length;q>p;p++)if(k=r[p],m=b.LABEL_SPECS[k],j>=m.span){n=m;break}for(void 0===n&&(n=b.LABEL_SPECS.second),g&&(n=a.extend({},n,{fmt:g})),h=n.start(i),l=[];(o=h.getTime())<=d;)o>=c&&l.push([n.fmt(h),o]),n.incr(h);return l},c=function(a){return{span:60*a*1e3,start:function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours())},fmt:function(a){return\"\"+b.pad2(a.getHours())+\":\"+b.pad2(a.getMinutes())},incr:function(b){return b.setUTCMinutes(b.getUTCMinutes()+a)}}},d=function(a){return{span:1e3*a,start:function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes())},fmt:function(a){return\"\"+b.pad2(a.getHours())+\":\"+b.pad2(a.getMinutes())+\":\"+b.pad2(a.getSeconds())},incr:function(b){return b.setUTCSeconds(b.getUTCSeconds()+a)}}},b.LABEL_SPECS={decade:{span:1728e8,start:function(a){return new Date(a.getFullYear()-a.getFullYear()%10,0,1)},fmt:function(a){return\"\"+a.getFullYear()},incr:function(a){return a.setFullYear(a.getFullYear()+10)}},year:{span:1728e7,start:function(a){return new Date(a.getFullYear(),0,1)},fmt:function(a){return\"\"+a.getFullYear()},incr:function(a){return a.setFullYear(a.getFullYear()+1)}},month:{span:24192e5,start:function(a){return new Date(a.getFullYear(),a.getMonth(),1)},fmt:function(a){return\"\"+a.getFullYear()+\"-\"+b.pad2(a.getMonth()+1)},incr:function(a){return a.setMonth(a.getMonth()+1)}},week:{span:6048e5,start:function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate())},fmt:function(a){return\"\"+a.getFullYear()+\"-\"+b.pad2(a.getMonth()+1)+\"-\"+b.pad2(a.getDate())},incr:function(a){return a.setDate(a.getDate()+7)}},day:{span:864e5,start:function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate())},fmt:function(a){return\"\"+a.getFullYear()+\"-\"+b.pad2(a.getMonth()+1)+\"-\"+b.pad2(a.getDate())},incr:function(a){return a.setDate(a.getDate()+1)}},hour:c(60),\"30min\":c(30),\"15min\":c(15),\"10min\":c(10),\"5min\":c(5),minute:c(1),\"30sec\":d(30),\"15sec\":d(15),\"10sec\":d(10),\"5sec\":d(5),second:d(1)},b.AUTO_LABEL_ORDER=[\"decade\",\"year\",\"month\",\"week\",\"day\",\"hour\",\"30min\",\"15min\",\"10min\",\"5min\",\"minute\",\"30sec\",\"15sec\",\"10sec\",\"5sec\",\"second\"],b.Area=function(c){function d(c){var f;return this instanceof b.Area?(f=a.extend({},e,c),this.cumulative=!f.behaveLikeLine,\"auto\"===f.fillOpacity&&(f.fillOpacity=f.behaveLikeLine?.8:1),d.__super__.constructor.call(this,f),void 0):new b.Area(c)}var e;return h(d,c),e={fillOpacity:\"auto\",behaveLikeLine:!1},d.prototype.calcPoints=function(){var a,b,c,d,e,f,g;for(f=this.data,g=[],d=0,e=f.length;e>d;d++)a=f[d],a._x=this.transX(a.x),b=0,a._y=function(){var d,e,f,g;for(f=a.y,g=[],d=0,e=f.length;e>d;d++)c=f[d],this.options.behaveLikeLine?g.push(this.transY(c)):(b+=c||0,g.push(this.transY(b)));return g}.call(this),g.push(a._ymax=Math.max.apply(Math,a._y));return g},d.prototype.drawSeries=function(){var a,b,c,d,e,f,g,h;for(this.seriesPoints=[],b=this.options.behaveLikeLine?function(){f=[];for(var a=0,b=this.options.ykeys.length-1;b>=0?b>=a:a>=b;b>=0?a++:a--)f.push(a);return f}.apply(this):function(){g=[];for(var a=e=this.options.ykeys.length-1;0>=e?0>=a:a>=0;0>=e?a++:a--)g.push(a);return g}.apply(this),h=[],c=0,d=b.length;d>c;c++)a=b[c],this._drawFillFor(a),this._drawLineFor(a),h.push(this._drawPointFor(a));return h},d.prototype._drawFillFor=function(a){var b;return b=this.paths[a],null!==b?(b+=\"L\"+this.transX(this.xmax)+\",\"+this.bottom+\"L\"+this.transX(this.xmin)+\",\"+this.bottom+\"Z\",this.drawFilledPath(b,this.fillForSeries(a))):void 0},d.prototype.fillForSeries=function(a){var b;return b=Raphael.rgb2hsl(this.colorFor(this.data[a],a,\"line\")),Raphael.hsl(b.h,this.options.behaveLikeLine?.9*b.s:.75*b.s,Math.min(.98,this.options.behaveLikeLine?1.2*b.l:1.25*b.l))},d.prototype.drawFilledPath=function(a,b){return this.raphael.path(a).attr(\"fill\",b).attr(\"fill-opacity\",this.options.fillOpacity).attr(\"stroke\",\"none\")},d}(b.Line),b.Bar=function(c){function d(c){return this.onHoverOut=f(this.onHoverOut,this),this.onHoverMove=f(this.onHoverMove,this),this.onGridClick=f(this.onGridClick,this),this instanceof b.Bar?(d.__super__.constructor.call(this,a.extend({},c,{parseTime:!1})),void 0):new b.Bar(c)}return h(d,c),d.prototype.init=function(){return this.cumulative=this.options.stacked,\"always\"!==this.options.hideHover?(this.hover=new b.Hover({parent:this.el}),this.on(\"hovermove\",this.onHoverMove),this.on(\"hoverout\",this.onHoverOut),this.on(\"gridclick\",this.onGridClick)):void 0},d.prototype.defaults={barSizeRatio:.75,barGap:3,barColors:[\"#0b62a4\",\"#7a92a3\",\"#4da74d\",\"#afd8f8\",\"#edc240\",\"#cb4b4b\",\"#9440ed\"],barOpacity:1,barRadius:[0,0,0,0],xLabelMargin:50},d.prototype.calc=function(){var a;return this.calcBars(),this.options.hideHover===!1?(a=this.hover).update.apply(a,this.hoverContentForRow(this.data.length-1)):void 0},d.prototype.calcBars=function(){var a,b,c,d,e,f,g;for(f=this.data,g=[],a=d=0,e=f.length;e>d;a=++d)b=f[a],b._x=this.left+this.width*(a+.5)/this.data.length,g.push(b._y=function(){var a,d,e,f;for(e=b.y,f=[],a=0,d=e.length;d>a;a++)c=e[a],null!=c?f.push(this.transY(c)):f.push(null);return f}.call(this));return g},d.prototype.draw=function(){var a;return((a=this.options.axes)===!0||\"both\"===a||\"x\"===a)&&this.drawXAxis(),this.drawSeries()},d.prototype.drawXAxis=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(j=this.bottom+(this.options.xAxisLabelTopPadding||this.options.padding/2),g=null,f=null,m=[],a=k=0,l=this.data.length;l>=0?l>k:k>l;a=l>=0?++k:--k)h=this.data[this.data.length-1-a],b=this.drawXAxisLabel(h._x,j,h.label),i=b.getBBox(),b.transform(\"r\"+-this.options.xLabelAngle),c=b.getBBox(),b.transform(\"t0,\"+c.height/2+\"...\"),0!==this.options.xLabelAngle&&(e=-.5*i.width*Math.cos(this.options.xLabelAngle*Math.PI/180),b.transform(\"t\"+e+\",0...\")),(null==g||g>=c.x+c.width||null!=f&&f>=c.x)&&c.x>=0&&c.x+c.width<this.el.width()?(0!==this.options.xLabelAngle&&(d=1.25*this.options.gridTextSize/Math.sin(this.options.xLabelAngle*Math.PI/180),f=c.x-d),m.push(g=c.x-this.options.xLabelMargin)):m.push(b.remove());return m},d.prototype.drawSeries=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;return c=this.width/this.options.data.length,h=this.options.stacked?1:this.options.ykeys.length,a=(c*this.options.barSizeRatio-this.options.barGap*(h-1))/h,this.options.barSize&&(a=Math.min(a,this.options.barSize)),l=c-a*h-this.options.barGap*(h-1),g=l/2,o=this.ymin<=0&&this.ymax>=0?this.transY(0):null,this.bars=function(){var h,l,p,q;for(p=this.data,q=[],d=h=0,l=p.length;l>h;d=++h)i=p[d],e=0,q.push(function(){var h,l,p,q;for(p=i._y,q=[],j=h=0,l=p.length;l>h;j=++h)n=p[j],null!==n?(o?(m=Math.min(n,o),b=Math.max(n,o)):(m=n,b=this.bottom),f=this.left+d*c+g,this.options.stacked||(f+=j*(a+this.options.barGap)),k=b-m,this.options.verticalGridCondition&&this.options.verticalGridCondition(i.x)&&this.drawBar(this.left+d*c,this.top,c,Math.abs(this.top-this.bottom),this.options.verticalGridColor,this.options.verticalGridOpacity,this.options.barRadius),this.options.stacked&&(m-=e),this.drawBar(f,m,a,k,this.colorFor(i,j,\"bar\"),this.options.barOpacity,this.options.barRadius),q.push(e+=k)):q.push(null);return q}.call(this));return q}.call(this)},d.prototype.colorFor=function(a,b,c){var d,e;return\"function\"==typeof this.options.barColors?(d={x:a.x,y:a.y[b],label:a.label},e={index:b,key:this.options.ykeys[b],label:this.options.labels[b]},this.options.barColors.call(this,d,e,c)):this.options.barColors[b%this.options.barColors.length]},d.prototype.hitTest=function(a){return 0===this.data.length?null:(a=Math.max(Math.min(a,this.right),this.left),Math.min(this.data.length-1,Math.floor((a-this.left)/(this.width/this.data.length))))},d.prototype.onGridClick=function(a,b){var c;return c=this.hitTest(a),this.fire(\"click\",c,this.data[c].src,a,b)},d.prototype.onHoverMove=function(a){var b,c;return b=this.hitTest(a),(c=this.hover).update.apply(c,this.hoverContentForRow(b))},d.prototype.onHoverOut=function(){return this.options.hideHover!==!1?this.hover.hide():void 0},d.prototype.hoverContentForRow=function(a){var b,c,d,e,f,g,h,i;for(d=this.data[a],b=\"<div class='morris-hover-row-label'>\"+d.label+\"</div>\",i=d.y,c=g=0,h=i.length;h>g;c=++g)f=i[c],b+=\"<div class='morris-hover-point' style='color: \"+this.colorFor(d,c,\"label\")+\"'>\\n \"+this.options.labels[c]+\":\\n \"+this.yLabelFormat(f)+\"\\n</div>\";return\"function\"==typeof this.options.hoverCallback&&(b=this.options.hoverCallback(a,this.options,b,d.src)),e=this.left+(a+.5)*this.width/this.data.length,[b,e]},d.prototype.drawXAxisLabel=function(a,b,c){var d;return d=this.raphael.text(a,b,c).attr(\"font-size\",this.options.gridTextSize).attr(\"font-family\",this.options.gridTextFamily).attr(\"font-weight\",this.options.gridTextWeight).attr(\"fill\",this.options.gridTextColor)},d.prototype.drawBar=function(a,b,c,d,e,f,g){var h,i;return h=Math.max.apply(Math,g),i=0===h||h>d?this.raphael.rect(a,b,c,d):this.raphael.path(this.roundedRect(a,b,c,d,g)),i.attr(\"fill\",e).attr(\"fill-opacity\",f).attr(\"stroke\",\"none\")},d.prototype.roundedRect=function(a,b,c,d,e){return null==e&&(e=[0,0,0,0]),[\"M\",a,e[0]+b,\"Q\",a,b,a+e[0],b,\"L\",a+c-e[1],b,\"Q\",a+c,b,a+c,b+e[1],\"L\",a+c,b+d-e[2],\"Q\",a+c,b+d,a+c-e[2],b+d,\"L\",a+e[3],b+d,\"Q\",a,b+d,a,b+d-e[3],\"Z\"]},d}(b.Grid),b.Donut=function(c){function d(c){this.resizeHandler=f(this.resizeHandler,this),this.select=f(this.select,this),this.click=f(this.click,this);var d=this;if(!(this instanceof b.Donut))return new b.Donut(c);if(this.options=a.extend({},this.defaults,c),this.el=\"string\"==typeof c.element?a(document.getElementById(c.element)):a(c.element),null===this.el||0===this.el.length)throw new Error(\"Graph placeholder not found.\");void 0!==c.data&&0!==c.data.length&&(this.raphael=new Raphael(this.el[0]),this.options.resize&&a(window).bind(\"resize\",function(){return null!=d.timeoutId&&window.clearTimeout(d.timeoutId),d.timeoutId=window.setTimeout(d.resizeHandler,100)}),this.setData(c.data))}return h(d,c),d.prototype.defaults={colors:[\"#0B62A4\",\"#3980B5\",\"#679DC6\",\"#95BBD7\",\"#B0CCE1\",\"#095791\",\"#095085\",\"#083E67\",\"#052C48\",\"#042135\"],backgroundColor:\"#FFFFFF\",labelColor:\"#000000\",formatter:b.commas,resize:!1},d.prototype.redraw=function(){var a,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;for(this.raphael.clear(),c=this.el.width()/2,d=this.el.height()/2,n=(Math.min(c,d)-10)/3,l=0,u=this.values,o=0,r=u.length;r>o;o++)m=u[o],l+=m;for(i=5/(2*n),a=1.9999*Math.PI-i*this.data.length,g=0,f=0,this.segments=[],v=this.values,e=p=0,s=v.length;s>p;e=++p)m=v[e],j=g+i+a*(m/l),k=new b.DonutSegment(c,d,2*n,n,g,j,this.data[e].color||this.options.colors[f%this.options.colors.length],this.options.backgroundColor,f,this.raphael),k.render(),this.segments.push(k),k.on(\"hover\",this.select),k.on(\"click\",this.click),g=j,f+=1;for(this.text1=this.drawEmptyDonutLabel(c,d-10,this.options.labelColor,15,800),this.text2=this.drawEmptyDonutLabel(c,d+10,this.options.labelColor,14),h=Math.max.apply(Math,this.values),f=0,w=this.values,x=[],q=0,t=w.length;t>q;q++){if(m=w[q],m===h){this.select(f);\nbreak}x.push(f+=1)}return x},d.prototype.setData=function(a){var b;return this.data=a,this.values=function(){var a,c,d,e;for(d=this.data,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(parseFloat(b.value));return e}.call(this),this.redraw()},d.prototype.click=function(a){return this.fire(\"click\",a,this.data[a])},d.prototype.select=function(a){var b,c,d,e,f,g;for(g=this.segments,e=0,f=g.length;f>e;e++)c=g[e],c.deselect();return d=this.segments[a],d.select(),b=this.data[a],this.setLabels(b.label,this.options.formatter(b.value,b))},d.prototype.setLabels=function(a,b){var c,d,e,f,g,h,i,j;return c=2*(Math.min(this.el.width()/2,this.el.height()/2)-10)/3,f=1.8*c,e=c/2,d=c/3,this.text1.attr({text:a,transform:\"\"}),g=this.text1.getBBox(),h=Math.min(f/g.width,e/g.height),this.text1.attr({transform:\"S\"+h+\",\"+h+\",\"+(g.x+g.width/2)+\",\"+(g.y+g.height)}),this.text2.attr({text:b,transform:\"\"}),i=this.text2.getBBox(),j=Math.min(f/i.width,d/i.height),this.text2.attr({transform:\"S\"+j+\",\"+j+\",\"+(i.x+i.width/2)+\",\"+i.y})},d.prototype.drawEmptyDonutLabel=function(a,b,c,d,e){var f;return f=this.raphael.text(a,b,\"\").attr(\"font-size\",d).attr(\"fill\",c),null!=e&&f.attr(\"font-weight\",e),f},d.prototype.resizeHandler=function(){return this.timeoutId=null,this.raphael.setSize(this.el.width(),this.el.height()),this.redraw()},d}(b.EventEmitter),b.DonutSegment=function(a){function b(a,b,c,d,e,g,h,i,j,k){this.cx=a,this.cy=b,this.inner=c,this.outer=d,this.color=h,this.backgroundColor=i,this.index=j,this.raphael=k,this.deselect=f(this.deselect,this),this.select=f(this.select,this),this.sin_p0=Math.sin(e),this.cos_p0=Math.cos(e),this.sin_p1=Math.sin(g),this.cos_p1=Math.cos(g),this.is_long=g-e>Math.PI?1:0,this.path=this.calcSegment(this.inner+3,this.inner+this.outer-5),this.selectedPath=this.calcSegment(this.inner+3,this.inner+this.outer),this.hilight=this.calcArc(this.inner)}return h(b,a),b.prototype.calcArcPoints=function(a){return[this.cx+a*this.sin_p0,this.cy+a*this.cos_p0,this.cx+a*this.sin_p1,this.cy+a*this.cos_p1]},b.prototype.calcSegment=function(a,b){var c,d,e,f,g,h,i,j,k,l;return k=this.calcArcPoints(a),c=k[0],e=k[1],d=k[2],f=k[3],l=this.calcArcPoints(b),g=l[0],i=l[1],h=l[2],j=l[3],\"M\"+c+\",\"+e+(\"A\"+a+\",\"+a+\",0,\"+this.is_long+\",0,\"+d+\",\"+f)+(\"L\"+h+\",\"+j)+(\"A\"+b+\",\"+b+\",0,\"+this.is_long+\",1,\"+g+\",\"+i)+\"Z\"},b.prototype.calcArc=function(a){var b,c,d,e,f;return f=this.calcArcPoints(a),b=f[0],d=f[1],c=f[2],e=f[3],\"M\"+b+\",\"+d+(\"A\"+a+\",\"+a+\",0,\"+this.is_long+\",0,\"+c+\",\"+e)},b.prototype.render=function(){var a=this;return this.arc=this.drawDonutArc(this.hilight,this.color),this.seg=this.drawDonutSegment(this.path,this.color,this.backgroundColor,function(){return a.fire(\"hover\",a.index)},function(){return a.fire(\"click\",a.index)})},b.prototype.drawDonutArc=function(a,b){return this.raphael.path(a).attr({stroke:b,\"stroke-width\":2,opacity:0})},b.prototype.drawDonutSegment=function(a,b,c,d,e){return this.raphael.path(a).attr({fill:b,stroke:c,\"stroke-width\":3}).hover(d).click(e)},b.prototype.select=function(){return this.selected?void 0:(this.seg.animate({path:this.selectedPath},150,\"<>\"),this.arc.animate({opacity:1},150,\"<>\"),this.selected=!0)},b.prototype.deselect=function(){return this.selected?(this.seg.animate({path:this.path},150,\"<>\"),this.arc.animate({opacity:0},150,\"<>\"),this.selected=!1):void 0},b}(b.EventEmitter)}).call(this);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL21vcnJpcy5qcy9tb3JyaXMubWluLmpzPzUxMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUNBQXVDLGtCQUFrQiw2QkFBNkIsS0FBSyxnQ0FBZ0MsYUFBYSxtQkFBbUIsd0NBQXdDLDJFQUEyRSwyQkFBMkIsMEJBQTBCLElBQUksdUNBQXVDLFVBQVUsa0JBQWtCLG9DQUFvQyxjQUFjLG9DQUFvQyw2Q0FBNkMsOEVBQThFLDZCQUE2QixrQkFBa0IsNEdBQTRHLDJDQUEyQyxJQUFJLG1DQUFtQyxVQUFVLEdBQUcsd0JBQXdCLFlBQVksNkZBQTZGLEVBQUUsaUZBQWlGLG9CQUFvQixzQkFBc0Isb0JBQW9CLGNBQWMsOENBQThDLFdBQVcsZ0xBQWdMLCtGQUErRixvQ0FBb0MsNlJBQTZSLGNBQWMsb0xBQW9MLFlBQVksdUNBQXVDLHVDQUF1QyxtRkFBbUYsMkRBQTJELFFBQVEsd0lBQXdJLG1DQUFtQyxNQUFNLHdFQUF3RSxxR0FBcUcsNkNBQTZDLHVEQUF1RCxNQUFNLG9EQUFvRCxxQ0FBcUMsTUFBTSxtR0FBbUcsMkRBQTJELDhHQUE4Ryw0RkFBNEYsd0NBQXdDLGtnQkFBa2dCLG1DQUFtQyxrQ0FBa0MsK1hBQStYLFVBQVUsMEJBQTBCLElBQUksZ0JBQWdCLE1BQU0sMlNBQTJTLFlBQVksK0NBQStDLElBQUksc1BBQXNQLFNBQVMsc0JBQXNCLFNBQVMsNEVBQTRFLDBCQUEwQixrS0FBa0ssWUFBWSw4Q0FBOEMsSUFBSSxrQ0FBa0MsU0FBUywwdUJBQTB1QixZQUFZLHFDQUFxQyxjQUFjLGlCQUFpQixTQUFTLG9EQUFvRCxxQ0FBcUMsUUFBUSxpS0FBaUssMkNBQTJDLHNCQUFzQixpU0FBaVMsUUFBUSxlQUFlLGNBQWMsMENBQTBDLFNBQVMsaUJBQWlCLFFBQVEsZUFBZSxjQUFjLGlC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djAuNS4wXG5Db3B5cmlnaHQgMjAxNCBPbGx5IFNtaXRoIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQlNELTItQ2xhdXNlIExpY2Vuc2UuXG4qL1xuKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZT1bXS5zbGljZSxmPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX0sZz17fS5oYXNPd25Qcm9wZXJ0eSxoPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe3RoaXMuY29uc3RydWN0b3I9YX1mb3IodmFyIGQgaW4gYilnLmNhbGwoYixkKSYmKGFbZF09YltkXSk7cmV0dXJuIGMucHJvdG90eXBlPWIucHJvdG90eXBlLGEucHJvdG90eXBlPW5ldyBjLGEuX19zdXBlcl9fPWIucHJvdG90eXBlLGF9LGk9W10uaW5kZXhPZnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz10aGlzLmxlbmd0aDtjPmI7YisrKWlmKGIgaW4gdGhpcyYmdGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9O2I9d2luZG93Lk1vcnJpcz17fSxhPWpRdWVyeSxiLkV2ZW50RW1pdHRlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9cmV0dXJuIGEucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PXRoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPXt9KSxudWxsPT10aGlzLmhhbmRsZXJzW2FdJiYodGhpcy5oYW5kbGVyc1thXT1bXSksdGhpcy5oYW5kbGVyc1thXS5wdXNoKGIpLHRoaXN9LGEucHJvdG90eXBlLmZpcmU9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxmLGcsaDtpZihjPWFyZ3VtZW50c1swXSxhPTI8PWFyZ3VtZW50cy5sZW5ndGg/ZS5jYWxsKGFyZ3VtZW50cywxKTpbXSxudWxsIT10aGlzLmhhbmRsZXJzJiZudWxsIT10aGlzLmhhbmRsZXJzW2NdKXtmb3IoZz10aGlzLmhhbmRsZXJzW2NdLGg9W10sZD0wLGY9Zy5sZW5ndGg7Zj5kO2QrKyliPWdbZF0saC5wdXNoKGIuYXBwbHkobnVsbCxhKSk7cmV0dXJuIGh9fSxhfSgpLGIuY29tbWFzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlO3JldHVybiBudWxsIT1hPyhkPTA+YT9cIi1cIjpcIlwiLGI9TWF0aC5hYnMoYSksYz1NYXRoLmZsb29yKGIpLnRvRml4ZWQoMCksZCs9Yy5yZXBsYWNlKC8oPz0oPzpcXGR7M30pKyQpKD8hXikvZyxcIixcIiksZT1iLnRvU3RyaW5nKCksZS5sZW5ndGg+Yy5sZW5ndGgmJihkKz1lLnNsaWNlKGMubGVuZ3RoKSksZCk6XCItXCJ9LGIucGFkMj1mdW5jdGlvbihhKXtyZXR1cm4oMTA+YT9cIjBcIjpcIlwiKSthfSxiLkdyaWQ9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZChiKXt0aGlzLnJlc2l6ZUhhbmRsZXI9Zih0aGlzLnJlc2l6ZUhhbmRsZXIsdGhpcyk7dmFyIGM9dGhpcztpZih0aGlzLmVsPVwic3RyaW5nXCI9PXR5cGVvZiBiLmVsZW1lbnQ/YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmVsZW1lbnQpKTphKGIuZWxlbWVudCksbnVsbD09dGhpcy5lbHx8MD09PXRoaXMuZWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkdyYXBoIGNvbnRhaW5lciBlbGVtZW50IG5vdCBmb3VuZFwiKTtcInN0YXRpY1wiPT09dGhpcy5lbC5jc3MoXCJwb3NpdGlvblwiKSYmdGhpcy5lbC5jc3MoXCJwb3NpdGlvblwiLFwicmVsYXRpdmVcIiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LHRoaXMuZ3JpZERlZmF1bHRzLHRoaXMuZGVmYXVsdHN8fHt9LGIpLFwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudW5pdHMmJih0aGlzLm9wdGlvbnMucG9zdFVuaXRzPWIudW5pdHMpLHRoaXMucmFwaGFlbD1uZXcgUmFwaGFlbCh0aGlzLmVsWzBdKSx0aGlzLmVsZW1lbnRXaWR0aD1udWxsLHRoaXMuZWxlbWVudEhlaWdodD1udWxsLHRoaXMuZGlydHk9ITEsdGhpcy5zZWxlY3RGcm9tPW51bGwsdGhpcy5pbml0JiZ0aGlzLmluaXQoKSx0aGlzLnNldERhdGEodGhpcy5vcHRpb25zLmRhdGEpLHRoaXMuZWwuYmluZChcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGEpe3ZhciBiLGQsZSxmLGc7cmV0dXJuIGQ9Yy5lbC5vZmZzZXQoKSxnPWEucGFnZVgtZC5sZWZ0LGMuc2VsZWN0RnJvbT8oYj1jLmRhdGFbYy5oaXRUZXN0KE1hdGgubWluKGcsYy5zZWxlY3RGcm9tKSldLl94LGU9Yy5kYXRhW2MuaGl0VGVzdChNYXRoLm1heChnLGMuc2VsZWN0RnJvbSkpXS5feCxmPWUtYixjLnNlbGVjdGlvblJlY3QuYXR0cih7eDpiLHdpZHRoOmZ9KSk6Yy5maXJlKFwiaG92ZXJtb3ZlXCIsZyxhLnBhZ2VZLWQudG9wKX0pLHRoaXMuZWwuYmluZChcIm1vdXNlbGVhdmVcIixmdW5jdGlvbigpe3JldHVybiBjLnNlbGVjdEZyb20mJihjLnNlbGVjdGlvblJlY3QuaGlkZSgpLGMuc2VsZWN0RnJvbT1udWxsKSxjLmZpcmUoXCJob3Zlcm91dFwiKX0pLHRoaXMuZWwuYmluZChcInRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kXCIsZnVuY3Rpb24oYSl7dmFyIGIsZDtyZXR1cm4gZD1hLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXXx8YS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLGI9Yy5lbC5vZmZzZXQoKSxjLmZpcmUoXCJob3Zlcm1vdmVcIixkLnBhZ2VYLWIubGVmdCxkLnBhZ2VZLWIudG9wKX0pLHRoaXMuZWwuYmluZChcImNsaWNrXCIsZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGI9Yy5lbC5vZmZzZXQoKSxjLmZpcmUoXCJncmlkY2xpY2tcIixhLnBhZ2VYLWIubGVmdCxhLnBhZ2VZLWIudG9wKX0pLHRoaXMub3B0aW9ucy5yYW5nZVNlbGVjdCYmKHRoaXMuc2VsZWN0aW9uUmVjdD10aGlzLnJhcGhhZWwucmVjdCgwLDAsMCx0aGlzLmVsLmlubmVySGVpZ2h0KCkpLmF0dHIoe2ZpbGw6dGhpcy5vcHRpb25zLnJhbmdlU2VsZWN0Q29sb3Isc3Ryb2tlOiExfSkudG9CYWNrKCkuaGlkZSgpLHRoaXMuZWwuYmluZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPWMuZWwub2Zmc2V0KCksYy5zdGFydFJhbmdlKGEucGFnZVgtYi5sZWZ0KX0pLHRoaXMuZWwuYmluZChcIm1vdXNldXBcIixmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gYj1jLmVsLm9mZnNldCgpLGMuZW5kUmFuZ2UoYS5wYWdlWC1iLmxlZnQpLGMuZmlyZShcImhvdmVybW92ZVwiLGEucGFnZVgtYi5sZWZ0LGEucGFnZVktYi50b3ApfSkpLHRoaXMub3B0aW9ucy5yZXNpemUmJmEod2luZG93KS5iaW5kKFwicmVzaXplXCIsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9Yy50aW1lb3V0SWQmJndpbmRvdy5jbGVhclRpbWVvdXQoYy50aW1lb3V0SWQpLGMudGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KGMucmVzaXplSGFuZGxlciwxMDApfSksdGhpcy5lbC5jc3MoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIixcInJnYmEoMCwwLDAsMClcIiksdGhpcy5wb3N0SW5pdCYmdGhpcy5wb3N0SW5pdCgpfXJldHVybiBoKGQsYyksZC5wcm90b3R5cGUuZ3JpZERlZmF1bHRzPXtkYXRlRm9ybWF0Om51bGwsYXhlczohMCxncmlkOiEwLGdyaWRMaW5lQ29sb3I6XCIjYWFhXCIsZ3JpZFN0cm9rZVdpZHRoOi41LGdyaWRUZXh0Q29sb3I6XCIjODg4XCIsZ3JpZFRleHRTaXplOjEyLGdyaWRUZXh0RmFtaWx5Olwic2Fucy1zZXJpZlwiLGdyaWRUZXh0V2VpZ2h0Olwibm9ybWFsXCIsaGlkZUhvdmVyOiExLHlMYWJlbEZvcm1hdDpudWxsLHhMYWJlbEFuZ2xlOjAsbnVtTGluZXM6NSxwYWRkaW5nOjI1LHBhcnNlVGltZTohMCxwb3N0VW5pdHM6XCJcIixwcmVVbml0czpcIlwiLHltYXg6XCJhdXRvXCIseW1pbjpcImF1dG8gMFwiLGdvYWxzOltdLGdvYWxTdHJva2VXaWR0aDoxLGdvYWxMaW5lQ29sb3JzOltcIiM2NjY2MzNcIixcIiM5OTk5NjZcIixcIiNjYzY2NjZcIixcIiM2NjMzMzNcIl0sZXZlbnRzOltdLGV2ZW50U3Ryb2tlV2lkdGg6MSxldmVudExpbmVDb2xvcnM6W1wiIzAwNWEwNFwiLFwiI2NjZmZiYlwiLFwiIzNhNWYwYlwiLFwiIzAwNTUwMlwiXSxyYW5nZVNlbGVjdDpudWxsLHJhbmdlU2VsZWN0Q29sb3I6XCIjZWVmXCIscmVzaXplOiExfSxkLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO3JldHVybiBudWxsPT1jJiYoYz0hMCksdGhpcy5vcHRpb25zLmRhdGE9YSxudWxsPT1hfHwwPT09YS5sZW5ndGg/KHRoaXMuZGF0YT1bXSx0aGlzLnJhcGhhZWwuY2xlYXIoKSxudWxsIT10aGlzLmhvdmVyJiZ0aGlzLmhvdmVyLmhpZGUoKSx2b2lkIDApOihvPXRoaXMuY3VtdWxhdGl2ZT8wOm51bGwscD10aGlzLmN1bXVsYXRpdmU/MDpudWxsLHRoaXMub3B0aW9ucy5nb2Fscy5sZW5ndGg+MCYmKGg9TWF0aC5taW4uYXBwbHkoTWF0aCx0aGlzLm9wdGlvbnMuZ29hbHMpLGc9TWF0aC5tYXguYXBwbHkoTWF0aCx0aGlzLm9wdGlvbnMuZ29hbHMpLHA9bnVsbCE9cD9NYXRoLm1pbihwLGgpOmgsbz1udWxsIT1vP01hdGgubWF4KG8sZyk6ZyksdGhpcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIGMsZCxnO2ZvcihnPVtdLGY9Yz0wLGQ9YS5sZW5ndGg7ZD5jO2Y9KytjKWo9YVtmXSxpPXtzcmM6an0saS5sYWJlbD1qW3RoaXMub3B0aW9ucy54a2V5XSx0aGlzLm9wdGlvbnMucGFyc2VUaW1lPyhpLng9Yi5wYXJzZURhdGUoaS5sYWJlbCksdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQ/aS5sYWJlbD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdChpLngpOlwibnVtYmVyXCI9PXR5cGVvZiBpLmxhYmVsJiYoaS5sYWJlbD1uZXcgRGF0ZShpLmxhYmVsKS50b1N0cmluZygpKSk6KGkueD1mLHRoaXMub3B0aW9ucy54TGFiZWxGb3JtYXQmJihpLmxhYmVsPXRoaXMub3B0aW9ucy54TGFiZWxGb3JtYXQoaSkpKSxsPTAsaS55PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Zm9yKGM9dGhpcy5vcHRpb25zLnlrZXlzLGQ9W10sZT1hPTAsYj1jLmxlbmd0aDtiPmE7ZT0rK2Epbj1jW2VdLHE9altuXSxcInN0cmluZ1wiPT10eXBlb2YgcSYmKHE9cGFyc2VGbG9hdChxKSksbnVsbCE9cSYmXCJudW1iZXJcIiE9dHlwZW9mIHEmJihxPW51bGwpLG51bGwhPXEmJih0aGlzLmN1bXVsYXRpdmU/bCs9cTpudWxsIT1vPyhvPU1hdGgubWF4KHEsbykscD1NYXRoLm1pbihxLHApKTpvPXA9cSksdGhpcy5jdW11bGF0aXZlJiZudWxsIT1sJiYobz1NYXRoLm1heChsLG8pLHA9TWF0aC5taW4obCxwKSksZC5wdXNoKHEpO3JldHVybiBkfS5jYWxsKHRoaXMpLGcucHVzaChpKTtyZXR1cm4gZ30uY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnMucGFyc2VUaW1lJiYodGhpcy5kYXRhPXRoaXMuZGF0YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuKGEueD5iLngpLShiLng+YS54KX0pKSx0aGlzLnhtaW49dGhpcy5kYXRhWzBdLngsdGhpcy54bWF4PXRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoLTFdLngsdGhpcy5ldmVudHM9W10sdGhpcy5vcHRpb25zLmV2ZW50cy5sZW5ndGg+MCYmKHRoaXMuZXZlbnRzPXRoaXMub3B0aW9ucy5wYXJzZVRpbWU/ZnVuY3Rpb24oKXt2YXIgYSxjLGUsZjtmb3IoZT10aGlzLm9wdGlvbnMuZXZlbnRzLGY9W10sYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKylkPWVbYV0sZi5wdXNoKGIucGFyc2VEYXRlKGQpKTtyZXR1cm4gZn0uY2FsbCh0aGlzKTp0aGlzLm9wdGlvbnMuZXZlbnRzLHRoaXMueG1heD1NYXRoLm1heCh0aGlzLnhtYXgsTWF0aC5tYXguYXBwbHkoTWF0aCx0aGlzLmV2ZW50cykpLHRoaXMueG1pbj1NYXRoLm1pbih0aGlzLnhtaW4sTWF0aC5taW4uYXBwbHkoTWF0aCx0aGlzLmV2ZW50cykpKSx0aGlzLnhtaW49PT10aGlzLnhtYXgmJih0aGlzLnhtaW4tPTEsdGhpcy54bWF4Kz0xKSx0aGlzLnltaW49dGhpcy55Ym91bmRhcnkoXCJtaW5cIixwKSx0aGlzLnltYXg9dGhpcy55Ym91bmRhcnkoXCJtYXhcIixvKSx0aGlzLnltaW49PT10aGlzLnltYXgmJihwJiYodGhpcy55bWluLT0xKSx0aGlzLnltYXgrPTEpLCgocj10aGlzLm9wdGlvbnMuYXhlcyk9PT0hMHx8XCJib3RoXCI9PT1yfHxcInlcIj09PXJ8fHRoaXMub3B0aW9ucy5ncmlkPT09ITApJiYodGhpcy5vcHRpb25zLnltYXg9PT10aGlzLmdyaWREZWZhdWx0cy55bWF4JiZ0aGlzLm9wdGlvbnMueW1pbj09PXRoaXMuZ3JpZERlZmF1bHRzLnltaW4/KHRoaXMuZ3JpZD10aGlzLmF1dG9HcmlkTGluZXModGhpcy55bWluLHRoaXMueW1heCx0aGlzLm9wdGlvbnMubnVtTGluZXMpLHRoaXMueW1pbj1NYXRoLm1pbih0aGlzLnltaW4sdGhpcy5ncmlkWzBdKSx0aGlzLnltYXg9TWF0aC5tYXgodGhpcy55bWF4LHRoaXMuZ3JpZFt0aGlzLmdyaWQubGVuZ3RoLTFdKSk6KGs9KHRoaXMueW1heC10aGlzLnltaW4pLyh0aGlzLm9wdGlvbnMubnVtTGluZXMtMSksdGhpcy5ncmlkPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Zm9yKGQ9W10sbT1hPWI9dGhpcy55bWluLGM9dGhpcy55bWF4O2s+MD9jPj1hOmE+PWM7bT1hKz1rKWQucHVzaChtKTtyZXR1cm4gZH0uY2FsbCh0aGlzKSkpLHRoaXMuZGlydHk9ITAsYz90aGlzLnJlZHJhdygpOnZvaWQgMCl9LGQucHJvdG90eXBlLnlib3VuZGFyeT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7cmV0dXJuIGM9dGhpcy5vcHRpb25zW1wieVwiK2FdLFwic3RyaW5nXCI9PXR5cGVvZiBjP1wiYXV0b1wiPT09Yy5zbGljZSgwLDQpP2MubGVuZ3RoPjU/KGQ9cGFyc2VJbnQoYy5zbGljZSg1KSwxMCksbnVsbD09Yj9kOk1hdGhbYV0oYixkKSk6bnVsbCE9Yj9iOjA6cGFyc2VJbnQoYywxMCk6Y30sZC5wcm90b3R5cGUuYXV0b0dyaWRMaW5lcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO3JldHVybiBoPWItYSxsPU1hdGguZmxvb3IoTWF0aC5sb2coaCkvTWF0aC5sb2coMTApKSxqPU1hdGgucG93KDEwLGwpLGU9TWF0aC5mbG9vcihhL2opKmosZD1NYXRoLmNlaWwoYi9qKSpqLGk9KGQtZSkvKGMtMSksMT09PWomJmk+MSYmTWF0aC5jZWlsKGkpIT09aSYmKGk9TWF0aC5jZWlsKGkpLGQ9ZStpKihjLTEpKSwwPmUmJmQ+MCYmKGU9TWF0aC5mbG9vcihhL2kpKmksZD1NYXRoLmNlaWwoYi9pKSppKSwxPmk/KGc9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLmxvZygxMCkpLGY9ZnVuY3Rpb24oKXt2YXIgYSxiO2ZvcihiPVtdLGs9YT1lO2k+MD9kPj1hOmE+PWQ7az1hKz1pKWIucHVzaChwYXJzZUZsb2F0KGsudG9GaXhlZCgxLWcpKSk7cmV0dXJuIGJ9KCkpOmY9ZnVuY3Rpb24oKXt2YXIgYSxiO2ZvcihiPVtdLGs9YT1lO2k+MD9kPj1hOmE+PWQ7az1hKz1pKWIucHVzaChrKTtyZXR1cm4gYn0oKSxmfSxkLnByb3RvdHlwZS5fY2FsYz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnLGg7cmV0dXJuIGU9dGhpcy5lbC53aWR0aCgpLGM9dGhpcy5lbC5oZWlnaHQoKSwodGhpcy5lbGVtZW50V2lkdGghPT1lfHx0aGlzLmVsZW1lbnRIZWlnaHQhPT1jfHx0aGlzLmRpcnR5KSYmKHRoaXMuZWxlbWVudFdpZHRoPWUsdGhpcy5lbGVtZW50SGVpZ2h0PWMsdGhpcy5kaXJ0eT0hMSx0aGlzLmxlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsdGhpcy5yaWdodD10aGlzLmVsZW1lbnRXaWR0aC10aGlzLm9wdGlvbnMucGFkZGluZyx0aGlzLnRvcD10aGlzLm9wdGlvbnMucGFkZGluZyx0aGlzLmJvdHRvbT10aGlzLmVsZW1lbnRIZWlnaHQtdGhpcy5vcHRpb25zLnBhZGRpbmcsKChnPXRoaXMub3B0aW9ucy5heGVzKT09PSEwfHxcImJvdGhcIj09PWd8fFwieVwiPT09ZykmJihmPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGU7Zm9yKGQ9dGhpcy5ncmlkLGU9W10sYT0wLGM9ZC5sZW5ndGg7Yz5hO2ErKyliPWRbYV0sZS5wdXNoKHRoaXMubWVhc3VyZVRleHQodGhpcy55QXhpc0Zvcm1hdChiKSkud2lkdGgpO3JldHVybiBlfS5jYWxsKHRoaXMpLHRoaXMubGVmdCs9TWF0aC5tYXguYXBwbHkoTWF0aCxmKSksKChoPXRoaXMub3B0aW9ucy5heGVzKT09PSEwfHxcImJvdGhcIj09PWh8fFwieFwiPT09aCkmJihhPWZ1bmN0aW9uKCl7dmFyIGEsYixjO2ZvcihjPVtdLGQ9YT0wLGI9dGhpcy5kYXRhLmxlbmd0aDtiPj0wP2I+YTphPmI7ZD1iPj0wPysrYTotLWEpYy5wdXNoKHRoaXMubWVhc3VyZVRleHQodGhpcy5kYXRhW2RdLnRleHQsLXRoaXMub3B0aW9ucy54TGFiZWxBbmdsZSkuaGVpZ2h0KTtyZXR1cm4gY30uY2FsbCh0aGlzKSx0aGlzLmJvdHRvbS09TWF0aC5tYXguYXBwbHkoTWF0aCxhKSksdGhpcy53aWR0aD1NYXRoLm1heCgxLHRoaXMucmlnaHQtdGhpcy5sZWZ0KSx0aGlzLmhlaWdodD1NYXRoLm1heCgxLHRoaXMuYm90dG9tLXRoaXMudG9wKSx0aGlzLmR4PXRoaXMud2lkdGgvKHRoaXMueG1heC10aGlzLnhtaW4pLHRoaXMuZHk9dGhpcy5oZWlnaHQvKHRoaXMueW1heC10aGlzLnltaW4pLHRoaXMuY2FsYyk/dGhpcy5jYWxjKCk6dm9pZCAwfSxkLnByb3RvdHlwZS50cmFuc1k9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYm90dG9tLShhLXRoaXMueW1pbikqdGhpcy5keX0sZC5wcm90b3R5cGUudHJhbnNYPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09dGhpcy5kYXRhLmxlbmd0aD8odGhpcy5sZWZ0K3RoaXMucmlnaHQpLzI6dGhpcy5sZWZ0KyhhLXRoaXMueG1pbikqdGhpcy5keH0sZC5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFwaGFlbC5jbGVhcigpLHRoaXMuX2NhbGMoKSx0aGlzLmRyYXdHcmlkKCksdGhpcy5kcmF3R29hbHMoKSx0aGlzLmRyYXdFdmVudHMoKSx0aGlzLmRyYXc/dGhpcy5kcmF3KCk6dm9pZCAwfSxkLnByb3RvdHlwZS5tZWFzdXJlVGV4dD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7cmV0dXJuIG51bGw9PWImJihiPTApLGQ9dGhpcy5yYXBoYWVsLnRleHQoMTAwLDEwMCxhKS5hdHRyKFwiZm9udC1zaXplXCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0U2l6ZSkuYXR0cihcImZvbnQtZmFtaWx5XCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0RmFtaWx5KS5hdHRyKFwiZm9udC13ZWlnaHRcIix0aGlzLm9wdGlvbnMuZ3JpZFRleHRXZWlnaHQpLnJvdGF0ZShiKSxjPWQuZ2V0QkJveCgpLGQucmVtb3ZlKCksY30sZC5wcm90b3R5cGUueUF4aXNGb3JtYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueUxhYmVsRm9ybWF0KGEpfSxkLnByb3RvdHlwZS55TGFiZWxGb3JtYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLnlMYWJlbEZvcm1hdD90aGlzLm9wdGlvbnMueUxhYmVsRm9ybWF0KGEpOlwiXCIrdGhpcy5vcHRpb25zLnByZVVuaXRzK2IuY29tbWFzKGEpK3RoaXMub3B0aW9ucy5wb3N0VW5pdHN9LGQucHJvdG90eXBlLmRyYXdHcmlkPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGcsaDtpZih0aGlzLm9wdGlvbnMuZ3JpZCE9PSExfHwoZT10aGlzLm9wdGlvbnMuYXhlcyk9PT0hMHx8XCJib3RoXCI9PT1lfHxcInlcIj09PWUpe2ZvcihmPXRoaXMuZ3JpZCxoPVtdLGM9MCxkPWYubGVuZ3RoO2Q+YztjKyspYT1mW2NdLGI9dGhpcy50cmFuc1koYSksKChnPXRoaXMub3B0aW9ucy5heGVzKT09PSEwfHxcImJvdGhcIj09PWd8fFwieVwiPT09ZykmJnRoaXMuZHJhd1lBeGlzTGFiZWwodGhpcy5sZWZ0LXRoaXMub3B0aW9ucy5wYWRkaW5nLzIsYix0aGlzLnlBeGlzRm9ybWF0KGEpKSx0aGlzLm9wdGlvbnMuZ3JpZD9oLnB1c2godGhpcy5kcmF3R3JpZExpbmUoXCJNXCIrdGhpcy5sZWZ0K1wiLFwiK2IrXCJIXCIrKHRoaXMubGVmdCt0aGlzLndpZHRoKSkpOmgucHVzaCh2b2lkIDApO3JldHVybiBofX0sZC5wcm90b3R5cGUuZHJhd0dvYWxzPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc7Zm9yKGY9dGhpcy5vcHRpb25zLmdvYWxzLGc9W10sYz1kPTAsZT1mLmxlbmd0aDtlPmQ7Yz0rK2QpYj1mW2NdLGE9dGhpcy5vcHRpb25zLmdvYWxMaW5lQ29sb3JzW2MldGhpcy5vcHRpb25zLmdvYWxMaW5lQ29sb3JzLmxlbmd0aF0sZy5wdXNoKHRoaXMuZHJhd0dvYWwoYixhKSk7cmV0dXJuIGd9LGQucHJvdG90eXBlLmRyYXdFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZztmb3IoZj10aGlzLmV2ZW50cyxnPVtdLGM9ZD0wLGU9Zi5sZW5ndGg7ZT5kO2M9KytkKWI9ZltjXSxhPXRoaXMub3B0aW9ucy5ldmVudExpbmVDb2xvcnNbYyV0aGlzLm9wdGlvbnMuZXZlbnRMaW5lQ29sb3JzLmxlbmd0aF0sZy5wdXNoKHRoaXMuZHJhd0V2ZW50KGIsYSkpO3JldHVybiBnfSxkLnByb3RvdHlwZS5kcmF3R29hbD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJhcGhhZWwucGF0aChcIk1cIit0aGlzLmxlZnQrXCIsXCIrdGhpcy50cmFuc1koYSkrXCJIXCIrdGhpcy5yaWdodCkuYXR0cihcInN0cm9rZVwiLGIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIix0aGlzLm9wdGlvbnMuZ29hbFN0cm9rZVdpZHRoKX0sZC5wcm90b3R5cGUuZHJhd0V2ZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucmFwaGFlbC5wYXRoKFwiTVwiK3RoaXMudHJhbnNYKGEpK1wiLFwiK3RoaXMuYm90dG9tK1wiVlwiK3RoaXMudG9wKS5hdHRyKFwic3Ryb2tlXCIsYikuYXR0cihcInN0cm9rZS13aWR0aFwiLHRoaXMub3B0aW9ucy5ldmVudFN0cm9rZVdpZHRoKX0sZC5wcm90b3R5cGUuZHJhd1lBeGlzTGFiZWw9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnJhcGhhZWwudGV4dChhLGIsYykuYXR0cihcImZvbnQtc2l6ZVwiLHRoaXMub3B0aW9ucy5ncmlkVGV4dFNpemUpLmF0dHIoXCJmb250LWZhbWlseVwiLHRoaXMub3B0aW9ucy5ncmlkVGV4dEZhbWlseSkuYXR0cihcImZvbnQtd2VpZ2h0XCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0V2VpZ2h0KS5hdHRyKFwiZmlsbFwiLHRoaXMub3B0aW9ucy5ncmlkVGV4dENvbG9yKS5hdHRyKFwidGV4dC1hbmNob3JcIixcImVuZFwiKX0sZC5wcm90b3R5cGUuZHJhd0dyaWRMaW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJhcGhhZWwucGF0aChhKS5hdHRyKFwic3Ryb2tlXCIsdGhpcy5vcHRpb25zLmdyaWRMaW5lQ29sb3IpLmF0dHIoXCJzdHJva2Utd2lkdGhcIix0aGlzLm9wdGlvbnMuZ3JpZFN0cm9rZVdpZHRoKX0sZC5wcm90b3R5cGUuc3RhcnRSYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ob3Zlci5oaWRlKCksdGhpcy5zZWxlY3RGcm9tPWEsdGhpcy5zZWxlY3Rpb25SZWN0LmF0dHIoe3g6YSx3aWR0aDowfSkuc2hvdygpfSxkLnByb3RvdHlwZS5lbmRSYW5nZT1mdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiB0aGlzLnNlbGVjdEZyb20/KGM9TWF0aC5taW4odGhpcy5zZWxlY3RGcm9tLGEpLGI9TWF0aC5tYXgodGhpcy5zZWxlY3RGcm9tLGEpLHRoaXMub3B0aW9ucy5yYW5nZVNlbGVjdC5jYWxsKHRoaXMuZWwse3N0YXJ0OnRoaXMuZGF0YVt0aGlzLmhpdFRlc3QoYyldLngsZW5kOnRoaXMuZGF0YVt0aGlzLmhpdFRlc3QoYildLnh9KSx0aGlzLnNlbGVjdEZyb209bnVsbCk6dm9pZCAwfSxkLnByb3RvdHlwZS5yZXNpemVIYW5kbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZW91dElkPW51bGwsdGhpcy5yYXBoYWVsLnNldFNpemUodGhpcy5lbC53aWR0aCgpLHRoaXMuZWwuaGVpZ2h0KCkpLHRoaXMucmVkcmF3KCl9LGR9KGIuRXZlbnRFbWl0dGVyKSxiLnBhcnNlRGF0ZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhP2E6KGM9YS5tYXRjaCgvXihcXGQrKSBRKFxcZCkkLyksZT1hLm1hdGNoKC9eKFxcZCspLShcXGQrKSQvKSxmPWEubWF0Y2goL14oXFxkKyktKFxcZCspLShcXGQrKSQvKSxoPWEubWF0Y2goL14oXFxkKykgVyhcXGQrKSQvKSxpPWEubWF0Y2goL14oXFxkKyktKFxcZCspLShcXGQrKVsgVF0oXFxkKyk6KFxcZCspKFp8KFsrLV0pKFxcZFxcZCk6PyhcXGRcXGQpKT8kLyksaj1hLm1hdGNoKC9eKFxcZCspLShcXGQrKS0oXFxkKylbIFRdKFxcZCspOihcXGQrKTooXFxkKyhcXC5cXGQrKT8pKFp8KFsrLV0pKFxcZFxcZCk6PyhcXGRcXGQpKT8kLyksYz9uZXcgRGF0ZShwYXJzZUludChjWzFdLDEwKSwzKnBhcnNlSW50KGNbMl0sMTApLTEsMSkuZ2V0VGltZSgpOmU/bmV3IERhdGUocGFyc2VJbnQoZVsxXSwxMCkscGFyc2VJbnQoZVsyXSwxMCktMSwxKS5nZXRUaW1lKCk6Zj9uZXcgRGF0ZShwYXJzZUludChmWzFdLDEwKSxwYXJzZUludChmWzJdLDEwKS0xLHBhcnNlSW50KGZbM10sMTApKS5nZXRUaW1lKCk6aD8oaz1uZXcgRGF0ZShwYXJzZUludChoWzFdLDEwKSwwLDEpLDQhPT1rLmdldERheSgpJiZrLnNldE1vbnRoKDAsMSsoNC1rLmdldERheSgpKzcpJTcpLGsuZ2V0VGltZSgpKzYwNDhlNSpwYXJzZUludChoWzJdLDEwKSk6aT9pWzZdPyhnPTAsXCJaXCIhPT1pWzZdJiYoZz02MCpwYXJzZUludChpWzhdLDEwKStwYXJzZUludChpWzldLDEwKSxcIitcIj09PWlbN10mJihnPTAtZykpLERhdGUuVVRDKHBhcnNlSW50KGlbMV0sMTApLHBhcnNlSW50KGlbMl0sMTApLTEscGFyc2VJbnQoaVszXSwxMCkscGFyc2VJbnQoaVs0XSwxMCkscGFyc2VJbnQoaVs1XSwxMCkrZykpOm5ldyBEYXRlKHBhcnNlSW50KGlbMV0sMTApLHBhcnNlSW50KGlbMl0sMTApLTEscGFyc2VJbnQoaVszXSwxMCkscGFyc2VJbnQoaVs0XSwxMCkscGFyc2VJbnQoaVs1XSwxMCkpLmdldFRpbWUoKTpqPyhsPXBhcnNlRmxvYXQoals2XSksYj1NYXRoLmZsb29yKGwpLGQ9TWF0aC5yb3VuZCgxZTMqKGwtYikpLGpbOF0/KGc9MCxcIlpcIiE9PWpbOF0mJihnPTYwKnBhcnNlSW50KGpbMTBdLDEwKStwYXJzZUludChqWzExXSwxMCksXCIrXCI9PT1qWzldJiYoZz0wLWcpKSxEYXRlLlVUQyhwYXJzZUludChqWzFdLDEwKSxwYXJzZUludChqWzJdLDEwKS0xLHBhcnNlSW50KGpbM10sMTApLHBhcnNlSW50KGpbNF0sMTApLHBhcnNlSW50KGpbNV0sMTApK2csYixkKSk6bmV3IERhdGUocGFyc2VJbnQoalsxXSwxMCkscGFyc2VJbnQoalsyXSwxMCktMSxwYXJzZUludChqWzNdLDEwKSxwYXJzZUludChqWzRdLDEwKSxwYXJzZUludChqWzVdLDEwKSxiLGQpLmdldFRpbWUoKSk6bmV3IERhdGUocGFyc2VJbnQoYSwxMCksMCwxKS5nZXRUaW1lKCkpfSxiLkhvdmVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhjKXtudWxsPT1jJiYoYz17fSksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGIuSG92ZXIuZGVmYXVsdHMsYyksdGhpcy5lbD1hKFwiPGRpdiBjbGFzcz0nXCIrdGhpcy5vcHRpb25zW1wiY2xhc3NcIl0rXCInPjwvZGl2PlwiKSx0aGlzLmVsLmhpZGUoKSx0aGlzLm9wdGlvbnMucGFyZW50LmFwcGVuZCh0aGlzLmVsKX1yZXR1cm4gYy5kZWZhdWx0cz17XCJjbGFzc1wiOlwibW9ycmlzLWhvdmVyIG1vcnJpcy1kZWZhdWx0LXN0eWxlXCJ9LGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE/KHRoaXMuaHRtbChhKSx0aGlzLnNob3coKSx0aGlzLm1vdmVUbyhiLGMpKTp0aGlzLmhpZGUoKX0sYy5wcm90b3R5cGUuaHRtbD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbC5odG1sKGEpfSxjLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGg7cmV0dXJuIGc9dGhpcy5vcHRpb25zLnBhcmVudC5pbm5lcldpZHRoKCksZj10aGlzLm9wdGlvbnMucGFyZW50LmlubmVySGVpZ2h0KCksZD10aGlzLmVsLm91dGVyV2lkdGgoKSxjPXRoaXMuZWwub3V0ZXJIZWlnaHQoKSxlPU1hdGgubWluKE1hdGgubWF4KDAsYS1kLzIpLGctZCksbnVsbCE9Yj8oaD1iLWMtMTAsMD5oJiYoaD1iKzEwLGgrYz5mJiYoaD1mLzItYy8yKSkpOmg9Zi8yLWMvMix0aGlzLmVsLmNzcyh7bGVmdDplK1wicHhcIix0b3A6cGFyc2VJbnQoaCkrXCJweFwifSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbC5zaG93KCl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbC5oaWRlKCl9LGN9KCksYi5MaW5lPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIHRoaXMuaGlsaWdodD1mKHRoaXMuaGlsaWdodCx0aGlzKSx0aGlzLm9uSG92ZXJPdXQ9Zih0aGlzLm9uSG92ZXJPdXQsdGhpcyksdGhpcy5vbkhvdmVyTW92ZT1mKHRoaXMub25Ib3Zlck1vdmUsdGhpcyksdGhpcy5vbkdyaWRDbGljaz1mKHRoaXMub25HcmlkQ2xpY2ssdGhpcyksdGhpcyBpbnN0YW5jZW9mIGIuTGluZT8oYy5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpLHZvaWQgMCk6bmV3IGIuTGluZShhKX1yZXR1cm4gaChjLGEpLGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm5cImFsd2F5c1wiIT09dGhpcy5vcHRpb25zLmhpZGVIb3Zlcj8odGhpcy5ob3Zlcj1uZXcgYi5Ib3Zlcih7cGFyZW50OnRoaXMuZWx9KSx0aGlzLm9uKFwiaG92ZXJtb3ZlXCIsdGhpcy5vbkhvdmVyTW92ZSksdGhpcy5vbihcImhvdmVyb3V0XCIsdGhpcy5vbkhvdmVyT3V0KSx0aGlzLm9uKFwiZ3JpZGNsaWNrXCIsdGhpcy5vbkdyaWRDbGljaykpOnZvaWQgMH0sYy5wcm90b3R5cGUuZGVmYXVsdHM9e2xpbmVXaWR0aDozLHBvaW50U2l6ZTo0LGxpbmVDb2xvcnM6W1wiIzBiNjJhNFwiLFwiIzdBOTJBM1wiLFwiIzRkYTc0ZFwiLFwiI2FmZDhmOFwiLFwiI2VkYzI0MFwiLFwiI2NiNGI0YlwiLFwiIzk0NDBlZFwiXSxwb2ludFN0cm9rZVdpZHRoczpbMV0scG9pbnRTdHJva2VDb2xvcnM6W1wiI2ZmZmZmZlwiXSxwb2ludEZpbGxDb2xvcnM6W10sc21vb3RoOiEwLHhMYWJlbHM6XCJhdXRvXCIseExhYmVsRm9ybWF0Om51bGwseExhYmVsTWFyZ2luOjI0LGhpZGVIb3ZlcjohMX0sYy5wcm90b3R5cGUuY2FsYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbGNQb2ludHMoKSx0aGlzLmdlbmVyYXRlUGF0aHMoKX0sYy5wcm90b3R5cGUuY2FsY1BvaW50cz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZjtmb3IoZT10aGlzLmRhdGEsZj1bXSxjPTAsZD1lLmxlbmd0aDtkPmM7YysrKWE9ZVtjXSxhLl94PXRoaXMudHJhbnNYKGEueCksYS5feT1mdW5jdGlvbigpe3ZhciBjLGQsZSxmO2ZvcihlPWEueSxmPVtdLGM9MCxkPWUubGVuZ3RoO2Q+YztjKyspYj1lW2NdLG51bGwhPWI/Zi5wdXNoKHRoaXMudHJhbnNZKGIpKTpmLnB1c2goYik7cmV0dXJuIGZ9LmNhbGwodGhpcyksZi5wdXNoKGEuX3ltYXg9TWF0aC5taW4uYXBwbHkoTWF0aCxbdGhpcy5ib3R0b21dLmNvbmNhdChmdW5jdGlvbigpe3ZhciBjLGQsZSxmO2ZvcihlPWEuX3ksZj1bXSxjPTAsZD1lLmxlbmd0aDtkPmM7YysrKWI9ZVtjXSxudWxsIT1iJiZmLnB1c2goYik7cmV0dXJuIGZ9KCkpKSk7cmV0dXJuIGZ9LGMucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZjtpZigwPT09dGhpcy5kYXRhLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoZj10aGlzLmRhdGEuc2xpY2UoMSksYj1kPTAsZT1mLmxlbmd0aDtlPmQmJihjPWZbYl0sIShhPChjLl94K3RoaXMuZGF0YVtiXS5feCkvMikpO2I9KytkKTtyZXR1cm4gYn0sYy5wcm90b3R5cGUub25HcmlkQ2xpY2s9ZnVuY3Rpb24oYSxiKXt2YXIgYztyZXR1cm4gYz10aGlzLmhpdFRlc3QoYSksdGhpcy5maXJlKFwiY2xpY2tcIixjLHRoaXMuZGF0YVtjXS5zcmMsYSxiKX0sYy5wcm90b3R5cGUub25Ib3Zlck1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGI9dGhpcy5oaXRUZXN0KGEpLHRoaXMuZGlzcGxheUhvdmVyRm9yUm93KGIpfSxjLnByb3RvdHlwZS5vbkhvdmVyT3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oaWRlSG92ZXIhPT0hMT90aGlzLmRpc3BsYXlIb3ZlckZvclJvdyhudWxsKTp2b2lkIDB9LGMucHJvdG90eXBlLmRpc3BsYXlIb3ZlckZvclJvdz1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbnVsbCE9YT8oKGI9dGhpcy5ob3ZlcikudXBkYXRlLmFwcGx5KGIsdGhpcy5ob3ZlckNvbnRlbnRGb3JSb3coYSkpLHRoaXMuaGlsaWdodChhKSk6KHRoaXMuaG92ZXIuaGlkZSgpLHRoaXMuaGlsaWdodCgpKX0sYy5wcm90b3R5cGUuaG92ZXJDb250ZW50Rm9yUm93PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2ZvcihkPXRoaXMuZGF0YVthXSxiPVwiPGRpdiBjbGFzcz0nbW9ycmlzLWhvdmVyLXJvdy1sYWJlbCc+XCIrZC5sYWJlbCtcIjwvZGl2PlwiLGg9ZC55LGM9Zj0wLGc9aC5sZW5ndGg7Zz5mO2M9KytmKWU9aFtjXSxiKz1cIjxkaXYgY2xhc3M9J21vcnJpcy1ob3Zlci1wb2ludCcgc3R5bGU9J2NvbG9yOiBcIit0aGlzLmNvbG9yRm9yKGQsYyxcImxhYmVsXCIpK1wiJz5cXG4gIFwiK3RoaXMub3B0aW9ucy5sYWJlbHNbY10rXCI6XFxuICBcIit0aGlzLnlMYWJlbEZvcm1hdChlKStcIlxcbjwvZGl2PlwiO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5ob3ZlckNhbGxiYWNrJiYoYj10aGlzLm9wdGlvbnMuaG92ZXJDYWxsYmFjayhhLHRoaXMub3B0aW9ucyxiLGQuc3JjKSksW2IsZC5feCxkLl95bWF4XX0sYy5wcm90b3R5cGUuZ2VuZXJhdGVQYXRocz1mdW5jdGlvbigpe3ZhciBhLGMsZCxlO3JldHVybiB0aGlzLnBhdGhzPWZ1bmN0aW9uKCl7dmFyIGYsZyxoLGo7Zm9yKGo9W10sYz1mPTAsZz10aGlzLm9wdGlvbnMueWtleXMubGVuZ3RoO2c+PTA/Zz5mOmY+ZztjPWc+PTA/KytmOi0tZillPVwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNtb290aD90aGlzLm9wdGlvbnMuc21vb3RoOihoPXRoaXMub3B0aW9ucy55a2V5c1tjXSxpLmNhbGwodGhpcy5vcHRpb25zLnNtb290aCxoKT49MCksYT1mdW5jdGlvbigpe3ZhciBhLGIsZSxmO2ZvcihlPXRoaXMuZGF0YSxmPVtdLGE9MCxiPWUubGVuZ3RoO2I+YTthKyspZD1lW2FdLHZvaWQgMCE9PWQuX3lbY10mJmYucHVzaCh7eDpkLl94LHk6ZC5feVtjXX0pO3JldHVybiBmfS5jYWxsKHRoaXMpLGEubGVuZ3RoPjE/ai5wdXNoKGIuTGluZS5jcmVhdGVQYXRoKGEsZSx0aGlzLmJvdHRvbSkpOmoucHVzaChudWxsKTtyZXR1cm4gan0uY2FsbCh0aGlzKX0sYy5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe3ZhciBhO3JldHVybigoYT10aGlzLm9wdGlvbnMuYXhlcyk9PT0hMHx8XCJib3RoXCI9PT1hfHxcInhcIj09PWEpJiZ0aGlzLmRyYXdYQXhpcygpLHRoaXMuZHJhd1NlcmllcygpLHRoaXMub3B0aW9ucy5oaWRlSG92ZXI9PT0hMT90aGlzLmRpc3BsYXlIb3ZlckZvclJvdyh0aGlzLmRhdGEubGVuZ3RoLTEpOnZvaWQgMH0sYy5wcm90b3R5cGUuZHJhd1hBeGlzPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGgsaSxqLGssbD10aGlzO2ZvcihoPXRoaXMuYm90dG9tK3RoaXMub3B0aW9ucy5wYWRkaW5nLzIsZj1udWxsLGU9bnVsbCxhPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxnLGksajtyZXR1cm4gYz1sLmRyYXdYQXhpc0xhYmVsKGwudHJhbnNYKGIpLGgsYSksaj1jLmdldEJCb3goKSxjLnRyYW5zZm9ybShcInJcIistbC5vcHRpb25zLnhMYWJlbEFuZ2xlKSxkPWMuZ2V0QkJveCgpLGMudHJhbnNmb3JtKFwidDAsXCIrZC5oZWlnaHQvMitcIi4uLlwiKSwwIT09bC5vcHRpb25zLnhMYWJlbEFuZ2xlJiYoaT0tLjUqai53aWR0aCpNYXRoLmNvcyhsLm9wdGlvbnMueExhYmVsQW5nbGUqTWF0aC5QSS8xODApLGMudHJhbnNmb3JtKFwidFwiK2krXCIsMC4uLlwiKSksZD1jLmdldEJCb3goKSwobnVsbD09Znx8Zj49ZC54K2Qud2lkdGh8fG51bGwhPWUmJmU+PWQueCkmJmQueD49MCYmZC54K2Qud2lkdGg8bC5lbC53aWR0aCgpPygwIT09bC5vcHRpb25zLnhMYWJlbEFuZ2xlJiYoZz0xLjI1Kmwub3B0aW9ucy5ncmlkVGV4dFNpemUvTWF0aC5zaW4obC5vcHRpb25zLnhMYWJlbEFuZ2xlKk1hdGguUEkvMTgwKSxlPWQueC1nKSxmPWQueC1sLm9wdGlvbnMueExhYmVsTWFyZ2luKTpjLnJlbW92ZSgpfSxkPXRoaXMub3B0aW9ucy5wYXJzZVRpbWU/MT09PXRoaXMuZGF0YS5sZW5ndGgmJlwiYXV0b1wiPT09dGhpcy5vcHRpb25zLnhMYWJlbHM/W1t0aGlzLmRhdGFbMF0ubGFiZWwsdGhpcy5kYXRhWzBdLnhdXTpiLmxhYmVsU2VyaWVzKHRoaXMueG1pbix0aGlzLnhtYXgsdGhpcy53aWR0aCx0aGlzLm9wdGlvbnMueExhYmVscyx0aGlzLm9wdGlvbnMueExhYmVsRm9ybWF0KTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkO2ZvcihjPXRoaXMuZGF0YSxkPVtdLGE9MCxiPWMubGVuZ3RoO2I+YTthKyspZz1jW2FdLGQucHVzaChbZy5sYWJlbCxnLnhdKTtyZXR1cm4gZH0uY2FsbCh0aGlzKSxkLnJldmVyc2UoKSxrPVtdLGk9MCxqPWQubGVuZ3RoO2o+aTtpKyspYz1kW2ldLGsucHVzaChhKGNbMF0sY1sxXSkpO3JldHVybiBrfSxjLnByb3RvdHlwZS5kcmF3U2VyaWVzPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmO2Zvcih0aGlzLnNlcmllc1BvaW50cz1bXSxhPWI9ZD10aGlzLm9wdGlvbnMueWtleXMubGVuZ3RoLTE7MD49ZD8wPj1iOmI+PTA7YT0wPj1kPysrYjotLWIpdGhpcy5fZHJhd0xpbmVGb3IoYSk7Zm9yKGY9W10sYT1jPWU9dGhpcy5vcHRpb25zLnlrZXlzLmxlbmd0aC0xOzA+PWU/MD49YzpjPj0wO2E9MD49ZT8rK2M6LS1jKWYucHVzaCh0aGlzLl9kcmF3UG9pbnRGb3IoYSkpO3JldHVybiBmfSxjLnByb3RvdHlwZS5fZHJhd1BvaW50Rm9yPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZztmb3IodGhpcy5zZXJpZXNQb2ludHNbYV09W10sZj10aGlzLmRhdGEsZz1bXSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKWM9ZltkXSxiPW51bGwsbnVsbCE9Yy5feVthXSYmKGI9dGhpcy5kcmF3TGluZVBvaW50KGMuX3gsYy5feVthXSx0aGlzLmNvbG9yRm9yKGMsYSxcInBvaW50XCIpLGEpKSxnLnB1c2godGhpcy5zZXJpZXNQb2ludHNbYV0ucHVzaChiKSk7cmV0dXJuIGd9LGMucHJvdG90eXBlLl9kcmF3TGluZUZvcj1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gYj10aGlzLnBhdGhzW2FdLG51bGwhPT1iP3RoaXMuZHJhd0xpbmVQYXRoKGIsdGhpcy5jb2xvckZvcihudWxsLGEsXCJsaW5lXCIpLGEpOnZvaWQgMH0sYy5jcmVhdGVQYXRoPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2ZvcihrPVwiXCIsYyYmKGc9Yi5MaW5lLmdyYWRpZW50cyhhKSksbD17eTpudWxsfSxoPXE9MCxyPWEubGVuZ3RoO3I+cTtoPSsrcSllPWFbaF0sbnVsbCE9ZS55JiYobnVsbCE9bC55P2M/KGY9Z1toXSxqPWdbaC0xXSxpPShlLngtbC54KS80LG09bC54K2ksbz1NYXRoLm1pbihkLGwueStpKmopLG49ZS54LWkscD1NYXRoLm1pbihkLGUueS1pKmYpLGsrPVwiQ1wiK20rXCIsXCIrbytcIixcIituK1wiLFwiK3ArXCIsXCIrZS54K1wiLFwiK2UueSk6ays9XCJMXCIrZS54K1wiLFwiK2UueTpjJiZudWxsPT1nW2hdfHwoays9XCJNXCIrZS54K1wiLFwiK2UueSkpLGw9ZTtyZXR1cm4ga30sYy5ncmFkaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtmb3IoYz1mdW5jdGlvbihhLGIpe3JldHVybihhLnktYi55KS8oYS54LWIueCl9LGk9W10sZD1nPTAsaD1hLmxlbmd0aDtoPmc7ZD0rK2cpYj1hW2RdLG51bGwhPWIueT8oZT1hW2QrMV18fHt5Om51bGx9LGY9YVtkLTFdfHx7eTpudWxsfSxudWxsIT1mLnkmJm51bGwhPWUueT9pLnB1c2goYyhmLGUpKTpudWxsIT1mLnk/aS5wdXNoKGMoZixiKSk6bnVsbCE9ZS55P2kucHVzaChjKGIsZSkpOmkucHVzaChudWxsKSk6aS5wdXNoKG51bGwpO3JldHVybiBpfSxjLnByb3RvdHlwZS5oaWxpZ2h0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY7aWYobnVsbCE9PXRoaXMucHJldkhpbGlnaHQmJnRoaXMucHJldkhpbGlnaHQhPT1hKWZvcihiPWM9MCxlPXRoaXMuc2VyaWVzUG9pbnRzLmxlbmd0aC0xO2U+PTA/ZT49YzpjPj1lO2I9ZT49MD8rK2M6LS1jKXRoaXMuc2VyaWVzUG9pbnRzW2JdW3RoaXMucHJldkhpbGlnaHRdJiZ0aGlzLnNlcmllc1BvaW50c1tiXVt0aGlzLnByZXZIaWxpZ2h0XS5hbmltYXRlKHRoaXMucG9pbnRTaHJpbmtTZXJpZXMoYikpO2lmKG51bGwhPT1hJiZ0aGlzLnByZXZIaWxpZ2h0IT09YSlmb3IoYj1kPTAsZj10aGlzLnNlcmllc1BvaW50cy5sZW5ndGgtMTtmPj0wP2Y+PWQ6ZD49ZjtiPWY+PTA/KytkOi0tZCl0aGlzLnNlcmllc1BvaW50c1tiXVthXSYmdGhpcy5zZXJpZXNQb2ludHNbYl1bYV0uYW5pbWF0ZSh0aGlzLnBvaW50R3Jvd1NlcmllcyhiKSk7cmV0dXJuIHRoaXMucHJldkhpbGlnaHQ9YX0sYy5wcm90b3R5cGUuY29sb3JGb3I9ZnVuY3Rpb24oYSxiLGMpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5saW5lQ29sb3JzP3RoaXMub3B0aW9ucy5saW5lQ29sb3JzLmNhbGwodGhpcyxhLGIsYyk6XCJwb2ludFwiPT09Yz90aGlzLm9wdGlvbnMucG9pbnRGaWxsQ29sb3JzW2IldGhpcy5vcHRpb25zLnBvaW50RmlsbENvbG9ycy5sZW5ndGhdfHx0aGlzLm9wdGlvbnMubGluZUNvbG9yc1tiJXRoaXMub3B0aW9ucy5saW5lQ29sb3JzLmxlbmd0aF06dGhpcy5vcHRpb25zLmxpbmVDb2xvcnNbYiV0aGlzLm9wdGlvbnMubGluZUNvbG9ycy5sZW5ndGhdfSxjLnByb3RvdHlwZS5kcmF3WEF4aXNMYWJlbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMucmFwaGFlbC50ZXh0KGEsYixjKS5hdHRyKFwiZm9udC1zaXplXCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0U2l6ZSkuYXR0cihcImZvbnQtZmFtaWx5XCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0RmFtaWx5KS5hdHRyKFwiZm9udC13ZWlnaHRcIix0aGlzLm9wdGlvbnMuZ3JpZFRleHRXZWlnaHQpLmF0dHIoXCJmaWxsXCIsdGhpcy5vcHRpb25zLmdyaWRUZXh0Q29sb3IpfSxjLnByb3RvdHlwZS5kcmF3TGluZVBhdGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnJhcGhhZWwucGF0aChhKS5hdHRyKFwic3Ryb2tlXCIsYikuYXR0cihcInN0cm9rZS13aWR0aFwiLHRoaXMubGluZVdpZHRoRm9yU2VyaWVzKGMpKX0sYy5wcm90b3R5cGUuZHJhd0xpbmVQb2ludD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5yYXBoYWVsLmNpcmNsZShhLGIsdGhpcy5wb2ludFNpemVGb3JTZXJpZXMoZCkpLmF0dHIoXCJmaWxsXCIsYykuYXR0cihcInN0cm9rZS13aWR0aFwiLHRoaXMucG9pbnRTdHJva2VXaWR0aEZvclNlcmllcyhkKSkuYXR0cihcInN0cm9rZVwiLHRoaXMucG9pbnRTdHJva2VDb2xvckZvclNlcmllcyhkKSl9LGMucHJvdG90eXBlLnBvaW50U3Ryb2tlV2lkdGhGb3JTZXJpZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb2ludFN0cm9rZVdpZHRoc1thJXRoaXMub3B0aW9ucy5wb2ludFN0cm9rZVdpZHRocy5sZW5ndGhdfSxjLnByb3RvdHlwZS5wb2ludFN0cm9rZUNvbG9yRm9yU2VyaWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9wdGlvbnMucG9pbnRTdHJva2VDb2xvcnNbYSV0aGlzLm9wdGlvbnMucG9pbnRTdHJva2VDb2xvcnMubGVuZ3RoXX0sYy5wcm90b3R5cGUubGluZVdpZHRoRm9yU2VyaWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9wdGlvbnMubGluZVdpZHRoIGluc3RhbmNlb2YgQXJyYXk/dGhpcy5vcHRpb25zLmxpbmVXaWR0aFthJXRoaXMub3B0aW9ucy5saW5lV2lkdGgubGVuZ3RoXTp0aGlzLm9wdGlvbnMubGluZVdpZHRofSxjLnByb3RvdHlwZS5wb2ludFNpemVGb3JTZXJpZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb2ludFNpemUgaW5zdGFuY2VvZiBBcnJheT90aGlzLm9wdGlvbnMucG9pbnRTaXplW2EldGhpcy5vcHRpb25zLnBvaW50U2l6ZS5sZW5ndGhdOnRoaXMub3B0aW9ucy5wb2ludFNpemV9LGMucHJvdG90eXBlLnBvaW50R3Jvd1Nlcmllcz1mdW5jdGlvbihhKXtyZXR1cm4gUmFwaGFlbC5hbmltYXRpb24oe3I6dGhpcy5wb2ludFNpemVGb3JTZXJpZXMoYSkrM30sMjUsXCJsaW5lYXJcIil9LGMucHJvdG90eXBlLnBvaW50U2hyaW5rU2VyaWVzPWZ1bmN0aW9uKGEpe3JldHVybiBSYXBoYWVsLmFuaW1hdGlvbih7cjp0aGlzLnBvaW50U2l6ZUZvclNlcmllcyhhKX0sMjUsXCJsaW5lYXJcIil9LGN9KGIuR3JpZCksYi5sYWJlbFNlcmllcz1mdW5jdGlvbihjLGQsZSxmLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHI7aWYoaj0yMDAqKGQtYykvZSxpPW5ldyBEYXRlKGMpLG49Yi5MQUJFTF9TUEVDU1tmXSx2b2lkIDA9PT1uKWZvcihyPWIuQVVUT19MQUJFTF9PUkRFUixwPTAscT1yLmxlbmd0aDtxPnA7cCsrKWlmKGs9cltwXSxtPWIuTEFCRUxfU1BFQ1Nba10saj49bS5zcGFuKXtuPW07YnJlYWt9Zm9yKHZvaWQgMD09PW4mJihuPWIuTEFCRUxfU1BFQ1Muc2Vjb25kKSxnJiYobj1hLmV4dGVuZCh7fSxuLHtmbXQ6Z30pKSxoPW4uc3RhcnQoaSksbD1bXTsobz1oLmdldFRpbWUoKSk8PWQ7KW8+PWMmJmwucHVzaChbbi5mbXQoaCksb10pLG4uaW5jcihoKTtyZXR1cm4gbH0sYz1mdW5jdGlvbihhKXtyZXR1cm57c3Bhbjo2MCphKjFlMyxzdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSxhLmdldEhvdXJzKCkpfSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIitiLnBhZDIoYS5nZXRIb3VycygpKStcIjpcIitiLnBhZDIoYS5nZXRNaW51dGVzKCkpfSxpbmNyOmZ1bmN0aW9uKGIpe3JldHVybiBiLnNldFVUQ01pbnV0ZXMoYi5nZXRVVENNaW51dGVzKCkrYSl9fX0sZD1mdW5jdGlvbihhKXtyZXR1cm57c3BhbjoxZTMqYSxzdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSxhLmdldEhvdXJzKCksYS5nZXRNaW51dGVzKCkpfSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIitiLnBhZDIoYS5nZXRIb3VycygpKStcIjpcIitiLnBhZDIoYS5nZXRNaW51dGVzKCkpK1wiOlwiK2IucGFkMihhLmdldFNlY29uZHMoKSl9LGluY3I6ZnVuY3Rpb24oYil7cmV0dXJuIGIuc2V0VVRDU2Vjb25kcyhiLmdldFVUQ1NlY29uZHMoKSthKX19fSxiLkxBQkVMX1NQRUNTPXtkZWNhZGU6e3NwYW46MTcyOGU4LHN0YXJ0OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCktYS5nZXRGdWxsWWVhcigpJTEwLDAsMSl9LGZtdDpmdW5jdGlvbihhKXtyZXR1cm5cIlwiK2EuZ2V0RnVsbFllYXIoKX0saW5jcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkrMTApfX0seWVhcjp7c3BhbjoxNzI4ZTcsc3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSwwLDEpfSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIithLmdldEZ1bGxZZWFyKCl9LGluY3I6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2V0RnVsbFllYXIoYS5nZXRGdWxsWWVhcigpKzEpfX0sbW9udGg6e3NwYW46MjQxOTJlNSxzdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSwxKX0sZm10OmZ1bmN0aW9uKGEpe3JldHVyblwiXCIrYS5nZXRGdWxsWWVhcigpK1wiLVwiK2IucGFkMihhLmdldE1vbnRoKCkrMSl9LGluY3I6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2V0TW9udGgoYS5nZXRNb250aCgpKzEpfX0sd2Vlazp7c3Bhbjo2MDQ4ZTUsc3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIithLmdldEZ1bGxZZWFyKCkrXCItXCIrYi5wYWQyKGEuZ2V0TW9udGgoKSsxKStcIi1cIitiLnBhZDIoYS5nZXREYXRlKCkpfSxpbmNyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNldERhdGUoYS5nZXREYXRlKCkrNyl9fSxkYXk6e3NwYW46ODY0ZTUsc3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIithLmdldEZ1bGxZZWFyKCkrXCItXCIrYi5wYWQyKGEuZ2V0TW9udGgoKSsxKStcIi1cIitiLnBhZDIoYS5nZXREYXRlKCkpfSxpbmNyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNldERhdGUoYS5nZXREYXRlKCkrMSl9fSxob3VyOmMoNjApLFwiMzBtaW5cIjpjKDMwKSxcIjE1bWluXCI6YygxNSksXCIxMG1pblwiOmMoMTApLFwiNW1pblwiOmMoNSksbWludXRlOmMoMSksXCIzMHNlY1wiOmQoMzApLFwiMTVzZWNcIjpkKDE1KSxcIjEwc2VjXCI6ZCgxMCksXCI1c2VjXCI6ZCg1KSxzZWNvbmQ6ZCgxKX0sYi5BVVRPX0xBQkVMX09SREVSPVtcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIixcIndlZWtcIixcImRheVwiLFwiaG91clwiLFwiMzBtaW5cIixcIjE1bWluXCIsXCIxMG1pblwiLFwiNW1pblwiLFwibWludXRlXCIsXCIzMHNlY1wiLFwiMTVzZWNcIixcIjEwc2VjXCIsXCI1c2VjXCIsXCJzZWNvbmRcIl0sYi5BcmVhPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoYyl7dmFyIGY7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBiLkFyZWE/KGY9YS5leHRlbmQoe30sZSxjKSx0aGlzLmN1bXVsYXRpdmU9IWYuYmVoYXZlTGlrZUxpbmUsXCJhdXRvXCI9PT1mLmZpbGxPcGFjaXR5JiYoZi5maWxsT3BhY2l0eT1mLmJlaGF2ZUxpa2VMaW5lPy44OjEpLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxmKSx2b2lkIDApOm5ldyBiLkFyZWEoYyl9dmFyIGU7cmV0dXJuIGgoZCxjKSxlPXtmaWxsT3BhY2l0eTpcImF1dG9cIixiZWhhdmVMaWtlTGluZTohMX0sZC5wcm90b3R5cGUuY2FsY1BvaW50cz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnO2ZvcihmPXRoaXMuZGF0YSxnPVtdLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspYT1mW2RdLGEuX3g9dGhpcy50cmFuc1goYS54KSxiPTAsYS5feT1mdW5jdGlvbigpe3ZhciBkLGUsZixnO2ZvcihmPWEueSxnPVtdLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspYz1mW2RdLHRoaXMub3B0aW9ucy5iZWhhdmVMaWtlTGluZT9nLnB1c2godGhpcy50cmFuc1koYykpOihiKz1jfHwwLGcucHVzaCh0aGlzLnRyYW5zWShiKSkpO3JldHVybiBnfS5jYWxsKHRoaXMpLGcucHVzaChhLl95bWF4PU1hdGgubWF4LmFwcGx5KE1hdGgsYS5feSkpO3JldHVybiBnfSxkLnByb3RvdHlwZS5kcmF3U2VyaWVzPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGcsaDtmb3IodGhpcy5zZXJpZXNQb2ludHM9W10sYj10aGlzLm9wdGlvbnMuYmVoYXZlTGlrZUxpbmU/ZnVuY3Rpb24oKXtmPVtdO2Zvcih2YXIgYT0wLGI9dGhpcy5vcHRpb25zLnlrZXlzLmxlbmd0aC0xO2I+PTA/Yj49YTphPj1iO2I+PTA/YSsrOmEtLSlmLnB1c2goYSk7cmV0dXJuIGZ9LmFwcGx5KHRoaXMpOmZ1bmN0aW9uKCl7Zz1bXTtmb3IodmFyIGE9ZT10aGlzLm9wdGlvbnMueWtleXMubGVuZ3RoLTE7MD49ZT8wPj1hOmE+PTA7MD49ZT9hKys6YS0tKWcucHVzaChhKTtyZXR1cm4gZ30uYXBwbHkodGhpcyksaD1bXSxjPTAsZD1iLmxlbmd0aDtkPmM7YysrKWE9YltjXSx0aGlzLl9kcmF3RmlsbEZvcihhKSx0aGlzLl9kcmF3TGluZUZvcihhKSxoLnB1c2godGhpcy5fZHJhd1BvaW50Rm9yKGEpKTtyZXR1cm4gaH0sZC5wcm90b3R5cGUuX2RyYXdGaWxsRm9yPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPXRoaXMucGF0aHNbYV0sbnVsbCE9PWI/KGIrPVwiTFwiK3RoaXMudHJhbnNYKHRoaXMueG1heCkrXCIsXCIrdGhpcy5ib3R0b20rXCJMXCIrdGhpcy50cmFuc1godGhpcy54bWluKStcIixcIit0aGlzLmJvdHRvbStcIlpcIix0aGlzLmRyYXdGaWxsZWRQYXRoKGIsdGhpcy5maWxsRm9yU2VyaWVzKGEpKSk6dm9pZCAwfSxkLnByb3RvdHlwZS5maWxsRm9yU2VyaWVzPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPVJhcGhhZWwucmdiMmhzbCh0aGlzLmNvbG9yRm9yKHRoaXMuZGF0YVthXSxhLFwibGluZVwiKSksUmFwaGFlbC5oc2woYi5oLHRoaXMub3B0aW9ucy5iZWhhdmVMaWtlTGluZT8uOSpiLnM6Ljc1KmIucyxNYXRoLm1pbiguOTgsdGhpcy5vcHRpb25zLmJlaGF2ZUxpa2VMaW5lPzEuMipiLmw6MS4yNSpiLmwpKX0sZC5wcm90b3R5cGUuZHJhd0ZpbGxlZFBhdGg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yYXBoYWVsLnBhdGgoYSkuYXR0cihcImZpbGxcIixiKS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KS5hdHRyKFwic3Ryb2tlXCIsXCJub25lXCIpfSxkfShiLkxpbmUpLGIuQmFyPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoYyl7cmV0dXJuIHRoaXMub25Ib3Zlck91dD1mKHRoaXMub25Ib3Zlck91dCx0aGlzKSx0aGlzLm9uSG92ZXJNb3ZlPWYodGhpcy5vbkhvdmVyTW92ZSx0aGlzKSx0aGlzLm9uR3JpZENsaWNrPWYodGhpcy5vbkdyaWRDbGljayx0aGlzKSx0aGlzIGluc3RhbmNlb2YgYi5CYXI/KGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmV4dGVuZCh7fSxjLHtwYXJzZVRpbWU6ITF9KSksdm9pZCAwKTpuZXcgYi5CYXIoYyl9cmV0dXJuIGgoZCxjKSxkLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VtdWxhdGl2ZT10aGlzLm9wdGlvbnMuc3RhY2tlZCxcImFsd2F5c1wiIT09dGhpcy5vcHRpb25zLmhpZGVIb3Zlcj8odGhpcy5ob3Zlcj1uZXcgYi5Ib3Zlcih7cGFyZW50OnRoaXMuZWx9KSx0aGlzLm9uKFwiaG92ZXJtb3ZlXCIsdGhpcy5vbkhvdmVyTW92ZSksdGhpcy5vbihcImhvdmVyb3V0XCIsdGhpcy5vbkhvdmVyT3V0KSx0aGlzLm9uKFwiZ3JpZGNsaWNrXCIsdGhpcy5vbkdyaWRDbGljaykpOnZvaWQgMH0sZC5wcm90b3R5cGUuZGVmYXVsdHM9e2JhclNpemVSYXRpbzouNzUsYmFyR2FwOjMsYmFyQ29sb3JzOltcIiMwYjYyYTRcIixcIiM3YTkyYTNcIixcIiM0ZGE3NGRcIixcIiNhZmQ4ZjhcIixcIiNlZGMyNDBcIixcIiNjYjRiNGJcIixcIiM5NDQwZWRcIl0sYmFyT3BhY2l0eToxLGJhclJhZGl1czpbMCwwLDAsMF0seExhYmVsTWFyZ2luOjUwfSxkLnByb3RvdHlwZS5jYWxjPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMuY2FsY0JhcnMoKSx0aGlzLm9wdGlvbnMuaGlkZUhvdmVyPT09ITE/KGE9dGhpcy5ob3ZlcikudXBkYXRlLmFwcGx5KGEsdGhpcy5ob3ZlckNvbnRlbnRGb3JSb3codGhpcy5kYXRhLmxlbmd0aC0xKSk6dm9pZCAwfSxkLnByb3RvdHlwZS5jYWxjQmFycz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnO2ZvcihmPXRoaXMuZGF0YSxnPVtdLGE9ZD0wLGU9Zi5sZW5ndGg7ZT5kO2E9KytkKWI9ZlthXSxiLl94PXRoaXMubGVmdCt0aGlzLndpZHRoKihhKy41KS90aGlzLmRhdGEubGVuZ3RoLGcucHVzaChiLl95PWZ1bmN0aW9uKCl7dmFyIGEsZCxlLGY7Zm9yKGU9Yi55LGY9W10sYT0wLGQ9ZS5sZW5ndGg7ZD5hO2ErKyljPWVbYV0sbnVsbCE9Yz9mLnB1c2godGhpcy50cmFuc1koYykpOmYucHVzaChudWxsKTtyZXR1cm4gZn0uY2FsbCh0aGlzKSk7cmV0dXJuIGd9LGQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4oKGE9dGhpcy5vcHRpb25zLmF4ZXMpPT09ITB8fFwiYm90aFwiPT09YXx8XCJ4XCI9PT1hKSYmdGhpcy5kcmF3WEF4aXMoKSx0aGlzLmRyYXdTZXJpZXMoKX0sZC5wcm90b3R5cGUuZHJhd1hBeGlzPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGo9dGhpcy5ib3R0b20rKHRoaXMub3B0aW9ucy54QXhpc0xhYmVsVG9wUGFkZGluZ3x8dGhpcy5vcHRpb25zLnBhZGRpbmcvMiksZz1udWxsLGY9bnVsbCxtPVtdLGE9az0wLGw9dGhpcy5kYXRhLmxlbmd0aDtsPj0wP2w+azprPmw7YT1sPj0wPysrazotLWspaD10aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aC0xLWFdLGI9dGhpcy5kcmF3WEF4aXNMYWJlbChoLl94LGosaC5sYWJlbCksaT1iLmdldEJCb3goKSxiLnRyYW5zZm9ybShcInJcIistdGhpcy5vcHRpb25zLnhMYWJlbEFuZ2xlKSxjPWIuZ2V0QkJveCgpLGIudHJhbnNmb3JtKFwidDAsXCIrYy5oZWlnaHQvMitcIi4uLlwiKSwwIT09dGhpcy5vcHRpb25zLnhMYWJlbEFuZ2xlJiYoZT0tLjUqaS53aWR0aCpNYXRoLmNvcyh0aGlzLm9wdGlvbnMueExhYmVsQW5nbGUqTWF0aC5QSS8xODApLGIudHJhbnNmb3JtKFwidFwiK2UrXCIsMC4uLlwiKSksKG51bGw9PWd8fGc+PWMueCtjLndpZHRofHxudWxsIT1mJiZmPj1jLngpJiZjLng+PTAmJmMueCtjLndpZHRoPHRoaXMuZWwud2lkdGgoKT8oMCE9PXRoaXMub3B0aW9ucy54TGFiZWxBbmdsZSYmKGQ9MS4yNSp0aGlzLm9wdGlvbnMuZ3JpZFRleHRTaXplL01hdGguc2luKHRoaXMub3B0aW9ucy54TGFiZWxBbmdsZSpNYXRoLlBJLzE4MCksZj1jLngtZCksbS5wdXNoKGc9Yy54LXRoaXMub3B0aW9ucy54TGFiZWxNYXJnaW4pKTptLnB1c2goYi5yZW1vdmUoKSk7cmV0dXJuIG19LGQucHJvdG90eXBlLmRyYXdTZXJpZXM9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87cmV0dXJuIGM9dGhpcy53aWR0aC90aGlzLm9wdGlvbnMuZGF0YS5sZW5ndGgsaD10aGlzLm9wdGlvbnMuc3RhY2tlZD8xOnRoaXMub3B0aW9ucy55a2V5cy5sZW5ndGgsYT0oYyp0aGlzLm9wdGlvbnMuYmFyU2l6ZVJhdGlvLXRoaXMub3B0aW9ucy5iYXJHYXAqKGgtMSkpL2gsdGhpcy5vcHRpb25zLmJhclNpemUmJihhPU1hdGgubWluKGEsdGhpcy5vcHRpb25zLmJhclNpemUpKSxsPWMtYSpoLXRoaXMub3B0aW9ucy5iYXJHYXAqKGgtMSksZz1sLzIsbz10aGlzLnltaW48PTAmJnRoaXMueW1heD49MD90aGlzLnRyYW5zWSgwKTpudWxsLHRoaXMuYmFycz1mdW5jdGlvbigpe3ZhciBoLGwscCxxO2ZvcihwPXRoaXMuZGF0YSxxPVtdLGQ9aD0wLGw9cC5sZW5ndGg7bD5oO2Q9KytoKWk9cFtkXSxlPTAscS5wdXNoKGZ1bmN0aW9uKCl7dmFyIGgsbCxwLHE7Zm9yKHA9aS5feSxxPVtdLGo9aD0wLGw9cC5sZW5ndGg7bD5oO2o9KytoKW49cFtqXSxudWxsIT09bj8obz8obT1NYXRoLm1pbihuLG8pLGI9TWF0aC5tYXgobixvKSk6KG09bixiPXRoaXMuYm90dG9tKSxmPXRoaXMubGVmdCtkKmMrZyx0aGlzLm9wdGlvbnMuc3RhY2tlZHx8KGYrPWoqKGErdGhpcy5vcHRpb25zLmJhckdhcCkpLGs9Yi1tLHRoaXMub3B0aW9ucy52ZXJ0aWNhbEdyaWRDb25kaXRpb24mJnRoaXMub3B0aW9ucy52ZXJ0aWNhbEdyaWRDb25kaXRpb24oaS54KSYmdGhpcy5kcmF3QmFyKHRoaXMubGVmdCtkKmMsdGhpcy50b3AsYyxNYXRoLmFicyh0aGlzLnRvcC10aGlzLmJvdHRvbSksdGhpcy5vcHRpb25zLnZlcnRpY2FsR3JpZENvbG9yLHRoaXMub3B0aW9ucy52ZXJ0aWNhbEdyaWRPcGFjaXR5LHRoaXMub3B0aW9ucy5iYXJSYWRpdXMpLHRoaXMub3B0aW9ucy5zdGFja2VkJiYobS09ZSksdGhpcy5kcmF3QmFyKGYsbSxhLGssdGhpcy5jb2xvckZvcihpLGosXCJiYXJcIiksdGhpcy5vcHRpb25zLmJhck9wYWNpdHksdGhpcy5vcHRpb25zLmJhclJhZGl1cykscS5wdXNoKGUrPWspKTpxLnB1c2gobnVsbCk7cmV0dXJuIHF9LmNhbGwodGhpcykpO3JldHVybiBxfS5jYWxsKHRoaXMpfSxkLnByb3RvdHlwZS5jb2xvckZvcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuYmFyQ29sb3JzPyhkPXt4OmEueCx5OmEueVtiXSxsYWJlbDphLmxhYmVsfSxlPXtpbmRleDpiLGtleTp0aGlzLm9wdGlvbnMueWtleXNbYl0sbGFiZWw6dGhpcy5vcHRpb25zLmxhYmVsc1tiXX0sdGhpcy5vcHRpb25zLmJhckNvbG9ycy5jYWxsKHRoaXMsZCxlLGMpKTp0aGlzLm9wdGlvbnMuYmFyQ29sb3JzW2IldGhpcy5vcHRpb25zLmJhckNvbG9ycy5sZW5ndGhdfSxkLnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKGEpe3JldHVybiAwPT09dGhpcy5kYXRhLmxlbmd0aD9udWxsOihhPU1hdGgubWF4KE1hdGgubWluKGEsdGhpcy5yaWdodCksdGhpcy5sZWZ0KSxNYXRoLm1pbih0aGlzLmRhdGEubGVuZ3RoLTEsTWF0aC5mbG9vcigoYS10aGlzLmxlZnQpLyh0aGlzLndpZHRoL3RoaXMuZGF0YS5sZW5ndGgpKSkpfSxkLnByb3RvdHlwZS5vbkdyaWRDbGljaz1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBjPXRoaXMuaGl0VGVzdChhKSx0aGlzLmZpcmUoXCJjbGlja1wiLGMsdGhpcy5kYXRhW2NdLnNyYyxhLGIpfSxkLnByb3RvdHlwZS5vbkhvdmVyTW92ZT1mdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBiPXRoaXMuaGl0VGVzdChhKSwoYz10aGlzLmhvdmVyKS51cGRhdGUuYXBwbHkoYyx0aGlzLmhvdmVyQ29udGVudEZvclJvdyhiKSl9LGQucHJvdG90eXBlLm9uSG92ZXJPdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVIb3ZlciE9PSExP3RoaXMuaG92ZXIuaGlkZSgpOnZvaWQgMH0sZC5wcm90b3R5cGUuaG92ZXJDb250ZW50Rm9yUm93PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7Zm9yKGQ9dGhpcy5kYXRhW2FdLGI9XCI8ZGl2IGNsYXNzPSdtb3JyaXMtaG92ZXItcm93LWxhYmVsJz5cIitkLmxhYmVsK1wiPC9kaXY+XCIsaT1kLnksYz1nPTAsaD1pLmxlbmd0aDtoPmc7Yz0rK2cpZj1pW2NdLGIrPVwiPGRpdiBjbGFzcz0nbW9ycmlzLWhvdmVyLXBvaW50JyBzdHlsZT0nY29sb3I6IFwiK3RoaXMuY29sb3JGb3IoZCxjLFwibGFiZWxcIikrXCInPlxcbiAgXCIrdGhpcy5vcHRpb25zLmxhYmVsc1tjXStcIjpcXG4gIFwiK3RoaXMueUxhYmVsRm9ybWF0KGYpK1wiXFxuPC9kaXY+XCI7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmhvdmVyQ2FsbGJhY2smJihiPXRoaXMub3B0aW9ucy5ob3ZlckNhbGxiYWNrKGEsdGhpcy5vcHRpb25zLGIsZC5zcmMpKSxlPXRoaXMubGVmdCsoYSsuNSkqdGhpcy53aWR0aC90aGlzLmRhdGEubGVuZ3RoLFtiLGVdfSxkLnByb3RvdHlwZS5kcmF3WEF4aXNMYWJlbD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGQ9dGhpcy5yYXBoYWVsLnRleHQoYSxiLGMpLmF0dHIoXCJmb250LXNpemVcIix0aGlzLm9wdGlvbnMuZ3JpZFRleHRTaXplKS5hdHRyKFwiZm9udC1mYW1pbHlcIix0aGlzLm9wdGlvbnMuZ3JpZFRleHRGYW1pbHkpLmF0dHIoXCJmb250LXdlaWdodFwiLHRoaXMub3B0aW9ucy5ncmlkVGV4dFdlaWdodCkuYXR0cihcImZpbGxcIix0aGlzLm9wdGlvbnMuZ3JpZFRleHRDb2xvcil9LGQucHJvdG90eXBlLmRyYXdCYXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGgsaTtyZXR1cm4gaD1NYXRoLm1heC5hcHBseShNYXRoLGcpLGk9MD09PWh8fGg+ZD90aGlzLnJhcGhhZWwucmVjdChhLGIsYyxkKTp0aGlzLnJhcGhhZWwucGF0aCh0aGlzLnJvdW5kZWRSZWN0KGEsYixjLGQsZykpLGkuYXR0cihcImZpbGxcIixlKS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsZikuYXR0cihcInN0cm9rZVwiLFwibm9uZVwiKX0sZC5wcm90b3R5cGUucm91bmRlZFJlY3Q9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gbnVsbD09ZSYmKGU9WzAsMCwwLDBdKSxbXCJNXCIsYSxlWzBdK2IsXCJRXCIsYSxiLGErZVswXSxiLFwiTFwiLGErYy1lWzFdLGIsXCJRXCIsYStjLGIsYStjLGIrZVsxXSxcIkxcIixhK2MsYitkLWVbMl0sXCJRXCIsYStjLGIrZCxhK2MtZVsyXSxiK2QsXCJMXCIsYStlWzNdLGIrZCxcIlFcIixhLGIrZCxhLGIrZC1lWzNdLFwiWlwiXX0sZH0oYi5HcmlkKSxiLkRvbnV0PWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoYyl7dGhpcy5yZXNpemVIYW5kbGVyPWYodGhpcy5yZXNpemVIYW5kbGVyLHRoaXMpLHRoaXMuc2VsZWN0PWYodGhpcy5zZWxlY3QsdGhpcyksdGhpcy5jbGljaz1mKHRoaXMuY2xpY2ssdGhpcyk7dmFyIGQ9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBiLkRvbnV0KSlyZXR1cm4gbmV3IGIuRG9udXQoYyk7aWYodGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdHMsYyksdGhpcy5lbD1cInN0cmluZ1wiPT10eXBlb2YgYy5lbGVtZW50P2EoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYy5lbGVtZW50KSk6YShjLmVsZW1lbnQpLG51bGw9PT10aGlzLmVsfHwwPT09dGhpcy5lbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiR3JhcGggcGxhY2Vob2xkZXIgbm90IGZvdW5kLlwiKTt2b2lkIDAhPT1jLmRhdGEmJjAhPT1jLmRhdGEubGVuZ3RoJiYodGhpcy5yYXBoYWVsPW5ldyBSYXBoYWVsKHRoaXMuZWxbMF0pLHRoaXMub3B0aW9ucy5yZXNpemUmJmEod2luZG93KS5iaW5kKFwicmVzaXplXCIsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ZC50aW1lb3V0SWQmJndpbmRvdy5jbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLGQudGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KGQucmVzaXplSGFuZGxlciwxMDApfSksdGhpcy5zZXREYXRhKGMuZGF0YSkpfXJldHVybiBoKGQsYyksZC5wcm90b3R5cGUuZGVmYXVsdHM9e2NvbG9yczpbXCIjMEI2MkE0XCIsXCIjMzk4MEI1XCIsXCIjNjc5REM2XCIsXCIjOTVCQkQ3XCIsXCIjQjBDQ0UxXCIsXCIjMDk1NzkxXCIsXCIjMDk1MDg1XCIsXCIjMDgzRTY3XCIsXCIjMDUyQzQ4XCIsXCIjMDQyMTM1XCJdLGJhY2tncm91bmRDb2xvcjpcIiNGRkZGRkZcIixsYWJlbENvbG9yOlwiIzAwMDAwMFwiLGZvcm1hdHRlcjpiLmNvbW1hcyxyZXNpemU6ITF9LGQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3ZhciBhLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LHg7Zm9yKHRoaXMucmFwaGFlbC5jbGVhcigpLGM9dGhpcy5lbC53aWR0aCgpLzIsZD10aGlzLmVsLmhlaWdodCgpLzIsbj0oTWF0aC5taW4oYyxkKS0xMCkvMyxsPTAsdT10aGlzLnZhbHVlcyxvPTAscj11Lmxlbmd0aDtyPm87bysrKW09dVtvXSxsKz1tO2ZvcihpPTUvKDIqbiksYT0xLjk5OTkqTWF0aC5QSS1pKnRoaXMuZGF0YS5sZW5ndGgsZz0wLGY9MCx0aGlzLnNlZ21lbnRzPVtdLHY9dGhpcy52YWx1ZXMsZT1wPTAscz12Lmxlbmd0aDtzPnA7ZT0rK3ApbT12W2VdLGo9ZytpK2EqKG0vbCksaz1uZXcgYi5Eb251dFNlZ21lbnQoYyxkLDIqbixuLGcsaix0aGlzLmRhdGFbZV0uY29sb3J8fHRoaXMub3B0aW9ucy5jb2xvcnNbZiV0aGlzLm9wdGlvbnMuY29sb3JzLmxlbmd0aF0sdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvcixmLHRoaXMucmFwaGFlbCksay5yZW5kZXIoKSx0aGlzLnNlZ21lbnRzLnB1c2goayksay5vbihcImhvdmVyXCIsdGhpcy5zZWxlY3QpLGsub24oXCJjbGlja1wiLHRoaXMuY2xpY2spLGc9aixmKz0xO2Zvcih0aGlzLnRleHQxPXRoaXMuZHJhd0VtcHR5RG9udXRMYWJlbChjLGQtMTAsdGhpcy5vcHRpb25zLmxhYmVsQ29sb3IsMTUsODAwKSx0aGlzLnRleHQyPXRoaXMuZHJhd0VtcHR5RG9udXRMYWJlbChjLGQrMTAsdGhpcy5vcHRpb25zLmxhYmVsQ29sb3IsMTQpLGg9TWF0aC5tYXguYXBwbHkoTWF0aCx0aGlzLnZhbHVlcyksZj0wLHc9dGhpcy52YWx1ZXMseD1bXSxxPTAsdD13Lmxlbmd0aDt0PnE7cSsrKXtpZihtPXdbcV0sbT09PWgpe3RoaXMuc2VsZWN0KGYpO1xuYnJlYWt9eC5wdXNoKGYrPTEpfXJldHVybiB4fSxkLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiB0aGlzLmRhdGE9YSx0aGlzLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhLGMsZCxlO2ZvcihkPXRoaXMuZGF0YSxlPVtdLGE9MCxjPWQubGVuZ3RoO2M+YTthKyspYj1kW2FdLGUucHVzaChwYXJzZUZsb2F0KGIudmFsdWUpKTtyZXR1cm4gZX0uY2FsbCh0aGlzKSx0aGlzLnJlZHJhdygpfSxkLnByb3RvdHlwZS5jbGljaz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5maXJlKFwiY2xpY2tcIixhLHRoaXMuZGF0YVthXSl9LGQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGc7Zm9yKGc9dGhpcy5zZWdtZW50cyxlPTAsZj1nLmxlbmd0aDtmPmU7ZSsrKWM9Z1tlXSxjLmRlc2VsZWN0KCk7cmV0dXJuIGQ9dGhpcy5zZWdtZW50c1thXSxkLnNlbGVjdCgpLGI9dGhpcy5kYXRhW2FdLHRoaXMuc2V0TGFiZWxzKGIubGFiZWwsdGhpcy5vcHRpb25zLmZvcm1hdHRlcihiLnZhbHVlLGIpKX0sZC5wcm90b3R5cGUuc2V0TGFiZWxzPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtyZXR1cm4gYz0yKihNYXRoLm1pbih0aGlzLmVsLndpZHRoKCkvMix0aGlzLmVsLmhlaWdodCgpLzIpLTEwKS8zLGY9MS44KmMsZT1jLzIsZD1jLzMsdGhpcy50ZXh0MS5hdHRyKHt0ZXh0OmEsdHJhbnNmb3JtOlwiXCJ9KSxnPXRoaXMudGV4dDEuZ2V0QkJveCgpLGg9TWF0aC5taW4oZi9nLndpZHRoLGUvZy5oZWlnaHQpLHRoaXMudGV4dDEuYXR0cih7dHJhbnNmb3JtOlwiU1wiK2grXCIsXCIraCtcIixcIisoZy54K2cud2lkdGgvMikrXCIsXCIrKGcueStnLmhlaWdodCl9KSx0aGlzLnRleHQyLmF0dHIoe3RleHQ6Yix0cmFuc2Zvcm06XCJcIn0pLGk9dGhpcy50ZXh0Mi5nZXRCQm94KCksaj1NYXRoLm1pbihmL2kud2lkdGgsZC9pLmhlaWdodCksdGhpcy50ZXh0Mi5hdHRyKHt0cmFuc2Zvcm06XCJTXCIraitcIixcIitqK1wiLFwiKyhpLngraS53aWR0aC8yKStcIixcIitpLnl9KX0sZC5wcm90b3R5cGUuZHJhd0VtcHR5RG9udXRMYWJlbD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmO3JldHVybiBmPXRoaXMucmFwaGFlbC50ZXh0KGEsYixcIlwiKS5hdHRyKFwiZm9udC1zaXplXCIsZCkuYXR0cihcImZpbGxcIixjKSxudWxsIT1lJiZmLmF0dHIoXCJmb250LXdlaWdodFwiLGUpLGZ9LGQucHJvdG90eXBlLnJlc2l6ZUhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aW1lb3V0SWQ9bnVsbCx0aGlzLnJhcGhhZWwuc2V0U2l6ZSh0aGlzLmVsLndpZHRoKCksdGhpcy5lbC5oZWlnaHQoKSksdGhpcy5yZWRyYXcoKX0sZH0oYi5FdmVudEVtaXR0ZXIpLGIuRG9udXRTZWdtZW50PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGMsZCxlLGcsaCxpLGosayl7dGhpcy5jeD1hLHRoaXMuY3k9Yix0aGlzLmlubmVyPWMsdGhpcy5vdXRlcj1kLHRoaXMuY29sb3I9aCx0aGlzLmJhY2tncm91bmRDb2xvcj1pLHRoaXMuaW5kZXg9aix0aGlzLnJhcGhhZWw9ayx0aGlzLmRlc2VsZWN0PWYodGhpcy5kZXNlbGVjdCx0aGlzKSx0aGlzLnNlbGVjdD1mKHRoaXMuc2VsZWN0LHRoaXMpLHRoaXMuc2luX3AwPU1hdGguc2luKGUpLHRoaXMuY29zX3AwPU1hdGguY29zKGUpLHRoaXMuc2luX3AxPU1hdGguc2luKGcpLHRoaXMuY29zX3AxPU1hdGguY29zKGcpLHRoaXMuaXNfbG9uZz1nLWU+TWF0aC5QST8xOjAsdGhpcy5wYXRoPXRoaXMuY2FsY1NlZ21lbnQodGhpcy5pbm5lciszLHRoaXMuaW5uZXIrdGhpcy5vdXRlci01KSx0aGlzLnNlbGVjdGVkUGF0aD10aGlzLmNhbGNTZWdtZW50KHRoaXMuaW5uZXIrMyx0aGlzLmlubmVyK3RoaXMub3V0ZXIpLHRoaXMuaGlsaWdodD10aGlzLmNhbGNBcmModGhpcy5pbm5lcil9cmV0dXJuIGgoYixhKSxiLnByb3RvdHlwZS5jYWxjQXJjUG9pbnRzPWZ1bmN0aW9uKGEpe3JldHVyblt0aGlzLmN4K2EqdGhpcy5zaW5fcDAsdGhpcy5jeSthKnRoaXMuY29zX3AwLHRoaXMuY3grYSp0aGlzLnNpbl9wMSx0aGlzLmN5K2EqdGhpcy5jb3NfcDFdfSxiLnByb3RvdHlwZS5jYWxjU2VnbWVudD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO3JldHVybiBrPXRoaXMuY2FsY0FyY1BvaW50cyhhKSxjPWtbMF0sZT1rWzFdLGQ9a1syXSxmPWtbM10sbD10aGlzLmNhbGNBcmNQb2ludHMoYiksZz1sWzBdLGk9bFsxXSxoPWxbMl0saj1sWzNdLFwiTVwiK2MrXCIsXCIrZSsoXCJBXCIrYStcIixcIithK1wiLDAsXCIrdGhpcy5pc19sb25nK1wiLDAsXCIrZCtcIixcIitmKSsoXCJMXCIraCtcIixcIitqKSsoXCJBXCIrYitcIixcIitiK1wiLDAsXCIrdGhpcy5pc19sb25nK1wiLDEsXCIrZytcIixcIitpKStcIlpcIn0sYi5wcm90b3R5cGUuY2FsY0FyYz1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmO3JldHVybiBmPXRoaXMuY2FsY0FyY1BvaW50cyhhKSxiPWZbMF0sZD1mWzFdLGM9ZlsyXSxlPWZbM10sXCJNXCIrYitcIixcIitkKyhcIkFcIithK1wiLFwiK2ErXCIsMCxcIit0aGlzLmlzX2xvbmcrXCIsMCxcIitjK1wiLFwiK2UpfSxiLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiB0aGlzLmFyYz10aGlzLmRyYXdEb251dEFyYyh0aGlzLmhpbGlnaHQsdGhpcy5jb2xvciksdGhpcy5zZWc9dGhpcy5kcmF3RG9udXRTZWdtZW50KHRoaXMucGF0aCx0aGlzLmNvbG9yLHRoaXMuYmFja2dyb3VuZENvbG9yLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZmlyZShcImhvdmVyXCIsYS5pbmRleCl9LGZ1bmN0aW9uKCl7cmV0dXJuIGEuZmlyZShcImNsaWNrXCIsYS5pbmRleCl9KX0sYi5wcm90b3R5cGUuZHJhd0RvbnV0QXJjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucmFwaGFlbC5wYXRoKGEpLmF0dHIoe3N0cm9rZTpiLFwic3Ryb2tlLXdpZHRoXCI6MixvcGFjaXR5OjB9KX0sYi5wcm90b3R5cGUuZHJhd0RvbnV0U2VnbWVudD1mdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiB0aGlzLnJhcGhhZWwucGF0aChhKS5hdHRyKHtmaWxsOmIsc3Ryb2tlOmMsXCJzdHJva2Utd2lkdGhcIjozfSkuaG92ZXIoZCkuY2xpY2soZSl9LGIucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkP3ZvaWQgMDoodGhpcy5zZWcuYW5pbWF0ZSh7cGF0aDp0aGlzLnNlbGVjdGVkUGF0aH0sMTUwLFwiPD5cIiksdGhpcy5hcmMuYW5pbWF0ZSh7b3BhY2l0eToxfSwxNTAsXCI8PlwiKSx0aGlzLnNlbGVjdGVkPSEwKX0sYi5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZD8odGhpcy5zZWcuYW5pbWF0ZSh7cGF0aDp0aGlzLnBhdGh9LDE1MCxcIjw+XCIpLHRoaXMuYXJjLmFuaW1hdGUoe29wYWNpdHk6MH0sMTUwLFwiPD5cIiksdGhpcy5zZWxlY3RlZD0hMSk6dm9pZCAwfSxifShiLkV2ZW50RW1pdHRlcil9KS5jYWxsKHRoaXMpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9tb3JyaXMuanMvbW9ycmlzLm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNTJcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52\n"); +eval("/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(\"#\"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.7\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target).closest(\".btn\");b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(c.preventDefault(),d.is(\"input,button\")?d.trigger(\"focus\"):d.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.7\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger(\"focus\")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(\"click.bs.dropdown.data-api\",c).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(a){a.stopPropagation()}).on(\"click.bs.dropdown.data-api\",f,g.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",f,g.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",g.prototype.keydown)}(jQuery),+function(a){\"use strict\";function b(b,d){return this.each(function(){var e=a(this),f=e.data(\"bs.modal\"),g=a.extend({},c.DEFAULTS,e.data(),\"object\"==typeof b&&b);f||e.data(\"bs.modal\",f=new c(this,g)),\"string\"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event(\"show.bs.modal\",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){d.$element.one(\"mouseup.dismiss.bs.modal\",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass(\"fade\");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass(\"in\"),d.enforceFocus();var f=a.Event(\"shown.bs.modal\",{relatedTarget:b});e?d.$dialog.one(\"bsTransitionEnd\",function(){d.$element.trigger(\"focus\").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger(\"focus\").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(\"hide.bs.modal\"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger(\"focus\")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},c.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass(\"modal-open\"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger(\"hidden.bs.modal\")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+e).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!b)return;f?this.$backdrop.one(\"bsTransitionEnd\",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement(\"div\");a.className=\"modal-scrollbar-measure\",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(c){var d=a(this),e=d.attr(\"href\"),f=a(d.attr(\"data-target\")||e&&e.replace(/.*(?=#[^\\s]+$)/,\"\")),g=f.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is(\"a\")&&c.preventDefault(),f.one(\"show.bs.modal\",function(a){a.isDefaultPrevented()||f.one(\"hidden.bs.modal\",function(){d.is(\":visible\")&&d.trigger(\"focus\")})}),b.call(f,g,this)})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tooltip\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.tooltip\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",a,b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-m<o.top?\"bottom\":\"right\"==h&&k.right+l>o.width?\"left\":\"left\"==h&&k.left-l<o.left?\"right\":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger(\"shown.bs.\"+e.type),e.hoverState=null,\"out\"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css(\"margin-top\"),10),h=parseInt(d.css(\"margin-left\"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass(\"in\");var i=d[0].offsetWidth,j=d[0].offsetHeight;\"top\"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?\"offsetWidth\":\"offsetHeight\";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?\"left\":\"top\",50*(1-a/b)+\"%\").css(c?\"top\":\"left\",\"\")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](b),a.removeClass(\"fade in top bottom left right\")},c.prototype.hide=function(b){function d(){\"in\"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event(\"hide.bs.\"+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass(\"in\"),a.support.transition&&f.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(\"title\")||\"string\"!=typeof a.attr(\"data-original-title\"))&&a.attr(\"data-original-title\",a.attr(\"title\")||\"\").attr(\"title\",\"\")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d=\"BODY\"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return\"bottom\"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:\"top\"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:\"left\"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.7\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.7\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){\nthis.activeTarget=b,this.clear();var c=this.selector+'[data-target=\"'+b+'\"],'+this.selector+'[href=\"'+b+'\"]',d=a(c).parents(\"li\").addClass(\"active\");d.parent(\".dropdown-menu\").length&&(d=d.closest(\"li.dropdown\").addClass(\"active\")),d.trigger(\"activate.bs.scrollspy\")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on(\"load.bs.scrollspy.data-api\",function(){a('[data-spy=\"scroll\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tab\");e||d.data(\"bs.tab\",e=new c(this)),\"string\"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest(\"ul:not(.dropdown-menu)\"),d=b.data(\"target\");if(d||(d=b.attr(\"href\"),d=d&&d.replace(/.*(?=#[^\\s]*$)/,\"\")),!b.parent(\"li\").hasClass(\"active\")){var e=c.find(\".active:last a\"),f=a.Event(\"hide.bs.tab\",{relatedTarget:b[0]}),g=a.Event(\"show.bs.tab\",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest(\"li\"),c),this.activate(h,h.parent(),function(){e.trigger({type:\"hidden.bs.tab\",relatedTarget:b[0]}),b.trigger({type:\"shown.bs.tab\",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.7\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return e<c&&\"top\";if(\"bottom\"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&\"bottom\":!(e+g<=a-d)&&\"bottom\";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?\"top\":null!=d&&i+j>=a-d&&\"bottom\"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanM/OGZhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLGFBQWEsYUFBYSwyQ0FBMkMsZ0tBQWdLLHNCQUFzQixhQUFhLGFBQWEsNkNBQTZDLDZJQUE2SSw2Q0FBNkMsVUFBVSxTQUFTLHNDQUFzQyxnQkFBZ0IseUNBQXlDLEtBQUssRUFBRSxpQkFBaUIsMkNBQTJDLDRCQUE0QixjQUFjLGlGQUFpRiwyRkFBMkYsMEVBQTBFLEVBQUUsRUFBRSxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0QixtQ0FBbUMscUVBQXFFLEVBQUUsNkNBQTZDLCtCQUErQiwwRUFBMEUsYUFBYSwrQ0FBK0Msc0NBQXNDLDBEQUEwRCxzQkFBc0Isa1FBQWtRLGlCQUFpQix1RUFBdUUseUJBQXlCLCtEQUErRCxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0Qiw0REFBNEQsK0VBQStFLEVBQUUsb0JBQW9CLDJDQUEyQyxrQ0FBa0MsOEJBQThCLHlCQUF5QixrQ0FBa0MseUVBQXlFLHNGQUFzRiw0TEFBNEwsVUFBVSwrQkFBK0IsNERBQTRELGFBQWEsa0NBQWtDLHNVQUFzVSwrR0FBK0csa0JBQWtCLDBFQUEwRSwwQkFBMEIsaUZBQWlGLGtDQUFrQywrTUFBK00sOEZBQThGLDZFQUE2RSxFQUFFLHNCQUFzQixhQUFhLGNBQWMsNEJBQTRCLG1EQUFtRCwyRUFBMkUsMkdBQTJHLEVBQUUsb0JBQW9CLHVkQUF1ZCx3REFBd0QsK0NBQStDLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLG9CQUFvQixNQUFNLG9CQUFvQixNQUFNLGVBQWUsb0JBQW9CLCtCQUErQiw0TEFBNEwsc0NBQXNDLG1GQUFtRiwrQ0FBK0Msa0ZBQWtGLGtDQUFrQyxnREFBZ0QseUJBQXlCLDRCQUE0QixnRkFB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QUFjLDRCQUE0QiwyREFBMkQsaUVBQWlFLEVBQUUsb0JBQW9CLHdCQUF3QixpU0FBaVMscUVBQXFFLHVCQUF1Qix3Q0FBd0MsZ0ZBQWdGLGtEQUFrRCxnR0FBZ0csNkNBQTZDLHVEQUF1RCx3Q0FBd0MsOENBQThDLHFEQUFxRCx3REFBd0QsaUNBQWlDLG1EQUFtRCwrQ0FBK0Msc0NBQXNDLGlDQUFpQyxpSUFBaUksNkhBQTZILDZCQUE2QixvQkFBb0IsOENBQThDLG9EQUFvRCwwREFBMEQsbUtBQW1LLG1DQUFtQyxVQUFVLElBQUksaUJBQWlCLHVFQUF1RSx5QkFBeUIsZ0NBQWdDLHdDQUF3Qyx5QkFBeUIscUJBQXFCLGtIQUFrSCxFQUFFLEVBQUUiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEJvb3RzdHJhcCB2My4zLjcgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNiBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeVwiKTsrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9YS5mbi5qcXVlcnkuc3BsaXQoXCIgXCIpWzBdLnNwbGl0KFwiLlwiKTtpZihiWzBdPDImJmJbMV08OXx8MT09YlswXSYmOT09YlsxXSYmYlsyXTwxfHxiWzBdPjMpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gNFwiKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib290c3RyYXBcIiksYj17V2Via2l0VHJhbnNpdGlvbjpcIndlYmtpdFRyYW5zaXRpb25FbmRcIixNb3pUcmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwiLE9UcmFuc2l0aW9uOlwib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmRcIix0cmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwifTtmb3IodmFyIGMgaW4gYilpZih2b2lkIDAhPT1hLnN0eWxlW2NdKXJldHVybntlbmQ6YltjXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihiKXt2YXIgYz0hMSxkPXRoaXM7YSh0aGlzKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2M9ITB9KTt2YXIgZT1mdW5jdGlvbigpe2N8fGEoZCkudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfTtyZXR1cm4gc2V0VGltZW91dChlLGIpLHRoaXN9LGEoZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbj1iKCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oYil7aWYoYShiLnRhcmdldCkuaXModGhpcykpcmV0dXJuIGIuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5hbGVydFwiKTtlfHxjLmRhdGEoXCJicy5hbGVydFwiLGU9bmV3IGQodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdLmNhbGwoYyl9KX12YXIgYz0nW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oXCJjbGlja1wiLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj1cIjMuMy43XCIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBjKCl7Zy5kZXRhY2goKS50cmlnZ2VyKFwiY2xvc2VkLmJzLmFsZXJ0XCIpLnJlbW92ZSgpfXZhciBlPWEodGhpcyksZj1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtmfHwoZj1lLmF0dHIoXCJocmVmXCIpLGY9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZz1hKFwiI1wiPT09Zj9bXTpmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdChcIi5hbGVydFwiKSksZy50cmlnZ2VyKGI9YS5FdmVudChcImNsb3NlLmJzLmFsZXJ0XCIpKSxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZy5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKFwiZmFkZVwiKT9nLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6YygpKX07dmFyIGU9YS5mbi5hbGVydDthLmZuLmFsZXJ0PWIsYS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1kLGEuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFsZXJ0PWUsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5hbGVydC5kYXRhLWFwaVwiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuYnV0dG9uXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYnV0dG9uXCIsZT1uZXcgYyh0aGlzLGYpKSxcInRvZ2dsZVwiPT1iP2UudG9nZ2xlKCk6YiYmZS5zZXRTdGF0ZShiKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuaXNMb2FkaW5nPSExfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OlwibG9hZGluZy4uLlwifSxjLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihiKXt2YXIgYz1cImRpc2FibGVkXCIsZD10aGlzLiRlbGVtZW50LGU9ZC5pcyhcImlucHV0XCIpP1widmFsXCI6XCJodG1sXCIsZj1kLmRhdGEoKTtiKz1cIlRleHRcIixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKFwicmVzZXRUZXh0XCIsZFtlXSgpKSxzZXRUaW1lb3V0KGEucHJveHkoZnVuY3Rpb24oKXtkW2VdKG51bGw9PWZbYl0/dGhpcy5vcHRpb25zW2JdOmZbYl0pLFwibG9hZGluZ1RleHRcIj09Yj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcyhjKS5hdHRyKGMsYykucHJvcChjLCEwKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykucHJvcChjLCExKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWMucHJvcChcInR5cGVcIik/KGMucHJvcChcImNoZWNrZWRcIikmJihhPSExKSxiLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJhY3RpdmVcIikpOlwiY2hlY2tib3hcIj09Yy5wcm9wKFwidHlwZVwiKSYmKGMucHJvcChcImNoZWNrZWRcIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpJiYoYT0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSksYy5wcm9wKFwiY2hlY2tlZFwiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLGEmJmMudHJpZ2dlcihcImNoYW5nZVwiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtcHJlc3NlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpO2IuY2FsbChkLFwidG9nZ2xlXCIpLGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGQuaXMoXCJpbnB1dCxidXR0b25cIik/ZC50cmlnZ2VyKFwiZm9jdXNcIik6ZC5maW5kKFwiaW5wdXQ6dmlzaWJsZSxidXR0b246dmlzaWJsZVwiKS5maXJzdCgpLnRyaWdnZXIoXCJmb2N1c1wiKSl9KS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKS50b2dnbGVDbGFzcyhcImZvY3VzXCIsL15mb2N1cyhpbik/JC8udGVzdChiLnR5cGUpKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuY2Fyb3VzZWxcIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxnPVwic3RyaW5nXCI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoXCJicy5jYXJvdXNlbFwiLGU9bmV3IGModGhpcyxmKSksXCJudW1iZXJcIj09dHlwZW9mIGI/ZS50byhiKTpnP2VbZ10oKTpmLmludGVydmFsJiZlLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLFwiaG92ZXJcIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKFwibW91c2VlbnRlci5icy5jYXJvdXNlbFwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oXCIuaXRlbVwiKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRJdGVtSW5kZXgoYiksZD1cInByZXZcIj09YSYmMD09PWN8fFwibmV4dFwiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9XCJwcmV2XCI9PWE/LTE6MSxmPShjK2UpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZil9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtpZighKGE+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fGE8MCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2IudG8oYSl9KTpjPT1hP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYT5jP1wibmV4dFwiOlwicHJldlwiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zbGlkaW5nKXJldHVybiB0aGlzLnNsaWRlKFwibmV4dFwiKX0sYy5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJwcmV2XCIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxmPWR8fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihiLGUpLGc9dGhpcy5pbnRlcnZhbCxoPVwibmV4dFwiPT1iP1wibGVmdFwiOlwicmlnaHRcIixpPXRoaXM7aWYoZi5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBqPWZbMF0saz1hLkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBsPWEodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KGYpXSk7bCYmbC5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgbT1hLkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmh9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8oZi5hZGRDbGFzcyhiKSxmWzBdLm9mZnNldFdpZHRoLGUuYWRkQ2xhc3MoaCksZi5hZGRDbGFzcyhoKSxlLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksZS5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixoXS5qb2luKFwiIFwiKSksaS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLiRlbGVtZW50LnRyaWdnZXIobSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KGUucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksZi5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChkPWUuYXR0cihcImhyZWZcIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpO2lmKGYuaGFzQ2xhc3MoXCJjYXJvdXNlbFwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKFwiZGF0YS1zbGlkZS10b1wiKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8oaCksYy5wcmV2ZW50RGVmYXVsdCgpfX07YShkb2N1bWVudCkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGVdXCIsZSkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGUtdG9dXCIsZSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jYWxsKGMsYy5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHwoYz1iLmF0dHIoXCJocmVmXCIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIGMoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmL3Nob3d8aGlkZS8udGVzdChiKSYmKGYudG9nZ2xlPSExKSxlfHxjLmRhdGEoXCJicy5jb2xsYXBzZVwiLGU9bmV3IGQodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnK2IuaWQrJ1wiXSxbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXRhcmdldD1cIiMnK2IuaWQrJ1wiXScpLHRoaXMudHJhbnNpdGlvbmluZz1udWxsLHRoaXMub3B0aW9ucy5wYXJlbnQ/dGhpcy4kcGFyZW50PXRoaXMuZ2V0UGFyZW50KCk6dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy4kZWxlbWVudCx0aGlzLiR0cmlnZ2VyKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTtkLlZFUlNJT049XCIzLjMuN1wiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0zNTAsZC5ERUZBVUxUUz17dG9nZ2xlOiEwfSxkLnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwid2lkdGhcIik7cmV0dXJuIGE/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJ9LGQucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiYhdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKFwiLnBhbmVsXCIpLmNoaWxkcmVuKFwiLmluLCAuY29sbGFwc2luZ1wiKTtpZighKGUmJmUubGVuZ3RoJiYoYj1lLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpLCFmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtlJiZlLmxlbmd0aCYmKGMuY2FsbChlLFwiaGlkZVwiKSxifHxlLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbZ10oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgaD1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbZ10oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGddLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGI9YS5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLCFiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgYz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbY10odGhpcy4kZWxlbWVudFtjXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24/dm9pZCB0aGlzLiRlbGVtZW50W2NdKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoZSx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTplLmNhbGwodGhpcyl9fX0sZC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIik/XCJoaWRlXCI6XCJzaG93XCJdKCl9LGQucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyt0aGlzLm9wdGlvbnMucGFyZW50KydcIl0nKS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYyxkKXt2YXIgZT1hKGQpO3RoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGIoZSksZSl9LHRoaXMpKS5lbmQoKX0sZC5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5oYXNDbGFzcyhcImluXCIpO2EuYXR0cihcImFyaWEtZXhwYW5kZWRcIixjKSxiLnRvZ2dsZUNsYXNzKFwiY29sbGFwc2VkXCIsIWMpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsYyl9O3ZhciBlPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1jLGEuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9ZCxhLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jb2xsYXBzZT1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7ZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fGQucHJldmVudERlZmF1bHQoKTt2YXIgZj1iKGUpLGc9Zi5kYXRhKFwiYnMuY29sbGFwc2VcIiksaD1nP1widG9nZ2xlXCI6ZS5kYXRhKCk7Yy5jYWxsKGYsaCl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYz1iLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtjfHwoYz1iLmF0dHIoXCJocmVmXCIpLGM9YyYmLyNbQS1aYS16XS8udGVzdChjKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZD1jJiZhKGMpO3JldHVybiBkJiZkLmxlbmd0aD9kOmIucGFyZW50KCl9ZnVuY3Rpb24gYyhjKXtjJiYzPT09Yy53aGljaHx8KGEoZSkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWIoZCksZj17cmVsYXRlZFRhcmdldDp0aGlzfTtlLmhhc0NsYXNzKFwib3BlblwiKSYmKGMmJlwiY2xpY2tcIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudChcImhpZGUuYnMuZHJvcGRvd25cIixmKSksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGQuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLGUucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIoYS5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLGYpKSkpKX0pKX1mdW5jdGlvbiBkKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKFwiYnMuZHJvcGRvd25cIik7ZHx8Yy5kYXRhKFwiYnMuZHJvcGRvd25cIixkPW5ldyBnKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZFtiXS5jYWxsKGMpfSl9dmFyIGU9XCIuZHJvcGRvd24tYmFja2Ryb3BcIixmPSdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScsZz1mdW5jdGlvbihiKXthKGIpLm9uKFwiY2xpY2suYnMuZHJvcGRvd25cIix0aGlzLnRvZ2dsZSl9O2cuVkVSU0lPTj1cIjMuMy43XCIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIGY9YihlKSxnPWYuaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKGMoKSwhZyl7XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdChcIi5uYXZiYXItbmF2XCIpLmxlbmd0aCYmYShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcImRyb3Bkb3duLWJhY2tkcm9wXCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKFwiY2xpY2tcIixjKTt2YXIgaD17cmVsYXRlZFRhcmdldDp0aGlzfTtpZihmLnRyaWdnZXIoZD1hLkV2ZW50KFwic2hvdy5icy5kcm9wZG93blwiLGgpKSxkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtlLnRyaWdnZXIoXCJmb2N1c1wiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxmLnRvZ2dsZUNsYXNzKFwib3BlblwiKS50cmlnZ2VyKGEuRXZlbnQoXCJzaG93bi5icy5kcm9wZG93blwiLGgpKX1yZXR1cm4hMX19LGcucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oYyl7aWYoLygzOHw0MHwyN3wzMikvLnRlc3QoYy53aGljaCkmJiEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpKXt2YXIgZD1hKHRoaXMpO2lmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCFkLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBlPWIoZCksZz1lLmhhc0NsYXNzKFwib3BlblwiKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoXCJmb2N1c1wiKSxkLnRyaWdnZXIoXCJjbGlja1wiKTt2YXIgaD1cIiBsaTpub3QoLmRpc2FibGVkKTp2aXNpYmxlIGFcIixpPWUuZmluZChcIi5kcm9wZG93bi1tZW51XCIraCk7aWYoaS5sZW5ndGgpe3ZhciBqPWkuaW5kZXgoYy50YXJnZXQpOzM4PT1jLndoaWNoJiZqPjAmJmotLSw0MD09Yy53aGljaCYmajxpLmxlbmd0aC0xJiZqKyssfmp8fChqPTApLGkuZXEoaikudHJpZ2dlcihcImZvY3VzXCIpfX19fTt2YXIgaD1hLmZuLmRyb3Bkb3duO2EuZm4uZHJvcGRvd249ZCxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWcsYS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZHJvcGRvd249aCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsYykub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixmLGcucHJvdG90eXBlLmtleWRvd24pLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpLGY9ZS5kYXRhKFwiYnMubW9kYWxcIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoXCJicy5tb2RhbFwiLGY9bmV3IGModGhpcyxnKSksXCJzdHJpbmdcIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRkaWFsb2c9dGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWRpYWxvZ1wiKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtY29udGVudFwiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihcImxvYWRlZC5icy5tb2RhbFwiKX0sdGhpcykpfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoXCJzaG93LmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsYS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMuJGRpYWxvZy5vbihcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50Lm9uZShcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKTtkLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8ZC4kZWxlbWVudC5hcHBlbmRUbyhkLiRib2R5KSxkLiRlbGVtZW50LnNob3coKS5zY3JvbGxUb3AoMCksZC5hZGp1c3REaWFsb2coKSxlJiZkLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGQuJGVsZW1lbnQuYWRkQ2xhc3MoXCJpblwiKSxkLmVuZm9yY2VGb2N1cygpO3ZhciBmPWEuRXZlbnQoXCJzaG93bi5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmQuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudChcImhpZGUuYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLHRoaXMuaXNTaG93biYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImluXCIpLm9mZihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIikub2ZmKFwibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsXCIpLHRoaXMuJGRpYWxvZy5vZmYoXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnRoaXMuaGlkZU1vZGFsKCkpfSxjLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXthKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7ZG9jdW1lbnQ9PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0sdGhpcykpfSxjLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpfSxjLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/YSh3aW5kb3cpLm9uKFwicmVzaXplLmJzLm1vZGFsXCIsYS5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSx0aGlzKSk6YSh3aW5kb3cpLm9mZihcInJlc2l6ZS5icy5tb2RhbFwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcyhcIm1vZGFsLW9wZW5cIiksYS5yZXNldEFkanVzdG1lbnRzKCksYS5yZXNldFNjcm9sbGJhcigpLGEuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pfSxjLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxjLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/XCJmYWRlXCI6XCJcIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGY9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmU7aWYodGhpcy4kYmFja2Ryb3A9YShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcIm1vZGFsLWJhY2tkcm9wIFwiK2UpLmFwcGVuZFRvKHRoaXMuJGJvZHkpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrP3ZvaWQodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExKTp2b2lkKGEudGFyZ2V0PT09YS5jdXJyZW50VGFyZ2V0JiYoXCJzdGF0aWNcIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoXCJpblwiKSwhYilyZXR1cm47Zj90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixiKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmIoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcyhcImluXCIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGJhY2tkcm9wLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGcpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6ZygpfWVsc2UgYiYmYigpfSxjLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxjLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmYT90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6XCJcIn0pfSxjLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OlwiXCIscGFkZGluZ1JpZ2h0OlwiXCJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fFwiXCIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2EuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YSh0aGlzKSxlPWQuYXR0cihcImhyZWZcIiksZj1hKGQuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGc9Zi5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoXCJhXCIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24oYSl7YS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe2QuaXMoXCI6dmlzaWJsZVwiKSYmZC50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGIuY2FsbChmLGcsdGhpcyl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRvb2x0aXBcIiksZj1cIm9iamVjdFwiPT10eXBlb2YgYiYmYjshZSYmL2Rlc3Ryb3l8aGlkZS8udGVzdChiKXx8KGV8fGQuZGF0YShcImJzLnRvb2x0aXBcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLGEsYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZihcImNsaWNrXCI9PWcpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1nKXt2YXIgaD1cImhvdmVyXCI9PWc/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsaT1cImhvdmVyXCI9PWc/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24oaCtcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihpK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5ERUZBVUxUU30sYy5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihiKXtyZXR1cm4gYj1hLmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksYiksYi5kZWxheSYmXCJudW1iZXJcIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVtcImZvY3VzaW5cIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSEwKSxjLnRpcCgpLmhhc0NsYXNzKFwiaW5cIil8fFwiaW5cIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPVwiaW5cIik6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cImluXCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJpblwiPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtpZihjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlW1wiZm9jdXNvdXRcIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSExKSwhYy5pc0luU3RhdGVUcnVlKCkpcmV0dXJuIGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cIm91dFwiLGMub3B0aW9ucy5kZWxheSYmYy5vcHRpb25zLmRlbGF5LmhpZGU/dm9pZChjLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihiKTt2YXIgZD1hLmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy4kZWxlbWVudFswXSk7aWYoYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWQpcmV0dXJuO3ZhciBlPXRoaXMsZj10aGlzLnRpcCgpLGc9dGhpcy5nZXRVSUQodGhpcy50eXBlKTt0aGlzLnNldENvbnRlbnQoKSxmLmF0dHIoXCJpZFwiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9cXHM/YXV0bz9cXHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksXCJcIil8fFwidG9wXCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheTpcImJsb2NrXCJ9KS5hZGRDbGFzcyhoKS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLHRoaXMpLHRoaXMub3B0aW9ucy5jb250YWluZXI/Zi5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTpmLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImluc2VydGVkLmJzLlwiK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPVwiYm90dG9tXCI9PWgmJmsuYm90dG9tK20+by5ib3R0b20/XCJ0b3BcIjpcInRvcFwiPT1oJiZrLnRvcC1tPG8udG9wP1wiYm90dG9tXCI6XCJyaWdodFwiPT1oJiZrLnJpZ2h0K2w+by53aWR0aD9cImxlZnRcIjpcImxlZnRcIj09aCYmay5sZWZ0LWw8by5sZWZ0P1wicmlnaHRcIjpoLGYucmVtb3ZlQ2xhc3MobikuYWRkQ2xhc3MoaCl9dmFyIHA9dGhpcy5nZXRDYWxjdWxhdGVkT2Zmc2V0KGgsayxsLG0pO3RoaXMuYXBwbHlQbGFjZW1lbnQocCxoKTt2YXIgcT1mdW5jdGlvbigpe3ZhciBhPWUuaG92ZXJTdGF0ZTtlLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5cIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLFwib3V0XCI9PWEmJmUubGVhdmUoZSl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoXCJmYWRlXCIpP2Yub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcyhcIm1hcmdpbi10b3BcIiksMTApLGg9cGFyc2VJbnQoZC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwxMCk7aXNOYU4oZykmJihnPTApLGlzTmFOKGgpJiYoaD0wKSxiLnRvcCs9ZyxiLmxlZnQrPWgsYS5vZmZzZXQuc2V0T2Zmc2V0KGRbMF0sYS5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKGEpe2QuY3NzKHt0b3A6TWF0aC5yb3VuZChhLnRvcCksbGVmdDpNYXRoLnJvdW5kKGEubGVmdCl9KX19LGIpLDApLGQuYWRkQ2xhc3MoXCJpblwiKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7XCJ0b3BcIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjP1wibGVmdFwiOlwidG9wXCIsNTAqKDEtYS9iKStcIiVcIikuY3NzKGM/XCJ0b3BcIjpcImxlZnRcIixcIlwiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKFwiLnRvb2x0aXAtaW5uZXJcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEucmVtb3ZlQ2xhc3MoXCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodFwiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7XCJpblwiIT1lLmhvdmVyU3RhdGUmJmYuZGV0YWNoKCksZS4kZWxlbWVudCYmZS4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLlwiK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj1hKHRoaXMuJHRpcCksZz1hLkV2ZW50KFwiaGlkZS5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm4gZi5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKFwiZmFkZVwiKT9mLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXN9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPXR5cGVvZiBhLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpKSYmYS5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLGEuYXR0cihcInRpdGxlXCIpfHxcIlwiKS5hdHRyKFwidGl0bGVcIixcIlwiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9XCJCT0RZXCI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPXdpbmRvdy5TVkdFbGVtZW50JiZjIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQsZz1kP3t0b3A6MCxsZWZ0OjB9OmY/bnVsbDpiLm9mZnNldCgpLGg9e3Njcm9sbDpkP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOmIuc2Nyb2xsVG9wKCl9LGk9ZD97d2lkdGg6YSh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OmEod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gYS5leHRlbmQoe30sZSxoLGksZyl9LGMucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuXCJib3R0b21cIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwidG9wXCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwibGVmdFwiPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQtY306e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdCtiLndpZHRofX0sYy5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gZTt2YXIgZj10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGc9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QoYSkpe3ZhciBoPWIudG9wLWYtZy5zY3JvbGwsaT1iLnRvcCtmLWcuc2Nyb2xsK2Q7aDxnLnRvcD9lLnRvcD1nLnRvcC1oOmk+Zy50b3ArZy5oZWlnaHQmJihlLnRvcD1nLnRvcCtnLmhlaWdodC1pKX1lbHNle3ZhciBqPWIubGVmdC1mLGs9Yi5sZWZ0K2YrYztqPGcubGVmdD9lLmxlZnQ9Zy5sZWZ0LWo6az5nLnJpZ2h0JiYoZS5sZWZ0PWcubGVmdCtnLndpZHRoLWspfXJldHVybiBlfSxjLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kZWxlbWVudCxjPXRoaXMub3B0aW9ucztyZXR1cm4gYT1iLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPWEodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlK1wiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhXCIpO3JldHVybiB0aGlzLiR0aXB9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoXCIudG9vbHRpcC1hcnJvd1wiKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpKSxiPyhjLmluU3RhdGUuY2xpY2s9IWMuaW5TdGF0ZS5jbGljayxjLmlzSW5TdGF0ZVRydWUoKT9jLmVudGVyKGMpOmMubGVhdmUoYykpOmMudGlwKCkuaGFzQ2xhc3MoXCJpblwiKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKFwiLlwiK2EudHlwZSkucmVtb3ZlRGF0YShcImJzLlwiK2EudHlwZSksYS4kdGlwJiZhLiR0aXAuZGV0YWNoKCksYS4kdGlwPW51bGwsYS4kYXJyb3c9bnVsbCxhLiR2aWV3cG9ydD1udWxsLGEuJGVsZW1lbnQ9bnVsbH0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy5wb3BvdmVyXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7IWUmJi9kZXN0cm95fGhpZGUvLnRlc3QoYil8fChlfHxkLmRhdGEoXCJicy5wb3BvdmVyXCIsZT1uZXcgYyh0aGlzLGYpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KFwicG9wb3ZlclwiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKFwiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzXCIpO2MuVkVSU0lPTj1cIjMuMy43XCIsYy5ERUZBVUxUUz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDpcInJpZ2h0XCIsdHJpZ2dlcjpcImNsaWNrXCIsY29udGVudDpcIlwiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2Pid9KSxjLnByb3RvdHlwZT1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRpcCgpLGI9dGhpcy5nZXRUaXRsZSgpLGM9dGhpcy5nZXRDb250ZW50KCk7YS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgYz9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShjKSxhLnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksYS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHxhLmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuY29udGVudD9iLmNvbnRlbnQuY2FsbChhWzBdKTpiLmNvbnRlbnQpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYyxkKXt0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD1hKGEoYykuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIixhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gYyhjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnNjcm9sbHNweVwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YShcImJzLnNjcm9sbHNweVwiLGU9bmV3IGIodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGMmJmVbY10oKX0pfWIuVkVSU0lPTj1cIjMuMy43XCIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVwib2Zmc2V0XCIsZD0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxhLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYz1cInBvc2l0aW9uXCIsZD10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWIuZGF0YShcInRhcmdldFwiKXx8Yi5hdHRyKFwiaHJlZlwiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKFwiOnZpc2libGVcIikmJltbZltjXSgpLnRvcCtkLGVdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlvbigpe2Iub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGIudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGIucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxjPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0K2MtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxlPXRoaXMub2Zmc2V0cyxmPXRoaXMudGFyZ2V0cyxnPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1jJiZ0aGlzLnJlZnJlc2goKSxiPj1kKXJldHVybiBnIT0oYT1mW2YubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZShhKTtpZihnJiZiPGVbMF0pcmV0dXJuIHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5jbGVhcigpO2ZvcihhPWUubGVuZ3RoO2EtLTspZyE9ZlthXSYmYj49ZVthXSYmKHZvaWQgMD09PWVbYSsxXXx8YjxlW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXtcbnRoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrYisnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2IrJ1wiXScsZD1hKGMpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtkLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKGQ9ZC5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLGQudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRhYlwiKTtlfHxkLmRhdGEoXCJicy50YWJcIixlPW5ldyBjKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KFwidWw6bm90KC5kcm9wZG93bi1tZW51KVwiKSxkPWIuZGF0YShcInRhcmdldFwiKTtpZihkfHwoZD1iLmF0dHIoXCJocmVmXCIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKSwhYi5wYXJlbnQoXCJsaVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSl7dmFyIGU9Yy5maW5kKFwiLmFjdGl2ZTpsYXN0IGFcIiksZj1hLkV2ZW50KFwiaGlkZS5icy50YWJcIix7cmVsYXRlZFRhcmdldDpiWzBdfSksZz1hLkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDplWzBdfSk7aWYoZS50cmlnZ2VyKGYpLGIudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBoPWEoZCk7dGhpcy5hY3RpdmF0ZShiLmNsb3Nlc3QoXCJsaVwiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZTpcImhpZGRlbi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmJbMF19KSxiLnRyaWdnZXIoe3R5cGU6XCJzaG93bi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmVbMF19KX0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksYi5hZGRDbGFzcyhcImFjdGl2ZVwiKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSxoPyhiWzBdLm9mZnNldFdpZHRoLGIuYWRkQ2xhc3MoXCJpblwiKSk6Yi5yZW1vdmVDbGFzcyhcImZhZGVcIiksYi5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJmIuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLGUmJmUoKX12YXIgZz1kLmZpbmQoXCI+IC5hY3RpdmVcIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKFwiZmFkZVwiKXx8ISFkLmZpbmQoXCI+IC5mYWRlXCIpLmxlbmd0aCk7Zy5sZW5ndGgmJmg/Zy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKFwiaW5cIil9O3ZhciBkPWEuZm4udGFiO2EuZm4udGFiPWIsYS5mbi50YWIuQ29uc3RydWN0b3I9YyxhLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udGFiPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwic2hvd1wiKX07YShkb2N1bWVudCkub24oXCJjbGljay5icy50YWIuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJyxlKS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmFmZml4XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYWZmaXhcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKFwic2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpXCIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKFwiY2xpY2suYnMuYWZmaXguZGF0YS1hcGlcIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsdGhpcykpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLmFmZml4ZWQ9bnVsbCx0aGlzLnVucGluPW51bGwsdGhpcy5waW5uZWRPZmZzZXQ9bnVsbCx0aGlzLmNoZWNrUG9zaXRpb24oKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlJFU0VUPVwiYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbVwiLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmXCJ0b3BcIj09dGhpcy5hZmZpeGVkKXJldHVybiBlPGMmJlwidG9wXCI7aWYoXCJib3R0b21cIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jPyEoZSt0aGlzLnVucGluPD1mLnRvcCkmJlwiYm90dG9tXCI6IShlK2c8PWEtZCkmJlwiYm90dG9tXCI7dmFyIGg9bnVsbD09dGhpcy5hZmZpeGVkLGk9aD9lOmYudG9wLGo9aD9nOmI7cmV0dXJuIG51bGwhPWMmJmU8PWM/XCJ0b3BcIjpudWxsIT1kJiZpK2o+PWEtZCYmXCJib3R0b21cIn0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoXCJhZmZpeFwiKTt2YXIgYT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksYj10aGlzLiRlbGVtZW50Lm9mZnNldCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD1iLnRvcC1hfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikpe3ZhciBiPXRoaXMuJGVsZW1lbnQuaGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0LGU9ZC50b3AsZj1kLmJvdHRvbSxnPU1hdGgubWF4KGEoZG9jdW1lbnQpLmhlaWdodCgpLGEoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpO1wib2JqZWN0XCIhPXR5cGVvZiBkJiYoZj1lPWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWQudG9wKHRoaXMuJGVsZW1lbnQpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmJiYoZj1kLmJvdHRvbSh0aGlzLiRlbGVtZW50KSk7dmFyIGg9dGhpcy5nZXRTdGF0ZShnLGIsZSxmKTtpZih0aGlzLmFmZml4ZWQhPWgpe251bGwhPXRoaXMudW5waW4mJnRoaXMuJGVsZW1lbnQuY3NzKFwidG9wXCIsXCJcIik7dmFyIGk9XCJhZmZpeFwiKyhoP1wiLVwiK2g6XCJcIiksaj1hLkV2ZW50KGkrXCIuYnMuYWZmaXhcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGopLGouaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuYWZmaXhlZD1oLHRoaXMudW5waW49XCJib3R0b21cIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZShcImFmZml4XCIsXCJhZmZpeGVkXCIpK1wiLmJzLmFmZml4XCIpfVwiYm90dG9tXCI9PWgmJnRoaXMuJGVsZW1lbnQub2Zmc2V0KHt0b3A6Zy1iLWZ9KX19O3ZhciBkPWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1iLGEuZm4uYWZmaXguQ29uc3RydWN0b3I9YyxhLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hZmZpeD1kLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n"); /***/ }), -/* 53 */ + +/***/ 50: /***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* jquery.sparkline 2.1.3 - http://omnipotent.net/jquery.sparkline/ \n** Licensed under the New BSD License - see above site for details */\n\n(function(document,Math,undefined){(function(factory){if(true){!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))}else if(jQuery&&!jQuery.fn.sparkline){factory(jQuery)}})(function($){\"use strict\";var UNSET_OPTION={},getDefaults,createClass,SPFormat,clipval,quartile,normalizeValue,normalizeValues,remove,isNumber,all,sum,addCSS,ensureArray,formatNumber,RangeMap,MouseHandler,Tooltip,barHighlightMixin,line,bar,tristate,discrete,bullet,pie,box,defaultStyles,initStyles,VShape,VCanvas_base,VCanvas_canvas,VCanvas_vml,pending,shapeCount=0;getDefaults=function(){return{common:{type:\"line\",lineColor:\"#00f\",fillColor:\"#cdf\",defaultPixelsPerValue:3,width:\"auto\",height:\"auto\",composite:false,tagValuesAttribute:\"values\",tagOptionsPrefix:\"spark\",enableTagOptions:false,enableHighlight:true,highlightLighten:1.4,tooltipSkipNull:true,tooltipPrefix:\"\",tooltipSuffix:\"\",disableHiddenCheck:false,numberFormatter:false,numberDigitGroupCount:3,numberDigitGroupSep:\",\",numberDecimalMark:\".\",disableTooltips:false,disableInteraction:false},line:{spotColor:\"#f80\",highlightSpotColor:\"#5f5\",highlightLineColor:\"#f22\",spotRadius:1.5,minSpotColor:\"#f80\",maxSpotColor:\"#f80\",lineWidth:1,normalRangeMin:undefined,normalRangeMax:undefined,normalRangeColor:\"#ccc\",drawNormalOnTop:false,chartRangeMin:undefined,chartRangeMax:undefined,chartRangeMinX:undefined,chartRangeMaxX:undefined,tooltipFormat:new SPFormat('<span style=\"color: {{color}}\">●</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:\"#3366cc\",negBarColor:\"#f44\",stackedBarColor:[\"#3366cc\",\"#dc3912\",\"#ff9900\",\"#109618\",\"#66aa00\",\"#dd4477\",\"#0099c6\",\"#990099\"],zeroColor:undefined,nullColor:undefined,zeroAxis:true,barWidth:4,barSpacing:1,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:false,colorMap:undefined,tooltipFormat:new SPFormat('<span style=\"color: {{color}}\">●</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:\"#6f6\",negBarColor:\"#f44\",zeroBarColor:\"#999\",colorMap:{},tooltipFormat:new SPFormat('<span style=\"color: {{color}}\">●</span> {{value:map}}'),tooltipValueLookups:{map:{\"-1\":\"Loss\",0:\"Draw\",1:\"Win\"}}},discrete:{lineHeight:\"auto\",thresholdColor:undefined,thresholdValue:0,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:false,tooltipFormat:new SPFormat(\"{{prefix}}{{value}}{{suffix}}\")},bullet:{targetColor:\"#f33\",targetWidth:3,performanceColor:\"#33f\",rangeColors:[\"#d3dafe\",\"#a8b6ff\",\"#7f94ff\"],base:undefined,tooltipFormat:new SPFormat(\"{{fieldkey:fields}} - {{value}}\"),tooltipValueLookups:{fields:{r:\"Range\",p:\"Performance\",t:\"Target\"}}},pie:{offset:0,sliceColors:[\"#3366cc\",\"#dc3912\",\"#ff9900\",\"#109618\",\"#66aa00\",\"#dd4477\",\"#0099c6\",\"#990099\"],borderWidth:0,borderColor:\"#000\",tooltipFormat:new SPFormat('<span style=\"color: {{color}}\">●</span> {{value}} ({{percent.1}}%)')},box:{raw:false,boxLineColor:\"#000\",boxFillColor:\"#cdf\",whiskerColor:\"#000\",outlierLineColor:\"#333\",outlierFillColor:\"#fff\",medianColor:\"#f00\",showOutliers:true,outlierIQR:1.5,spotRadius:1.5,target:undefined,targetColor:\"#4a2\",chartRangeMax:undefined,chartRangeMin:undefined,tooltipFormat:new SPFormat(\"{{field:fields}}: {{value}}\"),tooltipFormatFieldlistKey:\"field\",tooltipValueLookups:{fields:{lq:\"Lower Quartile\",med:\"Median\",uq:\"Upper Quartile\",lo:\"Left Outlier\",ro:\"Right Outlier\",lw:\"Left Whisker\",rw:\"Right Whisker\"}}}}};defaultStyles=\".jqstooltip { \"+\"position: absolute;\"+\"left: 0px;\"+\"top: 0px;\"+\"visibility: hidden;\"+\"background: rgb(0, 0, 0) transparent;\"+\"background-color: rgba(0,0,0,0.6);\"+\"filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);\"+'-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";'+\"color: white;\"+\"font: 10px arial, san serif;\"+\"text-align: left;\"+\"white-space: nowrap;\"+\"padding: 5px;\"+\"border: 1px solid white;\"+\"box-sizing: content-box;\"+\"z-index: 10000;\"+\"}\"+\".jqsfield { \"+\"color: white;\"+\"font: 10px arial, san serif;\"+\"text-align: left;\"+\"}\";createClass=function(){var Class,args;Class=function(){this.init.apply(this,arguments)};if(arguments.length>1){if(arguments[0]){Class.prototype=$.extend(new arguments[0],arguments[arguments.length-1]);Class._super=arguments[0].prototype}else{Class.prototype=arguments[arguments.length-1]}if(arguments.length>2){args=Array.prototype.slice.call(arguments,1,-1);args.unshift(Class.prototype);$.extend.apply($,args)}}else{Class.prototype=arguments[0]}Class.prototype.cls=Class;return Class};$.SPFormatClass=SPFormat=createClass({fre:/\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,precre:/(\\w+)\\.(\\d+)/,init:function(format,fclass){this.format=format;this.fclass=fclass},render:function(fieldset,lookups,options){var self=this,fields=fieldset,match,token,lookupkey,fieldvalue,prec;return this.format.replace(this.fre,function(){var lookup;token=arguments[1];lookupkey=arguments[3];match=self.precre.exec(token);if(match){prec=match[2];token=match[1]}else{prec=false}fieldvalue=fields[token];if(fieldvalue===undefined){return\"\"}if(lookupkey&&lookups&&lookups[lookupkey]){lookup=lookups[lookupkey];if(lookup.get){return lookups[lookupkey].get(fieldvalue)||fieldvalue}else{return lookups[lookupkey][fieldvalue]||fieldvalue}}if(isNumber(fieldvalue)){if(options.get(\"numberFormatter\")){fieldvalue=options.get(\"numberFormatter\")(fieldvalue)}else{fieldvalue=formatNumber(fieldvalue,prec,options.get(\"numberDigitGroupCount\"),options.get(\"numberDigitGroupSep\"),options.get(\"numberDecimalMark\"))}}return fieldvalue})}});$.spformat=function(format,fclass){return new SPFormat(format,fclass)};clipval=function(val,min,max){if(val<min){return min}if(val>max){return max}return val};quartile=function(values,q){var vl;if(q===2){vl=Math.floor(values.length/2);return values.length%2?values[vl]:(values[vl-1]+values[vl])/2}else{if(values.length%2){vl=(values.length*q+q)/4;return vl%1?(values[Math.floor(vl)]+values[Math.floor(vl)-1])/2:values[vl-1]}else{vl=(values.length*q+2)/4;return vl%1?(values[Math.floor(vl)]+values[Math.floor(vl)-1])/2:values[vl-1]}}};normalizeValue=function(val){var nf;switch(val){case\"undefined\":val=undefined;break;case\"null\":val=null;break;case\"true\":val=true;break;case\"false\":val=false;break;default:nf=parseFloat(val);if(val==nf){val=nf}}return val};normalizeValues=function(vals){var i,result=[];for(i=vals.length;i--;){result[i]=normalizeValue(vals[i])}return result};remove=function(vals,filter){var i,vl,result=[];for(i=0,vl=vals.length;i<vl;i++){if(vals[i]!==filter){result.push(vals[i])}}return result};isNumber=function(num){return!isNaN(parseFloat(num))&&isFinite(num)};formatNumber=function(num,prec,groupsize,groupsep,decsep){var p,i;num=(prec===false?parseFloat(num).toString():num.toFixed(prec)).split(\"\");p=(p=$.inArray(\".\",num))<0?num.length:p;if(p<num.length){num[p]=decsep}for(i=p-groupsize;i>0;i-=groupsize){num.splice(i,0,groupsep)}return num.join(\"\")};all=function(val,arr,ignoreNull){var i;for(i=arr.length;i--;){if(ignoreNull&&arr[i]===null)continue;if(arr[i]!==val){return false}}return true};sum=function(vals){var total=0,i;for(i=vals.length;i--;){total+=typeof vals[i]===\"number\"?vals[i]:0}return total};ensureArray=function(val){return $.isArray(val)?val:[val]};addCSS=function(css){var tag,iefail;if(document.createStyleSheet){try{document.createStyleSheet().cssText=css;return}catch(e){iefail=true}}tag=document.createElement(\"style\");tag.type=\"text/css\";document.getElementsByTagName(\"head\")[0].appendChild(tag);if(iefail){document.styleSheets[document.styleSheets.length-1].cssText=css}else{tag[typeof document.body.style.WebkitAppearance==\"string\"?\"innerText\":\"innerHTML\"]=css}};$.fn.simpledraw=function(width,height,useExisting,interact){var target,mhandler;if(useExisting&&(target=this.data(\"_jqs_vcanvas\"))){return target}if($.fn.sparkline.canvas===false){return false}else if($.fn.sparkline.canvas===undefined){var el=document.createElement(\"canvas\");if(!!(el.getContext&&el.getContext(\"2d\"))){$.fn.sparkline.canvas=function(width,height,target,interact){return new VCanvas_canvas(width,height,target,interact)}}else if(document.namespaces&&!document.namespaces.v){document.namespaces.add(\"v\",\"urn:schemas-microsoft-com:vml\",\"#default#VML\");$.fn.sparkline.canvas=function(width,height,target,interact){return new VCanvas_vml(width,height,target)}}else{$.fn.sparkline.canvas=false;return false}}if(width===undefined){width=$(this).innerWidth()}if(height===undefined){height=$(this).innerHeight()}target=$.fn.sparkline.canvas(width,height,this,interact);mhandler=$(this).data(\"_jqs_mhandler\");if(mhandler){mhandler.registerCanvas(target)}return target};$.fn.cleardraw=function(){var target=this.data(\"_jqs_vcanvas\");if(target){target.reset()}};$.RangeMapClass=RangeMap=createClass({init:function(map){var key,range,rangelist=[];for(key in map){if(map.hasOwnProperty(key)&&typeof key===\"string\"&&key.indexOf(\":\")>-1){range=key.split(\":\");range[0]=range[0].length===0?-Infinity:parseFloat(range[0]);range[1]=range[1].length===0?Infinity:parseFloat(range[1]);range[2]=map[key];rangelist.push(range)}}this.map=map;this.rangelist=rangelist||false},get:function(value){var rangelist=this.rangelist,i,range,result;if((result=this.map[value])!==undefined){return result}if(rangelist){for(i=rangelist.length;i--;){range=rangelist[i];if(range[0]<=value&&range[1]>=value){return range[2]}}}return undefined}});$.range_map=function(map){return new RangeMap(map)};MouseHandler=createClass({init:function(el,options){var $el=$(el);this.$el=$el;this.options=options;this.currentPageX=0;this.currentPageY=0;this.el=el;this.splist=[];this.tooltip=null;this.over=false;this.displayTooltips=!options.get(\"disableTooltips\");this.highlightEnabled=!options.get(\"disableHighlight\")},registerSparkline:function(sp){this.splist.push(sp);if(this.over){this.updateDisplay()}},registerCanvas:function(canvas){var $canvas=$(canvas.canvas);this.canvas=canvas;this.$canvas=$canvas;$canvas.mouseenter($.proxy(this.mouseenter,this));$canvas.mouseleave($.proxy(this.mouseleave,this));$canvas.click($.proxy(this.mouseclick,this))},reset:function(removeTooltip){this.splist=[];if(this.tooltip&&removeTooltip){this.tooltip.remove();this.tooltip=undefined}},mouseclick:function(e){var clickEvent=$.Event(\"sparklineClick\");clickEvent.originalEvent=e;clickEvent.sparklines=this.splist;this.$el.trigger(clickEvent)},mouseenter:function(e){$(document.body).unbind(\"mousemove.jqs\");$(document.body).bind(\"mousemove.jqs\",$.proxy(this.mousemove,this));this.over=true;this.currentPageX=e.pageX;this.currentPageY=e.pageY;this.currentEl=e.target;if(!this.tooltip&&this.displayTooltips){this.tooltip=new Tooltip(this.options);this.tooltip.updatePosition(e.pageX,e.pageY)}this.updateDisplay()},mouseleave:function(){$(document.body).unbind(\"mousemove.jqs\");var splist=this.splist,spcount=splist.length,needsRefresh=false,sp,i;this.over=false;this.currentEl=null;if(this.tooltip){this.tooltip.remove();this.tooltip=null}for(i=0;i<spcount;i++){sp=splist[i];if(sp.clearRegionHighlight()){needsRefresh=true}}if(needsRefresh){this.canvas.render()}},mousemove:function(e){this.currentPageX=e.pageX;this.currentPageY=e.pageY;this.currentEl=e.target;if(this.tooltip){this.tooltip.updatePosition(e.pageX,e.pageY)}this.updateDisplay()},updateDisplay:function(){var splist=this.splist,spcount=splist.length,needsRefresh=false,offset=this.$canvas.offset(),localX=this.currentPageX-offset.left,localY=this.currentPageY-offset.top,tooltiphtml,sp,i,result,changeEvent;if(!this.over){return}for(i=0;i<spcount;i++){sp=splist[i];result=sp.setRegionHighlight(this.currentEl,localX,localY);if(result){needsRefresh=true}}if(needsRefresh){changeEvent=$.Event(\"sparklineRegionChange\");changeEvent.sparklines=this.splist;this.$el.trigger(changeEvent);if(this.tooltip){tooltiphtml=\"\";for(i=0;i<spcount;i++){sp=splist[i];tooltiphtml+=sp.getCurrentRegionTooltip()}this.tooltip.setContent(tooltiphtml)}if(!this.disableHighlight){this.canvas.render()}}if(result===null){this.mouseleave()}}});Tooltip=createClass({sizeStyle:\"position: static !important;\"+\"display: block !important;\"+\"visibility: hidden !important;\"+\"float: left !important;\",init:function(options){var tooltipClassname=options.get(\"tooltipClassname\",\"jqstooltip\"),sizetipStyle=this.sizeStyle,offset;this.container=options.get(\"tooltipContainer\")||document.body;this.tooltipOffsetX=options.get(\"tooltipOffsetX\",10);this.tooltipOffsetY=options.get(\"tooltipOffsetY\",12);$(\"#jqssizetip\").remove();$(\"#jqstooltip\").remove();this.sizetip=$(\"<div/>\",{id:\"jqssizetip\",style:sizetipStyle,\"class\":tooltipClassname});this.tooltip=$(\"<div/>\",{id:\"jqstooltip\",\"class\":tooltipClassname}).appendTo(this.container);offset=this.tooltip.offset();this.offsetLeft=offset.left;this.offsetTop=offset.top;this.hidden=true;$(window).unbind(\"resize.jqs scroll.jqs\");$(window).bind(\"resize.jqs scroll.jqs\",$.proxy(this.updateWindowDims,this));this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=$(window).scrollTop();this.scrollLeft=$(window).scrollLeft();this.scrollRight=this.scrollLeft+$(window).width();this.updatePosition()},getSize:function(content){this.sizetip.html(content).appendTo(this.container);this.width=this.sizetip.width()+1;this.height=this.sizetip.height();this.sizetip.remove()},setContent:function(content){if(!content){this.tooltip.css(\"visibility\",\"hidden\");this.hidden=true;return}this.getSize(content);this.tooltip.html(content).css({width:this.width,height:this.height,visibility:\"visible\"});if(this.hidden){this.hidden=false;this.updatePosition()}},updatePosition:function(x,y){if(x===undefined){if(this.mousex===undefined){return}x=this.mousex-this.offsetLeft;y=this.mousey-this.offsetTop}else{this.mousex=x=x-this.offsetLeft;this.mousey=y=y-this.offsetTop}if(!this.height||!this.width||this.hidden){return}y-=this.height+this.tooltipOffsetY;x+=this.tooltipOffsetX;if(y<this.scrollTop){y=this.scrollTop}if(x<this.scrollLeft){x=this.scrollLeft}else if(x+this.width>this.scrollRight){x=this.scrollRight-this.width}this.tooltip.css({left:x,top:y})},remove:function(){this.tooltip.remove();this.sizetip.remove();this.sizetip=this.tooltip=undefined;$(window).unbind(\"resize.jqs scroll.jqs\")}});initStyles=function(){addCSS(defaultStyles)};$(initStyles);pending=[];$.fn.sparkline=function(userValues,userOptions){return this.each(function(){var options=new $.fn.sparkline.options(this,userOptions),$this=$(this),render,i;render=function(){var values,width,height,tmp,mhandler,sp,vals;if(userValues===\"html\"||userValues===undefined){vals=this.getAttribute(options.get(\"tagValuesAttribute\"));if(vals===undefined||vals===null){vals=$this.html()}values=vals.replace(/(^\\s*<!--)|(-->\\s*$)|\\s+/g,\"\").split(\",\")}else{values=userValues}width=options.get(\"width\")===\"auto\"?values.length*options.get(\"defaultPixelsPerValue\"):options.get(\"width\");if(options.get(\"height\")===\"auto\"){if(!options.get(\"composite\")||!$.data(this,\"_jqs_vcanvas\")){tmp=document.createElement(\"span\");tmp.innerHTML=\"a\";$this.html(tmp);height=$(tmp).innerHeight()||$(tmp).height();$(tmp).remove();tmp=null}}else{height=options.get(\"height\")}if(!options.get(\"disableInteraction\")){mhandler=$.data(this,\"_jqs_mhandler\");if(!mhandler){mhandler=new MouseHandler(this,options);$.data(this,\"_jqs_mhandler\",mhandler)}else if(!options.get(\"composite\")){mhandler.reset()}}else{mhandler=false}if(options.get(\"composite\")&&!$.data(this,\"_jqs_vcanvas\")){if(!$.data(this,\"_jqs_errnotify\")){alert(\"Attempted to attach a composite sparkline to an element with no existing sparkline\");$.data(this,\"_jqs_errnotify\",true)}return}sp=new($.fn.sparkline[options.get(\"type\")])(this,values,options,width,height);sp.render();if(mhandler){mhandler.registerSparkline(sp)}};if($(this).html()&&!options.get(\"disableHiddenCheck\")&&$(this).is(\":hidden\")||!$(this).parents(\"body\").length){if(!options.get(\"composite\")&&$.data(this,\"_jqs_pending\")){for(i=pending.length;i;i--){if(pending[i-1][0]==this){pending.splice(i-1,1)}}}pending.push([this,render]);$.data(this,\"_jqs_pending\",true)}else{render.call(this)}})};$.fn.sparkline.defaults=getDefaults();$.sparkline_display_visible=function(){var el,i,pl;var done=[];for(i=0,pl=pending.length;i<pl;i++){el=pending[i][0];if($(el).is(\":visible\")&&!$(el).parents().is(\":hidden\")){pending[i][1].call(el);$.data(pending[i][0],\"_jqs_pending\",false);done.push(i)}else if(!$(el).closest(\"html\").length&&!$.data(el,\"_jqs_pending\")){$.data(pending[i][0],\"_jqs_pending\",false);done.push(i)}}for(i=done.length;i;i--){pending.splice(done[i-1],1)}};$.fn.sparkline.options=createClass({init:function(tag,userOptions){var extendedOptions,defaults,base,tagOptionType;this.userOptions=userOptions=userOptions||{};this.tag=tag;this.tagValCache={};defaults=$.fn.sparkline.defaults;base=defaults.common;this.tagOptionsPrefix=userOptions.enableTagOptions&&(userOptions.tagOptionsPrefix||base.tagOptionsPrefix);tagOptionType=this.getTagSetting(\"type\");if(tagOptionType===UNSET_OPTION){extendedOptions=defaults[userOptions.type||base.type]}else{extendedOptions=defaults[tagOptionType]}this.mergedOptions=$.extend({},base,extendedOptions,userOptions)},getTagSetting:function(key){var prefix=this.tagOptionsPrefix,val,i,pairs,keyval;if(prefix===false||prefix===undefined){return UNSET_OPTION}if(this.tagValCache.hasOwnProperty(key)){val=this.tagValCache.key}else{val=this.tag.getAttribute(prefix+key);if(val===undefined||val===null){val=UNSET_OPTION}else if(val.substr(0,1)===\"[\"){val=val.substr(1,val.length-2).split(\",\");for(i=val.length;i--;){val[i]=normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g,\"\"))}}else if(val.substr(0,1)===\"{\"){pairs=val.substr(1,val.length-2).split(\",\");val={};for(i=pairs.length;i--;){keyval=pairs[i].split(\":\",2);val[keyval[0].replace(/(^\\s*)|(\\s*$)/g,\"\")]=normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g,\"\"))}}else{val=normalizeValue(val)}this.tagValCache.key=val}return val},get:function(key,defaultval){var tagOption=this.getTagSetting(key),result;if(tagOption!==UNSET_OPTION){return tagOption}return(result=this.mergedOptions[key])===undefined?defaultval:result}});$.fn.sparkline._base=createClass({disabled:false,init:function(el,values,options,width,height){this.el=el;this.$el=$(el);this.values=values;this.options=options;this.width=width;this.height=height;this.currentRegion=undefined},initTarget:function(){var interactive=!this.options.get(\"disableInteraction\");if(!(this.target=this.$el.simpledraw(this.width,this.height,this.options.get(\"composite\"),interactive))){this.disabled=true}else{this.canvasWidth=this.target.pixelWidth;this.canvasHeight=this.target.pixelHeight}},render:function(){if(this.disabled){this.el.innerHTML=\"\";return false}return true},getRegion:function(x,y){},setRegionHighlight:function(el,x,y){var currentRegion=this.currentRegion,highlightEnabled=!this.options.get(\"disableHighlight\"),newRegion;if(x>this.canvasWidth||y>this.canvasHeight||x<0||y<0){return null}newRegion=this.getRegion(el,x,y);if(currentRegion!==newRegion){if(currentRegion!==undefined&&highlightEnabled){this.removeHighlight()}this.currentRegion=newRegion;if(newRegion!==undefined&&highlightEnabled){this.renderHighlight()}return true}return false},clearRegionHighlight:function(){if(this.currentRegion!==undefined){this.removeHighlight();this.currentRegion=undefined;return true}return false},renderHighlight:function(){this.changeHighlight(true)},removeHighlight:function(){this.changeHighlight(false)},changeHighlight:function(highlight){},getCurrentRegionTooltip:function(){var options=this.options,header=\"\",entries=[],fields,formats,formatlen,fclass,text,i,showFields,showFieldsKey,newFields,fv,formatter,format,fieldlen,j;if(this.currentRegion===undefined){return\"\"}fields=this.getCurrentRegionFields();formatter=options.get(\"tooltipFormatter\");if(formatter){return formatter(this,options,fields)}if(options.get(\"tooltipChartTitle\")){header+='<div class=\"jqs jqstitle\">'+options.get(\"tooltipChartTitle\")+\"</div>\\n\"}formats=this.options.get(\"tooltipFormat\");if(!formats){return\"\"}if(!$.isArray(formats)){formats=[formats]}if(!$.isArray(fields)){fields=[fields]}showFields=this.options.get(\"tooltipFormatFieldlist\");showFieldsKey=this.options.get(\"tooltipFormatFieldlistKey\");if(showFields&&showFieldsKey){newFields=[];for(i=fields.length;i--;){fv=fields[i][showFieldsKey];if((j=$.inArray(fv,showFields))!=-1){newFields[j]=fields[i]}}fields=newFields}formatlen=formats.length;fieldlen=fields.length;for(i=0;i<formatlen;i++){format=formats[i];if(typeof format===\"string\"){format=new SPFormat(format)}fclass=format.fclass||\"jqsfield\";for(j=0;j<fieldlen;j++){if(!fields[j].isNull||!options.get(\"tooltipSkipNull\")){$.extend(fields[j],{prefix:options.get(\"tooltipPrefix\"),suffix:options.get(\"tooltipSuffix\")});text=format.render(fields[j],options.get(\"tooltipValueLookups\"),options);entries.push('<div class=\"'+fclass+'\">'+text+\"</div>\")}}}if(entries.length){return header+entries.join(\"\\n\")}return\"\"},getCurrentRegionFields:function(){},calcHighlightColor:function(color,options){var highlightColor=options.get(\"highlightColor\"),lighten=options.get(\"highlightLighten\"),parse,mult,rgbnew,i;if(highlightColor){return highlightColor}if(lighten){parse=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);if(parse){rgbnew=[];mult=color.length===4?16:1;for(i=0;i<3;i++){rgbnew[i]=clipval(Math.round(parseInt(parse[i+1],16)*mult*lighten),0,255)}return\"rgb(\"+rgbnew.join(\",\")+\")\"}}return color}});barHighlightMixin={changeHighlight:function(highlight){var currentRegion=this.currentRegion,target=this.target,shapeids=this.regionShapes[currentRegion],newShapes;if(shapeids){newShapes=this.renderRegion(currentRegion,highlight);if($.isArray(newShapes)||$.isArray(shapeids)){target.replaceWithShapes(shapeids,newShapes);this.regionShapes[currentRegion]=$.map(newShapes,function(newShape){return newShape.id})}else{target.replaceWithShape(shapeids,newShapes);this.regionShapes[currentRegion]=newShapes.id}}},render:function(){var values=this.values,target=this.target,regionShapes=this.regionShapes,shapes,ids,i,j;if(!this.cls._super.render.call(this)){return}for(i=values.length;i--;){shapes=this.renderRegion(i);if(shapes){if($.isArray(shapes)){ids=[];for(j=shapes.length;j--;){shapes[j].append();ids.push(shapes[j].id)}regionShapes[i]=ids}else{shapes.append();regionShapes[i]=shapes.id}}else{regionShapes[i]=null}}target.render()}};$.fn.sparkline.line=line=createClass($.fn.sparkline._base,{type:\"line\",init:function(el,values,options,width,height){line._super.init.call(this,el,values,options,width,height);this.vertices=[];this.regionMap=[];this.xvalues=[];this.yvalues=[];this.yminmax=[];this.hightlightSpotId=null;this.lastShapeId=null;this.initTarget()},getRegion:function(el,x,y){var i,regionMap=this.regionMap;for(i=regionMap.length;i--;){if(regionMap[i]!==null&&x>=regionMap[i][0]&&x<=regionMap[i][1]){return regionMap[i][2]}}return undefined},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.yvalues[currentRegion]===null,x:this.xvalues[currentRegion],y:this.yvalues[currentRegion],color:this.options.get(\"lineColor\"),fillColor:this.options.get(\"fillColor\"),offset:currentRegion}},renderHighlight:function(){var currentRegion=this.currentRegion,target=this.target,vertex=this.vertices[currentRegion],options=this.options,spotRadius=options.get(\"spotRadius\"),highlightSpotColor=options.get(\"highlightSpotColor\"),highlightLineColor=options.get(\"highlightLineColor\"),highlightSpot,highlightLine;if(!vertex){return}if(spotRadius&&highlightSpotColor){highlightSpot=target.drawCircle(vertex[0],vertex[1],spotRadius,undefined,highlightSpotColor);this.highlightSpotId=highlightSpot.id;target.insertAfterShape(this.lastShapeId,highlightSpot)}if(highlightLineColor){highlightLine=target.drawLine(vertex[0],this.canvasTop,vertex[0],this.canvasTop+this.canvasHeight,highlightLineColor);this.highlightLineId=highlightLine.id;target.insertAfterShape(this.lastShapeId,highlightLine)}},removeHighlight:function(){var target=this.target;if(this.highlightSpotId){target.removeShapeId(this.highlightSpotId);this.highlightSpotId=null}if(this.highlightLineId){target.removeShapeId(this.highlightLineId);this.highlightLineId=null}},scanValues:function(){var values=this.values,valcount=values.length,xvalues=this.xvalues,yvalues=this.yvalues,yminmax=this.yminmax,i,val,isStr,isArray,sp;for(i=0;i<valcount;i++){val=values[i];isStr=typeof values[i]===\"string\";isArray=typeof values[i]===\"object\"&&values[i]instanceof Array;sp=isStr&&values[i].split(\":\");if(isStr&&sp.length===2){xvalues.push(Number(sp[0]));yvalues.push(Number(sp[1]));yminmax.push(Number(sp[1]))}else if(isArray){xvalues.push(val[0]);yvalues.push(val[1]);yminmax.push(val[1])}else{xvalues.push(i);if(values[i]===null||values[i]===\"null\"){yvalues.push(null)}else{yvalues.push(Number(val));yminmax.push(Number(val))}}}if(this.options.get(\"xvalues\")){xvalues=this.options.get(\"xvalues\")}this.maxy=this.maxyorg=Math.max.apply(Math,yminmax);this.miny=this.minyorg=Math.min.apply(Math,yminmax);this.maxx=Math.max.apply(Math,xvalues);this.minx=Math.min.apply(Math,xvalues);this.xvalues=xvalues;this.yvalues=yvalues;this.yminmax=yminmax},processRangeOptions:function(){var options=this.options,normalRangeMin=options.get(\"normalRangeMin\"),normalRangeMax=options.get(\"normalRangeMax\");if(normalRangeMin!==undefined){if(normalRangeMin<this.miny){this.miny=normalRangeMin}if(normalRangeMax>this.maxy){this.maxy=normalRangeMax}}if(options.get(\"chartRangeMin\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMin\")<this.miny)){this.miny=options.get(\"chartRangeMin\")}if(options.get(\"chartRangeMax\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMax\")>this.maxy)){this.maxy=options.get(\"chartRangeMax\")}if(options.get(\"chartRangeMinX\")!==undefined&&(options.get(\"chartRangeClipX\")||options.get(\"chartRangeMinX\")<this.minx)){this.minx=options.get(\"chartRangeMinX\")}if(options.get(\"chartRangeMaxX\")!==undefined&&(options.get(\"chartRangeClipX\")||options.get(\"chartRangeMaxX\")>this.maxx)){this.maxx=options.get(\"chartRangeMaxX\")}},drawNormalRange:function(canvasLeft,canvasTop,canvasHeight,canvasWidth,rangey){var normalRangeMin=this.options.get(\"normalRangeMin\"),normalRangeMax=this.options.get(\"normalRangeMax\"),ytop=canvasTop+Math.round(canvasHeight-canvasHeight*((normalRangeMax-this.miny)/rangey)),height=Math.round(canvasHeight*(normalRangeMax-normalRangeMin)/rangey);this.target.drawRect(canvasLeft,ytop,canvasWidth,height,undefined,this.options.get(\"normalRangeColor\")).append()},render:function(){var options=this.options,target=this.target,canvasWidth=this.canvasWidth,canvasHeight=this.canvasHeight,vertices=this.vertices,spotRadius=options.get(\"spotRadius\"),regionMap=this.regionMap,rangex,rangey,yvallast,canvasTop,canvasLeft,vertex,path,paths,x,y,xnext,xpos,xposnext,last,next,yvalcount,lineShapes,fillShapes,plen,valueSpots,hlSpotsEnabled,color,xvalues,yvalues,i;if(!line._super.render.call(this)){return}this.scanValues();this.processRangeOptions();xvalues=this.xvalues;yvalues=this.yvalues;if(!this.yminmax.length||this.yvalues.length<2){return}canvasTop=canvasLeft=0;rangex=this.maxx-this.minx===0?1:this.maxx-this.minx;rangey=this.maxy-this.miny===0?1:this.maxy-this.miny;yvallast=this.yvalues.length-1;if(spotRadius&&(canvasWidth<spotRadius*4||canvasHeight<spotRadius*4)){spotRadius=0}if(spotRadius){hlSpotsEnabled=options.get(\"highlightSpotColor\")&&!options.get(\"disableInteraction\");if(hlSpotsEnabled||options.get(\"minSpotColor\")||options.get(\"spotColor\")&&yvalues[yvallast]===this.miny){canvasHeight-=Math.ceil(spotRadius)}if(hlSpotsEnabled||options.get(\"maxSpotColor\")||options.get(\"spotColor\")&&yvalues[yvallast]===this.maxy){canvasHeight-=Math.ceil(spotRadius);canvasTop+=Math.ceil(spotRadius)}if(hlSpotsEnabled||(options.get(\"minSpotColor\")||options.get(\"maxSpotColor\"))&&(yvalues[0]===this.miny||yvalues[0]===this.maxy)){canvasLeft+=Math.ceil(spotRadius);canvasWidth-=Math.ceil(spotRadius)}if(hlSpotsEnabled||options.get(\"spotColor\")||(options.get(\"minSpotColor\")||options.get(\"maxSpotColor\")&&(yvalues[yvallast]===this.miny||yvalues[yvallast]===this.maxy))){canvasWidth-=Math.ceil(spotRadius)}}canvasHeight--;if(options.get(\"normalRangeMin\")!==undefined&&!options.get(\"drawNormalOnTop\")){this.drawNormalRange(canvasLeft,canvasTop,canvasHeight,canvasWidth,rangey)}path=[];paths=[path];last=next=null;yvalcount=yvalues.length;for(i=0;i<yvalcount;i++){x=xvalues[i];xnext=xvalues[i+1];y=yvalues[i];xpos=canvasLeft+Math.round((x-this.minx)*(canvasWidth/rangex));xposnext=i<yvalcount-1?canvasLeft+Math.round((xnext-this.minx)*(canvasWidth/rangex)):canvasWidth;next=xpos+(xposnext-xpos)/2;regionMap[i]=[last||0,next,i];last=next;if(y===null){if(i){if(yvalues[i-1]!==null){path=[];paths.push(path)}vertices.push(null)}}else{if(y<this.miny){y=this.miny}if(y>this.maxy){y=this.maxy}if(!path.length){path.push([xpos,canvasTop+canvasHeight])}vertex=[xpos,canvasTop+Math.round(canvasHeight-canvasHeight*((y-this.miny)/rangey))];path.push(vertex);vertices.push(vertex)}}lineShapes=[];fillShapes=[];plen=paths.length;for(i=0;i<plen;i++){path=paths[i];if(path.length){if(options.get(\"fillColor\")){path.push([path[path.length-1][0],canvasTop+canvasHeight]);fillShapes.push(path.slice(0));path.pop()}if(path.length>2){path[0]=[path[0][0],path[1][1]]}lineShapes.push(path)}}plen=fillShapes.length;for(i=0;i<plen;i++){target.drawShape(fillShapes[i],options.get(\"fillColor\"),options.get(\"fillColor\")).append()}if(options.get(\"normalRangeMin\")!==undefined&&options.get(\"drawNormalOnTop\")){this.drawNormalRange(canvasLeft,canvasTop,canvasHeight,canvasWidth,rangey)}plen=lineShapes.length;for(i=0;i<plen;i++){target.drawShape(lineShapes[i],options.get(\"lineColor\"),undefined,options.get(\"lineWidth\")).append()}if(spotRadius&&options.get(\"valueSpots\")){valueSpots=options.get(\"valueSpots\");if(valueSpots.get===undefined){valueSpots=new RangeMap(valueSpots)}for(i=0;i<yvalcount;i++){color=valueSpots.get(yvalues[i]);if(color){target.drawCircle(canvasLeft+Math.round((xvalues[i]-this.minx)*(canvasWidth/rangex)),canvasTop+Math.round(canvasHeight-canvasHeight*((yvalues[i]-this.miny)/rangey)),spotRadius,undefined,color).append()}}}if(spotRadius&&options.get(\"spotColor\")&&yvalues[yvallast]!==null){target.drawCircle(canvasLeft+Math.round((xvalues[xvalues.length-1]-this.minx)*(canvasWidth/rangex)),canvasTop+Math.round(canvasHeight-canvasHeight*((yvalues[yvallast]-this.miny)/rangey)),spotRadius,undefined,options.get(\"spotColor\")).append()}if(this.maxy!==this.minyorg){if(spotRadius&&options.get(\"minSpotColor\")){x=xvalues[$.inArray(this.minyorg,yvalues)];target.drawCircle(canvasLeft+Math.round((x-this.minx)*(canvasWidth/rangex)),canvasTop+Math.round(canvasHeight-canvasHeight*((this.minyorg-this.miny)/rangey)),spotRadius,undefined,options.get(\"minSpotColor\")).append()}if(spotRadius&&options.get(\"maxSpotColor\")){x=xvalues[$.inArray(this.maxyorg,yvalues)];target.drawCircle(canvasLeft+Math.round((x-this.minx)*(canvasWidth/rangex)),canvasTop+Math.round(canvasHeight-canvasHeight*((this.maxyorg-this.miny)/rangey)),spotRadius,undefined,options.get(\"maxSpotColor\")).append()}}this.lastShapeId=target.getLastShapeId();this.canvasTop=canvasTop;target.render()}});$.fn.sparkline.bar=bar=createClass($.fn.sparkline._base,barHighlightMixin,{type:\"bar\",init:function(el,values,options,width,height){var barWidth=parseInt(options.get(\"barWidth\"),10),barSpacing=parseInt(options.get(\"barSpacing\"),10),chartRangeMin=options.get(\"chartRangeMin\"),chartRangeMax=options.get(\"chartRangeMax\"),chartRangeClip=options.get(\"chartRangeClip\"),stackMin=Infinity,stackMax=-Infinity,isStackString,groupMin,groupMax,stackRanges,numValues,i,vlen,range,zeroAxis,xaxisOffset,min,max,clipMin,clipMax,stacked,vlist,j,slen,svals,val,yoffset,yMaxCalc,canvasHeightEf;bar._super.init.call(this,el,values,options,width,height);for(i=0,vlen=values.length;i<vlen;i++){val=values[i];isStackString=typeof val===\"string\"&&val.indexOf(\":\")>-1;if(isStackString||$.isArray(val)){stacked=true;if(isStackString){val=values[i]=normalizeValues(val.split(\":\"));\n\n}val=remove(val,null);groupMin=Math.min.apply(Math,val);groupMax=Math.max.apply(Math,val);if(groupMin<stackMin){stackMin=groupMin}if(groupMax>stackMax){stackMax=groupMax}}}this.stacked=stacked;this.regionShapes={};this.barWidth=barWidth;this.barSpacing=barSpacing;this.totalBarWidth=barWidth+barSpacing;this.width=width=values.length*barWidth+(values.length-1)*barSpacing;this.initTarget();if(chartRangeClip){clipMin=chartRangeMin===undefined?-Infinity:chartRangeMin;clipMax=chartRangeMax===undefined?Infinity:chartRangeMax}numValues=[];stackRanges=stacked?[]:numValues;var stackTotals=[];var stackRangesNeg=[];for(i=0,vlen=values.length;i<vlen;i++){if(stacked){vlist=values[i];values[i]=svals=[];stackTotals[i]=0;stackRanges[i]=stackRangesNeg[i]=0;for(j=0,slen=vlist.length;j<slen;j++){val=svals[j]=chartRangeClip?clipval(vlist[j],clipMin,clipMax):vlist[j];if(val!==null){if(val>0){stackTotals[i]+=val}if(stackMin<0&&stackMax>0){if(val<0){stackRangesNeg[i]+=Math.abs(val)}else{stackRanges[i]+=val}}else{stackRanges[i]+=Math.abs(val-(val<0?stackMax:stackMin))}numValues.push(val)}}}else{val=chartRangeClip?clipval(values[i],clipMin,clipMax):values[i];val=values[i]=normalizeValue(val);if(val!==null){numValues.push(val)}}}this.max=max=Math.max.apply(Math,numValues);this.min=min=Math.min.apply(Math,numValues);this.stackMax=stackMax=stacked?Math.max.apply(Math,stackTotals):max;this.stackMin=stackMin=stacked?Math.min.apply(Math,numValues):min;if(options.get(\"chartRangeMin\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMin\")<min)){min=options.get(\"chartRangeMin\")}if(options.get(\"chartRangeMax\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMax\")>max)){max=options.get(\"chartRangeMax\")}this.zeroAxis=zeroAxis=options.get(\"zeroAxis\",true);if(min<=0&&max>=0&&zeroAxis){xaxisOffset=0}else if(zeroAxis==false){xaxisOffset=min}else if(min>0){xaxisOffset=min}else{xaxisOffset=max}this.xaxisOffset=xaxisOffset;range=stacked?Math.max.apply(Math,stackRanges)+Math.max.apply(Math,stackRangesNeg):max-min;this.canvasHeightEf=zeroAxis&&min<0?this.canvasHeight-2:this.canvasHeight-1;if(min<xaxisOffset){yMaxCalc=stacked&&max>=0?stackMax:max;yoffset=(yMaxCalc-xaxisOffset)/range*this.canvasHeight;if(yoffset!==Math.ceil(yoffset)){this.canvasHeightEf-=2;yoffset=Math.ceil(yoffset)}}else{yoffset=this.canvasHeight}this.yoffset=yoffset;if($.isArray(options.get(\"colorMap\"))){this.colorMapByIndex=options.get(\"colorMap\");this.colorMapByValue=null}else{this.colorMapByIndex=null;this.colorMapByValue=options.get(\"colorMap\");if(this.colorMapByValue&&this.colorMapByValue.get===undefined){this.colorMapByValue=new RangeMap(this.colorMapByValue)}}this.range=range},getRegion:function(el,x,y){var result=Math.floor(x/this.totalBarWidth);return result<0||result>=this.values.length?undefined:result},getCurrentRegionFields:function(){var currentRegion=this.currentRegion,values=ensureArray(this.values[currentRegion]),result=[],value,i;for(i=values.length;i--;){value=values[i];result.push({isNull:value===null,value:value,color:this.calcColor(i,value,currentRegion),offset:currentRegion})}return result},calcColor:function(stacknum,value,valuenum){var colorMapByIndex=this.colorMapByIndex,colorMapByValue=this.colorMapByValue,options=this.options,color,newColor;if(this.stacked){color=options.get(\"stackedBarColor\")}else{color=value<0?options.get(\"negBarColor\"):options.get(\"barColor\")}if(value===0&&options.get(\"zeroColor\")!==undefined){color=options.get(\"zeroColor\")}if(colorMapByValue&&(newColor=colorMapByValue.get(value))){color=newColor}else if(colorMapByIndex&&colorMapByIndex.length>valuenum){color=colorMapByIndex[valuenum]}return $.isArray(color)?color[stacknum%color.length]:color},renderRegion:function(valuenum,highlight){var vals=this.values[valuenum],options=this.options,xaxisOffset=this.xaxisOffset,result=[],range=this.range,stacked=this.stacked,target=this.target,x=valuenum*this.totalBarWidth,canvasHeightEf=this.canvasHeightEf,yoffset=this.yoffset,y,height,color,isNull,yoffsetNeg,i,valcount,val,minPlotted,allMin;vals=$.isArray(vals)?vals:[vals];valcount=vals.length;val=vals[0];isNull=all(null,vals);allMin=all(xaxisOffset,vals,true);if(isNull){if(options.get(\"nullColor\")){color=highlight?options.get(\"nullColor\"):this.calcHighlightColor(options.get(\"nullColor\"),options);y=yoffset>0?yoffset-1:yoffset;return target.drawRect(x,y,this.barWidth-1,0,color,color)}else{return undefined}}yoffsetNeg=yoffset;for(i=0;i<valcount;i++){val=vals[i];if(stacked&&val===xaxisOffset){if(!allMin||minPlotted){continue}minPlotted=true}if(range>0){height=Math.floor(canvasHeightEf*(Math.abs(val-xaxisOffset)/range))+1}else{height=1}if(val<xaxisOffset||val===xaxisOffset&&yoffset===0){y=yoffsetNeg;yoffsetNeg+=height}else{y=yoffset-height;yoffset-=height}color=this.calcColor(i,val,valuenum);if(highlight){color=this.calcHighlightColor(color,options)}result.push(target.drawRect(x,y,this.barWidth-1,height-1,color,color))}if(result.length===1){return result[0]}return result}});$.fn.sparkline.tristate=tristate=createClass($.fn.sparkline._base,barHighlightMixin,{type:\"tristate\",init:function(el,values,options,width,height){var barWidth=parseInt(options.get(\"barWidth\"),10),barSpacing=parseInt(options.get(\"barSpacing\"),10);tristate._super.init.call(this,el,values,options,width,height);this.regionShapes={};this.barWidth=barWidth;this.barSpacing=barSpacing;this.totalBarWidth=barWidth+barSpacing;this.values=$.map(values,Number);this.width=width=values.length*barWidth+(values.length-1)*barSpacing;if($.isArray(options.get(\"colorMap\"))){this.colorMapByIndex=options.get(\"colorMap\");this.colorMapByValue=null}else{this.colorMapByIndex=null;this.colorMapByValue=options.get(\"colorMap\");if(this.colorMapByValue&&this.colorMapByValue.get===undefined){this.colorMapByValue=new RangeMap(this.colorMapByValue)}}this.initTarget()},getRegion:function(el,x,y){return Math.floor(x/this.totalBarWidth)},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.values[currentRegion]===undefined,value:this.values[currentRegion],color:this.calcColor(this.values[currentRegion],currentRegion),offset:currentRegion}},calcColor:function(value,valuenum){var values=this.values,options=this.options,colorMapByIndex=this.colorMapByIndex,colorMapByValue=this.colorMapByValue,color,newColor;if(colorMapByValue&&(newColor=colorMapByValue.get(value))){color=newColor}else if(colorMapByIndex&&colorMapByIndex.length>valuenum){color=colorMapByIndex[valuenum]}else if(values[valuenum]<0){color=options.get(\"negBarColor\")}else if(values[valuenum]>0){color=options.get(\"posBarColor\")}else{color=options.get(\"zeroBarColor\")}return color},renderRegion:function(valuenum,highlight){var values=this.values,options=this.options,target=this.target,canvasHeight,height,halfHeight,x,y,color;canvasHeight=target.pixelHeight;halfHeight=Math.round(canvasHeight/2);x=valuenum*this.totalBarWidth;if(values[valuenum]<0){y=halfHeight;height=halfHeight-1}else if(values[valuenum]>0){y=0;height=halfHeight-1}else{y=halfHeight-1;height=2}color=this.calcColor(values[valuenum],valuenum);if(color===null){return}if(highlight){color=this.calcHighlightColor(color,options)}return target.drawRect(x,y,this.barWidth-1,height-1,color,color)}});$.fn.sparkline.discrete=discrete=createClass($.fn.sparkline._base,barHighlightMixin,{type:\"discrete\",init:function(el,values,options,width,height){discrete._super.init.call(this,el,values,options,width,height);this.regionShapes={};this.values=values=$.map(values,Number);this.min=Math.min.apply(Math,values);this.max=Math.max.apply(Math,values);this.range=this.max-this.min;this.width=width=options.get(\"width\")===\"auto\"?values.length*2:this.width;this.interval=Math.floor(width/values.length);this.itemWidth=width/values.length;if(options.get(\"chartRangeMin\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMin\")<this.min)){this.min=options.get(\"chartRangeMin\")}if(options.get(\"chartRangeMax\")!==undefined&&(options.get(\"chartRangeClip\")||options.get(\"chartRangeMax\")>this.max)){this.max=options.get(\"chartRangeMax\")}this.initTarget();if(this.target){this.lineHeight=options.get(\"lineHeight\")===\"auto\"?Math.round(this.canvasHeight*.3):options.get(\"lineHeight\")}},getRegion:function(el,x,y){return Math.floor(x/this.itemWidth)},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.values[currentRegion]===undefined,value:this.values[currentRegion],offset:currentRegion}},renderRegion:function(valuenum,highlight){var values=this.values,options=this.options,min=this.min,max=this.max,range=this.range,interval=this.interval,target=this.target,canvasHeight=this.canvasHeight,lineHeight=this.lineHeight,pheight=canvasHeight-lineHeight,ytop,val,color,x;val=clipval(values[valuenum],min,max);x=valuenum*interval;ytop=Math.round(pheight-pheight*((val-min)/range));color=options.get(\"thresholdColor\")&&val<options.get(\"thresholdValue\")?options.get(\"thresholdColor\"):options.get(\"lineColor\");if(highlight){color=this.calcHighlightColor(color,options)}return target.drawLine(x,ytop,x,ytop+lineHeight,color)}});$.fn.sparkline.bullet=bullet=createClass($.fn.sparkline._base,{type:\"bullet\",init:function(el,values,options,width,height){var min,max,vals;bullet._super.init.call(this,el,values,options,width,height);this.values=values=normalizeValues(values);vals=values.slice();vals[0]=vals[0]===null?vals[2]:vals[0];vals[1]=values[1]===null?vals[2]:vals[1];min=Math.min.apply(Math,values);max=Math.max.apply(Math,values);if(options.get(\"base\")===undefined){min=min<0?min:0}else{min=options.get(\"base\")}this.min=min;this.max=max;this.range=max-min;this.shapes={};this.valueShapes={};this.regiondata={};this.width=width=options.get(\"width\")===\"auto\"?\"4.0em\":width;this.target=this.$el.simpledraw(width,height,options.get(\"composite\"));if(!values.length){this.disabled=true}this.initTarget()},getRegion:function(el,x,y){var shapeid=this.target.getShapeAt(el,x,y);return shapeid!==undefined&&this.shapes[shapeid]!==undefined?this.shapes[shapeid]:undefined},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{fieldkey:currentRegion.substr(0,1),value:this.values[currentRegion.substr(1)],region:currentRegion}},changeHighlight:function(highlight){var currentRegion=this.currentRegion,shapeid=this.valueShapes[currentRegion],shape;delete this.shapes[shapeid];switch(currentRegion.substr(0,1)){case\"r\":shape=this.renderRange(currentRegion.substr(1),highlight);break;case\"p\":shape=this.renderPerformance(highlight);break;case\"t\":shape=this.renderTarget(highlight);break}this.valueShapes[currentRegion]=shape.id;this.shapes[shape.id]=currentRegion;this.target.replaceWithShape(shapeid,shape)},renderRange:function(rn,highlight){var rangeval=this.values[rn],rangewidth=Math.round(this.canvasWidth*((rangeval-this.min)/this.range)),color=this.options.get(\"rangeColors\")[rn-2];if(highlight){color=this.calcHighlightColor(color,this.options)}return this.target.drawRect(0,0,rangewidth-1,this.canvasHeight-1,color,color)},renderPerformance:function(highlight){var perfval=this.values[1],perfwidth=Math.round(this.canvasWidth*((perfval-this.min)/this.range)),color=this.options.get(\"performanceColor\");if(highlight){color=this.calcHighlightColor(color,this.options)}return this.target.drawRect(0,Math.round(this.canvasHeight*.3),perfwidth-1,Math.round(this.canvasHeight*.4)-1,color,color)},renderTarget:function(highlight){var targetval=this.values[0],x=Math.round(this.canvasWidth*((targetval-this.min)/this.range)-this.options.get(\"targetWidth\")/2),targettop=Math.round(this.canvasHeight*.1),targetheight=this.canvasHeight-targettop*2,color=this.options.get(\"targetColor\");if(highlight){color=this.calcHighlightColor(color,this.options)}return this.target.drawRect(x,targettop,this.options.get(\"targetWidth\")-1,targetheight-1,color,color)},render:function(){var vlen=this.values.length,target=this.target,i,shape;if(!bullet._super.render.call(this)){return}for(i=2;i<vlen;i++){shape=this.renderRange(i).append();this.shapes[shape.id]=\"r\"+i;this.valueShapes[\"r\"+i]=shape.id}if(this.values[1]!==null){shape=this.renderPerformance().append();this.shapes[shape.id]=\"p1\";this.valueShapes.p1=shape.id}if(this.values[0]!==null){shape=this.renderTarget().append();this.shapes[shape.id]=\"t0\";this.valueShapes.t0=shape.id}target.render()}});$.fn.sparkline.pie=pie=createClass($.fn.sparkline._base,{type:\"pie\",init:function(el,values,options,width,height){var total=0,i;pie._super.init.call(this,el,values,options,width,height);this.shapes={};this.valueShapes={};this.values=values=$.map(values,Number);if(options.get(\"width\")===\"auto\"){this.width=this.height}if(values.length>0){for(i=values.length;i--;){total+=values[i]}}this.total=total;this.initTarget();this.radius=Math.floor(Math.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(el,x,y){var shapeid=this.target.getShapeAt(el,x,y);return shapeid!==undefined&&this.shapes[shapeid]!==undefined?this.shapes[shapeid]:undefined},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.values[currentRegion]===undefined,value:this.values[currentRegion],percent:this.values[currentRegion]/this.total*100,color:this.options.get(\"sliceColors\")[currentRegion%this.options.get(\"sliceColors\").length],offset:currentRegion}},changeHighlight:function(highlight){var currentRegion=this.currentRegion,newslice=this.renderSlice(currentRegion,highlight),shapeid=this.valueShapes[currentRegion];delete this.shapes[shapeid];this.target.replaceWithShape(shapeid,newslice);this.valueShapes[currentRegion]=newslice.id;this.shapes[newslice.id]=currentRegion},renderSlice:function(valuenum,highlight){var target=this.target,options=this.options,radius=this.radius,borderWidth=options.get(\"borderWidth\"),offset=options.get(\"offset\"),circle=2*Math.PI,values=this.values,total=this.total,next=offset?2*Math.PI*(offset/360):0,start,end,i,vlen,color;vlen=values.length;for(i=0;i<vlen;i++){start=next;end=next;if(total>0){end=next+circle*(values[i]/total)}if(valuenum===i){color=options.get(\"sliceColors\")[i%options.get(\"sliceColors\").length];if(highlight){color=this.calcHighlightColor(color,options)}return target.drawPieSlice(radius,radius,radius-borderWidth,start,end,undefined,color)}next=end}},render:function(){var target=this.target,values=this.values,options=this.options,radius=this.radius,borderWidth=options.get(\"borderWidth\"),shape,i;if(!pie._super.render.call(this)){return}if(borderWidth){target.drawCircle(radius,radius,Math.floor(radius-borderWidth/2),options.get(\"borderColor\"),undefined,borderWidth).append()}for(i=values.length;i--;){if(values[i]){shape=this.renderSlice(i).append();this.valueShapes[i]=shape.id;this.shapes[shape.id]=i}}target.render()}});$.fn.sparkline.box=box=createClass($.fn.sparkline._base,{type:\"box\",init:function(el,values,options,width,height){box._super.init.call(this,el,values,options,width,height);this.values=$.map(values,Number);this.width=options.get(\"width\")===\"auto\"?\"4.0em\":width;this.initTarget();if(!this.values.length){this.disabled=1}},getRegion:function(){return 1},getCurrentRegionFields:function(){var result=[{field:\"lq\",value:this.quartiles[0]},{field:\"med\",value:this.quartiles[1]},{field:\"uq\",value:this.quartiles[2]}];if(this.loutlier!==undefined){result.push({field:\"lo\",value:this.loutlier})}if(this.routlier!==undefined){result.push({field:\"ro\",value:this.routlier})}if(this.lwhisker!==undefined){result.push({field:\"lw\",value:this.lwhisker})}if(this.rwhisker!==undefined){result.push({field:\"rw\",value:this.rwhisker})}return result},render:function(){var target=this.target,values=this.values,vlen=values.length,options=this.options,canvasWidth=this.canvasWidth,canvasHeight=this.canvasHeight,minValue=options.get(\"chartRangeMin\")===undefined?Math.min.apply(Math,values):options.get(\"chartRangeMin\"),maxValue=options.get(\"chartRangeMax\")===undefined?Math.max.apply(Math,values):options.get(\"chartRangeMax\"),canvasLeft=0,lwhisker,loutlier,iqr,q1,q2,q3,rwhisker,routlier,i,size,unitSize;if(!box._super.render.call(this)){return}if(options.get(\"raw\")){if(options.get(\"showOutliers\")&&values.length>5){loutlier=values[0];lwhisker=values[1];q1=values[2];q2=values[3];q3=values[4];rwhisker=values[5];routlier=values[6]}else{lwhisker=values[0];q1=values[1];q2=values[2];q3=values[3];rwhisker=values[4]}}else{values.sort(function(a,b){return a-b});q1=quartile(values,1);q2=quartile(values,2);q3=quartile(values,3);iqr=q3-q1;if(options.get(\"showOutliers\")){lwhisker=rwhisker=undefined;for(i=0;i<vlen;i++){if(lwhisker===undefined&&values[i]>q1-iqr*options.get(\"outlierIQR\")){lwhisker=values[i]}if(values[i]<q3+iqr*options.get(\"outlierIQR\")){rwhisker=values[i]}}loutlier=values[0];routlier=values[vlen-1]}else{lwhisker=values[0];rwhisker=values[vlen-1]}}this.quartiles=[q1,q2,q3];this.lwhisker=lwhisker;this.rwhisker=rwhisker;this.loutlier=loutlier;this.routlier=routlier;unitSize=canvasWidth/(maxValue-minValue+1);if(options.get(\"showOutliers\")){canvasLeft=Math.ceil(options.get(\"spotRadius\"));canvasWidth-=2*Math.ceil(options.get(\"spotRadius\"));unitSize=canvasWidth/(maxValue-minValue+1);if(loutlier<lwhisker){target.drawCircle((loutlier-minValue)*unitSize+canvasLeft,canvasHeight/2,options.get(\"spotRadius\"),options.get(\"outlierLineColor\"),options.get(\"outlierFillColor\")).append()}if(routlier>rwhisker){target.drawCircle((routlier-minValue)*unitSize+canvasLeft,canvasHeight/2,options.get(\"spotRadius\"),options.get(\"outlierLineColor\"),options.get(\"outlierFillColor\")).append()}}target.drawRect(Math.round((q1-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.1),Math.round((q3-q1)*unitSize),Math.round(canvasHeight*.8),options.get(\"boxLineColor\"),options.get(\"boxFillColor\")).append();target.drawLine(Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),Math.round((q1-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),options.get(\"lineColor\")).append();target.drawLine(Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/4),Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight-canvasHeight/4),options.get(\"whiskerColor\")).append();target.drawLine(Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),Math.round((q3-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),options.get(\"lineColor\")).append();target.drawLine(Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/4),Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight-canvasHeight/4),options.get(\"whiskerColor\")).append();target.drawLine(Math.round((q2-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.1),Math.round((q2-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.9),options.get(\"medianColor\")).append();if(options.get(\"target\")){size=Math.ceil(options.get(\"spotRadius\"));target.drawLine(Math.round((options.get(\"target\")-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2-size),Math.round((options.get(\"target\")-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2+size),options.get(\"targetColor\")).append();target.drawLine(Math.round((options.get(\"target\")-minValue)*unitSize+canvasLeft-size),Math.round(canvasHeight/2),Math.round((options.get(\"target\")-minValue)*unitSize+canvasLeft+size),Math.round(canvasHeight/2),options.get(\"targetColor\")).append()}target.render()}});VShape=createClass({init:function(target,id,type,args){this.target=target;this.id=id;this.type=type;this.args=args},append:function(){this.target.appendShape(this);return this}});VCanvas_base=createClass({_pxregex:/(\\d+)(px)?\\s*$/i,init:function(width,height,target){if(!width){return}this.width=width;this.height=height;this.target=target;this.lastShapeId=null;if(target[0]){target=target[0]}$.data(target,\"_jqs_vcanvas\",this)},drawLine:function(x1,y1,x2,y2,lineColor,lineWidth){return this.drawShape([[x1,y1],[x2,y2]],lineColor,lineWidth)},drawShape:function(path,lineColor,fillColor,lineWidth){return this._genShape(\"Shape\",[path,lineColor,fillColor,lineWidth])},drawCircle:function(x,y,radius,lineColor,fillColor,lineWidth){return this._genShape(\"Circle\",[x,y,radius,lineColor,fillColor,lineWidth])},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){return this._genShape(\"PieSlice\",[x,y,radius,startAngle,endAngle,lineColor,fillColor])},drawRect:function(x,y,width,height,lineColor,fillColor){return this._genShape(\"Rect\",[x,y,width,height,lineColor,fillColor])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert(\"reset not implemented\")},_insert:function(el,target){$(target).html(el)},_calculatePixelDims:function(width,height,canvas){var match;match=this._pxregex.exec(height);if(match){this.pixelHeight=match[1]}else{this.pixelHeight=$(canvas).height()}match=this._pxregex.exec(width);if(match){this.pixelWidth=match[1]}else{this.pixelWidth=$(canvas).width()}},_genShape:function(shapetype,shapeargs){var id=shapeCount++;shapeargs.unshift(id);return new VShape(this,id,shapetype,shapeargs)},appendShape:function(shape){alert(\"appendShape not implemented\")},replaceWithShape:function(shapeid,shape){alert(\"replaceWithShape not implemented\")},insertAfterShape:function(shapeid,shape){alert(\"insertAfterShape not implemented\")},removeShapeId:function(shapeid){alert(\"removeShapeId not implemented\")},getShapeAt:function(el,x,y){alert(\"getShapeAt not implemented\")},render:function(){alert(\"render not implemented\")}});VCanvas_canvas=createClass(VCanvas_base,{init:function(width,height,target,interact){VCanvas_canvas._super.init.call(this,width,height,target);this.canvas=document.createElement(\"canvas\");if(target[0]){target=target[0]}$.data(target,\"_jqs_vcanvas\",this);$(this.canvas).css({display:\"inline-block\",width:width,height:height,verticalAlign:\"top\"});this._insert(this.canvas,target);this._calculatePixelDims(width,height,this.canvas);this.canvas.width=this.pixelWidth;this.canvas.height=this.pixelHeight;this.interact=interact;this.shapes={};this.shapeseq=[];this.currentTargetShapeId=undefined;$(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(lineColor,fillColor,lineWidth){var context=this.canvas.getContext(\"2d\");if(lineColor!==undefined){context.strokeStyle=lineColor}context.lineWidth=lineWidth===undefined?1:lineWidth;if(fillColor!==undefined){context.fillStyle=fillColor}return context},reset:function(){var context=this._getContext();context.clearRect(0,0,this.pixelWidth,this.pixelHeight);this.shapes={};this.shapeseq=[];this.currentTargetShapeId=undefined},_drawShape:function(shapeid,path,lineColor,fillColor,lineWidth){var context=this._getContext(lineColor,fillColor,lineWidth),i,plen;context.beginPath();context.moveTo(path[0][0]+.5,path[0][1]+.5);for(i=1,plen=path.length;i<plen;i++){context.lineTo(path[i][0]+.5,path[i][1]+.5)}if(lineColor!==undefined){context.stroke()}if(fillColor!==undefined){context.fill()}if(this.targetX!==undefined&&this.targetY!==undefined&&context.isPointInPath(this.targetX,this.targetY)){this.currentTargetShapeId=shapeid}},_drawCircle:function(shapeid,x,y,radius,lineColor,fillColor,lineWidth){var context=this._getContext(lineColor,fillColor,lineWidth);context.beginPath();context.arc(x,y,radius,0,2*Math.PI,false);if(this.targetX!==undefined&&this.targetY!==undefined&&context.isPointInPath(this.targetX,this.targetY)){this.currentTargetShapeId=shapeid}if(lineColor!==undefined){context.stroke()}if(fillColor!==undefined){context.fill()}},_drawPieSlice:function(shapeid,x,y,radius,startAngle,endAngle,lineColor,fillColor){var context=this._getContext(lineColor,fillColor);context.beginPath();context.moveTo(x,y);context.arc(x,y,radius,startAngle,endAngle,false);context.lineTo(x,y);context.closePath();if(lineColor!==undefined){context.stroke()}if(fillColor){context.fill()}if(this.targetX!==undefined&&this.targetY!==undefined&&context.isPointInPath(this.targetX,this.targetY)){this.currentTargetShapeId=shapeid}},_drawRect:function(shapeid,x,y,width,height,lineColor,fillColor){return this._drawShape(shapeid,[[x,y],[x+width,y],[x+width,y+height],[x,y+height],[x,y]],lineColor,fillColor)},appendShape:function(shape){this.shapes[shape.id]=shape;this.shapeseq.push(shape.id);this.lastShapeId=shape.id;return shape.id},replaceWithShape:function(shapeid,shape){var shapeseq=this.shapeseq,i;this.shapes[shape.id]=shape;for(i=shapeseq.length;i--;){if(shapeseq[i]==shapeid){shapeseq[i]=shape.id}}delete this.shapes[shapeid]},replaceWithShapes:function(shapeids,shapes){var shapeseq=this.shapeseq,shapemap={},sid,i,first;for(i=shapeids.length;i--;){shapemap[shapeids[i]]=true}for(i=shapeseq.length;i--;){sid=shapeseq[i];if(shapemap[sid]){shapeseq.splice(i,1);delete this.shapes[sid];first=i}}for(i=shapes.length;i--;){shapeseq.splice(first,0,shapes[i].id);this.shapes[shapes[i].id]=shapes[i]}},insertAfterShape:function(shapeid,shape){var shapeseq=this.shapeseq,i;for(i=shapeseq.length;i--;){if(shapeseq[i]===shapeid){shapeseq.splice(i+1,0,shape.id);this.shapes[shape.id]=shape;return}}},removeShapeId:function(shapeid){var shapeseq=this.shapeseq,i;for(i=shapeseq.length;i--;){if(shapeseq[i]===shapeid){shapeseq.splice(i,1);break}}delete this.shapes[shapeid]},getShapeAt:function(el,x,y){this.targetX=x;this.targetY=y;this.render();return this.currentTargetShapeId},render:function(){var shapeseq=this.shapeseq,shapes=this.shapes,shapeCount=shapeseq.length,context=this._getContext(),shapeid,shape,i;context.clearRect(0,0,this.pixelWidth,this.pixelHeight);for(i=0;i<shapeCount;i++){shapeid=shapeseq[i];shape=shapes[shapeid];this[\"_draw\"+shape.type].apply(this,shape.args)}if(!this.interact){this.shapes={};this.shapeseq=[]}}});VCanvas_vml=createClass(VCanvas_base,{init:function(width,height,target){var groupel;VCanvas_vml._super.init.call(this,width,height,target);if(target[0]){target=target[0]}$.data(target,\"_jqs_vcanvas\",this);this.canvas=document.createElement(\"span\");$(this.canvas).css({display:\"inline-block\",position:\"relative\",overflow:\"hidden\",width:width,height:height,margin:\"0px\",padding:\"0px\",verticalAlign:\"top\"});this._insert(this.canvas,target);this._calculatePixelDims(width,height,this.canvas);this.canvas.width=this.pixelWidth;this.canvas.height=this.pixelHeight;groupel='<v:group coordorigin=\"0 0\" coordsize=\"'+this.pixelWidth+\" \"+this.pixelHeight+'\"'+' style=\"position:absolute;top:0;left:0;width:'+this.pixelWidth+\"px;height=\"+this.pixelHeight+'px;\"></v:group>';this.canvas.insertAdjacentHTML(\"beforeEnd\",groupel);this.group=$(this.canvas).children()[0];this.rendered=false;this.prerender=\"\"},_drawShape:function(shapeid,path,lineColor,fillColor,lineWidth){var vpath=[],initial,stroke,fill,closed,vel,plen,i;for(i=0,plen=path.length;i<plen;i++){vpath[i]=\"\"+path[i][0]+\",\"+path[i][1]}initial=vpath.splice(0,1);lineWidth=lineWidth===undefined?1:lineWidth;stroke=lineColor===undefined?' stroked=\"false\" ':' strokeWeight=\"'+lineWidth+'px\" strokeColor=\"'+lineColor+'\" ';fill=fillColor===undefined?' filled=\"false\"':' fillColor=\"'+fillColor+'\" filled=\"true\" ';closed=vpath[0]===vpath[vpath.length-1]?\"x \":\"\";vel='<v:shape coordorigin=\"0 0\" coordsize=\"'+this.pixelWidth+\" \"+this.pixelHeight+'\" '+' id=\"jqsshape'+shapeid+'\" '+stroke+fill+' style=\"position:absolute;left:0px;top:0px;height:'+this.pixelHeight+\"px;width:\"+this.pixelWidth+'px;padding:0px;margin:0px;\" '+' path=\"m '+initial+\" l \"+vpath.join(\", \")+\" \"+closed+'e\">'+\" </v:shape>\";return vel},_drawCircle:function(shapeid,x,y,radius,lineColor,fillColor,lineWidth){var stroke,fill,vel;x-=radius;y-=radius;stroke=lineColor===undefined?' stroked=\"false\" ':' strokeWeight=\"'+lineWidth+'px\" strokeColor=\"'+lineColor+'\" ';fill=fillColor===undefined?' filled=\"false\"':' fillColor=\"'+fillColor+'\" filled=\"true\" ';vel=\"<v:oval \"+' id=\"jqsshape'+shapeid+'\" '+stroke+fill+' style=\"position:absolute;top:'+y+\"px; left:\"+x+\"px; width:\"+radius*2+\"px; height:\"+radius*2+'px\"></v:oval>';return vel},_drawPieSlice:function(shapeid,x,y,radius,startAngle,endAngle,lineColor,fillColor){var vpath,startx,starty,endx,endy,stroke,fill,vel;if(startAngle===endAngle){return\"\"}if(endAngle-startAngle===2*Math.PI){startAngle=0;endAngle=2*Math.PI}startx=x+Math.round(Math.cos(startAngle)*radius);starty=y+Math.round(Math.sin(startAngle)*radius);endx=x+Math.round(Math.cos(endAngle)*radius);endy=y+Math.round(Math.sin(endAngle)*radius);if(startx===endx&&starty===endy){if(endAngle-startAngle<Math.PI){return\"\"}startx=endx=x+radius;starty=endy=y}if(startx===endx&&starty===endy&&endAngle-startAngle<Math.PI){return\"\"}vpath=[x-radius,y-radius,x+radius,y+radius,startx,starty,endx,endy];stroke=lineColor===undefined?' stroked=\"false\" ':' strokeWeight=\"1px\" strokeColor=\"'+lineColor+'\" ';fill=fillColor===undefined?' filled=\"false\"':' fillColor=\"'+fillColor+'\" filled=\"true\" ';vel='<v:shape coordorigin=\"0 0\" coordsize=\"'+this.pixelWidth+\" \"+this.pixelHeight+'\" '+' id=\"jqsshape'+shapeid+'\" '+stroke+fill+' style=\"position:absolute;left:0px;top:0px;height:'+this.pixelHeight+\"px;width:\"+this.pixelWidth+'px;padding:0px;margin:0px;\" '+' path=\"m '+x+\",\"+y+\" wa \"+vpath.join(\", \")+' x e\">'+\" </v:shape>\";return vel},_drawRect:function(shapeid,x,y,width,height,lineColor,fillColor){return this._drawShape(shapeid,[[x,y],[x,y+height],[x+width,y+height],[x+width,y],[x,y]],lineColor,fillColor)},reset:function(){this.group.innerHTML=\"\"},appendShape:function(shape){var vel=this[\"_draw\"+shape.type].apply(this,shape.args);if(this.rendered){this.group.insertAdjacentHTML(\"beforeEnd\",vel)}else{this.prerender+=vel}this.lastShapeId=shape.id;return shape.id},replaceWithShape:function(shapeid,shape){var existing=$(\"#jqsshape\"+shapeid),vel=this[\"_draw\"+shape.type].apply(this,shape.args);existing[0].outerHTML=vel},replaceWithShapes:function(shapeids,shapes){var existing=$(\"#jqsshape\"+shapeids[0]),replace=\"\",slen=shapes.length,i;for(i=0;i<slen;i++){replace+=this[\"_draw\"+shapes[i].type].apply(this,shapes[i].args)}existing[0].outerHTML=replace;for(i=1;i<shapeids.length;i++){$(\"#jqsshape\"+shapeids[i]).remove()}},insertAfterShape:function(shapeid,shape){var existing=$(\"#jqsshape\"+shapeid),vel=this[\"_draw\"+shape.type].apply(this,shape.args);existing[0].insertAdjacentHTML(\"afterEnd\",vel)},removeShapeId:function(shapeid){var existing=$(\"#jqsshape\"+shapeid);this.group.removeChild(existing[0])},getShapeAt:function(el,x,y){var shapeid=el.id.substr(8);return shapeid},render:function(){if(!this.rendered){this.group.innerHTML=this.prerender;this.rendered=true}}})})})(document,Math);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1zcGFya2xpbmUvZGlzdC9qcXVlcnkuc3BhcmtsaW5lLm1pbi5qcz9lZTNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsbUNBQW1DLG1CQUFtQixTQUEyQztBQUFBO0FBQUE7QUFBQSxxR0FBMkIsc0NBQXNDLGlCQUFpQixjQUFjLGFBQWEsbUJBQW1CLGlVQUFpVSx1QkFBdUIsT0FBTyxRQUFRLGtjQUFrYyxPQUFPLDRYQUE0WCxPQUFPLFNBQVMsVUFBVSxVQUFVLEtBQUssUUFBUSxHQUFHLE1BQU0sZ1dBQWdXLE9BQU8sU0FBUyxVQUFVLFVBQVUsU0FBUyxRQUFRLEdBQUcsV0FBVyw2RkFBNkYsbURBQW1ELE9BQU8sU0FBUyxVQUFVLFdBQVcsd0JBQXdCLEtBQUssK0JBQStCLFdBQVcsK0pBQStKLFVBQVUsU0FBUyxRQUFRLEdBQUcsU0FBUyxrSkFBa0osaUJBQWlCLEtBQUssT0FBTyx3QkFBd0IsUUFBUSx1Q0FBdUMsTUFBTSwwTEFBMEwsT0FBTyxTQUFTLFVBQVUsT0FBTyxJQUFJLFdBQVcsS0FBSyxNQUFNLDJTQUEyUyxjQUFjLElBQUksT0FBTywwREFBMEQsUUFBUSxvSUFBb0ksNEJBQTRCLHVCQUF1QixhQUFhLFlBQVksc0JBQXNCLHdDQUF3QyxxQ0FBcUMscUdBQXFHLDRHQUE0RyxnQkFBZ0IsK0JBQStCLG9CQUFvQix1QkFBdUIsZ0JBQWdCLDJCQUEyQiwyQkFBMkIsa0JBQWtCLElBQUksY0FBYyxpQkFBaUIsK0JBQStCLG9CQUFvQixJQUFJLEVBQUUsdUJBQXVCLGVBQWUsaUJBQWlCLGlDQUFpQyx1QkFBdUIsaUJBQWlCLHlFQUF5RSxvQ0FBb0MsS0FBSyw4Q0FBOEMsdUJBQXVCLGdEQUFnRCw4QkFBOEIsd0JBQXdCLEtBQUssNkJBQTZCLDBCQUEwQixjQUFjLHNDQUFzQyxPQUFPLEVBQUUsb0JB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QThCLFFBQVEsa0JBQWtCLEtBQUsscUNBQXFDLDBDQUEwQyx3RkFBd0YsK0NBQStDLGlDQUFpQyxvQ0FBb0Msb0NBQW9DLDZCQUE2Qiw0QkFBNEIsZUFBZSxtQkFBbUIsbUJBQW1CLG9DQUFvQyxxQkFBcUIsRUFBRSxFQUFFIiwiZmlsZSI6IjUzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoganF1ZXJ5LnNwYXJrbGluZSAyLjEuMyAtIGh0dHA6Ly9vbW5pcG90ZW50Lm5ldC9qcXVlcnkuc3BhcmtsaW5lLyBcbioqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UgLSBzZWUgYWJvdmUgc2l0ZSBmb3IgZGV0YWlscyAqL1xuXG4oZnVuY3Rpb24oZG9jdW1lbnQsTWF0aCx1bmRlZmluZWQpeyhmdW5jdGlvbihmYWN0b3J5KXtpZih0eXBlb2YgZGVmaW5lPT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kKXtkZWZpbmUoW1wianF1ZXJ5XCJdLGZhY3RvcnkpfWVsc2UgaWYoalF1ZXJ5JiYhalF1ZXJ5LmZuLnNwYXJrbGluZSl7ZmFjdG9yeShqUXVlcnkpfX0pKGZ1bmN0aW9uKCQpe1widXNlIHN0cmljdFwiO3ZhciBVTlNFVF9PUFRJT049e30sZ2V0RGVmYXVsdHMsY3JlYXRlQ2xhc3MsU1BGb3JtYXQsY2xpcHZhbCxxdWFydGlsZSxub3JtYWxpemVWYWx1ZSxub3JtYWxpemVWYWx1ZXMscmVtb3ZlLGlzTnVtYmVyLGFsbCxzdW0sYWRkQ1NTLGVuc3VyZUFycmF5LGZvcm1hdE51bWJlcixSYW5nZU1hcCxNb3VzZUhhbmRsZXIsVG9vbHRpcCxiYXJIaWdobGlnaHRNaXhpbixsaW5lLGJhcix0cmlzdGF0ZSxkaXNjcmV0ZSxidWxsZXQscGllLGJveCxkZWZhdWx0U3R5bGVzLGluaXRTdHlsZXMsVlNoYXBlLFZDYW52YXNfYmFzZSxWQ2FudmFzX2NhbnZhcyxWQ2FudmFzX3ZtbCxwZW5kaW5nLHNoYXBlQ291bnQ9MDtnZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybntjb21tb246e3R5cGU6XCJsaW5lXCIsbGluZUNvbG9yOlwiIzAwZlwiLGZpbGxDb2xvcjpcIiNjZGZcIixkZWZhdWx0UGl4ZWxzUGVyVmFsdWU6Myx3aWR0aDpcImF1dG9cIixoZWlnaHQ6XCJhdXRvXCIsY29tcG9zaXRlOmZhbHNlLHRhZ1ZhbHVlc0F0dHJpYnV0ZTpcInZhbHVlc1wiLHRhZ09wdGlvbnNQcmVmaXg6XCJzcGFya1wiLGVuYWJsZVRhZ09wdGlvbnM6ZmFsc2UsZW5hYmxlSGlnaGxpZ2h0OnRydWUsaGlnaGxpZ2h0TGlnaHRlbjoxLjQsdG9vbHRpcFNraXBOdWxsOnRydWUsdG9vbHRpcFByZWZpeDpcIlwiLHRvb2x0aXBTdWZmaXg6XCJcIixkaXNhYmxlSGlkZGVuQ2hlY2s6ZmFsc2UsbnVtYmVyRm9ybWF0dGVyOmZhbHNlLG51bWJlckRpZ2l0R3JvdXBDb3VudDozLG51bWJlckRpZ2l0R3JvdXBTZXA6XCIsXCIsbnVtYmVyRGVjaW1hbE1hcms6XCIuXCIsZGlzYWJsZVRvb2x0aXBzOmZhbHNlLGRpc2FibGVJbnRlcmFjdGlvbjpmYWxzZX0sbGluZTp7c3BvdENvbG9yOlwiI2Y4MFwiLGhpZ2hsaWdodFNwb3RDb2xvcjpcIiM1ZjVcIixoaWdobGlnaHRMaW5lQ29sb3I6XCIjZjIyXCIsc3BvdFJhZGl1czoxLjUsbWluU3BvdENvbG9yOlwiI2Y4MFwiLG1heFNwb3RDb2xvcjpcIiNmODBcIixsaW5lV2lkdGg6MSxub3JtYWxSYW5nZU1pbjp1bmRlZmluZWQsbm9ybWFsUmFuZ2VNYXg6dW5kZWZpbmVkLG5vcm1hbFJhbmdlQ29sb3I6XCIjY2NjXCIsZHJhd05vcm1hbE9uVG9wOmZhbHNlLGNoYXJ0UmFuZ2VNaW46dW5kZWZpbmVkLGNoYXJ0UmFuZ2VNYXg6dW5kZWZpbmVkLGNoYXJ0UmFuZ2VNaW5YOnVuZGVmaW5lZCxjaGFydFJhbmdlTWF4WDp1bmRlZmluZWQsdG9vbHRpcEZvcm1hdDpuZXcgU1BGb3JtYXQoJzxzcGFuIHN0eWxlPVwiY29sb3I6IHt7Y29sb3J9fVwiPiYjOTY3OTs8L3NwYW4+IHt7cHJlZml4fX17e3l9fXt7c3VmZml4fX0nKX0sYmFyOntiYXJDb2xvcjpcIiMzMzY2Y2NcIixuZWdCYXJDb2xvcjpcIiNmNDRcIixzdGFja2VkQmFyQ29sb3I6W1wiIzMzNjZjY1wiLFwiI2RjMzkxMlwiLFwiI2ZmOTkwMFwiLFwiIzEwOTYxOFwiLFwiIzY2YWEwMFwiLFwiI2RkNDQ3N1wiLFwiIzAwOTljNlwiLFwiIzk5MDA5OVwiXSx6ZXJvQ29sb3I6dW5kZWZpbmVkLG51bGxDb2xvcjp1bmRlZmluZWQsemVyb0F4aXM6dHJ1ZSxiYXJXaWR0aDo0LGJhclNwYWNpbmc6MSxjaGFydFJhbmdlTWF4OnVuZGVmaW5lZCxjaGFydFJhbmdlTWluOnVuZGVmaW5lZCxjaGFydFJhbmdlQ2xpcDpmYWxzZSxjb2xvck1hcDp1bmRlZmluZWQsdG9vbHRpcEZvcm1hdDpuZXcgU1BGb3JtYXQoJzxzcGFuIHN0eWxlPVwiY29sb3I6IHt7Y29sb3J9fVwiPiYjOTY3OTs8L3NwYW4+IHt7cHJlZml4fX17e3ZhbHVlfX17e3N1ZmZpeH19Jyl9LHRyaXN0YXRlOntiYXJXaWR0aDo0LGJhclNwYWNpbmc6MSxwb3NCYXJDb2xvcjpcIiM2ZjZcIixuZWdCYXJDb2xvcjpcIiNmNDRcIix6ZXJvQmFyQ29sb3I6XCIjOTk5XCIsY29sb3JNYXA6e30sdG9vbHRpcEZvcm1hdDpuZXcgU1BGb3JtYXQoJzxzcGFuIHN0eWxlPVwiY29sb3I6IHt7Y29sb3J9fVwiPiYjOTY3OTs8L3NwYW4+IHt7dmFsdWU6bWFwfX0nKSx0b29sdGlwVmFsdWVMb29rdXBzOnttYXA6e1wiLTFcIjpcIkxvc3NcIiwwOlwiRHJhd1wiLDE6XCJXaW5cIn19fSxkaXNjcmV0ZTp7bGluZUhlaWdodDpcImF1dG9cIix0aHJlc2hvbGRDb2xvcjp1bmRlZmluZWQsdGhyZXNob2xkVmFsdWU6MCxjaGFydFJhbmdlTWF4OnVuZGVmaW5lZCxjaGFydFJhbmdlTWluOnVuZGVmaW5lZCxjaGFydFJhbmdlQ2xpcDpmYWxzZSx0b29sdGlwRm9ybWF0Om5ldyBTUEZvcm1hdChcInt7cHJlZml4fX17e3ZhbHVlfX17e3N1ZmZpeH19XCIpfSxidWxsZXQ6e3RhcmdldENvbG9yOlwiI2YzM1wiLHRhcmdldFdpZHRoOjMscGVyZm9ybWFuY2VDb2xvcjpcIiMzM2ZcIixyYW5nZUNvbG9yczpbXCIjZDNkYWZlXCIsXCIjYThiNmZmXCIsXCIjN2Y5NGZmXCJdLGJhc2U6dW5kZWZpbmVkLHRvb2x0aXBGb3JtYXQ6bmV3IFNQRm9ybWF0KFwie3tmaWVsZGtleTpmaWVsZHN9fSAtIHt7dmFsdWV9fVwiKSx0b29sdGlwVmFsdWVMb29rdXBzOntmaWVsZHM6e3I6XCJSYW5nZVwiLHA6XCJQZXJmb3JtYW5jZVwiLHQ6XCJUYXJnZXRcIn19fSxwaWU6e29mZnNldDowLHNsaWNlQ29sb3JzOltcIiMzMzY2Y2NcIixcIiNkYzM5MTJcIixcIiNmZjk5MDBcIixcIiMxMDk2MThcIixcIiM2NmFhMDBcIixcIiNkZDQ0NzdcIixcIiMwMDk5YzZcIixcIiM5OTAwOTlcIl0sYm9yZGVyV2lkdGg6MCxib3JkZXJDb2xvcjpcIiMwMDBcIix0b29sdGlwRm9ybWF0Om5ldyBTUEZvcm1hdCgnPHNwYW4gc3R5bGU9XCJjb2xvcjoge3tjb2xvcn19XCI+JiM5Njc5Ozwvc3Bhbj4ge3t2YWx1ZX19ICh7e3BlcmNlbnQuMX19JSknKX0sYm94OntyYXc6ZmFsc2UsYm94TGluZUNvbG9yOlwiIzAwMFwiLGJveEZpbGxDb2xvcjpcIiNjZGZcIix3aGlza2VyQ29sb3I6XCIjMDAwXCIsb3V0bGllckxpbmVDb2xvcjpcIiMzMzNcIixvdXRsaWVyRmlsbENvbG9yOlwiI2ZmZlwiLG1lZGlhbkNvbG9yOlwiI2YwMFwiLHNob3dPdXRsaWVyczp0cnVlLG91dGxpZXJJUVI6MS41LHNwb3RSYWRpdXM6MS41LHRhcmdldDp1bmRlZmluZWQsdGFyZ2V0Q29sb3I6XCIjNGEyXCIsY2hhcnRSYW5nZU1heDp1bmRlZmluZWQsY2hhcnRSYW5nZU1pbjp1bmRlZmluZWQsdG9vbHRpcEZvcm1hdDpuZXcgU1BGb3JtYXQoXCJ7e2ZpZWxkOmZpZWxkc319OiB7e3ZhbHVlfX1cIiksdG9vbHRpcEZvcm1hdEZpZWxkbGlzdEtleTpcImZpZWxkXCIsdG9vbHRpcFZhbHVlTG9va3Vwczp7ZmllbGRzOntscTpcIkxvd2VyIFF1YXJ0aWxlXCIsbWVkOlwiTWVkaWFuXCIsdXE6XCJVcHBlciBRdWFydGlsZVwiLGxvOlwiTGVmdCBPdXRsaWVyXCIscm86XCJSaWdodCBPdXRsaWVyXCIsbHc6XCJMZWZ0IFdoaXNrZXJcIixydzpcIlJpZ2h0IFdoaXNrZXJcIn19fX19O2RlZmF1bHRTdHlsZXM9XCIuanFzdG9vbHRpcCB7IFwiK1wicG9zaXRpb246IGFic29sdXRlO1wiK1wibGVmdDogMHB4O1wiK1widG9wOiAwcHg7XCIrXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIrXCJiYWNrZ3JvdW5kOiByZ2IoMCwgMCwgMCkgdHJhbnNwYXJlbnQ7XCIrXCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuNik7XCIrXCJmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5MDAwMDAwLCBlbmRDb2xvcnN0cj0jOTkwMDAwMDApO1wiKyctbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTAwMDAwMCwgZW5kQ29sb3JzdHI9Izk5MDAwMDAwKVwiOycrXCJjb2xvcjogd2hpdGU7XCIrXCJmb250OiAxMHB4IGFyaWFsLCBzYW4gc2VyaWY7XCIrXCJ0ZXh0LWFsaWduOiBsZWZ0O1wiK1wid2hpdGUtc3BhY2U6IG5vd3JhcDtcIitcInBhZGRpbmc6IDVweDtcIitcImJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1wiK1wiYm94LXNpemluZzogY29udGVudC1ib3g7XCIrXCJ6LWluZGV4OiAxMDAwMDtcIitcIn1cIitcIi5qcXNmaWVsZCB7IFwiK1wiY29sb3I6IHdoaXRlO1wiK1wiZm9udDogMTBweCBhcmlhbCwgc2FuIHNlcmlmO1wiK1widGV4dC1hbGlnbjogbGVmdDtcIitcIn1cIjtjcmVhdGVDbGFzcz1mdW5jdGlvbigpe3ZhciBDbGFzcyxhcmdzO0NsYXNzPWZ1bmN0aW9uKCl7dGhpcy5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtpZihhcmd1bWVudHNbMF0pe0NsYXNzLnByb3RvdHlwZT0kLmV4dGVuZChuZXcgYXJndW1lbnRzWzBdLGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTtDbGFzcy5fc3VwZXI9YXJndW1lbnRzWzBdLnByb3RvdHlwZX1lbHNle0NsYXNzLnByb3RvdHlwZT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXX1pZihhcmd1bWVudHMubGVuZ3RoPjIpe2FyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEsLTEpO2FyZ3MudW5zaGlmdChDbGFzcy5wcm90b3R5cGUpOyQuZXh0ZW5kLmFwcGx5KCQsYXJncyl9fWVsc2V7Q2xhc3MucHJvdG90eXBlPWFyZ3VtZW50c1swXX1DbGFzcy5wcm90b3R5cGUuY2xzPUNsYXNzO3JldHVybiBDbGFzc307JC5TUEZvcm1hdENsYXNzPVNQRm9ybWF0PWNyZWF0ZUNsYXNzKHtmcmU6L1xce1xceyhbXFx3Ll0rPykoOiguKz8pKT9cXH1cXH0vZyxwcmVjcmU6LyhcXHcrKVxcLihcXGQrKS8saW5pdDpmdW5jdGlvbihmb3JtYXQsZmNsYXNzKXt0aGlzLmZvcm1hdD1mb3JtYXQ7dGhpcy5mY2xhc3M9ZmNsYXNzfSxyZW5kZXI6ZnVuY3Rpb24oZmllbGRzZXQsbG9va3VwcyxvcHRpb25zKXt2YXIgc2VsZj10aGlzLGZpZWxkcz1maWVsZHNldCxtYXRjaCx0b2tlbixsb29rdXBrZXksZmllbGR2YWx1ZSxwcmVjO3JldHVybiB0aGlzLmZvcm1hdC5yZXBsYWNlKHRoaXMuZnJlLGZ1bmN0aW9uKCl7dmFyIGxvb2t1cDt0b2tlbj1hcmd1bWVudHNbMV07bG9va3Vwa2V5PWFyZ3VtZW50c1szXTttYXRjaD1zZWxmLnByZWNyZS5leGVjKHRva2VuKTtpZihtYXRjaCl7cHJlYz1tYXRjaFsyXTt0b2tlbj1tYXRjaFsxXX1lbHNle3ByZWM9ZmFsc2V9ZmllbGR2YWx1ZT1maWVsZHNbdG9rZW5dO2lmKGZpZWxkdmFsdWU9PT11bmRlZmluZWQpe3JldHVyblwiXCJ9aWYobG9va3Vwa2V5JiZsb29rdXBzJiZsb29rdXBzW2xvb2t1cGtleV0pe2xvb2t1cD1sb29rdXBzW2xvb2t1cGtleV07aWYobG9va3VwLmdldCl7cmV0dXJuIGxvb2t1cHNbbG9va3Vwa2V5XS5nZXQoZmllbGR2YWx1ZSl8fGZpZWxkdmFsdWV9ZWxzZXtyZXR1cm4gbG9va3Vwc1tsb29rdXBrZXldW2ZpZWxkdmFsdWVdfHxmaWVsZHZhbHVlfX1pZihpc051bWJlcihmaWVsZHZhbHVlKSl7aWYob3B0aW9ucy5nZXQoXCJudW1iZXJGb3JtYXR0ZXJcIikpe2ZpZWxkdmFsdWU9b3B0aW9ucy5nZXQoXCJudW1iZXJGb3JtYXR0ZXJcIikoZmllbGR2YWx1ZSl9ZWxzZXtmaWVsZHZhbHVlPWZvcm1hdE51bWJlcihmaWVsZHZhbHVlLHByZWMsb3B0aW9ucy5nZXQoXCJudW1iZXJEaWdpdEdyb3VwQ291bnRcIiksb3B0aW9ucy5nZXQoXCJudW1iZXJEaWdpdEdyb3VwU2VwXCIpLG9wdGlvbnMuZ2V0KFwibnVtYmVyRGVjaW1hbE1hcmtcIikpfX1yZXR1cm4gZmllbGR2YWx1ZX0pfX0pOyQuc3Bmb3JtYXQ9ZnVuY3Rpb24oZm9ybWF0LGZjbGFzcyl7cmV0dXJuIG5ldyBTUEZvcm1hdChmb3JtYXQsZmNsYXNzKX07Y2xpcHZhbD1mdW5jdGlvbih2YWwsbWluLG1heCl7aWYodmFsPG1pbil7cmV0dXJuIG1pbn1pZih2YWw+bWF4KXtyZXR1cm4gbWF4fXJldHVybiB2YWx9O3F1YXJ0aWxlPWZ1bmN0aW9uKHZhbHVlcyxxKXt2YXIgdmw7aWYocT09PTIpe3ZsPU1hdGguZmxvb3IodmFsdWVzLmxlbmd0aC8yKTtyZXR1cm4gdmFsdWVzLmxlbmd0aCUyP3ZhbHVlc1t2bF06KHZhbHVlc1t2bC0xXSt2YWx1ZXNbdmxdKS8yfWVsc2V7aWYodmFsdWVzLmxlbmd0aCUyKXt2bD0odmFsdWVzLmxlbmd0aCpxK3EpLzQ7cmV0dXJuIHZsJTE/KHZhbHVlc1tNYXRoLmZsb29yKHZsKV0rdmFsdWVzW01hdGguZmxvb3IodmwpLTFdKS8yOnZhbHVlc1t2bC0xXX1lbHNle3ZsPSh2YWx1ZXMubGVuZ3RoKnErMikvNDtyZXR1cm4gdmwlMT8odmFsdWVzW01hdGguZmxvb3IodmwpXSt2YWx1ZXNbTWF0aC5mbG9vcih2bCktMV0pLzI6dmFsdWVzW3ZsLTFdfX19O25vcm1hbGl6ZVZhbHVlPWZ1bmN0aW9uKHZhbCl7dmFyIG5mO3N3aXRjaCh2YWwpe2Nhc2VcInVuZGVmaW5lZFwiOnZhbD11bmRlZmluZWQ7YnJlYWs7Y2FzZVwibnVsbFwiOnZhbD1udWxsO2JyZWFrO2Nhc2VcInRydWVcIjp2YWw9dHJ1ZTticmVhaztjYXNlXCJmYWxzZVwiOnZhbD1mYWxzZTticmVhaztkZWZhdWx0Om5mPXBhcnNlRmxvYXQodmFsKTtpZih2YWw9PW5mKXt2YWw9bmZ9fXJldHVybiB2YWx9O25vcm1hbGl6ZVZhbHVlcz1mdW5jdGlvbih2YWxzKXt2YXIgaSxyZXN1bHQ9W107Zm9yKGk9dmFscy5sZW5ndGg7aS0tOyl7cmVzdWx0W2ldPW5vcm1hbGl6ZVZhbHVlKHZhbHNbaV0pfXJldHVybiByZXN1bHR9O3JlbW92ZT1mdW5jdGlvbih2YWxzLGZpbHRlcil7dmFyIGksdmwscmVzdWx0PVtdO2ZvcihpPTAsdmw9dmFscy5sZW5ndGg7aTx2bDtpKyspe2lmKHZhbHNbaV0hPT1maWx0ZXIpe3Jlc3VsdC5wdXNoKHZhbHNbaV0pfX1yZXR1cm4gcmVzdWx0fTtpc051bWJlcj1mdW5jdGlvbihudW0pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG51bSkpJiZpc0Zpbml0ZShudW0pfTtmb3JtYXROdW1iZXI9ZnVuY3Rpb24obnVtLHByZWMsZ3JvdXBzaXplLGdyb3Vwc2VwLGRlY3NlcCl7dmFyIHAsaTtudW09KHByZWM9PT1mYWxzZT9wYXJzZUZsb2F0KG51bSkudG9TdHJpbmcoKTpudW0udG9GaXhlZChwcmVjKSkuc3BsaXQoXCJcIik7cD0ocD0kLmluQXJyYXkoXCIuXCIsbnVtKSk8MD9udW0ubGVuZ3RoOnA7aWYocDxudW0ubGVuZ3RoKXtudW1bcF09ZGVjc2VwfWZvcihpPXAtZ3JvdXBzaXplO2k+MDtpLT1ncm91cHNpemUpe251bS5zcGxpY2UoaSwwLGdyb3Vwc2VwKX1yZXR1cm4gbnVtLmpvaW4oXCJcIil9O2FsbD1mdW5jdGlvbih2YWwsYXJyLGlnbm9yZU51bGwpe3ZhciBpO2ZvcihpPWFyci5sZW5ndGg7aS0tOyl7aWYoaWdub3JlTnVsbCYmYXJyW2ldPT09bnVsbCljb250aW51ZTtpZihhcnJbaV0hPT12YWwpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O3N1bT1mdW5jdGlvbih2YWxzKXt2YXIgdG90YWw9MCxpO2ZvcihpPXZhbHMubGVuZ3RoO2ktLTspe3RvdGFsKz10eXBlb2YgdmFsc1tpXT09PVwibnVtYmVyXCI/dmFsc1tpXTowfXJldHVybiB0b3RhbH07ZW5zdXJlQXJyYXk9ZnVuY3Rpb24odmFsKXtyZXR1cm4gJC5pc0FycmF5KHZhbCk/dmFsOlt2YWxdfTthZGRDU1M9ZnVuY3Rpb24oY3NzKXt2YXIgdGFnLGllZmFpbDtpZihkb2N1bWVudC5jcmVhdGVTdHlsZVNoZWV0KXt0cnl7ZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCgpLmNzc1RleHQ9Y3NzO3JldHVybn1jYXRjaChlKXtpZWZhaWw9dHJ1ZX19dGFnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTt0YWcudHlwZT1cInRleHQvY3NzXCI7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHRhZyk7aWYoaWVmYWlsKXtkb2N1bWVudC5zdHlsZVNoZWV0c1tkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgtMV0uY3NzVGV4dD1jc3N9ZWxzZXt0YWdbdHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0QXBwZWFyYW5jZT09XCJzdHJpbmdcIj9cImlubmVyVGV4dFwiOlwiaW5uZXJIVE1MXCJdPWNzc319OyQuZm4uc2ltcGxlZHJhdz1mdW5jdGlvbih3aWR0aCxoZWlnaHQsdXNlRXhpc3RpbmcsaW50ZXJhY3Qpe3ZhciB0YXJnZXQsbWhhbmRsZXI7aWYodXNlRXhpc3RpbmcmJih0YXJnZXQ9dGhpcy5kYXRhKFwiX2pxc192Y2FudmFzXCIpKSl7cmV0dXJuIHRhcmdldH1pZigkLmZuLnNwYXJrbGluZS5jYW52YXM9PT1mYWxzZSl7cmV0dXJuIGZhbHNlfWVsc2UgaWYoJC5mbi5zcGFya2xpbmUuY2FudmFzPT09dW5kZWZpbmVkKXt2YXIgZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtpZighIShlbC5nZXRDb250ZXh0JiZlbC5nZXRDb250ZXh0KFwiMmRcIikpKXskLmZuLnNwYXJrbGluZS5jYW52YXM9ZnVuY3Rpb24od2lkdGgsaGVpZ2h0LHRhcmdldCxpbnRlcmFjdCl7cmV0dXJuIG5ldyBWQ2FudmFzX2NhbnZhcyh3aWR0aCxoZWlnaHQsdGFyZ2V0LGludGVyYWN0KX19ZWxzZSBpZihkb2N1bWVudC5uYW1lc3BhY2VzJiYhZG9jdW1lbnQubmFtZXNwYWNlcy52KXtkb2N1bWVudC5uYW1lc3BhY2VzLmFkZChcInZcIixcInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sXCIsXCIjZGVmYXVsdCNWTUxcIik7JC5mbi5zcGFya2xpbmUuY2FudmFzPWZ1bmN0aW9uKHdpZHRoLGhlaWdodCx0YXJnZXQsaW50ZXJhY3Qpe3JldHVybiBuZXcgVkNhbnZhc192bWwod2lkdGgsaGVpZ2h0LHRhcmdldCl9fWVsc2V7JC5mbi5zcGFya2xpbmUuY2FudmFzPWZhbHNlO3JldHVybiBmYWxzZX19aWYod2lkdGg9PT11bmRlZmluZWQpe3dpZHRoPSQodGhpcykuaW5uZXJXaWR0aCgpfWlmKGhlaWdodD09PXVuZGVmaW5lZCl7aGVpZ2h0PSQodGhpcykuaW5uZXJIZWlnaHQoKX10YXJnZXQ9JC5mbi5zcGFya2xpbmUuY2FudmFzKHdpZHRoLGhlaWdodCx0aGlzLGludGVyYWN0KTttaGFuZGxlcj0kKHRoaXMpLmRhdGEoXCJfanFzX21oYW5kbGVyXCIpO2lmKG1oYW5kbGVyKXttaGFuZGxlci5yZWdpc3RlckNhbnZhcyh0YXJnZXQpfXJldHVybiB0YXJnZXR9OyQuZm4uY2xlYXJkcmF3PWZ1bmN0aW9uKCl7dmFyIHRhcmdldD10aGlzLmRhdGEoXCJfanFzX3ZjYW52YXNcIik7aWYodGFyZ2V0KXt0YXJnZXQucmVzZXQoKX19OyQuUmFuZ2VNYXBDbGFzcz1SYW5nZU1hcD1jcmVhdGVDbGFzcyh7aW5pdDpmdW5jdGlvbihtYXApe3ZhciBrZXkscmFuZ2UscmFuZ2VsaXN0PVtdO2ZvcihrZXkgaW4gbWFwKXtpZihtYXAuaGFzT3duUHJvcGVydHkoa2V5KSYmdHlwZW9mIGtleT09PVwic3RyaW5nXCImJmtleS5pbmRleE9mKFwiOlwiKT4tMSl7cmFuZ2U9a2V5LnNwbGl0KFwiOlwiKTtyYW5nZVswXT1yYW5nZVswXS5sZW5ndGg9PT0wPy1JbmZpbml0eTpwYXJzZUZsb2F0KHJhbmdlWzBdKTtyYW5nZVsxXT1yYW5nZVsxXS5sZW5ndGg9PT0wP0luZmluaXR5OnBhcnNlRmxvYXQocmFuZ2VbMV0pO3JhbmdlWzJdPW1hcFtrZXldO3JhbmdlbGlzdC5wdXNoKHJhbmdlKX19dGhpcy5tYXA9bWFwO3RoaXMucmFuZ2VsaXN0PXJhbmdlbGlzdHx8ZmFsc2V9LGdldDpmdW5jdGlvbih2YWx1ZSl7dmFyIHJhbmdlbGlzdD10aGlzLnJhbmdlbGlzdCxpLHJhbmdlLHJlc3VsdDtpZigocmVzdWx0PXRoaXMubWFwW3ZhbHVlXSkhPT11bmRlZmluZWQpe3JldHVybiByZXN1bHR9aWYocmFuZ2VsaXN0KXtmb3IoaT1yYW5nZWxpc3QubGVuZ3RoO2ktLTspe3JhbmdlPXJhbmdlbGlzdFtpXTtpZihyYW5nZVswXTw9dmFsdWUmJnJhbmdlWzFdPj12YWx1ZSl7cmV0dXJuIHJhbmdlWzJdfX19cmV0dXJuIHVuZGVmaW5lZH19KTskLnJhbmdlX21hcD1mdW5jdGlvbihtYXApe3JldHVybiBuZXcgUmFuZ2VNYXAobWFwKX07TW91c2VIYW5kbGVyPWNyZWF0ZUNsYXNzKHtpbml0OmZ1bmN0aW9uKGVsLG9wdGlvbnMpe3ZhciAkZWw9JChlbCk7dGhpcy4kZWw9JGVsO3RoaXMub3B0aW9ucz1vcHRpb25zO3RoaXMuY3VycmVudFBhZ2VYPTA7dGhpcy5jdXJyZW50UGFnZVk9MDt0aGlzLmVsPWVsO3RoaXMuc3BsaXN0PVtdO3RoaXMudG9vbHRpcD1udWxsO3RoaXMub3Zlcj1mYWxzZTt0aGlzLmRpc3BsYXlUb29sdGlwcz0hb3B0aW9ucy5nZXQoXCJkaXNhYmxlVG9vbHRpcHNcIik7dGhpcy5oaWdobGlnaHRFbmFibGVkPSFvcHRpb25zLmdldChcImRpc2FibGVIaWdobGlnaHRcIil9LHJlZ2lzdGVyU3BhcmtsaW5lOmZ1bmN0aW9uKHNwKXt0aGlzLnNwbGlzdC5wdXNoKHNwKTtpZih0aGlzLm92ZXIpe3RoaXMudXBkYXRlRGlzcGxheSgpfX0scmVnaXN0ZXJDYW52YXM6ZnVuY3Rpb24oY2FudmFzKXt2YXIgJGNhbnZhcz0kKGNhbnZhcy5jYW52YXMpO3RoaXMuY2FudmFzPWNhbnZhczt0aGlzLiRjYW52YXM9JGNhbnZhczskY2FudmFzLm1vdXNlZW50ZXIoJC5wcm94eSh0aGlzLm1vdXNlZW50ZXIsdGhpcykpOyRjYW52YXMubW91c2VsZWF2ZSgkLnByb3h5KHRoaXMubW91c2VsZWF2ZSx0aGlzKSk7JGNhbnZhcy5jbGljaygkLnByb3h5KHRoaXMubW91c2VjbGljayx0aGlzKSl9LHJlc2V0OmZ1bmN0aW9uKHJlbW92ZVRvb2x0aXApe3RoaXMuc3BsaXN0PVtdO2lmKHRoaXMudG9vbHRpcCYmcmVtb3ZlVG9vbHRpcCl7dGhpcy50b29sdGlwLnJlbW92ZSgpO3RoaXMudG9vbHRpcD11bmRlZmluZWR9fSxtb3VzZWNsaWNrOmZ1bmN0aW9uKGUpe3ZhciBjbGlja0V2ZW50PSQuRXZlbnQoXCJzcGFya2xpbmVDbGlja1wiKTtjbGlja0V2ZW50Lm9yaWdpbmFsRXZlbnQ9ZTtjbGlja0V2ZW50LnNwYXJrbGluZXM9dGhpcy5zcGxpc3Q7dGhpcy4kZWwudHJpZ2dlcihjbGlja0V2ZW50KX0sbW91c2VlbnRlcjpmdW5jdGlvbihlKXskKGRvY3VtZW50LmJvZHkpLnVuYmluZChcIm1vdXNlbW92ZS5qcXNcIik7JChkb2N1bWVudC5ib2R5KS5iaW5kKFwibW91c2Vtb3ZlLmpxc1wiLCQucHJveHkodGhpcy5tb3VzZW1vdmUsdGhpcykpO3RoaXMub3Zlcj10cnVlO3RoaXMuY3VycmVudFBhZ2VYPWUucGFnZVg7dGhpcy5jdXJyZW50UGFnZVk9ZS5wYWdlWTt0aGlzLmN1cnJlbnRFbD1lLnRhcmdldDtpZighdGhpcy50b29sdGlwJiZ0aGlzLmRpc3BsYXlUb29sdGlwcyl7dGhpcy50b29sdGlwPW5ldyBUb29sdGlwKHRoaXMub3B0aW9ucyk7dGhpcy50b29sdGlwLnVwZGF0ZVBvc2l0aW9uKGUucGFnZVgsZS5wYWdlWSl9dGhpcy51cGRhdGVEaXNwbGF5KCl9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oKXskKGRvY3VtZW50LmJvZHkpLnVuYmluZChcIm1vdXNlbW92ZS5qcXNcIik7dmFyIHNwbGlzdD10aGlzLnNwbGlzdCxzcGNvdW50PXNwbGlzdC5sZW5ndGgsbmVlZHNSZWZyZXNoPWZhbHNlLHNwLGk7dGhpcy5vdmVyPWZhbHNlO3RoaXMuY3VycmVudEVsPW51bGw7aWYodGhpcy50b29sdGlwKXt0aGlzLnRvb2x0aXAucmVtb3ZlKCk7dGhpcy50b29sdGlwPW51bGx9Zm9yKGk9MDtpPHNwY291bnQ7aSsrKXtzcD1zcGxpc3RbaV07aWYoc3AuY2xlYXJSZWdpb25IaWdobGlnaHQoKSl7bmVlZHNSZWZyZXNoPXRydWV9fWlmKG5lZWRzUmVmcmVzaCl7dGhpcy5jYW52YXMucmVuZGVyKCl9fSxtb3VzZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50UGFnZVg9ZS5wYWdlWDt0aGlzLmN1cnJlbnRQYWdlWT1lLnBhZ2VZO3RoaXMuY3VycmVudEVsPWUudGFyZ2V0O2lmKHRoaXMudG9vbHRpcCl7dGhpcy50b29sdGlwLnVwZGF0ZVBvc2l0aW9uKGUucGFnZVgsZS5wYWdlWSl9dGhpcy51cGRhdGVEaXNwbGF5KCl9LHVwZGF0ZURpc3BsYXk6ZnVuY3Rpb24oKXt2YXIgc3BsaXN0PXRoaXMuc3BsaXN0LHNwY291bnQ9c3BsaXN0Lmxlbmd0aCxuZWVkc1JlZnJlc2g9ZmFsc2Usb2Zmc2V0PXRoaXMuJGNhbnZhcy5vZmZzZXQoKSxsb2NhbFg9dGhpcy5jdXJyZW50UGFnZVgtb2Zmc2V0LmxlZnQsbG9jYWxZPXRoaXMuY3VycmVudFBhZ2VZLW9mZnNldC50b3AsdG9vbHRpcGh0bWwsc3AsaSxyZXN1bHQsY2hhbmdlRXZlbnQ7aWYoIXRoaXMub3Zlcil7cmV0dXJufWZvcihpPTA7aTxzcGNvdW50O2krKyl7c3A9c3BsaXN0W2ldO3Jlc3VsdD1zcC5zZXRSZWdpb25IaWdobGlnaHQodGhpcy5jdXJyZW50RWwsbG9jYWxYLGxvY2FsWSk7aWYocmVzdWx0KXtuZWVkc1JlZnJlc2g9dHJ1ZX19aWYobmVlZHNSZWZyZXNoKXtjaGFuZ2VFdmVudD0kLkV2ZW50KFwic3BhcmtsaW5lUmVnaW9uQ2hhbmdlXCIpO2NoYW5nZUV2ZW50LnNwYXJrbGluZXM9dGhpcy5zcGxpc3Q7dGhpcy4kZWwudHJpZ2dlcihjaGFuZ2VFdmVudCk7aWYodGhpcy50b29sdGlwKXt0b29sdGlwaHRtbD1cIlwiO2ZvcihpPTA7aTxzcGNvdW50O2krKyl7c3A9c3BsaXN0W2ldO3Rvb2x0aXBodG1sKz1zcC5nZXRDdXJyZW50UmVnaW9uVG9vbHRpcCgpfXRoaXMudG9vbHRpcC5zZXRDb250ZW50KHRvb2x0aXBodG1sKX1pZighdGhpcy5kaXNhYmxlSGlnaGxpZ2h0KXt0aGlzLmNhbnZhcy5yZW5kZXIoKX19aWYocmVzdWx0PT09bnVsbCl7dGhpcy5tb3VzZWxlYXZlKCl9fX0pO1Rvb2x0aXA9Y3JlYXRlQ2xhc3Moe3NpemVTdHlsZTpcInBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcIitcImRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XCIrXCJ2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcIitcImZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XCIsaW5pdDpmdW5jdGlvbihvcHRpb25zKXt2YXIgdG9vbHRpcENsYXNzbmFtZT1vcHRpb25zLmdldChcInRvb2x0aXBDbGFzc25hbWVcIixcImpxc3Rvb2x0aXBcIiksc2l6ZXRpcFN0eWxlPXRoaXMuc2l6ZVN0eWxlLG9mZnNldDt0aGlzLmNvbnRhaW5lcj1vcHRpb25zLmdldChcInRvb2x0aXBDb250YWluZXJcIil8fGRvY3VtZW50LmJvZHk7dGhpcy50b29sdGlwT2Zmc2V0WD1vcHRpb25zLmdldChcInRvb2x0aXBPZmZzZXRYXCIsMTApO3RoaXMudG9vbHRpcE9mZnNldFk9b3B0aW9ucy5nZXQoXCJ0b29sdGlwT2Zmc2V0WVwiLDEyKTskKFwiI2pxc3NpemV0aXBcIikucmVtb3ZlKCk7JChcIiNqcXN0b29sdGlwXCIpLnJlbW92ZSgpO3RoaXMuc2l6ZXRpcD0kKFwiPGRpdi8+XCIse2lkOlwianFzc2l6ZXRpcFwiLHN0eWxlOnNpemV0aXBTdHlsZSxcImNsYXNzXCI6dG9vbHRpcENsYXNzbmFtZX0pO3RoaXMudG9vbHRpcD0kKFwiPGRpdi8+XCIse2lkOlwianFzdG9vbHRpcFwiLFwiY2xhc3NcIjp0b29sdGlwQ2xhc3NuYW1lfSkuYXBwZW5kVG8odGhpcy5jb250YWluZXIpO29mZnNldD10aGlzLnRvb2x0aXAub2Zmc2V0KCk7dGhpcy5vZmZzZXRMZWZ0PW9mZnNldC5sZWZ0O3RoaXMub2Zmc2V0VG9wPW9mZnNldC50b3A7dGhpcy5oaWRkZW49dHJ1ZTskKHdpbmRvdykudW5iaW5kKFwicmVzaXplLmpxcyBzY3JvbGwuanFzXCIpOyQod2luZG93KS5iaW5kKFwicmVzaXplLmpxcyBzY3JvbGwuanFzXCIsJC5wcm94eSh0aGlzLnVwZGF0ZVdpbmRvd0RpbXMsdGhpcykpO3RoaXMudXBkYXRlV2luZG93RGltcygpfSx1cGRhdGVXaW5kb3dEaW1zOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUb3A9JCh3aW5kb3cpLnNjcm9sbFRvcCgpO3RoaXMuc2Nyb2xsTGVmdD0kKHdpbmRvdykuc2Nyb2xsTGVmdCgpO3RoaXMuc2Nyb2xsUmlnaHQ9dGhpcy5zY3JvbGxMZWZ0KyQod2luZG93KS53aWR0aCgpO3RoaXMudXBkYXRlUG9zaXRpb24oKX0sZ2V0U2l6ZTpmdW5jdGlvbihjb250ZW50KXt0aGlzLnNpemV0aXAuaHRtbChjb250ZW50KS5hcHBlbmRUbyh0aGlzLmNvbnRhaW5lcik7dGhpcy53aWR0aD10aGlzLnNpemV0aXAud2lkdGgoKSsxO3RoaXMuaGVpZ2h0PXRoaXMuc2l6ZXRpcC5oZWlnaHQoKTt0aGlzLnNpemV0aXAucmVtb3ZlKCl9LHNldENvbnRlbnQ6ZnVuY3Rpb24oY29udGVudCl7aWYoIWNvbnRlbnQpe3RoaXMudG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIik7dGhpcy5oaWRkZW49dHJ1ZTtyZXR1cm59dGhpcy5nZXRTaXplKGNvbnRlbnQpO3RoaXMudG9vbHRpcC5odG1sKGNvbnRlbnQpLmNzcyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsdmlzaWJpbGl0eTpcInZpc2libGVcIn0pO2lmKHRoaXMuaGlkZGVuKXt0aGlzLmhpZGRlbj1mYWxzZTt0aGlzLnVwZGF0ZVBvc2l0aW9uKCl9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbih4LHkpe2lmKHg9PT11bmRlZmluZWQpe2lmKHRoaXMubW91c2V4PT09dW5kZWZpbmVkKXtyZXR1cm59eD10aGlzLm1vdXNleC10aGlzLm9mZnNldExlZnQ7eT10aGlzLm1vdXNleS10aGlzLm9mZnNldFRvcH1lbHNle3RoaXMubW91c2V4PXg9eC10aGlzLm9mZnNldExlZnQ7dGhpcy5tb3VzZXk9eT15LXRoaXMub2Zmc2V0VG9wfWlmKCF0aGlzLmhlaWdodHx8IXRoaXMud2lkdGh8fHRoaXMuaGlkZGVuKXtyZXR1cm59eS09dGhpcy5oZWlnaHQrdGhpcy50b29sdGlwT2Zmc2V0WTt4Kz10aGlzLnRvb2x0aXBPZmZzZXRYO2lmKHk8dGhpcy5zY3JvbGxUb3Ape3k9dGhpcy5zY3JvbGxUb3B9aWYoeDx0aGlzLnNjcm9sbExlZnQpe3g9dGhpcy5zY3JvbGxMZWZ0fWVsc2UgaWYoeCt0aGlzLndpZHRoPnRoaXMuc2Nyb2xsUmlnaHQpe3g9dGhpcy5zY3JvbGxSaWdodC10aGlzLndpZHRofXRoaXMudG9vbHRpcC5jc3Moe2xlZnQ6eCx0b3A6eX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLnRvb2x0aXAucmVtb3ZlKCk7dGhpcy5zaXpldGlwLnJlbW92ZSgpO3RoaXMuc2l6ZXRpcD10aGlzLnRvb2x0aXA9dW5kZWZpbmVkOyQod2luZG93KS51bmJpbmQoXCJyZXNpemUuanFzIHNjcm9sbC5qcXNcIil9fSk7aW5pdFN0eWxlcz1mdW5jdGlvbigpe2FkZENTUyhkZWZhdWx0U3R5bGVzKX07JChpbml0U3R5bGVzKTtwZW5kaW5nPVtdOyQuZm4uc3BhcmtsaW5lPWZ1bmN0aW9uKHVzZXJWYWx1ZXMsdXNlck9wdGlvbnMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgb3B0aW9ucz1uZXcgJC5mbi5zcGFya2xpbmUub3B0aW9ucyh0aGlzLHVzZXJPcHRpb25zKSwkdGhpcz0kKHRoaXMpLHJlbmRlcixpO3JlbmRlcj1mdW5jdGlvbigpe3ZhciB2YWx1ZXMsd2lkdGgsaGVpZ2h0LHRtcCxtaGFuZGxlcixzcCx2YWxzO2lmKHVzZXJWYWx1ZXM9PT1cImh0bWxcInx8dXNlclZhbHVlcz09PXVuZGVmaW5lZCl7dmFscz10aGlzLmdldEF0dHJpYnV0ZShvcHRpb25zLmdldChcInRhZ1ZhbHVlc0F0dHJpYnV0ZVwiKSk7aWYodmFscz09PXVuZGVmaW5lZHx8dmFscz09PW51bGwpe3ZhbHM9JHRoaXMuaHRtbCgpfXZhbHVlcz12YWxzLnJlcGxhY2UoLyheXFxzKjwhLS0pfCgtLT5cXHMqJCl8XFxzKy9nLFwiXCIpLnNwbGl0KFwiLFwiKX1lbHNle3ZhbHVlcz11c2VyVmFsdWVzfXdpZHRoPW9wdGlvbnMuZ2V0KFwid2lkdGhcIik9PT1cImF1dG9cIj92YWx1ZXMubGVuZ3RoKm9wdGlvbnMuZ2V0KFwiZGVmYXVsdFBpeGVsc1BlclZhbHVlXCIpOm9wdGlvbnMuZ2V0KFwid2lkdGhcIik7aWYob3B0aW9ucy5nZXQoXCJoZWlnaHRcIik9PT1cImF1dG9cIil7aWYoIW9wdGlvbnMuZ2V0KFwiY29tcG9zaXRlXCIpfHwhJC5kYXRhKHRoaXMsXCJfanFzX3ZjYW52YXNcIikpe3RtcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTt0bXAuaW5uZXJIVE1MPVwiYVwiOyR0aGlzLmh0bWwodG1wKTtoZWlnaHQ9JCh0bXApLmlubmVySGVpZ2h0KCl8fCQodG1wKS5oZWlnaHQoKTskKHRtcCkucmVtb3ZlKCk7dG1wPW51bGx9fWVsc2V7aGVpZ2h0PW9wdGlvbnMuZ2V0KFwiaGVpZ2h0XCIpfWlmKCFvcHRpb25zLmdldChcImRpc2FibGVJbnRlcmFjdGlvblwiKSl7bWhhbmRsZXI9JC5kYXRhKHRoaXMsXCJfanFzX21oYW5kbGVyXCIpO2lmKCFtaGFuZGxlcil7bWhhbmRsZXI9bmV3IE1vdXNlSGFuZGxlcih0aGlzLG9wdGlvbnMpOyQuZGF0YSh0aGlzLFwiX2pxc19taGFuZGxlclwiLG1oYW5kbGVyKX1lbHNlIGlmKCFvcHRpb25zLmdldChcImNvbXBvc2l0ZVwiKSl7bWhhbmRsZXIucmVzZXQoKX19ZWxzZXttaGFuZGxlcj1mYWxzZX1pZihvcHRpb25zLmdldChcImNvbXBvc2l0ZVwiKSYmISQuZGF0YSh0aGlzLFwiX2pxc192Y2FudmFzXCIpKXtpZighJC5kYXRhKHRoaXMsXCJfanFzX2Vycm5vdGlmeVwiKSl7YWxlcnQoXCJBdHRlbXB0ZWQgdG8gYXR0YWNoIGEgY29tcG9zaXRlIHNwYXJrbGluZSB0byBhbiBlbGVtZW50IHdpdGggbm8gZXhpc3Rpbmcgc3BhcmtsaW5lXCIpOyQuZGF0YSh0aGlzLFwiX2pxc19lcnJub3RpZnlcIix0cnVlKX1yZXR1cm59c3A9bmV3KCQuZm4uc3BhcmtsaW5lW29wdGlvbnMuZ2V0KFwidHlwZVwiKV0pKHRoaXMsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KTtzcC5yZW5kZXIoKTtpZihtaGFuZGxlcil7bWhhbmRsZXIucmVnaXN0ZXJTcGFya2xpbmUoc3ApfX07aWYoJCh0aGlzKS5odG1sKCkmJiFvcHRpb25zLmdldChcImRpc2FibGVIaWRkZW5DaGVja1wiKSYmJCh0aGlzKS5pcyhcIjpoaWRkZW5cIil8fCEkKHRoaXMpLnBhcmVudHMoXCJib2R5XCIpLmxlbmd0aCl7aWYoIW9wdGlvbnMuZ2V0KFwiY29tcG9zaXRlXCIpJiYkLmRhdGEodGhpcyxcIl9qcXNfcGVuZGluZ1wiKSl7Zm9yKGk9cGVuZGluZy5sZW5ndGg7aTtpLS0pe2lmKHBlbmRpbmdbaS0xXVswXT09dGhpcyl7cGVuZGluZy5zcGxpY2UoaS0xLDEpfX19cGVuZGluZy5wdXNoKFt0aGlzLHJlbmRlcl0pOyQuZGF0YSh0aGlzLFwiX2pxc19wZW5kaW5nXCIsdHJ1ZSl9ZWxzZXtyZW5kZXIuY2FsbCh0aGlzKX19KX07JC5mbi5zcGFya2xpbmUuZGVmYXVsdHM9Z2V0RGVmYXVsdHMoKTskLnNwYXJrbGluZV9kaXNwbGF5X3Zpc2libGU9ZnVuY3Rpb24oKXt2YXIgZWwsaSxwbDt2YXIgZG9uZT1bXTtmb3IoaT0wLHBsPXBlbmRpbmcubGVuZ3RoO2k8cGw7aSsrKXtlbD1wZW5kaW5nW2ldWzBdO2lmKCQoZWwpLmlzKFwiOnZpc2libGVcIikmJiEkKGVsKS5wYXJlbnRzKCkuaXMoXCI6aGlkZGVuXCIpKXtwZW5kaW5nW2ldWzFdLmNhbGwoZWwpOyQuZGF0YShwZW5kaW5nW2ldWzBdLFwiX2pxc19wZW5kaW5nXCIsZmFsc2UpO2RvbmUucHVzaChpKX1lbHNlIGlmKCEkKGVsKS5jbG9zZXN0KFwiaHRtbFwiKS5sZW5ndGgmJiEkLmRhdGEoZWwsXCJfanFzX3BlbmRpbmdcIikpeyQuZGF0YShwZW5kaW5nW2ldWzBdLFwiX2pxc19wZW5kaW5nXCIsZmFsc2UpO2RvbmUucHVzaChpKX19Zm9yKGk9ZG9uZS5sZW5ndGg7aTtpLS0pe3BlbmRpbmcuc3BsaWNlKGRvbmVbaS0xXSwxKX19OyQuZm4uc3BhcmtsaW5lLm9wdGlvbnM9Y3JlYXRlQ2xhc3Moe2luaXQ6ZnVuY3Rpb24odGFnLHVzZXJPcHRpb25zKXt2YXIgZXh0ZW5kZWRPcHRpb25zLGRlZmF1bHRzLGJhc2UsdGFnT3B0aW9uVHlwZTt0aGlzLnVzZXJPcHRpb25zPXVzZXJPcHRpb25zPXVzZXJPcHRpb25zfHx7fTt0aGlzLnRhZz10YWc7dGhpcy50YWdWYWxDYWNoZT17fTtkZWZhdWx0cz0kLmZuLnNwYXJrbGluZS5kZWZhdWx0cztiYXNlPWRlZmF1bHRzLmNvbW1vbjt0aGlzLnRhZ09wdGlvbnNQcmVmaXg9dXNlck9wdGlvbnMuZW5hYmxlVGFnT3B0aW9ucyYmKHVzZXJPcHRpb25zLnRhZ09wdGlvbnNQcmVmaXh8fGJhc2UudGFnT3B0aW9uc1ByZWZpeCk7dGFnT3B0aW9uVHlwZT10aGlzLmdldFRhZ1NldHRpbmcoXCJ0eXBlXCIpO2lmKHRhZ09wdGlvblR5cGU9PT1VTlNFVF9PUFRJT04pe2V4dGVuZGVkT3B0aW9ucz1kZWZhdWx0c1t1c2VyT3B0aW9ucy50eXBlfHxiYXNlLnR5cGVdfWVsc2V7ZXh0ZW5kZWRPcHRpb25zPWRlZmF1bHRzW3RhZ09wdGlvblR5cGVdfXRoaXMubWVyZ2VkT3B0aW9ucz0kLmV4dGVuZCh7fSxiYXNlLGV4dGVuZGVkT3B0aW9ucyx1c2VyT3B0aW9ucyl9LGdldFRhZ1NldHRpbmc6ZnVuY3Rpb24oa2V5KXt2YXIgcHJlZml4PXRoaXMudGFnT3B0aW9uc1ByZWZpeCx2YWwsaSxwYWlycyxrZXl2YWw7aWYocHJlZml4PT09ZmFsc2V8fHByZWZpeD09PXVuZGVmaW5lZCl7cmV0dXJuIFVOU0VUX09QVElPTn1pZih0aGlzLnRhZ1ZhbENhY2hlLmhhc093blByb3BlcnR5KGtleSkpe3ZhbD10aGlzLnRhZ1ZhbENhY2hlLmtleX1lbHNle3ZhbD10aGlzLnRhZy5nZXRBdHRyaWJ1dGUocHJlZml4K2tleSk7aWYodmFsPT09dW5kZWZpbmVkfHx2YWw9PT1udWxsKXt2YWw9VU5TRVRfT1BUSU9OfWVsc2UgaWYodmFsLnN1YnN0cigwLDEpPT09XCJbXCIpe3ZhbD12YWwuc3Vic3RyKDEsdmFsLmxlbmd0aC0yKS5zcGxpdChcIixcIik7Zm9yKGk9dmFsLmxlbmd0aDtpLS07KXt2YWxbaV09bm9ybWFsaXplVmFsdWUodmFsW2ldLnJlcGxhY2UoLyheXFxzKil8KFxccyokKS9nLFwiXCIpKX19ZWxzZSBpZih2YWwuc3Vic3RyKDAsMSk9PT1cIntcIil7cGFpcnM9dmFsLnN1YnN0cigxLHZhbC5sZW5ndGgtMikuc3BsaXQoXCIsXCIpO3ZhbD17fTtmb3IoaT1wYWlycy5sZW5ndGg7aS0tOyl7a2V5dmFsPXBhaXJzW2ldLnNwbGl0KFwiOlwiLDIpO3ZhbFtrZXl2YWxbMF0ucmVwbGFjZSgvKF5cXHMqKXwoXFxzKiQpL2csXCJcIildPW5vcm1hbGl6ZVZhbHVlKGtleXZhbFsxXS5yZXBsYWNlKC8oXlxccyopfChcXHMqJCkvZyxcIlwiKSl9fWVsc2V7dmFsPW5vcm1hbGl6ZVZhbHVlKHZhbCl9dGhpcy50YWdWYWxDYWNoZS5rZXk9dmFsfXJldHVybiB2YWx9LGdldDpmdW5jdGlvbihrZXksZGVmYXVsdHZhbCl7dmFyIHRhZ09wdGlvbj10aGlzLmdldFRhZ1NldHRpbmcoa2V5KSxyZXN1bHQ7aWYodGFnT3B0aW9uIT09VU5TRVRfT1BUSU9OKXtyZXR1cm4gdGFnT3B0aW9ufXJldHVybihyZXN1bHQ9dGhpcy5tZXJnZWRPcHRpb25zW2tleV0pPT09dW5kZWZpbmVkP2RlZmF1bHR2YWw6cmVzdWx0fX0pOyQuZm4uc3BhcmtsaW5lLl9iYXNlPWNyZWF0ZUNsYXNzKHtkaXNhYmxlZDpmYWxzZSxpbml0OmZ1bmN0aW9uKGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCl7dGhpcy5lbD1lbDt0aGlzLiRlbD0kKGVsKTt0aGlzLnZhbHVlcz12YWx1ZXM7dGhpcy5vcHRpb25zPW9wdGlvbnM7dGhpcy53aWR0aD13aWR0aDt0aGlzLmhlaWdodD1oZWlnaHQ7dGhpcy5jdXJyZW50UmVnaW9uPXVuZGVmaW5lZH0saW5pdFRhcmdldDpmdW5jdGlvbigpe3ZhciBpbnRlcmFjdGl2ZT0hdGhpcy5vcHRpb25zLmdldChcImRpc2FibGVJbnRlcmFjdGlvblwiKTtpZighKHRoaXMudGFyZ2V0PXRoaXMuJGVsLnNpbXBsZWRyYXcodGhpcy53aWR0aCx0aGlzLmhlaWdodCx0aGlzLm9wdGlvbnMuZ2V0KFwiY29tcG9zaXRlXCIpLGludGVyYWN0aXZlKSkpe3RoaXMuZGlzYWJsZWQ9dHJ1ZX1lbHNle3RoaXMuY2FudmFzV2lkdGg9dGhpcy50YXJnZXQucGl4ZWxXaWR0aDt0aGlzLmNhbnZhc0hlaWdodD10aGlzLnRhcmdldC5waXhlbEhlaWdodH19LHJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlzYWJsZWQpe3RoaXMuZWwuaW5uZXJIVE1MPVwiXCI7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRSZWdpb246ZnVuY3Rpb24oeCx5KXt9LHNldFJlZ2lvbkhpZ2hsaWdodDpmdW5jdGlvbihlbCx4LHkpe3ZhciBjdXJyZW50UmVnaW9uPXRoaXMuY3VycmVudFJlZ2lvbixoaWdobGlnaHRFbmFibGVkPSF0aGlzLm9wdGlvbnMuZ2V0KFwiZGlzYWJsZUhpZ2hsaWdodFwiKSxuZXdSZWdpb247aWYoeD50aGlzLmNhbnZhc1dpZHRofHx5PnRoaXMuY2FudmFzSGVpZ2h0fHx4PDB8fHk8MCl7cmV0dXJuIG51bGx9bmV3UmVnaW9uPXRoaXMuZ2V0UmVnaW9uKGVsLHgseSk7aWYoY3VycmVudFJlZ2lvbiE9PW5ld1JlZ2lvbil7aWYoY3VycmVudFJlZ2lvbiE9PXVuZGVmaW5lZCYmaGlnaGxpZ2h0RW5hYmxlZCl7dGhpcy5yZW1vdmVIaWdobGlnaHQoKX10aGlzLmN1cnJlbnRSZWdpb249bmV3UmVnaW9uO2lmKG5ld1JlZ2lvbiE9PXVuZGVmaW5lZCYmaGlnaGxpZ2h0RW5hYmxlZCl7dGhpcy5yZW5kZXJIaWdobGlnaHQoKX1yZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9LGNsZWFyUmVnaW9uSGlnaGxpZ2h0OmZ1bmN0aW9uKCl7aWYodGhpcy5jdXJyZW50UmVnaW9uIT09dW5kZWZpbmVkKXt0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO3RoaXMuY3VycmVudFJlZ2lvbj11bmRlZmluZWQ7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfSxyZW5kZXJIaWdobGlnaHQ6ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZUhpZ2hsaWdodCh0cnVlKX0scmVtb3ZlSGlnaGxpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VIaWdobGlnaHQoZmFsc2UpfSxjaGFuZ2VIaWdobGlnaHQ6ZnVuY3Rpb24oaGlnaGxpZ2h0KXt9LGdldEN1cnJlbnRSZWdpb25Ub29sdGlwOmZ1bmN0aW9uKCl7dmFyIG9wdGlvbnM9dGhpcy5vcHRpb25zLGhlYWRlcj1cIlwiLGVudHJpZXM9W10sZmllbGRzLGZvcm1hdHMsZm9ybWF0bGVuLGZjbGFzcyx0ZXh0LGksc2hvd0ZpZWxkcyxzaG93RmllbGRzS2V5LG5ld0ZpZWxkcyxmdixmb3JtYXR0ZXIsZm9ybWF0LGZpZWxkbGVuLGo7aWYodGhpcy5jdXJyZW50UmVnaW9uPT09dW5kZWZpbmVkKXtyZXR1cm5cIlwifWZpZWxkcz10aGlzLmdldEN1cnJlbnRSZWdpb25GaWVsZHMoKTtmb3JtYXR0ZXI9b3B0aW9ucy5nZXQoXCJ0b29sdGlwRm9ybWF0dGVyXCIpO2lmKGZvcm1hdHRlcil7cmV0dXJuIGZvcm1hdHRlcih0aGlzLG9wdGlvbnMsZmllbGRzKX1pZihvcHRpb25zLmdldChcInRvb2x0aXBDaGFydFRpdGxlXCIpKXtoZWFkZXIrPSc8ZGl2IGNsYXNzPVwianFzIGpxc3RpdGxlXCI+JytvcHRpb25zLmdldChcInRvb2x0aXBDaGFydFRpdGxlXCIpK1wiPC9kaXY+XFxuXCJ9Zm9ybWF0cz10aGlzLm9wdGlvbnMuZ2V0KFwidG9vbHRpcEZvcm1hdFwiKTtpZighZm9ybWF0cyl7cmV0dXJuXCJcIn1pZighJC5pc0FycmF5KGZvcm1hdHMpKXtmb3JtYXRzPVtmb3JtYXRzXX1pZighJC5pc0FycmF5KGZpZWxkcykpe2ZpZWxkcz1bZmllbGRzXX1zaG93RmllbGRzPXRoaXMub3B0aW9ucy5nZXQoXCJ0b29sdGlwRm9ybWF0RmllbGRsaXN0XCIpO3Nob3dGaWVsZHNLZXk9dGhpcy5vcHRpb25zLmdldChcInRvb2x0aXBGb3JtYXRGaWVsZGxpc3RLZXlcIik7aWYoc2hvd0ZpZWxkcyYmc2hvd0ZpZWxkc0tleSl7bmV3RmllbGRzPVtdO2ZvcihpPWZpZWxkcy5sZW5ndGg7aS0tOyl7ZnY9ZmllbGRzW2ldW3Nob3dGaWVsZHNLZXldO2lmKChqPSQuaW5BcnJheShmdixzaG93RmllbGRzKSkhPS0xKXtuZXdGaWVsZHNbal09ZmllbGRzW2ldfX1maWVsZHM9bmV3RmllbGRzfWZvcm1hdGxlbj1mb3JtYXRzLmxlbmd0aDtmaWVsZGxlbj1maWVsZHMubGVuZ3RoO2ZvcihpPTA7aTxmb3JtYXRsZW47aSsrKXtmb3JtYXQ9Zm9ybWF0c1tpXTtpZih0eXBlb2YgZm9ybWF0PT09XCJzdHJpbmdcIil7Zm9ybWF0PW5ldyBTUEZvcm1hdChmb3JtYXQpfWZjbGFzcz1mb3JtYXQuZmNsYXNzfHxcImpxc2ZpZWxkXCI7Zm9yKGo9MDtqPGZpZWxkbGVuO2orKyl7aWYoIWZpZWxkc1tqXS5pc051bGx8fCFvcHRpb25zLmdldChcInRvb2x0aXBTa2lwTnVsbFwiKSl7JC5leHRlbmQoZmllbGRzW2pdLHtwcmVmaXg6b3B0aW9ucy5nZXQoXCJ0b29sdGlwUHJlZml4XCIpLHN1ZmZpeDpvcHRpb25zLmdldChcInRvb2x0aXBTdWZmaXhcIil9KTt0ZXh0PWZvcm1hdC5yZW5kZXIoZmllbGRzW2pdLG9wdGlvbnMuZ2V0KFwidG9vbHRpcFZhbHVlTG9va3Vwc1wiKSxvcHRpb25zKTtlbnRyaWVzLnB1c2goJzxkaXYgY2xhc3M9XCInK2ZjbGFzcysnXCI+Jyt0ZXh0K1wiPC9kaXY+XCIpfX19aWYoZW50cmllcy5sZW5ndGgpe3JldHVybiBoZWFkZXIrZW50cmllcy5qb2luKFwiXFxuXCIpfXJldHVyblwiXCJ9LGdldEN1cnJlbnRSZWdpb25GaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGNIaWdobGlnaHRDb2xvcjpmdW5jdGlvbihjb2xvcixvcHRpb25zKXt2YXIgaGlnaGxpZ2h0Q29sb3I9b3B0aW9ucy5nZXQoXCJoaWdobGlnaHRDb2xvclwiKSxsaWdodGVuPW9wdGlvbnMuZ2V0KFwiaGlnaGxpZ2h0TGlnaHRlblwiKSxwYXJzZSxtdWx0LHJnYm5ldyxpO2lmKGhpZ2hsaWdodENvbG9yKXtyZXR1cm4gaGlnaGxpZ2h0Q29sb3J9aWYobGlnaHRlbil7cGFyc2U9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pJC9pLmV4ZWMoY29sb3IpfHwvXiMoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkkL2kuZXhlYyhjb2xvcik7aWYocGFyc2Upe3JnYm5ldz1bXTttdWx0PWNvbG9yLmxlbmd0aD09PTQ/MTY6MTtmb3IoaT0wO2k8MztpKyspe3JnYm5ld1tpXT1jbGlwdmFsKE1hdGgucm91bmQocGFyc2VJbnQocGFyc2VbaSsxXSwxNikqbXVsdCpsaWdodGVuKSwwLDI1NSl9cmV0dXJuXCJyZ2IoXCIrcmdibmV3LmpvaW4oXCIsXCIpK1wiKVwifX1yZXR1cm4gY29sb3J9fSk7YmFySGlnaGxpZ2h0TWl4aW49e2NoYW5nZUhpZ2hsaWdodDpmdW5jdGlvbihoaWdobGlnaHQpe3ZhciBjdXJyZW50UmVnaW9uPXRoaXMuY3VycmVudFJlZ2lvbix0YXJnZXQ9dGhpcy50YXJnZXQsc2hhcGVpZHM9dGhpcy5yZWdpb25TaGFwZXNbY3VycmVudFJlZ2lvbl0sbmV3U2hhcGVzO2lmKHNoYXBlaWRzKXtuZXdTaGFwZXM9dGhpcy5yZW5kZXJSZWdpb24oY3VycmVudFJlZ2lvbixoaWdobGlnaHQpO2lmKCQuaXNBcnJheShuZXdTaGFwZXMpfHwkLmlzQXJyYXkoc2hhcGVpZHMpKXt0YXJnZXQucmVwbGFjZVdpdGhTaGFwZXMoc2hhcGVpZHMsbmV3U2hhcGVzKTt0aGlzLnJlZ2lvblNoYXBlc1tjdXJyZW50UmVnaW9uXT0kLm1hcChuZXdTaGFwZXMsZnVuY3Rpb24obmV3U2hhcGUpe3JldHVybiBuZXdTaGFwZS5pZH0pfWVsc2V7dGFyZ2V0LnJlcGxhY2VXaXRoU2hhcGUoc2hhcGVpZHMsbmV3U2hhcGVzKTt0aGlzLnJlZ2lvblNoYXBlc1tjdXJyZW50UmVnaW9uXT1uZXdTaGFwZXMuaWR9fX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIHZhbHVlcz10aGlzLnZhbHVlcyx0YXJnZXQ9dGhpcy50YXJnZXQscmVnaW9uU2hhcGVzPXRoaXMucmVnaW9uU2hhcGVzLHNoYXBlcyxpZHMsaSxqO2lmKCF0aGlzLmNscy5fc3VwZXIucmVuZGVyLmNhbGwodGhpcykpe3JldHVybn1mb3IoaT12YWx1ZXMubGVuZ3RoO2ktLTspe3NoYXBlcz10aGlzLnJlbmRlclJlZ2lvbihpKTtpZihzaGFwZXMpe2lmKCQuaXNBcnJheShzaGFwZXMpKXtpZHM9W107Zm9yKGo9c2hhcGVzLmxlbmd0aDtqLS07KXtzaGFwZXNbal0uYXBwZW5kKCk7aWRzLnB1c2goc2hhcGVzW2pdLmlkKX1yZWdpb25TaGFwZXNbaV09aWRzfWVsc2V7c2hhcGVzLmFwcGVuZCgpO3JlZ2lvblNoYXBlc1tpXT1zaGFwZXMuaWR9fWVsc2V7cmVnaW9uU2hhcGVzW2ldPW51bGx9fXRhcmdldC5yZW5kZXIoKX19OyQuZm4uc3BhcmtsaW5lLmxpbmU9bGluZT1jcmVhdGVDbGFzcygkLmZuLnNwYXJrbGluZS5fYmFzZSx7dHlwZTpcImxpbmVcIixpbml0OmZ1bmN0aW9uKGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCl7bGluZS5fc3VwZXIuaW5pdC5jYWxsKHRoaXMsZWwsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KTt0aGlzLnZlcnRpY2VzPVtdO3RoaXMucmVnaW9uTWFwPVtdO3RoaXMueHZhbHVlcz1bXTt0aGlzLnl2YWx1ZXM9W107dGhpcy55bWlubWF4PVtdO3RoaXMuaGlnaHRsaWdodFNwb3RJZD1udWxsO3RoaXMubGFzdFNoYXBlSWQ9bnVsbDt0aGlzLmluaXRUYXJnZXQoKX0sZ2V0UmVnaW9uOmZ1bmN0aW9uKGVsLHgseSl7dmFyIGkscmVnaW9uTWFwPXRoaXMucmVnaW9uTWFwO2ZvcihpPXJlZ2lvbk1hcC5sZW5ndGg7aS0tOyl7aWYocmVnaW9uTWFwW2ldIT09bnVsbCYmeD49cmVnaW9uTWFwW2ldWzBdJiZ4PD1yZWdpb25NYXBbaV1bMV0pe3JldHVybiByZWdpb25NYXBbaV1bMl19fXJldHVybiB1bmRlZmluZWR9LGdldEN1cnJlbnRSZWdpb25GaWVsZHM6ZnVuY3Rpb24oKXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb247cmV0dXJue2lzTnVsbDp0aGlzLnl2YWx1ZXNbY3VycmVudFJlZ2lvbl09PT1udWxsLHg6dGhpcy54dmFsdWVzW2N1cnJlbnRSZWdpb25dLHk6dGhpcy55dmFsdWVzW2N1cnJlbnRSZWdpb25dLGNvbG9yOnRoaXMub3B0aW9ucy5nZXQoXCJsaW5lQ29sb3JcIiksZmlsbENvbG9yOnRoaXMub3B0aW9ucy5nZXQoXCJmaWxsQ29sb3JcIiksb2Zmc2V0OmN1cnJlbnRSZWdpb259fSxyZW5kZXJIaWdobGlnaHQ6ZnVuY3Rpb24oKXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb24sdGFyZ2V0PXRoaXMudGFyZ2V0LHZlcnRleD10aGlzLnZlcnRpY2VzW2N1cnJlbnRSZWdpb25dLG9wdGlvbnM9dGhpcy5vcHRpb25zLHNwb3RSYWRpdXM9b3B0aW9ucy5nZXQoXCJzcG90UmFkaXVzXCIpLGhpZ2hsaWdodFNwb3RDb2xvcj1vcHRpb25zLmdldChcImhpZ2hsaWdodFNwb3RDb2xvclwiKSxoaWdobGlnaHRMaW5lQ29sb3I9b3B0aW9ucy5nZXQoXCJoaWdobGlnaHRMaW5lQ29sb3JcIiksaGlnaGxpZ2h0U3BvdCxoaWdobGlnaHRMaW5lO2lmKCF2ZXJ0ZXgpe3JldHVybn1pZihzcG90UmFkaXVzJiZoaWdobGlnaHRTcG90Q29sb3Ipe2hpZ2hsaWdodFNwb3Q9dGFyZ2V0LmRyYXdDaXJjbGUodmVydGV4WzBdLHZlcnRleFsxXSxzcG90UmFkaXVzLHVuZGVmaW5lZCxoaWdobGlnaHRTcG90Q29sb3IpO3RoaXMuaGlnaGxpZ2h0U3BvdElkPWhpZ2hsaWdodFNwb3QuaWQ7dGFyZ2V0Lmluc2VydEFmdGVyU2hhcGUodGhpcy5sYXN0U2hhcGVJZCxoaWdobGlnaHRTcG90KX1pZihoaWdobGlnaHRMaW5lQ29sb3Ipe2hpZ2hsaWdodExpbmU9dGFyZ2V0LmRyYXdMaW5lKHZlcnRleFswXSx0aGlzLmNhbnZhc1RvcCx2ZXJ0ZXhbMF0sdGhpcy5jYW52YXNUb3ArdGhpcy5jYW52YXNIZWlnaHQsaGlnaGxpZ2h0TGluZUNvbG9yKTt0aGlzLmhpZ2hsaWdodExpbmVJZD1oaWdobGlnaHRMaW5lLmlkO3RhcmdldC5pbnNlcnRBZnRlclNoYXBlKHRoaXMubGFzdFNoYXBlSWQsaGlnaGxpZ2h0TGluZSl9fSxyZW1vdmVIaWdobGlnaHQ6ZnVuY3Rpb24oKXt2YXIgdGFyZ2V0PXRoaXMudGFyZ2V0O2lmKHRoaXMuaGlnaGxpZ2h0U3BvdElkKXt0YXJnZXQucmVtb3ZlU2hhcGVJZCh0aGlzLmhpZ2hsaWdodFNwb3RJZCk7dGhpcy5oaWdobGlnaHRTcG90SWQ9bnVsbH1pZih0aGlzLmhpZ2hsaWdodExpbmVJZCl7dGFyZ2V0LnJlbW92ZVNoYXBlSWQodGhpcy5oaWdobGlnaHRMaW5lSWQpO3RoaXMuaGlnaGxpZ2h0TGluZUlkPW51bGx9fSxzY2FuVmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHZhbHVlcz10aGlzLnZhbHVlcyx2YWxjb3VudD12YWx1ZXMubGVuZ3RoLHh2YWx1ZXM9dGhpcy54dmFsdWVzLHl2YWx1ZXM9dGhpcy55dmFsdWVzLHltaW5tYXg9dGhpcy55bWlubWF4LGksdmFsLGlzU3RyLGlzQXJyYXksc3A7Zm9yKGk9MDtpPHZhbGNvdW50O2krKyl7dmFsPXZhbHVlc1tpXTtpc1N0cj10eXBlb2YgdmFsdWVzW2ldPT09XCJzdHJpbmdcIjtpc0FycmF5PXR5cGVvZiB2YWx1ZXNbaV09PT1cIm9iamVjdFwiJiZ2YWx1ZXNbaV1pbnN0YW5jZW9mIEFycmF5O3NwPWlzU3RyJiZ2YWx1ZXNbaV0uc3BsaXQoXCI6XCIpO2lmKGlzU3RyJiZzcC5sZW5ndGg9PT0yKXt4dmFsdWVzLnB1c2goTnVtYmVyKHNwWzBdKSk7eXZhbHVlcy5wdXNoKE51bWJlcihzcFsxXSkpO3ltaW5tYXgucHVzaChOdW1iZXIoc3BbMV0pKX1lbHNlIGlmKGlzQXJyYXkpe3h2YWx1ZXMucHVzaCh2YWxbMF0pO3l2YWx1ZXMucHVzaCh2YWxbMV0pO3ltaW5tYXgucHVzaCh2YWxbMV0pfWVsc2V7eHZhbHVlcy5wdXNoKGkpO2lmKHZhbHVlc1tpXT09PW51bGx8fHZhbHVlc1tpXT09PVwibnVsbFwiKXt5dmFsdWVzLnB1c2gobnVsbCl9ZWxzZXt5dmFsdWVzLnB1c2goTnVtYmVyKHZhbCkpO3ltaW5tYXgucHVzaChOdW1iZXIodmFsKSl9fX1pZih0aGlzLm9wdGlvbnMuZ2V0KFwieHZhbHVlc1wiKSl7eHZhbHVlcz10aGlzLm9wdGlvbnMuZ2V0KFwieHZhbHVlc1wiKX10aGlzLm1heHk9dGhpcy5tYXh5b3JnPU1hdGgubWF4LmFwcGx5KE1hdGgseW1pbm1heCk7dGhpcy5taW55PXRoaXMubWlueW9yZz1NYXRoLm1pbi5hcHBseShNYXRoLHltaW5tYXgpO3RoaXMubWF4eD1NYXRoLm1heC5hcHBseShNYXRoLHh2YWx1ZXMpO3RoaXMubWlueD1NYXRoLm1pbi5hcHBseShNYXRoLHh2YWx1ZXMpO3RoaXMueHZhbHVlcz14dmFsdWVzO3RoaXMueXZhbHVlcz15dmFsdWVzO3RoaXMueW1pbm1heD15bWlubWF4fSxwcm9jZXNzUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIG9wdGlvbnM9dGhpcy5vcHRpb25zLG5vcm1hbFJhbmdlTWluPW9wdGlvbnMuZ2V0KFwibm9ybWFsUmFuZ2VNaW5cIiksbm9ybWFsUmFuZ2VNYXg9b3B0aW9ucy5nZXQoXCJub3JtYWxSYW5nZU1heFwiKTtpZihub3JtYWxSYW5nZU1pbiE9PXVuZGVmaW5lZCl7aWYobm9ybWFsUmFuZ2VNaW48dGhpcy5taW55KXt0aGlzLm1pbnk9bm9ybWFsUmFuZ2VNaW59aWYobm9ybWFsUmFuZ2VNYXg+dGhpcy5tYXh5KXt0aGlzLm1heHk9bm9ybWFsUmFuZ2VNYXh9fWlmKG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1pblwiKSE9PXVuZGVmaW5lZCYmKG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZUNsaXBcIil8fG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1pblwiKTx0aGlzLm1pbnkpKXt0aGlzLm1pbnk9b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluXCIpfWlmKG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1heFwiKSE9PXVuZGVmaW5lZCYmKG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZUNsaXBcIil8fG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1heFwiKT50aGlzLm1heHkpKXt0aGlzLm1heHk9b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpfWlmKG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1pblhcIikhPT11bmRlZmluZWQmJihvcHRpb25zLmdldChcImNoYXJ0UmFuZ2VDbGlwWFwiKXx8b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluWFwiKTx0aGlzLm1pbngpKXt0aGlzLm1pbng9b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluWFwiKX1pZihvcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNYXhYXCIpIT09dW5kZWZpbmVkJiYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlQ2xpcFhcIil8fG9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1heFhcIik+dGhpcy5tYXh4KSl7dGhpcy5tYXh4PW9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1heFhcIil9fSxkcmF3Tm9ybWFsUmFuZ2U6ZnVuY3Rpb24oY2FudmFzTGVmdCxjYW52YXNUb3AsY2FudmFzSGVpZ2h0LGNhbnZhc1dpZHRoLHJhbmdleSl7dmFyIG5vcm1hbFJhbmdlTWluPXRoaXMub3B0aW9ucy5nZXQoXCJub3JtYWxSYW5nZU1pblwiKSxub3JtYWxSYW5nZU1heD10aGlzLm9wdGlvbnMuZ2V0KFwibm9ybWFsUmFuZ2VNYXhcIikseXRvcD1jYW52YXNUb3ArTWF0aC5yb3VuZChjYW52YXNIZWlnaHQtY2FudmFzSGVpZ2h0Kigobm9ybWFsUmFuZ2VNYXgtdGhpcy5taW55KS9yYW5nZXkpKSxoZWlnaHQ9TWF0aC5yb3VuZChjYW52YXNIZWlnaHQqKG5vcm1hbFJhbmdlTWF4LW5vcm1hbFJhbmdlTWluKS9yYW5nZXkpO3RoaXMudGFyZ2V0LmRyYXdSZWN0KGNhbnZhc0xlZnQseXRvcCxjYW52YXNXaWR0aCxoZWlnaHQsdW5kZWZpbmVkLHRoaXMub3B0aW9ucy5nZXQoXCJub3JtYWxSYW5nZUNvbG9yXCIpKS5hcHBlbmQoKX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIG9wdGlvbnM9dGhpcy5vcHRpb25zLHRhcmdldD10aGlzLnRhcmdldCxjYW52YXNXaWR0aD10aGlzLmNhbnZhc1dpZHRoLGNhbnZhc0hlaWdodD10aGlzLmNhbnZhc0hlaWdodCx2ZXJ0aWNlcz10aGlzLnZlcnRpY2VzLHNwb3RSYWRpdXM9b3B0aW9ucy5nZXQoXCJzcG90UmFkaXVzXCIpLHJlZ2lvbk1hcD10aGlzLnJlZ2lvbk1hcCxyYW5nZXgscmFuZ2V5LHl2YWxsYXN0LGNhbnZhc1RvcCxjYW52YXNMZWZ0LHZlcnRleCxwYXRoLHBhdGhzLHgseSx4bmV4dCx4cG9zLHhwb3NuZXh0LGxhc3QsbmV4dCx5dmFsY291bnQsbGluZVNoYXBlcyxmaWxsU2hhcGVzLHBsZW4sdmFsdWVTcG90cyxobFNwb3RzRW5hYmxlZCxjb2xvcix4dmFsdWVzLHl2YWx1ZXMsaTtpZighbGluZS5fc3VwZXIucmVuZGVyLmNhbGwodGhpcykpe3JldHVybn10aGlzLnNjYW5WYWx1ZXMoKTt0aGlzLnByb2Nlc3NSYW5nZU9wdGlvbnMoKTt4dmFsdWVzPXRoaXMueHZhbHVlczt5dmFsdWVzPXRoaXMueXZhbHVlcztpZighdGhpcy55bWlubWF4Lmxlbmd0aHx8dGhpcy55dmFsdWVzLmxlbmd0aDwyKXtyZXR1cm59Y2FudmFzVG9wPWNhbnZhc0xlZnQ9MDtyYW5nZXg9dGhpcy5tYXh4LXRoaXMubWlueD09PTA/MTp0aGlzLm1heHgtdGhpcy5taW54O3JhbmdleT10aGlzLm1heHktdGhpcy5taW55PT09MD8xOnRoaXMubWF4eS10aGlzLm1pbnk7eXZhbGxhc3Q9dGhpcy55dmFsdWVzLmxlbmd0aC0xO2lmKHNwb3RSYWRpdXMmJihjYW52YXNXaWR0aDxzcG90UmFkaXVzKjR8fGNhbnZhc0hlaWdodDxzcG90UmFkaXVzKjQpKXtzcG90UmFkaXVzPTB9aWYoc3BvdFJhZGl1cyl7aGxTcG90c0VuYWJsZWQ9b3B0aW9ucy5nZXQoXCJoaWdobGlnaHRTcG90Q29sb3JcIikmJiFvcHRpb25zLmdldChcImRpc2FibGVJbnRlcmFjdGlvblwiKTtpZihobFNwb3RzRW5hYmxlZHx8b3B0aW9ucy5nZXQoXCJtaW5TcG90Q29sb3JcIil8fG9wdGlvbnMuZ2V0KFwic3BvdENvbG9yXCIpJiZ5dmFsdWVzW3l2YWxsYXN0XT09PXRoaXMubWlueSl7Y2FudmFzSGVpZ2h0LT1NYXRoLmNlaWwoc3BvdFJhZGl1cyl9aWYoaGxTcG90c0VuYWJsZWR8fG9wdGlvbnMuZ2V0KFwibWF4U3BvdENvbG9yXCIpfHxvcHRpb25zLmdldChcInNwb3RDb2xvclwiKSYmeXZhbHVlc1t5dmFsbGFzdF09PT10aGlzLm1heHkpe2NhbnZhc0hlaWdodC09TWF0aC5jZWlsKHNwb3RSYWRpdXMpO2NhbnZhc1RvcCs9TWF0aC5jZWlsKHNwb3RSYWRpdXMpfWlmKGhsU3BvdHNFbmFibGVkfHwob3B0aW9ucy5nZXQoXCJtaW5TcG90Q29sb3JcIil8fG9wdGlvbnMuZ2V0KFwibWF4U3BvdENvbG9yXCIpKSYmKHl2YWx1ZXNbMF09PT10aGlzLm1pbnl8fHl2YWx1ZXNbMF09PT10aGlzLm1heHkpKXtjYW52YXNMZWZ0Kz1NYXRoLmNlaWwoc3BvdFJhZGl1cyk7Y2FudmFzV2lkdGgtPU1hdGguY2VpbChzcG90UmFkaXVzKX1pZihobFNwb3RzRW5hYmxlZHx8b3B0aW9ucy5nZXQoXCJzcG90Q29sb3JcIil8fChvcHRpb25zLmdldChcIm1pblNwb3RDb2xvclwiKXx8b3B0aW9ucy5nZXQoXCJtYXhTcG90Q29sb3JcIikmJih5dmFsdWVzW3l2YWxsYXN0XT09PXRoaXMubWlueXx8eXZhbHVlc1t5dmFsbGFzdF09PT10aGlzLm1heHkpKSl7Y2FudmFzV2lkdGgtPU1hdGguY2VpbChzcG90UmFkaXVzKX19Y2FudmFzSGVpZ2h0LS07aWYob3B0aW9ucy5nZXQoXCJub3JtYWxSYW5nZU1pblwiKSE9PXVuZGVmaW5lZCYmIW9wdGlvbnMuZ2V0KFwiZHJhd05vcm1hbE9uVG9wXCIpKXt0aGlzLmRyYXdOb3JtYWxSYW5nZShjYW52YXNMZWZ0LGNhbnZhc1RvcCxjYW52YXNIZWlnaHQsY2FudmFzV2lkdGgscmFuZ2V5KX1wYXRoPVtdO3BhdGhzPVtwYXRoXTtsYXN0PW5leHQ9bnVsbDt5dmFsY291bnQ9eXZhbHVlcy5sZW5ndGg7Zm9yKGk9MDtpPHl2YWxjb3VudDtpKyspe3g9eHZhbHVlc1tpXTt4bmV4dD14dmFsdWVzW2krMV07eT15dmFsdWVzW2ldO3hwb3M9Y2FudmFzTGVmdCtNYXRoLnJvdW5kKCh4LXRoaXMubWlueCkqKGNhbnZhc1dpZHRoL3JhbmdleCkpO3hwb3NuZXh0PWk8eXZhbGNvdW50LTE/Y2FudmFzTGVmdCtNYXRoLnJvdW5kKCh4bmV4dC10aGlzLm1pbngpKihjYW52YXNXaWR0aC9yYW5nZXgpKTpjYW52YXNXaWR0aDtuZXh0PXhwb3MrKHhwb3NuZXh0LXhwb3MpLzI7cmVnaW9uTWFwW2ldPVtsYXN0fHwwLG5leHQsaV07bGFzdD1uZXh0O2lmKHk9PT1udWxsKXtpZihpKXtpZih5dmFsdWVzW2ktMV0hPT1udWxsKXtwYXRoPVtdO3BhdGhzLnB1c2gocGF0aCl9dmVydGljZXMucHVzaChudWxsKX19ZWxzZXtpZih5PHRoaXMubWlueSl7eT10aGlzLm1pbnl9aWYoeT50aGlzLm1heHkpe3k9dGhpcy5tYXh5fWlmKCFwYXRoLmxlbmd0aCl7cGF0aC5wdXNoKFt4cG9zLGNhbnZhc1RvcCtjYW52YXNIZWlnaHRdKX12ZXJ0ZXg9W3hwb3MsY2FudmFzVG9wK01hdGgucm91bmQoY2FudmFzSGVpZ2h0LWNhbnZhc0hlaWdodCooKHktdGhpcy5taW55KS9yYW5nZXkpKV07cGF0aC5wdXNoKHZlcnRleCk7dmVydGljZXMucHVzaCh2ZXJ0ZXgpfX1saW5lU2hhcGVzPVtdO2ZpbGxTaGFwZXM9W107cGxlbj1wYXRocy5sZW5ndGg7Zm9yKGk9MDtpPHBsZW47aSsrKXtwYXRoPXBhdGhzW2ldO2lmKHBhdGgubGVuZ3RoKXtpZihvcHRpb25zLmdldChcImZpbGxDb2xvclwiKSl7cGF0aC5wdXNoKFtwYXRoW3BhdGgubGVuZ3RoLTFdWzBdLGNhbnZhc1RvcCtjYW52YXNIZWlnaHRdKTtmaWxsU2hhcGVzLnB1c2gocGF0aC5zbGljZSgwKSk7cGF0aC5wb3AoKX1pZihwYXRoLmxlbmd0aD4yKXtwYXRoWzBdPVtwYXRoWzBdWzBdLHBhdGhbMV1bMV1dfWxpbmVTaGFwZXMucHVzaChwYXRoKX19cGxlbj1maWxsU2hhcGVzLmxlbmd0aDtmb3IoaT0wO2k8cGxlbjtpKyspe3RhcmdldC5kcmF3U2hhcGUoZmlsbFNoYXBlc1tpXSxvcHRpb25zLmdldChcImZpbGxDb2xvclwiKSxvcHRpb25zLmdldChcImZpbGxDb2xvclwiKSkuYXBwZW5kKCl9aWYob3B0aW9ucy5nZXQoXCJub3JtYWxSYW5nZU1pblwiKSE9PXVuZGVmaW5lZCYmb3B0aW9ucy5nZXQoXCJkcmF3Tm9ybWFsT25Ub3BcIikpe3RoaXMuZHJhd05vcm1hbFJhbmdlKGNhbnZhc0xlZnQsY2FudmFzVG9wLGNhbnZhc0hlaWdodCxjYW52YXNXaWR0aCxyYW5nZXkpfXBsZW49bGluZVNoYXBlcy5sZW5ndGg7Zm9yKGk9MDtpPHBsZW47aSsrKXt0YXJnZXQuZHJhd1NoYXBlKGxpbmVTaGFwZXNbaV0sb3B0aW9ucy5nZXQoXCJsaW5lQ29sb3JcIiksdW5kZWZpbmVkLG9wdGlvbnMuZ2V0KFwibGluZVdpZHRoXCIpKS5hcHBlbmQoKX1pZihzcG90UmFkaXVzJiZvcHRpb25zLmdldChcInZhbHVlU3BvdHNcIikpe3ZhbHVlU3BvdHM9b3B0aW9ucy5nZXQoXCJ2YWx1ZVNwb3RzXCIpO2lmKHZhbHVlU3BvdHMuZ2V0PT09dW5kZWZpbmVkKXt2YWx1ZVNwb3RzPW5ldyBSYW5nZU1hcCh2YWx1ZVNwb3RzKX1mb3IoaT0wO2k8eXZhbGNvdW50O2krKyl7Y29sb3I9dmFsdWVTcG90cy5nZXQoeXZhbHVlc1tpXSk7aWYoY29sb3Ipe3RhcmdldC5kcmF3Q2lyY2xlKGNhbnZhc0xlZnQrTWF0aC5yb3VuZCgoeHZhbHVlc1tpXS10aGlzLm1pbngpKihjYW52YXNXaWR0aC9yYW5nZXgpKSxjYW52YXNUb3ArTWF0aC5yb3VuZChjYW52YXNIZWlnaHQtY2FudmFzSGVpZ2h0KigoeXZhbHVlc1tpXS10aGlzLm1pbnkpL3JhbmdleSkpLHNwb3RSYWRpdXMsdW5kZWZpbmVkLGNvbG9yKS5hcHBlbmQoKX19fWlmKHNwb3RSYWRpdXMmJm9wdGlvbnMuZ2V0KFwic3BvdENvbG9yXCIpJiZ5dmFsdWVzW3l2YWxsYXN0XSE9PW51bGwpe3RhcmdldC5kcmF3Q2lyY2xlKGNhbnZhc0xlZnQrTWF0aC5yb3VuZCgoeHZhbHVlc1t4dmFsdWVzLmxlbmd0aC0xXS10aGlzLm1pbngpKihjYW52YXNXaWR0aC9yYW5nZXgpKSxjYW52YXNUb3ArTWF0aC5yb3VuZChjYW52YXNIZWlnaHQtY2FudmFzSGVpZ2h0KigoeXZhbHVlc1t5dmFsbGFzdF0tdGhpcy5taW55KS9yYW5nZXkpKSxzcG90UmFkaXVzLHVuZGVmaW5lZCxvcHRpb25zLmdldChcInNwb3RDb2xvclwiKSkuYXBwZW5kKCl9aWYodGhpcy5tYXh5IT09dGhpcy5taW55b3JnKXtpZihzcG90UmFkaXVzJiZvcHRpb25zLmdldChcIm1pblNwb3RDb2xvclwiKSl7eD14dmFsdWVzWyQuaW5BcnJheSh0aGlzLm1pbnlvcmcseXZhbHVlcyldO3RhcmdldC5kcmF3Q2lyY2xlKGNhbnZhc0xlZnQrTWF0aC5yb3VuZCgoeC10aGlzLm1pbngpKihjYW52YXNXaWR0aC9yYW5nZXgpKSxjYW52YXNUb3ArTWF0aC5yb3VuZChjYW52YXNIZWlnaHQtY2FudmFzSGVpZ2h0KigodGhpcy5taW55b3JnLXRoaXMubWlueSkvcmFuZ2V5KSksc3BvdFJhZGl1cyx1bmRlZmluZWQsb3B0aW9ucy5nZXQoXCJtaW5TcG90Q29sb3JcIikpLmFwcGVuZCgpfWlmKHNwb3RSYWRpdXMmJm9wdGlvbnMuZ2V0KFwibWF4U3BvdENvbG9yXCIpKXt4PXh2YWx1ZXNbJC5pbkFycmF5KHRoaXMubWF4eW9yZyx5dmFsdWVzKV07dGFyZ2V0LmRyYXdDaXJjbGUoY2FudmFzTGVmdCtNYXRoLnJvdW5kKCh4LXRoaXMubWlueCkqKGNhbnZhc1dpZHRoL3JhbmdleCkpLGNhbnZhc1RvcCtNYXRoLnJvdW5kKGNhbnZhc0hlaWdodC1jYW52YXNIZWlnaHQqKCh0aGlzLm1heHlvcmctdGhpcy5taW55KS9yYW5nZXkpKSxzcG90UmFkaXVzLHVuZGVmaW5lZCxvcHRpb25zLmdldChcIm1heFNwb3RDb2xvclwiKSkuYXBwZW5kKCl9fXRoaXMubGFzdFNoYXBlSWQ9dGFyZ2V0LmdldExhc3RTaGFwZUlkKCk7dGhpcy5jYW52YXNUb3A9Y2FudmFzVG9wO3RhcmdldC5yZW5kZXIoKX19KTskLmZuLnNwYXJrbGluZS5iYXI9YmFyPWNyZWF0ZUNsYXNzKCQuZm4uc3BhcmtsaW5lLl9iYXNlLGJhckhpZ2hsaWdodE1peGluLHt0eXBlOlwiYmFyXCIsaW5pdDpmdW5jdGlvbihlbCx2YWx1ZXMsb3B0aW9ucyx3aWR0aCxoZWlnaHQpe3ZhciBiYXJXaWR0aD1wYXJzZUludChvcHRpb25zLmdldChcImJhcldpZHRoXCIpLDEwKSxiYXJTcGFjaW5nPXBhcnNlSW50KG9wdGlvbnMuZ2V0KFwiYmFyU3BhY2luZ1wiKSwxMCksY2hhcnRSYW5nZU1pbj1vcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNaW5cIiksY2hhcnRSYW5nZU1heD1vcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNYXhcIiksY2hhcnRSYW5nZUNsaXA9b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlQ2xpcFwiKSxzdGFja01pbj1JbmZpbml0eSxzdGFja01heD0tSW5maW5pdHksaXNTdGFja1N0cmluZyxncm91cE1pbixncm91cE1heCxzdGFja1JhbmdlcyxudW1WYWx1ZXMsaSx2bGVuLHJhbmdlLHplcm9BeGlzLHhheGlzT2Zmc2V0LG1pbixtYXgsY2xpcE1pbixjbGlwTWF4LHN0YWNrZWQsdmxpc3QsaixzbGVuLHN2YWxzLHZhbCx5b2Zmc2V0LHlNYXhDYWxjLGNhbnZhc0hlaWdodEVmO2Jhci5fc3VwZXIuaW5pdC5jYWxsKHRoaXMsZWwsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KTtmb3IoaT0wLHZsZW49dmFsdWVzLmxlbmd0aDtpPHZsZW47aSsrKXt2YWw9dmFsdWVzW2ldO2lzU3RhY2tTdHJpbmc9dHlwZW9mIHZhbD09PVwic3RyaW5nXCImJnZhbC5pbmRleE9mKFwiOlwiKT4tMTtpZihpc1N0YWNrU3RyaW5nfHwkLmlzQXJyYXkodmFsKSl7c3RhY2tlZD10cnVlO2lmKGlzU3RhY2tTdHJpbmcpe3ZhbD12YWx1ZXNbaV09bm9ybWFsaXplVmFsdWVzKHZhbC5zcGxpdChcIjpcIikpO1xuXG59dmFsPXJlbW92ZSh2YWwsbnVsbCk7Z3JvdXBNaW49TWF0aC5taW4uYXBwbHkoTWF0aCx2YWwpO2dyb3VwTWF4PU1hdGgubWF4LmFwcGx5KE1hdGgsdmFsKTtpZihncm91cE1pbjxzdGFja01pbil7c3RhY2tNaW49Z3JvdXBNaW59aWYoZ3JvdXBNYXg+c3RhY2tNYXgpe3N0YWNrTWF4PWdyb3VwTWF4fX19dGhpcy5zdGFja2VkPXN0YWNrZWQ7dGhpcy5yZWdpb25TaGFwZXM9e307dGhpcy5iYXJXaWR0aD1iYXJXaWR0aDt0aGlzLmJhclNwYWNpbmc9YmFyU3BhY2luZzt0aGlzLnRvdGFsQmFyV2lkdGg9YmFyV2lkdGgrYmFyU3BhY2luZzt0aGlzLndpZHRoPXdpZHRoPXZhbHVlcy5sZW5ndGgqYmFyV2lkdGgrKHZhbHVlcy5sZW5ndGgtMSkqYmFyU3BhY2luZzt0aGlzLmluaXRUYXJnZXQoKTtpZihjaGFydFJhbmdlQ2xpcCl7Y2xpcE1pbj1jaGFydFJhbmdlTWluPT09dW5kZWZpbmVkPy1JbmZpbml0eTpjaGFydFJhbmdlTWluO2NsaXBNYXg9Y2hhcnRSYW5nZU1heD09PXVuZGVmaW5lZD9JbmZpbml0eTpjaGFydFJhbmdlTWF4fW51bVZhbHVlcz1bXTtzdGFja1Jhbmdlcz1zdGFja2VkP1tdOm51bVZhbHVlczt2YXIgc3RhY2tUb3RhbHM9W107dmFyIHN0YWNrUmFuZ2VzTmVnPVtdO2ZvcihpPTAsdmxlbj12YWx1ZXMubGVuZ3RoO2k8dmxlbjtpKyspe2lmKHN0YWNrZWQpe3ZsaXN0PXZhbHVlc1tpXTt2YWx1ZXNbaV09c3ZhbHM9W107c3RhY2tUb3RhbHNbaV09MDtzdGFja1Jhbmdlc1tpXT1zdGFja1Jhbmdlc05lZ1tpXT0wO2ZvcihqPTAsc2xlbj12bGlzdC5sZW5ndGg7ajxzbGVuO2orKyl7dmFsPXN2YWxzW2pdPWNoYXJ0UmFuZ2VDbGlwP2NsaXB2YWwodmxpc3Rbal0sY2xpcE1pbixjbGlwTWF4KTp2bGlzdFtqXTtpZih2YWwhPT1udWxsKXtpZih2YWw+MCl7c3RhY2tUb3RhbHNbaV0rPXZhbH1pZihzdGFja01pbjwwJiZzdGFja01heD4wKXtpZih2YWw8MCl7c3RhY2tSYW5nZXNOZWdbaV0rPU1hdGguYWJzKHZhbCl9ZWxzZXtzdGFja1Jhbmdlc1tpXSs9dmFsfX1lbHNle3N0YWNrUmFuZ2VzW2ldKz1NYXRoLmFicyh2YWwtKHZhbDwwP3N0YWNrTWF4OnN0YWNrTWluKSl9bnVtVmFsdWVzLnB1c2godmFsKX19fWVsc2V7dmFsPWNoYXJ0UmFuZ2VDbGlwP2NsaXB2YWwodmFsdWVzW2ldLGNsaXBNaW4sY2xpcE1heCk6dmFsdWVzW2ldO3ZhbD12YWx1ZXNbaV09bm9ybWFsaXplVmFsdWUodmFsKTtpZih2YWwhPT1udWxsKXtudW1WYWx1ZXMucHVzaCh2YWwpfX19dGhpcy5tYXg9bWF4PU1hdGgubWF4LmFwcGx5KE1hdGgsbnVtVmFsdWVzKTt0aGlzLm1pbj1taW49TWF0aC5taW4uYXBwbHkoTWF0aCxudW1WYWx1ZXMpO3RoaXMuc3RhY2tNYXg9c3RhY2tNYXg9c3RhY2tlZD9NYXRoLm1heC5hcHBseShNYXRoLHN0YWNrVG90YWxzKTptYXg7dGhpcy5zdGFja01pbj1zdGFja01pbj1zdGFja2VkP01hdGgubWluLmFwcGx5KE1hdGgsbnVtVmFsdWVzKTptaW47aWYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluXCIpIT09dW5kZWZpbmVkJiYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlQ2xpcFwiKXx8b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluXCIpPG1pbikpe21pbj1vcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNaW5cIil9aWYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpIT09dW5kZWZpbmVkJiYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlQ2xpcFwiKXx8b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpPm1heCkpe21heD1vcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNYXhcIil9dGhpcy56ZXJvQXhpcz16ZXJvQXhpcz1vcHRpb25zLmdldChcInplcm9BeGlzXCIsdHJ1ZSk7aWYobWluPD0wJiZtYXg+PTAmJnplcm9BeGlzKXt4YXhpc09mZnNldD0wfWVsc2UgaWYoemVyb0F4aXM9PWZhbHNlKXt4YXhpc09mZnNldD1taW59ZWxzZSBpZihtaW4+MCl7eGF4aXNPZmZzZXQ9bWlufWVsc2V7eGF4aXNPZmZzZXQ9bWF4fXRoaXMueGF4aXNPZmZzZXQ9eGF4aXNPZmZzZXQ7cmFuZ2U9c3RhY2tlZD9NYXRoLm1heC5hcHBseShNYXRoLHN0YWNrUmFuZ2VzKStNYXRoLm1heC5hcHBseShNYXRoLHN0YWNrUmFuZ2VzTmVnKTptYXgtbWluO3RoaXMuY2FudmFzSGVpZ2h0RWY9emVyb0F4aXMmJm1pbjwwP3RoaXMuY2FudmFzSGVpZ2h0LTI6dGhpcy5jYW52YXNIZWlnaHQtMTtpZihtaW48eGF4aXNPZmZzZXQpe3lNYXhDYWxjPXN0YWNrZWQmJm1heD49MD9zdGFja01heDptYXg7eW9mZnNldD0oeU1heENhbGMteGF4aXNPZmZzZXQpL3JhbmdlKnRoaXMuY2FudmFzSGVpZ2h0O2lmKHlvZmZzZXQhPT1NYXRoLmNlaWwoeW9mZnNldCkpe3RoaXMuY2FudmFzSGVpZ2h0RWYtPTI7eW9mZnNldD1NYXRoLmNlaWwoeW9mZnNldCl9fWVsc2V7eW9mZnNldD10aGlzLmNhbnZhc0hlaWdodH10aGlzLnlvZmZzZXQ9eW9mZnNldDtpZigkLmlzQXJyYXkob3B0aW9ucy5nZXQoXCJjb2xvck1hcFwiKSkpe3RoaXMuY29sb3JNYXBCeUluZGV4PW9wdGlvbnMuZ2V0KFwiY29sb3JNYXBcIik7dGhpcy5jb2xvck1hcEJ5VmFsdWU9bnVsbH1lbHNle3RoaXMuY29sb3JNYXBCeUluZGV4PW51bGw7dGhpcy5jb2xvck1hcEJ5VmFsdWU9b3B0aW9ucy5nZXQoXCJjb2xvck1hcFwiKTtpZih0aGlzLmNvbG9yTWFwQnlWYWx1ZSYmdGhpcy5jb2xvck1hcEJ5VmFsdWUuZ2V0PT09dW5kZWZpbmVkKXt0aGlzLmNvbG9yTWFwQnlWYWx1ZT1uZXcgUmFuZ2VNYXAodGhpcy5jb2xvck1hcEJ5VmFsdWUpfX10aGlzLnJhbmdlPXJhbmdlfSxnZXRSZWdpb246ZnVuY3Rpb24oZWwseCx5KXt2YXIgcmVzdWx0PU1hdGguZmxvb3IoeC90aGlzLnRvdGFsQmFyV2lkdGgpO3JldHVybiByZXN1bHQ8MHx8cmVzdWx0Pj10aGlzLnZhbHVlcy5sZW5ndGg/dW5kZWZpbmVkOnJlc3VsdH0sZ2V0Q3VycmVudFJlZ2lvbkZpZWxkczpmdW5jdGlvbigpe3ZhciBjdXJyZW50UmVnaW9uPXRoaXMuY3VycmVudFJlZ2lvbix2YWx1ZXM9ZW5zdXJlQXJyYXkodGhpcy52YWx1ZXNbY3VycmVudFJlZ2lvbl0pLHJlc3VsdD1bXSx2YWx1ZSxpO2ZvcihpPXZhbHVlcy5sZW5ndGg7aS0tOyl7dmFsdWU9dmFsdWVzW2ldO3Jlc3VsdC5wdXNoKHtpc051bGw6dmFsdWU9PT1udWxsLHZhbHVlOnZhbHVlLGNvbG9yOnRoaXMuY2FsY0NvbG9yKGksdmFsdWUsY3VycmVudFJlZ2lvbiksb2Zmc2V0OmN1cnJlbnRSZWdpb259KX1yZXR1cm4gcmVzdWx0fSxjYWxjQ29sb3I6ZnVuY3Rpb24oc3RhY2tudW0sdmFsdWUsdmFsdWVudW0pe3ZhciBjb2xvck1hcEJ5SW5kZXg9dGhpcy5jb2xvck1hcEJ5SW5kZXgsY29sb3JNYXBCeVZhbHVlPXRoaXMuY29sb3JNYXBCeVZhbHVlLG9wdGlvbnM9dGhpcy5vcHRpb25zLGNvbG9yLG5ld0NvbG9yO2lmKHRoaXMuc3RhY2tlZCl7Y29sb3I9b3B0aW9ucy5nZXQoXCJzdGFja2VkQmFyQ29sb3JcIil9ZWxzZXtjb2xvcj12YWx1ZTwwP29wdGlvbnMuZ2V0KFwibmVnQmFyQ29sb3JcIik6b3B0aW9ucy5nZXQoXCJiYXJDb2xvclwiKX1pZih2YWx1ZT09PTAmJm9wdGlvbnMuZ2V0KFwiemVyb0NvbG9yXCIpIT09dW5kZWZpbmVkKXtjb2xvcj1vcHRpb25zLmdldChcInplcm9Db2xvclwiKX1pZihjb2xvck1hcEJ5VmFsdWUmJihuZXdDb2xvcj1jb2xvck1hcEJ5VmFsdWUuZ2V0KHZhbHVlKSkpe2NvbG9yPW5ld0NvbG9yfWVsc2UgaWYoY29sb3JNYXBCeUluZGV4JiZjb2xvck1hcEJ5SW5kZXgubGVuZ3RoPnZhbHVlbnVtKXtjb2xvcj1jb2xvck1hcEJ5SW5kZXhbdmFsdWVudW1dfXJldHVybiAkLmlzQXJyYXkoY29sb3IpP2NvbG9yW3N0YWNrbnVtJWNvbG9yLmxlbmd0aF06Y29sb3J9LHJlbmRlclJlZ2lvbjpmdW5jdGlvbih2YWx1ZW51bSxoaWdobGlnaHQpe3ZhciB2YWxzPXRoaXMudmFsdWVzW3ZhbHVlbnVtXSxvcHRpb25zPXRoaXMub3B0aW9ucyx4YXhpc09mZnNldD10aGlzLnhheGlzT2Zmc2V0LHJlc3VsdD1bXSxyYW5nZT10aGlzLnJhbmdlLHN0YWNrZWQ9dGhpcy5zdGFja2VkLHRhcmdldD10aGlzLnRhcmdldCx4PXZhbHVlbnVtKnRoaXMudG90YWxCYXJXaWR0aCxjYW52YXNIZWlnaHRFZj10aGlzLmNhbnZhc0hlaWdodEVmLHlvZmZzZXQ9dGhpcy55b2Zmc2V0LHksaGVpZ2h0LGNvbG9yLGlzTnVsbCx5b2Zmc2V0TmVnLGksdmFsY291bnQsdmFsLG1pblBsb3R0ZWQsYWxsTWluO3ZhbHM9JC5pc0FycmF5KHZhbHMpP3ZhbHM6W3ZhbHNdO3ZhbGNvdW50PXZhbHMubGVuZ3RoO3ZhbD12YWxzWzBdO2lzTnVsbD1hbGwobnVsbCx2YWxzKTthbGxNaW49YWxsKHhheGlzT2Zmc2V0LHZhbHMsdHJ1ZSk7aWYoaXNOdWxsKXtpZihvcHRpb25zLmdldChcIm51bGxDb2xvclwiKSl7Y29sb3I9aGlnaGxpZ2h0P29wdGlvbnMuZ2V0KFwibnVsbENvbG9yXCIpOnRoaXMuY2FsY0hpZ2hsaWdodENvbG9yKG9wdGlvbnMuZ2V0KFwibnVsbENvbG9yXCIpLG9wdGlvbnMpO3k9eW9mZnNldD4wP3lvZmZzZXQtMTp5b2Zmc2V0O3JldHVybiB0YXJnZXQuZHJhd1JlY3QoeCx5LHRoaXMuYmFyV2lkdGgtMSwwLGNvbG9yLGNvbG9yKX1lbHNle3JldHVybiB1bmRlZmluZWR9fXlvZmZzZXROZWc9eW9mZnNldDtmb3IoaT0wO2k8dmFsY291bnQ7aSsrKXt2YWw9dmFsc1tpXTtpZihzdGFja2VkJiZ2YWw9PT14YXhpc09mZnNldCl7aWYoIWFsbE1pbnx8bWluUGxvdHRlZCl7Y29udGludWV9bWluUGxvdHRlZD10cnVlfWlmKHJhbmdlPjApe2hlaWdodD1NYXRoLmZsb29yKGNhbnZhc0hlaWdodEVmKihNYXRoLmFicyh2YWwteGF4aXNPZmZzZXQpL3JhbmdlKSkrMX1lbHNle2hlaWdodD0xfWlmKHZhbDx4YXhpc09mZnNldHx8dmFsPT09eGF4aXNPZmZzZXQmJnlvZmZzZXQ9PT0wKXt5PXlvZmZzZXROZWc7eW9mZnNldE5lZys9aGVpZ2h0fWVsc2V7eT15b2Zmc2V0LWhlaWdodDt5b2Zmc2V0LT1oZWlnaHR9Y29sb3I9dGhpcy5jYWxjQ29sb3IoaSx2YWwsdmFsdWVudW0pO2lmKGhpZ2hsaWdodCl7Y29sb3I9dGhpcy5jYWxjSGlnaGxpZ2h0Q29sb3IoY29sb3Isb3B0aW9ucyl9cmVzdWx0LnB1c2godGFyZ2V0LmRyYXdSZWN0KHgseSx0aGlzLmJhcldpZHRoLTEsaGVpZ2h0LTEsY29sb3IsY29sb3IpKX1pZihyZXN1bHQubGVuZ3RoPT09MSl7cmV0dXJuIHJlc3VsdFswXX1yZXR1cm4gcmVzdWx0fX0pOyQuZm4uc3BhcmtsaW5lLnRyaXN0YXRlPXRyaXN0YXRlPWNyZWF0ZUNsYXNzKCQuZm4uc3BhcmtsaW5lLl9iYXNlLGJhckhpZ2hsaWdodE1peGluLHt0eXBlOlwidHJpc3RhdGVcIixpbml0OmZ1bmN0aW9uKGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCl7dmFyIGJhcldpZHRoPXBhcnNlSW50KG9wdGlvbnMuZ2V0KFwiYmFyV2lkdGhcIiksMTApLGJhclNwYWNpbmc9cGFyc2VJbnQob3B0aW9ucy5nZXQoXCJiYXJTcGFjaW5nXCIpLDEwKTt0cmlzdGF0ZS5fc3VwZXIuaW5pdC5jYWxsKHRoaXMsZWwsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KTt0aGlzLnJlZ2lvblNoYXBlcz17fTt0aGlzLmJhcldpZHRoPWJhcldpZHRoO3RoaXMuYmFyU3BhY2luZz1iYXJTcGFjaW5nO3RoaXMudG90YWxCYXJXaWR0aD1iYXJXaWR0aCtiYXJTcGFjaW5nO3RoaXMudmFsdWVzPSQubWFwKHZhbHVlcyxOdW1iZXIpO3RoaXMud2lkdGg9d2lkdGg9dmFsdWVzLmxlbmd0aCpiYXJXaWR0aCsodmFsdWVzLmxlbmd0aC0xKSpiYXJTcGFjaW5nO2lmKCQuaXNBcnJheShvcHRpb25zLmdldChcImNvbG9yTWFwXCIpKSl7dGhpcy5jb2xvck1hcEJ5SW5kZXg9b3B0aW9ucy5nZXQoXCJjb2xvck1hcFwiKTt0aGlzLmNvbG9yTWFwQnlWYWx1ZT1udWxsfWVsc2V7dGhpcy5jb2xvck1hcEJ5SW5kZXg9bnVsbDt0aGlzLmNvbG9yTWFwQnlWYWx1ZT1vcHRpb25zLmdldChcImNvbG9yTWFwXCIpO2lmKHRoaXMuY29sb3JNYXBCeVZhbHVlJiZ0aGlzLmNvbG9yTWFwQnlWYWx1ZS5nZXQ9PT11bmRlZmluZWQpe3RoaXMuY29sb3JNYXBCeVZhbHVlPW5ldyBSYW5nZU1hcCh0aGlzLmNvbG9yTWFwQnlWYWx1ZSl9fXRoaXMuaW5pdFRhcmdldCgpfSxnZXRSZWdpb246ZnVuY3Rpb24oZWwseCx5KXtyZXR1cm4gTWF0aC5mbG9vcih4L3RoaXMudG90YWxCYXJXaWR0aCl9LGdldEN1cnJlbnRSZWdpb25GaWVsZHM6ZnVuY3Rpb24oKXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb247cmV0dXJue2lzTnVsbDp0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uXT09PXVuZGVmaW5lZCx2YWx1ZTp0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uXSxjb2xvcjp0aGlzLmNhbGNDb2xvcih0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uXSxjdXJyZW50UmVnaW9uKSxvZmZzZXQ6Y3VycmVudFJlZ2lvbn19LGNhbGNDb2xvcjpmdW5jdGlvbih2YWx1ZSx2YWx1ZW51bSl7dmFyIHZhbHVlcz10aGlzLnZhbHVlcyxvcHRpb25zPXRoaXMub3B0aW9ucyxjb2xvck1hcEJ5SW5kZXg9dGhpcy5jb2xvck1hcEJ5SW5kZXgsY29sb3JNYXBCeVZhbHVlPXRoaXMuY29sb3JNYXBCeVZhbHVlLGNvbG9yLG5ld0NvbG9yO2lmKGNvbG9yTWFwQnlWYWx1ZSYmKG5ld0NvbG9yPWNvbG9yTWFwQnlWYWx1ZS5nZXQodmFsdWUpKSl7Y29sb3I9bmV3Q29sb3J9ZWxzZSBpZihjb2xvck1hcEJ5SW5kZXgmJmNvbG9yTWFwQnlJbmRleC5sZW5ndGg+dmFsdWVudW0pe2NvbG9yPWNvbG9yTWFwQnlJbmRleFt2YWx1ZW51bV19ZWxzZSBpZih2YWx1ZXNbdmFsdWVudW1dPDApe2NvbG9yPW9wdGlvbnMuZ2V0KFwibmVnQmFyQ29sb3JcIil9ZWxzZSBpZih2YWx1ZXNbdmFsdWVudW1dPjApe2NvbG9yPW9wdGlvbnMuZ2V0KFwicG9zQmFyQ29sb3JcIil9ZWxzZXtjb2xvcj1vcHRpb25zLmdldChcInplcm9CYXJDb2xvclwiKX1yZXR1cm4gY29sb3J9LHJlbmRlclJlZ2lvbjpmdW5jdGlvbih2YWx1ZW51bSxoaWdobGlnaHQpe3ZhciB2YWx1ZXM9dGhpcy52YWx1ZXMsb3B0aW9ucz10aGlzLm9wdGlvbnMsdGFyZ2V0PXRoaXMudGFyZ2V0LGNhbnZhc0hlaWdodCxoZWlnaHQsaGFsZkhlaWdodCx4LHksY29sb3I7Y2FudmFzSGVpZ2h0PXRhcmdldC5waXhlbEhlaWdodDtoYWxmSGVpZ2h0PU1hdGgucm91bmQoY2FudmFzSGVpZ2h0LzIpO3g9dmFsdWVudW0qdGhpcy50b3RhbEJhcldpZHRoO2lmKHZhbHVlc1t2YWx1ZW51bV08MCl7eT1oYWxmSGVpZ2h0O2hlaWdodD1oYWxmSGVpZ2h0LTF9ZWxzZSBpZih2YWx1ZXNbdmFsdWVudW1dPjApe3k9MDtoZWlnaHQ9aGFsZkhlaWdodC0xfWVsc2V7eT1oYWxmSGVpZ2h0LTE7aGVpZ2h0PTJ9Y29sb3I9dGhpcy5jYWxjQ29sb3IodmFsdWVzW3ZhbHVlbnVtXSx2YWx1ZW51bSk7aWYoY29sb3I9PT1udWxsKXtyZXR1cm59aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcixvcHRpb25zKX1yZXR1cm4gdGFyZ2V0LmRyYXdSZWN0KHgseSx0aGlzLmJhcldpZHRoLTEsaGVpZ2h0LTEsY29sb3IsY29sb3IpfX0pOyQuZm4uc3BhcmtsaW5lLmRpc2NyZXRlPWRpc2NyZXRlPWNyZWF0ZUNsYXNzKCQuZm4uc3BhcmtsaW5lLl9iYXNlLGJhckhpZ2hsaWdodE1peGluLHt0eXBlOlwiZGlzY3JldGVcIixpbml0OmZ1bmN0aW9uKGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCl7ZGlzY3JldGUuX3N1cGVyLmluaXQuY2FsbCh0aGlzLGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCk7dGhpcy5yZWdpb25TaGFwZXM9e307dGhpcy52YWx1ZXM9dmFsdWVzPSQubWFwKHZhbHVlcyxOdW1iZXIpO3RoaXMubWluPU1hdGgubWluLmFwcGx5KE1hdGgsdmFsdWVzKTt0aGlzLm1heD1NYXRoLm1heC5hcHBseShNYXRoLHZhbHVlcyk7dGhpcy5yYW5nZT10aGlzLm1heC10aGlzLm1pbjt0aGlzLndpZHRoPXdpZHRoPW9wdGlvbnMuZ2V0KFwid2lkdGhcIik9PT1cImF1dG9cIj92YWx1ZXMubGVuZ3RoKjI6dGhpcy53aWR0aDt0aGlzLmludGVydmFsPU1hdGguZmxvb3Iod2lkdGgvdmFsdWVzLmxlbmd0aCk7dGhpcy5pdGVtV2lkdGg9d2lkdGgvdmFsdWVzLmxlbmd0aDtpZihvcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNaW5cIikhPT11bmRlZmluZWQmJihvcHRpb25zLmdldChcImNoYXJ0UmFuZ2VDbGlwXCIpfHxvcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNaW5cIik8dGhpcy5taW4pKXt0aGlzLm1pbj1vcHRpb25zLmdldChcImNoYXJ0UmFuZ2VNaW5cIil9aWYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpIT09dW5kZWZpbmVkJiYob3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlQ2xpcFwiKXx8b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpPnRoaXMubWF4KSl7dGhpcy5tYXg9b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpfXRoaXMuaW5pdFRhcmdldCgpO2lmKHRoaXMudGFyZ2V0KXt0aGlzLmxpbmVIZWlnaHQ9b3B0aW9ucy5nZXQoXCJsaW5lSGVpZ2h0XCIpPT09XCJhdXRvXCI/TWF0aC5yb3VuZCh0aGlzLmNhbnZhc0hlaWdodCouMyk6b3B0aW9ucy5nZXQoXCJsaW5lSGVpZ2h0XCIpfX0sZ2V0UmVnaW9uOmZ1bmN0aW9uKGVsLHgseSl7cmV0dXJuIE1hdGguZmxvb3IoeC90aGlzLml0ZW1XaWR0aCl9LGdldEN1cnJlbnRSZWdpb25GaWVsZHM6ZnVuY3Rpb24oKXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb247cmV0dXJue2lzTnVsbDp0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uXT09PXVuZGVmaW5lZCx2YWx1ZTp0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uXSxvZmZzZXQ6Y3VycmVudFJlZ2lvbn19LHJlbmRlclJlZ2lvbjpmdW5jdGlvbih2YWx1ZW51bSxoaWdobGlnaHQpe3ZhciB2YWx1ZXM9dGhpcy52YWx1ZXMsb3B0aW9ucz10aGlzLm9wdGlvbnMsbWluPXRoaXMubWluLG1heD10aGlzLm1heCxyYW5nZT10aGlzLnJhbmdlLGludGVydmFsPXRoaXMuaW50ZXJ2YWwsdGFyZ2V0PXRoaXMudGFyZ2V0LGNhbnZhc0hlaWdodD10aGlzLmNhbnZhc0hlaWdodCxsaW5lSGVpZ2h0PXRoaXMubGluZUhlaWdodCxwaGVpZ2h0PWNhbnZhc0hlaWdodC1saW5lSGVpZ2h0LHl0b3AsdmFsLGNvbG9yLHg7dmFsPWNsaXB2YWwodmFsdWVzW3ZhbHVlbnVtXSxtaW4sbWF4KTt4PXZhbHVlbnVtKmludGVydmFsO3l0b3A9TWF0aC5yb3VuZChwaGVpZ2h0LXBoZWlnaHQqKCh2YWwtbWluKS9yYW5nZSkpO2NvbG9yPW9wdGlvbnMuZ2V0KFwidGhyZXNob2xkQ29sb3JcIikmJnZhbDxvcHRpb25zLmdldChcInRocmVzaG9sZFZhbHVlXCIpP29wdGlvbnMuZ2V0KFwidGhyZXNob2xkQ29sb3JcIik6b3B0aW9ucy5nZXQoXCJsaW5lQ29sb3JcIik7aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcixvcHRpb25zKX1yZXR1cm4gdGFyZ2V0LmRyYXdMaW5lKHgseXRvcCx4LHl0b3ArbGluZUhlaWdodCxjb2xvcil9fSk7JC5mbi5zcGFya2xpbmUuYnVsbGV0PWJ1bGxldD1jcmVhdGVDbGFzcygkLmZuLnNwYXJrbGluZS5fYmFzZSx7dHlwZTpcImJ1bGxldFwiLGluaXQ6ZnVuY3Rpb24oZWwsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KXt2YXIgbWluLG1heCx2YWxzO2J1bGxldC5fc3VwZXIuaW5pdC5jYWxsKHRoaXMsZWwsdmFsdWVzLG9wdGlvbnMsd2lkdGgsaGVpZ2h0KTt0aGlzLnZhbHVlcz12YWx1ZXM9bm9ybWFsaXplVmFsdWVzKHZhbHVlcyk7dmFscz12YWx1ZXMuc2xpY2UoKTt2YWxzWzBdPXZhbHNbMF09PT1udWxsP3ZhbHNbMl06dmFsc1swXTt2YWxzWzFdPXZhbHVlc1sxXT09PW51bGw/dmFsc1syXTp2YWxzWzFdO21pbj1NYXRoLm1pbi5hcHBseShNYXRoLHZhbHVlcyk7bWF4PU1hdGgubWF4LmFwcGx5KE1hdGgsdmFsdWVzKTtpZihvcHRpb25zLmdldChcImJhc2VcIik9PT11bmRlZmluZWQpe21pbj1taW48MD9taW46MH1lbHNle21pbj1vcHRpb25zLmdldChcImJhc2VcIil9dGhpcy5taW49bWluO3RoaXMubWF4PW1heDt0aGlzLnJhbmdlPW1heC1taW47dGhpcy5zaGFwZXM9e307dGhpcy52YWx1ZVNoYXBlcz17fTt0aGlzLnJlZ2lvbmRhdGE9e307dGhpcy53aWR0aD13aWR0aD1vcHRpb25zLmdldChcIndpZHRoXCIpPT09XCJhdXRvXCI/XCI0LjBlbVwiOndpZHRoO3RoaXMudGFyZ2V0PXRoaXMuJGVsLnNpbXBsZWRyYXcod2lkdGgsaGVpZ2h0LG9wdGlvbnMuZ2V0KFwiY29tcG9zaXRlXCIpKTtpZighdmFsdWVzLmxlbmd0aCl7dGhpcy5kaXNhYmxlZD10cnVlfXRoaXMuaW5pdFRhcmdldCgpfSxnZXRSZWdpb246ZnVuY3Rpb24oZWwseCx5KXt2YXIgc2hhcGVpZD10aGlzLnRhcmdldC5nZXRTaGFwZUF0KGVsLHgseSk7cmV0dXJuIHNoYXBlaWQhPT11bmRlZmluZWQmJnRoaXMuc2hhcGVzW3NoYXBlaWRdIT09dW5kZWZpbmVkP3RoaXMuc2hhcGVzW3NoYXBlaWRdOnVuZGVmaW5lZH0sZ2V0Q3VycmVudFJlZ2lvbkZpZWxkczpmdW5jdGlvbigpe3ZhciBjdXJyZW50UmVnaW9uPXRoaXMuY3VycmVudFJlZ2lvbjtyZXR1cm57ZmllbGRrZXk6Y3VycmVudFJlZ2lvbi5zdWJzdHIoMCwxKSx2YWx1ZTp0aGlzLnZhbHVlc1tjdXJyZW50UmVnaW9uLnN1YnN0cigxKV0scmVnaW9uOmN1cnJlbnRSZWdpb259fSxjaGFuZ2VIaWdobGlnaHQ6ZnVuY3Rpb24oaGlnaGxpZ2h0KXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb24sc2hhcGVpZD10aGlzLnZhbHVlU2hhcGVzW2N1cnJlbnRSZWdpb25dLHNoYXBlO2RlbGV0ZSB0aGlzLnNoYXBlc1tzaGFwZWlkXTtzd2l0Y2goY3VycmVudFJlZ2lvbi5zdWJzdHIoMCwxKSl7Y2FzZVwiclwiOnNoYXBlPXRoaXMucmVuZGVyUmFuZ2UoY3VycmVudFJlZ2lvbi5zdWJzdHIoMSksaGlnaGxpZ2h0KTticmVhaztjYXNlXCJwXCI6c2hhcGU9dGhpcy5yZW5kZXJQZXJmb3JtYW5jZShoaWdobGlnaHQpO2JyZWFrO2Nhc2VcInRcIjpzaGFwZT10aGlzLnJlbmRlclRhcmdldChoaWdobGlnaHQpO2JyZWFrfXRoaXMudmFsdWVTaGFwZXNbY3VycmVudFJlZ2lvbl09c2hhcGUuaWQ7dGhpcy5zaGFwZXNbc2hhcGUuaWRdPWN1cnJlbnRSZWdpb247dGhpcy50YXJnZXQucmVwbGFjZVdpdGhTaGFwZShzaGFwZWlkLHNoYXBlKX0scmVuZGVyUmFuZ2U6ZnVuY3Rpb24ocm4saGlnaGxpZ2h0KXt2YXIgcmFuZ2V2YWw9dGhpcy52YWx1ZXNbcm5dLHJhbmdld2lkdGg9TWF0aC5yb3VuZCh0aGlzLmNhbnZhc1dpZHRoKigocmFuZ2V2YWwtdGhpcy5taW4pL3RoaXMucmFuZ2UpKSxjb2xvcj10aGlzLm9wdGlvbnMuZ2V0KFwicmFuZ2VDb2xvcnNcIilbcm4tMl07aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcix0aGlzLm9wdGlvbnMpfXJldHVybiB0aGlzLnRhcmdldC5kcmF3UmVjdCgwLDAscmFuZ2V3aWR0aC0xLHRoaXMuY2FudmFzSGVpZ2h0LTEsY29sb3IsY29sb3IpfSxyZW5kZXJQZXJmb3JtYW5jZTpmdW5jdGlvbihoaWdobGlnaHQpe3ZhciBwZXJmdmFsPXRoaXMudmFsdWVzWzFdLHBlcmZ3aWR0aD1NYXRoLnJvdW5kKHRoaXMuY2FudmFzV2lkdGgqKChwZXJmdmFsLXRoaXMubWluKS90aGlzLnJhbmdlKSksY29sb3I9dGhpcy5vcHRpb25zLmdldChcInBlcmZvcm1hbmNlQ29sb3JcIik7aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcix0aGlzLm9wdGlvbnMpfXJldHVybiB0aGlzLnRhcmdldC5kcmF3UmVjdCgwLE1hdGgucm91bmQodGhpcy5jYW52YXNIZWlnaHQqLjMpLHBlcmZ3aWR0aC0xLE1hdGgucm91bmQodGhpcy5jYW52YXNIZWlnaHQqLjQpLTEsY29sb3IsY29sb3IpfSxyZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oaGlnaGxpZ2h0KXt2YXIgdGFyZ2V0dmFsPXRoaXMudmFsdWVzWzBdLHg9TWF0aC5yb3VuZCh0aGlzLmNhbnZhc1dpZHRoKigodGFyZ2V0dmFsLXRoaXMubWluKS90aGlzLnJhbmdlKS10aGlzLm9wdGlvbnMuZ2V0KFwidGFyZ2V0V2lkdGhcIikvMiksdGFyZ2V0dG9wPU1hdGgucm91bmQodGhpcy5jYW52YXNIZWlnaHQqLjEpLHRhcmdldGhlaWdodD10aGlzLmNhbnZhc0hlaWdodC10YXJnZXR0b3AqMixjb2xvcj10aGlzLm9wdGlvbnMuZ2V0KFwidGFyZ2V0Q29sb3JcIik7aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcix0aGlzLm9wdGlvbnMpfXJldHVybiB0aGlzLnRhcmdldC5kcmF3UmVjdCh4LHRhcmdldHRvcCx0aGlzLm9wdGlvbnMuZ2V0KFwidGFyZ2V0V2lkdGhcIiktMSx0YXJnZXRoZWlnaHQtMSxjb2xvcixjb2xvcil9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciB2bGVuPXRoaXMudmFsdWVzLmxlbmd0aCx0YXJnZXQ9dGhpcy50YXJnZXQsaSxzaGFwZTtpZighYnVsbGV0Ll9zdXBlci5yZW5kZXIuY2FsbCh0aGlzKSl7cmV0dXJufWZvcihpPTI7aTx2bGVuO2krKyl7c2hhcGU9dGhpcy5yZW5kZXJSYW5nZShpKS5hcHBlbmQoKTt0aGlzLnNoYXBlc1tzaGFwZS5pZF09XCJyXCIraTt0aGlzLnZhbHVlU2hhcGVzW1wiclwiK2ldPXNoYXBlLmlkfWlmKHRoaXMudmFsdWVzWzFdIT09bnVsbCl7c2hhcGU9dGhpcy5yZW5kZXJQZXJmb3JtYW5jZSgpLmFwcGVuZCgpO3RoaXMuc2hhcGVzW3NoYXBlLmlkXT1cInAxXCI7dGhpcy52YWx1ZVNoYXBlcy5wMT1zaGFwZS5pZH1pZih0aGlzLnZhbHVlc1swXSE9PW51bGwpe3NoYXBlPXRoaXMucmVuZGVyVGFyZ2V0KCkuYXBwZW5kKCk7dGhpcy5zaGFwZXNbc2hhcGUuaWRdPVwidDBcIjt0aGlzLnZhbHVlU2hhcGVzLnQwPXNoYXBlLmlkfXRhcmdldC5yZW5kZXIoKX19KTskLmZuLnNwYXJrbGluZS5waWU9cGllPWNyZWF0ZUNsYXNzKCQuZm4uc3BhcmtsaW5lLl9iYXNlLHt0eXBlOlwicGllXCIsaW5pdDpmdW5jdGlvbihlbCx2YWx1ZXMsb3B0aW9ucyx3aWR0aCxoZWlnaHQpe3ZhciB0b3RhbD0wLGk7cGllLl9zdXBlci5pbml0LmNhbGwodGhpcyxlbCx2YWx1ZXMsb3B0aW9ucyx3aWR0aCxoZWlnaHQpO3RoaXMuc2hhcGVzPXt9O3RoaXMudmFsdWVTaGFwZXM9e307dGhpcy52YWx1ZXM9dmFsdWVzPSQubWFwKHZhbHVlcyxOdW1iZXIpO2lmKG9wdGlvbnMuZ2V0KFwid2lkdGhcIik9PT1cImF1dG9cIil7dGhpcy53aWR0aD10aGlzLmhlaWdodH1pZih2YWx1ZXMubGVuZ3RoPjApe2ZvcihpPXZhbHVlcy5sZW5ndGg7aS0tOyl7dG90YWwrPXZhbHVlc1tpXX19dGhpcy50b3RhbD10b3RhbDt0aGlzLmluaXRUYXJnZXQoKTt0aGlzLnJhZGl1cz1NYXRoLmZsb29yKE1hdGgubWluKHRoaXMuY2FudmFzV2lkdGgsdGhpcy5jYW52YXNIZWlnaHQpLzIpfSxnZXRSZWdpb246ZnVuY3Rpb24oZWwseCx5KXt2YXIgc2hhcGVpZD10aGlzLnRhcmdldC5nZXRTaGFwZUF0KGVsLHgseSk7cmV0dXJuIHNoYXBlaWQhPT11bmRlZmluZWQmJnRoaXMuc2hhcGVzW3NoYXBlaWRdIT09dW5kZWZpbmVkP3RoaXMuc2hhcGVzW3NoYXBlaWRdOnVuZGVmaW5lZH0sZ2V0Q3VycmVudFJlZ2lvbkZpZWxkczpmdW5jdGlvbigpe3ZhciBjdXJyZW50UmVnaW9uPXRoaXMuY3VycmVudFJlZ2lvbjtyZXR1cm57aXNOdWxsOnRoaXMudmFsdWVzW2N1cnJlbnRSZWdpb25dPT09dW5kZWZpbmVkLHZhbHVlOnRoaXMudmFsdWVzW2N1cnJlbnRSZWdpb25dLHBlcmNlbnQ6dGhpcy52YWx1ZXNbY3VycmVudFJlZ2lvbl0vdGhpcy50b3RhbCoxMDAsY29sb3I6dGhpcy5vcHRpb25zLmdldChcInNsaWNlQ29sb3JzXCIpW2N1cnJlbnRSZWdpb24ldGhpcy5vcHRpb25zLmdldChcInNsaWNlQ29sb3JzXCIpLmxlbmd0aF0sb2Zmc2V0OmN1cnJlbnRSZWdpb259fSxjaGFuZ2VIaWdobGlnaHQ6ZnVuY3Rpb24oaGlnaGxpZ2h0KXt2YXIgY3VycmVudFJlZ2lvbj10aGlzLmN1cnJlbnRSZWdpb24sbmV3c2xpY2U9dGhpcy5yZW5kZXJTbGljZShjdXJyZW50UmVnaW9uLGhpZ2hsaWdodCksc2hhcGVpZD10aGlzLnZhbHVlU2hhcGVzW2N1cnJlbnRSZWdpb25dO2RlbGV0ZSB0aGlzLnNoYXBlc1tzaGFwZWlkXTt0aGlzLnRhcmdldC5yZXBsYWNlV2l0aFNoYXBlKHNoYXBlaWQsbmV3c2xpY2UpO3RoaXMudmFsdWVTaGFwZXNbY3VycmVudFJlZ2lvbl09bmV3c2xpY2UuaWQ7dGhpcy5zaGFwZXNbbmV3c2xpY2UuaWRdPWN1cnJlbnRSZWdpb259LHJlbmRlclNsaWNlOmZ1bmN0aW9uKHZhbHVlbnVtLGhpZ2hsaWdodCl7dmFyIHRhcmdldD10aGlzLnRhcmdldCxvcHRpb25zPXRoaXMub3B0aW9ucyxyYWRpdXM9dGhpcy5yYWRpdXMsYm9yZGVyV2lkdGg9b3B0aW9ucy5nZXQoXCJib3JkZXJXaWR0aFwiKSxvZmZzZXQ9b3B0aW9ucy5nZXQoXCJvZmZzZXRcIiksY2lyY2xlPTIqTWF0aC5QSSx2YWx1ZXM9dGhpcy52YWx1ZXMsdG90YWw9dGhpcy50b3RhbCxuZXh0PW9mZnNldD8yKk1hdGguUEkqKG9mZnNldC8zNjApOjAsc3RhcnQsZW5kLGksdmxlbixjb2xvcjt2bGVuPXZhbHVlcy5sZW5ndGg7Zm9yKGk9MDtpPHZsZW47aSsrKXtzdGFydD1uZXh0O2VuZD1uZXh0O2lmKHRvdGFsPjApe2VuZD1uZXh0K2NpcmNsZSoodmFsdWVzW2ldL3RvdGFsKX1pZih2YWx1ZW51bT09PWkpe2NvbG9yPW9wdGlvbnMuZ2V0KFwic2xpY2VDb2xvcnNcIilbaSVvcHRpb25zLmdldChcInNsaWNlQ29sb3JzXCIpLmxlbmd0aF07aWYoaGlnaGxpZ2h0KXtjb2xvcj10aGlzLmNhbGNIaWdobGlnaHRDb2xvcihjb2xvcixvcHRpb25zKX1yZXR1cm4gdGFyZ2V0LmRyYXdQaWVTbGljZShyYWRpdXMscmFkaXVzLHJhZGl1cy1ib3JkZXJXaWR0aCxzdGFydCxlbmQsdW5kZWZpbmVkLGNvbG9yKX1uZXh0PWVuZH19LHJlbmRlcjpmdW5jdGlvbigpe3ZhciB0YXJnZXQ9dGhpcy50YXJnZXQsdmFsdWVzPXRoaXMudmFsdWVzLG9wdGlvbnM9dGhpcy5vcHRpb25zLHJhZGl1cz10aGlzLnJhZGl1cyxib3JkZXJXaWR0aD1vcHRpb25zLmdldChcImJvcmRlcldpZHRoXCIpLHNoYXBlLGk7aWYoIXBpZS5fc3VwZXIucmVuZGVyLmNhbGwodGhpcykpe3JldHVybn1pZihib3JkZXJXaWR0aCl7dGFyZ2V0LmRyYXdDaXJjbGUocmFkaXVzLHJhZGl1cyxNYXRoLmZsb29yKHJhZGl1cy1ib3JkZXJXaWR0aC8yKSxvcHRpb25zLmdldChcImJvcmRlckNvbG9yXCIpLHVuZGVmaW5lZCxib3JkZXJXaWR0aCkuYXBwZW5kKCl9Zm9yKGk9dmFsdWVzLmxlbmd0aDtpLS07KXtpZih2YWx1ZXNbaV0pe3NoYXBlPXRoaXMucmVuZGVyU2xpY2UoaSkuYXBwZW5kKCk7dGhpcy52YWx1ZVNoYXBlc1tpXT1zaGFwZS5pZDt0aGlzLnNoYXBlc1tzaGFwZS5pZF09aX19dGFyZ2V0LnJlbmRlcigpfX0pOyQuZm4uc3BhcmtsaW5lLmJveD1ib3g9Y3JlYXRlQ2xhc3MoJC5mbi5zcGFya2xpbmUuX2Jhc2Use3R5cGU6XCJib3hcIixpbml0OmZ1bmN0aW9uKGVsLHZhbHVlcyxvcHRpb25zLHdpZHRoLGhlaWdodCl7Ym94Ll9zdXBlci5pbml0LmNhbGwodGhpcyxlbCx2YWx1ZXMsb3B0aW9ucyx3aWR0aCxoZWlnaHQpO3RoaXMudmFsdWVzPSQubWFwKHZhbHVlcyxOdW1iZXIpO3RoaXMud2lkdGg9b3B0aW9ucy5nZXQoXCJ3aWR0aFwiKT09PVwiYXV0b1wiP1wiNC4wZW1cIjp3aWR0aDt0aGlzLmluaXRUYXJnZXQoKTtpZighdGhpcy52YWx1ZXMubGVuZ3RoKXt0aGlzLmRpc2FibGVkPTF9fSxnZXRSZWdpb246ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0Q3VycmVudFJlZ2lvbkZpZWxkczpmdW5jdGlvbigpe3ZhciByZXN1bHQ9W3tmaWVsZDpcImxxXCIsdmFsdWU6dGhpcy5xdWFydGlsZXNbMF19LHtmaWVsZDpcIm1lZFwiLHZhbHVlOnRoaXMucXVhcnRpbGVzWzFdfSx7ZmllbGQ6XCJ1cVwiLHZhbHVlOnRoaXMucXVhcnRpbGVzWzJdfV07aWYodGhpcy5sb3V0bGllciE9PXVuZGVmaW5lZCl7cmVzdWx0LnB1c2goe2ZpZWxkOlwibG9cIix2YWx1ZTp0aGlzLmxvdXRsaWVyfSl9aWYodGhpcy5yb3V0bGllciE9PXVuZGVmaW5lZCl7cmVzdWx0LnB1c2goe2ZpZWxkOlwicm9cIix2YWx1ZTp0aGlzLnJvdXRsaWVyfSl9aWYodGhpcy5sd2hpc2tlciE9PXVuZGVmaW5lZCl7cmVzdWx0LnB1c2goe2ZpZWxkOlwibHdcIix2YWx1ZTp0aGlzLmx3aGlza2VyfSl9aWYodGhpcy5yd2hpc2tlciE9PXVuZGVmaW5lZCl7cmVzdWx0LnB1c2goe2ZpZWxkOlwicndcIix2YWx1ZTp0aGlzLnJ3aGlza2VyfSl9cmV0dXJuIHJlc3VsdH0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIHRhcmdldD10aGlzLnRhcmdldCx2YWx1ZXM9dGhpcy52YWx1ZXMsdmxlbj12YWx1ZXMubGVuZ3RoLG9wdGlvbnM9dGhpcy5vcHRpb25zLGNhbnZhc1dpZHRoPXRoaXMuY2FudmFzV2lkdGgsY2FudmFzSGVpZ2h0PXRoaXMuY2FudmFzSGVpZ2h0LG1pblZhbHVlPW9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1pblwiKT09PXVuZGVmaW5lZD9NYXRoLm1pbi5hcHBseShNYXRoLHZhbHVlcyk6b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWluXCIpLG1heFZhbHVlPW9wdGlvbnMuZ2V0KFwiY2hhcnRSYW5nZU1heFwiKT09PXVuZGVmaW5lZD9NYXRoLm1heC5hcHBseShNYXRoLHZhbHVlcyk6b3B0aW9ucy5nZXQoXCJjaGFydFJhbmdlTWF4XCIpLGNhbnZhc0xlZnQ9MCxsd2hpc2tlcixsb3V0bGllcixpcXIscTEscTIscTMscndoaXNrZXIscm91dGxpZXIsaSxzaXplLHVuaXRTaXplO2lmKCFib3guX3N1cGVyLnJlbmRlci5jYWxsKHRoaXMpKXtyZXR1cm59aWYob3B0aW9ucy5nZXQoXCJyYXdcIikpe2lmKG9wdGlvbnMuZ2V0KFwic2hvd091dGxpZXJzXCIpJiZ2YWx1ZXMubGVuZ3RoPjUpe2xvdXRsaWVyPXZhbHVlc1swXTtsd2hpc2tlcj12YWx1ZXNbMV07cTE9dmFsdWVzWzJdO3EyPXZhbHVlc1szXTtxMz12YWx1ZXNbNF07cndoaXNrZXI9dmFsdWVzWzVdO3JvdXRsaWVyPXZhbHVlc1s2XX1lbHNle2x3aGlza2VyPXZhbHVlc1swXTtxMT12YWx1ZXNbMV07cTI9dmFsdWVzWzJdO3EzPXZhbHVlc1szXTtyd2hpc2tlcj12YWx1ZXNbNF19fWVsc2V7dmFsdWVzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSk7cTE9cXVhcnRpbGUodmFsdWVzLDEpO3EyPXF1YXJ0aWxlKHZhbHVlcywyKTtxMz1xdWFydGlsZSh2YWx1ZXMsMyk7aXFyPXEzLXExO2lmKG9wdGlvbnMuZ2V0KFwic2hvd091dGxpZXJzXCIpKXtsd2hpc2tlcj1yd2hpc2tlcj11bmRlZmluZWQ7Zm9yKGk9MDtpPHZsZW47aSsrKXtpZihsd2hpc2tlcj09PXVuZGVmaW5lZCYmdmFsdWVzW2ldPnExLWlxcipvcHRpb25zLmdldChcIm91dGxpZXJJUVJcIikpe2x3aGlza2VyPXZhbHVlc1tpXX1pZih2YWx1ZXNbaV08cTMraXFyKm9wdGlvbnMuZ2V0KFwib3V0bGllcklRUlwiKSl7cndoaXNrZXI9dmFsdWVzW2ldfX1sb3V0bGllcj12YWx1ZXNbMF07cm91dGxpZXI9dmFsdWVzW3ZsZW4tMV19ZWxzZXtsd2hpc2tlcj12YWx1ZXNbMF07cndoaXNrZXI9dmFsdWVzW3ZsZW4tMV19fXRoaXMucXVhcnRpbGVzPVtxMSxxMixxM107dGhpcy5sd2hpc2tlcj1sd2hpc2tlcjt0aGlzLnJ3aGlza2VyPXJ3aGlza2VyO3RoaXMubG91dGxpZXI9bG91dGxpZXI7dGhpcy5yb3V0bGllcj1yb3V0bGllcjt1bml0U2l6ZT1jYW52YXNXaWR0aC8obWF4VmFsdWUtbWluVmFsdWUrMSk7aWYob3B0aW9ucy5nZXQoXCJzaG93T3V0bGllcnNcIikpe2NhbnZhc0xlZnQ9TWF0aC5jZWlsKG9wdGlvbnMuZ2V0KFwic3BvdFJhZGl1c1wiKSk7Y2FudmFzV2lkdGgtPTIqTWF0aC5jZWlsKG9wdGlvbnMuZ2V0KFwic3BvdFJhZGl1c1wiKSk7dW5pdFNpemU9Y2FudmFzV2lkdGgvKG1heFZhbHVlLW1pblZhbHVlKzEpO2lmKGxvdXRsaWVyPGx3aGlza2VyKXt0YXJnZXQuZHJhd0NpcmNsZSgobG91dGxpZXItbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQsY2FudmFzSGVpZ2h0LzIsb3B0aW9ucy5nZXQoXCJzcG90UmFkaXVzXCIpLG9wdGlvbnMuZ2V0KFwib3V0bGllckxpbmVDb2xvclwiKSxvcHRpb25zLmdldChcIm91dGxpZXJGaWxsQ29sb3JcIikpLmFwcGVuZCgpfWlmKHJvdXRsaWVyPnJ3aGlza2VyKXt0YXJnZXQuZHJhd0NpcmNsZSgocm91dGxpZXItbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQsY2FudmFzSGVpZ2h0LzIsb3B0aW9ucy5nZXQoXCJzcG90UmFkaXVzXCIpLG9wdGlvbnMuZ2V0KFwib3V0bGllckxpbmVDb2xvclwiKSxvcHRpb25zLmdldChcIm91dGxpZXJGaWxsQ29sb3JcIikpLmFwcGVuZCgpfX10YXJnZXQuZHJhd1JlY3QoTWF0aC5yb3VuZCgocTEtbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0Ki4xKSxNYXRoLnJvdW5kKChxMy1xMSkqdW5pdFNpemUpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0Ki44KSxvcHRpb25zLmdldChcImJveExpbmVDb2xvclwiKSxvcHRpb25zLmdldChcImJveEZpbGxDb2xvclwiKSkuYXBwZW5kKCk7dGFyZ2V0LmRyYXdMaW5lKE1hdGgucm91bmQoKGx3aGlza2VyLW1pblZhbHVlKSp1bml0U2l6ZStjYW52YXNMZWZ0KSxNYXRoLnJvdW5kKGNhbnZhc0hlaWdodC8yKSxNYXRoLnJvdW5kKChxMS1taW5WYWx1ZSkqdW5pdFNpemUrY2FudmFzTGVmdCksTWF0aC5yb3VuZChjYW52YXNIZWlnaHQvMiksb3B0aW9ucy5nZXQoXCJsaW5lQ29sb3JcIikpLmFwcGVuZCgpO3RhcmdldC5kcmF3TGluZShNYXRoLnJvdW5kKChsd2hpc2tlci1taW5WYWx1ZSkqdW5pdFNpemUrY2FudmFzTGVmdCksTWF0aC5yb3VuZChjYW52YXNIZWlnaHQvNCksTWF0aC5yb3VuZCgobHdoaXNrZXItbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LWNhbnZhc0hlaWdodC80KSxvcHRpb25zLmdldChcIndoaXNrZXJDb2xvclwiKSkuYXBwZW5kKCk7dGFyZ2V0LmRyYXdMaW5lKE1hdGgucm91bmQoKHJ3aGlza2VyLW1pblZhbHVlKSp1bml0U2l6ZStjYW52YXNMZWZ0KSxNYXRoLnJvdW5kKGNhbnZhc0hlaWdodC8yKSxNYXRoLnJvdW5kKChxMy1taW5WYWx1ZSkqdW5pdFNpemUrY2FudmFzTGVmdCksTWF0aC5yb3VuZChjYW52YXNIZWlnaHQvMiksb3B0aW9ucy5nZXQoXCJsaW5lQ29sb3JcIikpLmFwcGVuZCgpO3RhcmdldC5kcmF3TGluZShNYXRoLnJvdW5kKChyd2hpc2tlci1taW5WYWx1ZSkqdW5pdFNpemUrY2FudmFzTGVmdCksTWF0aC5yb3VuZChjYW52YXNIZWlnaHQvNCksTWF0aC5yb3VuZCgocndoaXNrZXItbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LWNhbnZhc0hlaWdodC80KSxvcHRpb25zLmdldChcIndoaXNrZXJDb2xvclwiKSkuYXBwZW5kKCk7dGFyZ2V0LmRyYXdMaW5lKE1hdGgucm91bmQoKHEyLW1pblZhbHVlKSp1bml0U2l6ZStjYW52YXNMZWZ0KSxNYXRoLnJvdW5kKGNhbnZhc0hlaWdodCouMSksTWF0aC5yb3VuZCgocTItbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0Ki45KSxvcHRpb25zLmdldChcIm1lZGlhbkNvbG9yXCIpKS5hcHBlbmQoKTtpZihvcHRpb25zLmdldChcInRhcmdldFwiKSl7c2l6ZT1NYXRoLmNlaWwob3B0aW9ucy5nZXQoXCJzcG90UmFkaXVzXCIpKTt0YXJnZXQuZHJhd0xpbmUoTWF0aC5yb3VuZCgob3B0aW9ucy5nZXQoXCJ0YXJnZXRcIiktbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LzItc2l6ZSksTWF0aC5yb3VuZCgob3B0aW9ucy5nZXQoXCJ0YXJnZXRcIiktbWluVmFsdWUpKnVuaXRTaXplK2NhbnZhc0xlZnQpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LzIrc2l6ZSksb3B0aW9ucy5nZXQoXCJ0YXJnZXRDb2xvclwiKSkuYXBwZW5kKCk7dGFyZ2V0LmRyYXdMaW5lKE1hdGgucm91bmQoKG9wdGlvbnMuZ2V0KFwidGFyZ2V0XCIpLW1pblZhbHVlKSp1bml0U2l6ZStjYW52YXNMZWZ0LXNpemUpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LzIpLE1hdGgucm91bmQoKG9wdGlvbnMuZ2V0KFwidGFyZ2V0XCIpLW1pblZhbHVlKSp1bml0U2l6ZStjYW52YXNMZWZ0K3NpemUpLE1hdGgucm91bmQoY2FudmFzSGVpZ2h0LzIpLG9wdGlvbnMuZ2V0KFwidGFyZ2V0Q29sb3JcIikpLmFwcGVuZCgpfXRhcmdldC5yZW5kZXIoKX19KTtWU2hhcGU9Y3JlYXRlQ2xhc3Moe2luaXQ6ZnVuY3Rpb24odGFyZ2V0LGlkLHR5cGUsYXJncyl7dGhpcy50YXJnZXQ9dGFyZ2V0O3RoaXMuaWQ9aWQ7dGhpcy50eXBlPXR5cGU7dGhpcy5hcmdzPWFyZ3N9LGFwcGVuZDpmdW5jdGlvbigpe3RoaXMudGFyZ2V0LmFwcGVuZFNoYXBlKHRoaXMpO3JldHVybiB0aGlzfX0pO1ZDYW52YXNfYmFzZT1jcmVhdGVDbGFzcyh7X3B4cmVnZXg6LyhcXGQrKShweCk/XFxzKiQvaSxpbml0OmZ1bmN0aW9uKHdpZHRoLGhlaWdodCx0YXJnZXQpe2lmKCF3aWR0aCl7cmV0dXJufXRoaXMud2lkdGg9d2lkdGg7dGhpcy5oZWlnaHQ9aGVpZ2h0O3RoaXMudGFyZ2V0PXRhcmdldDt0aGlzLmxhc3RTaGFwZUlkPW51bGw7aWYodGFyZ2V0WzBdKXt0YXJnZXQ9dGFyZ2V0WzBdfSQuZGF0YSh0YXJnZXQsXCJfanFzX3ZjYW52YXNcIix0aGlzKX0sZHJhd0xpbmU6ZnVuY3Rpb24oeDEseTEseDIseTIsbGluZUNvbG9yLGxpbmVXaWR0aCl7cmV0dXJuIHRoaXMuZHJhd1NoYXBlKFtbeDEseTFdLFt4Mix5Ml1dLGxpbmVDb2xvcixsaW5lV2lkdGgpfSxkcmF3U2hhcGU6ZnVuY3Rpb24ocGF0aCxsaW5lQ29sb3IsZmlsbENvbG9yLGxpbmVXaWR0aCl7cmV0dXJuIHRoaXMuX2dlblNoYXBlKFwiU2hhcGVcIixbcGF0aCxsaW5lQ29sb3IsZmlsbENvbG9yLGxpbmVXaWR0aF0pfSxkcmF3Q2lyY2xlOmZ1bmN0aW9uKHgseSxyYWRpdXMsbGluZUNvbG9yLGZpbGxDb2xvcixsaW5lV2lkdGgpe3JldHVybiB0aGlzLl9nZW5TaGFwZShcIkNpcmNsZVwiLFt4LHkscmFkaXVzLGxpbmVDb2xvcixmaWxsQ29sb3IsbGluZVdpZHRoXSl9LGRyYXdQaWVTbGljZTpmdW5jdGlvbih4LHkscmFkaXVzLHN0YXJ0QW5nbGUsZW5kQW5nbGUsbGluZUNvbG9yLGZpbGxDb2xvcil7cmV0dXJuIHRoaXMuX2dlblNoYXBlKFwiUGllU2xpY2VcIixbeCx5LHJhZGl1cyxzdGFydEFuZ2xlLGVuZEFuZ2xlLGxpbmVDb2xvcixmaWxsQ29sb3JdKX0sZHJhd1JlY3Q6ZnVuY3Rpb24oeCx5LHdpZHRoLGhlaWdodCxsaW5lQ29sb3IsZmlsbENvbG9yKXtyZXR1cm4gdGhpcy5fZ2VuU2hhcGUoXCJSZWN0XCIsW3gseSx3aWR0aCxoZWlnaHQsbGluZUNvbG9yLGZpbGxDb2xvcl0pfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfSxnZXRMYXN0U2hhcGVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RTaGFwZUlkfSxyZXNldDpmdW5jdGlvbigpe2FsZXJ0KFwicmVzZXQgbm90IGltcGxlbWVudGVkXCIpfSxfaW5zZXJ0OmZ1bmN0aW9uKGVsLHRhcmdldCl7JCh0YXJnZXQpLmh0bWwoZWwpfSxfY2FsY3VsYXRlUGl4ZWxEaW1zOmZ1bmN0aW9uKHdpZHRoLGhlaWdodCxjYW52YXMpe3ZhciBtYXRjaDttYXRjaD10aGlzLl9weHJlZ2V4LmV4ZWMoaGVpZ2h0KTtpZihtYXRjaCl7dGhpcy5waXhlbEhlaWdodD1tYXRjaFsxXX1lbHNle3RoaXMucGl4ZWxIZWlnaHQ9JChjYW52YXMpLmhlaWdodCgpfW1hdGNoPXRoaXMuX3B4cmVnZXguZXhlYyh3aWR0aCk7aWYobWF0Y2gpe3RoaXMucGl4ZWxXaWR0aD1tYXRjaFsxXX1lbHNle3RoaXMucGl4ZWxXaWR0aD0kKGNhbnZhcykud2lkdGgoKX19LF9nZW5TaGFwZTpmdW5jdGlvbihzaGFwZXR5cGUsc2hhcGVhcmdzKXt2YXIgaWQ9c2hhcGVDb3VudCsrO3NoYXBlYXJncy51bnNoaWZ0KGlkKTtyZXR1cm4gbmV3IFZTaGFwZSh0aGlzLGlkLHNoYXBldHlwZSxzaGFwZWFyZ3MpfSxhcHBlbmRTaGFwZTpmdW5jdGlvbihzaGFwZSl7YWxlcnQoXCJhcHBlbmRTaGFwZSBub3QgaW1wbGVtZW50ZWRcIil9LHJlcGxhY2VXaXRoU2hhcGU6ZnVuY3Rpb24oc2hhcGVpZCxzaGFwZSl7YWxlcnQoXCJyZXBsYWNlV2l0aFNoYXBlIG5vdCBpbXBsZW1lbnRlZFwiKX0saW5zZXJ0QWZ0ZXJTaGFwZTpmdW5jdGlvbihzaGFwZWlkLHNoYXBlKXthbGVydChcImluc2VydEFmdGVyU2hhcGUgbm90IGltcGxlbWVudGVkXCIpfSxyZW1vdmVTaGFwZUlkOmZ1bmN0aW9uKHNoYXBlaWQpe2FsZXJ0KFwicmVtb3ZlU2hhcGVJZCBub3QgaW1wbGVtZW50ZWRcIil9LGdldFNoYXBlQXQ6ZnVuY3Rpb24oZWwseCx5KXthbGVydChcImdldFNoYXBlQXQgbm90IGltcGxlbWVudGVkXCIpfSxyZW5kZXI6ZnVuY3Rpb24oKXthbGVydChcInJlbmRlciBub3QgaW1wbGVtZW50ZWRcIil9fSk7VkNhbnZhc19jYW52YXM9Y3JlYXRlQ2xhc3MoVkNhbnZhc19iYXNlLHtpbml0OmZ1bmN0aW9uKHdpZHRoLGhlaWdodCx0YXJnZXQsaW50ZXJhY3Qpe1ZDYW52YXNfY2FudmFzLl9zdXBlci5pbml0LmNhbGwodGhpcyx3aWR0aCxoZWlnaHQsdGFyZ2V0KTt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2lmKHRhcmdldFswXSl7dGFyZ2V0PXRhcmdldFswXX0kLmRhdGEodGFyZ2V0LFwiX2pxc192Y2FudmFzXCIsdGhpcyk7JCh0aGlzLmNhbnZhcykuY3NzKHtkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCIsd2lkdGg6d2lkdGgsaGVpZ2h0OmhlaWdodCx2ZXJ0aWNhbEFsaWduOlwidG9wXCJ9KTt0aGlzLl9pbnNlcnQodGhpcy5jYW52YXMsdGFyZ2V0KTt0aGlzLl9jYWxjdWxhdGVQaXhlbERpbXMod2lkdGgsaGVpZ2h0LHRoaXMuY2FudmFzKTt0aGlzLmNhbnZhcy53aWR0aD10aGlzLnBpeGVsV2lkdGg7dGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMucGl4ZWxIZWlnaHQ7dGhpcy5pbnRlcmFjdD1pbnRlcmFjdDt0aGlzLnNoYXBlcz17fTt0aGlzLnNoYXBlc2VxPVtdO3RoaXMuY3VycmVudFRhcmdldFNoYXBlSWQ9dW5kZWZpbmVkOyQodGhpcy5jYW52YXMpLmNzcyh7d2lkdGg6dGhpcy5waXhlbFdpZHRoLGhlaWdodDp0aGlzLnBpeGVsSGVpZ2h0fSl9LF9nZXRDb250ZXh0OmZ1bmN0aW9uKGxpbmVDb2xvcixmaWxsQ29sb3IsbGluZVdpZHRoKXt2YXIgY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7aWYobGluZUNvbG9yIT09dW5kZWZpbmVkKXtjb250ZXh0LnN0cm9rZVN0eWxlPWxpbmVDb2xvcn1jb250ZXh0LmxpbmVXaWR0aD1saW5lV2lkdGg9PT11bmRlZmluZWQ/MTpsaW5lV2lkdGg7aWYoZmlsbENvbG9yIT09dW5kZWZpbmVkKXtjb250ZXh0LmZpbGxTdHlsZT1maWxsQ29sb3J9cmV0dXJuIGNvbnRleHR9LHJlc2V0OmZ1bmN0aW9uKCl7dmFyIGNvbnRleHQ9dGhpcy5fZ2V0Q29udGV4dCgpO2NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCk7dGhpcy5zaGFwZXM9e307dGhpcy5zaGFwZXNlcT1bXTt0aGlzLmN1cnJlbnRUYXJnZXRTaGFwZUlkPXVuZGVmaW5lZH0sX2RyYXdTaGFwZTpmdW5jdGlvbihzaGFwZWlkLHBhdGgsbGluZUNvbG9yLGZpbGxDb2xvcixsaW5lV2lkdGgpe3ZhciBjb250ZXh0PXRoaXMuX2dldENvbnRleHQobGluZUNvbG9yLGZpbGxDb2xvcixsaW5lV2lkdGgpLGkscGxlbjtjb250ZXh0LmJlZ2luUGF0aCgpO2NvbnRleHQubW92ZVRvKHBhdGhbMF1bMF0rLjUscGF0aFswXVsxXSsuNSk7Zm9yKGk9MSxwbGVuPXBhdGgubGVuZ3RoO2k8cGxlbjtpKyspe2NvbnRleHQubGluZVRvKHBhdGhbaV1bMF0rLjUscGF0aFtpXVsxXSsuNSl9aWYobGluZUNvbG9yIT09dW5kZWZpbmVkKXtjb250ZXh0LnN0cm9rZSgpfWlmKGZpbGxDb2xvciE9PXVuZGVmaW5lZCl7Y29udGV4dC5maWxsKCl9aWYodGhpcy50YXJnZXRYIT09dW5kZWZpbmVkJiZ0aGlzLnRhcmdldFkhPT11bmRlZmluZWQmJmNvbnRleHQuaXNQb2ludEluUGF0aCh0aGlzLnRhcmdldFgsdGhpcy50YXJnZXRZKSl7dGhpcy5jdXJyZW50VGFyZ2V0U2hhcGVJZD1zaGFwZWlkfX0sX2RyYXdDaXJjbGU6ZnVuY3Rpb24oc2hhcGVpZCx4LHkscmFkaXVzLGxpbmVDb2xvcixmaWxsQ29sb3IsbGluZVdpZHRoKXt2YXIgY29udGV4dD10aGlzLl9nZXRDb250ZXh0KGxpbmVDb2xvcixmaWxsQ29sb3IsbGluZVdpZHRoKTtjb250ZXh0LmJlZ2luUGF0aCgpO2NvbnRleHQuYXJjKHgseSxyYWRpdXMsMCwyKk1hdGguUEksZmFsc2UpO2lmKHRoaXMudGFyZ2V0WCE9PXVuZGVmaW5lZCYmdGhpcy50YXJnZXRZIT09dW5kZWZpbmVkJiZjb250ZXh0LmlzUG9pbnRJblBhdGgodGhpcy50YXJnZXRYLHRoaXMudGFyZ2V0WSkpe3RoaXMuY3VycmVudFRhcmdldFNoYXBlSWQ9c2hhcGVpZH1pZihsaW5lQ29sb3IhPT11bmRlZmluZWQpe2NvbnRleHQuc3Ryb2tlKCl9aWYoZmlsbENvbG9yIT09dW5kZWZpbmVkKXtjb250ZXh0LmZpbGwoKX19LF9kcmF3UGllU2xpY2U6ZnVuY3Rpb24oc2hhcGVpZCx4LHkscmFkaXVzLHN0YXJ0QW5nbGUsZW5kQW5nbGUsbGluZUNvbG9yLGZpbGxDb2xvcil7dmFyIGNvbnRleHQ9dGhpcy5fZ2V0Q29udGV4dChsaW5lQ29sb3IsZmlsbENvbG9yKTtjb250ZXh0LmJlZ2luUGF0aCgpO2NvbnRleHQubW92ZVRvKHgseSk7Y29udGV4dC5hcmMoeCx5LHJhZGl1cyxzdGFydEFuZ2xlLGVuZEFuZ2xlLGZhbHNlKTtjb250ZXh0LmxpbmVUbyh4LHkpO2NvbnRleHQuY2xvc2VQYXRoKCk7aWYobGluZUNvbG9yIT09dW5kZWZpbmVkKXtjb250ZXh0LnN0cm9rZSgpfWlmKGZpbGxDb2xvcil7Y29udGV4dC5maWxsKCl9aWYodGhpcy50YXJnZXRYIT09dW5kZWZpbmVkJiZ0aGlzLnRhcmdldFkhPT11bmRlZmluZWQmJmNvbnRleHQuaXNQb2ludEluUGF0aCh0aGlzLnRhcmdldFgsdGhpcy50YXJnZXRZKSl7dGhpcy5jdXJyZW50VGFyZ2V0U2hhcGVJZD1zaGFwZWlkfX0sX2RyYXdSZWN0OmZ1bmN0aW9uKHNoYXBlaWQseCx5LHdpZHRoLGhlaWdodCxsaW5lQ29sb3IsZmlsbENvbG9yKXtyZXR1cm4gdGhpcy5fZHJhd1NoYXBlKHNoYXBlaWQsW1t4LHldLFt4K3dpZHRoLHldLFt4K3dpZHRoLHkraGVpZ2h0XSxbeCx5K2hlaWdodF0sW3gseV1dLGxpbmVDb2xvcixmaWxsQ29sb3IpfSxhcHBlbmRTaGFwZTpmdW5jdGlvbihzaGFwZSl7dGhpcy5zaGFwZXNbc2hhcGUuaWRdPXNoYXBlO3RoaXMuc2hhcGVzZXEucHVzaChzaGFwZS5pZCk7dGhpcy5sYXN0U2hhcGVJZD1zaGFwZS5pZDtyZXR1cm4gc2hhcGUuaWR9LHJlcGxhY2VXaXRoU2hhcGU6ZnVuY3Rpb24oc2hhcGVpZCxzaGFwZSl7dmFyIHNoYXBlc2VxPXRoaXMuc2hhcGVzZXEsaTt0aGlzLnNoYXBlc1tzaGFwZS5pZF09c2hhcGU7Zm9yKGk9c2hhcGVzZXEubGVuZ3RoO2ktLTspe2lmKHNoYXBlc2VxW2ldPT1zaGFwZWlkKXtzaGFwZXNlcVtpXT1zaGFwZS5pZH19ZGVsZXRlIHRoaXMuc2hhcGVzW3NoYXBlaWRdfSxyZXBsYWNlV2l0aFNoYXBlczpmdW5jdGlvbihzaGFwZWlkcyxzaGFwZXMpe3ZhciBzaGFwZXNlcT10aGlzLnNoYXBlc2VxLHNoYXBlbWFwPXt9LHNpZCxpLGZpcnN0O2ZvcihpPXNoYXBlaWRzLmxlbmd0aDtpLS07KXtzaGFwZW1hcFtzaGFwZWlkc1tpXV09dHJ1ZX1mb3IoaT1zaGFwZXNlcS5sZW5ndGg7aS0tOyl7c2lkPXNoYXBlc2VxW2ldO2lmKHNoYXBlbWFwW3NpZF0pe3NoYXBlc2VxLnNwbGljZShpLDEpO2RlbGV0ZSB0aGlzLnNoYXBlc1tzaWRdO2ZpcnN0PWl9fWZvcihpPXNoYXBlcy5sZW5ndGg7aS0tOyl7c2hhcGVzZXEuc3BsaWNlKGZpcnN0LDAsc2hhcGVzW2ldLmlkKTt0aGlzLnNoYXBlc1tzaGFwZXNbaV0uaWRdPXNoYXBlc1tpXX19LGluc2VydEFmdGVyU2hhcGU6ZnVuY3Rpb24oc2hhcGVpZCxzaGFwZSl7dmFyIHNoYXBlc2VxPXRoaXMuc2hhcGVzZXEsaTtmb3IoaT1zaGFwZXNlcS5sZW5ndGg7aS0tOyl7aWYoc2hhcGVzZXFbaV09PT1zaGFwZWlkKXtzaGFwZXNlcS5zcGxpY2UoaSsxLDAsc2hhcGUuaWQpO3RoaXMuc2hhcGVzW3NoYXBlLmlkXT1zaGFwZTtyZXR1cm59fX0scmVtb3ZlU2hhcGVJZDpmdW5jdGlvbihzaGFwZWlkKXt2YXIgc2hhcGVzZXE9dGhpcy5zaGFwZXNlcSxpO2ZvcihpPXNoYXBlc2VxLmxlbmd0aDtpLS07KXtpZihzaGFwZXNlcVtpXT09PXNoYXBlaWQpe3NoYXBlc2VxLnNwbGljZShpLDEpO2JyZWFrfX1kZWxldGUgdGhpcy5zaGFwZXNbc2hhcGVpZF19LGdldFNoYXBlQXQ6ZnVuY3Rpb24oZWwseCx5KXt0aGlzLnRhcmdldFg9eDt0aGlzLnRhcmdldFk9eTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzLmN1cnJlbnRUYXJnZXRTaGFwZUlkfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgc2hhcGVzZXE9dGhpcy5zaGFwZXNlcSxzaGFwZXM9dGhpcy5zaGFwZXMsc2hhcGVDb3VudD1zaGFwZXNlcS5sZW5ndGgsY29udGV4dD10aGlzLl9nZXRDb250ZXh0KCksc2hhcGVpZCxzaGFwZSxpO2NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCk7Zm9yKGk9MDtpPHNoYXBlQ291bnQ7aSsrKXtzaGFwZWlkPXNoYXBlc2VxW2ldO3NoYXBlPXNoYXBlc1tzaGFwZWlkXTt0aGlzW1wiX2RyYXdcIitzaGFwZS50eXBlXS5hcHBseSh0aGlzLHNoYXBlLmFyZ3MpfWlmKCF0aGlzLmludGVyYWN0KXt0aGlzLnNoYXBlcz17fTt0aGlzLnNoYXBlc2VxPVtdfX19KTtWQ2FudmFzX3ZtbD1jcmVhdGVDbGFzcyhWQ2FudmFzX2Jhc2Use2luaXQ6ZnVuY3Rpb24od2lkdGgsaGVpZ2h0LHRhcmdldCl7dmFyIGdyb3VwZWw7VkNhbnZhc192bWwuX3N1cGVyLmluaXQuY2FsbCh0aGlzLHdpZHRoLGhlaWdodCx0YXJnZXQpO2lmKHRhcmdldFswXSl7dGFyZ2V0PXRhcmdldFswXX0kLmRhdGEodGFyZ2V0LFwiX2pxc192Y2FudmFzXCIsdGhpcyk7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7JCh0aGlzLmNhbnZhcykuY3NzKHtkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6d2lkdGgsaGVpZ2h0OmhlaWdodCxtYXJnaW46XCIwcHhcIixwYWRkaW5nOlwiMHB4XCIsdmVydGljYWxBbGlnbjpcInRvcFwifSk7dGhpcy5faW5zZXJ0KHRoaXMuY2FudmFzLHRhcmdldCk7dGhpcy5fY2FsY3VsYXRlUGl4ZWxEaW1zKHdpZHRoLGhlaWdodCx0aGlzLmNhbnZhcyk7dGhpcy5jYW52YXMud2lkdGg9dGhpcy5waXhlbFdpZHRoO3RoaXMuY2FudmFzLmhlaWdodD10aGlzLnBpeGVsSGVpZ2h0O2dyb3VwZWw9Jzx2Omdyb3VwIGNvb3Jkb3JpZ2luPVwiMCAwXCIgY29vcmRzaXplPVwiJyt0aGlzLnBpeGVsV2lkdGgrXCIgXCIrdGhpcy5waXhlbEhlaWdodCsnXCInKycgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6Jyt0aGlzLnBpeGVsV2lkdGgrXCJweDtoZWlnaHQ9XCIrdGhpcy5waXhlbEhlaWdodCsncHg7XCI+PC92Omdyb3VwPic7dGhpcy5jYW52YXMuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlRW5kXCIsZ3JvdXBlbCk7dGhpcy5ncm91cD0kKHRoaXMuY2FudmFzKS5jaGlsZHJlbigpWzBdO3RoaXMucmVuZGVyZWQ9ZmFsc2U7dGhpcy5wcmVyZW5kZXI9XCJcIn0sX2RyYXdTaGFwZTpmdW5jdGlvbihzaGFwZWlkLHBhdGgsbGluZUNvbG9yLGZpbGxDb2xvcixsaW5lV2lkdGgpe3ZhciB2cGF0aD1bXSxpbml0aWFsLHN0cm9rZSxmaWxsLGNsb3NlZCx2ZWwscGxlbixpO2ZvcihpPTAscGxlbj1wYXRoLmxlbmd0aDtpPHBsZW47aSsrKXt2cGF0aFtpXT1cIlwiK3BhdGhbaV1bMF0rXCIsXCIrcGF0aFtpXVsxXX1pbml0aWFsPXZwYXRoLnNwbGljZSgwLDEpO2xpbmVXaWR0aD1saW5lV2lkdGg9PT11bmRlZmluZWQ/MTpsaW5lV2lkdGg7c3Ryb2tlPWxpbmVDb2xvcj09PXVuZGVmaW5lZD8nIHN0cm9rZWQ9XCJmYWxzZVwiICc6JyBzdHJva2VXZWlnaHQ9XCInK2xpbmVXaWR0aCsncHhcIiBzdHJva2VDb2xvcj1cIicrbGluZUNvbG9yKydcIiAnO2ZpbGw9ZmlsbENvbG9yPT09dW5kZWZpbmVkPycgZmlsbGVkPVwiZmFsc2VcIic6JyBmaWxsQ29sb3I9XCInK2ZpbGxDb2xvcisnXCIgZmlsbGVkPVwidHJ1ZVwiICc7Y2xvc2VkPXZwYXRoWzBdPT09dnBhdGhbdnBhdGgubGVuZ3RoLTFdP1wieCBcIjpcIlwiO3ZlbD0nPHY6c2hhcGUgY29vcmRvcmlnaW49XCIwIDBcIiBjb29yZHNpemU9XCInK3RoaXMucGl4ZWxXaWR0aCtcIiBcIit0aGlzLnBpeGVsSGVpZ2h0KydcIiAnKycgaWQ9XCJqcXNzaGFwZScrc2hhcGVpZCsnXCIgJytzdHJva2UrZmlsbCsnIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7bGVmdDowcHg7dG9wOjBweDtoZWlnaHQ6Jyt0aGlzLnBpeGVsSGVpZ2h0K1wicHg7d2lkdGg6XCIrdGhpcy5waXhlbFdpZHRoKydweDtwYWRkaW5nOjBweDttYXJnaW46MHB4O1wiICcrJyBwYXRoPVwibSAnK2luaXRpYWwrXCIgbCBcIit2cGF0aC5qb2luKFwiLCBcIikrXCIgXCIrY2xvc2VkKydlXCI+JytcIiA8L3Y6c2hhcGU+XCI7cmV0dXJuIHZlbH0sX2RyYXdDaXJjbGU6ZnVuY3Rpb24oc2hhcGVpZCx4LHkscmFkaXVzLGxpbmVDb2xvcixmaWxsQ29sb3IsbGluZVdpZHRoKXt2YXIgc3Ryb2tlLGZpbGwsdmVsO3gtPXJhZGl1czt5LT1yYWRpdXM7c3Ryb2tlPWxpbmVDb2xvcj09PXVuZGVmaW5lZD8nIHN0cm9rZWQ9XCJmYWxzZVwiICc6JyBzdHJva2VXZWlnaHQ9XCInK2xpbmVXaWR0aCsncHhcIiBzdHJva2VDb2xvcj1cIicrbGluZUNvbG9yKydcIiAnO2ZpbGw9ZmlsbENvbG9yPT09dW5kZWZpbmVkPycgZmlsbGVkPVwiZmFsc2VcIic6JyBmaWxsQ29sb3I9XCInK2ZpbGxDb2xvcisnXCIgZmlsbGVkPVwidHJ1ZVwiICc7dmVsPVwiPHY6b3ZhbCBcIisnIGlkPVwianFzc2hhcGUnK3NoYXBlaWQrJ1wiICcrc3Ryb2tlK2ZpbGwrJyBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO3RvcDonK3krXCJweDsgbGVmdDpcIit4K1wicHg7IHdpZHRoOlwiK3JhZGl1cyoyK1wicHg7IGhlaWdodDpcIityYWRpdXMqMisncHhcIj48L3Y6b3ZhbD4nO3JldHVybiB2ZWx9LF9kcmF3UGllU2xpY2U6ZnVuY3Rpb24oc2hhcGVpZCx4LHkscmFkaXVzLHN0YXJ0QW5nbGUsZW5kQW5nbGUsbGluZUNvbG9yLGZpbGxDb2xvcil7dmFyIHZwYXRoLHN0YXJ0eCxzdGFydHksZW5keCxlbmR5LHN0cm9rZSxmaWxsLHZlbDtpZihzdGFydEFuZ2xlPT09ZW5kQW5nbGUpe3JldHVyblwiXCJ9aWYoZW5kQW5nbGUtc3RhcnRBbmdsZT09PTIqTWF0aC5QSSl7c3RhcnRBbmdsZT0wO2VuZEFuZ2xlPTIqTWF0aC5QSX1zdGFydHg9eCtNYXRoLnJvdW5kKE1hdGguY29zKHN0YXJ0QW5nbGUpKnJhZGl1cyk7c3RhcnR5PXkrTWF0aC5yb3VuZChNYXRoLnNpbihzdGFydEFuZ2xlKSpyYWRpdXMpO2VuZHg9eCtNYXRoLnJvdW5kKE1hdGguY29zKGVuZEFuZ2xlKSpyYWRpdXMpO2VuZHk9eStNYXRoLnJvdW5kKE1hdGguc2luKGVuZEFuZ2xlKSpyYWRpdXMpO2lmKHN0YXJ0eD09PWVuZHgmJnN0YXJ0eT09PWVuZHkpe2lmKGVuZEFuZ2xlLXN0YXJ0QW5nbGU8TWF0aC5QSSl7cmV0dXJuXCJcIn1zdGFydHg9ZW5keD14K3JhZGl1cztzdGFydHk9ZW5keT15fWlmKHN0YXJ0eD09PWVuZHgmJnN0YXJ0eT09PWVuZHkmJmVuZEFuZ2xlLXN0YXJ0QW5nbGU8TWF0aC5QSSl7cmV0dXJuXCJcIn12cGF0aD1beC1yYWRpdXMseS1yYWRpdXMseCtyYWRpdXMseStyYWRpdXMsc3RhcnR4LHN0YXJ0eSxlbmR4LGVuZHldO3N0cm9rZT1saW5lQ29sb3I9PT11bmRlZmluZWQ/JyBzdHJva2VkPVwiZmFsc2VcIiAnOicgc3Ryb2tlV2VpZ2h0PVwiMXB4XCIgc3Ryb2tlQ29sb3I9XCInK2xpbmVDb2xvcisnXCIgJztmaWxsPWZpbGxDb2xvcj09PXVuZGVmaW5lZD8nIGZpbGxlZD1cImZhbHNlXCInOicgZmlsbENvbG9yPVwiJytmaWxsQ29sb3IrJ1wiIGZpbGxlZD1cInRydWVcIiAnO3ZlbD0nPHY6c2hhcGUgY29vcmRvcmlnaW49XCIwIDBcIiBjb29yZHNpemU9XCInK3RoaXMucGl4ZWxXaWR0aCtcIiBcIit0aGlzLnBpeGVsSGVpZ2h0KydcIiAnKycgaWQ9XCJqcXNzaGFwZScrc2hhcGVpZCsnXCIgJytzdHJva2UrZmlsbCsnIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7bGVmdDowcHg7dG9wOjBweDtoZWlnaHQ6Jyt0aGlzLnBpeGVsSGVpZ2h0K1wicHg7d2lkdGg6XCIrdGhpcy5waXhlbFdpZHRoKydweDtwYWRkaW5nOjBweDttYXJnaW46MHB4O1wiICcrJyBwYXRoPVwibSAnK3grXCIsXCIreStcIiB3YSBcIit2cGF0aC5qb2luKFwiLCBcIikrJyB4IGVcIj4nK1wiIDwvdjpzaGFwZT5cIjtyZXR1cm4gdmVsfSxfZHJhd1JlY3Q6ZnVuY3Rpb24oc2hhcGVpZCx4LHksd2lkdGgsaGVpZ2h0LGxpbmVDb2xvcixmaWxsQ29sb3Ipe3JldHVybiB0aGlzLl9kcmF3U2hhcGUoc2hhcGVpZCxbW3gseV0sW3gseStoZWlnaHRdLFt4K3dpZHRoLHkraGVpZ2h0XSxbeCt3aWR0aCx5XSxbeCx5XV0sbGluZUNvbG9yLGZpbGxDb2xvcil9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5ncm91cC5pbm5lckhUTUw9XCJcIn0sYXBwZW5kU2hhcGU6ZnVuY3Rpb24oc2hhcGUpe3ZhciB2ZWw9dGhpc1tcIl9kcmF3XCIrc2hhcGUudHlwZV0uYXBwbHkodGhpcyxzaGFwZS5hcmdzKTtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLmdyb3VwLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZUVuZFwiLHZlbCl9ZWxzZXt0aGlzLnByZXJlbmRlcis9dmVsfXRoaXMubGFzdFNoYXBlSWQ9c2hhcGUuaWQ7cmV0dXJuIHNoYXBlLmlkfSxyZXBsYWNlV2l0aFNoYXBlOmZ1bmN0aW9uKHNoYXBlaWQsc2hhcGUpe3ZhciBleGlzdGluZz0kKFwiI2pxc3NoYXBlXCIrc2hhcGVpZCksdmVsPXRoaXNbXCJfZHJhd1wiK3NoYXBlLnR5cGVdLmFwcGx5KHRoaXMsc2hhcGUuYXJncyk7ZXhpc3RpbmdbMF0ub3V0ZXJIVE1MPXZlbH0scmVwbGFjZVdpdGhTaGFwZXM6ZnVuY3Rpb24oc2hhcGVpZHMsc2hhcGVzKXt2YXIgZXhpc3Rpbmc9JChcIiNqcXNzaGFwZVwiK3NoYXBlaWRzWzBdKSxyZXBsYWNlPVwiXCIsc2xlbj1zaGFwZXMubGVuZ3RoLGk7Zm9yKGk9MDtpPHNsZW47aSsrKXtyZXBsYWNlKz10aGlzW1wiX2RyYXdcIitzaGFwZXNbaV0udHlwZV0uYXBwbHkodGhpcyxzaGFwZXNbaV0uYXJncyl9ZXhpc3RpbmdbMF0ub3V0ZXJIVE1MPXJlcGxhY2U7Zm9yKGk9MTtpPHNoYXBlaWRzLmxlbmd0aDtpKyspeyQoXCIjanFzc2hhcGVcIitzaGFwZWlkc1tpXSkucmVtb3ZlKCl9fSxpbnNlcnRBZnRlclNoYXBlOmZ1bmN0aW9uKHNoYXBlaWQsc2hhcGUpe3ZhciBleGlzdGluZz0kKFwiI2pxc3NoYXBlXCIrc2hhcGVpZCksdmVsPXRoaXNbXCJfZHJhd1wiK3NoYXBlLnR5cGVdLmFwcGx5KHRoaXMsc2hhcGUuYXJncyk7ZXhpc3RpbmdbMF0uaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJFbmRcIix2ZWwpfSxyZW1vdmVTaGFwZUlkOmZ1bmN0aW9uKHNoYXBlaWQpe3ZhciBleGlzdGluZz0kKFwiI2pxc3NoYXBlXCIrc2hhcGVpZCk7dGhpcy5ncm91cC5yZW1vdmVDaGlsZChleGlzdGluZ1swXSl9LGdldFNoYXBlQXQ6ZnVuY3Rpb24oZWwseCx5KXt2YXIgc2hhcGVpZD1lbC5pZC5zdWJzdHIoOCk7cmV0dXJuIHNoYXBlaWR9LHJlbmRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLnJlbmRlcmVkKXt0aGlzLmdyb3VwLmlubmVySFRNTD10aGlzLnByZXJlbmRlcjt0aGlzLnJlbmRlcmVkPXRydWV9fX0pfSl9KShkb2N1bWVudCxNYXRoKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5LXNwYXJrbGluZS9kaXN0L2pxdWVyeS5zcGFya2xpbmUubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n"); +eval("var __WEBPACK_AMD_DEFINE_RESULT__;;(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (true) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn FastClick;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzPzk2ODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQixZQUFZLE9BQU8sWUFBWTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQix5Q0FBeUM7QUFDL0Q7OztBQUdBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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RUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVksT0FBTyxZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQUE7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiI1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIEBwcmVzZXJ2ZSBGYXN0Q2xpY2s6IHBvbHlmaWxsIHRvIHJlbW92ZSBjbGljayBkZWxheXMgb24gYnJvd3NlcnMgd2l0aCB0b3VjaCBVSXMuXG5cdCAqXG5cdCAqIEBjb2RpbmdzdGFuZGFyZCBmdGxhYnMtanN2MlxuXHQgKiBAY29weXJpZ2h0IFRoZSBGaW5hbmNpYWwgVGltZXMgTGltaXRlZCBbQWxsIFJpZ2h0cyBSZXNlcnZlZF1cblx0ICogQGxpY2Vuc2UgTUlUIExpY2Vuc2UgKHNlZSBMSUNFTlNFLnR4dClcblx0ICovXG5cblx0Lypqc2xpbnQgYnJvd3Nlcjp0cnVlLCBub2RlOnRydWUqL1xuXHQvKmdsb2JhbCBkZWZpbmUsIEV2ZW50LCBOb2RlKi9cblxuXG5cdC8qKlxuXHQgKiBJbnN0YW50aWF0ZSBmYXN0LWNsaWNraW5nIGxpc3RlbmVycyBvbiB0aGUgc3BlY2lmaWVkIGxheWVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtFbGVtZW50fSBsYXllciBUaGUgbGF5ZXIgdG8gbGlzdGVuIG9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzXG5cdCAqL1xuXHRmdW5jdGlvbiBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpIHtcblx0XHR2YXIgb2xkT25DbGljaztcblxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciBhIGNsaWNrIGlzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgYm9vbGVhblxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXG5cblx0XHQvKipcblx0XHQgKiBUaW1lc3RhbXAgZm9yIHdoZW4gY2xpY2sgdHJhY2tpbmcgc3RhcnRlZC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGVsZW1lbnQgYmVpbmcgdHJhY2tlZCBmb3IgYSBjbGljay5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIEV2ZW50VGFyZ2V0XG5cdFx0ICovXG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblxuXG5cdFx0LyoqXG5cdFx0ICogWC1jb29yZGluYXRlIG9mIHRvdWNoIHN0YXJ0IGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50b3VjaFN0YXJ0WCA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFktY29vcmRpbmF0ZSBvZiB0b3VjaCBzdGFydCBldmVudC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudG91Y2hTdGFydFkgPSAwO1xuXG5cblx0XHQvKipcblx0XHQgKiBJRCBvZiB0aGUgbGFzdCB0b3VjaCwgcmV0cmlldmVkIGZyb20gVG91Y2guaWRlbnRpZmllci5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMubGFzdFRvdWNoSWRlbnRpZmllciA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRvdWNobW92ZSBib3VuZGFyeSwgYmV5b25kIHdoaWNoIGEgY2xpY2sgd2lsbCBiZSBjYW5jZWxsZWQuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRvdWNoQm91bmRhcnkgPSBvcHRpb25zLnRvdWNoQm91bmRhcnkgfHwgMTA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBGYXN0Q2xpY2sgbGF5ZXIuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBFbGVtZW50XG5cdFx0ICovXG5cdFx0dGhpcy5sYXllciA9IGxheWVyO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdGltZSBiZXR3ZWVuIHRhcCh0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCkgZXZlbnRzXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRhcERlbGF5ID0gb3B0aW9ucy50YXBEZWxheSB8fCAyMDA7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgbWF4aW11bSB0aW1lIGZvciBhIHRhcFxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50YXBUaW1lb3V0ID0gb3B0aW9ucy50YXBUaW1lb3V0IHx8IDcwMDtcblxuXHRcdGlmIChGYXN0Q2xpY2subm90TmVlZGVkKGxheWVyKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIEFuZHJvaWQgZG9uJ3QgaGF2ZSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuXHRcdGZ1bmN0aW9uIGJpbmQobWV0aG9kLCBjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTsgfTtcblx0XHR9XG5cblxuXHRcdHZhciBtZXRob2RzID0gWydvbk1vdXNlJywgJ29uQ2xpY2snLCAnb25Ub3VjaFN0YXJ0JywgJ29uVG91Y2hNb3ZlJywgJ29uVG91Y2hFbmQnLCAnb25Ub3VjaENhbmNlbCddO1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcztcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb250ZXh0W21ldGhvZHNbaV1dID0gYmluZChjb250ZXh0W21ldGhvZHNbaV1dLCBjb250ZXh0KTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnMgYXMgcmVxdWlyZWRcblx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdH1cblxuXHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrLCB0cnVlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG5cdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbCwgZmFsc2UpO1xuXG5cdFx0Ly8gSGFjayBpcyByZXF1aXJlZCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IEV2ZW50I3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoZS5nLiBBbmRyb2lkIDIpXG5cdFx0Ly8gd2hpY2ggaXMgaG93IEZhc3RDbGljayBub3JtYWxseSBzdG9wcyBjbGljayBldmVudHMgYnViYmxpbmcgdG8gY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIEZhc3RDbGlja1xuXHRcdC8vIGxheWVyIHdoZW4gdGhleSBhcmUgY2FuY2VsbGVkLlxuXHRcdGlmICghRXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBybXYgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdHJtdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCBjYWxsYmFjaywgY2FwdHVyZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm12LmNhbGwobGF5ZXIsIHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBhZHYgPSBOb2RlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdGFkdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCAoY2FsbGJhY2suaGlqYWNrZWQgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0aWYgKCFldmVudC5wcm9wYWdhdGlvblN0b3BwZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soZXZlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLCBjYXB0dXJlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZHYuY2FsbChsYXllciwgdHlwZSwgY2FsbGJhY2ssIGNhcHR1cmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIElmIGEgaGFuZGxlciBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSBlbGVtZW50J3Mgb25jbGljayBhdHRyaWJ1dGUsIGl0IHdpbGwgYmUgZmlyZWQgYmVmb3JlXG5cdFx0Ly8gRmFzdENsaWNrJ3Mgb25DbGljayBoYW5kbGVyLiBGaXggdGhpcyBieSBwdWxsaW5nIG91dCB0aGUgdXNlci1kZWZpbmVkIGhhbmRsZXIgZnVuY3Rpb24gYW5kXG5cdFx0Ly8gYWRkaW5nIGl0IGFzIGxpc3RlbmVyLlxuXHRcdGlmICh0eXBlb2YgbGF5ZXIub25jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuXG5cdFx0XHQvLyBBbmRyb2lkIGJyb3dzZXIgb24gYXQgbGVhc3QgMy4yIHJlcXVpcmVzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW4gbGF5ZXIub25jbGlja1xuXHRcdFx0Ly8gLSB0aGUgb2xkIG9uZSB3b24ndCB3b3JrIGlmIHBhc3NlZCB0byBhZGRFdmVudExpc3RlbmVyIGRpcmVjdGx5LlxuXHRcdFx0b2xkT25DbGljayA9IGxheWVyLm9uY2xpY2s7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdG9sZE9uQ2xpY2soZXZlbnQpO1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdFx0bGF5ZXIub25jbGljayA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogV2luZG93cyBQaG9uZSA4LjEgZmFrZXMgdXNlciBhZ2VudCBzdHJpbmcgdG8gbG9vayBsaWtlIEFuZHJvaWQgYW5kIGlQaG9uZS5cblx0KlxuXHQqIEB0eXBlIGJvb2xlYW5cblx0Ki9cblx0dmFyIGRldmljZUlzV2luZG93c1Bob25lID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiV2luZG93cyBQaG9uZVwiKSA+PSAwO1xuXG5cdC8qKlxuXHQgKiBBbmRyb2lkIHJlcXVpcmVzIGV4Y2VwdGlvbnMuXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0FuZHJvaWQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0FuZHJvaWQnKSA+IDAgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyByZXF1aXJlcyBleGNlcHRpb25zLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1MgPSAvaVAoYWR8aG9uZXxvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA0IHJlcXVpcmVzIGFuIGV4Y2VwdGlvbiBmb3Igc2VsZWN0IGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1M0ID0gZGV2aWNlSXNJT1MgJiYgKC9PUyA0X1xcZChfXFxkKT8vKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA2LjAtNy4qIHJlcXVpcmVzIHRoZSB0YXJnZXQgZWxlbWVudCB0byBiZSBtYW51YWxseSBkZXJpdmVkXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0lPU1dpdGhCYWRUYXJnZXQgPSBkZXZpY2VJc0lPUyAmJiAoL09TIFs2LTddX1xcZC8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cblx0LyoqXG5cdCAqIEJsYWNrQmVycnkgcmVxdWlyZXMgZXhjZXB0aW9ucy5cblx0ICpcblx0ICogQHR5cGUgYm9vbGVhblxuXHQgKi9cblx0dmFyIGRldmljZUlzQmxhY2tCZXJyeTEwID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdCQjEwJykgPiAwO1xuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIGVsZW1lbnQgcmVxdWlyZXMgYSBuYXRpdmUgY2xpY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IG5lZWRzIGEgbmF0aXZlIGNsaWNrXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzQ2xpY2sgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cblx0XHQvLyBEb24ndCBzZW5kIGEgc3ludGhldGljIGNsaWNrIHRvIGRpc2FibGVkIGlucHV0cyAoaXNzdWUgIzYyKVxuXHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRjYXNlICd0ZXh0YXJlYSc6XG5cdFx0XHRpZiAodGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdpbnB1dCc6XG5cblx0XHRcdC8vIEZpbGUgaW5wdXRzIG5lZWQgcmVhbCBjbGlja3Mgb24gaU9TIDYgZHVlIHRvIGEgYnJvd3NlciBidWcgKGlzc3VlICM2OClcblx0XHRcdGlmICgoZGV2aWNlSXNJT1MgJiYgdGFyZ2V0LnR5cGUgPT09ICdmaWxlJykgfHwgdGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdsYWJlbCc6XG5cdFx0Y2FzZSAnaWZyYW1lJzogLy8gaU9TOCBob21lc2NyZWVuIGFwcHMgY2FuIHByZXZlbnQgZXZlbnRzIGJ1YmJsaW5nIGludG8gZnJhbWVzXG5cdFx0Y2FzZSAndmlkZW8nOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICgvXFxibmVlZHNjbGlja1xcYi8pLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSk7XG5cdH07XG5cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBjbGljayBpbnRvIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBuYXRpdmUgY2xpY2suXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzRm9jdXMgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAndGV4dGFyZWEnOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRcdHJldHVybiAhZGV2aWNlSXNBbmRyb2lkO1xuXHRcdGNhc2UgJ2lucHV0Jzpcblx0XHRcdHN3aXRjaCAodGFyZ2V0LnR5cGUpIHtcblx0XHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0XHRjYXNlICdjaGVja2JveCc6XG5cdFx0XHRjYXNlICdmaWxlJzpcblx0XHRcdGNhc2UgJ2ltYWdlJzpcblx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTm8gcG9pbnQgaW4gYXR0ZW1wdGluZyB0byBmb2N1cyBkaXNhYmxlZCBpbnB1dHNcblx0XHRcdHJldHVybiAhdGFyZ2V0LmRpc2FibGVkICYmICF0YXJnZXQucmVhZE9ubHk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoL1xcYm5lZWRzZm9jdXNcXGIvKS50ZXN0KHRhcmdldC5jbGFzc05hbWUpO1xuXHRcdH1cblx0fTtcblxuXG5cdC8qKlxuXHQgKiBTZW5kIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEVsZW1lbnR9IHRhcmdldEVsZW1lbnRcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuc2VuZENsaWNrID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpIHtcblx0XHR2YXIgY2xpY2tFdmVudCwgdG91Y2g7XG5cblx0XHQvLyBPbiBzb21lIEFuZHJvaWQgZGV2aWNlcyBhY3RpdmVFbGVtZW50IG5lZWRzIHRvIGJlIGJsdXJyZWQgb3RoZXJ3aXNlIHRoZSBzeW50aGV0aWMgY2xpY2sgd2lsbCBoYXZlIG5vIGVmZmVjdCAoIzI0KVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRhcmdldEVsZW1lbnQpIHtcblx0XHRcdGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdH1cblxuXHRcdHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG5cblx0XHQvLyBTeW50aGVzaXNlIGEgY2xpY2sgZXZlbnQsIHdpdGggYW4gZXh0cmEgYXR0cmlidXRlIHNvIGl0IGNhbiBiZSB0cmFja2VkXG5cdFx0Y2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuXHRcdGNsaWNrRXZlbnQuaW5pdE1vdXNlRXZlbnQodGhpcy5kZXRlcm1pbmVFdmVudFR5cGUodGFyZ2V0RWxlbWVudCksIHRydWUsIHRydWUsIHdpbmRvdywgMSwgdG91Y2guc2NyZWVuWCwgdG91Y2guc2NyZWVuWSwgdG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXHRcdGNsaWNrRXZlbnQuZm9yd2FyZGVkVG91Y2hFdmVudCA9IHRydWU7XG5cdFx0dGFyZ2V0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGNsaWNrRXZlbnQpO1xuXHR9O1xuXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZGV0ZXJtaW5lRXZlbnRUeXBlID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXG5cdFx0Ly9Jc3N1ZSAjMTU5OiBBbmRyb2lkIENocm9tZSBTZWxlY3QgQm94IGRvZXMgbm90IG9wZW4gd2l0aCBhIHN5bnRoZXRpYyBjbGljayBldmVudFxuXHRcdGlmIChkZXZpY2VJc0FuZHJvaWQgJiYgdGFyZ2V0RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ21vdXNlZG93bic7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdjbGljayc7XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXHRcdHZhciBsZW5ndGg7XG5cblx0XHQvLyBJc3N1ZSAjMTYwOiBvbiBpT1MgNywgc29tZSBpbnB1dCBlbGVtZW50cyAoZS5nLiBkYXRlIGRhdGV0aW1lIG1vbnRoKSB0aHJvdyBhIHZhZ3VlIFR5cGVFcnJvciBvbiBzZXRTZWxlY3Rpb25SYW5nZS4gVGhlc2UgZWxlbWVudHMgZG9uJ3QgaGF2ZSBhbiBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCBwcm9wZXJ0aWVzLCBidXQgdW5mb3J0dW5hdGVseSB0aGF0IGNhbid0IGJlIHVzZWQgZm9yIGRldGVjdGlvbiBiZWNhdXNlIGFjY2Vzc2luZyB0aGUgcHJvcGVydGllcyBhbHNvIHRocm93cyBhIFR5cGVFcnJvci4gSnVzdCBjaGVjayB0aGUgdHlwZSBpbnN0ZWFkLiBGaWxlZCBhcyBBcHBsZSBidWcgIzE1MTIyNzI0LlxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiB0YXJnZXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlICYmIHRhcmdldEVsZW1lbnQudHlwZS5pbmRleE9mKCdkYXRlJykgIT09IDAgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAndGltZScgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAnbW9udGgnKSB7XG5cdFx0XHRsZW5ndGggPSB0YXJnZXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblx0XHRcdHRhcmdldEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2YgYSBzY3JvbGxhYmxlIGxheWVyIGFuZCBpZiBzbywgc2V0IGEgZmxhZyBvbiBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLnVwZGF0ZVNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uKHRhcmdldEVsZW1lbnQpIHtcblx0XHR2YXIgc2Nyb2xsUGFyZW50LCBwYXJlbnRFbGVtZW50O1xuXG5cdFx0c2Nyb2xsUGFyZW50ID0gdGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQ7XG5cblx0XHQvLyBBdHRlbXB0IHRvIGRpc2NvdmVyIHdoZXRoZXIgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxhYmxlIGxheWVyLiBSZS1jaGVjayBpZiB0aGVcblx0XHQvLyB0YXJnZXQgZWxlbWVudCB3YXMgbW92ZWQgdG8gYW5vdGhlciBwYXJlbnQuXG5cdFx0aWYgKCFzY3JvbGxQYXJlbnQgfHwgIXNjcm9sbFBhcmVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0cGFyZW50RWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGlmIChwYXJlbnRFbGVtZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KSB7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50ID0gcGFyZW50RWxlbWVudDtcblx0XHRcdFx0XHR0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudCA9IHBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0fSB3aGlsZSAocGFyZW50RWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWx3YXlzIHVwZGF0ZSB0aGUgc2Nyb2xsIHRvcCB0cmFja2VyIGlmIHBvc3NpYmxlLlxuXHRcdGlmIChzY3JvbGxQYXJlbnQpIHtcblx0XHRcdHNjcm9sbFBhcmVudC5mYXN0Q2xpY2tMYXN0U2Nyb2xsVG9wID0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcDtcblx0XHR9XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0RWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxFdmVudFRhcmdldH1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldCA9IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0KSB7XG5cblx0XHQvLyBPbiBzb21lIG9sZGVyIGJyb3dzZXJzIChub3RhYmx5IFNhZmFyaSBvbiBpT1MgNC4xIC0gc2VlIGlzc3VlICM1NikgdGhlIGV2ZW50IHRhcmdldCBtYXkgYmUgYSB0ZXh0IG5vZGUuXG5cdFx0aWYgKGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuXHRcdFx0cmV0dXJuIGV2ZW50VGFyZ2V0LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50VGFyZ2V0O1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIHRvdWNoIHN0YXJ0LCByZWNvcmQgdGhlIHBvc2l0aW9uIGFuZCBzY3JvbGwgb2Zmc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdGFyZ2V0RWxlbWVudCwgdG91Y2gsIHNlbGVjdGlvbjtcblxuXHRcdC8vIElnbm9yZSBtdWx0aXBsZSB0b3VjaGVzLCBvdGhlcndpc2UgcGluY2gtdG8tem9vbSBpcyBwcmV2ZW50ZWQgaWYgYm90aCBmaW5nZXJzIGFyZSBvbiB0aGUgRmFzdENsaWNrIGVsZW1lbnQgKGlzc3VlICMxMTEpLlxuXHRcdGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHRhcmdldEVsZW1lbnQgPSB0aGlzLmdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnRUYXJnZXQoZXZlbnQudGFyZ2V0KTtcblx0XHR0b3VjaCA9IGV2ZW50LnRhcmdldFRvdWNoZXNbMF07XG5cblx0XHRpZiAoZGV2aWNlSXNJT1MpIHtcblxuXHRcdFx0Ly8gT25seSB0cnVzdGVkIGV2ZW50cyB3aWxsIGRlc2VsZWN0IHRleHQgb24gaU9TIChpc3N1ZSAjNDkpXG5cdFx0XHRzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFkZXZpY2VJc0lPUzQpIHtcblxuXHRcdFx0XHQvLyBXZWlyZCB0aGluZ3MgaGFwcGVuIG9uIGlPUyB3aGVuIGFuIGFsZXJ0IG9yIGNvbmZpcm0gZGlhbG9nIGlzIG9wZW5lZCBmcm9tIGEgY2xpY2sgZXZlbnQgY2FsbGJhY2sgKGlzc3VlICMyMyk6XG5cdFx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgbmV4dCB0YXBzIGFueXdoZXJlIGVsc2Ugb24gdGhlIHBhZ2UsIG5ldyB0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCBldmVudHMgYXJlIGRpc3BhdGNoZWRcblx0XHRcdFx0Ly8gd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIHRoZSB0b3VjaCBldmVudCB0aGF0IHByZXZpb3VzbHkgdHJpZ2dlcmVkIHRoZSBjbGljayB0aGF0IHRyaWdnZXJlZCB0aGUgYWxlcnQuXG5cdFx0XHRcdC8vIFNhZGx5LCB0aGVyZSBpcyBhbiBpc3N1ZSBvbiBpT1MgNCB0aGF0IGNhdXNlcyBzb21lIG5vcm1hbCB0b3VjaCBldmVudHMgdG8gaGF2ZSB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIGFuXG5cdFx0XHRcdC8vIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdG91Y2ggZXZlbnQgKGlzc3VlICM1MiksIHNvIHRoaXMgZml4IGlzIHVuYXZhaWxhYmxlIG9uIHRoYXQgcGxhdGZvcm0uXG5cdFx0XHRcdC8vIElzc3VlIDEyMDogdG91Y2guaWRlbnRpZmllciBpcyAwIHdoZW4gQ2hyb21lIGRldiB0b29scyAnRW11bGF0ZSB0b3VjaCBldmVudHMnIGlzIHNldCB3aXRoIGFuIGlPUyBkZXZpY2UgVUEgc3RyaW5nLFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgYWxsIHRvdWNoIGV2ZW50cyB0byBiZSBpZ25vcmVkLiBBcyB0aGlzIGJsb2NrIG9ubHkgYXBwbGllcyB0byBpT1MsIGFuZCBpT1MgaWRlbnRpZmllcnMgYXJlIGFsd2F5cyBsb25nLFxuXHRcdFx0XHQvLyByYW5kb20gaW50ZWdlcnMsIGl0J3Mgc2FmZSB0byB0byBjb250aW51ZSBpZiB0aGUgaWRlbnRpZmllciBpcyAwIGhlcmUuXG5cdFx0XHRcdGlmICh0b3VjaC5pZGVudGlmaWVyICYmIHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMubGFzdFRvdWNoSWRlbnRpZmllcikge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5sYXN0VG91Y2hJZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtcblxuXHRcdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBjaGlsZCBvZiBhIHNjcm9sbGFibGUgbGF5ZXIgKHVzaW5nIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaCkgYW5kOlxuXHRcdFx0XHQvLyAxKSB0aGUgdXNlciBkb2VzIGEgZmxpbmcgc2Nyb2xsIG9uIHRoZSBzY3JvbGxhYmxlIGxheWVyXG5cdFx0XHRcdC8vIDIpIHRoZSB1c2VyIHN0b3BzIHRoZSBmbGluZyBzY3JvbGwgd2l0aCBhbm90aGVyIHRhcFxuXHRcdFx0XHQvLyB0aGVuIHRoZSBldmVudC50YXJnZXQgb2YgdGhlIGxhc3QgJ3RvdWNoZW5kJyBldmVudCB3aWxsIGJlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHVuZGVyIHRoZSB1c2VyJ3MgZmluZ2VyXG5cdFx0XHRcdC8vIHdoZW4gdGhlIGZsaW5nIHNjcm9sbCB3YXMgc3RhcnRlZCwgY2F1c2luZyBGYXN0Q2xpY2sgdG8gc2VuZCBhIGNsaWNrIGV2ZW50IHRvIHRoYXQgbGF5ZXIgLSB1bmxlc3MgYSBjaGVja1xuXHRcdFx0XHQvLyBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IGEgcGFyZW50IGxheWVyIHdhcyBub3Qgc2Nyb2xsZWQgYmVmb3JlIHNlbmRpbmcgYSBzeW50aGV0aWMgY2xpY2sgKGlzc3VlICM0MikuXG5cdFx0XHRcdHRoaXMudXBkYXRlU2Nyb2xsUGFyZW50KHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IHRydWU7XG5cdFx0dGhpcy50cmFja2luZ0NsaWNrU3RhcnQgPSBldmVudC50aW1lU3RhbXA7XG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcblxuXHRcdHRoaXMudG91Y2hTdGFydFggPSB0b3VjaC5wYWdlWDtcblx0XHR0aGlzLnRvdWNoU3RhcnRZID0gdG91Y2gucGFnZVk7XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblxuXHQvKipcblx0ICogQmFzZWQgb24gYSB0b3VjaG1vdmUgZXZlbnQgb2JqZWN0LCBjaGVjayB3aGV0aGVyIHRoZSB0b3VjaCBoYXMgbW92ZWQgcGFzdCBhIGJvdW5kYXJ5IHNpbmNlIGl0IHN0YXJ0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS50b3VjaEhhc01vdmVkID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSwgYm91bmRhcnkgPSB0aGlzLnRvdWNoQm91bmRhcnk7XG5cblx0XHRpZiAoTWF0aC5hYnModG91Y2gucGFnZVggLSB0aGlzLnRvdWNoU3RhcnRYKSA+IGJvdW5kYXJ5IHx8IE1hdGguYWJzKHRvdWNoLnBhZ2VZIC0gdGhpcy50b3VjaFN0YXJ0WSkgPiBib3VuZGFyeSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgbGFzdCBwb3NpdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMudHJhY2tpbmdDbGljaykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHRvdWNoIGhhcyBtb3ZlZCwgY2FuY2VsIHRoZSBjbGljayB0cmFja2luZ1xuXHRcdGlmICh0aGlzLnRhcmdldEVsZW1lbnQgIT09IHRoaXMuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldChldmVudC50YXJnZXQpIHx8IHRoaXMudG91Y2hIYXNNb3ZlZChldmVudCkpIHtcblx0XHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBBdHRlbXB0IHRvIGZpbmQgdGhlIGxhYmVsbGVkIGNvbnRyb2wgZm9yIHRoZSBnaXZlbiBsYWJlbCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEhUTUxMYWJlbEVsZW1lbnR9IGxhYmVsRWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS5maW5kQ29udHJvbCA9IGZ1bmN0aW9uKGxhYmVsRWxlbWVudCkge1xuXG5cdFx0Ly8gRmFzdCBwYXRoIGZvciBuZXdlciBicm93c2VycyBzdXBwb3J0aW5nIHRoZSBIVE1MNSBjb250cm9sIGF0dHJpYnV0ZVxuXHRcdGlmIChsYWJlbEVsZW1lbnQuY29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gbGFiZWxFbGVtZW50LmNvbnRyb2w7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGJyb3dzZXJzIHVuZGVyIHRlc3QgdGhhdCBzdXBwb3J0IHRvdWNoIGV2ZW50cyBhbHNvIHN1cHBvcnQgdGhlIEhUTUw1IGh0bWxGb3IgYXR0cmlidXRlXG5cdFx0aWYgKGxhYmVsRWxlbWVudC5odG1sRm9yKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGFiZWxFbGVtZW50Lmh0bWxGb3IpO1xuXHRcdH1cblxuXHRcdC8vIElmIG5vIGZvciBhdHRyaWJ1dGUgZXhpc3RzLCBhdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBsYWJlbGxhYmxlIGRlc2NlbmRhbnQgZWxlbWVudFxuXHRcdC8vIHRoZSBsaXN0IG9mIHdoaWNoIGlzIGRlZmluZWQgaGVyZTogaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCNjYXRlZ29yeS1sYWJlbFxuXHRcdHJldHVybiBsYWJlbEVsZW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLCBpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSksIGtleWdlbiwgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHNlbGVjdCwgdGV4dGFyZWEnKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBPbiB0b3VjaCBlbmQsIGRldGVybWluZSB3aGV0aGVyIHRvIHNlbmQgYSBjbGljayBldmVudCBhdCBvbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0dmFyIGZvckVsZW1lbnQsIHRyYWNraW5nQ2xpY2tTdGFydCwgdGFyZ2V0VGFnTmFtZSwgc2Nyb2xsUGFyZW50LCB0b3VjaCwgdGFyZ2V0RWxlbWVudCA9IHRoaXMudGFyZ2V0RWxlbWVudDtcblxuXHRcdGlmICghdGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdHRoaXMuY2FuY2VsTmV4dENsaWNrID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy50cmFja2luZ0NsaWNrU3RhcnQpID4gdGhpcy50YXBUaW1lb3V0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBSZXNldCB0byBwcmV2ZW50IHdyb25nIGNsaWNrIGNhbmNlbCBvbiBpbnB1dCAoaXNzdWUgIzE1NikuXG5cdFx0dGhpcy5jYW5jZWxOZXh0Q2xpY2sgPSBmYWxzZTtcblxuXHRcdHRoaXMubGFzdENsaWNrVGltZSA9IGV2ZW50LnRpbWVTdGFtcDtcblxuXHRcdHRyYWNraW5nQ2xpY2tTdGFydCA9IHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0O1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXHRcdC8vIE9uIHNvbWUgaU9TIGRldmljZXMsIHRoZSB0YXJnZXRFbGVtZW50IHN1cHBsaWVkIHdpdGggdGhlIGV2ZW50IGlzIGludmFsaWQgaWYgdGhlIGxheWVyXG5cdFx0Ly8gaXMgcGVyZm9ybWluZyBhIHRyYW5zaXRpb24gb3Igc2Nyb2xsLCBhbmQgaGFzIHRvIGJlIHJlLWRldGVjdGVkIG1hbnVhbGx5LiBOb3RlIHRoYXRcblx0XHQvLyBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHksIGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogdGhlIGV2ZW50IHRhcmdldCBpcyBjaGVja2VkIVxuXHRcdC8vIFNlZSBpc3N1ZSAjNTc7IGFsc28gZmlsZWQgYXMgcmRhcjovLzEzMDQ4NTg5IC5cblx0XHRpZiAoZGV2aWNlSXNJT1NXaXRoQmFkVGFyZ2V0KSB7XG5cdFx0XHR0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuXG5cdFx0XHQvLyBJbiBjZXJ0YWluIGNhc2VzIGFyZ3VtZW50cyBvZiBlbGVtZW50RnJvbVBvaW50IGNhbiBiZSBuZWdhdGl2ZSwgc28gcHJldmVudCBzZXR0aW5nIHRhcmdldEVsZW1lbnQgdG8gbnVsbFxuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2gucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIHRvdWNoLnBhZ2VZIC0gd2luZG93LnBhZ2VZT2Zmc2V0KSB8fCB0YXJnZXRFbGVtZW50O1xuXHRcdFx0dGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQgPSB0aGlzLnRhcmdldEVsZW1lbnQuZmFzdENsaWNrU2Nyb2xsUGFyZW50O1xuXHRcdH1cblxuXHRcdHRhcmdldFRhZ05hbWUgPSB0YXJnZXRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ2xhYmVsJykge1xuXHRcdFx0Zm9yRWxlbWVudCA9IHRoaXMuZmluZENvbnRyb2wodGFyZ2V0RWxlbWVudCk7XG5cdFx0XHRpZiAoZm9yRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0RWxlbWVudCA9IGZvckVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLm5lZWRzRm9jdXModGFyZ2V0RWxlbWVudCkpIHtcblxuXHRcdFx0Ly8gQ2FzZSAxOiBJZiB0aGUgdG91Y2ggc3RhcnRlZCBhIHdoaWxlIGFnbyAoYmVzdCBndWVzcyBpcyAxMDBtcyBiYXNlZCBvbiB0ZXN0cyBmb3IgaXNzdWUgIzM2KSB0aGVuIGZvY3VzIHdpbGwgYmUgdHJpZ2dlcmVkIGFueXdheS4gUmV0dXJuIGVhcmx5IGFuZCB1bnNldCB0aGUgdGFyZ2V0IGVsZW1lbnQgcmVmZXJlbmNlIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgY2xpY2sgd2lsbCBiZSBhbGxvd2VkIHRocm91Z2guXG5cdFx0XHQvLyBDYXNlIDI6IFdpdGhvdXQgdGhpcyBleGNlcHRpb24gZm9yIGlucHV0IGVsZW1lbnRzIHRhcHBlZCB3aGVuIHRoZSBkb2N1bWVudCBpcyBjb250YWluZWQgaW4gYW4gaWZyYW1lLCB0aGVuIGFueSBpbnB1dHRlZCB0ZXh0IHdvbid0IGJlIHZpc2libGUgZXZlbiB0aG91Z2ggdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyB1cGRhdGVkIGFzIHRoZSB1c2VyIHR5cGVzIChpc3N1ZSAjMzcpLlxuXHRcdFx0aWYgKChldmVudC50aW1lU3RhbXAgLSB0cmFja2luZ0NsaWNrU3RhcnQpID4gMTAwIHx8IChkZXZpY2VJc0lPUyAmJiB3aW5kb3cudG9wICE9PSB3aW5kb3cgJiYgdGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JykpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5zZW5kQ2xpY2sodGFyZ2V0RWxlbWVudCwgZXZlbnQpO1xuXG5cdFx0XHQvLyBTZWxlY3QgZWxlbWVudHMgbmVlZCB0aGUgZXZlbnQgdG8gZ28gdGhyb3VnaCBvbiBpT1MgNCwgb3RoZXJ3aXNlIHRoZSBzZWxlY3RvciBtZW51IHdvbid0IG9wZW4uXG5cdFx0XHQvLyBBbHNvIHRoaXMgYnJlYWtzIG9wZW5pbmcgc2VsZWN0cyB3aGVuIFZvaWNlT3ZlciBpcyBhY3RpdmUgb24gaU9TNiwgaU9TNyAoYW5kIHBvc3NpYmx5IG90aGVycylcblx0XHRcdGlmICghZGV2aWNlSXNJT1MgfHwgdGFyZ2V0VGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiAhZGV2aWNlSXNJT1M0KSB7XG5cblx0XHRcdC8vIERvbid0IHNlbmQgYSBzeW50aGV0aWMgY2xpY2sgZXZlbnQgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBwYXJlbnQgbGF5ZXIgdGhhdCB3YXMgc2Nyb2xsZWRcblx0XHRcdC8vIGFuZCB0aGlzIHRhcCBpcyBiZWluZyB1c2VkIHRvIHN0b3AgdGhlIHNjcm9sbGluZyAodXN1YWxseSBpbml0aWF0ZWQgYnkgYSBmbGluZyAtIGlzc3VlICM0MikuXG5cdFx0XHRzY3JvbGxQYXJlbnQgPSB0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudDtcblx0XHRcdGlmIChzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50LmZhc3RDbGlja0xhc3RTY3JvbGxUb3AgIT09IHNjcm9sbFBhcmVudC5zY3JvbGxUb3ApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJldmVudCB0aGUgYWN0dWFsIGNsaWNrIGZyb20gZ29pbmcgdGhvdWdoIC0gdW5sZXNzIHRoZSB0YXJnZXQgbm9kZSBpcyBtYXJrZWQgYXMgcmVxdWlyaW5nXG5cdFx0Ly8gcmVhbCBjbGlja3Mgb3IgaWYgaXQgaXMgaW4gdGhlIHdoaXRlbGlzdCBpbiB3aGljaCBjYXNlIG9ubHkgbm9uLXByb2dyYW1tYXRpYyBjbGlja3MgYXJlIHBlcm1pdHRlZC5cblx0XHRpZiAoIXRoaXMubmVlZHNDbGljayh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuc2VuZENsaWNrKHRhcmdldEVsZW1lbnQsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblxuXHQvKipcblx0ICogT24gdG91Y2ggY2FuY2VsLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hDYW5jZWwgPSBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRyYWNraW5nQ2xpY2sgPSBmYWxzZTtcblx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIERldGVybWluZSBtb3VzZSBldmVudHMgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uTW91c2UgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdFx0Ly8gSWYgYSB0YXJnZXQgZWxlbWVudCB3YXMgbmV2ZXIgc2V0IChiZWNhdXNlIGEgdG91Y2ggZXZlbnQgd2FzIG5ldmVyIGZpcmVkKSBhbGxvdyB0aGUgZXZlbnRcblx0XHRpZiAoIXRoaXMudGFyZ2V0RWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50LmZvcndhcmRlZFRvdWNoRXZlbnQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFByb2dyYW1tYXRpY2FsbHkgZ2VuZXJhdGVkIGV2ZW50cyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBlbGVtZW50IHNob3VsZCBiZSBwZXJtaXR0ZWRcblx0XHRpZiAoIWV2ZW50LmNhbmNlbGFibGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIERlcml2ZSBhbmQgY2hlY2sgdGhlIHRhcmdldCBlbGVtZW50IHRvIHNlZSB3aGV0aGVyIHRoZSBtb3VzZSBldmVudCBuZWVkcyB0byBiZSBwZXJtaXR0ZWQ7XG5cdFx0Ly8gdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCwgcHJldmVudCBub24tdG91Y2ggY2xpY2sgZXZlbnRzIGZyb20gdHJpZ2dlcmluZyBhY3Rpb25zLFxuXHRcdC8vIHRvIHByZXZlbnQgZ2hvc3QvZG91YmxlY2xpY2tzLlxuXHRcdGlmICghdGhpcy5uZWVkc0NsaWNrKHRoaXMudGFyZ2V0RWxlbWVudCkgfHwgdGhpcy5jYW5jZWxOZXh0Q2xpY2spIHtcblxuXHRcdFx0Ly8gUHJldmVudCBhbnkgdXNlci1hZGRlZCBsaXN0ZW5lcnMgZGVjbGFyZWQgb24gRmFzdENsaWNrIGVsZW1lbnQgZnJvbSBiZWluZyBmaXJlZC5cblx0XHRcdGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFBhcnQgb2YgdGhlIGhhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBFdmVudCNzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gKGUuZy4gQW5kcm9pZCAyKVxuXHRcdFx0XHRldmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYW5jZWwgdGhlIGV2ZW50XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbW91c2UgZXZlbnQgaXMgcGVybWl0dGVkLCByZXR1cm4gdHJ1ZSBmb3IgdGhlIGFjdGlvbiB0byBnbyB0aHJvdWdoLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIGFjdHVhbCBjbGlja3MsIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSB0b3VjaC1nZW5lcmF0ZWQgY2xpY2ssIGEgY2xpY2sgYWN0aW9uIG9jY3VycmluZ1xuXHQgKiBuYXR1cmFsbHkgYWZ0ZXIgYSBkZWxheSBhZnRlciBhIHRvdWNoICh3aGljaCBuZWVkcyB0byBiZSBjYW5jZWxsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24pLCBvclxuXHQgKiBhbiBhY3R1YWwgY2xpY2sgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdHZhciBwZXJtaXR0ZWQ7XG5cblx0XHQvLyBJdCdzIHBvc3NpYmxlIGZvciBhbm90aGVyIEZhc3RDbGljay1saWtlIGxpYnJhcnkgZGVsaXZlcmVkIHdpdGggdGhpcmQtcGFydHkgY29kZSB0byBmaXJlIGEgY2xpY2sgZXZlbnQgYmVmb3JlIEZhc3RDbGljayBkb2VzIChpc3N1ZSAjNDQpLiBJbiB0aGF0IGNhc2UsIHNldCB0aGUgY2xpY2stdHJhY2tpbmcgZmxhZyBiYWNrIHRvIGZhbHNlIGFuZCByZXR1cm4gZWFybHkuIFRoaXMgd2lsbCBjYXVzZSBvblRvdWNoRW5kIHRvIHJldHVybiBlYXJseS5cblx0XHRpZiAodGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHRcdFx0dGhpcy50cmFja2luZ0NsaWNrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBWZXJ5IG9kZCBiZWhhdmlvdXIgb24gaU9TIChpc3N1ZSAjMTgpOiBpZiBhIHN1Ym1pdCBlbGVtZW50IGlzIHByZXNlbnQgaW5zaWRlIGEgZm9ybSBhbmQgdGhlIHVzZXIgaGl0cyBlbnRlciBpbiB0aGUgaU9TIHNpbXVsYXRvciBvciBjbGlja3MgdGhlIEdvIGJ1dHRvbiBvbiB0aGUgcG9wLXVwIE9TIGtleWJvYXJkIHRoZSBhIGtpbmQgb2YgJ2Zha2UnIGNsaWNrIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIHdpdGggdGhlIHN1Ym1pdC10eXBlIGlucHV0IGVsZW1lbnQgYXMgdGhlIHRhcmdldC5cblx0XHRpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdzdWJtaXQnICYmIGV2ZW50LmRldGFpbCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cGVybWl0dGVkID0gdGhpcy5vbk1vdXNlKGV2ZW50KTtcblxuXHRcdC8vIE9ubHkgdW5zZXQgdGFyZ2V0RWxlbWVudCBpZiB0aGUgY2xpY2sgaXMgbm90IHBlcm1pdHRlZC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBjaGVjayBmb3IgIXRhcmdldEVsZW1lbnQgaW4gb25Nb3VzZSBmYWlscyBhbmQgdGhlIGJyb3dzZXIncyBjbGljayBkb2Vzbid0IGdvIHRocm91Z2guXG5cdFx0aWYgKCFwZXJtaXR0ZWQpIHtcblx0XHRcdHRoaXMudGFyZ2V0RWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgY2xpY2tzIGFyZSBwZXJtaXR0ZWQsIHJldHVybiB0cnVlIGZvciB0aGUgYWN0aW9uIHRvIGdvIHRocm91Z2guXG5cdFx0cmV0dXJuIHBlcm1pdHRlZDtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIEZhc3RDbGljaydzIGV2ZW50IGxpc3RlbmVycy5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGF5ZXIgPSB0aGlzLmxheWVyO1xuXG5cdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZSwgdHJ1ZSk7XG5cdFx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHR9XG5cblx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGljaywgdHJ1ZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgZmFsc2UpO1xuXHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLm9uVG91Y2hDYW5jZWwsIGZhbHNlKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBDaGVjayB3aGV0aGVyIEZhc3RDbGljayBpcyBuZWVkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKi9cblx0RmFzdENsaWNrLm5vdE5lZWRlZCA9IGZ1bmN0aW9uKGxheWVyKSB7XG5cdFx0dmFyIG1ldGFWaWV3cG9ydDtcblx0XHR2YXIgY2hyb21lVmVyc2lvbjtcblx0XHR2YXIgYmxhY2tiZXJyeVZlcnNpb247XG5cdFx0dmFyIGZpcmVmb3hWZXJzaW9uO1xuXG5cdFx0Ly8gRGV2aWNlcyB0aGF0IGRvbid0IHN1cHBvcnQgdG91Y2ggZG9uJ3QgbmVlZCBGYXN0Q2xpY2tcblx0XHRpZiAodHlwZW9mIHdpbmRvdy5vbnRvdWNoc3RhcnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBDaHJvbWUgdmVyc2lvbiAtIHplcm8gZm9yIG90aGVyIGJyb3dzZXJzXG5cdFx0Y2hyb21lVmVyc2lvbiA9ICsoL0Nocm9tZVxcLyhbMC05XSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IFssMF0pWzFdO1xuXG5cdFx0aWYgKGNocm9tZVZlcnNpb24pIHtcblxuXHRcdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0XHRtZXRhVmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7XG5cblx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydCkge1xuXHRcdFx0XHRcdC8vIENocm9tZSBvbiBBbmRyb2lkIHdpdGggdXNlci1zY2FsYWJsZT1cIm5vXCIgZG9lc24ndCBuZWVkIEZhc3RDbGljayAoaXNzdWUgIzg5KVxuXHRcdFx0XHRcdGlmIChtZXRhVmlld3BvcnQuY29udGVudC5pbmRleE9mKCd1c2VyLXNjYWxhYmxlPW5vJykgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2hyb21lIDMyIGFuZCBhYm92ZSB3aXRoIHdpZHRoPWRldmljZS13aWR0aCBvciBsZXNzIGRvbid0IG5lZWQgRmFzdENsaWNrXG5cdFx0XHRcdFx0aWYgKGNocm9tZVZlcnNpb24gPiAzMSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGggPD0gd2luZG93Lm91dGVyV2lkdGgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBDaHJvbWUgZGVza3RvcCBkb2Vzbid0IG5lZWQgRmFzdENsaWNrIChpc3N1ZSAjMTUpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZGV2aWNlSXNCbGFja0JlcnJ5MTApIHtcblx0XHRcdGJsYWNrYmVycnlWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblxcLyhbMC05XSopXFwuKFswLTldKikvKTtcblxuXHRcdFx0Ly8gQmxhY2tCZXJyeSAxMC4zKyBkb2VzIG5vdCByZXF1aXJlIEZhc3RjbGljayBsaWJyYXJ5LlxuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2Z0bGFicy9mYXN0Y2xpY2svaXNzdWVzLzI1MVxuXHRcdFx0aWYgKGJsYWNrYmVycnlWZXJzaW9uWzFdID49IDEwICYmIGJsYWNrYmVycnlWZXJzaW9uWzJdID49IDMpIHtcblx0XHRcdFx0bWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPXZpZXdwb3J0XScpO1xuXG5cdFx0XHRcdGlmIChtZXRhVmlld3BvcnQpIHtcblx0XHRcdFx0XHQvLyB1c2VyLXNjYWxhYmxlPW5vIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB3aWR0aD1kZXZpY2Utd2lkdGggKG9yIGxlc3MgdGhhbiBkZXZpY2Utd2lkdGgpIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCA8PSB3aW5kb3cub3V0ZXJXaWR0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSUUxMCB3aXRoIC1tcy10b3VjaC1hY3Rpb246IG5vbmUgb3IgbWFuaXB1bGF0aW9uLCB3aGljaCBkaXNhYmxlcyBkb3VibGUtdGFwLXRvLXpvb20gKGlzc3VlICM5Nylcblx0XHRpZiAobGF5ZXIuc3R5bGUubXNUb3VjaEFjdGlvbiA9PT0gJ25vbmUnIHx8IGxheWVyLnN0eWxlLnRvdWNoQWN0aW9uID09PSAnbWFuaXB1bGF0aW9uJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZWZveCB2ZXJzaW9uIC0gemVybyBmb3Igb3RoZXIgYnJvd3NlcnNcblx0XHRmaXJlZm94VmVyc2lvbiA9ICsoL0ZpcmVmb3hcXC8oWzAtOV0rKS8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCBbLDBdKVsxXTtcblxuXHRcdGlmIChmaXJlZm94VmVyc2lvbiA+PSAyNykge1xuXHRcdFx0Ly8gRmlyZWZveCAyNysgZG9lcyBub3QgaGF2ZSB0YXAgZGVsYXkgaWYgdGhlIGNvbnRlbnQgaXMgbm90IHpvb21hYmxlIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyODk2XG5cblx0XHRcdG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT12aWV3cG9ydF0nKTtcblx0XHRcdGlmIChtZXRhVmlld3BvcnQgJiYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoIDw9IHdpbmRvdy5vdXRlcldpZHRoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJRTExOiBwcmVmaXhlZCAtbXMtdG91Y2gtYWN0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYW5kIGl0J3MgcmVjb21lbmRlZCB0byB1c2Ugbm9uLXByZWZpeGVkIHZlcnNpb25cblx0XHQvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9hcHBzL0hoNzY3MzEzLmFzcHhcblx0XHRpZiAobGF5ZXIuc3R5bGUudG91Y2hBY3Rpb24gPT09ICdub25lJyB8fCBsYXllci5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ21hbmlwdWxhdGlvbicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBGYXN0Q2xpY2sgb2JqZWN0XG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0c1xuXHQgKi9cblx0RmFzdENsaWNrLmF0dGFjaCA9IGZ1bmN0aW9uKGxheWVyLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIG5ldyBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpO1xuXHR9O1xuXG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblxuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRmFzdENsaWNrO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBGYXN0Q2xpY2suYXR0YWNoO1xuXHRcdG1vZHVsZS5leHBvcnRzLkZhc3RDbGljayA9IEZhc3RDbGljaztcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuRmFzdENsaWNrID0gRmFzdENsaWNrO1xuXHR9XG59KCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzXG4vLyBtb2R1bGUgaWQgPSA1MFxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///50\n"); /***/ }), -/* 54 */ -/***/ (function(module, exports) { - -eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * jVectorMap version 1.2.2\n *\n * Copyright 2011-2013, Kirill Lebedev\n * Licensed under the MIT license.\n *\n */(function (e) {\n var t = { set: { colors: 1, values: 1, backgroundColor: 1, scaleColors: 1, normalizeFunction: 1, focus: 1 }, get: { selectedRegions: 1, selectedMarkers: 1, mapObject: 1, regionName: 1 } };e.fn.vectorMap = function (e) {\n var n,\n r,\n i,\n n = this.children(\".jvectormap-container\").data(\"mapObject\");if (e === \"addMap\") jvm.WorldMap.maps[arguments[1]] = arguments[2];else {\n if (!(e !== \"set\" && e !== \"get\" || !t[e][arguments[1]])) return r = arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1), n[e + r].apply(n, Array.prototype.slice.call(arguments, 2));e = e || {}, e.container = this, n = new jvm.WorldMap(e);\n }return this;\n };\n})(jQuery), function (e) {\n function r(t) {\n var n = t || window.event,\n r = [].slice.call(arguments, 1),\n i = 0,\n s = !0,\n o = 0,\n u = 0;return t = e.event.fix(n), t.type = \"mousewheel\", n.wheelDelta && (i = n.wheelDelta / 120), n.detail && (i = -n.detail / 3), u = i, n.axis !== undefined && n.axis === n.HORIZONTAL_AXIS && (u = 0, o = -1 * i), n.wheelDeltaY !== undefined && (u = n.wheelDeltaY / 120), n.wheelDeltaX !== undefined && (o = -1 * n.wheelDeltaX / 120), r.unshift(t, i, o, u), (e.event.dispatch || e.event.handle).apply(this, r);\n }var t = [\"DOMMouseScroll\", \"mousewheel\"];if (e.event.fixHooks) for (var n = t.length; n;) {\n e.event.fixHooks[t[--n]] = e.event.mouseHooks;\n }e.event.special.mousewheel = { setup: function setup() {\n if (this.addEventListener) for (var e = t.length; e;) {\n this.addEventListener(t[--e], r, !1);\n } else this.onmousewheel = r;\n }, teardown: function teardown() {\n if (this.removeEventListener) for (var e = t.length; e;) {\n this.removeEventListener(t[--e], r, !1);\n } else this.onmousewheel = null;\n } }, e.fn.extend({ mousewheel: function mousewheel(e) {\n return e ? this.bind(\"mousewheel\", e) : this.trigger(\"mousewheel\");\n }, unmousewheel: function unmousewheel(e) {\n return this.unbind(\"mousewheel\", e);\n } });\n}(jQuery);var jvm = { inherits: function inherits(e, t) {\n function n() {}n.prototype = t.prototype, e.prototype = new n(), e.prototype.constructor = e, e.parentClass = t;\n }, mixin: function mixin(e, t) {\n var n;for (n in t.prototype) {\n t.prototype.hasOwnProperty(n) && (e.prototype[n] = t.prototype[n]);\n }\n }, min: function min(e) {\n var t = Number.MAX_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] < t && (t = e[n]);\n } else for (n in e) {\n e[n] < t && (t = e[n]);\n }return t;\n }, max: function max(e) {\n var t = Number.MIN_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] > t && (t = e[n]);\n } else for (n in e) {\n e[n] > t && (t = e[n]);\n }return t;\n }, keys: function keys(e) {\n var t = [],\n n;for (n in e) {\n t.push(n);\n }return t;\n }, values: function values(e) {\n var t = [],\n n,\n r;for (r = 0; r < arguments.length; r++) {\n e = arguments[r];for (n in e) {\n t.push(e[n]);\n }\n }return t;\n } };jvm.$ = jQuery, jvm.AbstractElement = function (e, t) {\n this.node = this.createElement(e), this.name = e, this.properties = {}, t && this.set(t);\n}, jvm.AbstractElement.prototype.set = function (e, t) {\n var n;if ((typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\") for (n in e) {\n this.properties[n] = e[n], this.applyAttr(n, e[n]);\n } else this.properties[e] = t, this.applyAttr(e, t);\n}, jvm.AbstractElement.prototype.get = function (e) {\n return this.properties[e];\n}, jvm.AbstractElement.prototype.applyAttr = function (e, t) {\n this.node.setAttribute(e, t);\n}, jvm.AbstractElement.prototype.remove = function () {\n jvm.$(this.node).remove();\n}, jvm.AbstractCanvasElement = function (e, t, n) {\n this.container = e, this.setSize(t, n), this.rootElement = new jvm[this.classPrefix + \"GroupElement\"](), this.node.appendChild(this.rootElement.node), this.container.appendChild(this.node);\n}, jvm.AbstractCanvasElement.prototype.add = function (e, t) {\n t = t || this.rootElement, t.add(e), e.canvas = this;\n}, jvm.AbstractCanvasElement.prototype.addPath = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"PathElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addCircle = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"CircleElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addGroup = function (e) {\n var t = new jvm[this.classPrefix + \"GroupElement\"]();return e ? e.node.appendChild(t.node) : this.node.appendChild(t.node), t.canvas = this, t;\n}, jvm.AbstractShapeElement = function (e, t, n) {\n this.style = n || {}, this.style.current = {}, this.isHovered = !1, this.isSelected = !1, this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.setHovered = function (e) {\n this.isHovered !== e && (this.isHovered = e, this.updateStyle());\n}, jvm.AbstractShapeElement.prototype.setSelected = function (e) {\n this.isSelected !== e && (this.isSelected = e, this.updateStyle(), jvm.$(this.node).trigger(\"selected\", [e]));\n}, jvm.AbstractShapeElement.prototype.setStyle = function (e, t) {\n var n = {};(typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\" ? n = e : n[e] = t, jvm.$.extend(this.style.current, n), this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.updateStyle = function () {\n var e = {};jvm.AbstractShapeElement.mergeStyles(e, this.style.initial), jvm.AbstractShapeElement.mergeStyles(e, this.style.current), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.hover), this.isSelected && (jvm.AbstractShapeElement.mergeStyles(e, this.style.selected), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.selectedHover)), this.set(e);\n}, jvm.AbstractShapeElement.mergeStyles = function (e, t) {\n var n;t = t || {};for (n in t) {\n t[n] === null ? delete e[n] : e[n] = t[n];\n }\n}, jvm.SVGElement = function (e, t) {\n jvm.SVGElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.SVGElement, jvm.AbstractElement), jvm.SVGElement.svgns = \"http://www.w3.org/2000/svg\", jvm.SVGElement.prototype.createElement = function (e) {\n return document.createElementNS(jvm.SVGElement.svgns, e);\n}, jvm.SVGElement.prototype.addClass = function (e) {\n this.node.setAttribute(\"class\", e);\n}, jvm.SVGElement.prototype.getElementCtr = function (e) {\n return jvm[\"SVG\" + e];\n}, jvm.SVGElement.prototype.getBBox = function () {\n return this.node.getBBox();\n}, jvm.SVGGroupElement = function () {\n jvm.SVGGroupElement.parentClass.call(this, \"g\");\n}, jvm.inherits(jvm.SVGGroupElement, jvm.SVGElement), jvm.SVGGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.SVGCanvasElement = function (e, t, n) {\n this.classPrefix = \"SVG\", jvm.SVGCanvasElement.parentClass.call(this, \"svg\"), jvm.AbstractCanvasElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGCanvasElement, jvm.SVGElement), jvm.mixin(jvm.SVGCanvasElement, jvm.AbstractCanvasElement), jvm.SVGCanvasElement.prototype.setSize = function (e, t) {\n this.width = e, this.height = t, this.node.setAttribute(\"width\", e), this.node.setAttribute(\"height\", t);\n}, jvm.SVGCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.setAttribute(\"transform\", \"scale(\" + e + \") translate(\" + t + \", \" + n + \")\");\n}, jvm.SVGShapeElement = function (e, t, n) {\n jvm.SVGShapeElement.parentClass.call(this, e, t), jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGShapeElement, jvm.SVGElement), jvm.mixin(jvm.SVGShapeElement, jvm.AbstractShapeElement), jvm.SVGPathElement = function (e, t) {\n jvm.SVGPathElement.parentClass.call(this, \"path\", e, t), this.node.setAttribute(\"fill-rule\", \"evenodd\");\n}, jvm.inherits(jvm.SVGPathElement, jvm.SVGShapeElement), jvm.SVGCircleElement = function (e, t) {\n jvm.SVGCircleElement.parentClass.call(this, \"circle\", e, t);\n}, jvm.inherits(jvm.SVGCircleElement, jvm.SVGShapeElement), jvm.VMLElement = function (e, t) {\n jvm.VMLElement.VMLInitialized || jvm.VMLElement.initializeVML(), jvm.VMLElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.VMLElement, jvm.AbstractElement), jvm.VMLElement.VMLInitialized = !1, jvm.VMLElement.initializeVML = function () {\n try {\n document.namespaces.rvml || document.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\"), jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<rvml:\" + e + ' class=\"rvml\">');\n };\n } catch (e) {\n jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<\" + e + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n };\n }document.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\"), jvm.VMLElement.VMLInitialized = !0;\n}, jvm.VMLElement.prototype.getElementCtr = function (e) {\n return jvm[\"VML\" + e];\n}, jvm.VMLElement.prototype.addClass = function (e) {\n jvm.$(this.node).addClass(e);\n}, jvm.VMLElement.prototype.applyAttr = function (e, t) {\n this.node[e] = t;\n}, jvm.VMLElement.prototype.getBBox = function () {\n var e = jvm.$(this.node);return { x: e.position().left / this.canvas.scale, y: e.position().top / this.canvas.scale, width: e.width() / this.canvas.scale, height: e.height() / this.canvas.scale };\n}, jvm.VMLGroupElement = function () {\n jvm.VMLGroupElement.parentClass.call(this, \"group\"), this.node.style.left = \"0px\", this.node.style.top = \"0px\", this.node.coordorigin = \"0 0\";\n}, jvm.inherits(jvm.VMLGroupElement, jvm.VMLElement), jvm.VMLGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.VMLCanvasElement = function (e, t, n) {\n this.classPrefix = \"VML\", jvm.VMLCanvasElement.parentClass.call(this, \"group\"), jvm.AbstractCanvasElement.apply(this, arguments), this.node.style.position = \"absolute\";\n}, jvm.inherits(jvm.VMLCanvasElement, jvm.VMLElement), jvm.mixin(jvm.VMLCanvasElement, jvm.AbstractCanvasElement), jvm.VMLCanvasElement.prototype.setSize = function (e, t) {\n var n, r, i, s;this.width = e, this.height = t, this.node.style.width = e + \"px\", this.node.style.height = t + \"px\", this.node.coordsize = e + \" \" + t, this.node.coordorigin = \"0 0\";if (this.rootElement) {\n n = this.rootElement.node.getElementsByTagName(\"shape\");for (i = 0, s = n.length; i < s; i++) {\n n[i].coordsize = e + \" \" + t, n[i].style.width = e + \"px\", n[i].style.height = t + \"px\";\n }r = this.node.getElementsByTagName(\"group\");for (i = 0, s = r.length; i < s; i++) {\n r[i].coordsize = e + \" \" + t, r[i].style.width = e + \"px\", r[i].style.height = t + \"px\";\n }\n }\n}, jvm.VMLCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.coordorigin = this.width - t - this.width / 100 + \",\" + (this.height - n - this.height / 100), this.rootElement.node.coordsize = this.width / e + \",\" + this.height / e;\n}, jvm.VMLShapeElement = function (e, t) {\n jvm.VMLShapeElement.parentClass.call(this, e, t), this.fillElement = new jvm.VMLElement(\"fill\"), this.strokeElement = new jvm.VMLElement(\"stroke\"), this.node.appendChild(this.fillElement.node), this.node.appendChild(this.strokeElement.node), this.node.stroked = !1, jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.VMLShapeElement, jvm.VMLElement), jvm.mixin(jvm.VMLShapeElement, jvm.AbstractShapeElement), jvm.VMLShapeElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"fill\":\n this.node.fillcolor = t;break;case \"fill-opacity\":\n this.fillElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke\":\n t === \"none\" ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokecolor = t;break;case \"stroke-opacity\":\n this.strokeElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke-width\":\n parseInt(t, 10) === 0 ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokeweight = t;break;case \"d\":\n this.node.path = jvm.VMLPathElement.pathSvgToVml(t);break;default:\n jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this, arguments);}\n}, jvm.VMLPathElement = function (e, t) {\n var n = new jvm.VMLElement(\"skew\");jvm.VMLPathElement.parentClass.call(this, \"shape\", e, t), this.node.coordorigin = \"0 0\", n.node.on = !0, n.node.matrix = \"0.01,0,0,0.01,0,0\", n.node.offset = \"0,0\", this.node.appendChild(n.node);\n}, jvm.inherits(jvm.VMLPathElement, jvm.VMLShapeElement), jvm.VMLPathElement.prototype.applyAttr = function (e, t) {\n e === \"d\" ? this.node.path = jvm.VMLPathElement.pathSvgToVml(t) : jvm.VMLShapeElement.prototype.applyAttr.call(this, e, t);\n}, jvm.VMLPathElement.pathSvgToVml = function (e) {\n var t = \"\",\n n = 0,\n r = 0,\n i,\n s;return e = e.replace(/(-?\\d+)e(-?\\d+)/g, \"0\"), e.replace(/([MmLlHhVvCcSs])\\s*((?:-?\\d*(?:\\.\\d+)?\\s*,?\\s*)+)/g, function (e, t, o, u) {\n o = o.replace(/(\\d)-/g, \"$1,-\").replace(/^\\s+/g, \"\").replace(/\\s+$/g, \"\").replace(/\\s+/g, \",\").split(\",\"), o[0] || o.shift();for (var a = 0, f = o.length; a < f; a++) {\n o[a] = Math.round(100 * o[a]);\n }switch (t) {case \"m\":\n return n += o[0], r += o[1], \"t\" + o.join(\",\");case \"M\":\n return n = o[0], r = o[1], \"m\" + o.join(\",\");case \"l\":\n return n += o[0], r += o[1], \"r\" + o.join(\",\");case \"L\":\n return n = o[0], r = o[1], \"l\" + o.join(\",\");case \"h\":\n return n += o[0], \"r\" + o[0] + \",0\";case \"H\":\n return n = o[0], \"l\" + n + \",\" + r;case \"v\":\n return r += o[0], \"r0,\" + o[0];case \"V\":\n return r = o[0], \"l\" + n + \",\" + r;case \"c\":\n return i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"C\":\n return i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");case \"s\":\n return o.unshift(r - s), o.unshift(n - i), i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"S\":\n return o.unshift(r + r - s), o.unshift(n + n - i), i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");}return \"\";\n }).replace(/z/g, \"e\");\n}, jvm.VMLCircleElement = function (e, t) {\n jvm.VMLCircleElement.parentClass.call(this, \"oval\", e, t);\n}, jvm.inherits(jvm.VMLCircleElement, jvm.VMLShapeElement), jvm.VMLCircleElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"r\":\n this.node.style.width = t * 2 + \"px\", this.node.style.height = t * 2 + \"px\", this.applyAttr(\"cx\", this.get(\"cx\") || 0), this.applyAttr(\"cy\", this.get(\"cy\") || 0);break;case \"cx\":\n if (!t) return;this.node.style.left = t - (this.get(\"r\") || 0) + \"px\";break;case \"cy\":\n if (!t) return;this.node.style.top = t - (this.get(\"r\") || 0) + \"px\";break;default:\n jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this, e, t);}\n}, jvm.VectorCanvas = function (e, t, n) {\n return this.mode = window.SVGAngle ? \"svg\" : \"vml\", this.mode == \"svg\" ? this.impl = new jvm.SVGCanvasElement(e, t, n) : this.impl = new jvm.VMLCanvasElement(e, t, n), this.impl;\n}, jvm.SimpleScale = function (e) {\n this.scale = e;\n}, jvm.SimpleScale.prototype.getValue = function (e) {\n return e;\n}, jvm.OrdinalScale = function (e) {\n this.scale = e;\n}, jvm.OrdinalScale.prototype.getValue = function (e) {\n return this.scale[e];\n}, jvm.NumericScale = function (e, t, n, r) {\n this.scale = [], t = t || \"linear\", e && this.setScale(e), t && this.setNormalizeFunction(t), n && this.setMin(n), r && this.setMax(r);\n}, jvm.NumericScale.prototype = { setMin: function setMin(e) {\n this.clearMinValue = e, typeof this.normalize == \"function\" ? this.minValue = this.normalize(e) : this.minValue = e;\n }, setMax: function setMax(e) {\n this.clearMaxValue = e, typeof this.normalize == \"function\" ? this.maxValue = this.normalize(e) : this.maxValue = e;\n }, setScale: function setScale(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = [e[t]];\n }\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n e === \"polynomial\" ? this.normalize = function (e) {\n return Math.pow(e, .2);\n } : e === \"linear\" ? delete this.normalize : this.normalize = e, this.setMin(this.clearMinValue), this.setMax(this.clearMaxValue);\n }, getValue: function getValue(e) {\n var t = [],\n n = 0,\n r,\n i = 0,\n s;typeof this.normalize == \"function\" && (e = this.normalize(e));for (i = 0; i < this.scale.length - 1; i++) {\n r = this.vectorLength(this.vectorSubtract(this.scale[i + 1], this.scale[i])), t.push(r), n += r;\n }s = (this.maxValue - this.minValue) / n;for (i = 0; i < t.length; i++) {\n t[i] *= s;\n }i = 0, e -= this.minValue;while (e - t[i] >= 0) {\n e -= t[i], i++;\n }return i == this.scale.length - 1 ? e = this.vectorToNum(this.scale[i]) : e = this.vectorToNum(this.vectorAdd(this.scale[i], this.vectorMult(this.vectorSubtract(this.scale[i + 1], this.scale[i]), e / t[i]))), e;\n }, vectorToNum: function vectorToNum(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += Math.round(e[n]) * Math.pow(256, e.length - n - 1);\n }return t;\n }, vectorSubtract: function vectorSubtract(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] - t[r];\n }return n;\n }, vectorAdd: function vectorAdd(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] + t[r];\n }return n;\n }, vectorMult: function vectorMult(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] * t;\n }return n;\n }, vectorLength: function vectorLength(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += e[n] * e[n];\n }return Math.sqrt(t);\n } }, jvm.ColorScale = function (e, t, n, r) {\n jvm.ColorScale.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.ColorScale, jvm.NumericScale), jvm.ColorScale.prototype.setScale = function (e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = jvm.ColorScale.rgbToArray(e[t]);\n }\n}, jvm.ColorScale.prototype.getValue = function (e) {\n return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this, e));\n}, jvm.ColorScale.arrayToRgb = function (e) {\n var t = \"#\",\n n,\n r;for (r = 0; r < e.length; r++) {\n n = e[r].toString(16), t += n.length == 1 ? \"0\" + n : n;\n }return t;\n}, jvm.ColorScale.numToRgb = function (e) {\n e = e.toString(16);while (e.length < 6) {\n e = \"0\" + e;\n }return \"#\" + e;\n}, jvm.ColorScale.rgbToArray = function (e) {\n return e = e.substr(1), [parseInt(e.substr(0, 2), 16), parseInt(e.substr(2, 2), 16), parseInt(e.substr(4, 2), 16)];\n}, jvm.DataSeries = function (e, t) {\n var n;e = e || {}, e.attribute = e.attribute || \"fill\", this.elements = t, this.params = e, e.attributes && this.setAttributes(e.attributes), jvm.$.isArray(e.scale) ? (n = e.attribute === \"fill\" || e.attribute === \"stroke\" ? jvm.ColorScale : jvm.NumericScale, this.scale = new n(e.scale, e.normalizeFunction, e.min, e.max)) : e.scale ? this.scale = new jvm.OrdinalScale(e.scale) : this.scale = new jvm.SimpleScale(e.scale), this.values = e.values || {}, this.setValues(this.values);\n}, jvm.DataSeries.prototype = { setAttributes: function setAttributes(e, t) {\n var n = e,\n r;if (typeof e == \"string\") this.elements[e] && this.elements[e].setStyle(this.params.attribute, t);else for (r in n) {\n this.elements[r] && this.elements[r].element.setStyle(this.params.attribute, n[r]);\n }\n }, setValues: function setValues(e) {\n var t = Number.MIN_VALUE,\n n = Number.MAX_VALUE,\n r,\n i,\n s = {};if (this.scale instanceof jvm.OrdinalScale || this.scale instanceof jvm.SimpleScale) for (i in e) {\n e[i] ? s[i] = this.scale.getValue(e[i]) : s[i] = this.elements[i].element.style.initial[this.params.attribute];\n } else {\n if (!this.params.min || !this.params.max) {\n for (i in e) {\n r = parseFloat(e[i]), r > t && (t = e[i]), r < n && (n = r);\n }this.params.min || this.scale.setMin(n), this.params.max || this.scale.setMax(t), this.params.min = n, this.params.max = t;\n }for (i in e) {\n r = parseFloat(e[i]), isNaN(r) ? s[i] = this.elements[i].element.style.initial[this.params.attribute] : s[i] = this.scale.getValue(r);\n }\n }this.setAttributes(s), jvm.$.extend(this.values, e);\n }, clear: function clear() {\n var e,\n t = {};for (e in this.values) {\n this.elements[e] && (t[e] = this.elements[e].element.style.initial[this.params.attribute]);\n }this.setAttributes(t), this.values = {};\n }, setScale: function setScale(e) {\n this.scale.setScale(e), this.values && this.setValues(this.values);\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n this.scale.setNormalizeFunction(e), this.values && this.setValues(this.values);\n } }, jvm.Proj = { degRad: 180 / Math.PI, radDeg: Math.PI / 180, radius: 6381372, sgn: function sgn(e) {\n return e > 0 ? 1 : e < 0 ? -1 : e;\n }, mill: function mill(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan((45 + .4 * e) * this.radDeg)) / .8 };\n }, mill_inv: function mill_inv(e, t, n) {\n return { lat: (2.5 * Math.atan(Math.exp(.8 * t / this.radius)) - 5 * Math.PI / 8) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, merc: function merc(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan(Math.PI / 4 + e * Math.PI / 360)) };\n }, merc_inv: function merc_inv(e, t, n) {\n return { lat: (2 * Math.atan(Math.exp(t / this.radius)) - Math.PI / 2) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, aea: function aea(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = 29.5 * this.radDeg,\n o = 45.5 * this.radDeg,\n u = e * this.radDeg,\n a = t * this.radDeg,\n f = (Math.sin(s) + Math.sin(o)) / 2,\n l = Math.cos(s) * Math.cos(s) + 2 * f * Math.sin(s),\n c = f * (a - i),\n h = Math.sqrt(l - 2 * f * Math.sin(u)) / f,\n p = Math.sqrt(l - 2 * f * Math.sin(r)) / f;return { x: h * Math.sin(c) * this.radius, y: -(p - h * Math.cos(c)) * this.radius };\n }, aea_inv: function aea_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 29.5 * this.radDeg,\n a = 45.5 * this.radDeg,\n f = (Math.sin(u) + Math.sin(a)) / 2,\n l = Math.cos(u) * Math.cos(u) + 2 * f * Math.sin(u),\n c = Math.sqrt(l - 2 * f * Math.sin(s)) / f,\n h = Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: Math.asin((l - h * h * f * f) / (2 * f)) * this.degRad, lng: (o + p / f) * this.degRad };\n }, lcc: function lcc(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = t * this.radDeg,\n o = 33 * this.radDeg,\n u = 45 * this.radDeg,\n a = e * this.radDeg,\n f = Math.log(Math.cos(o) * (1 / Math.cos(u))) / Math.log(Math.tan(Math.PI / 4 + u / 2) * (1 / Math.tan(Math.PI / 4 + o / 2))),\n l = Math.cos(o) * Math.pow(Math.tan(Math.PI / 4 + o / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + a / 2), f),\n h = l * Math.pow(1 / Math.tan(Math.PI / 4 + r / 2), f);return { x: c * Math.sin(f * (s - i)) * this.radius, y: -(h - c * Math.cos(f * (s - i))) * this.radius };\n }, lcc_inv: function lcc_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 33 * this.radDeg,\n a = 45 * this.radDeg,\n f = Math.log(Math.cos(u) * (1 / Math.cos(a))) / Math.log(Math.tan(Math.PI / 4 + a / 2) * (1 / Math.tan(Math.PI / 4 + u / 2))),\n l = Math.cos(u) * Math.pow(Math.tan(Math.PI / 4 + u / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + s / 2), f),\n h = this.sgn(f) * Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: (2 * Math.atan(Math.pow(l / h, 1 / f)) - Math.PI / 2) * this.degRad, lng: (o + p / f) * this.degRad };\n } }, jvm.WorldMap = function (e) {\n var t = this,\n n;this.params = jvm.$.extend(!0, {}, jvm.WorldMap.defaultParams, e);if (!jvm.WorldMap.maps[this.params.map]) throw new Error(\"Attempt to use map which was not loaded: \" + this.params.map);this.mapData = jvm.WorldMap.maps[this.params.map], this.markers = {}, this.regions = {}, this.regionsColors = {}, this.regionsData = {}, this.container = jvm.$(\"<div>\").css({ width: \"100%\", height: \"100%\" }).addClass(\"jvectormap-container\"), this.params.container.append(this.container), this.container.data(\"mapObject\", this), this.container.css({ position: \"relative\", overflow: \"hidden\" }), this.defaultWidth = this.mapData.width, this.defaultHeight = this.mapData.height, this.setBackgroundColor(this.params.backgroundColor), this.onResize = function () {\n t.setSize();\n }, jvm.$(window).resize(this.onResize);for (n in jvm.WorldMap.apiEvents) {\n this.params[n] && this.container.bind(jvm.WorldMap.apiEvents[n] + \".jvectormap\", this.params[n]);\n }this.canvas = new jvm.VectorCanvas(this.container[0], this.width, this.height), \"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch ? this.params.bindTouchEvents && this.bindContainerTouchEvents() : this.bindContainerEvents(), this.bindElementEvents(), this.createLabel(), this.params.zoomButtons && this.bindZoomButtons(), this.createRegions(), this.createMarkers(this.params.markers || {}), this.setSize(), this.params.focusOn && (_typeof(this.params.focusOn) == \"object\" ? this.setFocus.call(this, this.params.focusOn.scale, this.params.focusOn.x, this.params.focusOn.y) : this.setFocus.call(this, this.params.focusOn)), this.params.selectedRegions && this.setSelectedRegions(this.params.selectedRegions), this.params.selectedMarkers && this.setSelectedMarkers(this.params.selectedMarkers), this.params.series && this.createSeries();\n}, jvm.WorldMap.prototype = { transX: 0, transY: 0, scale: 1, baseTransX: 0, baseTransY: 0, baseScale: 1, width: 0, height: 0, setBackgroundColor: function setBackgroundColor(e) {\n this.container.css(\"background-color\", e);\n }, resize: function resize() {\n var e = this.baseScale;this.width / this.height > this.defaultWidth / this.defaultHeight ? (this.baseScale = this.height / this.defaultHeight, this.baseTransX = Math.abs(this.width - this.defaultWidth * this.baseScale) / (2 * this.baseScale)) : (this.baseScale = this.width / this.defaultWidth, this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale)), this.scale *= this.baseScale / e, this.transX *= this.baseScale / e, this.transY *= this.baseScale / e;\n }, setSize: function setSize() {\n this.width = this.container.width(), this.height = this.container.height(), this.resize(), this.canvas.setSize(this.width, this.height), this.applyTransform();\n }, reset: function reset() {\n var e, t;for (e in this.series) {\n for (t = 0; t < this.series[e].length; t++) {\n this.series[e][t].clear();\n }\n }this.scale = this.baseScale, this.transX = this.baseTransX, this.transY = this.baseTransY, this.applyTransform();\n }, applyTransform: function applyTransform() {\n var e, t, n, r;this.defaultWidth * this.scale <= this.width ? (e = (this.width - this.defaultWidth * this.scale) / (2 * this.scale), n = (this.width - this.defaultWidth * this.scale) / (2 * this.scale)) : (e = 0, n = (this.width - this.defaultWidth * this.scale) / this.scale), this.defaultHeight * this.scale <= this.height ? (t = (this.height - this.defaultHeight * this.scale) / (2 * this.scale), r = (this.height - this.defaultHeight * this.scale) / (2 * this.scale)) : (t = 0, r = (this.height - this.defaultHeight * this.scale) / this.scale), this.transY > t ? this.transY = t : this.transY < r && (this.transY = r), this.transX > e ? this.transX = e : this.transX < n && (this.transX = n), this.canvas.applyTransformParams(this.scale, this.transX, this.transY), this.markers && this.repositionMarkers(), this.container.trigger(\"viewportChange\", [this.scale / this.baseScale, this.transX, this.transY]);\n }, bindContainerEvents: function bindContainerEvents() {\n var e = !1,\n t,\n n,\n r = this;this.container.mousemove(function (i) {\n return e && (r.transX -= (t - i.pageX) / r.scale, r.transY -= (n - i.pageY) / r.scale, r.applyTransform(), t = i.pageX, n = i.pageY), !1;\n }).mousedown(function (r) {\n return e = !0, t = r.pageX, n = r.pageY, !1;\n }), jvm.$(\"body\").mouseup(function () {\n e = !1;\n }), this.params.zoomOnScroll && this.container.mousewheel(function (e, t, n, i) {\n var s = jvm.$(r.container).offset(),\n o = e.pageX - s.left,\n u = e.pageY - s.top,\n a = Math.pow(1.3, i);r.label.hide(), r.setScale(r.scale * a, o, u), e.preventDefault();\n });\n }, bindContainerTouchEvents: function bindContainerTouchEvents() {\n var e,\n t,\n n = this,\n r,\n i,\n s,\n o,\n u,\n a = function a(_a) {\n var f = _a.originalEvent.touches,\n l,\n c,\n h,\n p;_a.type == \"touchstart\" && (u = 0), f.length == 1 ? (u == 1 && (h = n.transX, p = n.transY, n.transX -= (r - f[0].pageX) / n.scale, n.transY -= (i - f[0].pageY) / n.scale, n.applyTransform(), n.label.hide(), (h != n.transX || p != n.transY) && _a.preventDefault()), r = f[0].pageX, i = f[0].pageY) : f.length == 2 && (u == 2 ? (c = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)) / t, n.setScale(e * c, s, o), n.label.hide(), _a.preventDefault()) : (l = jvm.$(n.container).offset(), f[0].pageX > f[1].pageX ? s = f[1].pageX + (f[0].pageX - f[1].pageX) / 2 : s = f[0].pageX + (f[1].pageX - f[0].pageX) / 2, f[0].pageY > f[1].pageY ? o = f[1].pageY + (f[0].pageY - f[1].pageY) / 2 : o = f[0].pageY + (f[1].pageY - f[0].pageY) / 2, s -= l.left, o -= l.top, e = n.scale, t = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)))), u = f.length;\n };jvm.$(this.container).bind(\"touchstart\", a), jvm.$(this.container).bind(\"touchmove\", a);\n }, bindElementEvents: function bindElementEvents() {\n var e = this,\n t;this.container.mousemove(function () {\n t = !0;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseover mouseout\", function (t) {\n var n = this,\n r = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n i = r.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n s = i == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n o = i == \"region\" ? e.regions[s].element : e.markers[s].element,\n u = i == \"region\" ? e.mapData.paths[s].name : e.markers[s].config.name || \"\",\n a = jvm.$.Event(i + \"LabelShow.jvectormap\"),\n f = jvm.$.Event(i + \"Over.jvectormap\");t.type == \"mouseover\" ? (e.container.trigger(f, [s]), f.isDefaultPrevented() || o.setHovered(!0), e.label.text(u), e.container.trigger(a, [e.label, s]), a.isDefaultPrevented() || (e.label.show(), e.labelWidth = e.label.width(), e.labelHeight = e.label.height())) : (o.setHovered(!1), e.label.hide(), e.container.trigger(i + \"Out.jvectormap\", [s]));\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mousedown\", function (e) {\n t = !1;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseup\", function (n) {\n var r = this,\n i = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n s = i.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n o = s == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n u = jvm.$.Event(s + \"Click.jvectormap\"),\n a = s == \"region\" ? e.regions[o].element : e.markers[o].element;if (!t) {\n e.container.trigger(u, [o]);if (s === \"region\" && e.params.regionsSelectable || s === \"marker\" && e.params.markersSelectable) u.isDefaultPrevented() || (e.params[s + \"sSelectableOne\"] && e.clearSelected(s + \"s\"), a.setSelected(!a.isSelected));\n }\n });\n }, bindZoomButtons: function bindZoomButtons() {\n var e = this;jvm.$(\"<div/>\").addClass(\"jvectormap-zoomin\").text(\"+\").appendTo(this.container), jvm.$(\"<div/>\").addClass(\"jvectormap-zoomout\").html(\"−\").appendTo(this.container), this.container.find(\".jvectormap-zoomin\").click(function () {\n e.setScale(e.scale * e.params.zoomStep, e.width / 2, e.height / 2);\n }), this.container.find(\".jvectormap-zoomout\").click(function () {\n e.setScale(e.scale / e.params.zoomStep, e.width / 2, e.height / 2);\n });\n }, createLabel: function createLabel() {\n var e = this;this.label = jvm.$(\"<div/>\").addClass(\"jvectormap-label\").appendTo(jvm.$(\"body\")), this.container.mousemove(function (t) {\n var n = t.pageX - 15 - e.labelWidth,\n r = t.pageY - 15 - e.labelHeight;n < 5 && (n = t.pageX + 15), r < 5 && (r = t.pageY + 15), e.label.is(\":visible\") && e.label.css({ left: n, top: r });\n });\n }, setScale: function setScale(e, t, n, r) {\n var i,\n s = jvm.$.Event(\"zoom.jvectormap\");e > this.params.zoomMax * this.baseScale ? e = this.params.zoomMax * this.baseScale : e < this.params.zoomMin * this.baseScale && (e = this.params.zoomMin * this.baseScale), typeof t != \"undefined\" && typeof n != \"undefined\" && (i = e / this.scale, r ? (this.transX = t + this.defaultWidth * (this.width / (this.defaultWidth * e)) / 2, this.transY = n + this.defaultHeight * (this.height / (this.defaultHeight * e)) / 2) : (this.transX -= (i - 1) / e * t, this.transY -= (i - 1) / e * n)), this.scale = e, this.applyTransform(), this.container.trigger(s, [e / this.baseScale]);\n }, setFocus: function setFocus(e, t, n) {\n var r, i, s, o, u;if (jvm.$.isArray(e) || this.regions[e]) {\n jvm.$.isArray(e) ? o = e : o = [e];for (u = 0; u < o.length; u++) {\n this.regions[o[u]] && (i = this.regions[o[u]].element.getBBox(), i && (typeof r == \"undefined\" ? r = i : (s = { x: Math.min(r.x, i.x), y: Math.min(r.y, i.y), width: Math.max(r.x + r.width, i.x + i.width) - Math.min(r.x, i.x), height: Math.max(r.y + r.height, i.y + i.height) - Math.min(r.y, i.y) }, r = s)));\n }this.setScale(Math.min(this.width / r.width, this.height / r.height), -(r.x + r.width / 2), -(r.y + r.height / 2), !0);\n } else e *= this.baseScale, this.setScale(e, -t * this.defaultWidth, -n * this.defaultHeight, !0);\n }, getSelected: function getSelected(e) {\n var t,\n n = [];for (t in this[e]) {\n this[e][t].element.isSelected && n.push(t);\n }return n;\n }, getSelectedRegions: function getSelectedRegions() {\n return this.getSelected(\"regions\");\n }, getSelectedMarkers: function getSelectedMarkers() {\n return this.getSelected(\"markers\");\n }, setSelected: function setSelected(e, t) {\n var n;(typeof t === \"undefined\" ? \"undefined\" : _typeof(t)) != \"object\" && (t = [t]);if (jvm.$.isArray(t)) for (n = 0; n < t.length; n++) {\n this[e][t[n]].element.setSelected(!0);\n } else for (n in t) {\n this[e][n].element.setSelected(!!t[n]);\n }\n }, setSelectedRegions: function setSelectedRegions(e) {\n this.setSelected(\"regions\", e);\n }, setSelectedMarkers: function setSelectedMarkers(e) {\n this.setSelected(\"markers\", e);\n }, clearSelected: function clearSelected(e) {\n var t = {},\n n = this.getSelected(e),\n r;for (r = 0; r < n.length; r++) {\n t[n[r]] = !1;\n }this.setSelected(e, t);\n }, clearSelectedRegions: function clearSelectedRegions() {\n this.clearSelected(\"regions\");\n }, clearSelectedMarkers: function clearSelectedMarkers() {\n this.clearSelected(\"markers\");\n }, getMapObject: function getMapObject() {\n return this;\n }, getRegionName: function getRegionName(e) {\n return this.mapData.paths[e].name;\n }, createRegions: function createRegions() {\n var e,\n t,\n n = this;for (e in this.mapData.paths) {\n t = this.canvas.addPath({ d: this.mapData.paths[e].path, \"data-code\": e }, jvm.$.extend(!0, {}, this.params.regionStyle)), jvm.$(t.node).bind(\"selected\", function (e, t) {\n n.container.trigger(\"regionSelected.jvectormap\", [jvm.$(this).attr(\"data-code\"), t, n.getSelectedRegions()]);\n }), t.addClass(\"jvectormap-region jvectormap-element\"), this.regions[e] = { element: t, config: this.mapData.paths[e] };\n }\n }, createMarkers: function createMarkers(e) {\n var t,\n n,\n r,\n i,\n s,\n o = this;this.markersGroup = this.markersGroup || this.canvas.addGroup();if (jvm.$.isArray(e)) {\n s = e.slice(), e = {};for (t = 0; t < s.length; t++) {\n e[t] = s[t];\n }\n }for (t in e) {\n i = e[t] instanceof Array ? { latLng: e[t] } : e[t], r = this.getMarkerPosition(i), r !== !1 && (n = this.canvas.addCircle({ \"data-index\": t, cx: r.x, cy: r.y }, jvm.$.extend(!0, {}, this.params.markerStyle, { initial: i.style || {} }), this.markersGroup), n.addClass(\"jvectormap-marker jvectormap-element\"), jvm.$(n.node).bind(\"selected\", function (e, t) {\n o.container.trigger(\"markerSelected.jvectormap\", [jvm.$(this).attr(\"data-index\"), t, o.getSelectedMarkers()]);\n }), this.markers[t] && this.removeMarkers([t]), this.markers[t] = { element: n, config: i });\n }\n }, repositionMarkers: function repositionMarkers() {\n var e, t;for (e in this.markers) {\n t = this.getMarkerPosition(this.markers[e].config), t !== !1 && this.markers[e].element.setStyle({ cx: t.x, cy: t.y });\n }\n }, getMarkerPosition: function getMarkerPosition(e) {\n return jvm.WorldMap.maps[this.params.map].projection ? this.latLngToPoint.apply(this, e.latLng || [0, 0]) : { x: e.coords[0] * this.scale + this.transX * this.scale, y: e.coords[1] * this.scale + this.transY * this.scale };\n }, addMarker: function addMarker(e, t, n) {\n var r = {},\n i = [],\n s,\n o,\n n = n || [];r[e] = t;for (o = 0; o < n.length; o++) {\n s = {}, s[e] = n[o], i.push(s);\n }this.addMarkers(r, i);\n }, addMarkers: function addMarkers(e, t) {\n var n;t = t || [], this.createMarkers(e);for (n = 0; n < t.length; n++) {\n this.series.markers[n].setValues(t[n] || {});\n }\n }, removeMarkers: function removeMarkers(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.markers[e[t]].element.remove(), delete this.markers[e[t]];\n }\n }, removeAllMarkers: function removeAllMarkers() {\n var e,\n t = [];for (e in this.markers) {\n t.push(e);\n }this.removeMarkers(t);\n }, latLngToPoint: function latLngToPoint(e, t) {\n var n,\n r = jvm.WorldMap.maps[this.params.map].projection,\n i = r.centralMeridian,\n s = this.width - this.baseTransX * 2 * this.baseScale,\n o = this.height - this.baseTransY * 2 * this.baseScale,\n u,\n a,\n f = this.scale / this.baseScale;return t < -180 + i && (t += 360), n = jvm.Proj[r.type](e, t, i), u = this.getInsetForPoint(n.x, n.y), u ? (a = u.bbox, n.x = (n.x - a[0].x) / (a[1].x - a[0].x) * u.width * this.scale, n.y = (n.y - a[0].y) / (a[1].y - a[0].y) * u.height * this.scale, { x: n.x + this.transX * this.scale + u.left * this.scale, y: n.y + this.transY * this.scale + u.top * this.scale }) : !1;\n }, pointToLatLng: function pointToLatLng(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].projection,\n r = n.centralMeridian,\n i = jvm.WorldMap.maps[this.params.map].insets,\n s,\n o,\n u,\n a,\n f;for (s = 0; s < i.length; s++) {\n o = i[s], u = o.bbox, a = e - (this.transX * this.scale + o.left * this.scale), f = t - (this.transY * this.scale + o.top * this.scale), a = a / (o.width * this.scale) * (u[1].x - u[0].x) + u[0].x, f = f / (o.height * this.scale) * (u[1].y - u[0].y) + u[0].y;if (a > u[0].x && a < u[1].x && f > u[0].y && f < u[1].y) return jvm.Proj[n.type + \"_inv\"](a, -f, r);\n }return !1;\n }, getInsetForPoint: function getInsetForPoint(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].insets,\n r,\n i;for (r = 0; r < n.length; r++) {\n i = n[r].bbox;if (e > i[0].x && e < i[1].x && t > i[0].y && t < i[1].y) return n[r];\n }\n }, createSeries: function createSeries() {\n var e, t;this.series = { markers: [], regions: [] };for (t in this.params.series) {\n for (e = 0; e < this.params.series[t].length; e++) {\n this.series[t][e] = new jvm.DataSeries(this.params.series[t][e], this[t]);\n }\n }\n }, remove: function remove() {\n this.label.remove(), this.container.remove(), jvm.$(window).unbind(\"resize\", this.onResize);\n } }, jvm.WorldMap.maps = {}, jvm.WorldMap.defaultParams = { map: \"world_mill_en\", backgroundColor: \"#505050\", zoomButtons: !0, zoomOnScroll: !0, zoomMax: 8, zoomMin: 1, zoomStep: 1.6, regionsSelectable: !1, markersSelectable: !1, bindTouchEvents: !0, regionStyle: { initial: { fill: \"white\", \"fill-opacity\": 1, stroke: \"none\", \"stroke-width\": 0, \"stroke-opacity\": 1 }, hover: { \"fill-opacity\": .8 }, selected: { fill: \"yellow\" }, selectedHover: {} }, markerStyle: { initial: { fill: \"grey\", stroke: \"#505050\", \"fill-opacity\": 1, \"stroke-width\": 1, \"stroke-opacity\": 1, r: 5 }, hover: { stroke: \"black\", \"stroke-width\": 2 }, selected: { fill: \"blue\" }, selectedHover: {} } }, jvm.WorldMap.apiEvents = { onRegionLabelShow: \"regionLabelShow\", onRegionOver: \"regionOver\", onRegionOut: \"regionOut\", onRegionClick: \"regionClick\", onRegionSelected: \"regionSelected\", onMarkerLabelShow: \"markerLabelShow\", onMarkerOver: \"markerOver\", onMarkerOut: \"markerOut\", onMarkerClick: \"markerClick\", onMarkerSelected: \"markerSelected\", onViewportChange: \"viewportChange\" };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtMS4yLjIubWluLmpzPzQ3MjEiXSwibmFtZXMiOlsiZSIsInQiLCJzZXQiLCJjb2xvcnMiLCJ2YWx1ZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzY2FsZUNvbG9ycyIsIm5vcm1hbGl6ZUZ1bmN0aW9uIiwiZm9jdXMiLCJnZXQiLCJzZWxlY3RlZFJlZ2lvbnMiLCJzZWxlY3RlZE1hcmtlcnMiLCJtYXBPYmplY3QiLCJyZWdpb25OYW1lIiwiZm4iLCJ2ZWN0b3JNYXAiLCJuIiwiciIsImkiLCJjaGlsZHJlbiIsImRhdGEiLCJqdm0iLCJXb3JsZE1hcCIsIm1hcHMiLCJhcmd1bWVudHMiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0ciIsImFwcGx5IiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJjb250YWluZXIiLCJqUXVlcnkiLCJ3aW5kb3ciLCJldmVudCIsInMiLCJvIiwidSIsImZpeCIsInR5cGUiLCJ3aGVlbERlbHRhIiwiZGV0YWlsIiwiYXhpcyIsInVuZGVmaW5lZCIsIkhPUklaT05UQUxfQVhJUyIsIndoZWVsRGVsdGFZIiwid2hlZWxEZWx0YVgiLCJ1bnNoaWZ0IiwiZGlzcGF0Y2giLCJoYW5kbGUiLCJmaXhIb29rcyIsImxlbmd0aCIsIm1vdXNlSG9va3MiLCJzcGVjaWFsIiwibW91c2V3aGVlbCIsInNldHVwIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ubW91c2V3aGVlbCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV4dGVuZCIsImJpbmQiLCJ0cmlnZ2VyIiwidW5tb3VzZXdoZWVsIiwidW5iaW5kIiwiaW5oZXJpdHMiLCJjb25zdHJ1Y3RvciIsInBhcmVudENsYXNzIiwibWl4aW4iLCJoYXNPd25Qcm9wZXJ0eSIsIm1pbiIsIk51bWJlciIsIk1BWF9WQUxVRSIsIm1heCIsIk1JTl9WQUxVRSIsImtleXMiLCJwdXNoIiwiJCIsIkFic3RyYWN0RWxlbWVudCIsIm5vZGUiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsInByb3BlcnRpZXMiLCJhcHBseUF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmUiLCJBYnN0cmFjdENhbnZhc0VsZW1lbnQiLCJzZXRTaXplIiwicm9vdEVsZW1lbnQiLCJjbGFzc1ByZWZpeCIsImFwcGVuZENoaWxkIiwiYWRkIiwiY2FudmFzIiwiYWRkUGF0aCIsImFkZENpcmNsZSIsImFkZEdyb3VwIiwiQWJzdHJhY3RTaGFwZUVsZW1lbnQiLCJzdHlsZSIsImN1cnJlbnQiLCJpc0hvdmVyZWQiLCJpc1NlbGVjdGVkIiwidXBkYXRlU3R5bGUiLCJzZXRIb3ZlcmVkIiwic2V0U2VsZWN0ZWQiLCJzZXRTdHlsZSIsIm1lcmdlU3R5bGVzIiwiaW5pdGlhbCIsImhvdmVyIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEhvdmVyIiwiU1ZHRWxlbWVudCIsInN2Z25zIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhZGRDbGFzcyIsImdldEVsZW1lbnRDdHIiLCJnZXRCQm94IiwiU1ZHR3JvdXBFbGVtZW50IiwiU1ZHQ2FudmFzRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0IiwiYXBwbHlUcmFuc2Zvcm1QYXJhbXMiLCJzY2FsZSIsInRyYW5zWCIsInRyYW5zWSIsIlNWR1NoYXBlRWxlbWVudCIsIlNWR1BhdGhFbGVtZW50IiwiU1ZHQ2lyY2xlRWxlbWVudCIsIlZNTEVsZW1lbnQiLCJWTUxJbml0aWFsaXplZCIsImluaXRpYWxpemVWTUwiLCJuYW1lc3BhY2VzIiwicnZtbCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJhZGRSdWxlIiwieCIsInBvc2l0aW9uIiwibGVmdCIsInkiLCJ0b3AiLCJWTUxHcm91cEVsZW1lbnQiLCJjb29yZG9yaWdpbiIsIlZNTENhbnZhc0VsZW1lbnQiLCJjb29yZHNpemUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIlZNTFNoYXBlRWxlbWVudCIsImZpbGxFbGVtZW50Iiwic3Ryb2tlRWxlbWVudCIsInN0cm9rZWQiLCJmaWxsY29sb3IiLCJvcGFjaXR5IiwiTWF0aCIsInJvdW5kIiwic3Ryb2tlY29sb3IiLCJwYXJzZUludCIsInN0cm9rZXdlaWdodCIsInBhdGgiLCJWTUxQYXRoRWxlbWVudCIsInBhdGhTdmdUb1ZtbCIsIm9uIiwibWF0cml4Iiwib2Zmc2V0IiwicmVwbGFjZSIsInNwbGl0Iiwic2hpZnQiLCJhIiwiZiIsImpvaW4iLCJWTUxDaXJjbGVFbGVtZW50IiwiVmVjdG9yQ2FudmFzIiwibW9kZSIsIlNWR0FuZ2xlIiwiaW1wbCIsIlNpbXBsZVNjYWxlIiwiZ2V0VmFsdWUiLCJPcmRpbmFsU2NhbGUiLCJOdW1lcmljU2NhbGUiLCJzZXRTY2FsZSIsInNldE5vcm1hbGl6ZUZ1bmN0aW9uIiwic2V0TWluIiwic2V0TWF4IiwiY2xlYXJNaW5WYWx1ZSIsIm5vcm1hbGl6ZSIsIm1pblZhbHVlIiwiY2xlYXJNYXhWYWx1ZSIsIm1heFZhbHVlIiwicG93IiwidmVjdG9yTGVuZ3RoIiwidmVjdG9yU3VidHJhY3QiLCJ2ZWN0b3JUb051bSIsInZlY3RvckFkZCIsInZlY3Rvck11bHQiLCJzcXJ0IiwiQ29sb3JTY2FsZSIsInJnYlRvQXJyYXkiLCJudW1Ub1JnYiIsImFycmF5VG9SZ2IiLCJ0b1N0cmluZyIsIkRhdGFTZXJpZXMiLCJhdHRyaWJ1dGUiLCJlbGVtZW50cyIsInBhcmFtcyIsImF0dHJpYnV0ZXMiLCJzZXRBdHRyaWJ1dGVzIiwiaXNBcnJheSIsInNldFZhbHVlcyIsImVsZW1lbnQiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJjbGVhciIsIlByb2oiLCJkZWdSYWQiLCJQSSIsInJhZERlZyIsInJhZGl1cyIsInNnbiIsIm1pbGwiLCJsb2ciLCJ0YW4iLCJtaWxsX2ludiIsImxhdCIsImF0YW4iLCJleHAiLCJsbmciLCJtZXJjIiwibWVyY19pbnYiLCJhZWEiLCJzaW4iLCJsIiwiY29zIiwiYyIsImgiLCJwIiwiYWVhX2ludiIsImFzaW4iLCJsY2MiLCJsY2NfaW52IiwiZGVmYXVsdFBhcmFtcyIsIm1hcCIsIkVycm9yIiwibWFwRGF0YSIsIm1hcmtlcnMiLCJyZWdpb25zIiwicmVnaW9uc0NvbG9ycyIsInJlZ2lvbnNEYXRhIiwiY3NzIiwiYXBwZW5kIiwib3ZlcmZsb3ciLCJkZWZhdWx0V2lkdGgiLCJkZWZhdWx0SGVpZ2h0Iiwic2V0QmFja2dyb3VuZENvbG9yIiwib25SZXNpemUiLCJyZXNpemUiLCJhcGlFdmVudHMiLCJEb2N1bWVudFRvdWNoIiwiYmluZFRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lclRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lckV2ZW50cyIsImJpbmRFbGVtZW50RXZlbnRzIiwiY3JlYXRlTGFiZWwiLCJ6b29tQnV0dG9ucyIsImJpbmRab29tQnV0dG9ucyIsImNyZWF0ZVJlZ2lvbnMiLCJjcmVhdGVNYXJrZXJzIiwiZm9jdXNPbiIsInNldEZvY3VzIiwic2V0U2VsZWN0ZWRSZWdpb25zIiwic2V0U2VsZWN0ZWRNYXJrZXJzIiwic2VyaWVzIiwiY3JlYXRlU2VyaWVzIiwiYmFzZVRyYW5zWCIsImJhc2VUcmFuc1kiLCJiYXNlU2NhbGUiLCJhYnMiLCJhcHBseVRyYW5zZm9ybSIsInJlc2V0IiwicmVwb3NpdGlvbk1hcmtlcnMiLCJtb3VzZW1vdmUiLCJwYWdlWCIsInBhZ2VZIiwibW91c2Vkb3duIiwibW91c2V1cCIsInpvb21PblNjcm9sbCIsImxhYmVsIiwiaGlkZSIsInByZXZlbnREZWZhdWx0Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJkZWxlZ2F0ZSIsImF0dHIiLCJiYXNlVmFsIiwiaW5kZXhPZiIsInBhdGhzIiwiY29uZmlnIiwiRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJ0ZXh0Iiwic2hvdyIsImxhYmVsV2lkdGgiLCJsYWJlbEhlaWdodCIsInJlZ2lvbnNTZWxlY3RhYmxlIiwibWFya2Vyc1NlbGVjdGFibGUiLCJjbGVhclNlbGVjdGVkIiwiYXBwZW5kVG8iLCJodG1sIiwiZmluZCIsImNsaWNrIiwiem9vbVN0ZXAiLCJpcyIsInpvb21NYXgiLCJ6b29tTWluIiwiZ2V0U2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFJlZ2lvbnMiLCJnZXRTZWxlY3RlZE1hcmtlcnMiLCJjbGVhclNlbGVjdGVkUmVnaW9ucyIsImNsZWFyU2VsZWN0ZWRNYXJrZXJzIiwiZ2V0TWFwT2JqZWN0IiwiZ2V0UmVnaW9uTmFtZSIsImQiLCJyZWdpb25TdHlsZSIsIm1hcmtlcnNHcm91cCIsImxhdExuZyIsImdldE1hcmtlclBvc2l0aW9uIiwiY3giLCJjeSIsIm1hcmtlclN0eWxlIiwicmVtb3ZlTWFya2VycyIsInByb2plY3Rpb24iLCJsYXRMbmdUb1BvaW50IiwiY29vcmRzIiwiYWRkTWFya2VyIiwiYWRkTWFya2VycyIsInJlbW92ZUFsbE1hcmtlcnMiLCJjZW50cmFsTWVyaWRpYW4iLCJnZXRJbnNldEZvclBvaW50IiwiYmJveCIsInBvaW50VG9MYXRMbmciLCJpbnNldHMiLCJmaWxsIiwic3Ryb2tlIiwib25SZWdpb25MYWJlbFNob3ciLCJvblJlZ2lvbk92ZXIiLCJvblJlZ2lvbk91dCIsIm9uUmVnaW9uQ2xpY2siLCJvblJlZ2lvblNlbGVjdGVkIiwib25NYXJrZXJMYWJlbFNob3ciLCJvbk1hcmtlck92ZXIiLCJvbk1hcmtlck91dCIsIm9uTWFya2VyQ2xpY2siLCJvbk1hcmtlclNlbGVjdGVkIiwib25WaWV3cG9ydENoYW5nZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUcsQ0FBQyxVQUFTQSxDQUFULEVBQVc7QUFBQyxNQUFJQyxJQUFFLEVBQUNDLEtBQUksRUFBQ0MsUUFBTyxDQUFSLEVBQVVDLFFBQU8sQ0FBakIsRUFBbUJDLGlCQUFnQixDQUFuQyxFQUFxQ0MsYUFBWSxDQUFqRCxFQUFtREMsbUJBQWtCLENBQXJFLEVBQXVFQyxPQUFNLENBQTdFLEVBQUwsRUFBcUZDLEtBQUksRUFBQ0MsaUJBQWdCLENBQWpCLEVBQW1CQyxpQkFBZ0IsQ0FBbkMsRUFBcUNDLFdB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SyxFQUQraS9CLEVBQTl6NkIsRUFDOWpFMUYsSUFBSUMsUUFBSixDQUFheU8sU0FBYixHQUF1QixFQUFDdUYsbUJBQWtCLGlCQUFuQixFQUFxQ0MsY0FBYSxZQUFsRCxFQUErREMsYUFBWSxXQUEzRSxFQUF1RkMsZUFBYyxhQUFyRyxFQUFtSEMsa0JBQWlCLGdCQUFwSSxFQUFxSkMsbUJBQWtCLGlCQUF2SyxFQUF5TEMsY0FBYSxZQUF0TSxFQUFtTkMsYUFBWSxXQUEvTixFQUEyT0MsZUFBYyxhQUF6UCxFQUF1UUMsa0JBQWlCLGdCQUF4UixFQUF5U0Msa0JBQWlCLGdCQUExVCxFQUR1aUUiLCJmaWxlIjoiNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGpWZWN0b3JNYXAgdmVyc2lvbiAxLjIuMlxuICpcbiAqIENvcHlyaWdodCAyMDExLTIwMTMsIEtpcmlsbCBMZWJlZGV2XG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICovKGZ1bmN0aW9uKGUpe3ZhciB0PXtzZXQ6e2NvbG9yczoxLHZhbHVlczoxLGJhY2tncm91bmRDb2xvcjoxLHNjYWxlQ29sb3JzOjEsbm9ybWFsaXplRnVuY3Rpb246MSxmb2N1czoxfSxnZXQ6e3NlbGVjdGVkUmVnaW9uczoxLHNlbGVjdGVkTWFya2VyczoxLG1hcE9iamVjdDoxLHJlZ2lvbk5hbWU6MX19O2UuZm4udmVjdG9yTWFwPWZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxuPXRoaXMuY2hpbGRyZW4oXCIuanZlY3Rvcm1hcC1jb250YWluZXJcIikuZGF0YShcIm1hcE9iamVjdFwiKTtpZihlPT09XCJhZGRNYXBcIilqdm0uV29ybGRNYXAubWFwc1thcmd1bWVudHNbMV1dPWFyZ3VtZW50c1syXTtlbHNle2lmKCEoZSE9PVwic2V0XCImJmUhPT1cImdldFwifHwhdFtlXVthcmd1bWVudHNbMV1dKSlyZXR1cm4gcj1hcmd1bWVudHNbMV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYXJndW1lbnRzWzFdLnN1YnN0cigxKSxuW2Urcl0uYXBwbHkobixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2U9ZXx8e30sZS5jb250YWluZXI9dGhpcyxuPW5ldyBqdm0uV29ybGRNYXAoZSl9cmV0dXJuIHRoaXN9fSkoalF1ZXJ5KSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3ZhciBuPXR8fHdpbmRvdy5ldmVudCxyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGk9MCxzPSEwLG89MCx1PTA7cmV0dXJuIHQ9ZS5ldmVudC5maXgobiksdC50eXBlPVwibW91c2V3aGVlbFwiLG4ud2hlZWxEZWx0YSYmKGk9bi53aGVlbERlbHRhLzEyMCksbi5kZXRhaWwmJihpPS1uLmRldGFpbC8zKSx1PWksbi5heGlzIT09dW5kZWZpbmVkJiZuLmF4aXM9PT1uLkhPUklaT05UQUxfQVhJUyYmKHU9MCxvPS0xKmkpLG4ud2hlZWxEZWx0YVkhPT11bmRlZmluZWQmJih1PW4ud2hlZWxEZWx0YVkvMTIwKSxuLndoZWVsRGVsdGFYIT09dW5kZWZpbmVkJiYobz0tMSpuLndoZWVsRGVsdGFYLzEyMCksci51bnNoaWZ0KHQsaSxvLHUpLChlLmV2ZW50LmRpc3BhdGNofHxlLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcyxyKX12YXIgdD1bXCJET01Nb3VzZVNjcm9sbFwiLFwibW91c2V3aGVlbFwiXTtpZihlLmV2ZW50LmZpeEhvb2tzKWZvcih2YXIgbj10Lmxlbmd0aDtuOyllLmV2ZW50LmZpeEhvb2tzW3RbLS1uXV09ZS5ldmVudC5tb3VzZUhvb2tzO2UuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsPXtzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcilmb3IodmFyIGU9dC5sZW5ndGg7ZTspdGhpcy5hZGRFdmVudExpc3RlbmVyKHRbLS1lXSxyLCExKTtlbHNlIHRoaXMub25tb3VzZXdoZWVsPXJ9LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKWZvcih2YXIgZT10Lmxlbmd0aDtlOyl0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFstLWVdLHIsITEpO2Vsc2UgdGhpcy5vbm1vdXNld2hlZWw9bnVsbH19LGUuZm4uZXh0ZW5kKHttb3VzZXdoZWVsOmZ1bmN0aW9uKGUpe3JldHVybiBlP3RoaXMuYmluZChcIm1vdXNld2hlZWxcIixlKTp0aGlzLnRyaWdnZXIoXCJtb3VzZXdoZWVsXCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudW5iaW5kKFwibW91c2V3aGVlbFwiLGUpfX0pfShqUXVlcnkpO3ZhciBqdm09e2luaGVyaXRzOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe31uLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucGFyZW50Q2xhc3M9dH0sbWl4aW46ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IobiBpbiB0LnByb3RvdHlwZSl0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShuKSYmKGUucHJvdG90eXBlW25dPXQucHJvdG90eXBlW25dKX0sbWluOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NQVhfVkFMVUUsbjtpZihlIGluc3RhbmNlb2YgQXJyYXkpZm9yKG49MDtuPGUubGVuZ3RoO24rKyllW25dPHQmJih0PWVbbl0pO2Vsc2UgZm9yKG4gaW4gZSllW25dPHQmJih0PWVbbl0pO3JldHVybiB0fSxtYXg6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyLk1JTl9WQUxVRSxuO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlmb3Iobj0wO248ZS5sZW5ndGg7bisrKWVbbl0+dCYmKHQ9ZVtuXSk7ZWxzZSBmb3IobiBpbiBlKWVbbl0+dCYmKHQ9ZVtuXSk7cmV0dXJuIHR9LGtleXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbjtmb3IobiBpbiBlKXQucHVzaChuKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLG4scjtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe2U9YXJndW1lbnRzW3JdO2ZvcihuIGluIGUpdC5wdXNoKGVbbl0pfXJldHVybiB0fX07anZtLiQ9alF1ZXJ5LGp2bS5BYnN0cmFjdEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGU9dGhpcy5jcmVhdGVFbGVtZW50KGUpLHRoaXMubmFtZT1lLHRoaXMucHJvcGVydGllcz17fSx0JiZ0aGlzLnNldCh0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYodHlwZW9mIGU9PVwib2JqZWN0XCIpZm9yKG4gaW4gZSl0aGlzLnByb3BlcnRpZXNbbl09ZVtuXSx0aGlzLmFwcGx5QXR0cihuLGVbbl0pO2Vsc2UgdGhpcy5wcm9wZXJ0aWVzW2VdPXQsdGhpcy5hcHBseUF0dHIoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BlcnRpZXNbZV19LGp2bS5BYnN0cmFjdEVsZW1lbnQucHJvdG90eXBlLmFwcGx5QXR0cj1mdW5jdGlvbihlLHQpe3RoaXMubm9kZS5zZXRBdHRyaWJ1dGUoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7anZtLiQodGhpcy5ub2RlKS5yZW1vdmUoKX0sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dGhpcy5jb250YWluZXI9ZSx0aGlzLnNldFNpemUodCxuKSx0aGlzLnJvb3RFbGVtZW50PW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkdyb3VwRWxlbWVudFwiXSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudC5ub2RlKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXMucm9vdEVsZW1lbnQsdC5hZGQoZSksZS5jYW52YXM9dGhpc30sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5wcm90b3R5cGUuYWRkUGF0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IGp2bVt0aGlzLmNsYXNzUHJlZml4K1wiUGF0aEVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRDaXJjbGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkNpcmNsZUVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRHcm91cD1mdW5jdGlvbihlKXt2YXIgdD1uZXcganZtW3RoaXMuY2xhc3NQcmVmaXgrXCJHcm91cEVsZW1lbnRcIl07cmV0dXJuIGU/ZS5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSk6dGhpcy5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSksdC5jYW52YXM9dGhpcyx0fSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3R5bGU9bnx8e30sdGhpcy5zdHlsZS5jdXJyZW50PXt9LHRoaXMuaXNIb3ZlcmVkPSExLHRoaXMuaXNTZWxlY3RlZD0hMSx0aGlzLnVwZGF0ZVN0eWxlKCl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0SG92ZXJlZD1mdW5jdGlvbihlKXt0aGlzLmlzSG92ZXJlZCE9PWUmJih0aGlzLmlzSG92ZXJlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7dGhpcy5pc1NlbGVjdGVkIT09ZSYmKHRoaXMuaXNTZWxlY3RlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSxqdm0uJCh0aGlzLm5vZGUpLnRyaWdnZXIoXCJzZWxlY3RlZFwiLFtlXSkpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307dHlwZW9mIGU9PVwib2JqZWN0XCI/bj1lOm5bZV09dCxqdm0uJC5leHRlbmQodGhpcy5zdHlsZS5jdXJyZW50LG4pLHRoaXMudXBkYXRlU3R5bGUoKX0sanZtLkFic3RyYWN0U2hhcGVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVTdHlsZT1mdW5jdGlvbigpe3ZhciBlPXt9O2p2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuaW5pdGlhbCksanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5jdXJyZW50KSx0aGlzLmlzSG92ZXJlZCYmanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5ob3ZlciksdGhpcy5pc1NlbGVjdGVkJiYoanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5zZWxlY3RlZCksdGhpcy5pc0hvdmVyZWQmJmp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuc2VsZWN0ZWRIb3ZlcikpLHRoaXMuc2V0KGUpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQubWVyZ2VTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjt0PXR8fHt9O2ZvcihuIGluIHQpdFtuXT09PW51bGw/ZGVsZXRlIGVbbl06ZVtuXT10W25dfSxqdm0uU1ZHRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdFbGVtZW50LnBhcmVudENsYXNzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sanZtLmluaGVyaXRzKGp2bS5TVkdFbGVtZW50LGp2bS5BYnN0cmFjdEVsZW1lbnQpLGp2bS5TVkdFbGVtZW50LnN2Z25zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp2bS5TVkdFbGVtZW50LnN2Z25zLGUpfSxqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsZSl9LGp2bS5TVkdFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJTVkdcIitlXX0sanZtLlNWR0VsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldEJCb3goKX0sanZtLlNWR0dyb3VwRWxlbWVudD1mdW5jdGlvbigpe2p2bS5TVkdHcm91cEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiZ1wiKX0sanZtLmluaGVyaXRzKGp2bS5TVkdHcm91cEVsZW1lbnQsanZtLlNWR0VsZW1lbnQpLGp2bS5TVkdHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlNWR0NhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJTVkdcIixqdm0uU1ZHQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJzdmdcIiksanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHQ2FudmFzRWxlbWVudCxqdm0uU1ZHRWxlbWVudCksanZtLm1peGluKGp2bS5TVkdDYW52YXNFbGVtZW50LGp2bS5BYnN0cmFjdENhbnZhc0VsZW1lbnQpLGp2bS5TVkdDYW52YXNFbGVtZW50LnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXQsdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsZSksdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLHQpfSxqdm0uU1ZHQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm1QYXJhbXM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2NhbGU9ZSx0aGlzLnRyYW5zWD10LHRoaXMudHJhbnNZPW4sdGhpcy5yb290RWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwic2NhbGUoXCIrZStcIikgdHJhbnNsYXRlKFwiK3QrXCIsIFwiK24rXCIpXCIpfSxqdm0uU1ZHU2hhcGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtqdm0uU1ZHU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLmNhbGwodGhpcyxlLHQpLGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHU2hhcGVFbGVtZW50LGp2bS5TVkdFbGVtZW50KSxqdm0ubWl4aW4oanZtLlNWR1NoYXBlRWxlbWVudCxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQpLGp2bS5TVkdQYXRoRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdQYXRoRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJwYXRoXCIsZSx0KSx0aGlzLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpfSxqdm0uaW5oZXJpdHMoanZtLlNWR1BhdGhFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5TVkdDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlNWR0NpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiY2lyY2xlXCIsZSx0KX0sanZtLmluaGVyaXRzKGp2bS5TVkdDaXJjbGVFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5WTUxFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWR8fGp2bS5WTUxFbGVtZW50LmluaXRpYWxpemVWTUwoKSxqdm0uVk1MRWxlbWVudC5wYXJlbnRDbGFzcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uVk1MRWxlbWVudCxqdm0uQWJzdHJhY3RFbGVtZW50KSxqdm0uVk1MRWxlbWVudC5WTUxJbml0aWFsaXplZD0hMSxqdm0uVk1MRWxlbWVudC5pbml0aWFsaXplVk1MPWZ1bmN0aW9uKCl7dHJ5e2RvY3VtZW50Lm5hbWVzcGFjZXMucnZtbHx8ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoXCJydm1sXCIsXCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbFwiKSxqdm0uVk1MRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIjxydm1sOlwiK2UrJyBjbGFzcz1cInJ2bWxcIj4nKX19Y2F0Y2goZSl7anZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrZSsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInJ2bWxcIj4nKX19ZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCgpLmFkZFJ1bGUoXCIucnZtbFwiLFwiYmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTClcIiksanZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWQ9ITB9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJWTUxcIitlXX0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKGUpe2p2bS4kKHRoaXMubm9kZSkuYWRkQ2xhc3MoZSl9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGVbZV09dH0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXt2YXIgZT1qdm0uJCh0aGlzLm5vZGUpO3JldHVybnt4OmUucG9zaXRpb24oKS5sZWZ0L3RoaXMuY2FudmFzLnNjYWxlLHk6ZS5wb3NpdGlvbigpLnRvcC90aGlzLmNhbnZhcy5zY2FsZSx3aWR0aDplLndpZHRoKCkvdGhpcy5jYW52YXMuc2NhbGUsaGVpZ2h0OmUuaGVpZ2h0KCkvdGhpcy5jYW52YXMuc2NhbGV9fSxqdm0uVk1MR3JvdXBFbGVtZW50PWZ1bmN0aW9uKCl7anZtLlZNTEdyb3VwRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSx0aGlzLm5vZGUuc3R5bGUubGVmdD1cIjBweFwiLHRoaXMubm9kZS5zdHlsZS50b3A9XCIwcHhcIix0aGlzLm5vZGUuY29vcmRvcmlnaW49XCIwIDBcIn0sanZtLmluaGVyaXRzKGp2bS5WTUxHcm91cEVsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5WTUxHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlZNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJWTUxcIixqdm0uVk1MQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm5vZGUuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwifSxqdm0uaW5oZXJpdHMoanZtLlZNTENhbnZhc0VsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5taXhpbihqdm0uVk1MQ2FudmFzRWxlbWVudCxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50KSxqdm0uVk1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzO3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMubm9kZS5zdHlsZS53aWR0aD1lK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQrXCJweFwiLHRoaXMubm9kZS5jb29yZHNpemU9ZStcIiBcIit0LHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiO2lmKHRoaXMucm9vdEVsZW1lbnQpe249dGhpcy5yb290RWxlbWVudC5ub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2hhcGVcIik7Zm9yKGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspbltpXS5jb29yZHNpemU9ZStcIiBcIit0LG5baV0uc3R5bGUud2lkdGg9ZStcInB4XCIsbltpXS5zdHlsZS5oZWlnaHQ9dCtcInB4XCI7cj10aGlzLm5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJncm91cFwiKTtmb3IoaT0wLHM9ci5sZW5ndGg7aTxzO2krKylyW2ldLmNvb3Jkc2l6ZT1lK1wiIFwiK3QscltpXS5zdHlsZS53aWR0aD1lK1wicHhcIixyW2ldLnN0eWxlLmhlaWdodD10K1wicHhcIn19LGp2bS5WTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybVBhcmFtcz1mdW5jdGlvbihlLHQsbil7dGhpcy5zY2FsZT1lLHRoaXMudHJhbnNYPXQsdGhpcy50cmFuc1k9bix0aGlzLnJvb3RFbGVtZW50Lm5vZGUuY29vcmRvcmlnaW49dGhpcy53aWR0aC10LXRoaXMud2lkdGgvMTAwK1wiLFwiKyh0aGlzLmhlaWdodC1uLXRoaXMuaGVpZ2h0LzEwMCksdGhpcy5yb290RWxlbWVudC5ub2RlLmNvb3Jkc2l6ZT10aGlzLndpZHRoL2UrXCIsXCIrdGhpcy5oZWlnaHQvZX0sanZtLlZNTFNoYXBlRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5WTUxTaGFwZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLGUsdCksdGhpcy5maWxsRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJmaWxsXCIpLHRoaXMuc3Ryb2tlRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJzdHJva2VcIiksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuZmlsbEVsZW1lbnQubm9kZSksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuc3Ryb2tlRWxlbWVudC5ub2RlKSx0aGlzLm5vZGUuc3Ryb2tlZD0hMSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLlZNTFNoYXBlRWxlbWVudCxqdm0uVk1MRWxlbWVudCksanZtLm1peGluKGp2bS5WTUxTaGFwZUVsZW1lbnQsanZtLkFic3RyYWN0U2hhcGVFbGVtZW50KSxqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZmlsbFwiOnRoaXMubm9kZS5maWxsY29sb3I9dDticmVhaztjYXNlXCJmaWxsLW9wYWNpdHlcIjp0aGlzLmZpbGxFbGVtZW50Lm5vZGUub3BhY2l0eT1NYXRoLnJvdW5kKHQqMTAwKStcIiVcIjticmVhaztjYXNlXCJzdHJva2VcIjp0PT09XCJub25lXCI/dGhpcy5ub2RlLnN0cm9rZWQ9ITE6dGhpcy5ub2RlLnN0cm9rZWQ9ITAsdGhpcy5ub2RlLnN0cm9rZWNvbG9yPXQ7YnJlYWs7Y2FzZVwic3Ryb2tlLW9wYWNpdHlcIjp0aGlzLnN0cm9rZUVsZW1lbnQubm9kZS5vcGFjaXR5PU1hdGgucm91bmQodCoxMDApK1wiJVwiO2JyZWFrO2Nhc2VcInN0cm9rZS13aWR0aFwiOnBhcnNlSW50KHQsMTApPT09MD90aGlzLm5vZGUuc3Ryb2tlZD0hMTp0aGlzLm5vZGUuc3Ryb2tlZD0hMCx0aGlzLm5vZGUuc3Ryb2tld2VpZ2h0PXQ7YnJlYWs7Y2FzZVwiZFwiOnRoaXMubm9kZS5wYXRoPWp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWwodCk7YnJlYWs7ZGVmYXVsdDpqdm0uVk1MU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLnByb3RvdHlwZS5hcHBseUF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sanZtLlZNTFBhdGhFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGp2bS5WTUxFbGVtZW50KFwic2tld1wiKTtqdm0uVk1MUGF0aEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwic2hhcGVcIixlLHQpLHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiLG4ubm9kZS5vbj0hMCxuLm5vZGUubWF0cml4PVwiMC4wMSwwLDAsMC4wMSwwLDBcIixuLm5vZGUub2Zmc2V0PVwiMCwwXCIsdGhpcy5ub2RlLmFwcGVuZENoaWxkKG4ubm9kZSl9LGp2bS5pbmhlcml0cyhqdm0uVk1MUGF0aEVsZW1lbnQsanZtLlZNTFNoYXBlRWxlbWVudCksanZtLlZNTFBhdGhFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtlPT09XCJkXCI/dGhpcy5ub2RlLnBhdGg9anZtLlZNTFBhdGhFbGVtZW50LnBhdGhTdmdUb1ZtbCh0KTpqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHIuY2FsbCh0aGlzLGUsdCl9LGp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWw9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPTAscj0wLGkscztyZXR1cm4gZT1lLnJlcGxhY2UoLygtP1xcZCspZSgtP1xcZCspL2csXCIwXCIpLGUucmVwbGFjZSgvKFtNbUxsSGhWdkNjU3NdKVxccyooKD86LT9cXGQqKD86XFwuXFxkKyk/XFxzKiw/XFxzKikrKS9nLGZ1bmN0aW9uKGUsdCxvLHUpe289by5yZXBsYWNlKC8oXFxkKS0vZyxcIiQxLC1cIikucmVwbGFjZSgvXlxccysvZyxcIlwiKS5yZXBsYWNlKC9cXHMrJC9nLFwiXCIpLnJlcGxhY2UoL1xccysvZyxcIixcIikuc3BsaXQoXCIsXCIpLG9bMF18fG8uc2hpZnQoKTtmb3IodmFyIGE9MCxmPW8ubGVuZ3RoO2E8ZjthKyspb1thXT1NYXRoLnJvdW5kKDEwMCpvW2FdKTtzd2l0Y2godCl7Y2FzZVwibVwiOnJldHVybiBuKz1vWzBdLHIrPW9bMV0sXCJ0XCIrby5qb2luKFwiLFwiKTtjYXNlXCJNXCI6cmV0dXJuIG49b1swXSxyPW9bMV0sXCJtXCIrby5qb2luKFwiLFwiKTtjYXNlXCJsXCI6cmV0dXJuIG4rPW9bMF0scis9b1sxXSxcInJcIitvLmpvaW4oXCIsXCIpO2Nhc2VcIkxcIjpyZXR1cm4gbj1vWzBdLHI9b1sxXSxcImxcIitvLmpvaW4oXCIsXCIpO2Nhc2VcImhcIjpyZXR1cm4gbis9b1swXSxcInJcIitvWzBdK1wiLDBcIjtjYXNlXCJIXCI6cmV0dXJuIG49b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwidlwiOnJldHVybiByKz1vWzBdLFwicjAsXCIrb1swXTtjYXNlXCJWXCI6cmV0dXJuIHI9b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwiY1wiOnJldHVybiBpPW4rb1tvLmxlbmd0aC00XSxzPXIrb1tvLmxlbmd0aC0zXSxuKz1vW28ubGVuZ3RoLTJdLHIrPW9bby5sZW5ndGgtMV0sXCJ2XCIrby5qb2luKFwiLFwiKTtjYXNlXCJDXCI6cmV0dXJuIGk9b1tvLmxlbmd0aC00XSxzPW9bby5sZW5ndGgtM10sbj1vW28ubGVuZ3RoLTJdLHI9b1tvLmxlbmd0aC0xXSxcImNcIitvLmpvaW4oXCIsXCIpO2Nhc2VcInNcIjpyZXR1cm4gby51bnNoaWZ0KHItcyksby51bnNoaWZ0KG4taSksaT1uK29bby5sZW5ndGgtNF0scz1yK29bby5sZW5ndGgtM10sbis9b1tvLmxlbmd0aC0yXSxyKz1vW28ubGVuZ3RoLTFdLFwidlwiK28uam9pbihcIixcIik7Y2FzZVwiU1wiOnJldHVybiBvLnVuc2hpZnQocityLXMpLG8udW5zaGlmdChuK24taSksaT1vW28ubGVuZ3RoLTRdLHM9b1tvLmxlbmd0aC0zXSxuPW9bby5sZW5ndGgtMl0scj1vW28ubGVuZ3RoLTFdLFwiY1wiK28uam9pbihcIixcIil9cmV0dXJuXCJcIn0pLnJlcGxhY2UoL3ovZyxcImVcIil9LGp2bS5WTUxDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwib3ZhbFwiLGUsdCl9LGp2bS5pbmhlcml0cyhqdm0uVk1MQ2lyY2xlRWxlbWVudCxqdm0uVk1MU2hhcGVFbGVtZW50KSxqdm0uVk1MQ2lyY2xlRWxlbWVudC5wcm90b3R5cGUuYXBwbHlBdHRyPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcInJcIjp0aGlzLm5vZGUuc3R5bGUud2lkdGg9dCoyK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQqMitcInB4XCIsdGhpcy5hcHBseUF0dHIoXCJjeFwiLHRoaXMuZ2V0KFwiY3hcIil8fDApLHRoaXMuYXBwbHlBdHRyKFwiY3lcIix0aGlzLmdldChcImN5XCIpfHwwKTticmVhaztjYXNlXCJjeFwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUubGVmdD10LSh0aGlzLmdldChcInJcIil8fDApK1wicHhcIjticmVhaztjYXNlXCJjeVwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUudG9wPXQtKHRoaXMuZ2V0KFwiclwiKXx8MCkrXCJweFwiO2JyZWFrO2RlZmF1bHQ6anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MucHJvdG90eXBlLmFwcGx5QXR0ci5jYWxsKHRoaXMsZSx0KX19LGp2bS5WZWN0b3JDYW52YXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm1vZGU9d2luZG93LlNWR0FuZ2xlP1wic3ZnXCI6XCJ2bWxcIix0aGlzLm1vZGU9PVwic3ZnXCI/dGhpcy5pbXBsPW5ldyBqdm0uU1ZHQ2FudmFzRWxlbWVudChlLHQsbik6dGhpcy5pbXBsPW5ldyBqdm0uVk1MQ2FudmFzRWxlbWVudChlLHQsbiksdGhpcy5pbXBsfSxqdm0uU2ltcGxlU2NhbGU9ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZT1lfSxqdm0uU2ltcGxlU2NhbGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxqdm0uT3JkaW5hbFNjYWxlPWZ1bmN0aW9uKGUpe3RoaXMuc2NhbGU9ZX0sanZtLk9yZGluYWxTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NhbGVbZV19LGp2bS5OdW1lcmljU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zY2FsZT1bXSx0PXR8fFwibGluZWFyXCIsZSYmdGhpcy5zZXRTY2FsZShlKSx0JiZ0aGlzLnNldE5vcm1hbGl6ZUZ1bmN0aW9uKHQpLG4mJnRoaXMuc2V0TWluKG4pLHImJnRoaXMuc2V0TWF4KHIpfSxqdm0uTnVtZXJpY1NjYWxlLnByb3RvdHlwZT17c2V0TWluOmZ1bmN0aW9uKGUpe3RoaXMuY2xlYXJNaW5WYWx1ZT1lLHR5cGVvZiB0aGlzLm5vcm1hbGl6ZT09XCJmdW5jdGlvblwiP3RoaXMubWluVmFsdWU9dGhpcy5ub3JtYWxpemUoZSk6dGhpcy5taW5WYWx1ZT1lfSxzZXRNYXg6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhck1heFZhbHVlPWUsdHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCI/dGhpcy5tYXhWYWx1ZT10aGlzLm5vcm1hbGl6ZShlKTp0aGlzLm1heFZhbHVlPWV9LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1bZVt0XV19LHNldE5vcm1hbGl6ZUZ1bmN0aW9uOmZ1bmN0aW9uKGUpe2U9PT1cInBvbHlub21pYWxcIj90aGlzLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSwuMil9OmU9PT1cImxpbmVhclwiP2RlbGV0ZSB0aGlzLm5vcm1hbGl6ZTp0aGlzLm5vcm1hbGl6ZT1lLHRoaXMuc2V0TWluKHRoaXMuY2xlYXJNaW5WYWx1ZSksdGhpcy5zZXRNYXgodGhpcy5jbGVhck1heFZhbHVlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0wLHIsaT0wLHM7dHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCImJihlPXRoaXMubm9ybWFsaXplKGUpKTtmb3IoaT0wO2k8dGhpcy5zY2FsZS5sZW5ndGgtMTtpKyspcj10aGlzLnZlY3Rvckxlbmd0aCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSksdC5wdXNoKHIpLG4rPXI7cz0odGhpcy5tYXhWYWx1ZS10aGlzLm1pblZhbHVlKS9uO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXSo9cztpPTAsZS09dGhpcy5taW5WYWx1ZTt3aGlsZShlLXRbaV0+PTApZS09dFtpXSxpKys7cmV0dXJuIGk9PXRoaXMuc2NhbGUubGVuZ3RoLTE/ZT10aGlzLnZlY3RvclRvTnVtKHRoaXMuc2NhbGVbaV0pOmU9dGhpcy52ZWN0b3JUb051bSh0aGlzLnZlY3RvckFkZCh0aGlzLnNjYWxlW2ldLHRoaXMudmVjdG9yTXVsdCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSxlL3RbaV0pKSksZX0sdmVjdG9yVG9OdW06ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspdCs9TWF0aC5yb3VuZChlW25dKSpNYXRoLnBvdygyNTYsZS5sZW5ndGgtbi0xKTtyZXR1cm4gdH0sdmVjdG9yU3VidHJhY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1lW3JdLXRbcl07cmV0dXJuIG59LHZlY3RvckFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0rdFtyXTtyZXR1cm4gbn0sdmVjdG9yTXVsdDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0qdDtyZXR1cm4gbn0sdmVjdG9yTGVuZ3RoOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl0qZVtuXTtyZXR1cm4gTWF0aC5zcXJ0KHQpfX0sanZtLkNvbG9yU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7anZtLkNvbG9yU2NhbGUucGFyZW50Q2xhc3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLkNvbG9yU2NhbGUsanZtLk51bWVyaWNTY2FsZSksanZtLkNvbG9yU2NhbGUucHJvdG90eXBlLnNldFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1qdm0uQ29sb3JTY2FsZS5yZ2JUb0FycmF5KGVbdF0pfSxqdm0uQ29sb3JTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGp2bS5Db2xvclNjYWxlLm51bVRvUmdiKGp2bS5Db2xvclNjYWxlLnBhcmVudENsYXNzLnByb3RvdHlwZS5nZXRWYWx1ZS5jYWxsKHRoaXMsZSkpfSxqdm0uQ29sb3JTY2FsZS5hcnJheVRvUmdiPWZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiLG4scjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKW49ZVtyXS50b1N0cmluZygxNiksdCs9bi5sZW5ndGg9PTE/XCIwXCIrbjpuO3JldHVybiB0fSxqdm0uQ29sb3JTY2FsZS5udW1Ub1JnYj1mdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoMTYpO3doaWxlKGUubGVuZ3RoPDYpZT1cIjBcIitlO3JldHVyblwiI1wiK2V9LGp2bS5Db2xvclNjYWxlLnJnYlRvQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5zdWJzdHIoMSksW3BhcnNlSW50KGUuc3Vic3RyKDAsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDIsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDQsMiksMTYpXX0sanZtLkRhdGFTZXJpZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjtlPWV8fHt9LGUuYXR0cmlidXRlPWUuYXR0cmlidXRlfHxcImZpbGxcIix0aGlzLmVsZW1lbnRzPXQsdGhpcy5wYXJhbXM9ZSxlLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyhlLmF0dHJpYnV0ZXMpLGp2bS4kLmlzQXJyYXkoZS5zY2FsZSk/KG49ZS5hdHRyaWJ1dGU9PT1cImZpbGxcInx8ZS5hdHRyaWJ1dGU9PT1cInN0cm9rZVwiP2p2bS5Db2xvclNjYWxlOmp2bS5OdW1lcmljU2NhbGUsdGhpcy5zY2FsZT1uZXcgbihlLnNjYWxlLGUubm9ybWFsaXplRnVuY3Rpb24sZS5taW4sZS5tYXgpKTplLnNjYWxlP3RoaXMuc2NhbGU9bmV3IGp2bS5PcmRpbmFsU2NhbGUoZS5zY2FsZSk6dGhpcy5zY2FsZT1uZXcganZtLlNpbXBsZVNjYWxlKGUuc2NhbGUpLHRoaXMudmFsdWVzPWUudmFsdWVzfHx7fSx0aGlzLnNldFZhbHVlcyh0aGlzLnZhbHVlcyl9LGp2bS5EYXRhU2VyaWVzLnByb3RvdHlwZT17c2V0QXR0cmlidXRlczpmdW5jdGlvbihlLHQpe3ZhciBuPWUscjtpZih0eXBlb2YgZT09XCJzdHJpbmdcIil0aGlzLmVsZW1lbnRzW2VdJiZ0aGlzLmVsZW1lbnRzW2VdLnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSx0KTtlbHNlIGZvcihyIGluIG4pdGhpcy5lbGVtZW50c1tyXSYmdGhpcy5lbGVtZW50c1tyXS5lbGVtZW50LnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSxuW3JdKX0sc2V0VmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NSU5fVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLHIsaSxzPXt9O2lmKHRoaXMuc2NhbGUgaW5zdGFuY2VvZiBqdm0uT3JkaW5hbFNjYWxlfHx0aGlzLnNjYWxlIGluc3RhbmNlb2YganZtLlNpbXBsZVNjYWxlKWZvcihpIGluIGUpZVtpXT9zW2ldPXRoaXMuc2NhbGUuZ2V0VmFsdWUoZVtpXSk6c1tpXT10aGlzLmVsZW1lbnRzW2ldLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdO2Vsc2V7aWYoIXRoaXMucGFyYW1zLm1pbnx8IXRoaXMucGFyYW1zLm1heCl7Zm9yKGkgaW4gZSlyPXBhcnNlRmxvYXQoZVtpXSkscj50JiYodD1lW2ldKSxyPG4mJihuPXIpO3RoaXMucGFyYW1zLm1pbnx8dGhpcy5zY2FsZS5zZXRNaW4obiksdGhpcy5wYXJhbXMubWF4fHx0aGlzLnNjYWxlLnNldE1heCh0KSx0aGlzLnBhcmFtcy5taW49bix0aGlzLnBhcmFtcy5tYXg9dH1mb3IoaSBpbiBlKXI9cGFyc2VGbG9hdChlW2ldKSxpc05hTihyKT9zW2ldPXRoaXMuZWxlbWVudHNbaV0uZWxlbWVudC5zdHlsZS5pbml0aWFsW3RoaXMucGFyYW1zLmF0dHJpYnV0ZV06c1tpXT10aGlzLnNjYWxlLmdldFZhbHVlKHIpfXRoaXMuc2V0QXR0cmlidXRlcyhzKSxqdm0uJC5leHRlbmQodGhpcy52YWx1ZXMsZSl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGUsdD17fTtmb3IoZSBpbiB0aGlzLnZhbHVlcyl0aGlzLmVsZW1lbnRzW2VdJiYodFtlXT10aGlzLmVsZW1lbnRzW2VdLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdKTt0aGlzLnNldEF0dHJpYnV0ZXModCksdGhpcy52YWx1ZXM9e319LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuc2NhbGUuc2V0U2NhbGUoZSksdGhpcy52YWx1ZXMmJnRoaXMuc2V0VmFsdWVzKHRoaXMudmFsdWVzKX0sc2V0Tm9ybWFsaXplRnVuY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZS5zZXROb3JtYWxpemVGdW5jdGlvbihlKSx0aGlzLnZhbHVlcyYmdGhpcy5zZXRWYWx1ZXModGhpcy52YWx1ZXMpfX0sanZtLlByb2o9e2RlZ1JhZDoxODAvTWF0aC5QSSxyYWREZWc6TWF0aC5QSS8xODAscmFkaXVzOjYzODEzNzIsc2duOmZ1bmN0aW9uKGUpe3JldHVybiBlPjA/MTplPDA/LTE6ZX0sbWlsbDpmdW5jdGlvbihlLHQsbil7cmV0dXJue3g6dGhpcy5yYWRpdXMqKHQtbikqdGhpcy5yYWREZWcseTotdGhpcy5yYWRpdXMqTWF0aC5sb2coTWF0aC50YW4oKDQ1Ky40KmUpKnRoaXMucmFkRGVnKSkvLjh9fSxtaWxsX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCp0L3RoaXMucmFkaXVzKSktNSpNYXRoLlBJLzgpKnRoaXMuZGVnUmFkLGxuZzoobip0aGlzLnJhZERlZytlL3RoaXMucmFkaXVzKSp0aGlzLmRlZ1JhZH19LG1lcmM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt4OnRoaXMucmFkaXVzKih0LW4pKnRoaXMucmFkRGVnLHk6LXRoaXMucmFkaXVzKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtlKk1hdGguUEkvMzYwKSl9fSxtZXJjX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5leHAodC90aGlzLnJhZGl1cykpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihuKnRoaXMucmFkRGVnK2UvdGhpcy5yYWRpdXMpKnRoaXMuZGVnUmFkfX0sYWVhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wLGk9bip0aGlzLnJhZERlZyxzPTI5LjUqdGhpcy5yYWREZWcsbz00NS41KnRoaXMucmFkRGVnLHU9ZSp0aGlzLnJhZERlZyxhPXQqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4ocykrTWF0aC5zaW4obykpLzIsbD1NYXRoLmNvcyhzKSpNYXRoLmNvcyhzKSsyKmYqTWF0aC5zaW4ocyksYz1mKihhLWkpLGg9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHUpKS9mLHA9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHIpKS9mO3JldHVybnt4OmgqTWF0aC5zaW4oYykqdGhpcy5yYWRpdXMseTotKHAtaCpNYXRoLmNvcyhjKSkqdGhpcy5yYWRpdXN9fSxhZWFfaW52OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lL3RoaXMucmFkaXVzLGk9dC90aGlzLnJhZGl1cyxzPTAsbz1uKnRoaXMucmFkRGVnLHU9MjkuNSp0aGlzLnJhZERlZyxhPTQ1LjUqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4odSkrTWF0aC5zaW4oYSkpLzIsbD1NYXRoLmNvcyh1KSpNYXRoLmNvcyh1KSsyKmYqTWF0aC5zaW4odSksYz1NYXRoLnNxcnQobC0yKmYqTWF0aC5zaW4ocykpL2YsaD1NYXRoLnNxcnQocipyKyhjLWkpKihjLWkpKSxwPU1hdGguYXRhbihyLyhjLWkpKTtyZXR1cm57bGF0Ok1hdGguYXNpbigobC1oKmgqZipmKS8oMipmKSkqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fSxsY2M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT1uKnRoaXMucmFkRGVnLHM9dCp0aGlzLnJhZERlZyxvPTMzKnRoaXMucmFkRGVnLHU9NDUqdGhpcy5yYWREZWcsYT1lKnRoaXMucmFkRGVnLGY9TWF0aC5sb2coTWF0aC5jb3MobykqKDEvTWF0aC5jb3ModSkpKS9NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSooMS9NYXRoLnRhbihNYXRoLlBJLzQrby8yKSkpLGw9TWF0aC5jb3MobykqTWF0aC5wb3coTWF0aC50YW4oTWF0aC5QSS80K28vMiksZikvZixjPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrYS8yKSxmKSxoPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrci8yKSxmKTtyZXR1cm57eDpjKk1hdGguc2luKGYqKHMtaSkpKnRoaXMucmFkaXVzLHk6LShoLWMqTWF0aC5jb3MoZioocy1pKSkpKnRoaXMucmFkaXVzfX0sbGNjX2ludjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS90aGlzLnJhZGl1cyxpPXQvdGhpcy5yYWRpdXMscz0wLG89bip0aGlzLnJhZERlZyx1PTMzKnRoaXMucmFkRGVnLGE9NDUqdGhpcy5yYWREZWcsZj1NYXRoLmxvZyhNYXRoLmNvcyh1KSooMS9NYXRoLmNvcyhhKSkpL01hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKigxL01hdGgudGFuKE1hdGguUEkvNCt1LzIpKSksbD1NYXRoLmNvcyh1KSpNYXRoLnBvdyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSxmKS9mLGM9bCpNYXRoLnBvdygxL01hdGgudGFuKE1hdGguUEkvNCtzLzIpLGYpLGg9dGhpcy5zZ24oZikqTWF0aC5zcXJ0KHIqcisoYy1pKSooYy1pKSkscD1NYXRoLmF0YW4oci8oYy1pKSk7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5wb3cobC9oLDEvZikpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fX0sanZtLldvcmxkTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbjt0aGlzLnBhcmFtcz1qdm0uJC5leHRlbmQoITAse30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXMsZSk7aWYoIWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0pdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdCB0byB1c2UgbWFwIHdoaWNoIHdhcyBub3QgbG9hZGVkOiBcIit0aGlzLnBhcmFtcy5tYXApO3RoaXMubWFwRGF0YT1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLHRoaXMubWFya2Vycz17fSx0aGlzLnJlZ2lvbnM9e30sdGhpcy5yZWdpb25zQ29sb3JzPXt9LHRoaXMucmVnaW9uc0RhdGE9e30sdGhpcy5jb250YWluZXI9anZtLiQoXCI8ZGl2PlwiKS5jc3Moe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIn0pLmFkZENsYXNzKFwianZlY3Rvcm1hcC1jb250YWluZXJcIiksdGhpcy5wYXJhbXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXIuZGF0YShcIm1hcE9iamVjdFwiLHRoaXMpLHRoaXMuY29udGFpbmVyLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSx0aGlzLmRlZmF1bHRXaWR0aD10aGlzLm1hcERhdGEud2lkdGgsdGhpcy5kZWZhdWx0SGVpZ2h0PXRoaXMubWFwRGF0YS5oZWlnaHQsdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IodGhpcy5wYXJhbXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLm9uUmVzaXplPWZ1bmN0aW9uKCl7dC5zZXRTaXplKCl9LGp2bS4kKHdpbmRvdykucmVzaXplKHRoaXMub25SZXNpemUpO2ZvcihuIGluIGp2bS5Xb3JsZE1hcC5hcGlFdmVudHMpdGhpcy5wYXJhbXNbbl0mJnRoaXMuY29udGFpbmVyLmJpbmQoanZtLldvcmxkTWFwLmFwaUV2ZW50c1tuXStcIi5qdmVjdG9ybWFwXCIsdGhpcy5wYXJhbXNbbl0pO3RoaXMuY2FudmFzPW5ldyBqdm0uVmVjdG9yQ2FudmFzKHRoaXMuY29udGFpbmVyWzBdLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLFwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fHdpbmRvdy5Eb2N1bWVudFRvdWNoJiZkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2g/dGhpcy5wYXJhbXMuYmluZFRvdWNoRXZlbnRzJiZ0aGlzLmJpbmRDb250YWluZXJUb3VjaEV2ZW50cygpOnRoaXMuYmluZENvbnRhaW5lckV2ZW50cygpLHRoaXMuYmluZEVsZW1lbnRFdmVudHMoKSx0aGlzLmNyZWF0ZUxhYmVsKCksdGhpcy5wYXJhbXMuem9vbUJ1dHRvbnMmJnRoaXMuYmluZFpvb21CdXR0b25zKCksdGhpcy5jcmVhdGVSZWdpb25zKCksdGhpcy5jcmVhdGVNYXJrZXJzKHRoaXMucGFyYW1zLm1hcmtlcnN8fHt9KSx0aGlzLnNldFNpemUoKSx0aGlzLnBhcmFtcy5mb2N1c09uJiYodHlwZW9mIHRoaXMucGFyYW1zLmZvY3VzT249PVwib2JqZWN0XCI/dGhpcy5zZXRGb2N1cy5jYWxsKHRoaXMsdGhpcy5wYXJhbXMuZm9jdXNPbi5zY2FsZSx0aGlzLnBhcmFtcy5mb2N1c09uLngsdGhpcy5wYXJhbXMuZm9jdXNPbi55KTp0aGlzLnNldEZvY3VzLmNhbGwodGhpcyx0aGlzLnBhcmFtcy5mb2N1c09uKSksdGhpcy5wYXJhbXMuc2VsZWN0ZWRSZWdpb25zJiZ0aGlzLnNldFNlbGVjdGVkUmVnaW9ucyh0aGlzLnBhcmFtcy5zZWxlY3RlZFJlZ2lvbnMpLHRoaXMucGFyYW1zLnNlbGVjdGVkTWFya2VycyYmdGhpcy5zZXRTZWxlY3RlZE1hcmtlcnModGhpcy5wYXJhbXMuc2VsZWN0ZWRNYXJrZXJzKSx0aGlzLnBhcmFtcy5zZXJpZXMmJnRoaXMuY3JlYXRlU2VyaWVzKCl9LGp2bS5Xb3JsZE1hcC5wcm90b3R5cGU9e3RyYW5zWDowLHRyYW5zWTowLHNjYWxlOjEsYmFzZVRyYW5zWDowLGJhc2VUcmFuc1k6MCxiYXNlU2NhbGU6MSx3aWR0aDowLGhlaWdodDowLHNldEJhY2tncm91bmRDb2xvcjpmdW5jdGlvbihlKXt0aGlzLmNvbnRhaW5lci5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsZSl9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZVNjYWxlO3RoaXMud2lkdGgvdGhpcy5oZWlnaHQ+dGhpcy5kZWZhdWx0V2lkdGgvdGhpcy5kZWZhdWx0SGVpZ2h0Pyh0aGlzLmJhc2VTY2FsZT10aGlzLmhlaWdodC90aGlzLmRlZmF1bHRIZWlnaHQsdGhpcy5iYXNlVHJhbnNYPU1hdGguYWJzKHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5iYXNlU2NhbGUpLygyKnRoaXMuYmFzZVNjYWxlKSk6KHRoaXMuYmFzZVNjYWxlPXRoaXMud2lkdGgvdGhpcy5kZWZhdWx0V2lkdGgsdGhpcy5iYXNlVHJhbnNZPU1hdGguYWJzKHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLmJhc2VTY2FsZSkvKDIqdGhpcy5iYXNlU2NhbGUpKSx0aGlzLnNjYWxlKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNYKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNZKj10aGlzLmJhc2VTY2FsZS9lfSxzZXRTaXplOmZ1bmN0aW9uKCl7dGhpcy53aWR0aD10aGlzLmNvbnRhaW5lci53aWR0aCgpLHRoaXMuaGVpZ2h0PXRoaXMuY29udGFpbmVyLmhlaWdodCgpLHRoaXMucmVzaXplKCksdGhpcy5jYW52YXMuc2V0U2l6ZSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LHJlc2V0OmZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoZSBpbiB0aGlzLnNlcmllcylmb3IodD0wO3Q8dGhpcy5zZXJpZXNbZV0ubGVuZ3RoO3QrKyl0aGlzLnNlcmllc1tlXVt0XS5jbGVhcigpO3RoaXMuc2NhbGU9dGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1g9dGhpcy5iYXNlVHJhbnNYLHRoaXMudHJhbnNZPXRoaXMuYmFzZVRyYW5zWSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGFwcGx5VHJhbnNmb3JtOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7dGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZTw9dGhpcy53aWR0aD8oZT0odGhpcy53aWR0aC10aGlzLmRlZmF1bHRXaWR0aCp0aGlzLnNjYWxlKS8oMip0aGlzLnNjYWxlKSxuPSh0aGlzLndpZHRoLXRoaXMuZGVmYXVsdFdpZHRoKnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKTooZT0wLG49KHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZSkvdGhpcy5zY2FsZSksdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGU8PXRoaXMuaGVpZ2h0Pyh0PSh0aGlzLmhlaWdodC10aGlzLmRlZmF1bHRIZWlnaHQqdGhpcy5zY2FsZSkvKDIqdGhpcy5zY2FsZSkscj0odGhpcy5oZWlnaHQtdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKToodD0wLHI9KHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLnNjYWxlKS90aGlzLnNjYWxlKSx0aGlzLnRyYW5zWT50P3RoaXMudHJhbnNZPXQ6dGhpcy50cmFuc1k8ciYmKHRoaXMudHJhbnNZPXIpLHRoaXMudHJhbnNYPmU/dGhpcy50cmFuc1g9ZTp0aGlzLnRyYW5zWDxuJiYodGhpcy50cmFuc1g9biksdGhpcy5jYW52YXMuYXBwbHlUcmFuc2Zvcm1QYXJhbXModGhpcy5zY2FsZSx0aGlzLnRyYW5zWCx0aGlzLnRyYW5zWSksdGhpcy5tYXJrZXJzJiZ0aGlzLnJlcG9zaXRpb25NYXJrZXJzKCksdGhpcy5jb250YWluZXIudHJpZ2dlcihcInZpZXdwb3J0Q2hhbmdlXCIsW3RoaXMuc2NhbGUvdGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1gsdGhpcy50cmFuc1ldKX0sYmluZENvbnRhaW5lckV2ZW50czpmdW5jdGlvbigpe3ZhciBlPSExLHQsbixyPXRoaXM7dGhpcy5jb250YWluZXIubW91c2Vtb3ZlKGZ1bmN0aW9uKGkpe3JldHVybiBlJiYoci50cmFuc1gtPSh0LWkucGFnZVgpL3Iuc2NhbGUsci50cmFuc1ktPShuLWkucGFnZVkpL3Iuc2NhbGUsci5hcHBseVRyYW5zZm9ybSgpLHQ9aS5wYWdlWCxuPWkucGFnZVkpLCExfSkubW91c2Vkb3duKGZ1bmN0aW9uKHIpe3JldHVybiBlPSEwLHQ9ci5wYWdlWCxuPXIucGFnZVksITF9KSxqdm0uJChcImJvZHlcIikubW91c2V1cChmdW5jdGlvbigpe2U9ITF9KSx0aGlzLnBhcmFtcy56b29tT25TY3JvbGwmJnRoaXMuY29udGFpbmVyLm1vdXNld2hlZWwoZnVuY3Rpb24oZSx0LG4saSl7dmFyIHM9anZtLiQoci5jb250YWluZXIpLm9mZnNldCgpLG89ZS5wYWdlWC1zLmxlZnQsdT1lLnBhZ2VZLXMudG9wLGE9TWF0aC5wb3coMS4zLGkpO3IubGFiZWwuaGlkZSgpLHIuc2V0U2NhbGUoci5zY2FsZSphLG8sdSksZS5wcmV2ZW50RGVmYXVsdCgpfSl9LGJpbmRDb250YWluZXJUb3VjaEV2ZW50czpmdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLHIsaSxzLG8sdSxhPWZ1bmN0aW9uKGEpe3ZhciBmPWEub3JpZ2luYWxFdmVudC50b3VjaGVzLGwsYyxoLHA7YS50eXBlPT1cInRvdWNoc3RhcnRcIiYmKHU9MCksZi5sZW5ndGg9PTE/KHU9PTEmJihoPW4udHJhbnNYLHA9bi50cmFuc1ksbi50cmFuc1gtPShyLWZbMF0ucGFnZVgpL24uc2NhbGUsbi50cmFuc1ktPShpLWZbMF0ucGFnZVkpL24uc2NhbGUsbi5hcHBseVRyYW5zZm9ybSgpLG4ubGFiZWwuaGlkZSgpLChoIT1uLnRyYW5zWHx8cCE9bi50cmFuc1kpJiZhLnByZXZlbnREZWZhdWx0KCkpLHI9ZlswXS5wYWdlWCxpPWZbMF0ucGFnZVkpOmYubGVuZ3RoPT0yJiYodT09Mj8oYz1NYXRoLnNxcnQoTWF0aC5wb3coZlswXS5wYWdlWC1mWzFdLnBhZ2VYLDIpK01hdGgucG93KGZbMF0ucGFnZVktZlsxXS5wYWdlWSwyKSkvdCxuLnNldFNjYWxlKGUqYyxzLG8pLG4ubGFiZWwuaGlkZSgpLGEucHJldmVudERlZmF1bHQoKSk6KGw9anZtLiQobi5jb250YWluZXIpLm9mZnNldCgpLGZbMF0ucGFnZVg+ZlsxXS5wYWdlWD9zPWZbMV0ucGFnZVgrKGZbMF0ucGFnZVgtZlsxXS5wYWdlWCkvMjpzPWZbMF0ucGFnZVgrKGZbMV0ucGFnZVgtZlswXS5wYWdlWCkvMixmWzBdLnBhZ2VZPmZbMV0ucGFnZVk/bz1mWzFdLnBhZ2VZKyhmWzBdLnBhZ2VZLWZbMV0ucGFnZVkpLzI6bz1mWzBdLnBhZ2VZKyhmWzFdLnBhZ2VZLWZbMF0ucGFnZVkpLzIscy09bC5sZWZ0LG8tPWwudG9wLGU9bi5zY2FsZSx0PU1hdGguc3FydChNYXRoLnBvdyhmWzBdLnBhZ2VYLWZbMV0ucGFnZVgsMikrTWF0aC5wb3coZlswXS5wYWdlWS1mWzFdLnBhZ2VZLDIpKSkpLHU9Zi5sZW5ndGh9O2p2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2hzdGFydFwiLGEpLGp2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2htb3ZlXCIsYSl9LGJpbmRFbGVtZW50RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0O3RoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbigpe3Q9ITB9KSx0aGlzLmNvbnRhaW5lci5kZWxlZ2F0ZShcIltjbGFzc349J2p2ZWN0b3JtYXAtZWxlbWVudCddXCIsXCJtb3VzZW92ZXIgbW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLGk9ci5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIscz1pPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksbz1pPT1cInJlZ2lvblwiP2UucmVnaW9uc1tzXS5lbGVtZW50OmUubWFya2Vyc1tzXS5lbGVtZW50LHU9aT09XCJyZWdpb25cIj9lLm1hcERhdGEucGF0aHNbc10ubmFtZTplLm1hcmtlcnNbc10uY29uZmlnLm5hbWV8fFwiXCIsYT1qdm0uJC5FdmVudChpK1wiTGFiZWxTaG93Lmp2ZWN0b3JtYXBcIiksZj1qdm0uJC5FdmVudChpK1wiT3Zlci5qdmVjdG9ybWFwXCIpO3QudHlwZT09XCJtb3VzZW92ZXJcIj8oZS5jb250YWluZXIudHJpZ2dlcihmLFtzXSksZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8by5zZXRIb3ZlcmVkKCEwKSxlLmxhYmVsLnRleHQodSksZS5jb250YWluZXIudHJpZ2dlcihhLFtlLmxhYmVsLHNdKSxhLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZS5sYWJlbC5zaG93KCksZS5sYWJlbFdpZHRoPWUubGFiZWwud2lkdGgoKSxlLmxhYmVsSGVpZ2h0PWUubGFiZWwuaGVpZ2h0KCkpKTooby5zZXRIb3ZlcmVkKCExKSxlLmxhYmVsLmhpZGUoKSxlLmNvbnRhaW5lci50cmlnZ2VyKGkrXCJPdXQuanZlY3Rvcm1hcFwiLFtzXSkpfSksdGhpcy5jb250YWluZXIuZGVsZWdhdGUoXCJbY2xhc3N+PSdqdmVjdG9ybWFwLWVsZW1lbnQnXVwiLFwibW91c2Vkb3duXCIsZnVuY3Rpb24oZSl7dD0hMX0pLHRoaXMuY29udGFpbmVyLmRlbGVnYXRlKFwiW2NsYXNzfj0nanZlY3Rvcm1hcC1lbGVtZW50J11cIixcIm1vdXNldXBcIixmdW5jdGlvbihuKXt2YXIgcj10aGlzLGk9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLHM9aS5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIsbz1zPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksdT1qdm0uJC5FdmVudChzK1wiQ2xpY2suanZlY3Rvcm1hcFwiKSxhPXM9PVwicmVnaW9uXCI/ZS5yZWdpb25zW29dLmVsZW1lbnQ6ZS5tYXJrZXJzW29dLmVsZW1lbnQ7aWYoIXQpe2UuY29udGFpbmVyLnRyaWdnZXIodSxbb10pO2lmKHM9PT1cInJlZ2lvblwiJiZlLnBhcmFtcy5yZWdpb25zU2VsZWN0YWJsZXx8cz09PVwibWFya2VyXCImJmUucGFyYW1zLm1hcmtlcnNTZWxlY3RhYmxlKXUuaXNEZWZhdWx0UHJldmVudGVkKCl8fChlLnBhcmFtc1tzK1wic1NlbGVjdGFibGVPbmVcIl0mJmUuY2xlYXJTZWxlY3RlZChzK1wic1wiKSxhLnNldFNlbGVjdGVkKCFhLmlzU2VsZWN0ZWQpKX19KX0sYmluZFpvb21CdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbWluXCIpLnRleHQoXCIrXCIpLmFwcGVuZFRvKHRoaXMuY29udGFpbmVyKSxqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbW91dFwiKS5odG1sKFwiJiN4MjIxMjtcIikuYXBwZW5kVG8odGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyLmZpbmQoXCIuanZlY3Rvcm1hcC16b29taW5cIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUqZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSksdGhpcy5jb250YWluZXIuZmluZChcIi5qdmVjdG9ybWFwLXpvb21vdXRcIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUvZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSl9LGNyZWF0ZUxhYmVsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhYmVsPWp2bS4kKFwiPGRpdi8+XCIpLmFkZENsYXNzKFwianZlY3Rvcm1hcC1sYWJlbFwiKS5hcHBlbmRUbyhqdm0uJChcImJvZHlcIikpLHRoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbih0KXt2YXIgbj10LnBhZ2VYLTE1LWUubGFiZWxXaWR0aCxyPXQucGFnZVktMTUtZS5sYWJlbEhlaWdodDtuPDUmJihuPXQucGFnZVgrMTUpLHI8NSYmKHI9dC5wYWdlWSsxNSksZS5sYWJlbC5pcyhcIjp2aXNpYmxlXCIpJiZlLmxhYmVsLmNzcyh7bGVmdDpuLHRvcDpyfSl9KX0sc2V0U2NhbGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGkscz1qdm0uJC5FdmVudChcInpvb20uanZlY3Rvcm1hcFwiKTtlPnRoaXMucGFyYW1zLnpvb21NYXgqdGhpcy5iYXNlU2NhbGU/ZT10aGlzLnBhcmFtcy56b29tTWF4KnRoaXMuYmFzZVNjYWxlOmU8dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSYmKGU9dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSksdHlwZW9mIHQhPVwidW5kZWZpbmVkXCImJnR5cGVvZiBuIT1cInVuZGVmaW5lZFwiJiYoaT1lL3RoaXMuc2NhbGUscj8odGhpcy50cmFuc1g9dCt0aGlzLmRlZmF1bHRXaWR0aCoodGhpcy53aWR0aC8odGhpcy5kZWZhdWx0V2lkdGgqZSkpLzIsdGhpcy50cmFuc1k9bit0aGlzLmRlZmF1bHRIZWlnaHQqKHRoaXMuaGVpZ2h0Lyh0aGlzLmRlZmF1bHRIZWlnaHQqZSkpLzIpOih0aGlzLnRyYW5zWC09KGktMSkvZSp0LHRoaXMudHJhbnNZLT0oaS0xKS9lKm4pKSx0aGlzLnNjYWxlPWUsdGhpcy5hcHBseVRyYW5zZm9ybSgpLHRoaXMuY29udGFpbmVyLnRyaWdnZXIocyxbZS90aGlzLmJhc2VTY2FsZV0pfSxzZXRGb2N1czpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG8sdTtpZihqdm0uJC5pc0FycmF5KGUpfHx0aGlzLnJlZ2lvbnNbZV0pe2p2bS4kLmlzQXJyYXkoZSk/bz1lOm89W2VdO2Zvcih1PTA7dTxvLmxlbmd0aDt1KyspdGhpcy5yZWdpb25zW29bdV1dJiYoaT10aGlzLnJlZ2lvbnNbb1t1XV0uZWxlbWVudC5nZXRCQm94KCksaSYmKHR5cGVvZiByPT1cInVuZGVmaW5lZFwiP3I9aToocz17eDpNYXRoLm1pbihyLngsaS54KSx5Ok1hdGgubWluKHIueSxpLnkpLHdpZHRoOk1hdGgubWF4KHIueCtyLndpZHRoLGkueCtpLndpZHRoKS1NYXRoLm1pbihyLngsaS54KSxoZWlnaHQ6TWF0aC5tYXgoci55K3IuaGVpZ2h0LGkueStpLmhlaWdodCktTWF0aC5taW4oci55LGkueSl9LHI9cykpKTt0aGlzLnNldFNjYWxlKE1hdGgubWluKHRoaXMud2lkdGgvci53aWR0aCx0aGlzLmhlaWdodC9yLmhlaWdodCksLShyLngrci53aWR0aC8yKSwtKHIueStyLmhlaWdodC8yKSwhMCl9ZWxzZSBlKj10aGlzLmJhc2VTY2FsZSx0aGlzLnNldFNjYWxlKGUsLXQqdGhpcy5kZWZhdWx0V2lkdGgsLW4qdGhpcy5kZWZhdWx0SGVpZ2h0LCEwKX0sZ2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodCBpbiB0aGlzW2VdKXRoaXNbZV1bdF0uZWxlbWVudC5pc1NlbGVjdGVkJiZuLnB1c2godCk7cmV0dXJuIG59LGdldFNlbGVjdGVkUmVnaW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNlbGVjdGVkKFwicmVnaW9uc1wiKX0sZ2V0U2VsZWN0ZWRNYXJrZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbihlLHQpe3ZhciBuO3R5cGVvZiB0IT1cIm9iamVjdFwiJiYodD1bdF0pO2lmKGp2bS4kLmlzQXJyYXkodCkpZm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzW2VdW3Rbbl1dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoITApO2Vsc2UgZm9yKG4gaW4gdCl0aGlzW2VdW25dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoISF0W25dKX0sc2V0U2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U2VsZWN0ZWQoXCJyZWdpb25zXCIsZSl9LHNldFNlbGVjdGVkTWFya2VyczpmdW5jdGlvbihlKXt0aGlzLnNldFNlbGVjdGVkKFwibWFya2Vyc1wiLGUpfSxjbGVhclNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49dGhpcy5nZXRTZWxlY3RlZChlKSxyO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspdFtuW3JdXT0hMTt0aGlzLnNldFNlbGVjdGVkKGUsdCl9LGNsZWFyU2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKCl7dGhpcy5jbGVhclNlbGVjdGVkKFwicmVnaW9uc1wiKX0sY2xlYXJTZWxlY3RlZE1hcmtlcnM6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyU2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxnZXRNYXBPYmplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZ2V0UmVnaW9uTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBEYXRhLnBhdGhzW2VdLm5hbWV9LGNyZWF0ZVJlZ2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG49dGhpcztmb3IoZSBpbiB0aGlzLm1hcERhdGEucGF0aHMpdD10aGlzLmNhbnZhcy5hZGRQYXRoKHtkOnRoaXMubWFwRGF0YS5wYXRoc1tlXS5wYXRoLFwiZGF0YS1jb2RlXCI6ZX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLnJlZ2lvblN0eWxlKSksanZtLiQodC5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe24uY29udGFpbmVyLnRyaWdnZXIoXCJyZWdpb25TZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIiksdCxuLmdldFNlbGVjdGVkUmVnaW9ucygpXSl9KSx0LmFkZENsYXNzKFwianZlY3Rvcm1hcC1yZWdpb24ganZlY3Rvcm1hcC1lbGVtZW50XCIpLHRoaXMucmVnaW9uc1tlXT17ZWxlbWVudDp0LGNvbmZpZzp0aGlzLm1hcERhdGEucGF0aHNbZV19fSxjcmVhdGVNYXJrZXJzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbz10aGlzO3RoaXMubWFya2Vyc0dyb3VwPXRoaXMubWFya2Vyc0dyb3VwfHx0aGlzLmNhbnZhcy5hZGRHcm91cCgpO2lmKGp2bS4kLmlzQXJyYXkoZSkpe3M9ZS5zbGljZSgpLGU9e307Zm9yKHQ9MDt0PHMubGVuZ3RoO3QrKyllW3RdPXNbdF19Zm9yKHQgaW4gZSlpPWVbdF1pbnN0YW5jZW9mIEFycmF5P3tsYXRMbmc6ZVt0XX06ZVt0XSxyPXRoaXMuZ2V0TWFya2VyUG9zaXRpb24oaSksciE9PSExJiYobj10aGlzLmNhbnZhcy5hZGRDaXJjbGUoe1wiZGF0YS1pbmRleFwiOnQsY3g6ci54LGN5OnIueX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLm1hcmtlclN0eWxlLHtpbml0aWFsOmkuc3R5bGV8fHt9fSksdGhpcy5tYXJrZXJzR3JvdXApLG4uYWRkQ2xhc3MoXCJqdmVjdG9ybWFwLW1hcmtlciBqdmVjdG9ybWFwLWVsZW1lbnRcIiksanZtLiQobi5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe28uY29udGFpbmVyLnRyaWdnZXIoXCJtYXJrZXJTZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWluZGV4XCIpLHQsby5nZXRTZWxlY3RlZE1hcmtlcnMoKV0pfSksdGhpcy5tYXJrZXJzW3RdJiZ0aGlzLnJlbW92ZU1hcmtlcnMoW3RdKSx0aGlzLm1hcmtlcnNbdF09e2VsZW1lbnQ6bixjb25maWc6aX0pfSxyZXBvc2l0aW9uTWFya2VyczpmdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKGUgaW4gdGhpcy5tYXJrZXJzKXQ9dGhpcy5nZXRNYXJrZXJQb3NpdGlvbih0aGlzLm1hcmtlcnNbZV0uY29uZmlnKSx0IT09ITEmJnRoaXMubWFya2Vyc1tlXS5lbGVtZW50LnNldFN0eWxlKHtjeDp0LngsY3k6dC55fSl9LGdldE1hcmtlclBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBqdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24/dGhpcy5sYXRMbmdUb1BvaW50LmFwcGx5KHRoaXMsZS5sYXRMbmd8fFswLDBdKTp7eDplLmNvb3Jkc1swXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNYKnRoaXMuc2NhbGUseTplLmNvb3Jkc1sxXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNZKnRoaXMuc2NhbGV9fSxhZGRNYXJrZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9LGk9W10scyxvLG49bnx8W107cltlXT10O2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspcz17fSxzW2VdPW5bb10saS5wdXNoKHMpO3RoaXMuYWRkTWFya2VycyhyLGkpfSxhZGRNYXJrZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG47dD10fHxbXSx0aGlzLmNyZWF0ZU1hcmtlcnMoZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLnNlcmllcy5tYXJrZXJzW25dLnNldFZhbHVlcyh0W25dfHx7fSl9LHJlbW92ZU1hcmtlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLm1hcmtlcnNbZVt0XV0uZWxlbWVudC5yZW1vdmUoKSxkZWxldGUgdGhpcy5tYXJrZXJzW2VbdF1dfSxyZW1vdmVBbGxNYXJrZXJzOmZ1bmN0aW9uKCl7dmFyIGUsdD1bXTtmb3IoZSBpbiB0aGlzLm1hcmtlcnMpdC5wdXNoKGUpO3RoaXMucmVtb3ZlTWFya2Vycyh0KX0sbGF0TG5nVG9Qb2ludDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9anZtLldvcmxkTWFwLm1hcHNbdGhpcy5wYXJhbXMubWFwXS5wcm9qZWN0aW9uLGk9ci5jZW50cmFsTWVyaWRpYW4scz10aGlzLndpZHRoLXRoaXMuYmFzZVRyYW5zWCoyKnRoaXMuYmFzZVNjYWxlLG89dGhpcy5oZWlnaHQtdGhpcy5iYXNlVHJhbnNZKjIqdGhpcy5iYXNlU2NhbGUsdSxhLGY9dGhpcy5zY2FsZS90aGlzLmJhc2VTY2FsZTtyZXR1cm4gdDwtMTgwK2kmJih0Kz0zNjApLG49anZtLlByb2pbci50eXBlXShlLHQsaSksdT10aGlzLmdldEluc2V0Rm9yUG9pbnQobi54LG4ueSksdT8oYT11LmJib3gsbi54PShuLngtYVswXS54KS8oYVsxXS54LWFbMF0ueCkqdS53aWR0aCp0aGlzLnNjYWxlLG4ueT0obi55LWFbMF0ueSkvKGFbMV0ueS1hWzBdLnkpKnUuaGVpZ2h0KnRoaXMuc2NhbGUse3g6bi54K3RoaXMudHJhbnNYKnRoaXMuc2NhbGUrdS5sZWZ0KnRoaXMuc2NhbGUseTpuLnkrdGhpcy50cmFuc1kqdGhpcy5zY2FsZSt1LnRvcCp0aGlzLnNjYWxlfSk6ITF9LHBvaW50VG9MYXRMbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24scj1uLmNlbnRyYWxNZXJpZGlhbixpPWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0uaW5zZXRzLHMsbyx1LGEsZjtmb3Iocz0wO3M8aS5sZW5ndGg7cysrKXtvPWlbc10sdT1vLmJib3gsYT1lLSh0aGlzLnRyYW5zWCp0aGlzLnNjYWxlK28ubGVmdCp0aGlzLnNjYWxlKSxmPXQtKHRoaXMudHJhbnNZKnRoaXMuc2NhbGUrby50b3AqdGhpcy5zY2FsZSksYT1hLyhvLndpZHRoKnRoaXMuc2NhbGUpKih1WzFdLngtdVswXS54KSt1WzBdLngsZj1mLyhvLmhlaWdodCp0aGlzLnNjYWxlKSoodVsxXS55LXVbMF0ueSkrdVswXS55O2lmKGE+dVswXS54JiZhPHVbMV0ueCYmZj51WzBdLnkmJmY8dVsxXS55KXJldHVybiBqdm0uUHJvaltuLnR5cGUrXCJfaW52XCJdKGEsLWYscil9cmV0dXJuITF9LGdldEluc2V0Rm9yUG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLmluc2V0cyxyLGk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7aT1uW3JdLmJib3g7aWYoZT5pWzBdLngmJmU8aVsxXS54JiZ0PmlbMF0ueSYmdDxpWzFdLnkpcmV0dXJuIG5bcl19fSxjcmVhdGVTZXJpZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O3RoaXMuc2VyaWVzPXttYXJrZXJzOltdLHJlZ2lvbnM6W119O2Zvcih0IGluIHRoaXMucGFyYW1zLnNlcmllcylmb3IoZT0wO2U8dGhpcy5wYXJhbXMuc2VyaWVzW3RdLmxlbmd0aDtlKyspdGhpcy5zZXJpZXNbdF1bZV09bmV3IGp2bS5EYXRhU2VyaWVzKHRoaXMucGFyYW1zLnNlcmllc1t0XVtlXSx0aGlzW3RdKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5yZW1vdmUoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSxqdm0uJCh3aW5kb3cpLnVuYmluZChcInJlc2l6ZVwiLHRoaXMub25SZXNpemUpfX0sanZtLldvcmxkTWFwLm1hcHM9e30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXM9e21hcDpcIndvcmxkX21pbGxfZW5cIixiYWNrZ3JvdW5kQ29sb3I6XCIjNTA1MDUwXCIsem9vbUJ1dHRvbnM6ITAsem9vbU9uU2Nyb2xsOiEwLHpvb21NYXg6OCx6b29tTWluOjEsem9vbVN0ZXA6MS42LHJlZ2lvbnNTZWxlY3RhYmxlOiExLG1hcmtlcnNTZWxlY3RhYmxlOiExLGJpbmRUb3VjaEV2ZW50czohMCxyZWdpb25TdHlsZTp7aW5pdGlhbDp7ZmlsbDpcIndoaXRlXCIsXCJmaWxsLW9wYWNpdHlcIjoxLHN0cm9rZTpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOjAsXCJzdHJva2Utb3BhY2l0eVwiOjF9LGhvdmVyOntcImZpbGwtb3BhY2l0eVwiOi44fSxzZWxlY3RlZDp7ZmlsbDpcInllbGxvd1wifSxzZWxlY3RlZEhvdmVyXG46e319LG1hcmtlclN0eWxlOntpbml0aWFsOntmaWxsOlwiZ3JleVwiLHN0cm9rZTpcIiM1MDUwNTBcIixcImZpbGwtb3BhY2l0eVwiOjEsXCJzdHJva2Utd2lkdGhcIjoxLFwic3Ryb2tlLW9wYWNpdHlcIjoxLHI6NX0saG92ZXI6e3N0cm9rZTpcImJsYWNrXCIsXCJzdHJva2Utd2lkdGhcIjoyfSxzZWxlY3RlZDp7ZmlsbDpcImJsdWVcIn0sc2VsZWN0ZWRIb3Zlcjp7fX19LGp2bS5Xb3JsZE1hcC5hcGlFdmVudHM9e29uUmVnaW9uTGFiZWxTaG93OlwicmVnaW9uTGFiZWxTaG93XCIsb25SZWdpb25PdmVyOlwicmVnaW9uT3ZlclwiLG9uUmVnaW9uT3V0OlwicmVnaW9uT3V0XCIsb25SZWdpb25DbGljazpcInJlZ2lvbkNsaWNrXCIsb25SZWdpb25TZWxlY3RlZDpcInJlZ2lvblNlbGVjdGVkXCIsb25NYXJrZXJMYWJlbFNob3c6XCJtYXJrZXJMYWJlbFNob3dcIixvbk1hcmtlck92ZXI6XCJtYXJrZXJPdmVyXCIsb25NYXJrZXJPdXQ6XCJtYXJrZXJPdXRcIixvbk1hcmtlckNsaWNrOlwibWFya2VyQ2xpY2tcIixvbk1hcmtlclNlbGVjdGVkOlwibWFya2VyU2VsZWN0ZWRcIixvblZpZXdwb3J0Q2hhbmdlOlwidmlld3BvcnRDaGFuZ2VcIn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvcGx1Z2lucy9qdmVjdG9ybWFwL2pxdWVyeS1qdmVjdG9ybWFwLTEuMi4yLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///54\n"); -/***/ }), -/* 55 */ +/***/ 51: /***/ (function(module, exports) { -eval("$.fn.vectorMap('addMap', 'world_mill_en', { \"insets\": [{ \"width\": 900.0, \"top\": 0, \"height\": 440.7063107441331, \"bbox\": [{ \"y\": -12671671.123330014, \"x\": -20004297.151525836 }, { \"y\": 6930392.02513512, \"x\": 20026572.394749384 }], \"left\": 0 }], \"paths\": { \"BD\": { \"path\": \"M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z\", \"name\": \"Bangladesh\" }, \"BE\": { \"path\": \"M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z\", \"name\": \"Belgium\" }, \"BF\": { \"path\": \"M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z\", \"name\": \"Burkina Faso\" }, \"BG\": { \"path\": \"M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z\", \"name\": \"Bulgaria\" }, \"BA\": { \"path\": \"M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z\", \"name\": \"Bosnia and Herzegovina\" }, \"BN\": { \"path\": \"M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z\", \"name\": \"Brunei\" }, \"BO\": { \"path\": \"M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z\", \"name\": \"Bolivia\" }, \"JP\": { \"path\": \"M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z\", \"name\": \"Japan\" }, \"BI\": { \"path\": \"M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z\", \"name\": \"Burundi\" }, \"BJ\": { \"path\": \"M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z\", \"name\": \"Benin\" }, \"BT\": { \"path\": \"M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z\", \"name\": \"Bhutan\" }, \"JM\": { \"path\": \"M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z\", \"name\": \"Jamaica\" }, \"BW\": { \"path\": \"M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z\", \"name\": \"Botswana\" }, \"BR\": { \"path\": \"M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z\", \"name\": \"Brazil\" }, \"BS\": { \"path\": \"M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z\", \"name\": \"The Bahamas\" }, \"BY\": { \"path\": \"M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z\", \"name\": \"Belarus\" }, \"BZ\": { \"path\": \"M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z\", \"name\": \"Belize\" }, \"RU\": { \"path\": \"M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z\", \"name\": \"Russia\" }, \"RW\": { \"path\": \"M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z\", \"name\": \"Rwanda\" }, \"RS\": { \"path\": \"M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z\", \"name\": \"Republic of Serbia\" }, \"LT\": { \"path\": \"M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z\", \"name\": \"Lithuania\" }, \"LU\": { \"path\": \"M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z\", \"name\": \"Luxembourg\" }, \"LR\": { \"path\": \"M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z\", \"name\": \"Liberia\" }, \"RO\": { \"path\": \"M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z\", \"name\": \"Romania\" }, \"GW\": { \"path\": \"M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z\", \"name\": \"Guinea Bissau\" }, \"GT\": { \"path\": \"M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z\", \"name\": \"Guatemala\" }, \"GR\": { \"path\": \"M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z\", \"name\": \"Greece\" }, \"GQ\": { \"path\": \"M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z\", \"name\": \"Equatorial Guinea\" }, \"GY\": { \"path\": \"M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z\", \"name\": \"Guyana\" }, \"GE\": { \"path\": \"M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z\", \"name\": \"Georgia\" }, \"GB\": { \"path\": \"M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z\", \"name\": \"United Kingdom\" }, \"GA\": { \"path\": \"M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z\", \"name\": \"Gabon\" }, \"GN\": { \"path\": \"M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z\", \"name\": \"Guinea\" }, \"GM\": { \"path\": \"M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z\", \"name\": \"Gambia\" }, \"GL\": { \"path\": \"M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z\", \"name\": \"Greenland\" }, \"KW\": { \"path\": \"M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z\", \"name\": \"Kuwait\" }, \"GH\": { \"path\": \"M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z\", \"name\": \"Ghana\" }, \"OM\": { \"path\": \"M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z\", \"name\": \"Oman\" }, \"_3\": { \"path\": \"M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z\", \"name\": \"Somaliland\" }, \"_2\": { \"path\": \"M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z\", \"name\": \"Western Sahara\" }, \"_1\": { \"path\": \"M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z\", \"name\": \"Kosovo\" }, \"_0\": { \"path\": \"M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z\", \"name\": \"Northern Cyprus\" }, \"JO\": { \"path\": \"M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z\", \"name\": \"Jordan\" }, \"HR\": { \"path\": \"M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z\", \"name\": \"Croatia\" }, \"HT\": { \"path\": \"M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z\", \"name\": \"Haiti\" }, \"HU\": { \"path\": \"M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z\", \"name\": \"Hungary\" }, \"HN\": { \"path\": \"M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z\", \"name\": \"Honduras\" }, \"PR\": { \"path\": \"M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z\", \"name\": \"Puerto Rico\" }, \"PS\": { \"path\": \"M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z\", \"name\": \"West Bank\" }, \"PT\": { \"path\": \"M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z\", \"name\": \"Portugal\" }, \"PY\": { \"path\": \"M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z\", \"name\": \"Paraguay\" }, \"PA\": { \"path\": \"M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z\", \"name\": \"Panama\" }, \"PG\": { \"path\": \"M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z\", \"name\": \"Papua New Guinea\" }, \"PE\": { \"path\": \"M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z\", \"name\": \"Peru\" }, \"PK\": { \"path\": \"M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z\", \"name\": \"Pakistan\" }, \"PH\": { \"path\": \"M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z\", \"name\": \"Philippines\" }, \"PL\": { \"path\": \"M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z\", \"name\": \"Poland\" }, \"ZM\": { \"path\": \"M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z\", \"name\": \"Zambia\" }, \"EE\": { \"path\": \"M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z\", \"name\": \"Estonia\" }, \"EG\": { \"path\": \"M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z\", \"name\": \"Egypt\" }, \"ZA\": { \"path\": \"M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z\", \"name\": \"South Africa\" }, \"EC\": { \"path\": \"M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z\", \"name\": \"Ecuador\" }, \"AL\": { \"path\": \"M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z\", \"name\": \"Albania\" }, \"AO\": { \"path\": \"M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z\", \"name\": \"Angola\" }, \"KZ\": { \"path\": \"M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z\", \"name\": \"Kazakhstan\" }, \"ET\": { \"path\": \"M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z\", \"name\": \"Ethiopia\" }, \"ZW\": { \"path\": \"M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z\", \"name\": \"Zimbabwe\" }, \"ES\": { \"path\": \"M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z\", \"name\": \"Spain\" }, \"ER\": { \"path\": \"M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z\", \"name\": \"Eritrea\" }, \"ME\": { \"path\": \"M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z\", \"name\": \"Montenegro\" }, \"MD\": { \"path\": \"M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z\", \"name\": \"Moldova\" }, \"MG\": { \"path\": \"M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z\", \"name\": \"Madagascar\" }, \"MA\": { \"path\": \"M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z\", \"name\": \"Morocco\" }, \"UZ\": { \"path\": \"M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z\", \"name\": \"Uzbekistan\" }, \"MM\": { \"path\": \"M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z\", \"name\": \"Myanmar\" }, \"ML\": { \"path\": \"M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z\", \"name\": \"Mali\" }, \"MN\": { \"path\": \"M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z\", \"name\": \"Mongolia\" }, \"MK\": { \"path\": \"M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z\", \"name\": \"Macedonia\" }, \"MW\": { \"path\": \"M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z\", \"name\": \"Malawi\" }, \"MR\": { \"path\": \"M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z\", \"name\": \"Mauritania\" }, \"UG\": { \"path\": \"M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z\", \"name\": \"Uganda\" }, \"MY\": { \"path\": \"M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z\", \"name\": \"Malaysia\" }, \"MX\": { \"path\": \"M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z\", \"name\": \"Mexico\" }, \"VU\": { \"path\": \"M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z\", \"name\": \"Vanuatu\" }, \"FR\": { \"path\": \"M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z\", \"name\": \"France\" }, \"FI\": { \"path\": \"M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z\", \"name\": \"Finland\" }, \"FJ\": { \"path\": \"M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z\", \"name\": \"Fiji\" }, \"FK\": { \"path\": \"M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z\", \"name\": \"Falkland Islands\" }, \"NI\": { \"path\": \"M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z\", \"name\": \"Nicaragua\" }, \"NL\": { \"path\": \"M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z\", \"name\": \"Netherlands\" }, \"NO\": { \"path\": \"M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z\", \"name\": \"Norway\" }, \"NA\": { \"path\": \"M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z\", \"name\": \"Namibia\" }, \"NC\": { \"path\": \"M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z\", \"name\": \"New Caledonia\" }, \"NE\": { \"path\": \"M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z\", \"name\": \"Niger\" }, \"NG\": { \"path\": \"M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z\", \"name\": \"Nigeria\" }, \"NZ\": { \"path\": \"M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z\", \"name\": \"New Zealand\" }, \"NP\": { \"path\": \"M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z\", \"name\": \"Nepal\" }, \"CI\": { \"path\": \"M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z\", \"name\": \"Ivory Coast\" }, \"CH\": { \"path\": \"M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z\", \"name\": \"Switzerland\" }, \"CO\": { \"path\": \"M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z\", \"name\": \"Colombia\" }, \"CN\": { \"path\": \"M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z\", \"name\": \"China\" }, \"CM\": { \"path\": \"M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z\", \"name\": \"Cameroon\" }, \"CL\": { \"path\": \"M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z\", \"name\": \"Chile\" }, \"CA\": { \"path\": \"M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z\", \"name\": \"Canada\" }, \"CG\": { \"path\": \"M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z\", \"name\": \"Republic of the Congo\" }, \"CF\": { \"path\": \"M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z\", \"name\": \"Central African Republic\" }, \"CD\": { \"path\": \"M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z\", \"name\": \"Democratic Republic of the Congo\" }, \"CZ\": { \"path\": \"M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z\", \"name\": \"Czech Republic\" }, \"CY\": { \"path\": \"M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z\", \"name\": \"Cyprus\" }, \"CR\": { \"path\": \"M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z\", \"name\": \"Costa Rica\" }, \"CU\": { \"path\": \"M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z\", \"name\": \"Cuba\" }, \"SZ\": { \"path\": \"M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z\", \"name\": \"Swaziland\" }, \"SY\": { \"path\": \"M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z\", \"name\": \"Syria\" }, \"KG\": { \"path\": \"M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z\", \"name\": \"Kyrgyzstan\" }, \"KE\": { \"path\": \"M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z\", \"name\": \"Kenya\" }, \"SS\": { \"path\": \"M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z\", \"name\": \"South Sudan\" }, \"SR\": { \"path\": \"M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z\", \"name\": \"Suriname\" }, \"KH\": { \"path\": \"M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z\", \"name\": \"Cambodia\" }, \"SV\": { \"path\": \"M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z\", \"name\": \"El Salvador\" }, \"SK\": { \"path\": \"M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z\", \"name\": \"Slovakia\" }, \"KR\": { \"path\": \"M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z\", \"name\": \"South Korea\" }, \"SI\": { \"path\": \"M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z\", \"name\": \"Slovenia\" }, \"KP\": { \"path\": \"M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z\", \"name\": \"North Korea\" }, \"SO\": { \"path\": \"M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z\", \"name\": \"Somalia\" }, \"SN\": { \"path\": \"M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z\", \"name\": \"Senegal\" }, \"SL\": { \"path\": \"M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z\", \"name\": \"Sierra Leone\" }, \"SB\": { \"path\": \"M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z\", \"name\": \"Solomon Islands\" }, \"SA\": { \"path\": \"M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z\", \"name\": \"Saudi Arabia\" }, \"SE\": { \"path\": \"M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z\", \"name\": \"Sweden\" }, \"SD\": { \"path\": \"M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z\", \"name\": \"Sudan\" }, \"DO\": { \"path\": \"M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z\", \"name\": \"Dominican Republic\" }, \"DJ\": { \"path\": \"M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z\", \"name\": \"Djibouti\" }, \"DK\": { \"path\": \"M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z\", \"name\": \"Denmark\" }, \"DE\": { \"path\": \"M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z\", \"name\": \"Germany\" }, \"YE\": { \"path\": \"M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z\", \"name\": \"Yemen\" }, \"AT\": { \"path\": \"M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z\", \"name\": \"Austria\" }, \"DZ\": { \"path\": \"M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z\", \"name\": \"Algeria\" }, \"US\": { \"path\": \"M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z\", \"name\": \"United States of America\" }, \"LV\": { \"path\": \"M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z\", \"name\": \"Latvia\" }, \"UY\": { \"path\": \"M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z\", \"name\": \"Uruguay\" }, \"LB\": { \"path\": \"M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z\", \"name\": \"Lebanon\" }, \"LA\": { \"path\": \"M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z\", \"name\": \"Laos\" }, \"TW\": { \"path\": \"M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z\", \"name\": \"Taiwan\" }, \"TT\": { \"path\": \"M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z\", \"name\": \"Trinidad and Tobago\" }, \"TR\": { \"path\": \"M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z\", \"name\": \"Turkey\" }, \"LK\": { \"path\": \"M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z\", \"name\": \"Sri Lanka\" }, \"TN\": { \"path\": \"M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z\", \"name\": \"Tunisia\" }, \"TL\": { \"path\": \"M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z\", \"name\": \"East Timor\" }, \"TM\": { \"path\": \"M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z\", \"name\": \"Turkmenistan\" }, \"TJ\": { \"path\": \"M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z\", \"name\": \"Tajikistan\" }, \"LS\": { \"path\": \"M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z\", \"name\": \"Lesotho\" }, \"TH\": { \"path\": \"M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z\", \"name\": \"Thailand\" }, \"TF\": { \"path\": \"M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z\", \"name\": \"French Southern and Antarctic Lands\" }, \"TG\": { \"path\": \"M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z\", \"name\": \"Togo\" }, \"TD\": { \"path\": \"M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z\", \"name\": \"Chad\" }, \"LY\": { \"path\": \"M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z\", \"name\": \"Libya\" }, \"AE\": { \"path\": \"M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z\", \"name\": \"United Arab Emirates\" }, \"VE\": { \"path\": \"M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z\", \"name\": \"Venezuela\" }, \"AF\": { \"path\": \"M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z\", \"name\": \"Afghanistan\" }, \"IQ\": { \"path\": \"M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z\", \"name\": \"Iraq\" }, \"IS\": { \"path\": \"M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z\", \"name\": \"Iceland\" }, \"IR\": { \"path\": \"M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z\", \"name\": \"Iran\" }, \"AM\": { \"path\": \"M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z\", \"name\": \"Armenia\" }, \"IT\": { \"path\": \"M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z\", \"name\": \"Italy\" }, \"VN\": { \"path\": \"M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z\", \"name\": \"Vietnam\" }, \"AR\": { \"path\": \"M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z\", \"name\": \"Argentina\" }, \"AU\": { \"path\": \"M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z\", \"name\": \"Australia\" }, \"IL\": { \"path\": \"M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z\", \"name\": \"Israel\" }, \"IN\": { \"path\": \"M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z\", \"name\": \"India\" }, \"TZ\": { \"path\": \"M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z\", \"name\": \"Tanzania\" }, \"AZ\": { \"path\": \"M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z\", \"name\": \"Azerbaijan\" }, \"IE\": { \"path\": \"M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z\", \"name\": \"Ireland\" }, \"ID\": { \"path\": \"M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z\", \"name\": \"Indonesia\" }, \"UA\": { \"path\": \"M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z\", \"name\": \"Ukraine\" }, \"QA\": { \"path\": \"M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z\", \"name\": \"Qatar\" }, \"MZ\": { \"path\": \"M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z\", \"name\": \"Mozambique\" } }, \"height\": 440.7063107441331, \"projection\": { \"type\": \"mill\", \"centralMeridian\": 11.5 }, \"width\": 900.0 });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcz81ODVjIl0sIm5hbWVzIjpbIiQiLCJmbiIsInZlY3Rvck1hcCJdLCJtYXBwaW5ncyI6IkFBQUFBLEVBQUVDLEVBQUYsQ0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBeUIsZUFBekIsRUFBeUMsRUFBQyxVQUFVLENBQUMsRUFBQyxTQUFTLEtBQVYsRUFBaUIsT0FBTyxDQUF4QixFQUEyQixVQUFVLGlCQUFyQyxFQUF3RCxRQUFRLENBQUMsRUFBQyxLQUFLLENBQUMsa0JBQVAsRUFBMkIsS0FBSyxDQUFDLGtCQUFqQyxFQUFELEVBQXVELEVBQUMsS0FBSyxnQkFBTixFQUF3QixLQUFLLGtCQUE3QixFQUF2RCxDQUFoRSxFQUEwSyxRQUFRLENBQWxMLEVBQUQsQ0FBWCxFQUFtTSxTQUFTLEVBQUMsTUFBTSxFQUFDLFFBQVEscWZBQVQsRUFBZ2dCLFFBQVEsWUFBeGdCLEVBQVAsRUFBOGhCLE1BQU0sRUFBQyxRQUFRLHVOQUFULEVBQWtPLFFBQVEsU0FBMU8sRUFBcGlCLEVBQTB4QixNQUFNLEVBQUMsUUFBUSwra0JBQVQsRUFBMGxCLFFBQVEsY0FBbG1CLEVBQWh5QixFQUFtNUMsTUFBTSxFQUFDLFFBQVEsd1pBQVQsRUFBbWEsUUFBUSxVQUEzYSxFQUF6NUMsRUFBaTFELE1BQU0sRUFBQyxRQUFRLHlSQUFULEVBQW9TLFFBQVEsd0JBQTVTLEVBQXYxRCxFQUE4cEUsTUFBTSxFQUFDLFFBQVEsK0ZBQVQsRUFBMEcsUUFBUSxRQUFsSCxFQUFwcUUsRUFBaXlFLE1BQU0sRUFBQyxRQUFRLCs1QkFBVCxFQUEwNkIsUUFBUSxTQUFsN0IsRUFBdnlFLEVBQXF1RyxNQUFNLEVBQUMsUUFBUSxzNEJBQVQsRUFBaTVCLFFBQVEsT0FBejVCLEVBQTN1RyxFQUE4b0ksTUFBTSxFQUFDLFFBQVEsZ0xBQVQs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RUFBbW5CLFFBQVEsWUFBM25CLEVBQTVvckksRUFBc3hzSSxNQUFNLEVBQUMsUUFBUSx3S0FBVCxFQUFtTCxRQUFRLFNBQTNMLEVBQTV4c0ksRUFBbStzSSxNQUFNLEVBQUMsUUFBUSwrMkdBQVQsRUFBMDNHLFFBQVEsV0FBbDRHLEVBQXorc0ksRUFBeTN6SSxNQUFNLEVBQUMsUUFBUSw2K0NBQVQsRUFBdy9DLFFBQVEsU0FBaGdELEVBQS8zekksRUFBMjQySSxNQUFNLEVBQUMsUUFBUSx1R0FBVCxFQUFrSCxRQUFRLE9BQTFILEVBQWo1MkksRUFBcWgzSSxNQUFNLEVBQUMsUUFBUSwraENBQVQsRUFBMGlDLFFBQVEsWUFBbGpDLEVBQTNoM0ksRUFBNU0sRUFBeXk1SSxVQUFVLGlCQUFuejVJLEVBQXMwNUksY0FBYyxFQUFDLFFBQVEsTUFBVCxFQUFpQixtQkFBbUIsSUFBcEMsRUFBcDE1SSxFQUErMzVJLFNBQVMsS0FBeDQ1SSxFQUF6QyIsImZpbGUiOiI1NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiQuZm4udmVjdG9yTWFwKCdhZGRNYXAnLCAnd29ybGRfbWlsbF9lbicse1wiaW5zZXRzXCI6IFt7XCJ3aWR0aFwiOiA5MDAuMCwgXCJ0b3BcIjogMCwgXCJoZWlnaHRcIjogNDQwLjcwNjMxMDc0NDEzMzEsIFwiYmJveFwiOiBbe1wieVwiOiAtMTI2NzE2NzEuMTIzMzMwMDE0LCBcInhcIjogLTIwMDA0Mjk3LjE1MTUyNTgzNn0sIHtcInlcIjogNjkzMDM5Mi4wMjUxMzUxMiwgXCJ4XCI6IDIwMDI2NTcyLjM5NDc0OTM4NH1dLCBcImxlZnRcIjogMH1dLCBcInBhdGhzXCI6IHtcIkJEXCI6IHtcInBhdGhcIjogXCJNNjUyLjcxLDIyOC44NWwtMC4wNCwxLjM4bC0wLjQ2LC0wLjIxbC0wLjQyLDAuM2wwLjA1LDAuNjVsLTAuMTcsLTEuMzdsLTAuNDgsLTEuMjZsLTEuMDgsLTEuNmwtMC4yMywtMC4xM2wtMi4zMSwtMC4xMWwtMC4zMSwwLjM2bDAuMjEsMC45OGwtMC42LDEuMTFsLTAuOCwtMC40bC0wLjM3LDAuMDlsLTAuMjMsMC4zbC0wLjU0LC0wLjIxbC0wLjc4LC0wLjE5bC0wLjM4LC0yLjA0bC0wLjgzLC0xLjg5bDAuNCwtMS41bC0wLjE2LC0wLjM1bC0xLjI0LC0wLjU3bDAuMzYsLTAuNjJsMS41LC0wLjk1bDAuMDIsLTAuNDlsLTEuNjIsLTEuMjZsMC42NCwtMS4zMWwxLjcsMS4wbDAuMTIsMC4wNGwwLjk2LDAuMTFsMC4xOSwxLjYybDAuMjUsMC4yNmwyLjM4LDAuMzdsMi4zMiwtMC4wNGwxLjA2LDAuMzNsLTAuOTIsMS43OWwtMC45NywwLjEzbC0wLjIzLDAuMTZsLTAuNzcsMS41MWwwLjA1LDAuMzVsMS4zNywxLjM3bDAuNSwtMC4xNGwwLjM1LC0xLjQ2bDAuMjQsLTAuMGwxLjI0LDMuOTJaXCIsIFwibmFtZVwiOiBcIkJhbmdsYWRlc2hcIn0sIFwiQkVcIjoge1wicGF0aFwiOiBcIk00MjkuMjgsMTQzLjk1bDEuNzYsMC4yNWwwLjEzLC0wLjAxbDIuMTYsLTAuNjRsMS40NiwxLjM0bDEuMjYsMC43MWwtMC4yMywxLjhsLTAuNDQsMC4wOGwtMC4yNCwwLjI1bC0wLjIsMS4zNmwtMS44LC0xLjIybC0wLjIzLC0wLjA1bC0xLjE0LDAuMjNsLTEuNjIsLTEuNDNsLTEuMTUsLTEuMzFsLTAuMjEsLTAuMWwtMC45NSwtMC4wNGwtMC4yMSwtMC42OGwxLjY2LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJCZWxnaXVtXCJ9LCBcIkJGXCI6IHtcInBhdGhcIjogXCJNNDEzLjQ4LDI2MC4yMWwtMS4yMiwtMC40NmwtMC4xMywtMC4wMmwtMS4xNywwLjFsLTAuMTUsMC4wNmwtMC43MywwLjUzbC0wLjg3LC0wLjQxbC0wLjM5LC0wLjc1bC0wLjEzLC0wLjEzbC0wLjk4LC0wLjQ4bC0wLjE0LC0xLjJsMC42MywtMC45OWwwLjA1LC0wLjE4bC0wLjA1LC0wLjczbDEuOSwtMi4wMWwwLjA4LC0wLjE0bDAuMzUsLTEuNjVsMC40OSwtMC40NGwxLjA1LDAuM2wwLjIxLC0wLjAybDEuMDUsLTAuNTJsMC4xMywtMC4xM2wwLjMsLTAuNThsMS44NywtMS4xbDAuMTEsLTAuMWwwLjQzLC0wLjcybDIuMjMsLTEuMDFsMS4yMSwtMC4zMmwwLjUxLDAuNGwwLjE5LDAuMDZsMS4yNSwtMC4wMWwtMC4xNCwwLjg5bDAuMDEsMC4xM2wwLjM0LDEuMTZsMC4wNiwwLjExbDEuMzUsMS41OWwwLjA3LDEuMTNsMC4yNCwwLjI4bDIuNjQsMC41M2wtMC4wNSwxLjM5bC0wLjQyLDAuNTlsLTEuMTEsMC4yMWwtMC4yMiwwLjE3bC0wLjQ2LDAuOTlsLTAuNjksMC4yM2wtMi4xMiwtMC4wNWwtMS4xNCwtMC4ybC0wLjE5LDAuMDNsLTAuNzIsMC4zNmwtMS4wNywtMC4xN2wtNC4zNSwwLjEybC0wLjI5LDAuMjlsLTAuMDYsMS40NGwwLjI1LDEuNDVaXCIsIFwibmFtZVwiOiBcIkJ1cmtpbmEgRmFzb1wifSwgXCJCR1wiOiB7XCJwYXRoXCI6IFwiTTQ3Ny42MywxNjYuODRsMC41MSwwLjlsMC4zMywwLjE0bDAuOSwtMC4yMWwxLjkxLDAuNDdsMy42OCwwLjE2bDAuMTcsLTAuMDVsMS4yLC0wLjc1bDIuNzgsLTAuNjdsMS43MiwxLjA1bDEuMDIsMC4yNGwtMC45NywwLjk3bC0wLjkxLDIuMTdsMC4wLDAuMjRsMC41NiwxLjE5bC0xLjU4LC0wLjNsLTAuMTYsMC4wMWwtMi41NSwwLjk1bC0wLjIsMC4yOGwtMC4wMiwxLjIzbC0xLjkyLDAuMjRsLTEuNjgsLTAuOTlsLTAuMjcsLTAuMDJsLTEuOTQsMC44bC0xLjUyLC0wLjA3bC0wLjE1LC0xLjcybC0wLjEyLC0wLjIxbC0wLjk5LC0wLjc2bDAuMTgsLTAuMThsMC4wMiwtMC4zOWwtMC4xNywtMC4yMmwwLjMzLC0wLjc1bDAuOTEsLTAuOTFsMC4wMSwtMC40MmwtMS4xNiwtMS4yNWwtMC4xOCwtMC44OWwwLjI0LC0wLjI3WlwiLCBcIm5hbWVcIjogXCJCdWxnYXJpYVwifSwgXCJCQVwiOiB7XCJwYXRoXCI6IFwiTTQ2OC4zOSwxNjQuNjZsMC4xNiwwLjA0bDAuNDMsLTAuMGwtMC40MywwLjkzbDAuMDYsMC4zNGwxLjA4LDEuMDZsLTAuMjgsMS4wOWwtMC41LDAuMTNsLTAuNDcsMC4yOGwtMC44NiwwLjc0bC0wLjEsMC4xNmwtMC4yOCwxLjI5bC0xLjgxLC0wLjk0bC0wLjksLTEuMjJsLTEuMCwtMC43M2wtMS4xLC0xLjFsLTAuNTUsLTAuOTZsLTEuMTEsLTEuM2wwLjMsLTAuNzVsMC41OSwwLjQ2bDAuNDIsLTAuMDRsMC40NiwtMC41NGwxLjAsLTAuMDZsMi4xMSwwLjVsMS43MiwtMC4wM2wxLjA2LDAuNjRaXCIsIFwibmFtZVwiOiBcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcIn0sIFwiQk5cIjoge1wicGF0aFwiOiBcIk03MDcuMzQsMjczLjU3bDAuNzYsLTAuNzJsMS41OSwtMS4wM2wtMC4xOCwxLjkzbC0wLjksLTAuMDZsLTAuMjgsMC4xNGwtMC4zMSwwLjUxbC0wLjY4LC0wLjc4WlwiLCBcIm5hbWVcIjogXCJCcnVuZWlcIn0sIFwiQk9cIjoge1wicGF0aFwiOiBcIk0yNjMuODMsMzQwLjc5bC0wLjIzLC0wLjEybC0yLjg2LC0wLjExbC0wLjI4LDAuMTdsLTAuNzcsMS42N2wtMS4xNywtMS41MWwtMC4xOCwtMC4xMWwtMy4yOCwtMC42NGwtMC4yOCwwLjFsLTIuMDIsMi4zbC0xLjQzLDAuMjlsLTAuOTEsLTMuMzVsLTEuMzEsLTIuODhsMC43NSwtMi40MWwtMC4wOSwtMC4zMmwtMS4yMywtMS4wM2wtMC4zMSwtMS43NmwtMC4wNSwtMC4xMmwtMS4xMiwtMS42bDEuNDksLTIuNjJsMC4wMSwtMC4yOGwtMS4wLC0yLjBsMC40OCwtMC43MmwwLjAyLC0wLjI5bC0wLjM3LC0wLjc4bDAuODcsLTEuMTNsMC4wNiwtMC4xOGwwLjA1LC0yLjE3bDAuMTIsLTEuNzFsMC41LC0wLjhsMC4wMSwtMC4zbC0xLjksLTMuNThsMS4zLDAuMTVsMS4zNCwtMC4wNWwwLjIzLC0wLjEybDAuNTEsLTAuN2wyLjEyLC0wLjk5bDEuMzEsLTAuOTNsMi44MSwtMC4zN2wtMC4yMSwxLjUxbDAuMDEsMC4xM2wwLjI5LDAuOTFsLTAuMTksMS42NGwwLjExLDAuMjdsMi43MiwyLjI3bDAuMTUsMC4wN2wyLjcxLDAuNDFsMC45MiwwLjg4bDAuMTIsMC4wN2wxLjY0LDAuNDlsMS4wLDAuNzFsMC4xOCwwLjA2bDEuNSwtMC4wMmwxLjI0LDAuNjRsMC4xLDEuMzFsMC4wNSwwLjE0bDAuNDQsMC42OGwwLjAyLDAuNzNsLTAuNDQsMC4wM2wtMC4yNywwLjM5bDAuOTYsMi45OWwwLjI4LDAuMjFsNC40MywwLjFsLTAuMjgsMS4xMmwwLjAsMC4xNWwwLjI3LDEuMDJsMC4xNSwwLjE5bDEuMjcsMC42N2wwLjUyLDEuNDJsLTAuNDIsMS45MWwtMC42NiwxLjFsLTAuMDQsMC4ybDAuMjEsMS4zbC0wLjE5LDAuMTNsLTAuMDEsLTAuMjdsLTAuMTUsLTAuMjRsLTIuMzMsLTEuMzNsLTAuMTQsLTAuMDRsLTIuMzgsLTAuMDNsLTQuMzYsMC43NmwtMC4yMSwwLjE2bC0xLjIsMi4yOWwtMC4wMywwLjEzbC0wLjA2LDEuMzdsLTAuNzksMi41M2wtMC4wNSwtMC4wOFpcIiwgXCJuYW1lXCI6IFwiQm9saXZpYVwifSwgXCJKUFwiOiB7XCJwYXRoXCI6IFwiTTc4MS4xNywxNjYuNzhsMS44LDAuNjdsMC4yOCwtMC4wNGwxLjM4LC0xLjAxbDAuNDMsMi42N2wtMy40NCwwLjc3bC0wLjE4LDAuMTJsLTIuMDQsMi43OWwtMy43MSwtMS45NGwtMC40MiwwLjE1bC0xLjI5LDMuMTFsLTIuMzIsMC4wNGwtMC4zLC0yLjYzbDEuMTIsLTIuMWwyLjUxLC0wLjE2bDAuMjgsLTAuMjVsMC43MywtNC4yMmwwLjU4LC0xLjlsMi41OSwyLjg0bDIuMCwxLjFaTTc3My42NiwxODcuMzZsLTAuOTIsMi4yNGwtMC4wMSwwLjJsMC40LDEuM2wtMS4xOCwxLjgxbC0zLjA2LDEuMjhsLTQuMzUsMC4xN2wtMC4xOSwwLjA4bC0zLjQsMy4wNmwtMS4zNiwtMC44N2wtMC4xLC0xLjk1bC0wLjM0LC0wLjI4bC00LjM1LDAuNjJsLTIuOTksMS4zM2wtMi44NywwLjA1bC0wLjI4LDAuMmwwLjA5LDAuMzNsMi4zNywxLjkzbC0xLjU3LDQuNDRsLTEuMzUsMC45N2wtMC45LC0wLjc5bDAuNTcsLTIuMzJsLTAuMTUsLTAuMzRsLTEuNSwtMC43N2wtMC44MSwtMS41M2wyLjA0LC0wLjc1bDAuMTQsLTAuMWwxLjI4LC0xLjcybDIuNDcsLTEuNDNsMS44NCwtMS45Mmw0LjgzLC0wLjgybDIuNjIsMC41N2wwLjMzLC0wLjE2bDIuNDUsLTQuNzdsMS4zOCwxLjE0bDAuMzgsMC4wbDUuMSwtNC4wMmwwLjA5LC0wLjExbDEuNTcsLTMuNTdsMC4wMiwtMC4xNmwtMC40MiwtMy4yMmwwLjk0LC0xLjY3bDIuMjcsLTAuNDdsMS4yNiwzLjgybC0wLjA3LDIuMjNsLTIuMjYsMi44NmwtMC4wNiwwLjE5bDAuMDQsMi45M1pNNzU3Ljg1LDE5Ni4xOGwwLjIyLDAuNjZsLTEuMTEsMS4zM2wtMC44LC0wLjdsLTAuMzMsLTAuMDRsLTEuMjgsMC42NWwtMC4xNCwwLjE1bC0wLjU0LDEuMzRsLTEuMTcsLTAuNTdsMC4wMiwtMS4wM2wxLjIsLTEuNDVsMS4yNCwwLjI4bDAuMjksLTAuMWwwLjksLTEuMDNsMS41MSwwLjVaXCIsIFwibmFtZVwiOiBcIkphcGFuXCJ9LCBcIkJJXCI6IHtcInBhdGhcIjogXCJNNDk0LjcsMjk1LjgzbC0wLjE0LC0yLjcxbC0wLjA0LC0wLjEzbC0wLjM0LC0wLjYybDAuOTMsMC4xMmwwLjMsLTAuMTZsMC42NywtMS4yNWwwLjksMC4xMWwwLjExLDAuNzZsMC4wOCwwLjE2bDAuNDYsMC40OGwwLjAyLDAuNTZsLTAuNTUsMC40OGwtMC45NiwxLjI5bC0wLjgyLDAuODJsLTAuNjEsMC4wN1pcIiwgXCJuYW1lXCI6IFwiQnVydW5kaVwifSwgXCJCSlwiOiB7XCJwYXRoXCI6IFwiTTQyNy40LDI2OC45NGwtMS41OCwwLjIybC0wLjUyLC0xLjQ1bDAuMTEsLTUuNzNsLTAuMDgsLTAuMjFsLTAuNDMsLTAuNDRsLTAuMDksLTEuMTNsLTAuMDksLTAuMTlsLTEuNTIsLTEuNTJsMC4yNCwtMS4wMWwwLjcsLTAuMjNsMC4xOCwtMC4xNmwwLjQ1LC0wLjk3bDEuMDcsLTAuMjFsMC4xOSwtMC4xMmwwLjUzLC0wLjczbDAuNzMsLTAuNjVsMC42OCwtMC4wbDEuNjksMS4zbC0wLjA4LDAuNjdsMC4wMiwwLjE0bDAuNTIsMS4zOGwtMC40NCwwLjlsLTAuMDEsMC4yNGwwLjIsMC41MmwtMS4xLDEuNDJsLTAuNzYsMC43NmwtMC4wOCwwLjEzbC0wLjQ3LDEuNTlsMC4wNSwxLjY5bC0wLjEzLDMuNzlaXCIsIFwibmFtZVwiOiBcIkJlbmluXCJ9LCBcIkJUXCI6IHtcInBhdGhcIjogXCJNNjUwLjM4LDIxMy43OGwwLjg4LDAuNzVsLTAuMTMsMS4yNGwtMS43NywwLjA3bC0yLjEsLTAuMThsLTEuNTcsMC40bC0yLjAyLC0wLjkxbC0wLjAyLC0wLjI0bDEuNTQsLTEuODdsMS4xOCwtMC42bDEuNjcsMC41OWwxLjMyLDAuMDhsMS4wMSwwLjY3WlwiLCBcIm5hbWVcIjogXCJCaHV0YW5cIn0sIFwiSk1cIjoge1wicGF0aFwiOiBcIk0yMjYuNjcsMjM4LjM3bDEuNjQsMC4yM2wxLjIsMC41NmwwLjExLDAuMTlsLTEuMjUsMC4wM2wtMC4xNCwwLjA0bC0wLjY1LDAuMzdsLTEuMjQsLTAuMzdsLTEuMTcsLTAuNzdsMC4xMSwtMC4yMmwwLjg2LC0wLjE1bDAuNTIsMC4wOFpcIiwgXCJuYW1lXCI6IFwiSmFtYWljYVwifSwgXCJCV1wiOiB7XCJwYXRoXCI6IFwiTTQ4NC45MSwzMzEuOTZsMC41MywwLjUybDAuODIsMS41M2wyLjgzLDIuODZsMC4xNCwwLjA4bDAuODUsMC4yMmwwLjAzLDAuODFsMC43NCwxLjY2bDAuMjEsMC4xN2wxLjg3LDAuMzlsMS4xNywwLjg3bC0zLjEzLDEuNzFsLTIuMywyLjAxbC0wLjA3LDAuMWwtMC44MiwxLjc0bC0wLjY2LDAuODhsLTEuMjQsMC4xOWwtMC4yNCwwLjJsLTAuNjUsMS45OGwtMS40LDAuNTVsLTEuOSwtMC4xMmwtMS4yLC0wLjc0bC0xLjA2LC0wLjMybC0wLjIyLDAuMDJsLTEuMjIsMC42MmwtMC4xNCwwLjE0bC0wLjU4LDEuMjFsLTEuMTYsMC43OWwtMS4xOCwxLjEzbC0xLjUsMC4yM2wtMC40LC0wLjY4bDAuMjIsLTEuNTNsLTAuMDQsLTAuMTlsLTEuNDgsLTIuNTRsLTAuMTEsLTAuMTFsLTAuNTMsLTAuMzFsLTAuMCwtNy4yNWwyLjE4LC0wLjA4bDAuMjksLTAuM2wwLjA3LC05LjBsMS42MywtMC4wOGwzLjY5LC0wLjg2bDAuODQsMC45M2wwLjM4LDAuMDVsMS41MywtMC45N2wwLjc5LC0wLjAzbDEuMywtMC41M2wwLjIzLDAuMWwwLjkyLDEuOTZaXCIsIFwibmFtZVwiOiBcIkJvdHN3YW5hXCJ9LCBcIkJSXCI6IHtcInBhdGhcIjogXCJNMjU5LjQ5LDI3NC44N2wxLjQyLDAuMjVsMS45NywwLjYybDAuMjgsLTAuMDVsMC42NywtMC41NWwxLjc2LC0wLjM4bDIuOCwtMC45NGwwLjEyLC0wLjA4bDAuOTIsLTAuOTZsMC4wNSwtMC4zM2wtMC4xNSwtMC4zMmwwLjczLC0wLjA2bDAuMzYsMC4zNWwtMC4yNywwLjkzbDAuMTcsMC4zNmwwLjc2LDAuMzRsMC40NCwwLjlsLTAuNTgsMC43M2wtMC4wNiwwLjEzbC0wLjQsMi4xM2wwLjAzLDAuMTlsMC42MiwxLjIybDAuMTcsMS4xMWwwLjExLDAuMTlsMS41NCwxLjE4bDAuMTUsMC4wNmwxLjIzLDAuMTJsMC4yOSwtMC4xNWwwLjIsLTAuMzZsMC43MSwtMC4xMWwxLjEzLC0wLjQ0bDAuNzksLTAuNjNsMS4yNSwwLjE5bDAuNjUsLTAuMDhsMS4zMiwwLjJsMC4zMiwtMC4xOGwwLjIzLC0wLjUxbC0wLjA1LC0wLjMxbC0wLjMxLC0wLjM3bDAuMTEsLTAuMzFsMC43NSwwLjE3bDAuMTMsMC4wbDEuMSwtMC4yNGwxLjM0LDAuNWwxLjA4LDAuNTFsMC4zMywtMC4wNWwwLjY3LC0wLjU4bDAuMjcsMC4wNWwwLjI4LDAuNTdsMC4zMSwwLjE3bDEuMiwtMC4xOGwwLjE3LC0wLjA4bDEuMDMsLTEuMDVsMC43NiwtMS44MmwxLjM5LC0yLjE2bDAuNDksLTAuMDdsMC41MiwxLjE3bDEuNCw0LjM3bDAuMiwwLjJsMS4xNCwwLjM1bDAuMDUsMS4zOWwtMS44LDEuOTdsMC4wMSwwLjQybDAuNzgsMC43NWwwLjE4LDAuMDhsNC4xNiwwLjM3bDAuMDgsMi4yNWwwLjUsMC4yMmwxLjc4LC0xLjU0bDIuOTgsMC44NWw0LjA3LDEuNWwxLjA3LDEuMjhsLTAuMzcsMS4yM2wwLjM2LDAuMzhsMi44MywtMC43NWw0LjgsMS4zbDMuNzUsLTAuMDlsMy42LDIuMDJsMy4yNywyLjg0bDEuOTMsMC43MmwyLjEzLDAuMTFsMC43NiwwLjY2bDEuMjIsNC41NmwtMC45Niw0LjAzbC0xLjIyLDEuNThsLTMuNTIsMy41MWwtMS42MywyLjkxbC0xLjc1LDIuMDlsLTAuNSwwLjA0bC0wLjI2LDAuMTlsLTAuNzIsMS45OWwwLjE4LDQuNzZsLTAuOTUsNS41NmwtMC43NCwwLjk2bC0wLjA2LDAuMTVsLTAuNDMsMy4zOWwtMi40OSwzLjM0bC0wLjA2LDAuMTNsLTAuNCwyLjU2bC0xLjksMS4wN2wtMC4xMywwLjE2bC0wLjUxLDEuMzhsLTIuNTksMC4wbC0zLjk0LDEuMDFsLTEuODIsMS4xOWwtMi44NSwwLjgxbC0zLjAxLDIuMTdsLTIuMTIsMi42NWwtMC4wNiwwLjEzbC0wLjM2LDIuMGwwLjAxLDAuMTNsMC40LDEuNDJsLTAuNDUsMi42M2wtMC41MywxLjIzbC0xLjc2LDEuNTNsLTIuNzYsNC43OWwtMi4xNiwyLjE1bC0xLjY5LDEuMjlsLTAuMDksMC4xMmwtMS4xMiwyLjZsLTEuMywxLjI2bC0wLjQ1LC0xLjAybDAuOTksLTEuMThsMC4wMSwtMC4zN2wtMS41LC0xLjk1bC0xLjk4LC0xLjU0bC0yLjU4LC0xLjc3bC0wLjIsLTAuMDVsLTAuODEsMC4wN2wtMi40MiwtMi4wNWwtMC4yNSwtMC4wN2wtMC43NywwLjE0bDIuNzUsLTMuMDdsMi44LC0yLjYxbDEuNjcsLTEuMDlsMi4xMSwtMS40OWwwLjEzLC0wLjI0bDAuMDUsLTIuMTVsLTAuMDcsLTAuMmwtMS4yNiwtMS41NGwtMC4zNSwtMC4wOWwtMC42NCwwLjI3bDAuMywtMC45NWwwLjM0LC0xLjU3bDAuMDEsLTEuNTJsLTAuMTYsLTAuMjZsLTAuOSwtMC40OGwtMC4yNywtMC4wMWwtMC44NiwwLjM5bC0wLjY1LC0wLjA4bC0wLjIzLC0wLjhsLTAuMjMsLTIuMzlsLTAuMDQsLTAuMTJsLTAuNDcsLTAuNzlsLTAuMTQsLTAuMTJsLTEuNjksLTAuNzFsLTAuMjUsMC4wMWwtMC45MywwLjQ3bC0yLjI5LC0wLjQ0bDAuMTUsLTMuM2wtMC4wMywtMC4xNWwtMC42MiwtMS4yMmwwLjU3LC0wLjM5bDAuMTMsLTAuM2wtMC4yMiwtMS4zN2wwLjY3LC0xLjEzbDAuNDQsLTIuMDRsLTAuMDEsLTAuMTdsLTAuNTksLTEuNjFsLTAuMTQsLTAuMTZsLTEuMjUsLTAuNjZsLTAuMjIsLTAuODJsMC4zNSwtMS40MWwtMC4yOCwtMC4zN2wtNC41OSwtMC4xbC0wLjc4LC0yLjQxbDAuMzQsLTAuMDJsMC4yOCwtMC4zMWwtMC4wMywtMS4xbC0wLjA1LC0wLjE2bC0wLjQ1LC0wLjY4bC0wLjEsLTEuNGwtMC4xNiwtMC4yNGwtMS40NSwtMC43NmwtMC4xNCwtMC4wM2wtMS40OCwwLjAybC0xLjA0LC0wLjczbC0xLjYyLC0wLjQ4bC0wLjkzLC0wLjlsLTAuMTYsLTAuMDhsLTIuNzIsLTAuNDFsLTIuNTMsLTIuMTJsMC4xOCwtMS41NGwtMC4wMSwtMC4xM2wtMC4yOSwtMC45MWwwLjI2LC0xLjgzbC0wLjM0LC0wLjM0bC0zLjI4LDAuNDNsLTAuMTQsMC4wNWwtMS4zLDAuOTNsLTIuMTYsMS4wMWwtMC4xMiwwLjA5bC0wLjQ3LDAuNjVsLTEuMTIsMC4wNWwtMS44NCwtMC4yMWwtMC4xMiwwLjAxbC0xLjMzLDAuNDFsLTAuODIsLTAuMjFsMC4xNiwtMy42bC0wLjQ4LC0wLjI2bC0xLjk3LDEuNDNsLTEuOTYsLTAuMDZsLTAuODYsLTEuMjNsLTAuMjIsLTAuMTNsLTEuMjMsLTAuMTFsMC4zNCwtMC42OWwtMC4wNSwtMC4zM2wtMS4zNiwtMS41bC0wLjkyLC0yLjBsMC40NSwtMC4zMmwwLjEzLC0wLjI1bC0wLjAsLTAuODdsMS4zNCwtMC42NGwwLjE3LC0wLjMybC0wLjIzLC0xLjIzbDAuNTYsLTAuNzdsMC4wNSwtMC4xM2wwLjE2LC0xLjAzbDIuNywtMS42MWwyLjAxLC0wLjQ3bDAuMTYsLTAuMDlsMC4yNCwtMC4yN2wyLjExLDAuMTFsMC4zMSwtMC4yNWwxLjEzLC02Ljg3bDAuMDYsLTEuMTJsLTAuNCwtMS41M2wtMC4xLC0wLjE1bC0xLjAsLTAuODJsMC4wMSwtMS40NWwxLjA4LC0wLjMybDAuMzksMC4ybDAuNDQsLTAuMjRsMC4wOCwtMC45NmwtMC4yNSwtMC4zMmwtMS4yMiwtMC4yMmwtMC4wMiwtMS4wMWw0LjU3LDAuMDVsMC4yMiwtMC4wOWwwLjYsLTAuNjNsMC40NCwwLjVsMC40NywxLjQybDAuNDUsMC4xNmwwLjI3LC0wLjE4bDEuMjEsMS4xNmwwLjIzLDAuMDhsMS45NSwtMC4xNmwwLjIzLC0wLjE0bDAuNDMsLTAuNjdsMS43NiwtMC41NWwxLjA1LC0wLjQybDAuMTgsLTAuMmwwLjI1LC0wLjkybDEuNjUsLTAuNjZsMC4xOCwtMC4zNWwtMC4xNCwtMC41M2wtMC4yNiwtMC4yMmwtMS45MSwtMC4xOWwtMC4yOSwtMS4zM2wwLjEsLTEuNjRsLTAuMTUsLTAuMjhsLTAuNDQsLTAuMjVaXCIsIFwibmFtZVwiOiBcIkJyYXppbFwifSwgXCJCU1wiOiB7XCJwYXRoXCI6IFwiTTIyNy41MSwyMTYuNjlsMC4zLDAuMThsLTAuMjQsMS4wN2wwLjAzLC0xLjA0bC0wLjA5LC0wLjIxWk0yMjYuNSwyMjQuMDNsLTAuMTMsMC4wM2wtMC41NCwtMS4zbC0wLjA5LC0wLjEybC0wLjc4LC0wLjY0bDAuNCwtMS4yNmwwLjMzLDAuMDVsMC43OSwyLjBsMC4wMSwxLjI0Wk0yMjUuNzYsMjE2LjVsLTIuMTYsMC4zNGwtMC4wNywtMC40MWwwLjg1LC0wLjE2bDEuMzYsMC4wN2wwLjAyLDAuMTZaXCIsIFwibmFtZVwiOiBcIlRoZSBCYWhhbWFzXCJ9LCBcIkJZXCI6IHtcInBhdGhcIjogXCJNNDgwLjA4LDEzNS4yOGwyLjA5LDAuMDJsMC4xMywtMC4wM2wyLjcyLC0xLjNsMC4xNiwtMC4xOWwwLjU1LC0xLjgzbDEuOTQsLTEuMDZsMC4xNSwtMC4zMWwtMC4yLC0xLjMzbDEuMzMsLTAuNTJsMi41OCwtMS4zbDIuMzksMC44bDAuMywwLjc1bDAuMzcsMC4xN2wxLjIyLC0wLjM5bDIuMTgsMC43NWwwLjIsMS4zNmwtMC40OCwwLjg1bDAuMDEsMC4zMmwxLjU3LDIuMjZsMC45MiwwLjZsLTAuMSwwLjQxbDAuMTksMC4zNWwxLjYxLDAuNTdsMC40OCwwLjZsLTAuNjQsMC40OWwtMS45MSwtMC4xMWwtMC4xOCwwLjA1bC0wLjQ4LDAuMzJsLTAuMSwwLjM5bDAuNTcsMS4xbDAuNTEsMS43OGwtMS43OSwwLjE3bC0wLjE4LDAuMDhsLTAuNzcsMC43M2wtMC4wOSwwLjE5bC0wLjEzLDEuMzFsLTAuNzUsLTAuMjJsLTIuMTEsMC4xNWwtMC41NiwtMC42NmwtMC4zOSwtMC4wNmwtMC44LDAuNDlsLTAuNzksLTAuNGwtMC4xMywtMC4wM2wtMS45NCwtMC4wN2wtMi43NiwtMC43OWwtMi41OCwtMC4yN2wtMS45OCwwLjA3bC0wLjE1LDAuMDVsLTEuMzEsMC44NmwtMC44LDAuMDlsLTAuMDQsLTEuMTZsLTAuMDMsLTAuMTJsLTAuNjMsLTEuMjhsMS4yMiwtMC41NmwwLjE3LC0wLjI3bDAuMDEsLTEuMzVsLTAuMDQsLTAuMTVsLTAuNjYsLTEuMjRsLTAuMDgsLTEuMTJaXCIsIFwibmFtZVwiOiBcIkJlbGFydXNcIn0sIFwiQlpcIjoge1wicGF0aFwiOiBcIk0xOTguMDMsMjM5LjdsMC4yOCwwLjE5bDAuNDMsLTAuMWwwLjgyLC0xLjQybDAuMCwwLjA3bDAuMjksMC4yOWwwLjE2LDAuMGwtMC4wMiwwLjM1bC0wLjM5LDEuMDhsMC4wMiwwLjI1bDAuMTYsMC4yOWwtMC4yMywwLjhsMC4wNCwwLjI0bDAuMDksMC4xNGwtMC4yNSwxLjEybC0wLjM4LDAuNTNsLTAuMzMsMC4wNmwtMC4yMSwwLjE1bC0wLjQxLDAuNzRsLTAuMjUsMC4wbDAuMTcsLTIuNThsMC4wMSwtMi4yWlwiLCBcIm5hbWVcIjogXCJCZWxpemVcIn0sIFwiUlVcIjoge1wicGF0aFwiOiBcIk02ODguNTcsMzguODVsMC42MywyLjM5bDAuNDQsMC4xOWwyLjIyLC0xLjIzbDcuMTgsMC4wN2w1LjU0LDIuNDlsMS44NSwxLjc3bC0wLjU1LDIuMzRsLTIuNjQsMS40MmwtNi41NywyLjc2bC0xLjk1LDEuNWwwLjEyLDAuNTNsMy4wOSwwLjY4bDMuNjksMS4yM2wwLjIxLC0wLjAxbDEuOTgsLTAuODFsMS4xNiwyLjg0bDAuNSwwLjA4bDEuMDMsLTEuMThsMy44NiwtMC43NGw3Ljc5LDAuNzhsMC41NiwyLjA1bDAuMjcsMC4yMmwxMC40NywwLjcxbDAuMzIsLTAuMjlsMC4xMywtMy4zNGw0Ljk4LDAuOGwzLjk2LC0wLjAybDMuODgsMi40M2wxLjA2LDIuNzlsLTEuMzgsMS44M2wwLjAxLDAuMzhsMy4xNSwzLjY0bDAuMSwwLjA4bDMuOTQsMS44NmwwLjQsLTAuMTRsMi4yOCwtNC41NmwzLjc1LDEuOTRsMC4yMiwwLjAybDQuMTgsLTEuMjJsNC43NiwxLjRsMC4yNiwtMC4wNGwxLjc0LC0xLjIzbDMuOTgsMC42M2wwLjMyLC0wLjQxbC0xLjcxLC00LjFsMy4wLC0xLjg2bDIyLjM5LDMuMDRsMi4wNiwyLjY3bDAuMSwwLjA4bDYuNTUsMy41MWwwLjE3LDAuMDNsMTAuMDgsLTAuODZsNC44NiwwLjczbDEuOTEsMS43MmwtMC4yOSwzLjEzbDAuMTgsMC4zMWwzLjA4LDEuMjZsMC4xOSwwLjAxbDMuMzIsLTAuOWw0LjM3LC0wLjExbDQuNzgsMC44N2w0LjYxLC0wLjQ4bDQuMjYsMy44MmwwLjMyLDAuMDVsMy4xLC0xLjRsMC4xMiwtMC40NWwtMS45MSwtMi42N2wwLjkyLC0xLjY0bDcuNzgsMS4yMmw1LjIyLC0wLjI2bDcuMTIsMi4xbDkuNiw1LjIybDYuNCw0LjE1bC0wLjIsMi40NGwwLjE0LDAuMjhsMS42OSwxLjA0bDAuNDUsLTAuMzFsLTAuNTEsLTIuNjZsNi4zMSwwLjU4bDQuNTIsMy42MWwtMi4xLDEuNTJsLTQuMDIsMC40MmwtMC4yNywwLjI5bC0wLjA2LDMuODNsLTAuODEsMC42N2wtMi4xNCwtMC4xMWwtMS45MSwtMS4zOWwtMy4xOSwtMS4xM2wtMC41MSwtMS42M2wtMC4yMSwtMC4ybC0yLjU0LC0wLjY3bC0wLjEzLC0wLjBsLTIuNjksMC41bC0xLjEyLC0xLjE5bDAuNDgsLTEuMzZsLTAuMzgsLTAuMzlsLTMuMCwwLjk4bC0wLjE3LDAuNDRsMS4wMiwxLjc2bC0xLjI3LDEuNTVsLTMuMDksMS43MWwtMy4xNSwtMC4yOWwtMC4zLDAuMThsMC4wNywwLjM0bDIuMjIsMi4xbDEuNDcsMy4yMmwxLjE1LDEuMDlsMC4yNSwxLjQxbC0wLjQ4LDAuNzZsLTQuNDcsLTAuODFsLTAuMTcsMC4wMmwtNi45NywyLjlsLTIuMiwwLjQ0bC0wLjExLDAuMDVsLTMuODMsMi42OGwtMy42MywyLjMybC0wLjEsMC4xMWwtMC43NiwxLjRsLTMuMywtMi40bC0wLjMsLTAuMDNsLTYuMzEsMi44NWwtMC45OSwtMS4yMWwtMC40LC0wLjA2bC0yLjMyLDEuNTRsLTMuMjMsLTAuNDlsLTAuMzMsMC4ybC0wLjc5LDIuMzlsLTIuOTcsMy41MWwtMC4wNywwLjIxbDAuMDksMS40N2wwLjIyLDAuMjdsMi42MiwwLjc0bC0wLjMsNC43bC0yLjA2LDAuMTJsLTAuMjYsMC4ybC0xLjA3LDIuOTRsMC4wNCwwLjI3bDAuODMsMS4xOWwtNC4wMywxLjYzbC0wLjE4LDAuMjFsLTAuODMsMy43MmwtMy41NSwwLjc5bC0wLjIzLDAuMjNsLTAuNzMsMy4zMmwtMy4yMiwyLjc2bC0wLjc2LC0xLjg4bC0xLjA3LC00Ljg4bC0xLjM5LC03LjU5bDEuMTcsLTQuNzZsMi4wNSwtMi4wOGwwLjA5LC0wLjE5bDAuMTEsLTEuNDZsMy42NywtMC43N2wwLjE1LC0wLjA4bDQuNDcsLTQuNjFsNC4yOSwtMy44Mmw0LjQ4LC0zLjAxbDAuMTEsLTAuMTRsMi4wMSwtNS40M2wtMC4zMSwtMC40bC0zLjA0LDAuMzNsLTAuMjQsMC4xN2wtMS40NywzLjExbC01Ljk4LDMuOTRsLTEuOTEsLTQuMzZsLTAuMzMsLTAuMTdsLTYuNDYsMS4zbC0wLjE1LDAuMDhsLTYuMjcsNi4zM2wtMC4wMSwwLjQxbDEuNywxLjg3bC01LjA0LDAuODdsLTMuNTEsMC4zNGwwLjE2LC0yLjMybC0wLjI2LC0wLjMybC0zLjg5LC0wLjU2bC0wLjE5LDAuMDRsLTMuMDIsMS43N2wtNy42MywtMC42M2wtOC4yNCwxLjFsLTAuMTYsMC4wN2wtOC4xMSw3LjA5bC05LjYsOC4zMWwwLjE2LDAuNTJsMy43OSwwLjQybDEuMTYsMi4wM2wwLjE3LDAuMTRsMi40MywwLjc2bDAuMzEsLTAuMDhsMS41LC0xLjYxbDIuNDksMC4ybDMuNDYsMy42bDAuMDgsMi42N2wtMS45MSwzLjI2bC0wLjA0LDAuMTRsLTAuMjEsMy45MWwtMS4xMSw1LjA5bC0zLjczLDQuNTVsLTAuODcsMi4yMWwtNi43Myw3LjE0bC0xLjU5LDEuNzdsLTMuMjMsMS43MmwtMS4zOCwwLjAzbC0xLjQ4LC0xLjM5bC0wLjM3LC0wLjAzbC0zLjM2LDIuMjJsLTAuMTEsMC4xNGwtMC4xNiwwLjQybC0wLjAxLC0xLjA5bDEuMCwtMC4wNmwwLjI4LC0wLjI3bDAuMzYsLTMuNmwtMC42MSwtMi41MWwxLjg1LC0wLjk0bDIuOTQsMC41M2wwLjMyLC0wLjE1bDEuNzEsLTMuMWwwLjg0LC0zLjM4bDAuOTcsLTEuMThsMS4zMiwtMi44OGwtMC4zNCwtMC40MmwtNC4xNCwwLjk1bC0yLjE4LDEuMjVsLTMuNTEsLTAuMGwtMC45NSwtMi44MWwtMC4xLC0wLjE0bC0yLjk3LC0yLjNsLTAuMTEsLTAuMDVsLTQuMTksLTEuMGwtMC44OSwtMy4wOGwtMC44NywtMi4wM2wtMC45NSwtMS40NmwtMS41NCwtMy4zN2wtMC4xMiwtMC4xNGwtMi4yNywtMS4yOGwtMy44MywtMS4wMmwtMy4zNywwLjFsLTMuMTEsMC42MWwtMC4xMywwLjA2bC0yLjA3LDEuNjlsMC4wNCwwLjQ5bDEuMjMsMC43MmwwLjAzLDEuNTNsLTEuMzQsMS4wNWwtMi4yNiwzLjUxbC0wLjA1LDAuMTdsMC4wMiwxLjI3bC0zLjI1LDEuOWwtMi44NywtMS4xN2wtMC4xNCwtMC4wMmwtMi44NiwwLjI2bC0xLjIyLC0xLjAybC0wLjEyLC0wLjA2bC0xLjUsLTAuMzVsLTAuMjMsMC4wNGwtMy42MiwyLjI3bC0zLjI0LDAuNTNsLTIuMjgsMC43OWwtMy4wOCwtMC41MWwtMi4yNCwwLjAzbC0xLjQ5LC0xLjYxbC0yLjQ1LC0xLjU3bC0wLjExLC0wLjA0bC0yLjYsLTAuNDNsLTMuMTcsMC40M2wtMi4zMSwwLjU5bC0zLjMxLC0xLjI4bC0wLjQ1LC0yLjMxbC0wLjIxLC0wLjIzbC0yLjk0LC0wLjg1bC0yLjI2LC0wLjM5bC0yLjc3LC0xLjM2bC0wLjM3LDAuMDlsLTIuNTksMy40NWwtMC4wMywwLjMybDAuOTEsMS43NGwtMi4xNSwyLjAxbC0zLjQ3LC0wLjc5bC0yLjQ0LC0wLjEybC0xLjU5LC0xLjQ2bC0wLjIsLTAuMDhsLTIuNTUsLTAuMDVsLTIuMTIsLTAuOThsLTAuMjQsLTAuMDFsLTMuODUsMS41N2wtNC43NCwyLjc5bC0yLjU5LDAuNTVsLTAuNzksMC4yMWwtMS4yMSwtMS44MWwtMC4yOSwtMC4xM2wtMy4wNSwwLjQxbC0wLjk2LC0xLjI1bC0wLjE0LC0wLjFsLTEuNjUsLTAuNmwtMS4xNSwtMS44MmwtMC4xMywtMC4xMmwtMS4zOCwtMC42bC0wLjE5LC0wLjAybC0zLjQ5LDAuODJsLTMuMzUsLTEuODVsLTAuMzgsMC4wOGwtMS4wOCwxLjRsLTUuMzYsLTguMTdsLTMuMDIsLTIuNTJsMC43MiwtMC44NWwwLjAxLC0wLjM4bC0wLjM3LC0wLjA4bC02LjIyLDMuMjFsLTEuOTgsMC4xNmwwLjE3LC0xLjUxbC0wLjIsLTAuMzFsLTMuMjIsLTEuMTdsLTAuMTksLTAuMGwtMi4zLDAuNzRsLTAuNzIsLTMuMjdsLTAuMjQsLTAuMjNsLTQuNSwtMC43NWwtMC4yMSwwLjA0bC0yLjIsMS40MmwtNi4yMSwxLjI3bC0wLjExLDAuMDVsLTEuMTYsMC44MWwtOS4zLDEuMTlsLTAuMTgsMC4wOWwtMS4xNSwxLjE3bC0wLjAyLDAuMzlsMS41NiwyLjAxbC0yLjAyLDAuNzRsLTAuMTYsMC40MmwwLjM1LDAuNjhsLTIuMTgsMS40OWwwLjAyLDAuNTFsMy44MywyLjE2bC0wLjQ1LDEuMTNsLTMuMzEsLTAuMTNsLTAuMjUsMC4xMmwtMC41NywwLjc3bC0yLjk3LC0xLjU5bC0wLjE1LC0wLjA0bC0zLjk3LDAuMDdsLTAuMTMsMC4wM2wtMi41MywxLjMybC0yLjg0LC0xLjI4bC01LjUyLC0yLjNsLTAuMTIsLTAuMDJsLTMuOTEsMC4wOWwtMC4xNiwwLjA1bC01LjE3LDMuNmwtMC4xMywwLjIxbC0wLjI1LDEuODlsLTIuMTcsLTEuNmwtMC40NCwwLjFsLTIuMCwzLjU5bDAuMDYsMC4zN2wwLjU1LDAuNWwtMS4zMiwyLjIzbDAuMDQsMC4zNmwyLjEzLDIuMTdsMC4yMywwLjA5bDEuNywtMC4wOGwxLjQyLDEuODlsLTAuMjMsMS41bDAuMTksMC4zMmwwLjk0LDAuMzhsLTAuODksMS40NGwtMi4zLDAuNDlsLTAuMTcsMC4xMWwtMi40OSwzLjJsMC4wLDAuMzdsMi4yLDIuODFsLTAuMjMsMS45M2wwLjA2LDAuMjJsMi41NiwzLjMybC0xLjI3LDEuMDJsLTAuNCwwLjY2bC0wLjgsLTAuMTVsLTEuNjUsLTEuNzVsLTAuMTgsLTAuMDlsLTAuNjYsLTAuMDlsLTEuNDUsLTAuNjRsLTAuNzIsLTEuMTZsLTAuMTgsLTAuMTNsLTIuMzQsLTAuNjNsLTAuMTcsMC4wbC0xLjMyLDAuNDFsLTAuMzEsLTAuNGwtMC4xMiwtMC4wOWwtMy40OSwtMS40OGwtMy42NywtMC40OWwtMi4xLC0wLjUybC0wLjMsMC4xbC0wLjEyLDAuMTRsLTIuOTYsLTIuNGwtMi44OSwtMS4xOWwtMS42OSwtMS40MmwxLjI3LC0wLjM1bDAuMTYsLTAuMWwyLjA4LC0yLjYxbC0wLjA0LC0wLjQxbC0xLjAyLC0wLjlsMy4yMSwtMS4xMmwwLjIsLTAuMzFsLTAuMDcsLTAuNjlsLTAuMzcsLTAuMjZsLTEuODYsMC40MmwwLjA1LC0wLjg2bDEuMTEsLTAuNzZsMi4zNSwtMC4yM2wwLjI1LC0wLjE5bDAuMzksLTEuMDdsMC4wLC0wLjE5bC0wLjUxLC0xLjY0bDAuOTUsLTEuNThsMC4wNCwtMC4xNmwtMC4wMywtMC45NWwtMC4yMiwtMC4yOGwtMy42OSwtMS4wNmwtMS40MywwLjAybC0xLjQ1LC0xLjQ0bC0wLjI5LC0wLjA4bC0xLjgzLDAuNDlsLTIuODgsLTEuMDRsMC4wNCwtMC40MmwtMC4wNCwtMC4xOGwtMC44OSwtMS40M2wtMC4yMywtMC4xNGwtMS43NywtMC4xNGwtMC4xMywtMC42NmwwLjUyLC0wLjU2bDAuMDEsLTAuNGwtMS42LC0xLjlsLTAuMjcsLTAuMWwtMi41NSwwLjMybC0wLjcxLC0wLjE2bC0wLjMsMC4xbC0wLjUzLDAuNjNsLTAuNTgsLTAuMDhsLTAuNTYsLTEuOTdsLTAuNDgsLTAuOTRsMC4xNywtMC4xMWwxLjkyLDAuMTFsMC4yLC0wLjA2bDAuOTcsLTAuNzRsMC4wNSwtMC40MmwtMC43MiwtMC45MWwtMC4xMywtMC4xbC0xLjQzLC0wLjUxbDAuMDksLTAuMzZsLTAuMTMsLTAuMzNsLTAuOTcsLTAuNTlsLTEuNDMsLTIuMDZsMC40NCwtMC43N2wwLjA0LC0wLjE5bC0wLjI1LC0xLjY0bC0wLjIsLTAuMjRsLTIuNDUsLTAuODRsLTAuMTksLTAuMGwtMS4wNSwwLjM0bC0wLjI1LC0wLjYybC0wLjE4LC0wLjE3bC0yLjUsLTAuODRsLTAuNzQsLTEuOTNsLTAuMjEsLTEuN2wtMC4xMywtMC4yMWwtMC45MiwtMC42M2wwLjgzLC0wLjg5bDAuMDcsLTAuMjdsLTAuNzEsLTMuMjZsMS42OSwtMi4wMWwwLjAzLC0wLjM0bC0wLjI0LC0wLjQxbDIuNjMsLTEuOWwtMC4wMSwtMC40OWwtMi4zMSwtMS41N2w1LjA4LC00LjYxbDIuMzMsLTIuMjRsMS4wMSwtMi4wOGwtMC4wOSwtMC4zN2wtMy41MiwtMi41NmwwLjk0LC0yLjM4bC0wLjA0LC0wLjI5bC0yLjE0LC0yLjg2bDEuNjEsLTMuMzVsLTAuMDEsLTAuMjlsLTIuODEsLTQuNThsMi4xOSwtMy4wNGwtMC4wNiwtMC40MmwtMy43LC0yLjc2bDAuMzIsLTIuNjdsMS44NywtMC4zOGw0LjI2LC0xLjc3bDIuNDYsLTEuNDdsMy45NiwyLjU4bDAuMTIsMC4wNWw2LjgxLDEuMDRsOS4zNyw0Ljg3bDEuODEsMS45MmwwLjE1LDIuNTVsLTIuNjEsMi4wNmwtMy45NSwxLjA3bC0xMS4xLC0zLjE1bC0wLjE3LDAuMGwtMS44NCwwLjUzbC0wLjEsMC41M2wzLjk3LDIuOTdsMC4xNSwxLjc3bDAuMTYsNC4xNGwwLjE5LDAuMjdsMy4yMSwxLjIybDEuOTQsMS4wM2wwLjQ0LC0wLjIybDAuMzIsLTEuOTRsLTAuMDcsLTAuMjVsLTEuMzIsLTEuNTJsMS4yNSwtMS4ybDUuODcsMi40NWwwLjI0LC0wLjAxbDIuMTEsLTAuOThsMC4xMywtMC40MmwtMS41NSwtMi43NWw1LjUyLC0zLjg0bDIuMTMsMC4yMmwyLjI4LDEuNDJsMC40MywtMC4xMmwxLjQ2LC0yLjg3bC0wLjA0LC0wLjMzbC0xLjk3LC0yLjM3bDEuMTQsLTIuMzhsLTAuMDIsLTAuM2wtMS40MiwtMi4wN2w2LjE1LDEuMjJsMS4xNCwxLjkybC0yLjc0LDAuNDZsLTAuMjUsMC4zbDAuMDIsMi4zNmwwLjEyLDAuMjRsMS45NywxLjQ0bDAuMjUsMC4wNWwzLjg3LC0wLjkxbDAuMjIsLTAuMjNsMC41OCwtMi41NWw1LjA5LC0xLjk4bDguNjcsLTMuNjlsMS4yMiwwLjE0bC0yLjA2LDIuMmwwLjE4LDAuNWwzLjExLDAuNDVsMC4yMywtMC4wN2wxLjcxLC0xLjQxbDQuNTksLTAuMTJsMC4xMiwtMC4wM2wzLjUzLC0xLjcybDIuNywyLjQ4bDAuNDIsLTAuMDFsMi44NSwtMi44OGwtMC4wLC0wLjQzbC0yLjQyLC0yLjM1bDEuMCwtMS4xM2w3LjIsMS4zMWwzLjQyLDEuMzZsOS4wNiw0Ljk3bDAuMzksLTAuMDhsMS42NywtMi4yN2wtMC4wNCwtMC40bC0yLjQ2LC0yLjIzbC0wLjA2LC0wLjgybC0wLjI2LC0wLjI3bC0yLjY0LC0wLjM4bDAuNjksLTEuNzZsMC4wLC0wLjIybC0xLjMyLC0zLjQ3bC0wLjA3LC0xLjI3bDQuNTIsLTQuMDlsMC4wOCwtMC4xMWwxLjYsLTQuMThsMS42NywtMC44NGw2LjMzLDEuMmwwLjQ2LDIuMzFsLTIuMzEsMy42N2wwLjA1LDAuMzhsMS40OSwxLjQxbDAuNzcsMy4wNGwtMC41Niw2LjA1bDAuMDksMC4yNGwyLjYyLDIuNTRsLTAuOTksMi42NWwtNC44Nyw1Ljk2bDAuMTcsMC40OGwyLjg2LDAuNjFsMC4zMSwtMC4xM2wwLjk0LC0xLjQybDIuNjcsLTEuMDRsMC4xOCwtMC4xOWwwLjY0LC0yLjAxbDIuMTEsLTEuOThsMC4wNSwtMC4zN2wtMS4zOCwtMi4zMmwxLjExLC0yLjc0bC0wLjI0LC0wLjQxbC0yLjUzLC0wLjMzbC0wLjUzLC0yLjE2bDEuOTYsLTQuNDJsLTAuMDUsLTAuMzJsLTMuMDMsLTMuNDhsNC4yMSwtMi45NGwwLjEyLC0wLjNsLTAuNTIsLTMuMDRsMC43MiwtMC4wNmwxLjE4LDIuMzVsLTAuOTcsNC4zOWwwLjIsMC4zNWwyLjY4LDAuODRsMC4zNywtMC4zOGwtMS4wNSwtMy4wN2wzLjg5LC0xLjcxbDUuMDUsLTAuMjRsNC41NSwyLjYybDAuMzYsLTAuMDVsMC4wNSwtMC4zNmwtMi4xOSwtMy44NGwtMC4yMywtNC43OGw0LjA3LC0wLjkybDUuOTgsMC4yMWw1LjQ3LC0wLjY0bDAuMiwtMC40OGwtMS44OCwtMi4zN2wyLjY1LC0yLjk5bDIuNzUsLTAuMTNsMC4xMiwtMC4wM2w0LjgyLC0yLjQ4bDYuNTYsLTAuNjdsMC4yMywtMC4xNGwwLjc2LC0xLjI3bDYuMzMsLTAuNDZsMS45NywxLjExbDAuMjgsMC4wMWw1LjU1LC0yLjcxbDQuNTMsMC4wOGwwLjI5LC0wLjIxbDAuNjcsLTIuMThsMi4yOSwtMi4xNWw1Ljc1LC0yLjEzbDMuNDgsMS40bC0yLjcsMS4wM2wtMC4xOSwwLjMxbDAuMjYsMC4yNmw1LjQ3LDAuNzhaTTg3MS44Myw2NS43M2wwLjI1LC0wLjE1bDEuOTksMC4wMWwzLjMsMS4ybC0wLjA4LDAuMjJsLTIuNDEsMS4wM2wtNS43MywwLjQ5bC0wLjMxLC0xLjBsMi45OSwtMS44Wk03OTcuNjQsNDguNDRsLTIuMjIsMS41MWwtMy44NSwtMC40M2wtNC4zNSwtMS44NWwwLjQyLC0xLjEzbDQuNDIsMC43Mmw1LjU5LDEuMTdaTTc4My44Miw0Ni4wNmwtMS43MSwzLjI1bC05LjA1LC0wLjE0bC00LjExLDEuMTVsLTQuNjQsLTMuMDRsMS4yMSwtMy4xM2wzLjExLC0wLjkxbDYuNTMsMC4yMmw4LjY2LDIuNTlaTTc4MC4zNywxNDUuNzFsMi4yOCw1LjIzbC0zLjA5LC0wLjg5bC0wLjM3LDAuMTlsLTEuNTQsNC42NWwwLjA0LDAuMjdsMi4zOCwzLjE3bC0wLjA1LDEuNGwtMS40MSwtMS40MWwtMC40NiwwLjA0bC0xLjIzLDEuODFsLTAuMzMsLTEuODZsMC4yOCwtMy4xbC0wLjI4LC0zLjQxbDAuNTgsLTIuNDZsMC4xMSwtNC4zOWwtMC4wMywtMC4xM2wtMS40NCwtMy4ybDAuMjEsLTQuMzlsMi4xOSwtMS40OWwwLjA5LC0wLjQxbC0wLjgxLC0xLjNsMC40OCwtMC4yMWwwLjU2LDEuOTRsMC44NiwzLjIzbC0wLjA1LDMuMzZsMS4wMywzLjM1Wk03ODAuMTYsNTcuMThsLTMuNCwwLjAzbC01LjA2LC0wLjUzbDEuOTcsLTEuNTlsMi45NSwtMC40MmwzLjM1LDEuNzVsMC4xOCwwLjc3Wk02ODMuODQsMzEuMThsLTEzLjI5LDEuOTdsNC4xNiwtNi41NmwxLjg4LC0wLjU4bDEuNzcsMC4zNGw2LjA4LDMuMDJsLTAuNiwxLjhaTTY3MC45NCwyOC4wMmwtNS4xOCwwLjY1bC02Ljg5LC0xLjU4bC00LjAzLC0yLjA3bC0xLjg4LC0zLjk4bC0wLjE4LC0wLjE2bC0yLjgsLTAuOTNsNS45MSwtMy42Mmw1LjI1LC0xLjI5bDQuNzMsMi44OGw1LjYzLDUuNDRsLTAuNTcsNC42NlpNNTY0LjM3LDY4Ljk4bC0wLjg1LDAuMjNsLTcuOTMsLTAuNTdsLTAuNiwtMS44NGwtMC4yMSwtMC4ybC00LjM0LC0xLjE4bC0wLjMsLTIuMDhsMi4zNCwtMC45MmwwLjE5LC0wLjI5bC0wLjA4LC0yLjQzbDQuODUsLTQuMGwtMC4xMiwtMC41MmwtMS42OCwtMC40M2w1LjQ3LC0zLjk0bDAuMTEsLTAuMzNsLTAuNiwtMi4wMmw1LjM2LC0yLjU1bDguMjIsLTMuMjdsOC4yOSwtMC45Nmw0LjM0LC0xLjk0bDQuNjcsLTAuNjVsMS40NSwxLjcybC0xLjQzLDEuMzdsLTguOCwyLjUybC03LjY1LDIuNDJsLTcuOTIsNC44NGwtMy43Myw0Ljc1bC0zLjkyLDQuNThsLTAuMDcsMC4yM2wwLjUxLDMuODhsMC4xMSwwLjJsNC4zMiwzLjM5Wk01NDguODYsMTguNTdsLTMuMjgsMC43NWwtMi4yNSwwLjQ0bC0wLjIyLDAuMTlsLTAuMywwLjgxbC0yLjY3LDAuODZsLTIuMjcsLTEuMTRsMS4yLC0xLjUxbC0wLjIzLC0wLjQ5bC0zLjE0LC0wLjFsMi40OCwtMC41NGwzLjU1LC0wLjA3bDAuNDQsMS4zNmwwLjQ5LDAuMTJsMS40LC0xLjM1bDIuMiwtMC45bDMuMTMsMS4wOGwtMC41NCwwLjQ5Wk00NzcuNSwxMzMuMjVsLTQuMjEsMC4wNWwtMi42OSwtMC4zNGwwLjM5LC0xLjAzbDMuMjQsLTEuMDZsMi41MSwwLjU4bDAuODUsMC40M2wtMC4yLDAuNzFsLTAuMCwwLjE1bDAuMTIsMC41MlpcIiwgXCJuYW1lXCI6IFwiUnVzc2lhXCJ9LCBcIlJXXCI6IHtcInBhdGhcIjogXCJNNDk3LjAzLDI4OC4xMmwwLjc4LDEuMTFsLTAuMTIsMS4xOWwtMC40OSwwLjIxbC0xLjI1LC0wLjE1bC0wLjMsMC4xNmwtMC42NywxLjI0bC0xLjAxLC0wLjEzbDAuMTYsLTAuOTJsMC4yMiwtMC4xMmwwLjE1LC0wLjI0bDAuMDksLTEuMzdsMC40OSwtMC40OGwwLjQyLDAuMThsMC4yNSwtMC4wMWwxLjI2LC0wLjY1WlwiLCBcIm5hbWVcIjogXCJSd2FuZGFcIn0sIFwiUlNcIjoge1wicGF0aFwiOiBcIk00NjkuNzUsMTY4LjY1bDAuMjEsLTAuMjFsMC4zNiwtMS40NGwtMC4wOCwtMC4yOWwtMS4wNiwtMS4wM2wwLjU0LC0xLjE2bC0wLjI4LC0wLjQzbC0wLjI2LDAuMGwwLjU1LC0wLjY3bC0wLjAxLC0wLjM5bC0wLjc3LC0wLjg2bC0wLjQ1LC0wLjg5bDEuNTYsLTAuNjdsMS4zOSwwLjEybDEuMjIsMS4xbDAuMjYsMC45MWwwLjE2LDAuMTlsMS4zOCwwLjY2bDAuMTcsMS4xMmwwLjE0LDAuMjFsMS40NiwwLjlsMC4zNSwtMC4wM2wwLjYyLC0wLjU0bDAuMDksMC4wNmwtMC4yOCwwLjI1bC0wLjAzLDAuNDJsMC4yOSwwLjM0bC0wLjQ0LDAuNWwtMC4wNywwLjI2bDAuMjIsMS4xMmwwLjA3LDAuMTRsMS4wMiwxLjFsLTAuODEsMC44NGwtMC40MiwwLjk2bDAuMDQsMC4zbDAuMTIsMC4xNWwtMC4xNSwwLjE2bC0xLjA0LDAuMDRsLTAuMzksMC4wOGwwLjMzLC0wLjgxbC0wLjI5LC0wLjQxbC0wLjIxLDAuMDFsLTAuMzksLTAuNDVsLTAuMTMsLTAuMDlsLTAuMzIsLTAuMTFsLTAuMjcsLTAuNGwtMC4xNCwtMC4xMWwtMC40LC0wLjE2bC0wLjMxLC0wLjM3bC0wLjM0LC0wLjA5bC0wLjQ1LDAuMTdsLTAuMTgsMC4xOGwtMC4yOSwwLjg0bC0wLjk2LC0wLjY1bC0wLjgxLC0wLjMzbC0wLjMyLC0wLjM3bC0wLjIyLC0wLjE4WlwiLCBcIm5hbWVcIjogXCJSZXB1YmxpYyBvZiBTZXJiaWFcIn0sIFwiTFRcIjoge1wicGF0aFwiOiBcIk00NzguMTMsMTMzLjMxbC0wLjE0LC0wLjYzbDAuMjUsLTAuODhsLTAuMTUsLTAuMzVsLTEuMTcsLTAuNThsLTIuNDMsLTAuNTdsLTAuNDUsLTIuNTFsMi41OCwtMC45N2w0LjE0LDAuMjJsMi4zLC0wLjMybDAuMjYsMC41NGwwLjIyLDAuMTdsMS4yNiwwLjIybDIuMjUsMS42bDAuMTksMS4yM2wtMS44NywxLjAxbC0wLjE0LDAuMThsLTAuNTQsMS44M2wtMi41NCwxLjIxbC0yLjE4LC0wLjAybC0wLjUyLC0wLjkxbC0wLjE4LC0wLjE0bC0xLjExLC0wLjMyWlwiLCBcIm5hbWVcIjogXCJMaXRodWFuaWFcIn0sIFwiTFVcIjoge1wicGF0aFwiOiBcIk00MzUuOTUsMTQ3Ljk5bDAuMzMsMC40OWwtMC4xMSwxLjA3bC0wLjM5LDAuMDRsLTAuMjksLTAuMTVsMC4yMSwtMS40bDAuMjUsLTAuMDVaXCIsIFwibmFtZVwiOiBcIkx1eGVtYm91cmdcIn0sIFwiTFJcIjoge1wicGF0aFwiOiBcIk00MDEuMzcsMjczLjY3bC0wLjMyLDAuMDFsLTIuNDgsLTEuMTVsLTIuMjQsLTEuODlsLTIuMTQsLTEuMzhsLTEuNDcsLTEuNDJsMC40NCwtMC41OWwwLjA1LC0wLjEzbDAuMTIsLTAuNjVsMS4wNywtMS4zbDEuMDgsLTEuMDlsMC41MiwtMC4wN2wwLjQzLC0wLjE4bDAuODQsMS4yNGwtMC4xNSwwLjg5bDAuMDcsMC4yNWwwLjQ5LDAuNTRsMC4yMiwwLjFsMC43MSwwLjAxbDAuMjcsLTAuMTZsMC40MiwtMC44M2wwLjE5LDAuMDJsLTAuMDYsMC41MmwwLjIzLDEuMTJsLTAuNSwxLjAzbDAuMDYsMC4zNWwwLjczLDAuNjlsMC4xNCwwLjA4bDAuNzEsMC4xNWwwLjkyLDAuOTFsMC4wNiwwLjc2bC0wLjE3LDAuMjJsLTAuMDYsMC4xNWwtMC4xNywxLjhaXCIsIFwibmFtZVwiOiBcIkxpYmVyaWFcIn0sIFwiUk9cIjoge1wicGF0aFwiOiBcIk00NzcuOTQsMTU1LjE5bDEuMDIsLTAuNjRsMS40OSwwLjMzbDEuNTIsMC4wMWwxLjA5LDAuNzNsMC4zMiwwLjAxbDAuODEsLTAuNDZsMS44LC0wLjNsMC4xOCwtMC4xbDAuNTQsLTAuNjRsMC44NiwwLjBsMC42NCwwLjI2bDAuNzEsMC44N2wwLjgsMS4zNWwxLjM5LDEuODFsMC4wNywxLjI1bC0wLjI2LDEuM2wwLjAxLDAuMTVsMC40NSwxLjQybDAuMTUsMC4xOGwxLjEyLDAuNTdsMC4yNSwwLjAxbDEuMDUsLTAuNDVsMC44NiwwLjRsMC4wMywwLjQzbC0wLjkyLDAuNTFsLTAuNjMsLTAuMjRsLTAuNCwwLjIybC0wLjY0LDMuNDFsLTEuMTIsLTAuMjRsLTEuNzgsLTEuMDlsLTAuMjMsLTAuMDRsLTIuOTUsMC43MWwtMS4yNSwwLjc3bC0zLjU1LC0wLjE2bC0xLjg5LC0wLjQ3bC0wLjE0LC0wLjBsLTAuNzUsMC4xN2wtMC42MSwtMS4wN2wtMC4zLC0wLjM2bDAuMzYsLTAuMzJsLTAuMDQsLTAuNDhsLTAuNjIsLTAuMzhsLTAuMzYsMC4wM2wtMC42MiwwLjU0bC0xLjE1LC0wLjcxbC0wLjE4LC0xLjE0bC0wLjE3LC0wLjIybC0xLjQsLTAuNjdsLTAuMjQsLTAuODZsLTAuMDksLTAuMTRsLTAuOTYsLTAuODdsMS40OSwtMC40NGwwLjE2LC0wLjExbDEuNTEsLTIuMTRsMS4xNSwtMi4wOWwxLjQ0LC0wLjYzWlwiLCBcIm5hbWVcIjogXCJSb21hbmlhXCJ9LCBcIkdXXCI6IHtcInBhdGhcIjogXCJNMzgzLjAzLDI1Ni43M2wtMS4xMiwtMC44OGwtMC4xNCwtMC4wNmwtMC45NCwtMC4xNWwtMC40MywtMC41NGwwLjAxLC0wLjI3bC0wLjEzLC0wLjI2bC0wLjY4LC0wLjQ4bC0wLjA1LC0wLjE2bDAuOTksLTAuMzFsMC43NywwLjA4bDAuMTUsLTAuMDJsMC42MSwtMC4yNmw0LjI1LDAuMWwtMC4wMiwwLjQ0bC0wLjE5LDAuMThsLTAuMDgsMC4yOWwwLjE3LDAuNjZsLTAuMTcsMC4xNGwtMC40NCwwLjBsLTAuMTYsMC4wNWwtMC41NywwLjM3bC0wLjY2LC0wLjA0bC0wLjI0LDAuMWwtMC45MiwxLjAzWlwiLCBcIm5hbWVcIjogXCJHdWluZWEgQmlzc2F1XCJ9LCBcIkdUXCI6IHtcInBhdGhcIjogXCJNMTk1LjEzLDI0OS44OWwtMS4wNSwtMC4zNWwtMS41LC0wLjA0bC0xLjA2LC0wLjQ3bC0xLjE5LC0wLjkzbDAuMDQsLTAuNTNsMC4yNywtMC41NWwtMC4wMywtMC4zMWwtMC4yNCwtMC4zMmwxLjAyLC0xLjc3bDMuMDQsLTAuMDFsMC4zLC0wLjI4bDAuMDYsLTAuODhsLTAuMTksLTAuM2wtMC4zLC0wLjExbC0wLjIzLC0wLjQ1bC0wLjExLC0wLjEybC0wLjksLTAuNThsLTAuMzUsLTAuMzNsMC4zNywtMC4wbDAuMywtMC4zbDAuMCwtMS4xNWw0LjA1LDAuMDJsLTAuMDIsMS43NGwtMC4yLDIuODlsMC4zLDAuMzJsMC42NywtMC4wbDAuNzUsMC40MmwwLjQsLTAuMTFsLTAuNjIsMC41M2wtMS4xNywwLjdsLTAuMTMsMC4xNmwtMC4xOCwwLjQ5bDAuMCwwLjIxbDAuMTQsMC4zNGwtMC4zNSwwLjQ0bC0wLjQ5LDAuMTNsLTAuMiwwLjQxbDAuMDMsMC4wNmwtMC4yNywwLjE2bC0wLjg2LDAuNjRsLTAuMTIsMC4yMlpNMTk5LjM1LDI0NS4zOGwwLjA3LC0wLjEzbDAuMDUsMC4wMmwtMC4xMywwLjExWlwiLCBcIm5hbWVcIjogXCJHdWF0ZW1hbGFcIn0sIFwiR1JcIjoge1wicGF0aFwiOiBcIk00ODcuMiwxNzQuNTVsLTAuNjQsMS41NGwtMC40MywwLjI0bC0xLjQxLC0wLjA4bC0xLjI4LC0wLjI4bC0wLjE0LDAuMGwtMy4wMywwLjc3bC0wLjEzLDAuNTFsMS4zOSwxLjM0bC0wLjc4LDAuMjlsLTEuMiwwLjBsLTEuMjMsLTEuNDJsLTAuNDcsMC4wMmwtMC40NywwLjY1bC0wLjA0LDAuMjdsMC41NiwxLjc2bDAuMDYsMC4xMWwxLjAyLDEuMTJsLTAuNjYsMC40NWwtMC4wNCwwLjQ2bDEuMzksMS4zNWwxLjE1LDAuNzlsMC4wMiwxLjA2bC0xLjkxLC0wLjYzbC0wLjM2LDAuNDJsMC41NiwxLjEybC0xLjIsMC4yM2wtMC4yMiwwLjRsMC44LDIuMTRsLTEuMTUsMC4wMmwtMS44OSwtMS4xNWwtMC44OSwtMi4xOWwtMC40MywtMS45MWwtMC4wNSwtMC4xMWwtMC45OCwtMS4zNWwtMS4yNCwtMS42MmwtMC4xMywtMC42M2wxLjA3LC0xLjMybDAuMDYsLTAuMTRsMC4xMywtMC44MWwwLjY4LC0wLjM2bDAuMTYsLTAuMjVsMC4wMywtMC41NGwxLjQsLTAuMjNsMC4xMiwtMC4wNWwwLjg3LC0wLjZsMS4yNiwwLjA1bDAuMjUsLTAuMTFsMC4zNCwtMC40M2wwLjMzLC0wLjA3bDEuODEsMC4wOGwwLjEzLC0wLjAybDEuODcsLTAuNzdsMS42NCwwLjk3bDAuMTksMC4wNGwyLjI4LC0wLjI4bDAuMjYsLTAuMjlsMC4wMiwtMC45NWwwLjU2LDAuMzZaTTQ4MC40NCwxOTIuMGwxLjA1LDAuNzRsMC4wMSwwLjBsLTEuMjYsLTAuMjNsMC4yLC0wLjUxWk00ODEuNzYsMTkyLjc5bDEuODYsLTAuMTVsMS41MywwLjE3bC0wLjAyLDAuMTlsMC4zNCwwLjNsLTIuMjgsMC4xNWwwLjAxLC0wLjEzbC0wLjI1LC0wLjMxbC0xLjE5LC0wLjIyWk00ODUuNjUsMTkzLjI4bDAuNjUsLTAuMTZsLTAuMDUsMC4xMmwtMC42LDAuMDRaXCIsIFwibmFtZVwiOiBcIkdyZWVjZVwifSwgXCJHUVwiOiB7XCJwYXRoXCI6IFwiTTQ0NC44MSwyODIuMDRsLTAuMjEsLTAuMTdsMC43NCwtMi40bDMuNTYsMC4wNWwwLjAyLDIuNDJsLTMuMzQsLTAuMDJsLTAuNzYsMC4xM1pcIiwgXCJuYW1lXCI6IFwiRXF1YXRvcmlhbCBHdWluZWFcIn0sIFwiR1lcIjoge1wicGF0aFwiOiBcIk0yNzEuMzQsMjY0LjI1bDEuNDMsMC44MWwxLjQ0LDEuNTNsMC4wNiwxLjE5bDAuMjgsMC4yOGwwLjg0LDAuMDVsMi4xMywxLjkybC0wLjM0LDEuOTNsLTEuMzcsMC41OWwtMC4xNywwLjM0bDAuMTIsMC41MWwtMC40MywxLjIxbDAuMDMsMC4yNmwxLjExLDEuODJsMC4yNiwwLjE0bDAuNTYsMC4wbDAuMzIsMS4yOWwxLjI1LDEuNzhsLTAuMDgsMC4wMWwtMS4zNCwtMC4yMWwtMC4yNCwwLjA2bC0wLjc4LDAuNjRsLTEuMDYsMC40MWwtMC43NiwwLjFsLTAuMjIsMC4xNWwtMC4xOCwwLjMybC0wLjk1LC0wLjFsLTEuMzgsLTEuMDVsLTAuMTksLTEuMTNsLTAuNiwtMS4xOGwwLjM3LC0xLjk2bDAuNjUsLTAuODNsMC4wMywtMC4zMmwtMC41NywtMS4xN2wtMC4xNSwtMC4xNGwtMC42MiwtMC4yN2wwLjI1LC0wLjg1bC0wLjA4LC0wLjNsLTAuNTgsLTAuNThsLTAuMjQsLTAuMDlsLTEuMTUsMC4xbC0xLjQxLC0xLjU4bDAuNDgsLTAuNDlsMC4wOSwtMC4yMmwtMC4wNCwtMC45MmwxLjMxLC0wLjM0bDAuNzMsLTAuNTJsMC4wNCwtMC40NGwtMC43NSwtMC44MmwwLjE2LC0wLjY2bDEuNzQsLTEuM1pcIiwgXCJuYW1lXCI6IFwiR3V5YW5hXCJ9LCBcIkdFXCI6IHtcInBhdGhcIjogXCJNNTI1LjQxLDE3NC4xOWwwLjI2LC0wLjg4bC0wLjAsLTAuMTdsLTAuNjMsLTIuMDZsLTAuMSwtMC4xNWwtMS40NSwtMS4xMmwtMC4xMSwtMC4wNWwtMS4zMSwtMC4zM2wtMC42NiwtMC42OWwxLjk3LDAuNDhsMy42NSwwLjQ5bDMuMywxLjQxbDAuMzksMC41bDAuMzMsMC4xbDEuNDMsLTAuNDVsMi4xNCwwLjU4bDAuNywxLjE0bDAuMTMsMC4xMmwxLjA2LDAuNDdsLTAuMTgsMC4xMWwtMC4wOCwwLjQzbDEuMDgsMS40MWwtMC4wNiwwLjA2bC0xLjE2LC0wLjE1bC0xLjgyLC0wLjg0bC0wLjMxLDAuMDRsLTAuNTUsMC40NGwtMy4yOSwwLjQ0bC0yLjMyLC0xLjQxbC0wLjE3LC0wLjA0bC0yLjI1LDAuMTJaXCIsIFwibmFtZVwiOiBcIkdlb3JnaWFcIn0sIFwiR0JcIjoge1wicGF0aFwiOiBcIk00MTIuODIsMTE4LjZsLTIuMzEsMy40bC0wLjAsMC4zM2wwLjMxLDAuMTNsMi41MiwtMC40OWwyLjM0LDAuMDJsLTAuNTYsMi41MWwtMi4yMiwzLjEzbDAuMjIsMC40N2wyLjQzLDAuMjFsMi4zNSw0LjM1bDAuMTcsMC4xNGwxLjU4LDAuNTFsMS40OSwzLjc4bDAuNzMsMS4zN2wwLjIsMC4xNWwyLjc2LDAuNTlsLTAuMjUsMS43NWwtMS4xOCwwLjkxbC0wLjA4LDAuMzlsMC44NywxLjQ5bC0xLjk2LDEuNTFsLTMuMzEsLTAuMDJsLTQuMTUsMC44OGwtMS4wNywtMC41OWwtMC4zNSwwLjA0bC0xLjU1LDEuNDRsLTIuMTcsLTAuMzVsLTAuMjIsMC4wNWwtMS42MSwxLjE1bC0wLjc4LC0wLjM4bDMuMzEsLTMuMTJsMi4xOCwtMC43bDAuMjEsLTAuMzFsLTAuMjYsLTAuMjdsLTMuNzgsLTAuNTRsLTAuNDgsLTAuOWwyLjMsLTAuOTJsMC4xMywtMC40NmwtMS4yOSwtMS43MWwwLjM5LC0xLjgzbDMuNDYsMC4yOWwwLjMyLC0wLjI0bDAuMzcsLTEuOTlsLTAuMDYsLTAuMjRsLTEuNzEsLTIuMTdsLTAuMTgsLTAuMTFsLTIuOTEsLTAuNThsLTAuNDMsLTAuNjhsMC44MiwtMS40bC0wLjAzLC0wLjM1bC0wLjgyLC0wLjk3bC0wLjQ2LDAuMDFsLTAuODUsMS4wNWwtMC4xMSwtMi42bC0wLjA1LC0wLjE2bC0xLjE5LC0xLjdsMC44NiwtMy41M2wxLjgxLC0yLjc1bDEuODgsMC4yNmwyLjM4LC0wLjI0Wk00MDYuMzksMTMyLjg0bC0xLjA5LDEuOTJsLTEuNjUsLTAuNjJsLTEuMjYsMC4wMmwwLjQxLC0xLjQ2bDAuMCwtMC4xNmwtMC40MiwtMS41MWwxLjYyLC0wLjExbDIuMzksMS45MlpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIEtpbmdkb21cIn0sIFwiR0FcIjoge1wicGF0aFwiOiBcIk00NDguNzYsMjk0LjQ3bC0yLjM4LC0yLjM0bC0xLjYzLC0yLjA0bC0xLjQ2LC0yLjQ4bDAuMDYsLTAuNjZsMC41NCwtMC44MWwwLjYxLC0xLjgybDAuNDYsLTEuNjlsMC42MywtMC4xMWwzLjYyLDAuMDNsMC4zLC0wLjNsLTAuMDIsLTIuNzVsMC44OCwtMC4xMmwxLjQ3LDAuMzJsMC4xMywwLjBsMS4zOSwtMC4zbC0wLjEzLDAuODdsMC4wMywwLjE5bDAuNywxLjI5bDAuMywwLjE2bDEuNzQsLTAuMTlsMC4zNiwwLjI5bC0xLjAxLDIuN2wwLjA1LDAuMjlsMS4xMywxLjQybDAuMjUsMS44MmwtMC4zLDEuNTZsLTAuNjQsMC45OWwtMS45MywtMC4wOWwtMS4yNiwtMS4xM2wtMC41LDAuMTdsLTAuMTYsMC45MWwtMS40OCwwLjI3bC0wLjEyLDAuMDVsLTAuODYsMC42M2wtMC4wOCwwLjM5bDAuODEsMS40MmwtMS40OCwxLjA4WlwiLCBcIm5hbWVcIjogXCJHYWJvblwifSwgXCJHTlwiOiB7XCJwYXRoXCI6IFwiTTM5OS44MywyNjUuMzFsLTAuNjksLTAuMDZsLTAuMywwLjE2bC0wLjQzLDAuODVsLTAuMzksLTAuMDFsLTAuMywtMC4zM2wwLjE0LC0wLjg3bC0wLjA1LC0wLjIybC0xLjA1LC0xLjU0bC0wLjM3LC0wLjExbC0wLjYxLDAuMjdsLTAuODQsMC4xMmwwLjAyLC0wLjU0bC0wLjA0LC0wLjE3bC0wLjM1LC0wLjU3bDAuMDcsLTAuNjNsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMTFsLTAuNywtMC45bC0wLjI0LC0wLjEybC0yLjAsLTAuMGwtMC4xOSwwLjA3bC0wLjUxLDAuNDJsLTAuNiwwLjA1bC0wLjIxLDAuMTFsLTAuNDMsMC41NWwtMC4zLDAuN2wtMS4wNCwwLjg2bC0wLjkxLC0xLjI0bC0xLjAsLTEuMDJsLTAuNjksLTAuMzdsLTAuNTIsLTAuNDJsLTAuMywtMS4xMWwtMC4zNywtMC41NmwtMC4xLC0wLjFsLTAuNCwtMC4yM2wwLjc3LC0wLjg1bDAuNjIsMC4wNGwwLjE4LC0wLjA1bDAuNTgsLTAuMzhsMC40NiwtMC4wbDAuMTksLTAuMDdsMC4zOSwtMC4zNGwwLjEsLTAuM2wtMC4xNywtMC42N2wwLjE1LC0wLjE0bDAuMDksLTAuMmwwLjAzLC0wLjU3bDAuODcsMC4wMmwxLjc2LDAuNmwwLjEzLDAuMDFsMC41NSwtMC4wNmwwLjIyLC0wLjEzbDAuMDgsLTAuMTJsMS4xOCwwLjE3bDAuMTcsLTAuMDJsMC4wOSwwLjU2bDAuMywwLjI1bDAuNCwtMC4wbDAuMTQsLTAuMDNsMC41NiwtMC4yOWwwLjIzLDAuMDVsMC42MywwLjU5bDAuMTUsMC4wN2wxLjA3LDAuMmwwLjI0LC0wLjA2bDAuNjUsLTAuNTJsMC43NywtMC4zMmwwLjU1LC0wLjMybDAuMywwLjA0bDAuNDQsMC40NWwwLjM0LDAuNzRsMC44NCwwLjg3bC0wLjM1LDAuNDVsLTAuMDYsMC4xNWwtMC4xLDAuODJsMC40MiwwLjMxbDAuMzUsLTAuMTZsMC4wNSwwLjA0bC0wLjEsMC41OWwwLjA5LDAuMjdsMC40MiwwLjRsLTAuMDYsMC4wMmwtMC4xOCwwLjIxbC0wLjIsMC44NmwwLjAzLDAuMjFsMC41NiwxLjAybDAuNTIsMS43MWwtMC42NSwwLjIxbC0wLjE1LDAuMTJsLTAuMjQsMC4zNWwtMC4wMywwLjI4bDAuMTYsMC40MWwtMC4xLDAuNzZsLTAuMTIsMC4wWlwiLCBcIm5hbWVcIjogXCJHdWluZWFcIn0sIFwiR01cIjoge1wicGF0aFwiOiBcIk0zNzkuMTgsMjUxLjQ4bDAuMTUsLTAuNTVsMi41MSwtMC4wN2wwLjIxLC0wLjA5bDAuNDgsLTAuNTJsMC41OCwtMC4wM2wwLjkxLDAuNThsMC4xNiwwLjA1bDAuNzgsMC4wMWwwLjE0LC0wLjAzbDAuNTksLTAuMzFsMC4xNiwwLjI0bC0wLjcxLDAuMzhsLTAuOTQsLTAuMDRsLTEuMDIsLTAuNTFsLTAuMywwLjAxbC0wLjg2LDAuNTVsLTAuMzcsMC4wMmwtMC4xNCwwLjA0bC0wLjUzLDAuMzFsLTEuODEsLTAuMDRaXCIsIFwibmFtZVwiOiBcIkdhbWJpYVwifSwgXCJHTFwiOiB7XCJwYXRoXCI6IFwiTTMwNC4xMyw2LjZsOC4xOSwtMy42M2w4LjcyLDAuMjhsMC4xOSwtMC4wNmwzLjEyLC0yLjI4bDguNzUsLTAuNjFsMTkuOTQsMC44bDE0LjkzLDQuNzVsLTMuOTIsMi4wMWwtOS41MiwwLjI3bC0xMy40OCwwLjZsLTAuMjcsMC4ybDAuMDksMC4zM2wxLjI2LDEuMDlsMC4yMiwwLjA3bDguODEsLTAuNjdsNy40OSwyLjA3bDAuMTksLTAuMDFsNC42OCwtMS43OGwxLjc2LDEuODRsLTIuNTksMy4yNmwtMC4wMSwwLjM2bDAuMzQsMC4xMWw2LjM1LC0yLjJsMTIuMDksLTIuMzJsNy4zMSwxLjE0bDEuMTcsMi4xM2wtOS45LDQuMDVsLTEuNDMsMS4zMmwtNy45MSwwLjk4bC0wLjI2LDAuMzFsMC4yOSwwLjI5bDUuMjUsMC4yNWwtMi42MywzLjcybC0yLjAyLDMuNjFsLTAuMDQsMC4xNWwwLjA4LDYuMDVsMC4wNywwLjE5bDIuNjEsMy4wbC0zLjQsMC4ybC00LjEyLDEuNjZsLTAuMDQsMC41NGw0LjUsMi42N2wwLjUzLDMuOWwtMi4zOSwwLjQybC0wLjE5LDAuNDhsMi45MSwzLjgzbC01LjAsMC4zMmwtMC4yNywwLjIybDAuMTIsMC4zM2wyLjY5LDEuODRsLTAuNjUsMS4zNWwtMy4zNiwwLjcxbC0zLjQ2LDAuMDFsLTAuMjEsMC41MWwzLjA1LDMuMTVsMC4wMiwxLjUzbC00LjU0LC0xLjc5bC0wLjMyLDAuMDZsLTEuMjksMS4yNmwwLjExLDAuNWwzLjMzLDEuMTVsMy4xNywyLjc0bDAuODUsMy4yOWwtNC4wLDAuNzhsLTEuODMsLTEuNjZsLTMuMSwtMi42NGwtMC4zNiwtMC4wMmwtMC4xMywwLjMzbDAuOCwyLjkybC0yLjc2LDIuMjZsLTAuMDksMC4zM2wwLjI4LDAuMmw2LjU5LDAuMTlsMi40NywwLjE4bC01Ljg2LDMuMzhsLTYuNzYsMy40M2wtNy4yNiwxLjQ4bC0yLjczLDAuMDJsLTAuMTYsMC4wNWwtMi42NywxLjcybC0zLjQ0LDQuNDJsLTUuMjgsMi44NmwtMS43MywwLjE4bC0zLjMzLDEuMDFsLTMuNTksMC45NmwtMC4xNSwwLjFsLTIuMTUsMi41MmwtMC4wNywwLjE5bC0wLjAzLDIuNzZsLTEuMjEsMi40OWwtNC4wMywzLjFsLTAuMSwwLjMzbDAuOTgsMi45NGwtMi4zMSw2LjU3bC0zLjIxLDAuMjFsLTMuNiwtMy4wbC0wLjE5LC0wLjA3bC00LjksLTAuMDJsLTIuMjksLTEuOTdsLTEuNjksLTMuNzhsLTQuMzEsLTQuODZsLTEuMjMsLTIuNTJsLTAuMzQsLTMuNThsLTAuMDgsLTAuMTdsLTMuMzUsLTMuNjdsMC44NSwtMi45MmwtMC4wOSwtMC4zMWwtMS41LC0xLjM0bDIuMzMsLTQuN2wzLjY3LC0xLjU3bDAuMTUsLTAuMTNsMS4wMiwtMS45M2wwLjUyLC0zLjQ3bC0wLjQ0LC0wLjMxbC0yLjg1LDEuNTdsLTEuMzMsMC42NGwtMi4xMiwwLjU5bC0yLjgxLC0xLjMybC0wLjE1LC0yLjc5bDAuODgsLTIuMTdsMi4wOSwtMC4wNmw1LjA3LDEuMmwwLjM0LC0wLjE3bC0wLjExLC0wLjM3bC00LjMsLTIuOWwtMi4yNCwtMS41OGwtMC4yNSwtMC4wNWwtMi4zOCwwLjYybC0xLjcsLTAuOTNsMi42MiwtNC4xbC0wLjAzLC0wLjM2bC0xLjUxLC0xLjc1bC0xLjk3LC0zLjNsLTMuMDEsLTUuMjFsLTAuMSwtMC4xMWwtMy4wNCwtMS44NWwwLjAzLC0xLjk0bC0wLjE4LC0wLjI4bC02LjgyLC0zLjAxbC01LjM1LC0wLjM4bC02LjY5LDAuMjFsLTYuMDMsMC4zN2wtMi44MSwtMS41OWwtMy44NCwtMi45bDUuOTQsLTEuNWw1LjAxLC0wLjI4bDAuMjgsLTAuMjlsLTAuMjYsLTAuMzFsLTEwLjY4LC0xLjM4bC01LjM4LC0yLjFsMC4yNywtMS42OGw5LjMsLTIuNmw5LjE4LC0yLjY4bDAuMTksLTAuMTZsMC45NywtMi4wNWwtMC4xOCwtMC40MmwtNi4yOSwtMS45MWwxLjgxLC0xLjlsOC41OCwtNC4wNWwzLjYsLTAuNjNsMC4yMywtMC40bC0wLjkyLC0yLjM3bDUuNTksLTEuNWw3LjY2LC0wLjk1bDcuNTgsLTAuMDVsMi42NSwxLjg0bDAuMzEsMC4wMmw2LjUyLC0zLjI5bDUuODUsMi4yNGwzLjU1LDAuNDlsNS4xNywxLjk1bDAuMzgsLTAuMTZsLTAuMTMsLTAuMzlsLTUuNzcsLTMuMTZsMC4yOSwtMi4yNlpcIiwgXCJuYW1lXCI6IFwiR3JlZW5sYW5kXCJ9LCBcIktXXCI6IHtcInBhdGhcIjogXCJNNTQwLjg3LDIwNy44MWwwLjQxLDAuOTRsLTAuMTgsMC41MWwwLjAsMC4yMWwwLjY1LDEuNjZsLTEuMTUsMC4wNWwtMC41NCwtMS4xMmwtMC4yNCwtMC4xN2wtMS43MywtMC4ybDEuNDQsLTIuMDZsMS4zMywwLjE4WlwiLCBcIm5hbWVcIjogXCJLdXdhaXRcIn0sIFwiR0hcIjoge1wicGF0aFwiOiBcIk00MjMuMTYsMjY5Ljg4bC0zLjU4LDEuMzRsLTEuNDEsMC44N2wtMi4xMywwLjY5bC0xLjkxLC0wLjYxbDAuMDksLTAuNzVsLTAuMDMsLTAuMTdsLTEuMDQsLTIuMDdsMC42MiwtMi43bDEuMDQsLTIuMDhsMC4wMywtMC4xOWwtMS4wLC01LjQ2bDAuMDUsLTEuMTJsNC4wNCwtMC4xMWwxLjA4LDAuMThsMC4xOCwtMC4wM2wwLjcyLC0wLjM2bDAuNzUsMC4xM2wtMC4xMSwwLjQ4bDAuMDYsMC4yNmwwLjk4LDEuMjJsLTAuMCwxLjc3bDAuMjQsMS45OWwwLjA1LDAuMTNsMC41NSwwLjgxbC0wLjUyLDIuMTRsMC4xOSwxLjM3bDAuNjksMS42NmwwLjM4LDAuNjJaXCIsIFwibmFtZVwiOiBcIkdoYW5hXCJ9LCBcIk9NXCI6IHtcInBhdGhcIjogXCJNNTY4LjE2LDIzMS4wbC0wLjA4LDAuMWwtMC44NCwxLjYxbC0wLjkzLC0wLjExbC0wLjI3LDAuMTFsLTAuNTgsMC43M2wtMC40LDEuMzJsLTAuMDEsMC4xNGwwLjI5LDEuNjFsLTAuMDcsMC4wOWwtMS4wLC0wLjAxbC0wLjE2LDAuMDRsLTEuNTYsMC45N2wtMC4xNCwwLjJsLTAuMjMsMS4xN2wtMC40MSwwLjRsLTEuNDQsLTAuMDJsLTAuMTcsMC4wNWwtMC45OCwwLjY1bC0wLjEzLDAuMjVsMC4wMSwwLjg3bC0wLjk3LDAuNTdsLTEuMjcsLTAuMjJsLTAuMTksMC4wM2wtMS42MywwLjg0bC0wLjg4LDAuMTFsLTIuNTUsLTUuNTdsNy4yLC0yLjQ5bDAuMTksLTAuMTlsMS42NywtNS4yM2wtMC4wMywtMC4yNWwtMS4xLC0xLjc4bDAuMDUsLTAuODlsMC42OCwtMS4wM2wwLjA1LC0wLjE2bDAuMDEsLTAuODlsMC45NiwtMC40NGwwLjA3LC0wLjVsLTAuMzIsLTAuMjZsMC4xNiwtMS4zMWwwLjg1LC0wLjAxbDEuMDMsMS42N2wwLjA5LDAuMDlsMS40LDAuOTZsMC4xMSwwLjA1bDEuODIsMC4zNGwxLjM3LDAuNDVsMS43NSwyLjMybDAuMTMsMC4xbDAuNywwLjI2bC0wLjAsMC4zbC0xLjI1LDIuMTlsLTEuMDEsMC44Wk01NjEuODgsMjE4LjQ3bC0wLjAxLDAuMDJsLTAuMTUsLTAuMjlsMC4zLC0wLjM4bC0wLjE0LDAuNjVaXCIsIFwibmFtZVwiOiBcIk9tYW5cIn0sIFwiXzNcIjoge1wicGF0aFwiOiBcIk01NDMuMiwyNjEuMDZsLTEuMDcsMS40NmwtMS42NSwxLjk5bC0xLjkxLDAuMDFsLTguMDgsLTIuOTVsLTAuODksLTAuODRsLTAuOSwtMS4xOWwtMC44MSwtMS4yM2wwLjQ0LC0wLjczbDAuNzYsLTEuMTJsMC40OSwwLjI4bDAuNTIsMS4wNWwxLjEzLDEuMDZsMC4yLDAuMDhsMS4yNCwwLjAxbDIuNDIsLTAuNjVsMi43NywtMC4zMWwyLjE3LC0wLjc4bDEuMzEsLTAuMTlsMC44NCwtMC40M2wxLjAzLC0wLjA2bC0wLjAxLDQuNTRaXCIsIFwibmFtZVwiOiBcIlNvbWFsaWxhbmRcIn0sIFwiXzJcIjoge1wicGF0aFwiOiBcIk0zODQuMjMsMjMwLjM3bDAuMDcsLTAuMDZsMC4yOCwtMC44OWwwLjk5LC0xLjEzbDAuMDcsLTAuMTNsMC44LC0zLjU0bDMuNCwtMi44bDAuMDksLTAuMTNsMC43NiwtMi4xN2wwLjA3LDUuNWwtMi4wNywwLjIxbC0wLjI0LDAuMTdsLTAuNjEsMS4zNmwtMC4wMiwwLjE2bDAuNDMsMy40NmwtNC4wMSwtMC4wMVpNMzkxLjgyLDIxOC4ybDAuMDcsLTAuMDZsMC43NSwtMS45M2wxLjg2LC0wLjI1bDAuOTQsMC4zNGwxLjE0LDAuMGwwLjE4LC0wLjA2bDAuNzMsLTAuNTZsMS40MSwtMC4wOGwtMC4wLDIuNzJsLTcuMDgsLTAuMTJaXCIsIFwibmFtZVwiOiBcIldlc3Rlcm4gU2FoYXJhXCJ9LCBcIl8xXCI6IHtcInBhdGhcIjogXCJNNDcyLjcxLDE3Mi44NGwtMC4wNywtMC40M2wtMC4xNiwtMC4yMmwtMC41MywtMC4yN2wtMC4zOCwtMC41OGwwLjMsLTAuNDNsMC41MSwtMC4xOWwwLjE4LC0wLjE4bDAuMywtMC44N2wwLjEyLC0wLjA0bDAuMjIsMC4yNmwwLjEyLDAuMDlsMC4zOCwwLjE1bDAuMjgsMC40MWwwLjE1LDAuMTJsMC4zNCwwLjEybDAuNDMsMC41bDAuMTUsMC4wN2wtMC4xMiwwLjNsLTAuMjcsMC4zMmwtMC4wMywwLjE4bC0wLjMxLDAuMDZsLTEuNDgsMC40N2wtMC4xNSwwLjE3WlwiLCBcIm5hbWVcIjogXCJLb3Nvdm9cIn0sIFwiXzBcIjoge1wicGF0aFwiOiBcIk01MDMuNTQsMTkyLjkybDAuMDksLTAuMTdsMC40MSwwLjAxbC0wLjA4LDAuMDFsLTAuNDIsMC4xNVpNNTA0LjIzLDE5Mi43NmwxLjAyLDAuMDJsMC40LC0wLjEzbC0wLjA5LDAuMjlsMC4wMywwLjA4bC0wLjM1LDAuMTZsLTAuMjQsLTAuMDRsLTAuMDYsLTAuMWwtMC4xOCwtMC4xN2wtMC4xOSwtMC4wOGwtMC4zMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiTm9ydGhlcm4gQ3lwcnVzXCJ9LCBcIkpPXCI6IHtcInBhdGhcIjogXCJNNTEwLjI2LDIwMC45M2wwLjI4LC0wLjU3bDIuNTMsMS4wbDAuMjcsLTAuMDJsNC41NywtMi43N2wwLjg0LDIuODRsLTAuMjgsMC4yNWwtNC45NSwxLjM3bC0wLjE0LDAuNDlsMi4yNCwyLjQ4bC0wLjUsMC4yOGwtMC4xMywwLjE0bC0wLjM1LDAuNzhsLTEuNzYsMC4zNWwtMC4yLDAuMTRsLTAuNTcsMC45NGwtMC45NCwwLjczbC0yLjQ1LC0wLjM4bC0wLjAzLC0wLjEybDEuMjMsLTQuMzJsLTAuMDQsLTEuMWwwLjM0LC0wLjc1bDAuMDMsLTAuMTJsMC4wLC0xLjYzWlwiLCBcIm5hbWVcIjogXCJKb3JkYW5cIn0sIFwiSFJcIjoge1wicGF0aFwiOiBcIk00NTUuNDksMTYyLjczbDEuNTMsMC4wOWwwLjI0LC0wLjFsMC4yOSwtMC4zNGwwLjY0LDAuMzhsMC4xNCwwLjA0bDAuOTgsMC4wNmwwLjMyLC0wLjNsLTAuMDEsLTAuNjZsMC42NywtMC4yNWwwLjE5LC0wLjIybDAuMjEsLTEuMTFsMS43MiwtMC43MmwwLjY1LDAuMzJsMS45NCwxLjM3bDIuMDcsMC42bDAuMjIsLTAuMDJsMC42NywtMC4zM2wwLjQ3LDAuOTRsMC42NywwLjc2bC0wLjYzLDAuNzdsLTAuOTEsLTAuNTVsLTAuMTYsLTAuMDRsLTEuNjksMC4wNGwtMi4yLC0wLjUxbC0xLjE3LDAuMDdsLTAuMjEsMC4xMWwtMC4zNiwwLjQybC0wLjY3LC0wLjUzbC0wLjQ2LDAuMTJsLTAuNTIsMS4yOWwwLjA1LDAuMzFsMS4yMSwxLjQybDAuNTgsMC45OWwxLjE1LDEuMTRsMC45NSwwLjY4bDAuOTIsMS4yM2wwLjEsMC4wOWwxLjc1LDAuOTFsLTEuODcsLTAuODlsLTEuNSwtMS4xMWwtMi4yMywtMC44OGwtMS43NywtMS45bDAuMTIsLTAuMDZsMC4xLC0wLjQ3bC0xLjA3LC0xLjIybC0wLjA0LC0wLjk0bC0wLjIxLC0wLjI3bC0xLjYxLC0wLjQ5bC0wLjM1LDAuMTRsLTAuNTMsMC45M2wtMC40MSwtMC41N2wwLjA0LC0wLjczWlwiLCBcIm5hbWVcIjogXCJDcm9hdGlhXCJ9LCBcIkhUXCI6IHtcInBhdGhcIjogXCJNMjM3LjgyLDIzNC42OGwxLjM1LDAuMWwxLjk1LDAuMzdsMC4xOCwxLjE1bC0wLjE2LDAuODNsLTAuNTEsMC4zN2wtMC4wNiwwLjQ0bDAuNTcsMC42OGwtMC4wMiwwLjIybC0xLjMxLC0wLjM1bC0xLjI2LDAuMTdsLTEuNDksLTAuMThsLTAuMTUsMC4wMmwtMS4wMywwLjQzbC0xLjAyLC0wLjYxbDAuMDksLTAuMzZsMi4wNCwwLjMybDEuOSwwLjIxbDAuMTksLTAuMDVsMC45LC0wLjU4bDAuMDUsLTAuNDdsLTEuMDUsLTEuMDNsMC4wMiwtMC44NmwtMC4yMywtMC4zbC0xLjEzLC0wLjI5bDAuMTgsLTAuMjNaXCIsIFwibmFtZVwiOiBcIkhhaXRpXCJ9LCBcIkhVXCI6IHtcInBhdGhcIjogXCJNNDYxLjk2LDE1Ny45MmwwLjY4LC0xLjY2bC0wLjAzLC0wLjI5bC0wLjE1LC0wLjIybDAuODQsLTAuMGwwLjMsLTAuMjZsMC4xMiwtMC44NGwwLjg4LDAuNTdsMC45OCwwLjM4bDAuMTYsMC4wMWwyLjEsLTAuMzlsMC4yMywtMC4yMWwwLjE0LC0wLjQ1bDAuODgsLTAuMWwxLjA2LC0wLjQzbDAuMTMsMC4xbDAuMjgsMC4wNGwxLjE4LC0wLjRsMC4xNCwtMC4xbDAuNTIsLTAuNjdsMC42MywtMC4xNWwyLjYsMC45NWwwLjI2LC0wLjAzbDAuMzgsLTAuMjNsMS4xMiwwLjdsMC4xLDAuNDlsLTEuMzEsMC41N2wtMC4xNCwwLjEzbC0xLjE4LDIuMTRsLTEuNDQsMi4wNGwtMS44NSwwLjU1bC0xLjUxLC0wLjEzbC0wLjE0LDAuMDJsLTEuOTIsMC44MmwtMC44NSwwLjQybC0xLjkxLC0wLjU1bC0xLjgzLC0xLjMxbC0wLjc0LC0wLjM3bC0wLjQ0LC0wLjk3bC0wLjI2LC0wLjE4WlwiLCBcIm5hbWVcIjogXCJIdW5nYXJ5XCJ9LCBcIkhOXCI6IHtcInBhdGhcIjogXCJNMjAyLjQ4LDI1MS44N2wtMC4zMywtMC42MmwtMC4xOCwtMC4xNGwtMC41LC0wLjE1bDAuMTMsLTAuNzZsLTAuMTEsLTAuMjhsLTAuMzQsLTAuMjhsLTAuNiwtMC4yM2wtMC4xOCwtMC4wMWwtMC44MSwwLjIybC0wLjE2LC0wLjI0bC0wLjcyLC0wLjM5bC0wLjUxLC0wLjQ4bC0wLjEyLC0wLjA3bC0wLjMxLC0wLjA5bDAuMjQsLTAuM2wwLjA0LC0wLjNsLTAuMTYsLTAuNGwwLjEsLTAuMjhsMS4xNCwtMC42OWwxLjAsLTAuODZsMC4wOSwwLjA0bDAuMywtMC4wNWwwLjQ3LC0wLjM5bDAuNDksLTAuMDNsMC4xNCwwLjEzbDAuMjksMC4wNmwwLjMxLC0wLjFsMS4xNiwwLjIybDEuMjQsLTAuMDhsMC44MSwtMC4yOGwwLjI5LC0wLjI1bDAuNjMsMC4xbDAuNjksMC4xOGwwLjY1LC0wLjA2bDAuNDksLTAuMmwxLjA0LDAuMzJsMC4zOCwwLjA2bDAuNywwLjQ0bDAuNzEsMC41NmwwLjkyLDAuNDFsMC4xLDAuMTFsLTAuMTEsLTAuMDFsLTAuMjMsMC4wOWwtMC4zLDAuM2wtMC43NiwwLjI5bC0wLjU4LDAuMGwtMC4xNSwwLjA0bC0wLjQ1LDAuMjZsLTAuMzEsLTAuMDdsLTAuMzcsLTAuMzRsLTAuMjgsLTAuMDdsLTAuMjYsMC4wN2wtMC4xOCwwLjE1bC0wLjIzLDAuNDNsLTAuMDQsLTAuMGwtMC4zMywwLjI4bC0wLjAzLDAuNGwtMC43NiwwLjYxbC0wLjQ1LDAuM2wtMC4xNSwwLjE2bC0wLjUxLC0wLjM2bC0wLjQxLDAuMDZsLTAuNDUsMC41NmwtMC40MSwtMC4wMWwtMC41OSwwLjA2bC0wLjI3LDAuMzFsMC4wNCwwLjk2bC0wLjA3LDAuMGwtMC4yNSwwLjE2bC0wLjI0LDAuNDVsLTAuNDIsMC4wNlpcIiwgXCJuYW1lXCI6IFwiSG9uZHVyYXNcIn0sIFwiUFJcIjoge1wicGF0aFwiOiBcIk0yNTQuOTUsMjM4LjMxbDEuMTUsMC4yMWwwLjIsMC4yM2wtMC4zNiwwLjM2bC0xLjc2LC0wLjAxbC0xLjIsMC4wN2wtMC4wOSwtMC42OWwwLjE3LC0wLjE4bDEuODksMC4wMVpcIiwgXCJuYW1lXCI6IFwiUHVlcnRvIFJpY29cIn0sIFwiUFNcIjoge1wicGF0aFwiOiBcIk01MDkuNjYsMjAxLjA2bC0wLjAsMS40NGwtMC4yOSwwLjYzbC0wLjU5LDAuMTlsMC4wMiwtMC4xMWwwLjUyLC0wLjMxbC0wLjAyLC0wLjUzbC0wLjQxLC0wLjJsMC4zNiwtMS4yOGwwLjQxLDAuMTdaXCIsIFwibmFtZVwiOiBcIldlc3QgQmFua1wifSwgXCJQVFwiOiB7XCJwYXRoXCI6IFwiTTM5OC42NSwxNzMuNmwwLjc1LC0wLjYzbDAuNywtMC4zbDAuNTEsMS4ybDAuMjgsMC4xOGwxLjQ4LC0wLjBsMC4yLC0wLjA4bDAuMzMsLTAuM2wxLjE2LDAuMDhsMC41MiwxLjExbC0wLjk1LDAuNjZsLTAuMTMsMC4yNGwtMC4wMywyLjJsLTAuMzMsMC4zNWwtMC4wOCwwLjE4bC0wLjA4LDEuMTdsLTAuODYsMC4xOWwtMC4yLDAuNDRsMC45MywxLjY0bC0wLjY0LDEuNzlsMC4wNywwLjMxbDAuNzIsMC43MmwtMC4yNCwwLjU2bC0wLjksMS4wNWwtMC4wNywwLjI2bDAuMTcsMC43N2wtMC43MywwLjU0bC0xLjE4LC0wLjM2bC0wLjE2LC0wLjBsLTAuODUsMC4yMWwwLjMxLC0xLjgxbC0wLjIzLC0xLjg3bC0wLjIzLC0wLjI1bC0wLjk5LC0wLjI0bC0wLjQ5LC0wLjkxbDAuMTgsLTEuNzJsMC45MywtMC45OWwwLjA4LC0wLjE2bDAuMTcsLTEuMTdsMC41MiwtMS43NmwtMC4wNCwtMS4zNmwtMC41MSwtMS4xNGwtMC4wOSwtMC44WlwiLCBcIm5hbWVcIjogXCJQb3J0dWdhbFwifSwgXCJQWVwiOiB7XCJwYXRoXCI6IFwiTTI2NC4zMywzNDEuNDNsMC45MywtMi45NmwwLjA3LC0xLjQybDEuMSwtMi4xbDQuMTksLTAuNzNsMi4yMiwwLjA0bDIuMTIsMS4yMWwwLjA3LDAuNzZsMC43LDEuMzhsLTAuMTYsMy40OGwwLjI0LDAuMzFsMi42NCwwLjVsMC4xOSwtMC4wM2wwLjksLTAuNDVsMS40NywwLjYybDAuMzgsMC42NGwwLjIzLDIuMzVsMC4zLDEuMDdsMC4yNSwwLjIxbDAuOTMsMC4xMmwwLjE2LC0wLjAybDAuOCwtMC4zN2wwLjYxLDAuMzNsLTAuMCwxLjI1bC0wLjMzLDEuNTNsLTAuNSwxLjU3bC0wLjM5LDIuMjZsLTIuMTQsMS45NGwtMS44NSwwLjRsLTIuNzQsLTAuNGwtMi4xMywtMC42MmwyLjI2LC0zLjc1bDAuMDMsLTAuMjRsLTAuMzYsLTEuMThsLTAuMTcsLTAuMTlsLTIuNTUsLTEuMDNsLTMuMDQsLTEuOTVsLTIuMDcsLTAuNDNsLTQuNCwtNC4xMlpcIiwgXCJuYW1lXCI6IFwiUGFyYWd1YXlcIn0sIFwiUEFcIjoge1wicGF0aFwiOiBcIk0yMTMuNjUsMjYzLjc5bDAuMTgsLTAuNDNsMC4wMiwtMC4xOGwtMC4wNiwtMC4yOGwwLjIzLC0wLjE4bC0wLjAxLC0wLjQ4bC0wLjQsLTAuMjlsLTAuMDEsLTAuNjJsMC41NywtMC4xM2wwLjY4LDAuNjlsLTAuMDQsMC4zOWwwLjI2LDAuMzNsMS4wLDAuMTFsMC4yNywtMC4xbDAuNDksMC40NGwwLjI0LDAuMDdsMS4zNCwtMC4yMmwxLjA0LC0wLjYybDEuNDksLTAuNWwwLjg2LC0wLjczbDAuOTksMC4xMWwwLjE4LDAuMjhsMS4zNSwwLjA4bDEuMDIsMC40bDAuNzgsMC43MmwwLjcxLDAuNTNsLTAuMSwwLjEybC0wLjA1LDAuM2wwLjUzLDEuMzRsLTAuMjgsMC40NGwtMC42LC0wLjEzbC0wLjM2LDAuMjJsLTAuMiwwLjc2bC0wLjQxLC0wLjM2bC0wLjQ0LC0xLjEybDAuNDksLTAuNTNsLTAuMTQsLTAuNDlsLTAuNTEsLTAuMTRsLTAuNDEsLTAuNzJsLTAuMTEsLTAuMTFsLTEuMjUsLTAuN2wtMC4xOSwtMC4wNGwtMS4xLDAuMTZsLTAuMjIsMC4xNWwtMC40NywwLjgxbC0wLjksMC41NmwtMC40OSwwLjA4bC0wLjIyLDAuMTdsLTAuMjUsMC41MmwwLjA1LDAuMzJsMC45MywxLjA3bC0wLjQxLDAuMjFsLTAuMjksMC4zbC0wLjgxLDAuMDlsLTAuMzYsLTEuMjZsLTAuNTMsLTAuMWwtMC4yMSwwLjI4bC0wLjUsLTAuMDlsLTAuNDQsLTAuODhsLTAuMjIsLTAuMTZsLTAuOTksLTAuMTZsLTAuNjEsLTAuMjhsLTAuMTMsLTAuMDNsLTEuMCwwLjBaXCIsIFwibmFtZVwiOiBcIlBhbmFtYVwifSwgXCJQR1wiOiB7XCJwYXRoXCI6IFwiTTgwOC40LDI5OC42bDAuNjIsMC40NmwxLjE5LDEuNTZsMS4wNCwwLjc3bC0wLjE4LDAuMzdsLTAuNDIsMC4xNWwtMC45MiwtMC44MmwtMS4wNSwtMS41M2wtMC4yNywtMC45NlpNODA0LjA5LDI5Ni4wNmwtMC4zLDAuMjZsLTAuMzYsLTEuMTFsLTAuNjYsLTEuMDZsLTIuNTUsLTEuODlsLTEuNDIsLTAuNTlsMC4xNywtMC4xNWwxLjE2LDAuNmwwLjg1LDAuNTVsMS4wMSwwLjU4bDAuOTcsMS4wMmwwLjksMC43NmwwLjI0LDEuMDNaTTc5Ni43MSwyOTcuOTlsMC4xNSwwLjgybDAuMzQsMC4yNGwxLjQzLC0wLjE5bDAuMTksLTAuMTFsMC42OCwtMC44MmwxLjM2LC0wLjg3bDAuMTMsLTAuMzFsLTAuMjEsLTEuMTNsMS4wNCwtMC4wM2wwLjMsMC4yNWwtMC4wNCwxLjE3bC0wLjc0LDEuMzRsLTEuMTcsMC4xOGwtMC4yMiwwLjE1bC0wLjM1LDAuNjJsLTIuNTEsMS4xM2wtMS4yMSwtMC4wbC0xLjk5LC0wLjcxbC0xLjE5LC0wLjU4bDAuMDcsLTAuMjhsMS45OCwwLjMybDEuNDYsLTAuMmwwLjI0LC0wLjIxbDAuMjUsLTAuNzlaTTc4OS4yNCwzMDMuNTJsMC4xMSwwLjE1bDIuMTksMS42MmwxLjYsMi42MmwwLjI3LDAuMTRsMS4wOSwtMC4wNmwtMC4wNywwLjc3bDAuMjMsMC4zMmwxLjIzLDAuMjdsLTAuMTQsMC4wOWwwLjA1LDAuNTNsMi4zOSwwLjk1bC0wLjExLDAuMjhsLTEuMzMsMC4xNGwtMC41MSwtMC41NWwtMC4xOCwtMC4wOWwtNC41OSwtMC42NWwtMS44NywtMS41NWwtMS4zOCwtMS4zNWwtMS4yOCwtMi4xN2wtMC4xNiwtMC4xM2wtMy4yNywtMS4xbC0wLjE5LDAuMGwtMi4xMiwwLjcybC0xLjU4LDAuODVsLTAuMTUsMC4zMWwwLjI4LDEuNjNsLTEuNjUsMC43M2wtMS4zNywtMC40bC0yLjMsLTAuMDlsLTAuMDgsLTE1LjY1bDMuOTUsMS41N2w0LjU4LDEuNDJsMS42NywxLjI1bDEuMzIsMS4xOWwwLjM2LDEuMzlsMC4xOSwwLjIxbDQuMDYsMS41MWwwLjM5LDAuODVsLTEuOSwwLjIybC0wLjI1LDAuMzlsMC41NSwxLjY4WlwiLCBcIm5hbWVcIjogXCJQYXB1YSBOZXcgR3VpbmVhXCJ9LCBcIlBFXCI6IHtcInBhdGhcIjogXCJNMjQ2LjQ0LDMyOS4yMWwtMC42MywxLjI1bC0xLjA1LDAuNTRsLTIuMjUsLTEuMzNsLTAuMTksLTAuOTNsLTAuMTYsLTAuMjFsLTQuOTUsLTIuNThsLTQuNDYsLTIuNzlsLTEuODcsLTEuNTJsLTAuOTQsLTEuOTFsMC4zMywtMC42bC0wLjAxLC0wLjMxbC0yLjExLC0zLjMzbC0yLjQ2LC00LjY2bC0yLjM2LC01LjAybC0xLjA0LC0xLjE4bC0wLjc3LC0xLjgxbC0wLjA4LC0wLjExbC0xLjk1LC0xLjY0bC0xLjU0LC0wLjg4bDAuNjEsLTAuODVsMC4wMiwtMC4zMWwtMS4xNSwtMi4yN2wwLjY5LC0xLjU2bDEuNTksLTEuMjZsMC4xMiwwLjQybC0wLjU2LDAuNDdsLTAuMTEsMC4yNWwwLjA3LDAuOTJsMC4zNiwwLjI3bDAuOTcsLTAuMTlsMC44NSwwLjIzbDAuOTksMS4xOWwwLjQxLDAuMDVsMS40MiwtMS4wM2wwLjExLC0wLjE2bDAuNDYsLTEuNjRsMS40NSwtMi4wNmwyLjkyLC0wLjk2bDAuMTEsLTAuMDdsMi43MywtMi42MmwwLjg0LC0xLjcybDAuMDIsLTAuMThsLTAuMywtMS42NWwwLjI4LC0wLjFsMS40OSwxLjA2bDAuNzcsMS4xNGwwLjEsMC4wOWwxLjA4LDAuNmwxLjQzLDIuNTVsMC4yMSwwLjE1bDEuODYsMC4zMWwwLjE4LC0wLjAzbDEuMjUsLTAuNmwwLjc3LDAuMzdsMC4xNywwLjAzbDEuNCwtMC4ybDEuNTcsMC45NmwtMS40NSwyLjI5bDAuMjMsMC40NmwwLjYzLDAuMDVsMC42NiwwLjdsLTEuNTEsLTAuMDhsLTAuMjQsMC4xbC0wLjI3LDAuMzFsLTEuOTYsMC40NmwtMi45NSwxLjc0bC0wLjE0LDAuMjFsLTAuMTcsMS4xbC0wLjYsMC44MmwtMC4wNSwwLjIzbDAuMjEsMS4xM2wtMS4zMSwwLjYzbC0wLjE3LDAuMjdsMC4wLDAuOTFsLTAuNTMsMC4zN2wtMC4xLDAuMzdsMS4wNCwyLjI3bDEuMzEsMS40NmwtMC40NCwwLjlsMC4yNCwwLjQzbDEuNTIsMC4xM2wwLjg3LDEuMjNsMC4yNCwwLjEzbDIuMjEsMC4wN2wwLjE4LC0wLjA2bDEuNTUsLTEuMTNsLTAuMTQsMy4yMmwwLjIzLDAuM2wxLjE0LDAuMjlsMC4xNiwtMC4wbDEuMTgsLTAuMzZsMS45NywzLjcxbC0wLjQ1LDAuNzFsLTAuMDQsMC4xNGwtMC4xMiwxLjhsLTAuMDUsMi4wN2wtMC45MiwxLjJsLTAuMDMsMC4zMWwwLjM4LDAuOGwtMC40OCwwLjcybC0wLjAyLDAuM2wxLjAxLDIuMDJsLTEuNSwyLjY0WlwiLCBcIm5hbWVcIjogXCJQZXJ1XCJ9LCBcIlBLXCI6IHtcInBhdGhcIjogXCJNNjA5LjA4LDE4Ny43NmwxLjY2LDEuMjFsMC43MSwyLjExbDAuMiwwLjE5bDMuNjIsMS4wMWwtMS45OCwxLjk1bC0yLjY1LDAuNGwtMy43NSwtMC42OGwtMC4yNiwwLjA4bC0xLjIzLDEuMjJsLTAuMDcsMC4zMWwwLjg5LDIuNDZsMC44OCwxLjkybDAuMSwwLjEybDEuNjcsMS4xNGwtMS44LDEuMzVsLTAuMTIsMC4yNWwwLjA0LDEuODVsLTIuMzUsMi42N2wtMS41OSwyLjc5bC0yLjUsMi43MmwtMi43NiwtMC4ybC0wLjI0LDAuMDlsLTIuNzYsMi44M2wwLjA0LDAuNDVsMS41NCwxLjEzbDAuMjcsMS45NGwwLjA5LDAuMTdsMS4zNCwxLjI5bDAuNCwxLjgzbC01LjE0LC0wLjAxbC0wLjIyLDAuMDlsLTEuNTMsMS42M2wtMS41MiwtMC41NmwtMC43NiwtMS44OGwtMS45MywtMi4wM2wtMC4yNSwtMC4wOWwtNC42LDAuNWwtNC4wNSwwLjA1bC0zLjEsMC4zM2wwLjc3LC0yLjUzbDMuNDgsLTEuMzNsMC4xOSwtMC4zM2wtMC4yMSwtMS4yNGwtMC4xOSwtMC4yM2wtMS4wMSwtMC4zN2wtMC4wNiwtMi4xOGwtMC4xNywtMC4yNmwtMi4zMiwtMS4xNmwtMC45NiwtMS41N2wtMC41NiwtMC42NWwzLjE2LDEuMDVsMC4xNCwwLjAxbDIuNDUsLTAuNGwxLjQ0LDAuMzNsMC4zLC0wLjFsMC40LC0wLjQ3bDEuNTgsMC4yMmwwLjE0LC0wLjAxbDMuMjUsLTEuMTRsMC4yLC0wLjI3bDAuMDgsLTIuMjNsMS4yMywtMS4zOGwxLjczLDAuMGwwLjI4LC0wLjJsMC4yMiwtMC42MWwxLjY4LC0wLjMybDAuODYsMC4yNGwwLjI3LC0wLjA1bDAuOTgsLTAuNzhsMC4xMSwtMC4yNmwtMC4xMywtMS41N2wwLjk2LC0xLjUybDEuNTEsLTAuNjdsMC4xNCwtMC40MWwtMC43NCwtMS40bDEuODYsMC4wN2wwLjI2LC0wLjEzbDAuNjksLTEuMDFsMC4wNSwtMC4ybC0wLjA5LC0wLjk0bDEuMTQsLTEuMDlsMC4wOSwtMC4yOGwtMC4yOSwtMS40MWwtMC41MSwtMS4wN2wxLjIzLC0xLjA1bDIuNiwtMC41OGwyLjg2LC0wLjMzbDEuMzMsLTAuNTRsMS4zLC0wLjI5WlwiLCBcIm5hbWVcIjogXCJQYWtpc3RhblwifSwgXCJQSFwiOiB7XCJwYXRoXCI6IFwiTTczNy4xMSwyNjMuODJsMC4yNSwxLjY2bDAuMTQsMS4zNGwtMC41NCwxLjQ2bC0wLjY0LC0xLjc5bC0wLjUsLTAuMWwtMS4xNywxLjI4bC0wLjA1LDAuMzJsMC43NCwxLjcxbC0wLjQ5LDAuODFsLTIuNiwtMS4yOGwtMC42MSwtMS41N2wwLjY4LC0xLjA3bC0wLjA3LC0wLjRsLTEuNTksLTEuMTlsLTAuNDIsMC4wNmwtMC42OSwwLjkxbC0xLjAxLC0wLjA4bC0wLjIxLDAuMDZsLTEuNTgsMS4ybC0wLjE3LC0wLjNsMC44NywtMS44OGwxLjQ4LC0wLjY2bDEuMTgsLTAuODFsMC43MSwwLjkybDAuMzQsMC4xbDEuOSwtMC42OWwwLjE4LC0wLjE4bDAuMzQsLTAuOTRsMS41NywtMC4wNmwwLjI5LC0wLjMybC0wLjEsLTEuMzhsMS40MSwwLjgzbDAuMzYsMi4wNlpNNzM0Ljk0LDI1NC40MmwwLjU2LDIuMjRsLTEuNDEsLTAuNDlsLTAuNCwwLjNsMC4wNywwLjk0bDAuNTEsMS4zbC0wLjU0LDAuMjZsLTAuMDgsLTEuMzRsLTAuMjUsLTAuMjhsLTAuNTYsLTAuMWwtMC4yMywtMC45MWwxLjAzLDAuMTRsMC4zNCwtMC4zMWwtMC4wMywtMC45NmwtMC4wNiwtMC4xOGwtMS4xNCwtMS40NGwxLjYyLDAuMDRsMC41NywwLjc4Wk03MjQuNjgsMjM4LjMzbDEuNDgsMC43MWwwLjMzLC0wLjA0bDAuNDQsLTAuMzhsMC4wNSwwLjEzbC0wLjM3LDAuOTdsMC4wMSwwLjIzbDAuODEsMS43NWwtMC41OSwxLjkybC0xLjM3LDAuNzlsLTAuMTQsMC4ybC0wLjM5LDIuMDdsMC4wMSwwLjE0bDAuNTYsMi4wNGwwLjIzLDAuMjFsMS4zMywwLjI4bDAuMTQsLTAuMGwxLjAsLTAuMjdsMi44MiwxLjI4bC0wLjIsMS4xNmwwLjEyLDAuMjlsMC42NiwwLjVsLTAuMTMsMC41NmwtMS41NCwtMC45OWwtMC44OSwtMS4yOWwtMC40OSwwLjBsLTAuNDQsMC42NWwtMS4zNCwtMS4yOGwtMC4yNiwtMC4wOGwtMi4xOCwwLjM2bC0wLjk2LC0wLjQ0bDAuMDksLTAuNzJsMC42OSwtMC41N2wtMC4wMSwtMC40N2wtMC43NSwtMC41OWwtMC40NywwLjE0bC0wLjE1LDAuNDNsLTAuODYsLTEuMDJsLTAuMzQsLTEuMDJsLTAuMDcsLTEuNzRsMC40OSwwLjQxbDAuNDksLTAuMjFsMC4yNiwtMy45OWwwLjczLC0yLjFsMS4yMywwLjBaTTczMS4xMiwyNTguOTJsLTAuODIsMC43NWwtMC44MywxLjY0bC0wLjUyLDAuNWwtMS4xNywtMS4zM2wwLjM2LC0wLjQ3bDAuNjIsLTAuN2wwLjA3LC0wLjE1bDAuMjQsLTEuMzVsMC43MywtMC4wOGwtMC4zMSwxLjI5bDAuMTYsMC4zNGwwLjM3LC0wLjA5bDEuMjEsLTEuNmwtMC4xMiwxLjI0Wk03MjYuNjYsMjU1LjU4bDAuODUsMC40NWwwLjE0LDAuMDNsMS4yOCwtMC4wbC0wLjAzLDAuNjJsLTEuMDQsMC45NmwtMS4xNSwwLjU1bC0wLjA1LC0wLjcxbDAuMTcsLTEuMjZsLTAuMDEsLTAuMTNsLTAuMTYsLTAuNTFaTTcyNC45MiwyNTIuMDZsLTAuNDUsMS41bC0wLjcsLTAuODNsLTAuOTUsLTEuNDNsMS40NCwwLjA2bDAuNjcsMC43Wk03MTcuNDgsMjYxLjI4bC0xLjg3LDEuMzVsMC4yMSwtMC4zbDEuODEsLTEuNTdsMS41LC0xLjc1bDAuOTcsLTEuODRsMC4yMywxLjA4bC0xLjU2LDEuMzNsLTEuMjksMS43WlwiLCBcIm5hbWVcIjogXCJQaGlsaXBwaW5lc1wifSwgXCJQTFwiOiB7XCJwYXRoXCI6IFwiTTQ1OC44LDE0NC4yNWwtMC45NiwtMS45OGwwLjE4LC0xLjA2bC0wLjAxLC0wLjE1bC0wLjYyLC0xLjhsLTAuODIsLTEuMTFsMC41NiwtMC43M2wwLjA1LC0wLjI4bC0wLjUxLC0xLjUxbDEuNDgsLTAuODdsMy44OCwtMS41OGwzLjA2LC0xLjE0bDIuMjMsMC41MmwwLjE1LDAuNjZsMC4yOSwwLjIzbDIuNCwwLjA0bDMuMTEsMC4zOWw0LjU2LC0wLjA1bDEuMTIsMC4zMmwwLjUxLDAuODlsMC4xLDEuNDVsMC4wMywwLjEybDAuNjYsMS4yM2wtMC4wMSwxLjA4bC0xLjMzLDAuNjFsLTAuMTQsMC40MWwwLjc0LDEuNWwwLjA3LDEuNTNsMS4yMiwyLjc5bC0wLjE5LDAuNjZsLTEuMDksMC4zM2wtMC4xNCwwLjA5bC0yLjI3LDIuNzJsLTAuMDQsMC4zMWwwLjM1LDAuOGwtMi4yMiwtMS4xNmwtMC4yMSwtMC4wMmwtMS43MiwwLjQ0bC0xLjEsLTAuMzFsLTAuMjEsMC4wMmwtMS4zLDAuNjFsLTEuMTEsLTEuMDJsLTAuMzIsLTAuMDVsLTAuODEsMC4zNWwtMS4xNSwtMS42MWwtMC4yMSwtMC4xMmwtMS42NSwtMC4xN2wtMC4xOSwtMC44MmwtMC4yMywtMC4yM2wtMS43MiwtMC4zN2wtMC4zNCwwLjE3bC0wLjI1LDAuNTZsLTAuODgsLTAuNDRsMC4xMiwtMC42OWwtMC4yNSwtMC4zNWwtMS43OCwtMC4yN2wtMS4wOCwtMC45N1pcIiwgXCJuYW1lXCI6IFwiUG9sYW5kXCJ9LCBcIlpNXCI6IHtcInBhdGhcIjogXCJNNTAyLjgxLDMwOC4zMmwxLjA5LDEuMDRsMC41OCwxLjk0bC0wLjM5LDAuNjZsLTAuNSwyLjA1bC0wLjAsMC4xNGwwLjQ1LDEuOTVsLTAuNjksMC43N2wtMC4wNiwwLjExbC0wLjc2LDIuMzdsMC4xNSwwLjM2bDAuNjIsMC4zMWwtNi44NSwxLjlsLTAuMjIsMC4zM2wwLjIsMS41NGwtMS42MiwwLjNsLTAuMTIsMC4wNWwtMS40MywxLjAybC0wLjExLDAuMTVsLTAuMjUsMC43M2wtMC43MywwLjE3bC0wLjE0LDAuMDhsLTIuMTgsMi4xMmwtMS4zMywxLjZsLTAuNjUsMC4wNWwtMC44MywtMC4yOWwtMi43NSwtMC4yOGwtMC4yNCwtMC4xbC0wLjE1LC0wLjI3bC0wLjk5LC0wLjU4bC0wLjEyLC0wLjA0bC0xLjczLC0wLjE0bC0xLjg4LDAuNTRsLTEuNSwtMS40OGwtMS42MSwtMi4wMWwwLjExLC03LjczbDQuOTIsMC4wM2wwLjI5LC0wLjM3bC0wLjE5LC0wLjc5bDAuMzQsLTAuODZsMC4wLC0wLjIxbC0wLjQxLC0xLjExbDAuMjYsLTEuMTRsLTAuMDEsLTAuMTZsLTAuMTIsLTAuMzZsMC4xOCwwLjAxbDAuMSwwLjU2bDAuMzEsMC4yNWwxLjE0LC0wLjA2bDEuNDQsMC4yMWwwLjc2LDEuMDVsMC4xOSwwLjEybDIuMDEsMC4zNWwwLjE5LC0wLjAzbDEuMjQsLTAuNjVsMC40NCwxLjAzbDAuMjIsMC4xOGwxLjgxLDAuMzRsMC44NSwwLjk5bDEuMDIsMS4zOWwwLjI0LDAuMTJsMS45MiwwLjAybDAuMywtMC4zMmwtMC4yMSwtMi43NGwtMC40NywtMC4yM2wtMC41MywwLjM2bC0xLjU4LC0wLjg5bC0wLjUxLC0wLjM0bDAuMjksLTIuMzZsMC40NCwtMi45OWwtMC4wMywtMC4xOGwtMC41LC0wLjk5bDAuNjEsLTEuMzhsMC41MywtMC4yNGwzLjI2LC0wLjQxbDAuODksMC4yM2wxLjAxLDAuNjJsMS4wNCwwLjQ0bDEuNiwwLjQzbDEuMzUsMC43MlpcIiwgXCJuYW1lXCI6IFwiWmFtYmlhXCJ9LCBcIkVFXCI6IHtcInBhdGhcIjogXCJNNDgyLjE5LDEyMC44OGwwLjIzLC0xLjY4bC0wLjQzLC0wLjMxbC0wLjc1LDAuMzdsLTEuMzQsLTEuMWwtMC4xOCwtMS43NWwyLjkyLC0wLjk1bDMuMDcsLTAuNTNsMi42NiwwLjZsMi40OCwtMC4xbDAuMTgsMC4zMWwtMS42NSwxLjk2bC0wLjA2LDAuMjZsMC43MSwzLjI1bC0wLjg4LDAuOTRsLTEuODUsLTAuMDFsLTIuMDgsLTEuM2wtMS4xNCwtMC40N2wtMC4yLC0wLjAxbC0xLjY5LDAuNTFaXCIsIFwibmFtZVwiOiBcIkVzdG9uaWFcIn0sIFwiRUdcIjoge1wicGF0aFwiOiBcIk01MDguMDcsMjA4LjhsLTAuNjYsMS4wNmwtMC41MywyLjAzbC0wLjY0LDEuMzJsLTAuMzIsMC4yNmwtMS43NCwtMS44NWwtMS43NywtMy44NmwtMC40OCwtMC4wOWwtMC4yNiwwLjI1bC0wLjA3LDAuMzJsMS4wNCwyLjg4bDEuNTUsMi43NmwxLjg5LDQuMThsMC45NCwxLjQ4bDAuODMsMS41NGwyLjA4LDIuNzNsLTAuMywwLjI4bC0wLjEsMC4yM2wwLjA4LDEuNzJsMC4xMSwwLjIybDIuOTEsMi4zN2wtMjguNzgsMC4wbDAuMCwtMTkuMDZsLTAuNzMsLTIuMmwwLjYxLC0xLjU5bDAuMCwtMC4ybC0wLjM0LC0xLjA0bDAuNzMsLTEuMDhsMy4xMywtMC4wNGwyLjM2LDAuNzJsMi40OCwwLjgxbDEuMTUsMC40M2wwLjIzLC0wLjAxbDEuOTMsLTAuODdsMS4wMiwtMC43OGwyLjA4LC0wLjIxbDEuNTksMC4zMWwwLjYyLDEuMjRsMC41MiwwLjAzbDAuNDYsLTAuNzFsMS44NiwwLjU5bDEuOTUsMC4xNmwwLjE3LC0wLjA0bDAuOTIsLTAuNTJsMS40OCw0LjI0WlwiLCBcIm5hbWVcIjogXCJFZ3lwdFwifSwgXCJaQVwiOiB7XCJwYXRoXCI6IFwiTTQ2Ny4wNiwzNzMuMjdsLTAuMTMsLTAuMjlsMC4wMSwtMS41OGwtMC4wMiwtMC4xMmwtMC43MSwtMS42NGwwLjU5LC0wLjM3bDAuMTQsLTAuMjZsLTAuMDcsLTIuMTNsLTAuMDUsLTAuMTVsLTEuNjMsLTIuNThsLTEuMjUsLTIuMzFsLTEuNzEsLTMuMzdsMC44OCwtMC45OGwwLjcsMC41MmwwLjM5LDEuMDhsMC4yMywwLjE5bDEuMSwwLjE5bDEuNTUsMC41MWwwLjE0LDAuMDFsMS4zNSwtMC4ybDAuMTEsLTAuMDRsMi4yNCwtMS4zOWwwLjE0LC0wLjI1bDAuMCwtOS40bDAuMTYsMC4wOWwxLjM5LDIuMzhsLTAuMjIsMS41M2wwLjA0LDAuMTlsMC41NiwwLjk0bDAuMywwLjE0bDEuNzksLTAuMjdsMC4xNiwtMC4wOGwxLjIzLC0xLjE4bDEuMTcsLTAuNzlsMC4xLC0wLjEybDAuNTcsLTEuMTlsMS4wMiwtMC41MmwwLjksMC4yOGwxLjE2LDAuNzNsMC4xNCwwLjA1bDIuMDQsMC4xM2wwLjEzLC0wLjAybDEuNiwtMC42MmwwLjE4LC0wLjE5bDAuNjMsLTEuOTNsMS4xOCwtMC4xOWwwLjE5LC0wLjEybDAuNzgsLTEuMDVsMC44MSwtMS43MWwyLjE4LC0xLjkxbDMuNDQsLTEuODhsMC44OSwwLjAybDEuMTcsMC40M2wwLjIxLC0wLjBsMC43NiwtMC4yOWwxLjA3LDAuMjFsMS4xNSwzLjU1bDAuNjMsMS44MmwtMC40NCwyLjlsMC4xLDAuNTJsLTAuNzQsLTAuMjlsLTAuMTgsLTAuMDFsLTAuNzIsMC4xOWwtMC4yMSwwLjJsLTAuMjIsMC43NGwtMC42NiwwLjk3bC0wLjA1LDAuMThsMC4wMiwwLjkzbDAuMDksMC4yMWwxLjQ5LDEuNDZsMC4yNywwLjA4bDEuNDcsLTAuMjlsMC4yMiwtMC4xOGwwLjQzLC0xLjAxbDEuMjksMC4wMmwtMC41MSwxLjYzbC0wLjI5LDIuMmwtMC41OSwxLjEybC0yLjIsMS43OGwtMS4wNiwxLjM5bC0wLjcyLDEuNDRsLTEuMzksMS45M2wtMi44MSwyLjg0bC0xLjc1LDEuNjVsLTEuODUsMS4yNGwtMi41NSwxLjA2bC0xLjIzLDAuMTRsLTAuMjQsMC4xOGwtMC4yMiwwLjU0bC0xLjI3LC0wLjM1bC0wLjIsMC4wMWwtMS4xNSwwLjVsLTIuNjIsLTAuNTJsLTAuMTIsMC4wbC0xLjQ2LDAuMzNsLTAuOTgsLTAuMTRsLTAuMTYsMC4wMmwtMi41NSwxLjFsLTIuMTEsMC40NGwtMS41OSwxLjA3bC0wLjkzLDAuMDZsLTAuOTcsLTAuOTJsLTAuMTksLTAuMDhsLTAuNzIsLTAuMDRsLTEuMCwtMS4xNmwtMC4yNSwwLjA1Wk00OTMuNzIsMzU5LjI0bC0xLjEyLC0wLjg2bC0wLjMxLC0wLjAzbC0xLjIzLDAuNTlsLTEuMzYsMS4wN2wtMS4zOSwxLjc4bDAuMDEsMC4zOGwxLjg4LDIuMTFsMC4zMSwwLjA5bDAuOSwtMC4yN2wwLjE4LC0wLjE1bDAuNCwtMC43N2wxLjI4LC0wLjM5bDAuMTgsLTAuMTZsMC40MiwtMC44OGwwLjc2LC0xLjMybC0wLjA1LC0wLjM3bC0wLjg3LC0wLjgyWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBBZnJpY2FcIn0sIFwiRUNcIjoge1wicGF0aFwiOiBcIk0yMjAuMiwyOTMuNDhsMS4yNSwtMS43NmwwLjAyLC0wLjMxbC0wLjU0LC0xLjA5bC0wLjUsLTAuMDZsLTAuNzgsMC45NGwtMS4wMywtMC43NWwwLjMzLC0wLjQ2bDAuMDUsLTAuMjNsLTAuMzgsLTIuMDRsMC42NiwtMC4yOGwwLjE3LC0wLjE5bDAuNDUsLTEuNTJsMC45MywtMS41OGwwLjA0LC0wLjJsLTAuMTMsLTAuNzhsMS4xOSwtMC40N2wxLjU3LC0wLjkxbDIuMzUsMS4zNGwwLjE3LDAuMDRsMC4yOCwtMC4wMmwwLjUyLDAuOTFsMC4yMSwwLjE1bDIuMTIsMC4zNWwwLjIsLTAuMDNsMC41NSwtMC4zMWwxLjA4LDAuNzNsMC45NywwLjU0bDAuMzEsMS42N2wtMC43MSwxLjQ5bC0yLjY0LDIuNTRsLTIuOTUsMC45N2wtMC4xNSwwLjExbC0xLjUzLDIuMThsLTAuNDksMS42OGwtMS4xLDAuOGwtMC44NywtMS4wNWwtMC4xNSwtMC4xbC0xLjAxLC0wLjI3bC0wLjEzLC0wLjBsLTAuNywwLjE0bC0wLjAzLC0wLjQzbDAuNiwtMC41bDAuMSwtMC4zMWwtMC4yNiwtMC45MVpcIiwgXCJuYW1lXCI6IFwiRWN1YWRvclwifSwgXCJBTFwiOiB7XCJwYXRoXCI6IFwiTTQ3MC4yNywxNzEuN2wwLjM4LDAuMTlsMC40NSwtMC4xOGwwLjQsMC42MWwwLjExLDAuMWwwLjQ2LDAuMjRsMC4xMywwLjg3bC0wLjMsMC45NWwtMC4wLDAuMTdsMC4zNiwxLjI4bDAuMTIsMC4xN2wwLjksMC42M2wtMC4wMywwLjQ0bC0wLjY3LDAuMzVsLTAuMTYsMC4yMmwtMC4xNCwwLjg4bC0wLjk2LDEuMThsLTAuMDYsLTAuMDNsLTAuMDQsLTAuNDhsLTAuMTIsLTAuMjJsLTEuMjgsLTAuOTJsLTAuMTksLTEuMjVsMC4yLC0xLjk2bDAuMzMsLTAuODlsLTAuMDYsLTAuM2wtMC4zNiwtMC40MWwtMC4xMywtMC43NWwwLjY2LC0wLjlaXCIsIFwibmFtZVwiOiBcIkFsYmFuaWFcIn0sIFwiQU9cIjoge1wicGF0aFwiOiBcIk00NjEuNjIsMjk5LjkzbDAuNTUsMS42N2wwLjczLDEuNTRsMS41NiwyLjE4bDAuMjgsMC4xMmwxLjY2LC0wLjJsMC44MSwtMC4zNGwxLjI4LDAuMzNsMC4zMywtMC4xNGwwLjM5LC0wLjY3bDAuNTYsLTEuM2wxLjM3LC0wLjA5bDAuMjcsLTAuMjFsMC4wNywtMC4yM2wwLjY3LC0wLjAxbC0wLjEzLDAuNTNsMC4yOSwwLjM3bDIuNzQsLTAuMDJsMC4wNCwxLjI5bDAuMDMsMC4xM2wwLjQ2LDAuODdsLTAuMzUsMS41MmwwLjE4LDEuNTVsMC4wNywwLjE2bDAuNzUsMC44NWwtMC4xMywyLjg5bDAuNDEsMC4yOWwwLjU2LC0wLjIxbDEuMTEsMC4wNWwxLjUsLTAuMzdsMC45LDAuMTJsMC4xOCwwLjUzbC0wLjI3LDEuMTVsMC4wMSwwLjE3bDAuNCwxLjA4bC0wLjMzLDAuODVsLTAuMDEsMC4xOGwwLjEyLDAuNTFsLTQuODMsLTAuMDNsLTAuMywwLjNsLTAuMTIsOC4xM2wwLjA3LDAuMTlsMS42OSwyLjFsMS4yNywxLjI1bC00LjAzLDAuOTJsLTUuOTMsLTAuMzZsLTEuNjYsLTEuMTlsLTAuMTgsLTAuMDZsLTEwLjE1LDAuMTFsLTAuMzQsMC4xM2wtMS4zNSwtMS4wNWwtMC4xNywtMC4wNmwtMS42MiwtMC4wOGwtMS42LDAuNDVsLTAuODgsMC4zNmwtMC4xNywtMS4ybDAuMzQsLTIuMTlsMC44NSwtMi4zMmwwLjE0LC0xLjEzbDAuNzksLTIuMjRsMC41NywtMS4wbDEuNDIsLTEuNjRsMC44MiwtMS4xNWwwLjA1LC0wLjEzbDAuMjYsLTEuODhsLTAuMTMsLTEuNTFsLTAuMDcsLTAuMTZsLTAuNzIsLTAuODdsLTEuMjMsLTIuOTFsMC4wOSwtMC4zN2wwLjczLC0wLjk1bDAuMDUsLTAuMjdsLTEuMjcsLTQuMTJsLTEuMTksLTEuNTRsMC4xLC0wLjJsMC44NiwtMC4yOGwwLjc4LDAuMDNsMC44MywtMC4yOWw3LjEyLDAuMDNaTTQ1MS44MSwyOTguOTRsLTAuMTcsMC4wN2wtMC41LC0xLjQybDAuODUsLTAuOTJsMC41MywtMC4yOWwwLjQ4LDAuNDRsLTAuNTYsMC4zMmwtMC4xLDAuMWwtMC40MSwwLjY1bC0wLjA1LDAuMTRsLTAuMDcsMC45MVpcIiwgXCJuYW1lXCI6IFwiQW5nb2xhXCJ9LCBcIktaXCI6IHtcInBhdGhcIjogXCJNNTk4LjQyLDE3Mi4wOGwtMS4zNywwLjU0bC0zLjMsMi4wOWwtMC4xMSwwLjEybC0xLjAxLDEuOTdsLTAuNTYsMC4wMWwtMC42LC0xLjI0bC0wLjI2LC0wLjE3bC0yLjk1LC0wLjA5bC0wLjQ2LC0yLjIybC0wLjI5LC0wLjI0bC0wLjkxLC0wLjAybDAuMTcsLTIuNzJsLTAuMTIsLTAuMjZsLTMuMCwtMi4yMmwtMC4yLC0wLjA2bC00LjI5LDAuMjRsLTIuOCwwLjQybC0yLjM2LC0yLjdsLTYuNCwtMy42NWwtMC4yMywtMC4wM2wtNi40NSwxLjgzbC0wLjIyLDAuMjlsMC4xLDEwLjk0bC0wLjg0LDAuMWwtMS42NSwtMi4yMWwtMC4xMSwtMC4wOWwtMS42OSwtMC44NGwtMC4yLC0wLjAybC0yLjg0LDAuNjNsLTAuMTQsMC4wN2wtMC43MSwwLjY0bC0wLjAyLC0wLjExbDAuNTcsLTEuMTdsMC4wLC0wLjI2bC0wLjQ4LC0xLjA1bC0wLjE3LC0wLjE2bC0yLjc4LC0wLjk5bC0xLjA4LC0yLjYybC0wLjEzLC0wLjE1bC0xLjI0LC0wLjdsLTAuMDQsLTAuNDhsMi4wNywwLjI1bDAuMzQsLTAuMjlsMC4wOSwtMi4wM2wxLjg0LC0wLjQ0bDIuMTIsMC40NWwwLjM2LC0wLjI1bDAuNDUsLTMuMDRsLTAuNDUsLTIuMDZsLTAuMzEsLTAuMjNsLTIuNDQsMC4xNWwtMi4wNywtMC43NWwtMC4yMywwLjAxbC0yLjg4LDEuMzhsLTIuMjEsMC42MmwtMC45NiwtMC4zOGwwLjIyLC0xLjM5bC0wLjA2LC0wLjIzbC0xLjYsLTIuMTJsLTAuMjUsLTAuMTJsLTEuNzIsMC4wOGwtMS44NywtMS45MWwxLjMzLC0yLjI0bC0wLjA2LC0wLjM4bC0wLjU1LC0wLjVsMS43MiwtMy4wOGwyLjMsMS43bDAuNDgsLTAuMmwwLjI5LC0yLjI2bDQuOTksLTMuNDhsMy43NiwtMC4wOGw1LjQ2LDIuMjdsMi45NiwxLjMzbDAuMjYsLTAuMDFsMi41OSwtMS4zNmwzLjgyLC0wLjA2bDMuMTMsMS42N2wwLjM4LC0wLjA5bDAuNjMsLTAuODVsMy4zNiwwLjE0bDAuMjksLTAuMTlsMC42MywtMS41N2wtMC4xMywtMC4zN2wtMy42NCwtMi4wNWwyLjAsLTEuMzZsMC4xLC0wLjM4bC0wLjMyLC0wLjYybDIuMDksLTAuNzZsMC4xMywtMC40N2wtMS42NSwtMi4xM2wwLjg5LC0wLjkxbDkuMjcsLTEuMThsMC4xMywtMC4wNWwxLjE3LC0wLjgybDYuMiwtMS4yN2wyLjI2LC0xLjQzbDQuMTksMC43bDAuNzQsMy4zOWwwLjM4LDAuMjJsMi41MiwtMC44MWwyLjksMS4wNmwtMC4xOCwxLjYzbDAuMzIsMC4zM2wyLjUyLC0wLjIzbDUuMCwtMi41OGwwLjAzLDAuMzlsMy4xNiwyLjYybDUuNTcsOC40OGwwLjQ5LDAuMDJsMS4xOCwtMS41M2wzLjIyLDEuNzhsMC4yMSwwLjAzbDMuNSwtMC44M2wxLjIxLDAuNTJsMS4xNiwxLjgybDAuMTUsMC4xMmwxLjY3LDAuNjFsMS4wMSwxLjMybDAuMjgsMC4xMWwzLjA0LC0wLjQxbDEuMSwxLjY0bC0xLjY4LDEuODlsLTEuOTcsMC4yOGwtMC4yNiwwLjI5bC0wLjEyLDMuMDlsLTEuMiwxLjIzbC00LjgxLC0xLjAxbC0wLjM1LDAuMmwtMS43Nyw1LjUxbC0xLjE0LDAuNjJsLTQuOTIsMS4yM2wtMC4yLDAuNDFsMi4xNCw1LjA2bC0xLjQ1LDAuNjdsLTAuMTcsMC4zMWwwLjE1LDEuMjhsLTEuMDUsLTAuM2wtMS4yMSwtMS4wNGwtMC4xNywtMC4wN2wtMy43MywtMC4zMmwtNC4xNSwtMC4wOGwtMC45MiwwLjMxbC0zLjQ2LC0xLjI0bC0wLjIyLDAuMDFsLTEuNDIsMC42M2wtMC4xNywwLjIxbC0wLjMyLDEuNDlsLTMuODIsLTAuOTdsLTAuMTUsMC4wbC0xLjY1LDAuNDNsLTAuMiwwLjE3bC0wLjUxLDEuMjFaXCIsIFwibmFtZVwiOiBcIkthemFraHN0YW5cIn0sIFwiRVRcIjoge1wicGF0aFwiOiBcIk01MTYuMCwyNDcuNjNsMS4yMSwwLjkybDAuMywwLjA0bDEuMywtMC41M2wwLjQ2LDAuNDFsMC4xOSwwLjA4bDEuNjUsMC4wM2wyLjA1LDAuOTZsMC42NywwLjg4bDEuMDcsMC43OWwxLjAsMS40NWwwLjcsMC42OGwtMC43MiwwLjkybC0wLjg1LDEuMTlsLTAuMDQsMC4yNWwwLjE5LDAuNjdsMC4wNCwwLjc0bDAuMjksMC4yOGwxLjQsMC4wNGwwLjU1LC0wLjE1bDAuMjMsMC4xOWwtMC40MSwwLjY3bDAuMDEsMC4zMmwwLjkyLDEuMzlsMC45MywxLjIzbDAuOTksMC45NGwwLjEsMC4wNmw4LjE5LDIuOTlsMS41MSwwLjAxbC02LjUxLDYuOTVsLTMuMTQsMC4xMWwtMC4xOCwwLjA2bC0yLjE1LDEuNzFsLTEuNTEsMC4wNGwtMC4yMiwwLjFsLTAuNiwwLjY5bC0xLjQ2LC0wLjBsLTAuOTMsLTAuNzhsLTAuMzIsLTAuMDRsLTIuMjksMS4wNWwtMC4xMiwwLjFsLTAuNjQsMC45bC0xLjQ0LC0wLjE3bC0wLjUxLC0wLjI2bC0wLjE3LC0wLjAzbC0wLjU2LDAuMDdsLTAuNjgsLTAuMDJsLTMuMSwtMi4wOGwtMC4xNywtMC4wNWwtMS42MiwwLjBsLTAuNjgsLTAuNjVsMC4wLC0xLjI4bC0wLjIxLC0wLjI5bC0xLjE5LC0wLjM4bC0xLjQyLC0yLjYzbC0wLjEzLC0wLjEybC0xLjA1LC0wLjUzbC0wLjQ2LC0xLjBsLTEuMjcsLTEuMjNsLTAuMTcsLTAuMDhsLTEuMDgsLTAuMTNsMC41MywtMC45bDEuMTcsLTAuMDVsMC4yNiwtMC4xN2wwLjM3LC0wLjc3bDAuMDMsLTAuMTRsLTAuMDMsLTIuMjNsMC43LC0yLjQ5bDEuMDgsLTAuNjVsMC4xNCwtMC4xOWwwLjI0LC0xLjBsMS4wMywtMS44NWwxLjQ3LC0xLjIybDAuMDksLTAuMTJsMS4wMiwtMi41MWwwLjM2LC0xLjk2bDIuNjIsMC40OGwwLjMzLC0wLjE4bDAuNjMsLTEuNTVaXCIsIFwibmFtZVwiOiBcIkV0aGlvcGlhXCJ9LCBcIlpXXCI6IHtcInBhdGhcIjogXCJNNDk4Ljk1LDM0MS4ybC0xLjE2LC0wLjIzbC0wLjE2LDAuMDFsLTAuNzQsMC4yOGwtMS4xMSwtMC40MWwtMS4wMiwtMC4wNGwtMS41MiwtMS4xM2wtMC4xMiwtMC4wNWwtMS43OSwtMC4zN2wtMC42NSwtMS40NmwtMC4wMSwtMC44NmwtMC4yMiwtMC4yOWwtMC45OSwtMC4yNmwtMi43NCwtMi43N2wtMC43NywtMS40NmwtMC41MiwtMC41bC0wLjcyLC0xLjU0bDIuMjQsMC4yM2wwLjc4LDAuMjhsMC4xMiwwLjAybDAuODUsLTAuMDZsMC4yMSwtMC4xMWwxLjM4LC0xLjY2bDIuMTEsLTIuMDVsMC44MSwtMC4xOGwwLjIyLC0wLjJsMC4yNywtMC44bDEuMjksLTAuOTNsMS41MywtMC4yOGwwLjExLDAuNjZsMC4zLDAuMjVsMi4wMiwtMC4wNWwxLjA0LDAuNDhsMC41LDAuNTlsMC4xOCwwLjFsMS4xMywwLjE4bDEuMTEsMC43bDAuMDEsMy4wNmwtMC40OSwxLjgybC0wLjExLDEuOTRsMC4wMywwLjE2bDAuMzUsMC42OGwtMC4yNCwxLjNsLTAuMjcsMC4xN2wtMC4xMiwwLjE1bC0wLjY0LDEuODNsLTIuNDksMi44WlwiLCBcIm5hbWVcIjogXCJaaW1iYWJ3ZVwifSwgXCJFU1wiOiB7XCJwYXRoXCI6IFwiTTM5OC42NywxNzIuOGwwLjA5LC0xLjQ1bC0wLjA2LC0wLjJsLTAuODIsLTEuMDVsMy4xNiwtMS45NmwzLjAxLDAuNTRsMy4zMywtMC4wMmwyLjY0LDAuNTJsMi4xNCwtMC4xNWwzLjksMC4xbDAuOTEsMS4wOGwwLjE0LDAuMDlsNC42MSwxLjM4bDAuMjYsLTAuMDRsMC43NywtMC41NWwyLjY2LDEuMjlsMC4xNywwLjAzbDIuNTksLTAuMzVsMC4xLDEuMjhsLTIuMiwxLjg1bC0zLjEzLDAuNjJsLTAuMjMsMC4yM2wtMC4yMSwwLjkybC0xLjU0LDEuNjhsLTAuOTcsMi40bDAuMDIsMC4yNmwwLjg1LDEuNDZsLTEuMjcsMS4xNGwtMC4wOSwwLjE0bC0wLjUsMS43M2wtMS43MywwLjUzbC0wLjE1LDAuMWwtMS42OCwyLjFsLTMuMDMsMC4wNGwtMi4zOCwtMC4wNWwtMC4xNywwLjA1bC0xLjU3LDEuMDFsLTAuOSwxLjAxbC0wLjk2LC0wLjE5bC0wLjgyLC0wLjg2bC0wLjY5LC0xLjZsLTAuMjIsLTAuMThsLTIuMTQsLTAuNDFsLTAuMTMsLTAuNjJsMC44MywtMC45N2wwLjM5LC0wLjg2bC0wLjA2LC0wLjMzbC0wLjczLC0wLjczbDAuNjMsLTEuNzRsLTAuMDIsLTAuMjVsLTAuOCwtMS40MWwwLjY5LC0wLjE1bDAuMjMsLTAuMjdsMC4wOSwtMS4yOWwwLjMzLC0wLjM2bDAuMDgsLTAuMmwwLjAzLC0yLjE2bDEuMDMsLTAuNzJsMC4xLC0wLjM3bC0wLjcsLTEuNWwtMC4yNSwtMC4xN2wtMS40NiwtMC4xMWwtMC4yMiwwLjA3bC0wLjM0LDAuM2wtMS4xNywwLjBsLTAuNTUsLTEuMjlsLTAuMzksLTAuMTZsLTEuMDIsMC40NGwtMC40NSwwLjM2WlwiLCBcIm5hbWVcIjogXCJTcGFpblwifSwgXCJFUlwiOiB7XCJwYXRoXCI6IFwiTTUyNy4xNSwyNTMuMDVsLTAuNzcsLTAuNzRsLTEuMDEsLTEuNDdsLTEuMTQsLTAuODZsLTAuNjIsLTAuODRsLTAuMTEsLTAuMDlsLTIuMTgsLTEuMDJsLTAuMTIsLTAuMDNsLTEuNjEsLTAuMDNsLTAuNTIsLTAuNDZsLTAuMzEsLTAuMDVsLTEuMzEsMC41NGwtMS4zOCwtMS4wNmwtMC40NiwwLjEybC0wLjY5LDEuNjhsLTIuNDksLTAuNDZsLTAuMiwtMC43NmwxLjA2LC0zLjY5bDAuMjQsLTEuNjVsMC42NiwtMC42NmwxLjc2LC0wLjRsMC4xNiwtMC4xbDAuOTcsLTEuMTNsMS4yNCwyLjU1bDAuNjgsMi4zNGwwLjA5LDAuMTRsMS40LDEuMjdsMy4zOSwyLjRsMS4zNywxLjQzbDIuMTQsMi4zNGwwLjk0LDAuNmwtMC4zMiwwLjI2bC0wLjg1LC0wLjE3WlwiLCBcIm5hbWVcIjogXCJFcml0cmVhXCJ9LCBcIk1FXCI6IHtcInBhdGhcIjogXCJNNDY5LjA1LDE3Mi45bC0wLjU3LC0wLjhsLTAuMSwtMC4wOWwtMC44MiwtMC40NmwwLjE2LC0wLjMzbDAuMzUsLTEuNTdsMC43MiwtMC42MmwwLjI3LC0wLjE2bDAuNDgsMC4zOGwwLjM1LDAuNGwwLjEyLDAuMDhsMC43OSwwLjMybDAuNjYsMC40M2wtMC40MywwLjYybC0wLjI4LDAuMTFsLTAuMDcsLTAuMjVsLTAuNTMsLTAuMWwtMS4wOSwxLjQ5bC0wLjA1LDAuMjNsMC4wNiwwLjMyWlwiLCBcIm5hbWVcIjogXCJNb250ZW5lZ3JvXCJ9LCBcIk1EXCI6IHtcInBhdGhcIjogXCJNNDg4LjIsMTUzLjc1bDAuMTQsLTAuMTFsMS40OSwtMC4yOGwxLjc1LDAuOTVsMS4wNiwwLjE0bDAuOTIsMC43bC0wLjE1LDAuOWwwLjE1LDAuMzFsMC44LDAuNDZsMC4zMywxLjJsMC4wOSwwLjE0bDAuNzIsMC42NmwtMC4xMSwwLjI4bDAuMSwwLjMzbC0wLjA2LDAuMDJsLTEuMjUsLTAuMDhsLTAuMTcsLTAuMjlsLTAuMzksLTAuMTJsLTAuNTIsMC4yNWwtMC4xNiwwLjM2bDAuMTMsMC40MmwtMC42LDAuODhsLTAuNDMsMS4wM2wtMC4yMiwwLjEybC0wLjMyLC0xLjBsMC4yNSwtMS4zNGwtMC4wOCwtMS4zOGwtMC4wNiwtMC4xN2wtMS40MywtMS44N2wtMC44MSwtMS4zNmwtMC43OCwtMC45NWwtMC4xMiwtMC4wOWwtMC4yOSwtMC4xMlpcIiwgXCJuYW1lXCI6IFwiTW9sZG92YVwifSwgXCJNR1wiOiB7XCJwYXRoXCI6IFwiTTU0NC43NywzMTYuNDVsMC42NCwxLjA0bDAuNiwxLjYybDAuNCwzLjA0bDAuNjMsMS4yMWwtMC4yMiwxLjA3bC0wLjE1LDAuMjZsLTAuNTksLTEuMDVsLTAuNTIsLTAuMDFsLTAuNDcsMC43NmwtMC4wNCwwLjIzbDAuNDYsMS44NGwtMC4xOSwwLjkybC0wLjYxLDAuNTNsLTAuMSwwLjIxbC0wLjE2LDIuMTVsLTAuOTcsMi45OGwtMS4yNCwzLjU5bC0xLjU1LDQuOTdsLTAuOTYsMy42N2wtMS4wOCwyLjkzbC0xLjk0LDAuNjFsLTIuMDUsMS4wNmwtMy4yLC0xLjUzbC0wLjYyLC0xLjI2bC0wLjE4LC0yLjM5bC0wLjg3LC0yLjA3bC0wLjIyLC0xLjhsMC40LC0xLjY5bDEuMDEsLTAuNGwwLjE5LC0wLjI4bDAuMDEsLTAuNzlsMS4xNSwtMS45MWwwLjA0LC0wLjExbDAuMjMsLTEuNjZsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMjFsLTAuNDYsLTEuNThsLTAuMTksLTIuMjVsMC44MiwtMS4zNmwwLjMzLC0xLjUxbDEuMTEsLTAuMWwxLjQsLTAuNTNsMC45LC0wLjQ1bDEuMDMsLTAuMDNsMC4yMSwtMC4wOWwxLjQxLC0xLjQ1bDIuMTIsLTEuNjVsMC43NSwtMS4yOWwwLjAzLC0wLjI0bC0wLjE3LC0wLjU2bDAuNTMsMC4xNWwwLjMyLC0wLjFsMS4zOCwtMS43N2wwLjA2LC0wLjE4bDAuMDQsLTEuNDRsMC41NCwtMC43NGwwLjYyLDAuNzdaXCIsIFwibmFtZVwiOiBcIk1hZGFnYXNjYXJcIn0sIFwiTUFcIjoge1wicGF0aFwiOiBcIk0zNzguNjYsMjMwLjEzbDAuMDcsLTAuNzVsMC45MywtMC43MmwwLjgyLC0xLjM3bDAuMDQsLTAuMjFsLTAuMTQsLTAuOGwwLjgsLTEuNzRsMS4zMywtMS42MWwwLjc5LC0wLjRsMC4xNCwtMC4xNWwwLjY2LC0xLjU1bDAuMDgsLTEuNDZsMC44MywtMS41MmwxLjYsLTAuOTRsMC4xMSwtMC4xMWwxLjU2LC0yLjcxbDEuMiwtMC45OWwyLjI0LC0wLjI5bDAuMTcsLTAuMDhsMS45NSwtMS44M2wxLjMsLTAuNzdsMi4wOSwtMi4yOGwwLjA3LC0wLjI2bC0wLjYxLC0zLjM0bDAuOTIsLTIuM2wwLjMzLC0xLjQ0bDEuNTIsLTEuNzlsMi40OCwtMS4yN2wxLjg2LC0xLjE2bDAuMSwtMC4xMWwxLjY3LC0yLjkzbDAuNzIsLTEuNTlsMS41NCwwLjAxbDEuNDMsMS4xNGwwLjIxLDAuMDZsMi4zMywtMC4xOWwyLjU1LDAuNjJsMC45NywwLjAzbDAuODMsMS42bDAuMTUsMS43MWwwLjg2LDIuOTZsMC4wOSwwLjE0bDAuNSwwLjQ1bC0wLjMxLDAuNzNsLTMuMTEsMC40NGwtMC4xNiwwLjA3bC0xLjA3LDAuOTdsLTEuMzYsMC4yM2wtMC4yNSwwLjI4bC0wLjEsMS44NWwtMi43NCwxLjAybC0wLjE0LDAuMTFsLTAuOSwxLjNsLTEuOTMsMC42OWwtMi41NiwwLjQ0bC00LjA0LDIuMDFsLTAuMTcsMC4yN2wwLjAyLDIuOTFsLTAuMDgsMC4wbC0wLjMsMC4zMWwwLjA1LDEuMTVsLTEuMjUsMC4wN2wtMC4xNiwwLjA2bC0wLjczLDAuNTVsLTAuOTgsMC4wbC0wLjg1LC0wLjMzbC0wLjE1LC0wLjAybC0yLjExLDAuMjlsLTAuMjQsMC4xOWwtMC43NiwxLjk1bC0wLjYzLDAuMTZsLTAuMjEsMC4xOWwtMS4xNSwzLjI5bC0zLjQyLDIuODFsLTAuMSwwLjE3bC0wLjgxLDMuNTdsLTAuOTgsMS4xMmwtMC4zLDAuODVsLTUuMTMsMC4xOVpcIiwgXCJuYW1lXCI6IFwiTW9yb2Njb1wifSwgXCJVWlwiOiB7XCJwYXRoXCI6IFwiTTU4Ny44MywxODYuNDhsMC4wNiwtMS40NmwtMC4xOSwtMC4yOWwtMy4zMSwtMS4yNGwtMi41NywtMS40bC0xLjYzLC0xLjM4bC0yLjc5LC0xLjk4bC0xLjIsLTIuOThsLTAuMTIsLTAuMTRsLTAuODQsLTAuNTRsLTAuMTgsLTAuMDVsLTIuNjEsMC4xM2wtMC43NiwtMC40OGwtMC4yNSwtMi4yNWwtMC4xNywtMC4yNGwtMy4zNywtMS42bC0wLjMyLDAuMDRsLTIuMDgsMS43M2wtMi4xMSwxLjAybC0wLjE2LDAuMzVsMC4zMSwxLjE0bC0yLjE0LDAuMDNsLTAuMDksLTEwLjY4bDYuMSwtMS43NGw2LjI1LDMuNTdsMi4zNiwyLjcybDAuMjcsMC4xbDIuOTIsLTAuNDRsNC4xNywtMC4yM2wyLjc4LDIuMDZsLTAuMTgsMi44N2wwLjI5LDAuMzJsMC45OCwwLjAybDAuNDYsMi4yMmwwLjI4LDAuMjRsMy4wLDAuMDlsMC42MSwxLjI1bDAuMjgsMC4xN2wwLjkzLC0wLjAybDAuMjYsLTAuMTZsMS4wNiwtMi4wNmwzLjIxLC0yLjAzbDEuMywtMC41bDAuMTksMC4wOGwtMS43NSwxLjYybDAuMDUsMC40OGwxLjg1LDEuMTJsMC4yNywwLjAybDEuNjUsLTAuNjlsMi40LDEuMjdsLTIuNjksMS43OWwtMS43OSwtMC4yN2wtMC44OSwwLjA2bC0wLjIyLC0wLjUybDAuNDgsLTEuMjZsLTAuMzQsLTAuNGwtMy4zNSwwLjY5bC0wLjIyLDAuMThsLTAuNzgsMS44N2wtMS4wNywxLjQ3bC0xLjkzLC0wLjEzbC0wLjI5LDAuMTZsLTAuNjUsMS4yOWwwLjE2LDAuNDJsMS42OSwwLjY0bDAuNDgsMS45MWwtMS4yNSwyLjZsLTEuNjQsLTAuNTNsLTEuMTgsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlV6YmVraXN0YW5cIn0sIFwiTU1cIjoge1wicGF0aFwiOiBcIk02NzAuMSwyMzMuMzlsLTEuNDYsMS4xMWwtMS42OCwwLjExbC0wLjI2LDAuMTlsLTEuMSwyLjdsLTAuOTUsMC40MmwtMC4xNCwwLjQybDEuMjEsMi4yN2wxLjYxLDEuOTJsMC45NCwxLjU1bC0wLjgyLDEuOTlsLTAuNzcsMC40MmwtMC4xMywwLjM5bDAuNjQsMS4zNWwxLjYyLDEuOTdsMC4yNiwxLjMybC0wLjA0LDEuMTVsMC4wMiwwLjEzbDAuOTIsMi4xOGwtMS4zLDIuMjNsLTAuNzksMS42OWwtMC4xLC0wLjc3bDAuNzQsLTEuODdsLTAuMDIsLTAuMjZsLTAuOCwtMS40MmwwLjIsLTIuNjhsLTAuMDYsLTAuMmwtMC45OCwtMS4yN2wtMC44LC0yLjk4bC0wLjQ1LC0zLjIybC0xLjExLC0yLjIybC0wLjQ1LC0wLjFsLTEuNjQsMS4yOGwtMi43NCwxLjc2bC0xLjI2LC0wLjJsLTEuMjcsLTAuNDlsMC43OSwtMi45M2wwLjAsLTAuMTRsLTAuNTIsLTIuNDJsLTEuOTMsLTIuOTdsMC4yNiwtMC44bC0wLjIyLC0wLjM5bC0xLjM3LC0wLjMxbC0xLjY1LC0xLjk4bC0wLjEyLC0xLjVsMC40MSwwLjE5bDAuNDIsLTAuMjZsMC4wNSwtMS43bDEuMDgsLTAuNTRsMC4xNiwtMC4zNGwtMC4yNCwtMS4wbDAuNSwtMC43OWwwLjA1LC0wLjE1bDAuMDgsLTIuMzVsMS41OCwwLjQ5bDAuMzYsLTAuMTVsMS4xMiwtMi4xOWwwLjE1LC0xLjM0bDEuMzUsLTIuMThsMC4wNCwtMC4xN2wtMC4wNywtMS4zNWwyLjk3LC0xLjcxbDEuNjcsMC40NWwwLjM4LC0wLjMzbC0wLjE4LC0xLjQ2bDAuNywtMC40bDAuMTUsLTAuMzJsLTAuMTMsLTAuNzJsMC45NCwtMC4xM2wwLjc0LDEuNDFsMC4xMSwwLjEybDAuOTUsMC41NmwwLjA3LDEuODlsLTAuMDksMi4wOGwtMi4yOCwyLjE1bC0wLjA5LDAuMTlsLTAuMywzLjE1bDAuMzUsMC4zMmwyLjM3LC0wLjM5bDAuNTMsMi4xN2wwLjIsMC4yMWwxLjMsMC40MmwtMC42MywxLjlsMC4xNCwwLjM2bDEuODYsMC45OWwxLjEsMC40OWwwLjI0LDAuMGwxLjQ1LC0wLjZsMC4wNCwwLjUxbC0yLjAxLDEuNmwtMC41NiwwLjk2bC0xLjM0LDAuNTZaXCIsIFwibmFtZVwiOiBcIk15YW5tYXJcIn0sIFwiTUxcIjoge1wicGF0aFwiOiBcIk0zOTAuNzksMjQ4LjJsMC42NywtMC4zN2wwLjE0LC0wLjE4bDAuMzYsLTEuMzFsMC41MSwtMC4wNGwxLjY4LDAuNjlsMC4yMSwwLjBsMS4zNCwtMC40OGwwLjg5LDAuMTZsMC4zLC0wLjEzbDAuMjksLTAuNDRsOS44OSwtMC4wNGwwLjI5LC0wLjIxbDAuNTYsLTEuOGwtMC4xMSwtMC4zM2wtMC4zMywtMC4yNGwtMi4zNywtMjIuMWwzLjQxLC0wLjA0bDguMzcsNS43M2w4LjM4LDUuNjhsMC41NiwxLjE1bDAuMTQsMC4xNGwxLjU2LDAuNzVsMC45OSwwLjM2bDAuMDMsMS40NWwwLjMzLDAuMjlsMi40NSwtMC4yMmwwLjAxLDUuNTJsLTEuMywxLjY0bC0wLjA2LDAuMTVsLTAuMTgsMS4zN2wtMS45OSwwLjM2bC0zLjQsMC4yMmwtMC4xOSwwLjA5bC0wLjg1LDAuODNsLTEuNDgsMC4wOWwtMS40OSwwLjAxbC0wLjU0LC0wLjQzbC0wLjI2LC0wLjA1bC0xLjM4LDAuMzZsLTIuMzksMS4wOGwtMC4xMywwLjEybC0wLjQ0LDAuNzNsLTEuODgsMS4xMWwtMC4xMSwwLjEybC0wLjMsMC41N2wtMC44NiwwLjQybC0xLjEsLTAuMzFsLTAuMjgsMC4wN2wtMC42OSwwLjYybC0wLjA5LDAuMTZsLTAuMzUsMS42NmwtMS45MywyLjA0bC0wLjA4LDAuMjNsMC4wNSwwLjc2bC0wLjYzLDAuOTlsLTAuMDQsMC4xOWwwLjE0LDEuMjNsLTAuODEsMC4yOWwtMC4zMiwwLjE3bC0wLjI3LC0wLjc1bC0wLjM5LC0wLjE4bC0wLjY1LDAuMjZsLTAuMzYsLTAuMDRsLTAuMjksMC4xNGwtMC4zNywwLjZsLTEuNjksLTAuMDJsLTAuNjMsLTAuMzRsLTAuMzIsMC4wMmwtMC4xMiwwLjA5bC0wLjQ3LC0wLjQ1bDAuMSwtMC42bC0wLjA5LC0wLjI3bC0wLjMxLC0wLjNsLTAuMzMsLTAuMDVsLTAuMDUsMC4wMmwwLjAyLC0wLjIxbDAuNDYsLTAuNTlsLTAuMDIsLTAuMzlsLTAuOTksLTEuMDJsLTAuMzQsLTAuNzRsLTAuNTYsLTAuNTZsLTAuMTcsLTAuMDlsLTAuNSwtMC4wN2wtMC4xOSwwLjA0bC0wLjU4LDAuMzVsLTAuNzksMC4zM2wtMC42NSwwLjUxbC0wLjg1LC0wLjE2bC0wLjYzLC0wLjU5bC0wLjE0LC0wLjA3bC0wLjQxLC0wLjA4bC0wLjIsMC4wM2wtMC41OSwwLjMxbC0wLjA3LDAuMGwtMC4xLC0wLjYzbDAuMTEsLTAuODVsLTAuMjEsLTAuOThsLTAuMTEsLTAuMTdsLTAuODYsLTAuNjZsLTAuNDUsLTEuMzRsLTAuMSwtMS4zNlpcIiwgXCJuYW1lXCI6IFwiTWFsaVwifSwgXCJNTlwiOiB7XCJwYXRoXCI6IFwiTTY0MS4wNiwxNTAuNTlsMi40MSwtMC41M2w0Ljc2LC0yLjhsMy42NywtMS40OWwyLjA2LDAuOTZsMC4xMiwwLjAzbDIuNSwwLjA1bDEuNTksMS40NWwwLjE5LDAuMDhsMi40NywwLjEybDMuNTksMC44MWwwLjI3LC0wLjA3bDIuNDMsLTIuMjhsMC4wNiwtMC4zNmwtMC45MywtMS43N2wyLjMzLC0zLjFsMi42NiwxLjNsMi4yNiwwLjM5bDIuNzUsMC44bDAuNDQsMi4zbDAuMTksMC4yMmwzLjU2LDEuMzhsMC4xOCwwLjAxbDIuMzUsLTAuNmwzLjEsLTAuNDJsMi40LDAuNDFsMi4zNywxLjUybDEuNDksMS42M2wwLjIzLDAuMWwyLjI5LC0wLjAzbDMuMTMsMC41MmwwLjE1LC0wLjAxbDIuMjgsLTAuNzlsMy4yNywtMC41M2wwLjExLC0wLjA0bDMuNTYsLTIuMjNsMS4zMSwwLjMxbDEuMjYsMS4wNWwwLjIyLDAuMDdsMi40NSwtMC4yMmwtMC45OCwxLjk2bC0xLjc3LDMuMjFsLTAuMDEsMC4yOGwwLjY0LDEuMzFsMC4zNSwwLjE2bDEuMzUsLTAuMzhsMi40LDAuNDhsMC4yMiwtMC4wNGwxLjc4LC0xLjA5bDEuODIsMC45MmwyLjExLDIuMDdsLTAuMTcsMC42OGwtMS43OSwtMC4zMWwtMy43NCwwLjQ1bC0xLjg1LDAuOTZsLTEuNzgsMi4wMWwtMy43NCwxLjE4bC0yLjQ2LDEuNjFsLTIuNDUsLTAuNmwtMS40MiwtMC4yOGwtMC4zMSwwLjEzbC0xLjMxLDEuOTlsMC4wLDAuMzNsMC43OCwxLjE1bDAuMywwLjc0bC0xLjU4LDAuOTNsLTEuNzUsMS41OWwtMi44MywxLjAzbC0zLjc3LDAuMTJsLTQuMDUsMS4wNWwtMi44MSwxLjU0bC0wLjk1LC0wLjhsLTAuMTksLTAuMDdsLTIuOTYsMC4wbC0zLjY0LC0xLjhsLTIuNTUsLTAuNDhsLTMuMzgsMC40MWwtNS4xMywtMC42N2wtMi42NiwwLjA2bC0xLjM1LC0xLjY1bC0xLjEyLC0yLjc4bC0wLjIxLC0wLjE4bC0xLjUsLTAuMzNsLTIuOTgsLTEuODlsLTAuMTIsLTAuMDRsLTMuMzcsLTAuNDNsLTIuODQsLTAuNTFsLTAuNzUsLTEuMTNsMC45MywtMy41NGwtMC4wNCwtMC4yNGwtMS43MywtMi41NWwtMC4xNSwtMC4xMmwtMy41MiwtMS4xOGwtMS45OSwtMS42MWwtMC41NCwtMS44NVpcIiwgXCJuYW1lXCI6IFwiTW9uZ29saWFcIn0sIFwiTUtcIjoge1wicGF0aFwiOiBcIk00NzIuNzMsMTczLjg3bDAuMDgsMC4wMWwwLjMyLC0wLjI1bDAuMDgsLTAuNDRsMS4yOSwtMC40MWwxLjM3LC0wLjI4bDEuMDMsLTAuMDRsMS4wNiwwLjgybDAuMTQsMS41OWwtMC4yMiwwLjA0bC0wLjE3LDAuMTFsLTAuMzIsMC40bC0xLjIsLTAuMDVsLTAuMTgsMC4wNWwtMC45LDAuNjFsLTEuNDUsMC4yM2wtMC44NSwtMC41OWwtMC4zLC0xLjA5bDAuMjIsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk1hY2Vkb25pYVwifSwgXCJNV1wiOiB7XCJwYXRoXCI6IFwiTTUwNy4xOCwzMTMuODRsLTAuNjcsMS44NWwtMC4wMSwwLjE2bDAuNywzLjMxbDAuMzEsMC4yNGwwLjc1LC0wLjAzbDAuNzgsMC43MWwwLjk5LDEuNzVsMC4yLDMuMDNsLTAuOTEsMC40NWwtMC4xNCwwLjE1bC0wLjU5LDEuMzhsLTEuMjQsLTEuMjFsLTAuMTcsLTEuNjJsMC40OSwtMS4xMmwwLjAyLC0wLjE2bC0wLjE1LC0xLjAzbC0wLjEzLC0wLjIxbC0wLjk5LC0wLjY1bC0wLjI2LC0wLjAzbC0wLjUzLDAuMThsLTEuMzEsLTEuMTJsLTEuMTUsLTAuNTlsMC42NiwtMi4wNmwwLjc1LC0wLjg0bDAuMDcsLTAuMjdsLTAuNDcsLTIuMDRsMC40OCwtMS45NGwwLjQsLTAuNjVsMC4wMywtMC4yNGwtMC42NCwtMi4xNWwtMC4wOCwtMC4xM2wtMC40NCwtMC40MmwxLjM0LDAuMjZsMS4yNSwxLjczbDAuNjcsMy4zWlwiLCBcIm5hbWVcIjogXCJNYWxhd2lcIn0sIFwiTVJcIjoge1wicGF0aFwiOiBcIk0zOTAuNTQsMjQ3LjY2bC0xLjQ4LC0xLjU4bC0xLjUxLC0xLjg4bC0wLjEyLC0wLjA5bC0xLjY0LC0wLjY3bC0xLjE3LC0wLjc0bC0wLjE3LC0wLjA1bC0xLjQsMC4wM2wtMC4xMiwwLjAzbC0xLjE0LDAuNTJsLTEuMTUsLTAuMjFsLTAuMjYsMC4wOGwtMC40NCwwLjQzbC0wLjExLC0wLjcybDAuNjgsLTEuMjlsMC4zMSwtMi40M2wtMC4yOCwtMi42M2wtMC4yOSwtMS4yN2wwLjI0LC0xLjI0bC0wLjAzLC0wLjJsLTAuNjUsLTEuMjRsLTEuMTksLTEuMDVsMC4zMiwtMC41MWw5LjY0LDAuMDJsMC4zLC0wLjM0bC0wLjQ2LC0zLjcxbDAuNTEsLTEuMTJsMi4xNywtMC4yMmwwLjI3LC0wLjNsLTAuMDgsLTYuNWw3LjkxLDAuMTNsMC4zMSwtMC4zbDAuMDEsLTMuNWw4LjE3LDUuNjNsLTIuODksMC4wNGwtMC4yOSwwLjMzbDIuNDIsMjIuNTZsMC4xMiwwLjIxbDAuMjYsMC4xOWwtMC40MywxLjM4bC05LjgzLDAuMDRsLTAuMjUsMC4xM2wtMC4yNywwLjQxbC0wLjc3LC0wLjE0bC0wLjE1LDAuMDFsLTEuMywwLjQ3bC0xLjY0LC0wLjY3bC0wLjE0LC0wLjAybC0wLjc5LDAuMDZsLTAuMjcsMC4yMmwtMC4zOSwxLjM5bC0wLjUzLDAuMjlaXCIsIFwibmFtZVwiOiBcIk1hdXJpdGFuaWFcIn0sIFwiVUdcIjoge1wicGF0aFwiOiBcIk01MDAuNzQsMjg3LjE3bC0yLjg0LC0wLjAybC0wLjkyLDAuMzJsLTEuMzcsMC43MWwtMC4yOSwtMC4xMmwwLjAyLC0xLjZsMC41NCwtMC44OWwwLjA0LC0wLjEzbDAuMTQsLTEuOTZsMC40OSwtMS4wOWwwLjkxLC0xLjI0bDAuOTcsLTAuNjhsMC44LC0wLjg5bC0wLjEzLC0wLjQ5bC0wLjc5LC0wLjI3bDAuMTMsLTIuNTVsMC43OCwtMC41MmwxLjQ1LDAuNTFsMC4xOCwwLjAxbDEuOTcsLTAuNTdsMS43MiwwLjAxbDAuMTgsLTAuMDZsMS4yOSwtMC45N2wwLjk4LDEuNDRsMC4yOSwxLjI0bDEuMDUsMi43NWwtMC44NCwxLjY4bC0xLjk0LDIuNjZsLTAuMDYsMC4xOGwwLjAyLDIuMzZsLTQuOCwwLjE4WlwiLCBcIm5hbWVcIjogXCJVZ2FuZGFcIn0sIFwiTVlcIjoge1wicGF0aFwiOiBcIk03MTcuNiwyNzMuNTJsLTEuNTEsMC43bC0yLjEzLC0wLjQxbC0yLjg4LC0wLjBsLTAuMjksMC4yMWwtMC44NCwyLjc3bC0wLjksMC44MmwtMC4wOCwwLjEybC0xLjIzLDMuMzRsLTEuODEsMC40N2wtMi4yOSwtMC42OGwtMC4xNCwtMC4wMWwtMS4yLDAuMjJsLTAuMTQsMC4wN2wtMS4zNiwxLjE4bC0xLjQ3LC0wLjE3bC0wLjEyLDAuMDFsLTEuNDYsMC40NmwtMS41MSwtMS4yNWwtMC4yNCwtMC45N2wxLjI2LDAuNTlsMC4yLDAuMDJsMS45MywtMC40N2wwLjIyLC0wLjIybDAuNDcsLTEuOThsMC45LC0wLjRsMi45NywtMC41NGwwLjE3LC0wLjA5bDEuOCwtMS45OGwxLjAyLC0xLjMybDAuOSwxLjAzbDAuNDgsLTAuMDRsMC40MywtMC43bDEuMDIsMC4wN2wwLjMyLC0wLjI3bDAuMjUsLTIuNzJsMS44NCwtMS42N2wxLjIzLC0xLjg5bDAuNzMsLTAuMDFsMS4xMiwxLjExbDAuMSwwLjk5bDAuMTgsMC4yNGwxLjY2LDAuNzFsMS44NSwwLjY3bC0wLjA5LDAuNTFsLTEuNDUsMC4xMWwtMC4yNiwwLjRsMC4zNSwwLjk3Wk02NzMuNzgsMjY5LjUzbDAuMTcsMS4xNGwwLjM1LDAuMjVsMS42NSwtMC4zbDAuMTgsLTAuMTFsMC42OCwtMC44NmwwLjMxLDAuMTNsMS40MSwxLjQ1bDAuOTksMS41OWwwLjEzLDEuNTdsLTAuMjYsMS4wOWwwLjAsMC4xNWwwLjI0LDAuODRsMC4xOCwxLjQ2bDAuMTEsMC4ybDAuODIsMC42NGwwLjkyLDIuMDhsLTAuMDMsMC41MmwtMS40LDAuMTNsLTIuMjksLTEuNzlsLTIuODYsLTEuOTJsLTAuMjcsLTEuMTZsLTAuMDcsLTAuMTNsLTEuMzksLTEuNjFsLTAuMzMsLTEuOTlsLTAuMDUsLTAuMTJsLTAuODQsLTEuMjdsMC4yNiwtMS43MmwtMC4wMywtMC4xOGwtMC40NSwtMC44N2wwLjEzLC0wLjEzbDEuNzEsMC45MlpcIiwgXCJuYW1lXCI6IFwiTWFsYXlzaWFcIn0sIFwiTVhcIjoge1wicGF0aFwiOiBcIk0xMzMuNDEsMjEzLjgzbDAuNjEsMC4wOWwwLjI3LC0wLjA5bDAuOTMsLTEuMDFsMC4wOCwtMC4xOGwwLjA5LC0xLjIybC0wLjA5LC0wLjIzbC0xLjkzLC0xLjk0bC0xLjQ2LC0wLjc3bC0yLjk2LC01LjYybC0wLjg2LC0yLjFsMi40NCwtMC4xOGwyLjY4LC0wLjI1bC0wLjAzLDAuMDhsMC4xNywwLjRsMy43OSwxLjM1bDUuODEsMS45N2w2Ljk2LC0wLjAybDAuMywtMC4zbDAuMCwtMC44NGwzLjkxLDAuMGwwLjg3LDAuOTNsMS4yNywwLjg3bDEuNDQsMS4xN2wwLjc5LDEuMzdsMC42MiwxLjQ5bDAuMTIsMC4xNGwxLjM1LDAuODVsMi4wOCwwLjgybDAuMzUsLTAuMWwxLjQ5LC0yLjA0bDEuODEsLTAuMDVsMS42MywxLjAxbDEuMjEsMS44bDAuODYsMS41OGwxLjQ3LDEuNTVsMC41MywxLjgybDAuNzMsMS4zMmwwLjE0LDAuMTNsMS45OCwwLjg0bDEuNzgsMC41OWwwLjYxLC0wLjAzbC0wLjc4LDEuODlsLTAuNDUsMS45NmwtMC4xOSwzLjU4bC0wLjI0LDEuMjdsMC4wMSwwLjE0bDAuNDMsMS40M2wwLjc4LDEuMzFsMC40OSwxLjk4bDAuMDYsMC4xMmwxLjYzLDEuOWwwLjYxLDEuNTFsMC45OCwxLjI4bDAuMTYsMC4xMWwyLjU4LDAuNjdsMC45OCwxLjAybDAuMzEsMC4wOGwyLjE3LC0wLjcxbDEuOTEsLTAuMjZsMS44NywtMC40N2wxLjY3LC0wLjQ5bDEuNTksLTEuMDZsMC4xMSwtMC4xNGwwLjYsLTEuNTJsMC4yMiwtMi4yMWwwLjM1LC0wLjYybDEuNTgsLTAuNjRsMi41OSwtMC41OWwyLjE4LDAuMDlsMS40MywtMC4ybDAuMzksMC4zNmwtMC4wNywxLjAybC0xLjI4LDEuNDhsLTAuNjUsMS42OGwwLjA3LDAuMzJsMC4zMywwLjMybC0wLjc5LDIuNDlsLTAuMjgsLTAuM2wtMC4yNCwtMC4wOWwtMS4wLDAuMDhsLTAuMjQsMC4xNWwtMC43NCwxLjI4bC0wLjE5LC0wLjEzbC0wLjI4LC0wLjAzbC0wLjMsMC4xMmwtMC4xOSwwLjI5bDAuMCwwLjA2bC00LjM0LC0wLjAybC0wLjMsMC4zbC0wLjAsMS4xNmwtMC44MywwLjBsLTAuMjgsMC4xOWwwLjA4LDAuMzNsMC45MywwLjg2bDAuOSwwLjU4bDAuMjQsMC40OGwwLjE2LDAuMTVsMC4yLDAuMDhsLTAuMDMsMC4zOGwtMi45NCwwLjAxbC0wLjI2LDAuMTVsLTEuMjEsMi4wOWwwLjAyLDAuMzNsMC4yNSwwLjMzbC0wLjIxLDAuNDRsLTAuMDQsMC4yMmwtMi40MiwtMi4zNWwtMS4zNiwtMC44N2wtMi4wNCwtMC42N2wtMC4xMywtMC4wMWwtMS40LDAuMTlsLTIuMDcsMC45OGwtMS4xNCwwLjIzbC0xLjcyLC0wLjY2bC0xLjg1LC0wLjQ4bC0yLjMxLC0xLjE2bC0xLjkyLC0wLjM4bC0yLjc5LC0xLjE4bC0yLjA0LC0xLjJsLTAuNiwtMC42NmwtMC4xOSwtMC4xbC0xLjM3LC0wLjE1bC0yLjQ1LC0wLjc4bC0xLjA3LC0xLjE4bC0yLjYzLC0xLjQ0bC0xLjIsLTEuNTZsLTAuNDQsLTAuOTNsMC41LC0wLjE1bDAuMiwtMC4zOWwtMC4yLC0wLjU4bDAuNDYsLTAuNTVsMC4wNywtMC4xOWwwLjAxLC0wLjkxbC0wLjA2LC0wLjE4bC0wLjgxLC0xLjEzbC0wLjI1LC0xLjA4bC0wLjg2LC0xLjM2bC0yLjIxLC0yLjYzbC0yLjUzLC0yLjA5bC0xLjIsLTEuNjNsLTAuMTEsLTAuMDlsLTIuMDgsLTEuMDZsLTAuMzQsLTAuNDhsMC4zNSwtMS41M2wtMC4xNiwtMC4zNGwtMS4yNCwtMC42MWwtMS4zOSwtMS4yM2wtMC42LC0xLjgxbC0wLjI0LC0wLjJsLTEuMjUsLTAuMmwtMS4zOCwtMS4zNWwtMS4xMSwtMS4yNWwtMC4xLC0wLjc2bC0wLjA1LC0wLjEzbC0xLjMzLC0yLjA0bC0wLjg1LC0yLjAybDAuMDQsLTAuOTlsLTAuMTQsLTAuMjdsLTEuODEsLTEuMWwtMC4yLC0wLjA0bC0wLjc0LDAuMTFsLTEuMzQsLTAuNzJsLTAuNDIsMC4xNmwtMC40LDEuMTJsLTAuMCwwLjE5bDAuNDEsMS4zbDAuMjQsMi4wNGwwLjA2LDAuMTVsMC44OCwxLjE2bDEuODQsMS44NmwwLjQsMC42MWwwLjEyLDAuMWwwLjI3LDAuMTRsMC4yOSwwLjgybDAuMzEsMC4ybDAuMiwtMC4wMmwwLjQzLDEuNTFsMC4wOSwwLjE0bDAuNzIsMC42NWwwLjUxLDAuOTFsMS41OCwxLjRsMC44LDIuNDJsMC43NywxLjIzbDAuNjYsMS4xOWwwLjEzLDEuMzRsMC4yOCwwLjI3bDEuMDgsMC4wOGwwLjkyLDEuMWwwLjgzLDEuMDhsLTAuMDMsMC4yNGwtMC44OCwwLjgxbC0wLjEzLC0wLjBsLTAuNTksLTEuNDJsLTAuMDcsLTAuMTFsLTEuNjcsLTEuNTNsLTEuODEsLTEuMjhsLTEuMTUsLTAuNjFsMC4wNywtMS44NWwtMC4zOCwtMS40NWwtMC4xMiwtMC4xN2wtMi45MSwtMi4wM2wtMC4zOSwwLjA0bC0wLjExLDAuMTFsLTAuNDIsLTAuNDZsLTAuMTEsLTAuMDhsLTEuNDksLTAuNjNsLTEuMDksLTEuMTZaXCIsIFwibmFtZVwiOiBcIk1leGljb1wifSwgXCJWVVwiOiB7XCJwYXRoXCI6IFwiTTgzOS45MiwzMjUuNjZsMC43OCwwLjczbC0wLjE4LDAuMDdsLTAuNiwtMC44Wk04MzkuMTMsMzIyLjc0bDAuMjcsMS4zNmwtMC4xMywtMC4wNmwtMC4yMSwtMC4wMmwtMC4yOSwwLjA4bC0wLjIyLC0wLjQzbC0wLjAzLC0xLjMybDAuNjEsMC40WlwiLCBcIm5hbWVcIjogXCJWYW51YXR1XCJ9LCBcIkZSXCI6IHtcInBhdGhcIjogXCJNNDQ0LjU4LDE3Mi42M2wtMC42OCwxLjkybC0wLjcyLC0wLjM4bC0wLjUxLC0xLjc5bDAuNDMsLTAuOTVsMS4xNSwtMC44M2wwLjMzLDIuMDRaTTQyOS43MSwxNDcuMDNsMS43NywxLjU3bDAuMjYsMC4wN2wxLjE2LC0wLjIzbDIuMTIsMS40NGwwLjU2LDAuMjhsMC4xNiwwLjAzbDAuNjEsLTAuMDZsMS4wOSwwLjc4bDAuMTMsMC4wNWwzLjE4LDAuNTNsLTEuMDksMS45NGwtMC4zLDIuMTZsLTAuNDgsMC4zOGwtMS4wLC0wLjI2bC0wLjM3LDAuMzJsMC4wNywwLjY2bC0xLjczLDEuNjhsLTAuMDksMC4yMWwtMC4wNCwxLjQybDAuNDEsMC4yOWwwLjk2LC0wLjRsMC42NywxLjA3bC0wLjA5LDAuNzhsMC4wNCwwLjE5bDAuNjEsMC45N2wtMC43MSwwLjc4bC0wLjA3LDAuMjhsMC42NSwyLjM5bDAuMjEsMC4yMWwxLjA5LDAuMzFsLTAuMiwwLjk1bC0yLjA4LDEuNThsLTQuODEsLTAuOGwtMC4xMywwLjAxbC0zLjY1LDAuOTlsLTAuMjIsMC4yNGwtMC4yNSwxLjZsLTIuNTksMC4zNWwtMi43NCwtMS4zM2wtMC4zMSwwLjAzbC0wLjc5LDAuNTdsLTQuMzgsLTEuMzFsLTAuNzksLTAuOTRsMS4xNiwtMS42NGwwLjA1LC0wLjE1bDAuNDgsLTYuMTdsLTAuMDYsLTAuMjFsLTIuNTgsLTMuM2wtMS44OSwtMS42NWwtMC4xMSwtMC4wNmwtMy42NCwtMS4xN2wtMC4yLC0xLjg4bDIuOTIsLTAuNjNsNC4xNCwwLjgybDAuMzUsLTAuMzZsLTAuNjUsLTMuMGwxLjc3LDEuMDVsMC4yNywwLjAybDUuODMsLTIuNTRsMC4xNywtMC4xOWwwLjcxLC0yLjU0bDEuNzUsLTAuNTNsMC4yNywwLjg4bDAuMjcsMC4yMWwxLjA0LDAuMDVsMS4wOCwxLjIzWk0yODkuMSwyNzguNDVsLTAuODUsMC44NGwtMC44OCwwLjEzbC0wLjI1LC0wLjUxbC0wLjIxLC0wLjE2bC0wLjU2LC0wLjFsLTAuMjUsMC4wN2wtMC42MywwLjU1bC0wLjYyLC0wLjI5bDAuNSwtMC44OGwwLjIxLC0xLjExbDAuNDIsLTEuMDVsLTAuMDMsLTAuMjhsLTAuOTMsLTEuNDJsLTAuMTgsLTEuNTRsMS4xMywtMS44N2wyLjQyLDAuNzhsMi41NSwyLjA0bDAuMzMsMC44MWwtMS40LDIuMTZsLTAuNzcsMS44NFpcIiwgXCJuYW1lXCI6IFwiRnJhbmNlXCJ9LCBcIkZJXCI6IHtcInBhdGhcIjogXCJNNDkyLjI2LDc2LjQybC0wLjM4LDMuMTJsMC4xMiwwLjI4bDMuNiwyLjY5bC0yLjE0LDIuOTZsLTAuMDEsMC4zM2wyLjgzLDQuNjFsLTEuNjEsMy4zNmwwLjAzLDAuMzFsMi4xNSwyLjg3bC0wLjk2LDIuNDRsMC4xLDAuMzVsMy41MSwyLjU1bC0wLjgxLDEuNzJsLTIuMjgsMi4xOWwtNS4yOCw0Ljc5bC00LjUxLDAuMzFsLTQuMzksMS4zN2wtMy44NywwLjc1bC0xLjM0LC0xLjg5bC0wLjExLC0wLjA5bC0yLjIzLC0xLjE0bDAuNTMsLTMuNTRsLTAuMDEsLTAuMTRsLTEuMTcsLTMuMzdsMS4xMiwtMi4xM2wyLjIzLC0yLjQ0bDUuNjksLTQuMzNsMS42NSwtMC44NGwwLjE2LC0wLjMxbC0wLjI2LC0xLjczbC0wLjE1LC0wLjIybC0zLjQsLTEuOTFsLTAuNzcsLTEuNDdsLTAuMDcsLTYuNDVsLTAuMTIsLTAuMjRsLTMuOTEsLTIuOTRsLTMuMCwtMS45MmwwLjk3LC0wLjc2bDIuNiwyLjE3bDAuMjEsMC4wN2wzLjIsLTAuMjFsMi42MywxLjAzbDAuMywtMC4wNWwyLjM5LC0xLjk0bDAuMDksLTAuMTNsMS4xOCwtMy4xMmwzLjYzLC0xLjQybDIuODcsMS41OWwtMC45OCwyLjg3WlwiLCBcIm5hbWVcIjogXCJGaW5sYW5kXCJ9LCBcIkZKXCI6IHtcInBhdGhcIjogXCJNODY5Ljk4LDMyNy4wN2wtMS4zMSwwLjQ0bC0wLjE0LC0wLjQxbDAuOTYsLTAuNDFsMC44NSwtMC4xN2wxLjQzLC0wLjc4bC0wLjE2LDAuNjVsLTEuNjQsMC42N1pNODY3LjU4LDMyOS4xMmwwLjU0LDAuNDdsLTAuMzEsMS4wbC0xLjMyLDAuM2wtMS4xMywtMC4yNmwtMC4xNywtMC43OGwwLjcyLC0wLjY2bDAuOTgsMC4yN2wwLjI1LC0wLjA0bDAuNDMsLTAuMjlaXCIsIFwibmFtZVwiOiBcIkZpamlcIn0sIFwiRktcIjoge1wicGF0aFwiOiBcIk0yNjguMTUsNDI3Ljg5bDIuNiwtMS43M2wxLjk4LDAuNzdsMC4zMSwtMC4wNWwxLjMyLC0xLjE3bDEuNTgsMS4xOGwtMC41NCwwLjg0bC0zLjEsMC45MmwtMS4wLC0xLjA0bC0wLjM5LC0wLjA0bC0xLjksMS4zNWwtMC44NiwtMS4wNFpcIiwgXCJuYW1lXCI6IFwiRmFsa2xhbmQgSXNsYW5kc1wifSwgXCJOSVwiOiB7XCJwYXRoXCI6IFwiTTIwMi4xLDI1Mi42bDAuMjMsLTAuMGwwLjEyLC0wLjExbDAuNjgsLTAuMDlsMC4yMiwtMC4xNWwwLjIzLC0wLjQzbDAuMiwtMC4wMWwwLjI4LC0wLjMxbC0wLjA0LC0wLjk3bDAuMjksLTAuMDNsMC41LDAuMDJsMC4yNSwtMC4xMWwwLjM3LC0wLjQ2bDAuNTEsMC4zNWwwLjQsLTAuMDZsMC4yMywtMC4yOGwwLjQ1LC0wLjI5bDAuODcsLTAuN2wwLjExLC0wLjIxbDAuMDIsLTAuMjZsMC4yMywtMC4xMmwwLjI1LC0wLjQ4bDAuMjksMC4yN2wwLjE0LDAuMDdsMC41LDAuMTJsMC4yMiwtMC4wM2wwLjQ4LC0wLjI4bDAuNjYsLTAuMDJsMC44NywtMC4zM2wwLjM2LC0wLjMybDAuMjEsMC4wMWwtMC4xMSwwLjQ4bDAuMCwwLjE0bDAuMjIsMC44bC0wLjU0LDAuODVsLTAuMjcsMS4wM2wtMC4wOSwxLjE4bDAuMTQsMC43MmwwLjA1LDAuOTVsLTAuMjQsMC4xNWwtMC4xMywwLjE5bC0wLjIzLDEuMDlsMC4wLDAuMTRsMC4xNCwwLjUzbC0wLjQyLDAuNTNsLTAuMDYsMC4yNGwwLjEyLDAuNjlsMC4wOCwwLjE1bDAuMTgsMC4xOWwtMC4yNiwwLjIzbC0wLjQ5LC0wLjExbC0wLjM1LC0wLjQ0bC0wLjE2LC0wLjFsLTAuNzksLTAuMjFsLTAuMjMsMC4wM2wtMC40NSwwLjI2bC0xLjUxLC0wLjYybC0wLjMxLDAuMDVsLTAuMTcsMC4xNWwtMS44MSwtMS42MmwtMC42LC0wLjlsLTEuMDQsLTAuNzlsLTAuNzcsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk5pY2FyYWd1YVwifSwgXCJOTFwiOiB7XCJwYXRoXCI6IFwiTTQzNi4yMiwxMzYuNjVsMS44MiwwLjA4bDAuMzYsMC44OWwtMC42LDIuOTZsLTAuNTMsMS4wNmwtMS4zMiwwLjBsLTAuMywwLjM0bDAuMzUsMi44OWwtMC44MywtMC40N2wtMS41NiwtMS40M2wtMC4yOSwtMC4wN2wtMi4yNiwwLjY3bC0xLjAyLC0wLjE1bDAuNjgsLTAuNDhsMC4xLC0wLjEybDIuMTQsLTQuODRsMy4yNSwtMS4zNVpcIiwgXCJuYW1lXCI6IFwiTmV0aGVybGFuZHNcIn0sIFwiTk9cIjoge1wicGF0aFwiOiBcIk00OTEuNDUsNjcuMzFsNy4wNiwzLjBsLTIuNTIsMC45NGwtMC4xMSwwLjQ5bDIuNDMsMi40OWwtMy44MiwxLjU5bC0xLjQ4LDAuM2wwLjg5LC0yLjYxbC0wLjE0LC0wLjM2bC0zLjIxLC0xLjc4bC0wLjI1LC0wLjAybC0zLjg5LDEuNTJsLTAuMTcsMC4xN2wtMS4yLDMuMTdsLTIuMTksMS43OGwtMi41MywtMC45OWwtMC4xMywtMC4wMmwtMy4xNSwwLjIxbC0yLjY5LC0yLjI1bC0wLjM4LC0wLjAxbC0xLjQzLDEuMTFsLTEuNDcsMC4xN2wtMC4yNiwwLjI2bC0wLjMzLDIuNTdsLTQuNDIsLTAuNjVsLTAuMzMsMC4yMmwtMC42LDIuMTlsLTIuMTcsLTAuMDFsLTAuMjcsMC4xNmwtNC4xNSw3LjY4bC0zLjg4LDUuNzZsLTAuMCwwLjMzbDAuODEsMS4yM2wtMC43LDEuMjdsLTIuMywtMC4wNmwtMC4yOCwwLjE4bC0xLjYzLDMuNzJsLTAuMDIsMC4xM2wwLjE1LDUuMTdsMC4wNywwLjE4bDEuNTEsMS44NGwtMC43OSw0LjI0bC0yLjA0LDIuNWwtMC45MiwxLjc1bC0xLjM5LC0xLjg4bC0wLjQ0LC0wLjA1bC00Ljg5LDQuMjFsLTMuMTYsMC44MWwtMy4yNCwtMS43NGwtMC44NiwtMy44MmwtMC43OCwtOC42bDIuMTgsLTIuMzZsNi41NiwtMy4yOGw1LjAsLTQuMTZsNC42MywtNS43NGw1Ljk5LC04LjA5bDQuMTcsLTMuMjNsNi44NCwtNS40OWw1LjM5LC0xLjkybDQuMDYsMC4yNGwwLjIzLC0wLjA5bDMuNzIsLTMuNjdsNC41MSwwLjE5bDQuNCwtMC44OVpNNDg0LjU4LDE5Ljk1bDQuNDIsMS44MmwtMy4yNSwyLjY4bC03LjE0LDAuNjVsLTcuMTYsLTAuOTFsLTAuMzksLTEuMzdsLTAuMjgsLTAuMjJsLTMuNDgsLTAuMWwtMi4yNSwtMi4xNWw3LjA5LC0xLjQ4bDMuNTUsMS4zNmwwLjI4LC0wLjAzbDIuNDIsLTEuNjZsNi4xOCwxLjQxWk00ODEuOTksMzMuOTJsLTQuNzMsMS44NWwtMy43NiwtMS4wNmwxLjI3LC0xLjAybDAuMDQsLTAuNDNsLTEuMTgsLTEuMzVsNC40NiwtMC45NGwwLjg5LDEuODNsMC4xNywwLjE1bDIuODMsMC45NlpNNDY2LjUsMjMuOTVsNy42NCwzLjg3bC01LjYzLDEuOTRsLTAuMTksMC4xOWwtMS4zNSwzLjg4bC0yLjA4LDAuOTZsLTAuMTYsMC4xOWwtMS4xNCw0LjE4bC0yLjcxLDAuMThsLTQuOTQsLTIuOTVsMS45NSwtMS42M2wtMC4wOCwtMC41MWwtMy43LC0xLjU0bC00Ljc5LC00LjU0bC0xLjc4LC00LjAxbDYuMjksLTEuODhsMS4yNSwxLjgxbDAuMjUsMC4xM2wzLjU3LC0wLjA4bDAuMjYsLTAuMTdsMC44NywtMS43OWwzLjQxLC0wLjE4bDMuMDgsMS45NFpcIiwgXCJuYW1lXCI6IFwiTm9yd2F5XCJ9LCBcIk5BXCI6IHtcInBhdGhcIjogXCJNNDYxLjg4LDM1Ny45OGwtMS42MSwtMS43N2wtMC45NCwtMS45bC0wLjU0LC0yLjU4bC0wLjYyLC0xLjk1bC0wLjgzLC00LjA1bC0wLjA2LC0zLjEzbC0wLjMzLC0xLjVsLTAuMDcsLTAuMTRsLTAuOTUsLTEuMDZsLTEuMjcsLTIuMTJsLTEuMywtMy4xbC0wLjU5LC0xLjcxbC0xLjk4LC0yLjQ2bC0wLjEzLC0xLjY3bDAuOTksLTAuNGwxLjQ0LC0wLjQybDEuNDgsMC4wN2wxLjQyLDEuMTFsMC4zMSwwLjAzbDAuMzIsLTAuMTVsOS45OSwtMC4xMWwxLjY2LDEuMThsMC4xNiwwLjA2bDYuMDYsMC4zN2w0LjY5LC0xLjA2bDIuMDEsLTAuNTdsMS41LDAuMTRsMC42MywwLjM3bC0xLjAsMC40MWwtMC43LDAuMDFsLTAuMTYsMC4wNWwtMS4zOCwwLjg4bC0wLjc5LC0wLjg4bC0wLjI5LC0wLjA5bC0zLjgzLDAuOWwtMS44NCwwLjA4bC0wLjI5LDAuM2wtMC4wNyw4Ljk5bC0yLjE4LDAuMDhsLTAuMjksMC4zbC0wLjAsMTcuNDdsLTIuMDQsMS4yN2wtMS4yMSwwLjE4bC0xLjUxLC0wLjQ5bC0wLjk5LC0wLjE4bC0wLjM2LC0xLjBsLTAuMSwtMC4xNGwtMC45OSwtMC43NGwtMC40LDAuMDRsLTAuOTgsMS4wOVpcIiwgXCJuYW1lXCI6IFwiTmFtaWJpYVwifSwgXCJOQ1wiOiB7XCJwYXRoXCI6IFwiTTgzNS44NywzMzguNjhsMi4wNiwxLjYzbDEuMDEsMC45NGwtMC40OSwwLjMybC0xLjIxLC0wLjYybC0xLjc2LC0xLjE2bC0xLjU4LC0xLjM2bC0xLjYxLC0xLjc5bC0wLjE2LC0wLjQxbDAuNTQsMC4wMmwxLjMyLDAuODNsMS4wOCwwLjg3bDAuNzksMC43M1pcIiwgXCJuYW1lXCI6IFwiTmV3IENhbGVkb25pYVwifSwgXCJORVwiOiB7XCJwYXRoXCI6IFwiTTQyNi42NywyNTQuMTdsMC4wMywtMS4wNGwtMC4yNCwtMC4zbC0yLjY2LC0wLjUzbC0wLjA2LC0xLjBsLTAuMDcsLTAuMTdsLTEuMzcsLTEuNjJsLTAuMywtMS4wNGwwLjE1LC0wLjk0bDEuMzcsLTAuMDlsMC4xOSwtMC4wOWwwLjg1LC0wLjgzbDMuMzQsLTAuMjJsMi4yMiwtMC40MWwwLjI0LC0wLjI2bDAuMiwtMS41bDEuMzIsLTEuNjVsMC4wNywtMC4xOWwtMC4wMSwtNS43NGwzLjQsLTEuMTNsNy4yNCwtNS4xMmw4LjQ2LC00Ljk1bDMuNzYsMS4wOGwxLjM1LDEuMzlsMC4zNiwwLjA1bDEuMzksLTAuNzdsMC41NSwzLjY2bDAuMTIsMC4ybDAuODIsMC42bDAuMDMsMC42OWwwLjEsMC4yMWwwLjg3LDAuNzRsLTAuNDcsMC45OWwtMC45Niw1LjI2bC0wLjEzLDMuMjVsLTMuMDgsMi4zNGwtMC4xLDAuMTVsLTEuMDgsMy4zN2wwLjA4LDAuMzFsMC45NCwwLjg2bC0wLjAxLDEuNTFsMC4yOSwwLjNsMS4yNSwwLjA1bC0wLjE0LDAuNjZsLTAuNTEsMC4xMWwtMC4yNCwwLjI2bC0wLjA2LDAuNTdsLTAuMDQsMC4wbC0xLjU5LC0yLjYybC0wLjIxLC0wLjE0bC0wLjU5LC0wLjFsLTAuMjMsMC4wNWwtMS44MywxLjMzbC0xLjc5LC0wLjY4bC0xLjQyLC0wLjE3bC0wLjE3LDAuMDNsLTAuNjUsMC4zMmwtMS4zOSwtMC4wN2wtMC4xOSwwLjA2bC0xLjQsMS4wM2wtMS4xMiwwLjA1bC0yLjk3LC0xLjI5bC0wLjI2LDAuMDFsLTEuMTIsMC41OWwtMS4wOCwtMC4wNGwtMC44NSwtMC44OGwtMC4xMSwtMC4wN2wtMi41MSwtMC45NWwtMC4xNCwtMC4wMmwtMi42OSwwLjNsLTAuMTYsMC4wN2wtMC42NSwwLjU1bC0wLjEsMC4xNmwtMC4zNCwxLjQxbC0wLjY5LDAuOThsLTAuMDUsMC4xNWwtMC4xMywxLjcybC0xLjQ3LC0xLjEzbC0wLjE4LC0wLjA2bC0wLjksMC4wMWwtMC4yLDAuMDhsLTAuMzIsMC4yOFpcIiwgXCJuYW1lXCI6IFwiTmlnZXJcIn0sIFwiTkdcIjoge1wicGF0aFwiOiBcIk00NDIuMCwyNzIuN2wtMi40LDAuODNsLTAuODgsLTAuMTJsLTAuMTksMC4wNGwtMC44OSwwLjUybC0xLjc4LC0wLjA1bC0xLjIzLC0xLjQ0bC0wLjg4LC0xLjg3bC0xLjc3LC0xLjY2bC0wLjIxLC0wLjA4bC0zLjc4LDAuMDNsMC4xMywtMy43NWwtMC4wNiwtMS41OGwwLjQ0LC0xLjQ3bDAuNzQsLTAuNzVsMS4yMSwtMS41NmwwLjA0LC0wLjI5bC0wLjIyLC0wLjU2bDAuNDQsLTAuOWwwLjAxLC0wLjI0bC0wLjU0LC0xLjQ0bDAuMjYsLTIuOTdsMC43MiwtMS4wNmwwLjMzLC0xLjM3bDAuNTEsLTAuNDNsMi41MywtMC4yOGwyLjM4LDAuOWwwLjg5LDAuOTFsMC4yLDAuMDlsMS4yOCwwLjA0bDAuMTUsLTAuMDNsMS4wNiwtMC41NmwyLjksMS4yNmwwLjEzLDAuMDJsMS4yOCwtMC4wNmwwLjE2LC0wLjA2bDEuMzksLTEuMDJsMS4zNiwwLjA3bDAuMTUsLTAuMDNsMC42NCwtMC4zMmwxLjIyLDAuMTNsMS45LDAuNzNsMC4yOCwtMC4wNGwxLjg2LC0xLjM1bDAuMzMsMC4wNmwxLjYyLDIuNjdsMC4yOSwwLjE0bDAuMzIsLTAuMDRsMC43MywwLjc0bC0wLjE5LDAuMzdsLTAuMTIsMC43NGwtMi4wMywxLjg5bC0wLjA3LDAuMTFsLTAuNjYsMS42MmwtMC4zNSwxLjI4bC0wLjQ4LDAuNTFsLTAuMDcsMC4xMmwtMC40OCwxLjY3bC0xLjI2LDAuOThsLTAuMSwwLjE1bC0wLjM4LDEuMjRsLTAuNTgsMS4wN2wtMC4yLDAuOTFsLTEuNDMsMC43bC0xLjI2LC0wLjkzbC0wLjE5LC0wLjA2bC0wLjk1LDAuMDRsLTAuMiwwLjA5bC0xLjQxLDEuMzlsLTAuNjEsMC4wMmwtMC4yNiwwLjE3bC0xLjE5LDIuNDJsLTAuNjEsMS42N1pcIiwgXCJuYW1lXCI6IFwiTmlnZXJpYVwifSwgXCJOWlwiOiB7XCJwYXRoXCI6IFwiTTg1Ny45LDM3OS42MmwxLjg1LDMuMWwwLjMzLDAuMTRsMC4yMiwtMC4yOGwwLjA0LC0xLjQxbDAuNTcsMC40bDAuMzUsMi4wNmwwLjE3LDAuMjJsMi4wMiwwLjk0bDEuNzgsMC4yNmwwLjIyLC0wLjA2bDEuMzEsLTEuMDFsMC44NCwwLjIybC0wLjUzLDIuMjdsLTAuNjcsMS41bC0xLjcxLC0wLjA1bC0wLjI1LDAuMTJsLTAuNjcsMC44OWwtMC4wNSwwLjIzbDAuMjEsMS4xNWwtMC4zMSwwLjQ2bC0yLjE1LDMuNTdsLTEuNiwwLjk5bC0wLjI4LC0wLjUxbC0wLjE1LC0wLjEzbC0wLjcyLC0wLjNsMS4yNywtMi4xNWwwLjAxLC0wLjI5bC0wLjgyLC0xLjYzbC0wLjE1LC0wLjE0bC0yLjUsLTEuMDlsMC4wNSwtMC42OWwxLjY3LC0wLjk0bDAuMTUsLTAuMjFsMC40MiwtMi4yNGwtMC4xMSwtMS45NWwtMC4wMywtMC4xMmwtMC45NywtMS44NWwwLjA1LC0wLjQxbC0wLjA5LC0wLjI1bC0xLjE4LC0xLjE3bC0xLjk0LC0yLjQ5bC0wLjg2LC0xLjY0bDAuMzgsLTAuMDlsMS4yNCwxLjQzbDAuMTIsMC4wOGwxLjgxLDAuNjhsMC42NywyLjM5Wk04NTMuOTMsMzkzLjU1bDAuNTcsMS4yNGwwLjQ0LDAuMTJsMS41MSwtMS4wM2wwLjUyLDAuOTFsMC4wLDEuMDlsLTAuODgsMS4zMWwtMS42MiwyLjJsLTEuMjYsMS4ybC0wLjA1LDAuMzhsMC42NCwxLjAybC0xLjQsMC4wM2wtMC4xNCwwLjA0bC0yLjE0LDEuMTZsLTAuMTQsMC4xN2wtMC42NywyLjBsLTEuMzgsMy4wNmwtMy4wNywyLjE5bC0yLjEyLC0wLjA2bC0xLjU1LC0wLjk5bC0wLjE0LC0wLjA1bC0yLjUzLC0wLjJsLTAuMzEsLTAuODRsMS4yNSwtMi4xNWwzLjA3LC0yLjk3bDEuNjIsLTAuNTlsMS44MSwtMS4xN2wyLjE4LC0xLjYzbDEuNTUsLTEuNjVsMS4wOCwtMi4xOGwwLjksLTAuNzJsMC4xMSwtMC4xN2wwLjM1LC0xLjU2bDEuMzcsLTEuMDdsMC40LDAuOTFaXCIsIFwibmFtZVwiOiBcIk5ldyBaZWFsYW5kXCJ9LCBcIk5QXCI6IHtcInBhdGhcIjogXCJNNjQxLjI2LDIxMy41M2wtMC4xNCwwLjk1bDAuMzIsMS42NGwtMC4yMSwwLjc4bC0xLjgzLDAuMDRsLTIuOTgsLTAuNjJsLTEuODYsLTAuMjVsLTEuMzcsLTEuM2wtMC4xOCwtMC4wOGwtMy4zOCwtMC4zNGwtMy4yMSwtMS40OWwtMi4zOCwtMS4zNGwtMi4xNiwtMC45MmwwLjg0LC0yLjJsMS41MSwtMS4xOGwwLjg5LC0wLjU3bDEuODMsMC43N2wyLjUsMS43NmwxLjM5LDAuNDFsMC43OCwxLjIxbDAuMTcsMC4xM2wxLjkxLDAuNTNsMi4wLDEuMTdsMi45MiwwLjY2bDIuNjMsMC4yNFpcIiwgXCJuYW1lXCI6IFwiTmVwYWxcIn0sIFwiQ0lcIjoge1wicGF0aFwiOiBcIk00MTMuNTMsMjcyLjA4bC0wLjgzLDAuMDJsLTEuNzksLTAuNDlsLTEuNjQsMC4wM2wtMy4wNCwwLjQ2bC0xLjczLDAuNzJsLTIuNCwwLjg5bC0wLjEyLC0wLjAybDAuMTYsLTEuN2wwLjE5LC0wLjI1bDAuMDYsLTAuMmwtMC4wOCwtMC45OWwtMC4wOSwtMC4xOWwtMS4wNiwtMS4wNWwtMC4xNSwtMC4wOGwtMC43MSwtMC4xNWwtMC41MSwtMC40OGwwLjQ1LC0wLjkybDAuMDIsLTAuMTlsLTAuMjQsLTEuMTZsMC4wNywtMC40M2wwLjE0LC0wLjBsMC4zLC0wLjI2bDAuMTUsLTEuMWwtMC4wMiwtMC4xNWwtMC4xMywtMC4zNGwwLjA5LC0wLjEzbDAuODMsLTAuMjdsMC4xOSwtMC4zN2wtMC42MiwtMi4wMmwtMC41NSwtMS4wbDAuMTQsLTAuNTlsMC4zNSwtMC4xNGwwLjI0LC0wLjE2bDAuNTMsMC4yOWwwLjE0LDAuMDRsMS45MywwLjAybDAuMjYsLTAuMTRsMC4zNiwtMC41OGwwLjM5LDAuMDFsMC40MywtMC4xN2wwLjI4LDAuNzlsMC40MywwLjE2bDAuNTYsLTAuMzFsMC44OSwtMC4zMmwwLjkyLDAuNDVsMC4zOSwwLjc1bDAuMTQsMC4xM2wxLjEzLDAuNTNsMC4zLC0wLjAzbDAuODEsLTAuNTlsMS4wMiwtMC4wOGwxLjQ5LDAuNTdsMC42MiwzLjMzbC0xLjAzLDIuMDlsLTAuNjUsMi44NGwwLjAyLDAuMmwxLjA1LDIuMDhsLTAuMDcsMC42NFpcIiwgXCJuYW1lXCI6IFwiSXZvcnkgQ29hc3RcIn0sIFwiQ0hcIjoge1wicGF0aFwiOiBcIk00NDQuNzEsMTU2LjI3bDAuMDUsMC4zbC0wLjM0LDAuNjlsMC4xMywwLjRsMS4xMywwLjU4bDEuMDcsMC4xbC0wLjEyLDAuODFsLTAuODcsMC40MmwtMS43NSwtMC4zN2wtMC4zNCwwLjE4bC0wLjQ3LDEuMWwtMC44NiwwLjA3bC0wLjMzLC0wLjM4bC0wLjQxLC0wLjA0bC0xLjM0LDEuMDFsLTEuMDIsMC4xM2wtMC45MywtMC41OGwtMC44MiwtMS4zMmwtMC4zNywtMC4xMmwtMC43NywwLjMybDAuMDIsLTAuODRsMS43NCwtMS42OWwwLjA5LC0wLjI1bC0wLjA0LC0wLjM4bDAuNzMsMC4xOWwwLjI2LC0wLjA2bDAuNiwtMC40OGwyLjAyLDAuMDJsMC4yNCwtMC4xMmwwLjM4LC0wLjUxbDIuMzEsMC44NFpcIiwgXCJuYW1lXCI6IFwiU3dpdHplcmxhbmRcIn0sIFwiQ09cIjoge1wicGF0aFwiOiBcIk0yMzIuMjQsMjg0Ljk1bC0wLjk0LC0wLjUybC0xLjIyLC0wLjgybC0wLjMxLC0wLjAxbC0wLjYyLDAuMzVsLTEuODgsLTAuMzFsLTAuNTQsLTAuOTVsLTAuMjksLTAuMTVsLTAuMzcsMC4wM2wtMi4zNCwtMS4zM2wtMC4xNSwtMC4zNWwwLjU3LC0wLjExbDAuMjQsLTAuMzJsLTAuMSwtMS4xNWwwLjQ2LC0wLjcxbDEuMTEsLTAuMTVsMC4yMSwtMC4xM2wxLjA1LC0xLjU3bDAuOTUsLTEuMzFsLTAuMDgsLTAuNDNsLTAuNzMsLTAuNDdsMC40LC0xLjI0bDAuMDEsLTAuMTZsLTAuNTMsLTIuMTVsMC40NCwtMC41NGwwLjA2LC0wLjI0bC0wLjQsLTIuMTNsLTAuMDYsLTAuMTNsLTAuOTMsLTEuMjJsMC4yMSwtMC44bDAuNTIsMC4xMmwwLjMyLC0wLjEzbDAuNDcsLTAuNzVsMC4wMywtMC4yN2wtMC41MiwtMS4zMmwwLjA5LC0wLjExbDEuMTQsMC4wN2wwLjIyLC0wLjA4bDEuODIsLTEuNzFsMC45NiwtMC4yNWwwLjIyLC0wLjI4bDAuMDIsLTAuODFsMC40MywtMi4wMWwxLjI4LC0xLjA0bDEuNDgsLTAuMDVsMC4yNywtMC4xOWwwLjEyLC0wLjMxbDEuNzMsMC4xOWwwLjIsLTAuMDVsMS45NiwtMS4yOGwwLjk3LC0wLjU2bDEuMTYsLTEuMTZsMC42NCwwLjExbDAuNDMsMC40NGwtMC4zMSwwLjU1bC0xLjQ5LDAuMzlsLTAuMTksMC4xNmwtMC42LDEuMmwtMC45NywwLjc0bC0wLjczLDAuOTRsLTAuMDYsMC4xM2wtMC4zLDEuNzZsLTAuNjgsMS40NGwwLjIzLDAuNDNsMS4xLDAuMTRsMC4yNywwLjk3bDAuMDgsMC4xM2wwLjQ5LDAuNDlsMC4xNywwLjg1bC0wLjI3LDAuODZsLTAuMDEsMC4xNGwwLjA5LDAuNTNsMC4yLDAuMjNsMC41MiwwLjE4bDAuNTQsMC43OWwwLjI3LDAuMTNsMy4xOCwtMC4yNGwxLjMxLDAuMjlsMS43LDIuMDhsMC4zMSwwLjFsMC45NiwtMC4yNmwxLjc1LDAuMTNsMS40MSwtMC4yN2wwLjU2LDAuMjdsLTAuMzYsMS4wN2wtMC41NCwwLjgxbC0wLjA1LDAuMTNsLTAuMiwxLjhsMC41MSwxLjc5bDAuMDcsMC4xMmwwLjY1LDAuNjhsMC4wNSwwLjMybC0xLjE2LDEuMTRsMC4wNSwwLjQ3bDAuODYsMC41MmwwLjYsMC43OWwwLjMxLDEuMDFsLTAuNywtMC44MWwtMC40NCwtMC4wMWwtMC43NCwwLjc3bC00Ljc1LC0wLjA1bC0wLjMsMC4zMWwwLjAzLDEuNTdsMC4yNSwwLjI5bDEuMiwwLjIxbC0wLjAyLDAuMjRsLTAuMSwtMC4wNWwtMC4yMiwtMC4wMmwtMS40MSwwLjQxbC0wLjIyLDAuMjlsLTAuMDEsMS44MmwwLjExLDAuMjNsMS4wNCwwLjg1bDAuMzUsMS4zbC0wLjA2LDEuMDJsLTEuMDIsNi4yNmwtMC44NCwtMC44OWwtMC4xOSwtMC4wOWwtMC4yNSwtMC4wMmwxLjM1LC0yLjEzbC0wLjEsLTAuNDJsLTEuOTIsLTEuMTdsLTAuMiwtMC4wNGwtMS40MSwwLjJsLTAuODIsLTAuMzlsLTAuMjYsMC4wbC0xLjI5LDAuNjJsLTEuNjMsLTAuMjdsLTEuNCwtMi41bC0wLjEyLC0wLjEybC0xLjEsLTAuNjFsLTAuODMsLTEuMmwtMS42NywtMS4xOWwtMC4yNywtMC4wNGwtMC41NCwwLjE5WlwiLCBcIm5hbWVcIjogXCJDb2xvbWJpYVwifSwgXCJDTlwiOiB7XCJwYXRoXCI6IFwiTTc0MC4zMiwxNDguOTRsMC4yMiwwLjIxbDQuMywxLjAzbDIuODQsMi4ybDAuOTksMi45MmwwLjI4LDAuMmwzLjgsMC4wbDAuMTUsLTAuMDRsMi4xMywtMS4yNGwzLjUsLTAuOGwtMS4wNSwyLjI5bC0wLjk1LDEuMTNsLTAuMDYsMC4xMmwtMC44NSwzLjQxbC0xLjU2LDIuODFsLTIuODMsLTAuNTFsLTAuMTksMC4wM2wtMi4xNSwxLjA5bC0wLjE1LDAuMzRsMC42NSwyLjU5bC0wLjMzLDMuM2wtMS4wMywwLjA3bC0wLjI4LDAuM2wwLjAxLDAuNzVsLTEuMDksLTEuMmwtMC40OCwwLjA1bC0wLjk0LDEuNmwtMy43NiwxLjI2bC0wLjIsMC4zNmwwLjI5LDEuMTlsLTEuNjcsLTAuMDhsLTEuMTEsLTAuODhsLTAuNDIsMC4wNWwtMS42OSwyLjA4bC0yLjcxLDEuNTdsLTIuMDQsMS44OGwtMy40MiwwLjg0bC0wLjExLDAuMDVsLTEuOCwxLjM0bC0xLjU0LDAuNDZsMC41MiwtMC41M2wwLjA2LC0wLjMzbC0wLjQ0LC0wLjk2bDEuODQsLTEuODRsMC4wMiwtMC40MWwtMS4zMiwtMS41NmwtMC4zNiwtMC4wOGwtMi4yMywxLjA4bC0yLjgzLDIuMDZsLTEuNTIsMS44NWwtMi4zMiwwLjEzbC0wLjIsMC4wOWwtMS4yOCwxLjM3bC0wLjAzLDAuMzdsMS4zMiwxLjk3bDAuMTgsMC4xM2wxLjgzLDAuNDNsMC4wNywxLjA4bDAuMTgsMC4yNmwxLjk4LDAuODRsMC4zLC0wLjAzbDIuNjYsLTEuOTZsMi4wNiwxLjA0bDAuMTIsMC4wM2wxLjQsMC4wN2wwLjI3LDEuMGwtMy4yNCwwLjczbC0wLjE3LDAuMTFsLTEuMTMsMS41bC0yLjM4LDEuNGwtMC4xLDAuMWwtMS4yOSwxLjk5bDAuMSwwLjQybDIuNiwxLjVsMC45NywyLjcybDEuNTIsMi41NmwxLjY2LDIuMDhsLTAuMDMsMS43NmwtMS40LDAuNjdsLTAuMTUsMC4zOGwwLjYsMS40N2wwLjEzLDAuMTVsMS4yOSwwLjc1bC0wLjM1LDIuMGwtMC41OCwxLjk2bC0xLjIyLDAuMjFsLTAuMiwwLjE0bC0xLjgzLDIuOTNsLTIuMDIsMy41MWwtMi4yOSwzLjEzbC0zLjQsMi40MmwtMy40MiwyLjE4bC0yLjc1LDAuM2wtMC4xNSwwLjA2bC0xLjMyLDEuMDFsLTAuNjgsLTAuNjdsLTAuNDEsLTAuMDFsLTEuMzcsMS4yN2wtMy40MiwxLjI4bC0yLjYyLDAuNGwtMC4yNCwwLjIxbC0wLjgsMi41N2wtMC45NSwwLjExbC0wLjUzLC0xLjU0bDAuNTIsLTAuODlsLTAuMTksLTAuNDRsLTMuMzYsLTAuODRsLTAuMTcsMC4wMWwtMS4wOSwwLjRsLTIuMzYsLTAuNjRsLTEuMCwtMC45bDAuMzUsLTEuMzRsLTAuMjMsLTAuMzdsLTIuMjIsLTAuNDdsLTEuMTUsLTAuOTRsLTAuMzYsLTAuMDJsLTIuMDgsMS4zN2wtMi4zNSwwLjI5bC0xLjk4LC0wLjAxbC0wLjEzLDAuMDNsLTEuMzIsMC42M2wtMS4yOCwwLjM4bC0wLjIxLDAuMzNsMC4zMywyLjY1bC0wLjc4LC0wLjA0bC0wLjE0LC0wLjM5bC0wLjA3LC0xLjA0bC0wLjQxLC0wLjI2bC0xLjcyLDAuNzFsLTAuOTYsLTAuNDNsLTEuNjMsLTAuODZsMC42NSwtMS45NWwtMC4xOSwtMC4zOGwtMS40MywtMC40NmwtMC41NiwtMi4yN2wtMC4zNCwtMC4yMmwtMi4yNiwwLjM4bDAuMjUsLTIuNjVsMi4yOSwtMi4xNWwwLjA5LC0wLjJsMC4xLC0yLjIxbC0wLjA3LC0yLjA5bC0wLjE1LC0wLjI1bC0xLjAyLC0wLjZsLTAuOCwtMS41MmwtMC4zMSwtMC4xNmwtMS40MiwwLjJsLTIuMTYsLTAuMzJsMC41NSwtMC43NGwwLjAxLC0wLjM1bC0xLjE3LC0xLjdsLTAuNDEsLTAuMDhsLTEuNjcsMS4wN2wtMS45NywtMC42M2wtMC4yNSwwLjAzbC0yLjg5LDEuNzNsLTIuMjYsMS45OWwtMS44MiwwLjNsLTEuMCwtMC42NmwtMC4xNSwtMC4wNWwtMS4yOCwtMC4wNmwtMS43NSwtMC42MWwtMC4yNCwwLjAybC0xLjM1LDAuNjlsLTAuMSwwLjA4bC0xLjIsMS40NWwtMC4xNCwtMS40MWwtMC40LC0wLjI1bC0xLjQ2LDAuNTVsLTIuODMsLTAuMjZsLTIuNzcsLTAuNjFsLTEuOTksLTEuMTdsLTEuOTEsLTAuNTRsLTAuNzgsLTEuMjFsLTAuMTcsLTAuMTNsLTEuMzYsLTAuMzhsLTIuNTQsLTEuNzlsLTIuMDEsLTAuODRsLTAuMjgsMC4wMmwtMC44OSwwLjU2bC0zLjMxLC0xLjgzbC0yLjM1LC0xLjY3bC0wLjU3LC0yLjQ5bDEuMzQsMC4yOGwwLjM2LC0wLjI4bDAuMDgsLTEuNDJsLTAuMDUsLTAuMTlsLTAuOTMsLTEuMzRsMC4yNCwtMi4xOGwtMC4wNywtMC4yMmwtMi42OSwtMy4zMmwtMC4xNSwtMC4xbC0zLjk3LC0xLjExbC0wLjY5LC0yLjA1bC0wLjExLC0wLjE1bC0xLjc5LC0xLjNsLTAuMzksLTAuNzNsLTAuMzYsLTEuNTdsMC4wOCwtMS4wOWwtMC4xOCwtMC4zbC0xLjUyLC0wLjY2bC0wLjIyLC0wLjAxbC0wLjUxLDAuMThsLTAuNTIsLTIuMjFsMC41OSwtMC41NWwwLjA2LC0wLjM1bC0wLjIyLC0wLjQ0bDIuMTIsLTEuMjRsMS42MywtMC41NWwyLjU4LDAuMzlsMC4zMSwtMC4xNmwwLjg3LC0xLjc1bDMuMDUsLTAuMzRsMC4yMSwtMC4xMmwwLjg0LC0xLjEybDMuODcsLTEuNTlsMC4xNSwtMC4xNGwwLjM1LC0wLjY4bDAuMDMsLTAuMTdsLTAuMTcsLTEuNTFsMS41MiwtMC43bDAuMTUsLTAuMzlsLTIuMTIsLTUuMGw0LjYyLC0xLjE1bDEuMzUsLTAuNzJsMC4xNCwtMC4xN2wxLjcyLC01LjM3bDQuNywwLjk5bDAuMjgsLTAuMDhsMS4zOSwtMS40M2wwLjA4LC0wLjJsMC4xMSwtMi45NWwxLjgzLC0wLjI2bDAuMTgsLTAuMWwxLjg1LC0yLjA4bDAuNjEsLTAuMTdsMC41NywxLjk3bDAuMSwwLjE1bDIuMiwxLjc1bDMuNDgsMS4xN2wxLjU5LDIuMzZsLTAuOTMsMy41M2wwLjA0LDAuMjRsMC45LDEuMzVsMC4yLDAuMTNsMi45OCwwLjUzbDMuMzIsMC40M2wyLjk3LDEuODlsMS40OSwwLjM1bDEuMDgsMi42N2wxLjUyLDEuODhsMC4yNCwwLjExbDIuNzQsLTAuMDdsNS4xNSwwLjY3bDMuMzYsLTAuNDFsMi4zOSwwLjQzbDMuNjcsMS44MWwwLjEzLDAuMDNsMi45MiwtMC4wbDEuMDIsMC44NmwwLjM0LDAuMDNsMi44OCwtMS41OWwzLjk4LC0xLjAzbDMuODEsLTAuMTNsMy4wMiwtMS4xMmwxLjc3LC0xLjYxbDEuNzMsLTEuMDFsMC4xMywtMC4zN2wtMC40MSwtMS4wMWwtMC43MiwtMS4wN2wxLjA5LC0xLjY2bDEuMjEsMC4yNGwyLjU3LDAuNjNsMC4yNCwtMC4wNGwyLjQ2LC0xLjYybDMuNzgsLTEuMTlsMC4xMywtMC4wOWwxLjgsLTIuMDNsMS42NiwtMC44NGwzLjU0LC0wLjQxbDEuOTMsMC4zNWwwLjM0LC0wLjIybDAuMjcsLTEuMTJsLTAuMDgsLTAuMjlsLTIuMjcsLTIuMjJsLTIuMDgsLTEuMDdsLTAuMjksMC4wMWwtMS44MiwxLjEybC0yLjM2LC0wLjQ3bC0wLjE0LDAuMDFsLTEuMTgsMC4zNGwtMC40NiwtMC45NGwxLjY5LC0zLjA4bDEuMSwtMi4yMWwyLjc1LDEuMTJsMC4yNiwtMC4wMmwzLjUzLC0yLjA2bDAuMTUsLTAuMjZsLTAuMDIsLTEuMzVsMi4xOCwtMy4zOWwxLjM1LC0xLjA0bDAuMTIsLTAuMjRsLTAuMDMsLTEuODVsLTAuMTUsLTAuMjVsLTEuMCwtMC41OGwxLjY4LC0xLjM3bDMuMDEsLTAuNTlsMy4yNSwtMC4wOWwzLjY3LDAuOTlsMi4wOCwxLjE4bDEuNTEsMy4zbDAuOTUsMS40NWwwLjg1LDEuOTlsMC45MiwzLjE5Wk02OTcuMCwyMzcuMzdsLTEuOTUsMS4xMmwtMS43NCwtMC42OGwtMC4wNiwtMS45bDEuMDgsLTEuMDNsMi42MiwtMC43bDEuMjMsMC4wNWwwLjM3LDAuNjVsLTEuMDEsMS4wOGwtMC41NCwxLjRaXCIsIFwibmFtZVwiOiBcIkNoaW5hXCJ9LCBcIkNNXCI6IHtcInBhdGhcIjogXCJNNDUzLjc2LDI3OC45MmwtMC4yNiwtMC4xMWwtMC4xOCwtMC4wMmwtMS40MiwwLjMxbC0xLjU2LC0wLjMzbC0xLjE3LDAuMTZsLTMuNywtMC4wNWwwLjMsLTEuNjNsLTAuMDQsLTAuMjFsLTAuOTgsLTEuNjZsLTAuMTUsLTAuMTNsLTEuMDMsLTAuMzhsLTAuNDYsLTEuMDFsLTAuMTMsLTAuMTRsLTAuNDgsLTAuMjdsMC4wMiwtMC40NmwwLjYyLC0xLjcybDEuMSwtMi4yNWwwLjU0LC0wLjAybDAuMiwtMC4wOWwxLjQxLC0xLjM5bDAuNzMsLTAuMDNsMS4zMiwwLjk3bDAuMzEsMC4wM2wxLjcyLC0wLjg1bDAuMTYsLTAuMmwwLjIyLC0xLjBsMC41NywtMS4wM2wwLjM2LC0xLjE4bDEuMjYsLTAuOThsMC4xLC0wLjE1bDAuNDksLTEuN2wwLjQ4LC0wLjUxbDAuMDcsLTAuMTNsMC4zNSwtMS4zbDAuNjMsLTEuNTRsMi4wNiwtMS45MmwwLjA5LC0wLjE3bDAuMTIsLTAuNzlsMC4yNCwtMC40MWwtMC4wNCwtMC4zNmwtMC44OSwtMC45MWwwLjA0LC0wLjQ1bDAuMjgsLTAuMDZsMC44NSwxLjM5bDAuMTYsMS41OWwtMC4wOSwxLjY2bDAuMDQsMC4xN2wxLjA5LDEuODRsLTAuODYsLTAuMDJsLTAuNzIsMC4xN2wtMS4wNywtMC4yNGwtMC4zNCwwLjE3bC0wLjU0LDEuMTlsMC4wNiwwLjM0bDEuNDgsMS40N2wxLjA2LDAuNDRsMC4zMiwwLjk0bDAuNzMsMS42bC0wLjMyLDAuNTdsLTEuMjMsMi40OWwtMC41NCwwLjQxbC0wLjEyLDAuMjFsLTAuMTksMS45NWwwLjI0LDEuMDhsLTAuMTgsMC42N2wwLjA3LDAuMjhsMS4xMywxLjI1bDAuMjQsMC45M2wwLjkyLDEuMjlsMS4xLDAuOGwwLjEsMS4wMWwwLjI2LDAuNzNsLTAuMTIsMC45M2wtMS42NSwtMC40OWwtMi4wMiwtMC42NmwtMy4xOSwtMC4xMVpcIiwgXCJuYW1lXCI6IFwiQ2FtZXJvb25cIn0sIFwiQ0xcIjoge1wicGF0aFwiOiBcIk0yNDYuOCw0MjkuMWwtMS4xNCwwLjc4bC0yLjI1LDEuMjFsLTAuMTYsMC4yM2wtMC4zNywyLjk0bC0wLjc1LDAuMDZsLTIuNzIsLTEuMDdsLTIuODMsLTIuMzRsLTMuMDYsLTEuOWwtMC43MSwtMS45MmwwLjY3LC0xLjg0bC0wLjAyLC0wLjI1bC0xLjIyLC0yLjEzbC0wLjMxLC01LjQxbDEuMDIsLTIuOTVsMi41OSwtMi40bC0wLjEzLC0wLjUxbC0zLjMyLC0wLjhsMi4wNiwtMi40bDAuMDcsLTAuMTVsMC43OSwtNC43N2wyLjQ0LDAuOTVsMC40LC0wLjIybDEuMzEsLTYuMzFsLTAuMTYsLTAuMzNsLTEuNjgsLTAuOGwtMC40MiwwLjIxbC0wLjcyLDMuNDdsLTEuMDEsLTAuMjdsMC43NCwtNC4wNmwwLjg1LC01LjQ2bDEuMTIsLTEuOTZsMC4wMywtMC4yMmwtMC43MSwtMi44MmwtMC4xOSwtMi45NGwwLjc2LC0wLjA3bDAuMjYsLTAuMmwxLjUzLC00LjYybDEuNzMsLTQuNTJsMS4wNywtNC4ybC0wLjU2LC00LjJsMC43MywtMi4ybDAuMDEsLTAuMTJsLTAuMjksLTMuM2wxLjQ2LC0zLjM0bDAuNDUsLTUuMTlsMC44LC01LjUybDAuNzgsLTUuODlsLTAuMTgsLTQuMzNsLTAuNDksLTMuNDdsMS4xLC0wLjU2bDAuMTMsLTAuMTNsMC40NCwtMC44OGwwLjksMS4yOWwwLjMyLDEuOGwwLjEsMC4xOGwxLjE2LDAuOTdsLTAuNzMsMi4zM2wwLjAxLDAuMjFsMS4zMywyLjkxbDAuOTcsMy42bDAuMzUsMC4yMmwxLjU3LC0wLjMxbDAuMTYsMC4zNGwtMC43OSwyLjUxbC0yLjYxLDEuMjVsLTAuMTcsMC4yOGwwLjA4LDQuMzZsLTAuNDgsMC43OWwwLjAxLDAuMzNsMC42LDAuODRsLTEuNjIsMS41NWwtMS42NywyLjZsLTAuODksMi40N2wtMC4wMiwwLjEzbDAuMjMsMi41NmwtMS41LDIuNzZsLTAuMDMsMC4yMWwxLjE1LDQuOGwwLjExLDAuMTdsMC41NCwwLjQybC0wLjAxLDIuMzdsLTEuNCwyLjdsLTAuMDMsMC4xNWwwLjA2LDIuMjVsLTEuOCwxLjc4bC0wLjA5LDAuMjFsMC4wMiwyLjczbDAuNzEsMi42M2wtMS4zMywwLjk0bC0wLjEyLDAuMTdsLTAuNjcsMi42NGwtMC41OSwzLjAzbDAuNCwzLjU1bC0wLjg0LDAuNTFsLTAuMTQsMC4zMWwwLjU4LDMuNWwwLjA4LDAuMTZsMC45NiwwLjk5bC0wLjcsMS4wOGwwLjExLDAuNDNsMS4wNCwwLjU1bDAuMTksMC44bC0wLjg5LDAuNDhsLTAuMTYsMC4zMWwwLjI2LDEuNzdsLTAuODksNC4wNmwtMS4zMSwyLjY3bC0wLjAzLDAuMTlsMC4yOCwxLjUzbC0wLjczLDEuODhsLTEuODUsMS4zN2wtMC4xMiwwLjI2bDAuMjIsMy40NmwwLjA2LDAuMTZsMC44OCwxLjE5bDAuMjgsMC4xMmwxLjMyLC0wLjE3bC0wLjA0LDIuMTNsMC4wNCwwLjE1bDEuMDQsMS45NWwwLjI0LDAuMTZsNS45NCwwLjQ0Wk0yNDguNzksNDMwLjcxbDAuMCw3LjQxbDAuMywwLjNsMi42NywwLjBsMS4wMSwwLjA2bC0wLjU0LDAuOTFsLTEuOTksMS4wMWwtMS4xMywtMC4xbC0xLjQyLC0wLjI3bC0xLjg3LC0xLjA2bC0yLjU3LC0wLjQ5bC0zLjA5LC0xLjlsLTIuNTIsLTEuODNsLTIuNjUsLTIuOTNsMC45MywwLjMybDMuNTQsMi4yOWwzLjMyLDEuMjNsMC4zNCwtMC4wOWwxLjI5LC0xLjU3bDAuODMsLTIuMzJsMi4xMSwtMS4yOGwxLjQzLDAuMzJaXCIsIFwibmFtZVwiOiBcIkNoaWxlXCJ9LCBcIkNBXCI6IHtcInBhdGhcIjogXCJNMjgwLjE0LDE0NS42NmwtMS42NiwyLjg4bDAuMDYsMC4zN2wwLjM3LDAuMDNsMS41LC0xLjAxbDEuMTcsMC40OWwtMC42NCwwLjgzbDAuMTMsMC40NmwyLjIyLDAuODlsMC4yOCwtMC4wM2wxLjAyLC0wLjdsMi4wOSwwLjgzbC0wLjY5LDIuMWwwLjM3LDAuMzhsMS40MywtMC40NWwwLjI3LDEuNDNsMC43NCwxLjg4bC0wLjk1LDIuNWwtMC44OCwwLjA5bC0xLjM0LC0wLjQ4bDAuNDksLTIuMzRsLTAuMTQsLTAuMzJsLTAuNywtMC40bC0wLjM2LDAuMDRsLTIuODEsMi42NmwtMC42MywtMC4wNWwxLjIsLTEuMDFsLTAuMSwtMC41MmwtMi40LC0wLjc3bC0yLjc5LDAuMThsLTQuNjUsLTAuMDlsLTAuMjIsLTAuNTRsMS4zNywtMC45OWwwLjAxLC0wLjQ4bC0wLjgyLC0wLjY1bDEuOTEsLTEuNzlsMi41NywtNS4xN2wxLjQ5LC0xLjgxbDIuMDQsLTEuMDdsMC42MywwLjA4bC0wLjI3LDAuNTFsLTEuMzMsMi4wN1pNMTkzLjkyLDc0Ljg1bC0wLjAxLDQuMjRsMC4xOSwwLjI4bDAuMzMsLTAuMDdsMy4xNCwtMy4yMmwyLjY1LDIuNWwtMC43MSwzLjA0bDAuMDYsMC4yNmwyLjQyLDIuODhsMC40NiwwLjBsMi42NiwtMy4xNGwxLjgzLC0zLjc0bDAuMDMsLTAuMTJsMC4xMywtNC41M2wzLjIzLDAuMzFsMy42MywwLjY0bDMuMTgsMi4wOGwwLjEzLDEuOTFsLTEuNzksMi4yMmwtMC4wLDAuMzdsMS42OSwyLjJsLTAuMjgsMS44bC00Ljc0LDIuODRsLTMuMzMsMC42MmwtMi41LC0xLjIxbC0wLjQxLDAuMTdsLTAuNzMsMi4wNWwtMi4zOSwzLjQ0bC0wLjc0LDEuNzhsLTIuNzgsMi42MWwtMy40OCwwLjI2bC0wLjE3LDAuMDdsLTEuOTgsMS42OGwtMC4xLDAuMjFsLTAuMTUsMi4zM2wtMi42OCwwLjQ1bC0wLjE3LDAuMDlsLTMuMSwzLjJsLTIuNzUsNC4zOGwtMC45OSwzLjA2bC0wLjE0LDQuMzFsMC4yNSwwLjMxbDMuNSwwLjU4bDEuMDcsMy4yNGwxLjE4LDIuNzZsMC4zNCwwLjE4bDMuNDMsLTAuNjlsNC41NSwxLjUybDIuNDUsMS4zMmwxLjc2LDEuNjVsMC4xMiwwLjA3bDMuMTEsMC45NmwyLjYzLDEuNDZsMC4xMywwLjA0bDQuMTIsMC4ybDIuNDEsMC4zbC0wLjM2LDIuODFsMC44LDMuNTFsMS44MSwzLjc4bDAuMDgsMC4xbDMuNzMsMy4xN2wwLjM0LDAuMDNsMS45MywtMS4wOGwwLjEzLC0wLjE1bDEuMzUsLTMuNDRsMC4wMSwtMC4xOGwtMS4zMSwtNS4zOGwtMC4wOCwtMC4xNGwtMS40NiwtMS41bDMuNjgsLTEuNTFsMi44NCwtMi40NmwxLjQ1LC0yLjU1bDAuMDQsLTAuMTdsLTAuMiwtMi4zOWwtMC4wNCwtMC4xMmwtMS43LC0zLjA3bC0yLjksLTIuNjRsMi43OSwtMy42NmwwLjA1LC0wLjI3bC0xLjA4LC0zLjM4bC0wLjgsLTUuNzVsMS40NSwtMC43NWw0LjE4LDEuMDNsMi42LDAuMzhsMC4xOCwtMC4wM2wxLjkzLC0wLjk1bDIuMTgsMS4yM2wzLjAxLDIuMThsMC43MywxLjQybDAuMjUsMC4xNmw0LjE4LDAuMjdsLTAuMDYsMi45NWwwLjgzLDQuN2wwLjIyLDAuMjRsMi4xOSwwLjU1bDEuNzUsMi4wOGwwLjM4LDAuMDdsMy42MywtMi4wM2wwLjExLC0wLjExbDIuMzgsLTQuMDZsMS4zNiwtMS40M2wxLjc2LDMuMDFsMy4yNiw0LjY4bDIuNjgsNC4xOWwtMC45NCwyLjA5bDAuMTIsMC4zOGwzLjMxLDEuOThsMi4yMywxLjk4bDAuMTMsMC4wN2wzLjk0LDAuODlsMS40OCwxLjAybDAuOTYsMi44MmwwLjIyLDAuMmwxLjg1LDAuNDNsMC44OCwxLjEzbDAuMTcsMy41M2wtMS42OCwxLjE2bC0xLjc2LDEuMTRsLTQuMDgsMS4xN2wtMC4xMSwwLjA2bC0zLjA4LDIuNjVsLTQuMTEsMC41MmwtNS4zNSwtMC42OWwtMy43NiwtMC4wMmwtMi42MiwwLjIzbC0wLjIsMC4xbC0yLjA1LDIuMjlsLTMuMTMsMS40MWwtMC4xMSwwLjA4bC0zLjYsNC4yNGwtMi44NywyLjkybC0wLjA1LDAuMzZsMC4zMywwLjE0bDIuMTMsLTAuNTJsMC4xNSwtMC4wOGwzLjk4LC00LjE1bDUuMTYsLTIuNjNsMy41OCwtMC4zMWwxLjgyLDEuM2wtMi4wOSwxLjkxbC0wLjA5LDAuMjlsMC44LDMuNDZsMC44MiwyLjM3bDAuMTUsMC4xN2wzLjI1LDEuNTZsMC4xNiwwLjAzbDQuMTQsLTAuNDVsMC4yMSwtMC4xMmwyLjAzLC0yLjg2bDAuMTEsMS40NmwwLjEzLDAuMjJsMS4yNiwwLjg4bC0yLjcsMS43OGwtNS41MSwxLjgzbC0yLjUyLDEuMjZsLTIuNzUsMi4xNmwtMS41MiwtMC4xOGwtMC4wOCwtMi4xNmw0LjE5LC0yLjQ3bDAuMTQsLTAuMzRsLTAuMywtMC4yMmwtNC4wMSwwLjFsLTIuNjYsMC4zNmwtMS40NSwtMS41NmwwLjAsLTQuMTZsLTAuMTEsLTAuMjNsLTEuMTEsLTAuOTFsLTAuMjgsLTAuMDVsLTEuNSwwLjQ4bC0wLjcsLTAuN2wtMC40NSwwLjAybC0xLjkxLDIuMzlsLTAuOCwyLjVsLTAuODIsMS4zMWwtMC45NSwwLjQzbC0wLjc3LDAuMTVsLTAuMjMsMC4ybC0wLjE4LDAuNTZsLTguMiwwLjAybC0wLjEzLDAuMDNsLTEuMTksMC42MWwtMi45NSwyLjQ1bC0wLjc4LDEuMTNsLTQuNiwwLjAxbC0wLjEyLDAuMDJsLTEuMTMsMC40OGwtMC4xMywwLjQ0bDAuMzcsMC41NWwwLjIsMC44MmwtMC4wMSwwLjA5bC0zLjEsMS40MmwtMi42MywwLjVsLTIuODQsMS41N2wtMC40NywwLjBsLTAuNzIsLTAuNGwtMC4xOCwtMC4yN2wwLjAzLC0wLjE1bDAuNTIsLTEuMGwxLjIsLTEuNzFsMC43MywtMS44bDAuMDIsLTAuMTdsLTEuMDMsLTUuNDdsLTAuMTUsLTAuMjFsLTIuMzUsLTEuMzJsMC4xNiwtMC4yOWwtMC4wNSwtMC4zNWwtMC4zNywtMC4zOGwtMC4yMiwtMC4wOWwtMC41NiwwLjBsLTAuMzUsLTAuMzRsLTAuMTEsLTAuNjVsLTAuNDYsLTAuMmwtMC4zOSwwLjI2bC0wLjIsLTAuMDNsLTAuMTEsLTAuMzNsLTAuNDgsLTAuMjVsLTAuMjEsLTAuNzFsLTAuMTUsLTAuMThsLTMuOTcsLTIuMDdsLTQuOCwtMi4zOWwtMC4yNSwtMC4wMWwtMi4xOSwwLjg5bC0wLjcyLDAuMDNsLTMuMDQsLTAuODJsLTAuMTQsLTAuMGwtMS45NCwwLjRsLTIuNCwtMC45OGwtMi41NiwtMC41MWwtMS43LC0wLjE5bC0wLjYyLC0wLjQ0bC0wLjQyLC0xLjY3bC0wLjMsLTAuMjNsLTAuODUsMC4wMmwtMC4yOSwwLjNsLTAuMDEsMC45NWwtNjkuMjYsLTAuMDFsLTQuNzcsLTMuMTRsLTEuNzgsLTEuNDFsLTQuNTEsLTEuMzhsLTEuMywtMi43M2wwLjM0LC0xLjk2bC0wLjE3LC0wLjMzbC0zLjA2LC0xLjM3bC0wLjQxLC0yLjU4bC0wLjExLC0wLjE4bC0yLjkyLC0yLjRsLTAuMDUsLTEuNTNsMS4zMiwtMS41OWwwLjA3LC0wLjJsLTAuMDcsLTIuMjFsLTAuMTYsLTAuMjZsLTQuMTksLTIuMjJsLTIuNTIsLTQuMDJsLTEuNTYsLTIuNmwtMC4wOCwtMC4wOWwtMi4yOCwtMS42NGwtMS42NSwtMS40OGwtMS4zMSwtMS44OWwtMC4zOCwtMC4xbC0yLjUxLDEuMjFsLTIuMjgsMS45MmwtMi4wMywtMi4yMmwtMS44NSwtMS43MWwtMi40NCwtMS4wNGwtMi4yOCwtMC4xMmwwLjAzLC0zNy43Mmw0LjI3LDAuOThsNC4wLDIuMTNsMi42MSwwLjRsMC4yNCwtMC4wN2wyLjE3LC0xLjgxbDIuOTIsLTEuMzNsMy42MywwLjUzbDAuMTgsLTAuMDNsMy43MiwtMS45NGwzLjg5LC0xLjA2bDEuNiwxLjcybDAuMzcsMC4wNmwxLjg3LC0xLjA0bDAuMTQsLTAuMTlsMC40OCwtMS44M2wxLjM3LDAuMzhsNC4xOCwzLjk2bDAuNDEsMC4wbDIuODksLTIuNjJsMC4yOCwyLjc5bDAuMzcsMC4yNmwzLjA4LC0wLjczbDAuMTcsLTAuMTJsMC44NSwtMS4xNmwyLjgxLDAuMjRsMy44MywxLjg2bDUuODYsMS42MWwzLjQ2LDAuNzVsMi40NCwtMC4yNmwyLjg5LDEuODlsLTMuMTIsMS44OWwtMC4xNCwwLjMxbDAuMjQsMC4yNGw0LjUzLDAuOTJsNi44NCwtMC41bDIuMDQsLTAuNzFsMi41NCwyLjQ0bDAuMzksMC4wMmwyLjcyLC0yLjE2bC0wLjAxLC0wLjQ4bC0yLjI2LC0xLjYxbDEuMjcsLTEuMTZsMi45NCwtMC4xOWwxLjk0LC0wLjQybDEuODksMC45N2wyLjQ5LDIuMzJsMC4yNCwwLjA4bDIuNzEsLTAuMzNsNC4zNSwxLjlsMC4xNywwLjAybDMuODYsLTAuNjdsMy42MiwwLjFsMC4zMSwtMC4zM2wtMC4yNiwtMi40NGwxLjksLTAuNjVsMy41OCwxLjM2bC0wLjAxLDMuODRsMC4yMywwLjI5bDAuMzQsLTAuMTdsMS41MSwtMy4yM2wxLjgxLDAuMWwwLjMxLC0wLjIybDEuMTMsLTQuMzdsLTAuMDgsLTAuMjlsLTIuNjgsLTIuNzNsLTIuODMsLTEuNzZsMC4xOSwtNC43M2wyLjc3LC0zLjE1bDMuMDYsMC42OWwyLjQ0LDEuOTdsMy4yNCw0Ljg4bC0yLjA1LDIuMDJsMC4xNSwwLjUxbDQuNDEsMC44NVpNMjY1Ljg1LDE1MC43bC0wLjg0LDAuMDRsLTMuMTUsLTAuOTlsLTEuNzcsLTEuMTdsMC4xOSwtMC4wNmwzLjE3LDAuNzlsMi4zOSwxLjI3bDAuMDEsMC4xMlpNMjQ5LjQxLDMuNzFsNi42OCwwLjQ5bDUuMzQsMC43OWw0LjM0LDEuNmwtMC4wOCwxLjI0bC01LjkxLDIuNTZsLTYuMDMsMS4yMWwtMi4zNiwxLjM4bC0wLjE0LDAuMzRsMC4yOSwwLjIybDQuMzcsLTAuMDJsLTQuOTYsMy4wMWwtNC4wNiwxLjY0bC0wLjExLDAuMDhsLTQuMjEsNC42MmwtNS4wNywwLjkybC0wLjEyLDAuMDVsLTEuNTMsMS4xbC03LjUsMC41OWwtMC4yOCwwLjI4bDAuMjQsMC4zMWwyLjY3LDAuNTRsLTEuMDQsMC42bC0wLjA5LDAuNDRsMS44OSwyLjQ5bC0yLjExLDEuNjZsLTMuODMsMS41MmwtMC4xNSwwLjEzbC0xLjE0LDIuMDFsLTMuNDEsMS41NWwtMC4xNiwwLjM2bDAuMzUsMS4xOWwwLjMsMC4yMmwzLjk4LC0wLjE5bDAuMDMsMC43OGwtNi40MiwyLjk5bC02LjQ0LC0xLjQxbC03LjQxLDAuNzlsLTMuNzIsLTAuNjJsLTQuNDgsLTAuMjZsLTAuMjUsLTIuMGw0LjM3LC0xLjEzbDAuMjEsLTAuMzhsLTEuMTQsLTMuNTVsMS4xMywtMC4yOGw2LjYxLDIuMjlsMC4zNSwtMC4xMmwtMC4wNCwtMC4zN2wtMy40MSwtMy40NWwtMC4xNCwtMC4wOGwtMy41NywtMC45MmwxLjYyLC0xLjdsNC4zNiwtMS4zbDAuMiwtMC4xOGwwLjcxLC0xLjk0bC0wLjEyLC0wLjM2bC0zLjQ1LC0yLjE1bC0wLjg4LC0yLjQzbDYuMzYsMC4yM2wxLjk0LDAuNjFsMC4yMywtMC4wMmwzLjkxLC0yLjFsMC4xNSwtMC4zMmwtMC4yNiwtMC4yNGwtNS42OSwtMC42N2wtOC42OSwwLjM3bC00LjMsLTEuOTJsLTIuMTIsLTIuMzlsLTIuODIsLTEuNjhsLTAuNDQsLTEuNjVsMy40MSwtMS4wNmwyLjkzLC0wLjJsNC45MSwtMC45OWwzLjY5LC0yLjI4bDIuOTMsMC4zMWwyLjY0LDEuNjhsMC40MiwtMC4xbDEuODQsLTMuMjNsMy4xNywtMC45Nmw0LjQ1LC0wLjY5bDcuNTYsLTAuMjZsMS4yNiwwLjY0bDAuMTgsMC4wM2w3LjIsLTEuMDZsMTAuODEsMC44Wk0yMDMuOTQsNTcuNTlsMC4wMSwwLjMybDEuOTcsMi45N2wwLjUxLC0wLjAxbDIuMjYsLTMuNzVsNi4wNSwtMS44OWw0LjA4LDQuNzJsLTAuMzYsMi45NWwwLjM4LDAuMzNsNC45NSwtMS4zNmwwLjExLC0wLjA1bDIuMjMsLTEuNzdsNS4zNywyLjMxbDMuMzIsMi4xNGwwLjMsMS44OWwwLjM2LDAuMjVsNC40OCwtMS4wMWwyLjQ5LDIuOGwwLjE0LDAuMDlsNS45OSwxLjc4bDIuMDksMS43NGwyLjE4LDMuODNsLTQuMjksMS45MWwtMC4wMSwwLjU0bDUuOSwyLjgzbDMuOTUsMC45NGwzLjU0LDMuODRsMC4yLDAuMWwzLjU4LDAuMjVsLTAuNjcsMi41MWwtNC4xOCw0LjU0bC0yLjg0LC0xLjYxbC0zLjkxLC0zLjk1bC0wLjI2LC0wLjA5bC0zLjI0LDAuNTJsLTAuMjUsMC4yNmwtMC4zMiwyLjM3bDAuMSwwLjI2bDIuNjMsMi4zOGwzLjQyLDEuODlsMC45NiwxLjBsMS41NywzLjhsLTAuNzQsMi40M2wtMi44NSwtMC45NmwtNi4yNiwtMy4xNWwtMC4zOCwwLjA5bDAuMDQsMC4zOWwzLjU0LDMuNGwyLjU1LDIuMzFsMC4yMywwLjc4bC02LjI2LC0xLjQzbC01LjMzLC0yLjI1bC0yLjczLC0xLjczbDAuNjcsLTAuODZsLTAuMDksLTAuNDVsLTcuMzgsLTQuMDFsLTAuNDQsMC4yN2wwLjAzLDAuODlsLTYuODUsMC42MWwtMS44LC0xLjE3bDEuNDMsLTIuNmw0LjU2LC0wLjA3bDUuMTUsLTAuNTJsMC4yMywtMC40NWwtMC43NiwtMS4zNGwwLjgsLTEuODlsMy4yMSwtNC4wNmwwLjA1LC0wLjI5bC0wLjcyLC0xLjk1bC0wLjk3LC0xLjQ3bC0wLjExLC0wLjFsLTMuODQsLTIuMWwtNC41MywtMS4zM2wxLjA5LC0wLjc1bDAuMDUsLTAuNDVsLTIuNjUsLTIuNzVsLTAuMTgsLTAuMDlsLTIuMTIsLTAuMjRsLTEuOTEsLTEuNDdsLTAuMzksMC4wMmwtMS4yNywxLjI1bC00LjQsMC41NmwtOS4wNiwtMC45OWwtNS4yOCwtMS4zMWwtNC4wMSwtMC42N2wtMS43MiwtMS4zMWwyLjMyLC0xLjg1bDAuMSwtMC4zM2wtMC4yOCwtMC4ybC0zLjMsLTAuMDJsLTAuNzQsLTQuMzZsMS44NiwtNC4wOWwyLjQ2LC0xLjg4bDUuNzQsLTEuMTVsLTEuNSwyLjU1Wk0yNjEuMjgsMTU5LjI4bDAuMTksMC4xNGwxLjgyLDAuNDJsMS42NiwtMC4wNWwtMC42NiwwLjY4bC0wLjc1LDAuMTZsLTMuMCwtMS4yNWwtMC40NiwtMC43N2wwLjUxLC0wLjUybDAuNjgsMS4xOVpNMjMwLjg3LDg0LjQ4bC0yLjQ4LDAuMTlsLTAuNTIsLTEuNzRsMC45NiwtMi4xN2wyLjAzLC0wLjUzbDEuNzEsMS4wNGwwLjAyLDEuNmwtMC4yMiwwLjQ2bC0xLjUsMS4xNlpNMjI5LjUyLDU4LjE5bDAuMTQsMC44MmwtNC45OSwtMC4yMmwtMi43MywwLjYzbC0wLjU5LC0wLjIzbC0yLjYxLC0yLjRsMC4wOCwtMS4zOGwwLjk0LC0wLjI1bDUuNjEsMC41MWw0LjE0LDIuNTRaTTIyMi4xMiwxMDUuMGwtMC43OSwxLjYzbC0wLjc1LC0wLjIybC0wLjUyLC0wLjkxbDAuMDQsLTAuMDlsMC44NCwtMS4wMWwwLjc0LDAuMDZsMC40NCwwLjU1Wk0xODMuNzcsMzguMjJsMi43MiwxLjY1bDAuMTYsMC4wNGw0LjgzLC0wLjAxbDEuOTIsMS41MmwtMC41MSwxLjc1bDAuMTgsMC4zNmwyLjg0LDEuMTRsMS41NiwxLjE5bDAuMTYsMC4wNmwzLjM3LDAuMjJsMy42NSwwLjQybDQuMDcsLTEuMWw1LjA1LC0wLjQzbDMuOTYsMC4zNWwyLjUzLDEuOGwwLjQ4LDEuNzlsLTEuMzcsMS4xNmwtMy42LDEuMDNsLTMuMjIsLTAuNTlsLTcuMTcsMC43NmwtNS4xLDAuMDlsLTQuMCwtMC42bC02LjQ4LC0xLjU2bC0wLjgxLC0yLjU3bC0wLjMsLTIuNDlsLTAuMSwtMC4xOWwtMi41MSwtMi4yNWwtMC4xNiwtMC4wN2wtNS4xMiwtMC42M2wtMi42MSwtMS40NWwwLjc1LC0xLjcxbDQuODgsMC4zMlpNMjA3LjQ2LDkxLjI2bDAuNDIsMS42MmwwLjQyLDAuMTlsMS4xMiwtMC41NWwxLjM1LDAuOTlsMi43NCwxLjM5bDIuNzMsMS4ybDAuMiwxLjc0bDAuMzUsMC4yNmwxLjcyLC0wLjI5bDEuMzEsMC45N2wtMS43MiwwLjk2bC0zLjY4LC0wLjlsLTEuMzQsLTEuNzFsLTAuNDMsLTAuMDRsLTIuNDYsMi4xbC0zLjIzLDEuODVsLTAuNzQsLTEuOThsLTAuMzEsLTAuMTlsLTIuNDcsMC4yOGwxLjQ5LC0xLjM0bDAuMSwtMC4xOWwwLjMyLC0zLjE1bDAuNzksLTMuNDVsMS4zNCwwLjI1Wk0yMTUuNTksMTAyLjY2bC0yLjczLDIuMGwtMS40OSwtMC4wOGwtMC4zNywtMC43bDEuNjEsLTEuNTZsMy4wLDAuMDNsLTAuMDIsMC4zWk0yMDIuNzksMjQuMDdsMC4xMSwwLjEybDIuNTQsMS41M2wtMy4wMSwxLjQ3bC00LjU1LDQuMDdsLTQuMywwLjM4bC01LjA3LC0wLjY4bC0yLjUxLC0yLjA5bDAuMDMsLTEuNzJsMS44NiwtMS40bDAuMSwtMC4zNGwtMC4yOSwtMC4ybC00LjQ5LDAuMDRsLTIuNjMsLTEuNzlsLTEuNDUsLTIuMzZsMS42MSwtMi4zOGwxLjY1LC0xLjY5bDIuNDcsLTAuNGwwLjE5LC0wLjQ4bC0wLjcyLC0wLjg5bDUuMSwtMC4yNmwzLjEsMy4wNWwwLjEzLDAuMDdsNC4yMSwxLjI1bDMuOTksMS4wNmwxLjkyLDMuNjVaTTE4Ny41LDU5LjNsLTAuMTUsMC4xbC0yLjU5LDMuNGwtMi41LC0wLjE1bC0xLjQ3LC0zLjkybDAuMDQsLTIuMjRsMS4yMiwtMS45MmwyLjM0LC0xLjI2bDUuMTEsMC4xN2w0LjI4LDEuMDZsLTMuMzYsMy44NmwtMi45LDAuOVpNMTg2LjE5LDQ4LjhsLTEuMTUsMS42M2wtMy40MiwtMC4zNWwtMi42OCwtMS4xNWwxLjExLC0xLjg4bDMuMzQsLTEuMjdsMi4wMSwxLjYzbDAuNzksMS4zOFpNMTg1Ljc4LDM1LjQxbC0wLjk1LDAuMTNsLTQuNDgsLTAuMzNsLTAuNCwtMC45MWw0LjUsMC4wN2wxLjQ1LDAuODJsLTAuMSwwLjIxWk0xODAuNzYsMzIuNTZsLTMuNDMsMS4wM2wtMS44NSwtMS4xNGwtMS4wMSwtMS45MmwtMC4xNiwtMS44N2wyLjg3LDAuMmwxLjM5LDAuMzVsMi43NSwxLjc1bC0wLjU1LDEuNlpNMTgxLjAzLDc2LjMybC0xLjIxLDEuMmwtMy4xOSwtMS4yNmwtMC4xOCwtMC4wMWwtMS45MiwwLjQ1bC0yLjg4LC0xLjY3bDEuODQsLTEuMTZsMS42LC0xLjc3bDIuNDUsMS4xN2wxLjQ1LDAuNzdsMi4wNSwyLjI4Wk0xNjkuNzIsNTQuNzZsMi44MywwLjk3bDAuMTQsMC4wMWw0LjI1LC0wLjU4bDAuNDcsMS4wMWwtMi4xOSwyLjE2bDAuMDcsMC40OGwzLjYxLDEuOTVsLTAuNDEsMy44NGwtMy44NywxLjY4bC0yLjIzLC0wLjM2bC0xLjczLC0xLjc1bC02LjA3LC0zLjUzbDAuMDMsLTEuMDFsNC43OSwwLjU1bDAuMywtMC4xNmwtMC4wNCwtMC4zNGwtMi41NSwtMi44OWwyLjU5LC0yLjA1Wk0xNzQuNDQsNDAuNTZsMS40OSwxLjg3bDAuMDcsMi40OGwtMS4wNywzLjUybC0zLjg3LDAuNDhsLTIuNDEsLTAuNzJsMC4wNSwtMi43MmwtMC4zMywtMC4zbC0zLjc5LDAuMzZsLTAuMTMsLTMuMzFsMi4zNiwwLjE0bDAuMTUsLTAuMDNsMy43LC0xLjc0bDMuNDQsMC4yOWwwLjMxLC0wLjIybDAuMDMsLTAuMTJaTTE3MC4xNCwzMS41bDAuNzUsMS43NGwtMy41MiwtMC41MmwtNC4xOSwtMS43N2wtNC42NSwtMC4xN2wxLjY1LC0xLjExbC0wLjA1LC0wLjUybC0yLjg2LC0xLjI2bC0wLjEzLC0xLjU4bDQuNTIsMC43bDYuNjYsMS45OWwxLjg0LDIuNVpNMTM0LjY0LDU4LjA4bC0xLjA4LDEuOTNsMC4zNCwwLjQ0bDUuNDQsLTEuNDFsMy4zNywyLjMybDAuMzcsLTAuMDJsMi42NiwtMi4yOGwyLjAzLDEuMzhsMi4wMSw0LjUzbDAuNTMsMC4wNGwxLjI2LC0xLjkzbDAuMDMsLTAuMjdsLTEuNjcsLTQuNTVsMS44MiwtMC41OGwyLjM2LDAuNzNsMi42OSwxLjg0bDEuNTMsNC40NmwwLjc3LDMuMjRsMC4xNSwwLjE5bDQuMjIsMi4yNmw0LjMyLDIuMDRsLTAuMjEsMS41MWwtMy44NywwLjM0bC0wLjE5LDAuNWwxLjQ1LDEuNTRsLTAuNjUsMS4yM2wtNC4zLC0wLjY1bC00LjQsLTEuMTlsLTIuOTcsMC4yOGwtNC42NywxLjQ4bC02LjMxLDAuNjVsLTQuMjcsMC4zOWwtMS4yNiwtMS45MWwtMC4xNSwtMC4xMmwtMy40MiwtMS4ybC0wLjE2LC0wLjAxbC0yLjA1LDAuNDVsLTIuNjYsLTMuMDJsMS4yLC0wLjM0bDMuODIsLTAuNzZsMy41OCwwLjE5bDMuMjcsLTAuNzhsMC4yMywtMC4yOWwtMC4yNCwtMC4yOWwtNC44NCwtMS4wNmwtNS40MiwwLjM1bC0zLjQsLTAuMDlsLTAuOTcsLTEuMjJsNS4zOSwtMS43bDAuMjEsLTAuMzNsLTAuMywtMC4yNWwtMy44MiwwLjA2bC0zLjk1LC0xLjFsMS44OCwtMy4xM2wxLjY4LC0xLjgxbDYuNTQsLTIuODRsMi4xMSwwLjc3Wk0xNTguODUsNTYuNThsLTEuODIsMi42MmwtMy4zOCwtMi45bDAuNDksLTAuMzlsMy4xNywtMC4xOGwxLjU0LDAuODZaTTE0OS43MSw0Mi43bDEuMCwxLjg3bDAuMzcsMC4xNGwyLjE3LC0wLjgzbDIuMzMsMC4ybDAuMzgsMi4xNmwtMS4zOCwyLjE3bC04LjMzLDAuNzZsLTYuMzQsMi4xNWwtMy41MSwwLjFsLTAuMjIsLTEuMTNsNC45OCwtMi4xMmwwLjE3LC0wLjM0bC0wLjMxLC0wLjIzbC0xMS4yNywwLjZsLTMuMDQsLTAuNzhsMy4xNCwtNC41N2wyLjIsLTEuMzVsNi44NywxLjdsNC40LDMuMGwwLjE0LDAuMDVsNC4zNywwLjM5bDAuMjcsLTAuNDhsLTMuNDEsLTQuNjhsMS45NiwtMS42MmwyLjI4LDAuNTNsMC43OSwyLjMyWk0xNDUuNDQsMjkuODNsLTIuMTgsMC43N2wtMy43OSwtMC4wbDAuMDIsLTAuMzFsMi4zNCwtMS41bDEuMiwwLjIzbDIuNDIsMC44M1pNMTQ0LjgzLDM0LjVsLTQuNDQsMS40NmwtMy4xOCwtMS40OGwxLjYsLTEuMzZsMy41MSwtMC41M2wzLjEsMC43NWwtMC42LDEuMTZaTTExOS4wMiw2NS44N2wtNi4xNywyLjA3bC0xLjE5LC0xLjgybC0wLjEzLC0wLjExbC01LjQ4LC0yLjMybDAuOTIsLTEuN2wxLjczLC0zLjQ0bDIuMTYsLTMuMTVsLTAuMDIsLTAuMzZsLTIuMDksLTIuNTZsNy44NCwtMC43MWwzLjU5LDEuMDJsNi4zMiwwLjI3bDIuMzUsMS4zN2wyLjI1LDEuNzFsLTIuNjgsMS4wNGwtNi4yMSwzLjQxbC0zLjEsMy4yOGwtMC4wOCwwLjIxbDAuMCwxLjgxWk0xMjkuNjYsMzUuNGwtMC4zLDMuNTVsLTEuNzcsMS42N2wtMi4zNCwwLjI3bC00LjYyLDIuMmwtMy44OSwwLjc2bC0yLjgzLC0wLjkzbDMuODUsLTMuNTJsNS4wNCwtMy4zNmwzLjc1LDAuMDdsMy4xMSwtMC43Wk0xMTEuMjQsMTUyLjc0bC0wLjgyLDAuMjlsLTMuOTIsLTEuMzlsLTAuNywtMS4wNmwtMC4xMiwtMC4xbC0yLjE1LC0xLjA5bC0wLjQxLC0wLjg0bC0wLjIsLTAuMTZsLTIuNDQsLTAuNTZsLTAuODQsLTEuNTZsMC4xLC0wLjM2bDIuMzQsMC42NGwxLjUzLDAuNWwyLjI4LDAuMzRsMC43OCwxLjA0bDEuMjQsMS41NWwwLjA5LDAuMDhsMi40MiwxLjNsMC44MSwxLjM5Wk04OC41NCwxMzQuODJsMC4xNCwwLjAybDIuMCwtMC4yM2wtMC42NywzLjQ4bDAuMDYsMC4yNGwxLjc4LDIuMjJsLTAuMjQsLTAuMGwtMS40LC0xLjQybC0wLjkxLC0xLjUzbC0xLjI2LC0xLjA4bC0wLjQyLC0xLjM1bDAuMDksLTAuNjZsMC44MiwwLjMxWlwiLCBcIm5hbWVcIjogXCJDYW5hZGFcIn0sIFwiQ0dcIjoge1wicGF0aFwiOiBcIk00NTMuNjYsMjk2LjYxbC0wLjksLTAuODJsLTAuMzUsLTAuMDRsLTAuODMsMC40OGwtMC43NywwLjgzbC0xLjY1LC0yLjEzbDEuNjYsLTEuMmwwLjA4LC0wLjM5bC0wLjgxLC0xLjQzbDAuNTksLTAuNDNsMS42MiwtMC4yOWwwLjI0LC0wLjI0bDAuMSwtMC41OGwwLjk0LDAuODRsMC4xOSwwLjA4bDIuMjEsMC4xMWwwLjI3LC0wLjE0bDAuODEsLTEuMjlsMC4zMiwtMS43NmwtMC4yNywtMS45NmwtMC4wNiwtMC4xNWwtMS4wOCwtMS4zNWwxLjAyLC0yLjc0bC0wLjA5LC0wLjM0bC0wLjYyLC0wLjVsLTAuMjIsLTAuMDZsLTEuNjYsMC4xOGwtMC41NSwtMS4wM2wwLjEyLC0wLjczbDIuODUsMC4wOWwxLjk4LDAuNjVsMi4wLDAuNTlsMC4zOCwtMC4yNWwwLjE3LC0xLjNsMS4yNiwtMi4yNGwxLjM0LC0xLjE5bDEuNTQsMC4zOGwxLjM1LDAuMTJsLTAuMTEsMS4xNWwtMC43NCwxLjM0bC0wLjUsMS42MWwtMC4zMSwyLjIybDAuMTIsMS40MWwtMC40LDAuOWwtMC4wNiwwLjg4bC0wLjI0LDAuNjdsLTEuNTcsMS4xNWwtMS4yNCwxLjQxbC0xLjA5LDIuNDNsLTAuMDMsMC4xM2wwLjA4LDEuOTVsLTAuNTUsMC42OWwtMS40NiwxLjIzbC0xLjMyLDEuNDFsLTAuNjEsLTAuMjlsLTAuMTMsLTAuNTdsLTAuMjksLTAuMjNsLTEuMzYsLTAuMDJsLTAuMjMsMC4xbC0wLjcyLDAuODFsLTAuNDEsLTAuMTZaXCIsIFwibmFtZVwiOiBcIlJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDRlwiOiB7XCJwYXRoXCI6IFwiTTQ1OS40MSwyNjYuNTZsMS45LC0wLjE3bDAuMjIsLTAuMTJsMC4zNiwtMC41bDAuMTQsMC4wMmwwLjU1LDAuNTFsMC4yOSwwLjA3bDMuMTUsLTAuOTZsMC4xMiwtMC4wN2wxLjA1LC0wLjk3bDEuMjksLTAuODdsMC4xMiwtMC4zM2wtMC4xNywtMC42MWwwLjM4LC0wLjEybDIuMzYsMC4xNWwwLjE1LC0wLjAzbDIuMzYsLTEuMTdsMC4xMiwtMC4xbDEuNzgsLTIuNzJsMS4xOCwtMC45NmwxLjIzLC0wLjM0bDAuMjEsMC43OWwwLjA3LDAuMTNsMS4zNywxLjVsMC4wMSwwLjg2bC0wLjM5LDEuMGwtMC4wMSwwLjE3bDAuMTYsMC43OGwwLjEsMC4xN2wwLjkxLDAuNzZsMS44OSwxLjA5bDEuMjQsMC45MmwwLjAyLDAuNjdsMC4xMiwwLjIzbDEuNjcsMS4zbDAuOTksMS4wM2wwLjYxLDEuNDZsMC4xNCwwLjE1bDEuNzksMC45NWwwLjIsMC40bC0wLjQ0LDAuMTRsLTEuNTQsLTAuMDZsLTEuOTgsLTAuMjZsLTAuOTMsMC4yMmwtMC4xOSwwLjE0bC0wLjMsMC40OGwtMC41NywwLjA1bC0wLjkxLC0wLjQ5bC0wLjI2LC0wLjAxbC0yLjcsMS4yMWwtMS4wNCwtMC4yM2wtMC4yMSwwLjAzbC0wLjM0LDAuMTlsLTAuMTIsMC4xM2wtMC42NCwxLjNsLTEuNjcsLTAuNDNsLTEuNzcsLTAuMjRsLTEuNTgsLTAuOTFsLTIuMDYsLTAuODVsLTAuMjcsMC4wMmwtMS40MiwwLjg4bC0wLjk3LDEuMjdsLTAuMDYsMC4xNGwtMC4xOSwxLjQ2bC0xLjMsLTAuMTFsLTEuNjcsLTAuNDJsLTAuMjcsMC4wN2wtMS41NSwxLjQxbC0wLjk5LDEuNzZsLTAuMTQsLTEuMThsLTAuMTMsLTAuMjJsLTEuMSwtMC43OGwtMC44NiwtMS4ybC0wLjIsLTAuODRsLTAuMDcsLTAuMTNsLTEuMDcsLTEuMTlsMC4xNiwtMC41OWwwLjAsLTAuMTVsLTAuMjQsLTEuMDFsMC4xOCwtMS43N2wwLjUsLTAuMzhsMC4wOSwtMC4xMWwxLjE4LC0yLjRaXCIsIFwibmFtZVwiOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wifSwgXCJDRFwiOiB7XCJwYXRoXCI6IFwiTTQ5Ny44NSwyNzYuMjVsLTAuMTQsMi43N2wwLjIsMC4zbDAuNTcsMC4xOWwtMC40NywwLjUybC0xLjAsMC43MWwtMC45NiwxLjMxbC0wLjU2LDEuMjJsLTAuMTYsMi4wNGwtMC41NCwwLjg5bC0wLjA0LDAuMTVsLTAuMDIsMS43NmwtMC42MywwLjYxbC0wLjA5LDAuMmwtMC4wOCwxLjMzbC0wLjIsMC4xMWwtMC4xNSwwLjIxbC0wLjIzLDEuMzdsMC4wMywwLjJsMC42LDEuMDhsMC4xNiwyLjk2bDAuNDQsMi4yOWwtMC4yNCwxLjI1bDAuMDEsMC4xNWwwLjUsMS40NmwwLjA3LDAuMTJsMS40MSwxLjM3bDEuMDksMi41NmwtMC41MSwtMC4xMWwtMy40NSwwLjQ1bC0wLjY3LDAuM2wtMC4xNSwwLjE1bC0wLjcxLDEuNjFsMC4wMSwwLjI2bDAuNTIsMS4wM2wtMC40MywyLjlsLTAuMzEsMi41NWwwLjEzLDAuMjlsMC43LDAuNDZsMS43NSwwLjk5bDAuMzEsLTAuMDFsMC4yNiwtMC4xN2wwLjE1LDEuOWwtMS40NCwtMC4wMmwtMC45NCwtMS4yOGwtMC45NCwtMS4xbC0wLjE3LC0wLjFsLTEuNzYsLTAuMzNsLTAuNSwtMS4xOGwtMC40MiwtMC4xNWwtMS40NCwwLjc1bC0xLjc5LC0wLjMybC0wLjc3LC0xLjA1bC0wLjIsLTAuMTJsLTEuNTksLTAuMjNsLTAuOTcsMC4wNGwtMC4xLC0wLjUzbC0wLjI3LC0wLjI1bC0wLjg2LC0wLjA2bC0xLjEzLC0wLjE1bC0xLjYyLDAuMzdsLTEuMDQsLTAuMDZsLTAuMzIsMC4wOWwwLjExLC0yLjU2bC0wLjA4LC0wLjIxbC0wLjc3LC0wLjg3bC0wLjE3LC0xLjQxbDAuMzYsLTEuNDdsLTAuMDMsLTAuMjFsLTAuNDgsLTAuOTFsLTAuMDQsLTEuNTJsLTAuMywtMC4yOWwtMi42NSwwLjAybDAuMTMsLTAuNTNsLTAuMjksLTAuMzdsLTEuMjgsMC4wMWwtMC4yOCwwLjIxbC0wLjA3LDAuMjRsLTEuMzUsMC4wOWwtMC4yNiwwLjE4bC0wLjYyLDEuNDVsLTAuMjUsMC40MmwtMS4xNywtMC4zbC0wLjE5LDAuMDFsLTAuNzksMC4zNGwtMS40NCwwLjE4bC0xLjQxLC0xLjk2bC0wLjcsLTEuNDdsLTAuNjEsLTEuODZsLTAuMjgsLTAuMjFsLTcuMzksLTAuMDNsLTAuOTIsMC4zbC0wLjc4LC0wLjAzbC0wLjc4LDAuMjVsLTAuMTEsLTAuMjVsMC4zNSwtMC4xNWwwLjE4LC0wLjI2bDAuMDcsLTEuMDJsMC4zMywtMC41MmwwLjcyLC0wLjQybDAuNTIsMC4ybDAuMzMsLTAuMDhsMC43NiwtMC44NmwwLjk5LDAuMDJsMC4xMSwwLjQ4bDAuMTYsMC4ybDAuOTQsMC40NGwwLjM1LC0wLjA3bDEuNDYsLTEuNTZsMS40NCwtMS4yMWwwLjY4LC0wLjg1bDAuMDYsLTAuMmwtMC4wOCwtMS45OWwxLjA0LC0yLjMzbDEuMSwtMS4yM2wxLjYyLC0xLjE5bDAuMTEsLTAuMTRsMC4yOSwtMC44bDAuMDgsLTAuOTRsMC4zOCwtMC44MmwwLjAzLC0wLjE2bC0wLjEzLC0xLjM4bDAuMywtMi4xNmwwLjQ3LC0xLjUxbDAuNzMsLTEuMzFsMC4wNCwtMC4xMmwwLjE1LC0xLjUxbDAuMjEsLTEuNjZsMC44OSwtMS4xNmwxLjE2LC0wLjdsMS45LDAuNzlsMS42OSwwLjk1bDEuODEsMC4yNGwxLjg1LDAuNDhsMC4zNSwtMC4xNmwwLjcxLC0xLjQzbDAuMTYsLTAuMDlsMS4wMywwLjIzbDAuMTksLTAuMDJsMi42NSwtMS4xOWwwLjg2LDAuNDZsMC4xNywwLjAzbDAuODEsLTAuMDhsMC4yMywtMC4xNGwwLjMxLC0wLjVsMC43NSwtMC4xN2wxLjgzLDAuMjZsMS42NCwwLjA2bDAuNzIsLTAuMjFsMS4zOSwxLjlsMC4xNiwwLjExbDEuMTIsMC4zbDAuMjQsLTAuMDRsMC41OCwtMC4zNmwxLjA1LDAuMTVsMC4xNSwtMC4wMmwxLjE1LC0wLjQ0bDAuNDcsMC44NGwwLjA4LDAuMDlsMi4wOCwxLjU3WlwiLCBcIm5hbWVcIjogXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDWlwiOiB7XCJwYXRoXCI6IFwiTTQ2My4yOSwxNTIuMjJsLTAuODgsLTAuNDdsLTAuMTgsLTAuMDNsLTEuMDgsMC4xNWwtMS44NiwtMC45NGwtMC4yMSwtMC4wMmwtMC44OCwwLjI0bC0wLjEzLDAuMDdsLTEuMjUsMS4xN2wtMS42MywtMC45MWwtMS4zOCwtMS4zNmwtMS4yMiwtMC43NWwtMC4yNCwtMS4yNGwtMC4zMywtMC43NWwxLjUzLC0wLjZsMC45OCwtMC44NGwxLjc0LC0wLjYybDAuMTEsLTAuMDdsMC40NywtMC40N2wwLjQ2LDAuMjdsMC4yNCwwLjAzbDAuOTYsLTAuM2wxLjA2LDAuOTVsMC4xNSwwLjA3bDEuNTcsMC4yNGwtMC4xLDAuNmwwLjE2LDAuMzJsMS4zNiwwLjY4bDAuNDEsLTAuMTVsMC4yOCwtMC42MmwxLjI5LDAuMjhsMC4xOSwwLjg0bDAuMjYsMC4yM2wxLjczLDAuMThsMC43NCwxLjAybC0wLjE3LDAuMGwtMC4yNSwwLjEzbC0wLjMyLDAuNDlsLTAuNDYsMC4xMWwtMC4yMiwwLjIzbC0wLjEzLDAuNTdsLTAuMzIsMC4xbC0wLjIsMC4yMmwtMC4wMywwLjE0bC0wLjY1LDAuMjVsLTEuMDUsLTAuMDVsLTAuMjgsMC4xN2wtMC4yMiwwLjQzWlwiLCBcIm5hbWVcIjogXCJDemVjaCBSZXB1YmxpY1wifSwgXCJDWVwiOiB7XCJwYXRoXCI6IFwiTTUwNS4wMywxOTMuNzVsLTEuNTEsMC42OGwtMS4wLC0wLjNsLTAuMzIsLTAuNjNsMC42OSwtMC4wNmwwLjQxLDAuMTNsMC4xOSwtMC4wbDAuNjIsLTAuMjJsMC4zMSwwLjAybDAuMDYsMC4yMmwwLjQ5LDAuMTdsMC4wNiwtMC4wMVpcIiwgXCJuYW1lXCI6IFwiQ3lwcnVzXCJ9LCBcIkNSXCI6IHtcInBhdGhcIjogXCJNMjEzLjAsMjYzLjg0bC0wLjk4LC0wLjRsLTAuMywtMC4zMWwwLjE2LC0wLjI0bDAuMDUsLTAuMjFsLTAuMDksLTAuNTZsLTAuMSwtMC4xOGwtMC43NiwtMC42NWwtMC45OSwtMC41bC0wLjc0LC0wLjI4bC0wLjEzLC0wLjU4bC0wLjEyLC0wLjE4bC0wLjY2LC0wLjQ1bC0wLjM0LC0wLjBsLTAuMTMsMC4zMWwwLjEzLDAuNTlsLTAuMTcsMC4yMWwtMC4zNCwtMC40MmwtMC4xNCwtMC4xbC0wLjcsLTAuMjJsLTAuMjMsLTAuMzRsMC4wMSwtMC42MmwwLjMxLC0wLjc0bC0wLjE0LC0wLjM4bC0wLjMsLTAuMTVsMC40NywtMC40bDEuNDgsMC42bDAuMjYsLTAuMDJsMC40NywtMC4yN2wwLjU4LDAuMTVsMC4zNSwwLjQ0bDAuMTcsMC4xMWwwLjc0LDAuMTdsMC4yNywtMC4wN2wwLjMsLTAuMjdsMC41MiwxLjA5bDAuOTcsMS4wMmwwLjc3LDAuNzFsLTAuNDEsMC4xbC0wLjIzLDAuM2wwLjAxLDEuMDJsMC4xMiwwLjI0bDAuMiwwLjE0bC0wLjA3LDAuMDVsLTAuMTEsMC4zbDAuMDgsMC4zN2wtMC4yMywwLjYzWlwiLCBcIm5hbWVcIjogXCJDb3N0YSBSaWNhXCJ9LCBcIkNVXCI6IHtcInBhdGhcIjogXCJNMjE1LjAxLDIyNi4wOWwyLjA4LDAuMThsMS45NCwwLjAzbDIuMjQsMC44NmwwLjk1LDAuOTJsMC4yNSwwLjA4bDIuMjIsLTAuMjhsMC43OSwwLjU1bDMuNjgsMi44MWwwLjE5LDAuMDZsMC43NywtMC4wM2wxLjE4LDAuNDJsLTAuMTIsMC40N2wwLjI3LDAuMzdsMS43OCwwLjFsMS41OSwwLjlsLTAuMTEsMC4yMmwtMS41LDAuM2wtMS42NCwwLjEzbC0xLjc1LC0wLjJsLTIuNjksMC4xOWwxLjAsLTAuODZsLTAuMDMsLTAuNDhsLTEuMDIsLTAuNjhsLTAuMTMsLTAuMDVsLTEuNTIsLTAuMTZsLTAuNzQsLTAuNjRsLTAuNTcsLTEuNDJsLTAuMywtMC4xOWwtMS4zNiwwLjFsLTIuMjMsLTAuNjdsLTAuNzEsLTAuNTJsLTAuMTQsLTAuMDZsLTMuMiwtMC40bC0wLjQyLC0wLjI1bDAuNTYsLTAuMzlsMC4xMiwtMC4zM2wtMC4yNywtMC4yMmwtMi40NiwtMC4xM2wtMC4yLDAuMDZsLTEuNzIsMS4zMWwtMC45NCwwLjAzbC0wLjI1LDAuMTVsLTAuMjksMC41M2wtMS4wNCwwLjI0bC0wLjI5LC0wLjA3bDAuNywtMC40M2wwLjEsLTAuMTFsMC41LC0wLjg3bDEuMDQsLTAuNTRsMS4yMywtMC40OWwxLjg2LC0wLjI1bDAuNjIsLTAuMjhaXCIsIFwibmFtZVwiOiBcIkN1YmFcIn0sIFwiU1pcIjoge1wicGF0aFwiOiBcIk01MDAuOTUsMzUzLjQxbC0wLjQxLDAuOTdsLTEuMTYsMC4yM2wtMS4yOSwtMS4yNmwtMC4wMiwtMC43MWwwLjYzLC0wLjkzbDAuMjMsLTAuN2wwLjQ3LC0wLjEybDEuMDQsMC40bDAuMzIsMS4wNWwwLjIsMS4wOFpcIiwgXCJuYW1lXCI6IFwiU3dhemlsYW5kXCJ9LCBcIlNZXCI6IHtcInBhdGhcIjogXCJNNTEwLjg0LDE5OS44M2wwLjA5LC0wLjExbDAuMDcsLTAuMmwtMC4wNCwtMS4wOGwwLjU2LC0xLjRsMS4zLC0xLjAxbDAuMSwtMC4zNGwtMC40MSwtMS4xMWwtMC4yNCwtMC4xOWwtMC44OSwtMC4xMWwtMC4yLC0xLjg0bDAuNTUsLTEuMDVsMS4zLC0xLjIybDAuMDksLTAuMTlsMC4wOSwtMS4wOWwwLjM5LDAuMjdsMC4yNSwwLjA0bDIuNjYsLTAuNzdsMS4zNSwwLjUybDIuMDYsLTAuMDFsMi45MywtMS4wOGwxLjM1LDAuMDRsMi4xNCwtMC4zNGwtMC44MywxLjE2bC0xLjMxLDAuNjhsLTAuMTYsMC4zbDAuMjMsMi4wM2wtMC45LDMuMjVsLTUuNDMsMi44N2wtNC43OSwyLjkxbC0yLjMyLC0wLjkyWlwiLCBcIm5hbWVcIjogXCJTeXJpYVwifSwgXCJLR1wiOiB7XCJwYXRoXCI6IFwiTTU5OS4wNCwxNzIuMTVsMC4zOCwtMC45bDEuNDMsLTAuMzdsNC4wNCwxLjAybDAuMzcsLTAuMjNsMC4zNiwtMS42NGwxLjE3LC0wLjUybDMuNDUsMS4yNGwwLjIsLTAuMGwwLjg2LC0wLjMxbDQuMDksMC4wOGwzLjYxLDAuMzFsMS4xOCwxLjAybDAuMTEsMC4wNmwxLjE5LDAuMzRsLTAuMTMsMC4yNmwtMy44NCwxLjU4bC0wLjEzLDAuMWwtMC44MSwxLjA4bC0zLjA4LDAuMzRsLTAuMjQsMC4xNmwtMC44NSwxLjdsLTIuNDMsLTAuMzdsLTAuMTQsMC4wMWwtMS43OSwwLjYxbC0yLjM5LDEuNGwtMC4xMiwwLjM5bDAuMjUsMC40OWwtMC40OCwwLjQ1bC00LjU3LDAuNDNsLTMuMDQsLTAuOTRsLTIuNDUsMC4xOGwwLjE0LC0xLjAybDIuNDIsMC40NGwwLjI3LC0wLjA4bDAuODEsLTAuODFsMS43NiwwLjI3bDAuMjEsLTAuMDVsMy4yMSwtMi4xNGwtMC4wMywtMC41MWwtMi45NywtMS41N2wtMC4yNiwtMC4wMWwtMS42NCwwLjY5bC0xLjM4LC0wLjg0bDEuODEsLTEuNjdsLTAuMDksLTAuNWwtMC40NiwtMC4xOFpcIiwgXCJuYW1lXCI6IFwiS3lyZ3l6c3RhblwifSwgXCJLRVwiOiB7XCJwYXRoXCI6IFwiTTUyMy4zLDI4Ny4wNGwwLjA2LDAuMTdsMS4yOSwxLjhsLTEuNDYsMC44NGwtMC4xMSwwLjExbC0wLjU1LDAuOTNsLTAuODEsMC4xNmwtMC4yNCwwLjI0bC0wLjM0LDEuNjlsLTAuODEsMS4wNmwtMC40NiwxLjU4bC0wLjc2LDAuNjNsLTMuMywtMi4zbC0wLjE2LC0xLjMybC0wLjE1LC0wLjIzbC05LjM1LC01LjI4bC0wLjAyLC0yLjRsMS45MiwtMi42M2wwLjkxLC0xLjgzbDAuMDEsLTAuMjRsLTEuMDksLTIuODZsLTAuMjksLTEuMjRsLTEuMDksLTEuNjNsMi45MywtMi44NWwwLjkyLDAuM2wwLjAsMS4xOWwwLjA5LDAuMjJsMC44NiwwLjgzbDAuMjEsMC4wOGwxLjY1LDAuMGwzLjA5LDIuMDhsMC4xNiwwLjA1bDAuNzksMC4wM2wwLjU0LC0wLjA2bDAuNTgsMC4yOGwxLjY3LDAuMmwwLjI4LC0wLjEybDAuNjksLTAuOThsMi4wNCwtMC45NGwwLjg2LDAuNzNsMC4xOSwwLjA3bDEuMSwwLjBsLTEuODIsMi4zNmwtMC4wNiwwLjE4bDAuMDMsOS4xMlpcIiwgXCJuYW1lXCI6IFwiS2VueWFcIn0sIFwiU1NcIjoge1wicGF0aFwiOiBcIk01MDUuNywyNjEuMzlsMC4wMiwxLjY0bC0wLjI3LDAuNTVsLTEuMTUsMC4wNWwtMC4yNCwwLjE1bC0wLjg1LDEuNDRsMC4yMiwwLjQ1bDEuNDQsMC4xN2wxLjE1LDEuMTJsMC40MiwwLjk1bDAuMTQsMC4xNWwxLjA2LDAuNTRsMS4zMywyLjQ1bC0zLjA2LDIuOThsLTEuNDQsMS4wOGwtMS43NSwwLjAxbC0xLjkyLDAuNTZsLTEuNSwtMC41M2wtMC4yNywwLjAzbC0wLjg1LDAuNTdsLTEuOTgsLTEuNWwtMC41NiwtMS4wMmwtMC4zNywtMC4xM2wtMS4zMiwwLjVsLTEuMDgsLTAuMTVsLTAuMiwwLjA0bC0wLjU2LDAuMzVsLTAuOSwtMC4yNGwtMS40NCwtMS45N2wtMC4zOSwtMC43N2wtMC4xMywtMC4xM2wtMS43OCwtMC45NGwtMC42NSwtMS41bC0xLjA4LC0xLjEybC0xLjU3LC0xLjIybC0wLjAyLC0wLjY4bC0wLjEyLC0wLjIzbC0xLjM3LC0xLjAybC0xLjE3LC0wLjY4bDAuMiwtMC4wOGwwLjg2LC0wLjQ4bDAuMTQsLTAuMThsMC42MywtMi4yMmwwLjYsLTEuMDJsMS40NywtMC4yOGwwLjM1LDAuNTZsMS4yOSwxLjQ4bDAuMTQsMC4wOWwwLjY5LDAuMjJsMC4yMiwtMC4wMmwwLjgzLC0wLjRsMS41OCwwLjA4bDAuMjYsMC4zOWwwLjI1LDAuMTNsMi40OSwwLjBsMC4zLC0wLjI1bDAuMDYsLTAuMzVsMS4xMywtMC40MmwwLjE4LC0wLjE4bDAuMjIsLTAuNjNsMC42OCwtMC4zOGwxLjk1LDEuMzdsMC4yMywwLjA1bDEuMjksLTAuMjZsMC4xOSwtMC4xMmwxLjIzLC0xLjhsMS4zNiwtMS4zN2wwLjA4LC0wLjI1bC0wLjIxLC0xLjUybC0wLjA2LC0wLjE1bC0wLjI1LC0wLjNsMC45NCwtMC4wOGwwLjI2LC0wLjIxbDAuMSwtMC4zMmwwLjYsMC4wOWwtMC4yNSwxLjY3bDAuMywxLjgzbDAuMTEsMC4xOWwxLjIyLDAuOTRsMC4yNSwwLjczbC0wLjA0LDEuMmwwLjI2LDAuMzFsMC4wOSwwLjAxWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBTdWRhblwifSwgXCJTUlwiOiB7XCJwYXRoXCI6IFwiTTI3OC4xLDI3MC4yNmwyLjcxLDAuNDVsMC4zMSwtMC4xNGwwLjE5LC0wLjMybDEuODIsLTAuMTZsMi4yNSwwLjU2bC0xLjA5LDEuODFsLTAuMDQsMC4xOWwwLjIsMS43MmwwLjA1LDAuMTNsMC45LDEuMzVsLTAuMzksMC45OWwtMC4yMSwxLjA5bC0wLjQ4LDAuOGwtMS4yLC0wLjQ0bC0wLjE3LC0wLjAxbC0xLjEyLDAuMjRsLTAuOTUsLTAuMjFsLTAuMzUsMC4ybC0wLjI1LDAuNzNsMC4wNSwwLjI5bDAuMywwLjM1bC0wLjA2LDAuMTNsLTEuMDEsLTAuMTVsLTEuNDIsLTIuMDNsLTAuMzIsLTEuMzZsLTAuMjksLTAuMjNsLTAuNjMsLTAuMGwtMC45NSwtMS41NmwwLjQxLC0xLjE2bDAuMDEsLTAuMTdsLTAuMDgsLTAuMzVsMS4yOSwtMC41NmwwLjE4LC0wLjIybDAuMzUsLTEuOTdaXCIsIFwibmFtZVwiOiBcIlN1cmluYW1lXCJ9LCBcIktIXCI6IHtcInBhdGhcIjogXCJNNjgwLjI4LDI1Ny44OWwtMC45MywtMS4ybC0xLjI0LC0yLjU2bC0wLjU2LC0yLjlsMS40NSwtMS45MmwzLjA3LC0wLjQ2bDIuMjYsMC4zNWwyLjAzLDAuOThsMC4zOCwtMC4xMWwxLjAsLTEuNTVsMS44NiwwLjc5bDAuNTIsMS41MWwtMC4yOCwyLjgybC00LjA1LDEuODhsLTAuMTIsMC40NWwwLjc5LDEuMWwtMi4yLDAuMTdsLTIuMDgsMC45OGwtMS44OSwtMC4zM1pcIiwgXCJuYW1lXCI6IFwiQ2FtYm9kaWFcIn0sIFwiU1ZcIjoge1wicGF0aFwiOiBcIk0xOTcuMDIsMjQ4Ljg5bDAuMTgsLTAuMDVsMC41OSwwLjE3bDAuNTUsMC41MWwwLjY0LDAuMzVsMC4wNiwwLjIybDAuMzcsMC4yMWwxLjAxLC0wLjI4bDAuMzgsMC4xM2wwLjE2LDAuMTNsLTAuMTQsMC44MWwtMC4xOCwwLjM4bC0xLjIyLC0wLjAzbC0wLjg0LC0wLjIzbC0xLjExLC0wLjUybC0xLjMxLC0wLjE1bC0wLjQ5LC0wLjM4bDAuMDIsLTAuMDhsMC43NiwtMC41N2wwLjQ2LC0wLjI3bDAuMTEsLTAuMzVaXCIsIFwibmFtZVwiOiBcIkVsIFNhbHZhZG9yXCJ9LCBcIlNLXCI6IHtcInBhdGhcIjogXCJNNDY4LjAxLDE1MC4wMmwwLjA1LDAuMDdsMC4zNiwwLjFsMC44NSwtMC4zN2wxLjEyLDEuMDJsMC4zMywwLjA1bDEuMzgsLTAuNjVsMS4wNywwLjNsMC4xNiwwLjBsMS42OSwtMC40M2wxLjk1LDEuMDJsLTAuNTEsMC42NGwtMC40NSwxLjJsLTAuMzIsMC4ybC0yLjU1LC0wLjkzbC0wLjE3LC0wLjAxbC0wLjgyLDAuMmwtMC4xNywwLjExbC0wLjUzLDAuNjhsLTAuOTQsMC4zMmwtMC4xNCwtMC4xMWwtMC4yOSwtMC4wNGwtMS4xOCwwLjQ4bC0wLjk1LDAuMDlsLTAuMjYsMC4yMWwtMC4xNSwwLjQ3bC0xLjg0LDAuMzRsLTAuODIsLTAuMzFsLTEuMTQsLTAuNzNsLTAuMiwtMC44OWwwLjQyLC0wLjg0bDAuOTEsMC4wNWwwLjEyLC0wLjAybDAuODYsLTAuMzNsMC4xOCwtMC4yMWwwLjAzLC0wLjEzbDAuMzIsLTAuMWwwLjIsLTAuMjJsMC4xMiwtMC41NWwwLjM5LC0wLjFsMC4xOCwtMC4xM2wwLjMsLTAuNDVsMC40MywtMC4wWlwiLCBcIm5hbWVcIjogXCJTbG92YWtpYVwifSwgXCJLUlwiOiB7XCJwYXRoXCI6IFwiTTczNy4zMSwxODUuNzJsMC44NCwwLjA4bDAuMjcsLTAuMTJsMC44OSwtMS4ybDEuNjMsLTAuMTNsMS4xLC0wLjJsMC4yMSwtMC4xNmwwLjEyLC0wLjI0bDEuODYsMi45NWwwLjU5LDEuNzlsMC4wMiwzLjE3bC0wLjg0LDEuMzhsLTIuMjMsMC41NWwtMS45NSwxLjE0bC0xLjkxLDAuMjFsLTAuMjIsLTEuMjFsMC40NSwtMi4wN2wtMC4wMSwtMC4xN2wtMC45OSwtMi42N2wxLjU0LC0wLjRsMC4xNywtMC40NmwtMS41NSwtMi4yNFpcIiwgXCJuYW1lXCI6IFwiU291dGggS29yZWFcIn0sIFwiU0lcIjoge1wicGF0aFwiOiBcIk00NTUuNzcsMTU5LjU5bDEuNzksMC4yMWwwLjE4LC0wLjA0bDEuMiwtMC42OGwyLjEyLC0wLjA4bDAuMjEsLTAuMWwwLjM4LC0wLjQybDAuMSwwLjAxbDAuMjgsMC42MmwtMS43MSwwLjcxbC0wLjE4LDAuMjJsLTAuMjEsMS4xbC0wLjcxLDAuMjZsLTAuMiwwLjI4bDAuMDEsMC41NWwtMC41OSwtMC4wNGwtMC43OSwtMC40N2wtMC4zOCwwLjA2bC0wLjM2LDAuNDFsLTAuODQsLTAuMDVsMC4wNSwtMC4xNWwtMC41NiwtMS4yNGwwLjIxLC0xLjE3WlwiLCBcIm5hbWVcIjogXCJTbG92ZW5pYVwifSwgXCJLUFwiOiB7XCJwYXRoXCI6IFwiTTc0Ny43NiwxNzIuMDJsLTAuMjMsLTAuMDRsLTAuMjYsMC4wOGwtMS4wOSwxLjAybC0wLjc4LDEuMDZsLTAuMDYsMC4xOWwwLjA5LDEuOTVsLTEuMTIsMC41N2wtMC41MywwLjU4bC0wLjg4LDAuODJsLTEuNjksMC41MWwtMS4wOSwwLjc5bC0wLjEyLDAuMjJsLTAuMDcsMS4xN2wtMC4yMiwwLjI1bDAuMDksMC40N2wwLjk2LDAuNDZsMS4yMiwxLjFsLTAuMTksMC4zN2wtMC45MSwwLjE2bC0xLjc1LDAuMTRsLTAuMjIsMC4xMmwtMC44NywxLjE4bC0wLjk1LC0wLjA5bC0wLjMsMC4xOGwtMC45NywtMC40NGwtMC4zOSwwLjEzbC0wLjI1LDAuNDRsLTAuMjksMC4wOWwtMC4wMywtMC4ybC0wLjE4LC0wLjIzbC0wLjYyLC0wLjI1bC0wLjQzLC0wLjI5bDAuNTIsLTAuOTdsMC41MiwtMC4zbDAuMTMsLTAuMzhsLTAuMTgsLTAuNDJsMC41OSwtMS40N2wwLjAxLC0wLjIxbC0wLjE2LC0wLjQ4bC0wLjIyLC0wLjJsLTEuNDEsLTAuMzFsLTAuODIsLTAuNTVsMS43NCwtMS42MmwyLjczLC0xLjU4bDEuNjIsLTEuOTZsMC45NiwwLjc2bDAuMTcsMC4wNmwyLjE3LDAuMTFsMC4zMSwtMC4zN2wtMC4zMiwtMS4zMWwzLjYxLC0xLjIxbDAuMTYsLTAuMTNsMC43OSwtMS4zNGwxLjI1LDEuMzhaXCIsIFwibmFtZVwiOiBcIk5vcnRoIEtvcmVhXCJ9LCBcIlNPXCI6IHtcInBhdGhcIjogXCJNNTQzLjgsMjU2LjQ4bDAuNjEsLTAuMDVsMS4xNCwtMC4zN2wxLjMxLC0wLjI1bDAuMTIsLTAuMDVsMS4xMSwtMC44MWwwLjU3LC0wLjBsMC4wMywwLjM5bC0wLjIzLDEuNDlsMC4wMSwxLjI1bC0wLjUyLDAuOTJsLTAuNywyLjcxbC0xLjE5LDIuNzlsLTEuNTQsMy4ybC0yLjEzLDMuNjZsLTIuMTIsMi43OWwtMi45MiwzLjM5bC0yLjQ3LDIuMGwtMy43NiwyLjVsLTIuMzMsMS45bC0yLjc3LDMuMDZsLTAuNjEsMS4zNWwtMC4yOCwwLjI5bC0xLjIyLC0xLjY5bC0wLjAzLC04LjkybDIuMTIsLTIuNzZsMC41OSwtMC42OGwxLjQ3LC0wLjA0bDAuMTgsLTAuMDZsMi4xNSwtMS43MWwzLjE2LC0wLjExbDAuMjEsLTAuMDlsNy4wOCwtNy41NWwxLjc2LC0yLjEybDEuMTQsLTEuNTdsMC4wNiwtMC4xOGwwLjAxLC00LjY3WlwiLCBcIm5hbWVcIjogXCJTb21hbGlhXCJ9LCBcIlNOXCI6IHtcInBhdGhcIjogXCJNMzc5LjI4LDI1MC4zNGwtMC45NSwtMS44MmwtMC4wOSwtMC4xbC0wLjgzLC0wLjZsMC42MiwtMC4yOGwwLjEzLC0wLjExbDEuMjEsLTEuOGwwLjYsLTEuMzFsMC43MSwtMC42OGwxLjA5LDAuMmwwLjE4LC0wLjAybDEuMTcsLTAuNTNsMS4yNSwtMC4wM2wxLjE3LDAuNzNsMS41OSwwLjY1bDEuNDcsMS44M2wxLjU5LDEuN2wwLjEyLDEuNTZsMC40OSwxLjQ2bDAuMSwwLjE0bDAuODUsMC42NWwwLjE4LDAuODJsLTAuMDgsMC41N2wtMC4xMywwLjA1bC0xLjI5LC0wLjE5bC0wLjI5LDAuMTNsLTAuMTEsMC4xNmwtMC4zNSwwLjA0bC0xLjgzLC0wLjYxbC01Ljg0LC0wLjEzbC0wLjEyLDAuMDJsLTAuNiwwLjI2bC0wLjg3LC0wLjA2bC0xLjAxLDAuMzJsLTAuMjYsLTEuMjZsMS45LDAuMDRsMC4xNiwtMC4wNGwwLjU0LC0wLjMybDAuMzcsLTAuMDJsMC4xNSwtMC4wNWwwLjc4LC0wLjVsMC45MiwwLjQ2bDAuMTIsMC4wM2wxLjA5LDAuMDRsMC4xNSwtMC4wM2wxLjA4LC0wLjU3bDAuMTEsLTAuNDRsLTAuNTEsLTAuNzRsLTAuMzksLTAuMWwtMC43NiwwLjM5bC0wLjYyLC0wLjAxbC0wLjkyLC0wLjU4bC0wLjE4LC0wLjA1bC0wLjc5LDAuMDRsLTAuMiwwLjA5bC0wLjQ4LDAuNTFsLTIuNDEsMC4wNlpcIiwgXCJuYW1lXCI6IFwiU2VuZWdhbFwifSwgXCJTTFwiOiB7XCJwYXRoXCI6IFwiTTM5Mi4xOSwyNjcuNTNsLTAuNDQsLTAuMTJsLTEuNzMsLTAuOTdsLTEuMjQsLTEuMjhsLTAuNCwtMC44NGwtMC4yNywtMS42NWwxLjIxLC0xLjBsMC4wOSwtMC4xMmwwLjI3LC0wLjY2bDAuMzIsLTAuNDFsMC41NiwtMC4wNWwwLjE2LC0wLjA3bDAuNSwtMC40MWwxLjc1LDAuMGwwLjU5LDAuNzdsMC40OSwwLjk2bC0wLjA3LDAuNjRsMC4wNCwwLjE5bDAuMzYsMC41OGwtMC4wMywwLjg0bDAuMjQsMC4ybC0wLjY0LDAuNjVsLTEuMTMsMS4zN2wtMC4wNiwwLjE0bC0wLjEyLDAuNjZsLTAuNDMsMC41OFpcIiwgXCJuYW1lXCI6IFwiU2llcnJhIExlb25lXCJ9LCBcIlNCXCI6IHtcInBhdGhcIjogXCJNODI2Ljc0LDMxMS41MWwwLjIzLDAuMjlsLTAuOTUsLTAuMDFsLTAuMzksLTAuNjNsMC42NSwwLjI3bDAuNDUsMC4wOVpNODI1LjAxLDMwOC41MmwtMS4xOCwtMS4zOWwtMC4zNywtMS4wNmwwLjI0LDAuMGwwLjgyLDEuODRsMC40OSwwLjZaTTgyMy4yMSwzMDkuNDJsLTAuNDQsMC4wM2wtMS40MywtMC4yNGwtMC4zMiwtMC4yNGwwLjA4LC0wLjVsMS4yOSwwLjMxbDAuNzIsMC40N2wwLjExLDAuMThaTTgxNy45LDMwMy44MWwyLjU5LDEuNDRsMC4zLDAuNDFsLTEuMjEsLTAuNjZsLTEuMzQsLTAuODlsLTAuMzQsLTAuM1pNODEzLjc3LDMwMi40bDAuNDgsMC4zNGwwLjEsMC4wOGwtMC4zMywtMC4xN2wtMC4yNSwtMC4yNVpcIiwgXCJuYW1lXCI6IFwiU29sb21vbiBJc2xhbmRzXCJ9LCBcIlNBXCI6IHtcInBhdGhcIjogXCJNNTI4LjI0LDI0My4xbC0wLjIsLTAuNjlsLTAuMDcsLTAuMTJsLTAuNjksLTAuNzFsLTAuMTgsLTAuOTRsLTAuMTIsLTAuMTlsLTEuMjQsLTAuODlsLTEuMjgsLTIuMDlsLTAuNywtMi4wOGwtMC4wNywtMC4xMWwtMS43MywtMS43OWwtMC4xMSwtMC4wN2wtMS4wMywtMC4zOWwtMS41NywtMi4zNmwtMC4yNywtMS43MmwwLjEsLTEuNTNsLTAuMDMsLTAuMTVsLTEuNDQsLTIuOTNsLTEuMjUsLTEuMTNsLTEuMzQsLTAuNTZsLTAuNzIsLTEuMzNsMC4xMSwtMC40OWwtMC4wMiwtMC4ybC0wLjcsLTEuMzhsLTAuMDgsLTAuMWwtMC42OCwtMC41NmwtMC45NywtMS45OGwtMi44LC00LjAzbC0wLjI1LC0wLjEzbC0wLjg1LDAuMDFsMC4yOSwtMS4xMWwwLjEyLC0wLjk3bDAuMjMsLTAuODFsMi41MiwwLjM5bDAuMjMsLTAuMDZsMS4wOCwtMC44NGwwLjYsLTAuOTVsMS43OCwtMC4zNWwwLjIyLC0wLjE3bDAuMzcsLTAuODNsMC43NCwtMC40MmwwLjA4LC0wLjQ2bC0yLjE3LC0yLjRsNC41NSwtMS4yNmwwLjEyLC0wLjA2bDAuMzYsLTAuMzJsMi44MywwLjcxbDMuNjcsMS45MWw3LjA0LDUuNWwwLjE3LDAuMDZsNC42NCwwLjIybDIuMDYsMC4yNGwwLjU1LDEuMTVsMC4yOCwwLjE3bDEuNTYsLTAuMDZsMC45LDIuMTVsMC4xNCwwLjE1bDEuMTQsMC41N2wwLjM5LDAuODVsMC4xMSwwLjEzbDEuNTksMS4wNmwwLjEyLDAuOTFsLTAuMjMsMC44M2wwLjAxLDAuMThsMC4zMiwwLjlsMC4wNywwLjExbDAuNjgsMC43bDAuMzMsMC44NmwwLjM3LDAuNjVsMC4wOSwwLjFsMC43NiwwLjUzbDAuMjUsMC4wNGwwLjQ1LC0wLjEybDAuMzUsMC43NWwwLjEsMC42M2wwLjk2LDIuNjhsMC4yMywwLjE5bDcuNTMsMS4zM2wwLjI3LC0wLjA5bDAuMjQsLTAuMjZsMC44NywxLjQxbC0xLjU4LDQuOTZsLTcuMzQsMi41NGwtNy4yOCwxLjAybC0yLjM0LDEuMTdsLTAuMTIsMC4xbC0xLjc0LDIuNjNsLTAuODYsMC4zMmwtMC40OSwtMC42OGwtMC4yOCwtMC4xMmwtMC45MiwwLjEybC0yLjMyLC0wLjI1bC0wLjQxLC0wLjIzbC0wLjE1LC0wLjA0bC0yLjg5LDAuMDZsLTAuNjMsMC4ybC0wLjkxLC0wLjU5bC0wLjQzLDAuMTFsLTAuNjYsMS4yN2wtMC4wMywwLjIxbDAuMjEsMC44OWwtMC42LDAuNDVaXCIsIFwibmFtZVwiOiBcIlNhdWRpIEFyYWJpYVwifSwgXCJTRVwiOiB7XCJwYXRoXCI6IFwiTTQ3Ni40Miw5MC40NGwtMC4xNSwwLjFsLTIuNDMsMi44NmwtMC4wNywwLjI0bDAuMzYsMi4zMWwtMy44NCwzLjFsLTQuODMsMy4zOGwtMC4xMSwwLjE1bC0xLjgyLDUuNDVsMC4wMywwLjI2bDEuNzgsMi42OGwyLjI3LDEuOTlsLTIuMTMsMy44OGwtMi40OSwwLjgybC0wLjIsMC4yNGwtMC45NSw2LjA1bC0xLjMyLDMuMDlsLTIuODIsLTAuMzJsLTAuMywwLjE2bC0xLjM0LDIuNjRsLTIuNDgsMC4xNGwtMC43NiwtMy4xNWwtMi4wOSwtNC4wNGwtMS44NSwtNS4wMWwxLjAzLC0xLjk4bDIuMDYsLTIuNTNsMC4wNiwtMC4xM2wwLjgzLC00LjQ1bC0wLjA2LC0wLjI1bC0xLjU0LC0xLjg2bC0wLjE1LC01LjBsMS41MiwtMy40OGwyLjI4LDAuMDZsMC4yNywtMC4xNmwwLjg3LC0xLjU5bC0wLjAxLC0wLjMxbC0wLjgsLTEuMjFsMy43OSwtNS42M2w0LjA3LC03LjU0bDIuMjMsMC4wMWwwLjI5LC0wLjIybDAuNTksLTIuMTVsNC40NiwwLjY2bDAuMzQsLTAuMjZsMC4zNCwtMi42NGwxLjIxLC0wLjE0bDMuMjQsMi4wOGwzLjc4LDIuODVsMC4wNiw2LjM3bDAuMDMsMC4xNGwwLjY3LDEuMjlsLTMuOTUsMS4wN1pcIiwgXCJuYW1lXCI6IFwiU3dlZGVuXCJ9LCBcIlNEXCI6IHtcInBhdGhcIjogXCJNNTA1Ljk4LDI1OS43NWwtMC4zMSwtMC45bC0wLjEsLTAuMTRsLTEuMiwtMC45M2wtMC4yNywtMS42NmwwLjI5LC0xLjgzbC0wLjI1LC0wLjM0bC0xLjE2LC0wLjE3bC0wLjMzLDAuMjFsLTAuMTEsMC4zN2wtMS4zLDAuMTFsLTAuMjEsMC40OWwwLjU1LDAuNjhsMC4xOCwxLjI5bC0xLjMxLDEuMzNsLTEuMTgsMS43MmwtMS4wNCwwLjIxbC0yLjAsLTEuNGwtMC4zMiwtMC4wMmwtMC45NSwwLjUybC0wLjE0LDAuMTZsLTAuMjEsMC42bC0xLjE2LDAuNDNsLTAuMTksMC4yM2wtMC4wNCwwLjI3bC0yLjA4LDAuMGwtMC4yNSwtMC4zOWwtMC4yNCwtMC4xM2wtMS44MSwtMC4wOWwtMC4xNCwwLjAzbC0wLjgsMC4zOGwtMC40OSwtMC4xNmwtMS4yMiwtMS4zOWwtMC40MiwtMC42N2wtMC4zMSwtMC4xNGwtMS44MSwwLjM1bC0wLjIsMC4xNGwtMC43MiwxLjI0bC0wLjYxLDIuMTRsLTAuNzMsMC40bC0wLjYyLDAuMjJsLTAuODMsLTAuNjhsLTAuMTIsLTAuNmwwLjM4LC0wLjk3bDAuMDEsLTEuMTRsLTAuMDgsLTAuMmwtMS4zOSwtMS41M2wtMC4yNSwtMC45N2wwLjAzLC0wLjU3bC0wLjExLC0wLjI1bC0wLjgxLC0wLjY2bC0wLjAzLC0xLjM0bC0wLjA0LC0wLjE0bC0wLjUyLC0wLjk4bC0wLjMxLC0wLjE1bC0wLjQyLDAuMDdsMC4xMiwtMC40NGwwLjYzLC0xLjAzbDAuMDMsLTAuMjNsLTAuMjQsLTAuODhsMC42OSwtMC42NmwwLjAyLC0wLjQxbC0wLjQsLTAuNDZsMC41OCwtMS4zOWwxLjA0LC0xLjcxbDEuOTcsMC4xNmwwLjMyLC0wLjNsLTAuMTIsLTEwLjI0bDAuMDIsLTAuOGwyLjU5LC0wLjAxbDAuMywtMC4zbDAuMCwtNC45MmwyOS4xOSwwLjBsMC42OCwyLjE3bC0wLjQsMC4zNWwtMC4xLDAuMjdsMC4zNiwyLjY5bDAuOTMsMy4xNWwwLjEyLDAuMTZsMi4wNSwxLjRsLTAuOTksMS4xNWwtMS43NSwwLjRsLTAuMTUsMC4wOGwtMC43OSwwLjc5bC0wLjA4LDAuMTdsLTAuMjQsMS42OWwtMS4wNywzLjc1bC0wLjAsMC4xNmwwLjI1LDAuOTZsLTAuMzgsMi4xbC0wLjk4LDIuNDFsLTEuNTIsMS4zbC0xLjA3LDEuOTRsLTAuMjUsMC45OWwtMS4wOCwwLjY0bC0wLjEzLDAuMThsLTAuNDYsMS42NVpcIiwgXCJuYW1lXCI6IFwiU3VkYW5cIn0sIFwiRE9cIjoge1wicGF0aFwiOiBcIk0yNDEuNywyMzQuOTdsMC4xNSwtMC4yMmwxLjczLDAuMDFsMS40MywwLjY0bDAuMTUsMC4wM2wwLjQ1LC0wLjA0bDAuMzYsMC43NGwwLjI4LDAuMTdsMS4wMiwtMC4wNGwtMC4wNCwwLjQzbDAuMjcsMC4zM2wxLjAzLDAuMDlsMC45MSwwLjdsLTAuNTcsMC42NGwtMC45OSwtMC40N2wtMC4xNiwtMC4wM2wtMS4xMSwwLjExbC0wLjc5LC0wLjEybC0wLjI2LDAuMDlsLTAuMzgsMC40bC0wLjY2LDAuMTFsLTAuMjgsLTAuNDVsLTAuMzgsLTAuMTJsLTAuODMsMC4zN2wtMC4xNCwwLjEzbC0wLjg1LDEuNDlsLTAuMjcsLTAuMTdsLTAuMSwtMC41OGwwLjA1LC0wLjY3bC0wLjA3LC0wLjIxbC0wLjQ0LC0wLjUzbDAuMzUsLTAuMjVsMC4xMiwtMC4xOWwwLjE5LC0xLjBsLTAuMiwtMS40WlwiLCBcIm5hbWVcIjogXCJEb21pbmljYW4gUmVwdWJsaWNcIn0sIFwiREpcIjoge1wicGF0aFwiOiBcIk01MjguNzgsMjUzLjM2bDAuMzQsMC40NWwtMC4wNiwwLjc2bC0xLjI2LDAuNTRsLTAuMDUsMC41M2wwLjgyLDAuNTNsLTAuNTcsMC44M2wtMC4zLC0wLjI1bC0wLjI3LC0wLjA1bC0wLjU2LDAuMTdsLTEuMDcsLTAuMDNsLTAuMDQsLTAuNTZsLTAuMTYsLTAuNTZsMC43NiwtMS4wN2wwLjc2LC0wLjk3bDAuODksMC4xOGwwLjI1LC0wLjA2bDAuNTEsLTAuNDJaXCIsIFwibmFtZVwiOiBcIkRqaWJvdXRpXCJ9LCBcIkRLXCI6IHtcInBhdGhcIjogXCJNNDUyLjQsMTI5LjA3bC0xLjI3LDIuMzlsLTIuMjUsLTEuNjlsLTAuMjYsLTEuMDhsMy4xNSwtMS4wbDAuNjMsMS4zOVpNNDQ3Ljg3LDEyNi4yNWwtMC4zNSwwLjc2bC0wLjQ3LC0wLjI0bC0wLjM4LDAuMDlsLTEuOCwyLjUzbC0wLjAzLDAuMjlsMC41NiwxLjRsLTEuMjIsMC40bC0xLjY4LC0wLjQxbC0wLjkyLC0xLjc2bC0wLjA3LC0zLjQ3bDAuMzgsLTAuODhsMC42MiwtMC45M2wyLjA3LC0wLjIxbDAuMTksLTAuMWwwLjg0LC0wLjk1bDEuNSwtMC43NmwtMC4wNiwxLjI2bC0wLjcsMS4xbC0wLjAzLDAuMjVsMC4zLDEuMGwwLjE4LDAuMTlsMS4wNiwwLjQyWlwiLCBcIm5hbWVcIjogXCJEZW5tYXJrXCJ9LCBcIkRFXCI6IHtcInBhdGhcIjogXCJNNDQ1LjUxLDEzMS42OWwwLjAzLDAuOTRsMC4yMSwwLjI4bDIuMzIsMC43NGwtMC4wMiwxLjBsMC4zNywwLjNsMi41NSwtMC42NWwxLjM2LC0wLjg5bDIuNjMsMS4yN2wxLjA5LDEuMDFsMC41MSwxLjUxbC0wLjYsMC43OGwtMC4wLDAuMzZsMC44OCwxLjE3bDAuNTgsMS42OGwtMC4xOCwxLjA4bDAuMDMsMC4xOGwwLjg3LDEuODFsLTAuNjYsMC4ybC0wLjU1LC0wLjMybC0wLjM2LDAuMDVsLTAuNTgsMC41OGwtMS43MywwLjYybC0wLjk5LDAuODRsLTEuNzcsMC43bC0wLjE2LDAuNGwwLjQyLDAuOTRsMC4yNiwxLjM0bDAuMTQsMC4ybDEuMjUsMC43NmwxLjIyLDEuMmwtMC43MSwxLjJsLTAuODEsMC4zN2wtMC4xNywwLjMybDAuMzQsMS45OWwtMC4wNCwwLjA5bC0wLjQ3LC0wLjM5bC0wLjE3LC0wLjA3bC0xLjIsLTAuMWwtMS44NSwwLjU3bC0yLjE1LC0wLjEzbC0wLjI5LDAuMThsLTAuMjEsMC41bC0wLjk2LC0wLjY3bC0wLjI0LC0wLjA1bC0wLjY3LDAuMTZsLTIuNiwtMC45NGwtMC4zNCwwLjFsLTAuNDIsMC41N2wtMS42NCwtMC4wMmwwLjI2LC0xLjg4bDEuMjQsLTIuMTVsLTAuMjEsLTAuNDVsLTMuNTQsLTAuNThsLTAuOTgsLTAuNzFsMC4xMiwtMS4yNmwtMC4wNSwtMC4ybC0wLjQ0LC0wLjY0bDAuMjcsLTIuMThsLTAuMzgsLTMuMTRsMS4xNywtMC4wbDAuMjcsLTAuMTdsMC42MywtMS4yNmwwLjY1LC0zLjE3bC0wLjAyLC0wLjE3bC0wLjQxLC0xLjBsMC4zMiwtMC40N2wxLjc3LC0wLjE2bDAuMzcsMC42bDAuNDcsMC4wNmwxLjcsLTEuNjlsMC4wNiwtMC4zM2wtMC41NSwtMS4yNGwtMC4wOSwtMS41MWwxLjUsMC4zNmwwLjE2LC0wLjAxbDEuMjIsLTAuNFpcIiwgXCJuYW1lXCI6IFwiR2VybWFueVwifSwgXCJZRVwiOiB7XCJwYXRoXCI6IFwiTTU1My41MywyNDIuNjVsLTEuNTEsMC41OGwtMC4xNywwLjE2bC0wLjQ4LDEuMTRsLTAuMDcsMC43OWwtMi4zMSwxLjBsLTMuOTgsMS4xOWwtMi4yOCwxLjhsLTAuOTcsMC4xMmwtMC43LC0wLjE0bC0wLjIzLDAuMDVsLTEuNDIsMS4wM2wtMS41MSwwLjQ3bC0yLjA3LDAuMTNsLTAuNjgsMC4xNWwtMC4xNywwLjFsLTAuNDksMC42bC0wLjU3LDAuMTZsLTAuMTgsMC4xM2wtMC4zLDAuNDlsLTEuMDYsLTAuMDVsLTAuMTMsMC4wMmwtMC43MywwLjMybC0xLjQ4LC0wLjExbC0wLjU1LC0xLjI2bDAuMDcsLTEuMzJsLTAuMDQsLTAuMTZsLTAuMzksLTAuNzJsLTAuNDgsLTEuODVsLTAuNTIsLTAuNzlsMC4wOCwtMC4wMmwwLjIyLC0wLjM2bC0wLjIzLC0xLjA1bDAuMjQsLTAuMzlsMC4wNCwtMC4xOWwtMC4wOSwtMC45NWwwLjk2LC0wLjcybDAuMTEsLTAuMzFsLTAuMjMsLTAuOThsMC40NiwtMC44OGwwLjc1LDAuNDlsMC4yNiwwLjAzbDAuNjMsLTAuMjJsMi43NiwtMC4wNmwwLjUsMC4yNWwyLjQyLDAuMjZsMC44NSwtMC4xMWwwLjUyLDAuNzFsMC4zNSwwLjFsMS4xNywtMC40M2wwLjE1LC0wLjEybDEuNzUsLTIuNjRsMi4yMiwtMS4xMWw2Ljk1LC0wLjk2bDIuNTUsNS41OFpcIiwgXCJuYW1lXCI6IFwiWWVtZW5cIn0sIFwiQVRcIjoge1wicGF0aFwiOiBcIk00NjMuMTcsMTU0LjE1bC0wLjE0LDAuOTlsLTEuMTUsMC4wMWwtMC4yNCwwLjQ3bDAuMzksMC41NmwtMC43NSwxLjg0bC0wLjM2LDAuNGwtMi4wNiwwLjA3bC0wLjE0LDAuMDRsLTEuMTgsMC42N2wtMS45NiwtMC4yM2wtMy40MywtMC43OGwtMC41LC0wLjk3bC0wLjMzLC0wLjE2bC0yLjQ3LDAuNTVsLTAuMiwwLjE2bC0wLjE4LDAuMzdsLTEuMjcsLTAuMzhsLTEuMjgsLTAuMDlsLTAuODEsLTAuNDFsMC4yNSwtMC41MWwwLjAzLC0wLjE4bC0wLjA1LC0wLjI4bDAuMzUsLTAuMDhsMS4xNiwwLjgxbDAuNDUsLTAuMTNsMC4yNywtMC42NGwyLjAsMC4xMmwxLjg0LC0wLjU3bDEuMDUsMC4wOWwwLjcxLDAuNTlsMC40NywtMC4xMWwwLjIzLC0wLjU0bDAuMDIsLTAuMTdsLTAuMzIsLTEuODVsMC42OSwtMC4zMWwwLjEzLC0wLjEybDAuNzMsLTEuMjNsMS42MSwwLjg5bDAuMzUsLTAuMDRsMS4zNSwtMS4yN2wwLjcsLTAuMTlsMS44NCwwLjkzbDAuMTgsMC4wM2wxLjA4LC0wLjE1bDAuODEsMC40M2wtMC4wNywwLjE1bC0wLjAyLDAuMmwwLjI0LDEuMDZaXCIsIFwibmFtZVwiOiBcIkF1c3RyaWFcIn0sIFwiRFpcIjoge1wicGF0aFwiOiBcIk00NTAuNTgsMjI0Ljk0bC04LjMxLDQuODZsLTcuMjMsNS4xMmwtMy40NiwxLjEzbC0yLjQyLDAuMjJsLTAuMDIsLTEuMzNsLTAuMiwtMC4yOGwtMS4xNSwtMC40MmwtMS40NSwtMC42OWwtMC41NSwtMS4xM2wtMC4xLC0wLjEybC04LjQ1LC01LjcybC0xNy43MiwtMTIuMTdsMC4wMywtMC4zOGwtMC4wMiwtMy4yMWwzLjg0LC0xLjkxbDIuNDYsLTAuNDFsMi4xLC0wLjc1bDAuMTQsLTAuMTFsMC45LC0xLjNsMi44NCwtMS4wNmwwLjE5LC0wLjI3bDAuMDksLTEuODFsMS4yMSwtMC4ybDAuMTUsLTAuMDdsMS4wNiwtMC45NmwzLjE5LC0wLjQ2bDAuMjMsLTAuMThsMC40NiwtMS4wOGwtMC4wOCwtMC4zNGwtMC42LC0wLjU0bC0wLjgzLC0yLjg1bC0wLjE4LC0xLjhsLTAuODIsLTEuNTdsMi4xMywtMS4zN2wyLjY1LC0wLjQ5bDAuMTMsLTAuMDVsMS41NSwtMS4xNWwyLjM0LC0wLjg1bDQuMiwtMC41MWw0LjA3LC0wLjIzbDEuMjEsMC40MWwwLjIzLC0wLjAxbDIuMywtMS4xMWwyLjUyLC0wLjAybDAuOTQsMC42MmwwLjIsMC4wNWwxLjI1LC0wLjEzbC0wLjM2LDEuMDNsLTAuMDEsMC4xNGwwLjM5LDIuNjZsLTAuNTYsMi4ybC0xLjQ5LDEuNTJsLTAuMDgsMC4yNGwwLjIyLDIuMTJsMC4xMSwwLjJsMS45NCwxLjU4bDAuMDIsMC41NGwwLjEyLDAuMjNsMS40NSwxLjA2bDEuMDQsNC44NWwwLjgxLDIuNDJsMC4xMywxLjE5bC0wLjQzLDIuMTdsMC4xNywxLjI4bC0wLjMxLDEuNTNsMC4yLDEuNTZsLTAuOSwxLjAybC0wLjAxLDAuMzhsMS40MywxLjg4bDAuMDksMS4wNmwwLjA0LDAuMTNsMC44OSwxLjQ4bDAuMzcsMC4xMmwxLjAzLC0wLjQzbDEuNzksMS4xMmwwLjg5LDEuMzRaXCIsIFwibmFtZVwiOiBcIkFsZ2VyaWFcIn0sIFwiVVNcIjoge1wicGF0aFwiOiBcIk04OTIuNjQsOTkuMDVsMS4xNiwwLjU3bDAuMjEsMC4wMmwxLjQ1LC0wLjM4bDEuOTIsMC45OWwyLjE3LDAuNDdsLTEuNjUsMC43MmwtMS43NSwtMC43OWwtMC45MywtMC43bC0wLjIxLC0wLjA2bC0yLjExLDAuMjJsLTAuMzUsLTAuMmwwLjA5LC0wLjg3Wk0xODMuMjksMTUwLjM3bDAuMzksMS41NGwwLjEyLDAuMTdsMC43OCwwLjU1bDAuMTQsMC4wNWwxLjc0LDAuMmwyLjUyLDAuNWwyLjQsMC45OGwwLjE3LDAuMDJsMS45NiwtMC40bDMuMDEsMC44MWwwLjkxLC0wLjAybDIuMjIsLTAuODhsNC42NywyLjMzbDMuODYsMi4wMWwwLjIxLDAuNzFsMC4xNSwwLjE4bDAuMzMsMC4xN2wtMC4wMiwwLjA1bDAuMjMsMC40M2wwLjY3LDAuMWwwLjIxLC0wLjA1bDAuMSwtMC4wN2wwLjA1LDAuMjlsMC4wOSwwLjE2bDAuNSwwLjVsMC4yMSwwLjA5bDAuNTYsMC4wbDAuMTMsMC4xM2wtMC4yLDAuMzZsMC4xMiwwLjQxbDIuNDksMS4zOWwwLjk5LDUuMjRsLTAuNjksMS42OGwtMS4xNiwxLjY0bC0wLjYsMS4xOGwtMC4wNiwwLjMxbDAuMDQsMC4yMmwwLjI4LDAuNDNsMC4xMSwwLjFsMC44NSwwLjQ3bDAuMTUsMC4wNGwwLjYzLDAuMGwwLjE0LC0wLjA0bDIuODcsLTEuNThsMi42LC0wLjQ5bDMuMjgsLTEuNWwwLjE3LC0wLjIzbDAuMDQsLTAuNDNsLTAuMjMsLTAuOTNsLTAuMjQsLTAuMzlsMC43NCwtMC4zMmw0LjcsLTAuMDFsMC4yNSwtMC4xM2wwLjc3LC0xLjE1bDIuOSwtMi40MWwxLjA0LC0wLjUybDguMzUsLTAuMDJsMC4yOCwtMC4yMWwwLjIsLTAuNmwwLjcsLTAuMTRsMS4wNiwtMC40OGwwLjEzLC0wLjExbDAuOTIsLTEuNDlsMC43NSwtMi4zOWwxLjY3LC0yLjA4bDAuNTksMC42bDAuMywwLjA3bDEuNTIsLTAuNDlsMC44OCwwLjcybC0wLjAsNC4xNGwwLjA4LDAuMmwxLjYsMS43MmwwLjMxLDAuNzJsLTIuNDIsMS4zNWwtMi41NSwxLjA1bC0yLjY0LDAuOWwtMC4xNCwwLjExbC0xLjMzLDEuODFsLTAuNDQsMC43bC0wLjA1LDAuMTVsLTAuMDMsMS42bDAuMDMsMC4xNGwwLjgzLDEuNTlsMC4yNCwwLjE2bDAuNzgsMC4wNmwtMS4xNSwwLjMzbC0xLjI1LC0wLjA0bC0xLjgzLDAuNTJsLTIuNTEsMC4yOWwtMi4xNywwLjg4bC0wLjE3LDAuMzZsMC4zMywwLjIybDMuNTUsLTAuNTRsMC4xNSwwLjExbC0yLjg3LDAuNzNsLTEuMTksMC4wbC0wLjE2LC0wLjMzbC0wLjM2LDAuMDZsLTAuNzYsMC44MmwwLjE3LDAuNWwwLjQyLDAuMDhsLTAuNDUsMS43NWwtMS40LDEuNzRsLTAuMDQsLTAuMTdsLTAuMjEsLTAuMjJsLTAuNDgsLTAuMTNsLTAuNzcsLTAuNjlsLTAuMzYsLTAuMDNsLTAuMTIsMC4zNGwwLjUyLDEuNThsMC4wOSwwLjE0bDAuNTIsMC40M2wwLjAzLDAuODdsLTAuNzQsMS4wNWwtMC4zOSwwLjYzbDAuMDUsLTAuMTJsLTAuMDgsLTAuMzRsLTEuMTksLTEuMDNsLTAuMjgsLTIuMzFsLTAuMjYsLTAuMjZsLTAuMzIsMC4xOWwtMC40OCwxLjI3bC0wLjAxLDAuMTlsMC4zOSwxLjMzbC0xLjE0LC0wLjMxbC0wLjM2LDAuMThsMC4xNCwwLjM4bDEuNTcsMC44NWwwLjEsMi41OGwwLjIyLDAuMjhsMC41NSwwLjE1bDAuMjEsMC44MWwwLjMzLDIuNzJsLTEuNDYsMS45NGwtMi41LDAuODFsLTAuMTIsMC4wN2wtMS41OCwxLjU4bC0xLjE1LDAuMTdsLTAuMTUsMC4wNmwtMS4yNywxLjAzbC0wLjA5LDAuMTNsLTAuMzIsMC44NWwtMi43MSwxLjc5bC0xLjQ1LDEuMzdsLTEuMTgsMS42NGwtMC4wNSwwLjEybC0wLjM5LDEuOTZsMC4wLDAuMTNsMC40NCwxLjkxbDAuODUsMi4zN2wxLjEsMS45MWwwLjAzLDEuMmwxLjE2LDMuMDdsLTAuMDgsMS43NGwtMC4xLDAuOTlsLTAuNTcsMS40OGwtMC41NCwwLjI0bC0wLjk3LC0wLjI2bC0wLjM0LC0xLjAybC0wLjEyLC0wLjE2bC0wLjg5LC0wLjU4bC0yLjQ0LC00LjI4bC0wLjM0LC0wLjk0bDAuNDksLTEuNzFsLTAuMDIsLTAuMjFsLTAuNywtMS41bC0yLjAsLTIuMzVsLTAuMTEsLTAuMDhsLTAuOTgsLTAuNDJsLTAuMjUsMC4wMWwtMi40MiwxLjE5bC0wLjI2LC0wLjA4bC0xLjI2LC0xLjI5bC0xLjU3LC0wLjY4bC0wLjE2LC0wLjAybC0yLjc5LDAuMzRsLTIuMTgsLTAuM2wtMS45OCwwLjE5bC0xLjEyLDAuNDVsLTAuMTQsMC40NGwwLjQsMC42NWwtMC4wNCwxLjAybDAuMDksMC4yMmwwLjI5LDAuM2wtMC4wNiwwLjA1bC0wLjc3LC0wLjMzbC0wLjI2LDAuMDFsLTAuODcsMC40OGwtMS42NCwtMC4wOGwtMS43OSwtMS4zOWwtMC4yMywtMC4wNmwtMi4xMSwwLjMzbC0xLjc1LC0wLjYxbC0wLjE0LC0wLjAxbC0xLjYxLDAuMmwtMi4xMSwwLjY0bC0wLjExLDAuMDZsLTIuMjUsMS45OWwtMi41MywxLjIxbC0xLjQzLDEuMzhsLTAuNTgsMS4yMmwtMC4wMywwLjEybC0wLjAzLDEuODZsMC4xMywxLjMybDAuMywwLjYybC0wLjQ2LDAuMDRsLTEuNzEsLTAuNTdsLTEuODUsLTAuNzlsLTAuNjMsLTEuMTRsLTAuNTQsLTEuODVsLTAuMDcsLTAuMTJsLTEuNDUsLTEuNTFsLTAuODYsLTEuNThsLTEuMjYsLTEuODdsLTAuMDksLTAuMDlsLTEuNzYsLTEuMDlsLTAuMTcsLTAuMDRsLTIuMDUsMC4wNWwtMC4yMywwLjEybC0xLjQ0LDEuOTdsLTEuODQsLTAuNzJsLTEuMTksLTAuNzZsLTAuNiwtMS40NWwtMC45LC0xLjUybC0xLjQ5LC0xLjIxbC0xLjI3LC0wLjg3bC0wLjg5LC0wLjk2bC0wLjIyLC0wLjFsLTQuMzQsLTAuMGwtMC4zLDAuM2wtMC4wLDAuODRsLTYuNjIsMC4wMmwtNS42NiwtMS45M2wtMy40OCwtMS4yNGwwLjExLC0wLjI1bC0wLjMsLTAuNDJsLTMuMTgsMC4zbC0yLjYsMC4ybC0wLjM1LC0xLjE5bC0wLjA4LC0wLjEzbC0xLjYyLC0xLjYxbC0wLjEzLC0wLjA4bC0xLjAyLC0wLjI5bC0wLjIyLC0wLjY2bC0wLjI1LC0wLjJsLTEuMzEsLTAuMTNsLTAuODIsLTAuN2wtMC4xNiwtMC4wN2wtMi4yNSwtMC4yN2wtMC40OCwtMC4zNGwtMC4yOCwtMS40NGwtMC4wNywtMC4xNGwtMi40MSwtMi44NGwtMi4wMywtMy44OWwwLjA4LC0wLjU4bC0wLjEsLTAuMjdsLTEuMDgsLTAuOTRsLTEuODcsLTIuMzZsLTAuMzMsLTIuMzFsLTAuMDcsLTAuMTVsLTEuMjQsLTEuNWwwLjUyLC0yLjRsLTAuMDksLTIuNTdsLTAuNzgsLTIuM2wwLjk2LC0yLjgzbDAuNjEsLTUuNjZsLTAuNDYsLTQuMjZsLTAuNzksLTIuNzFsLTAuNjgsLTEuNGwwLjEzLC0wLjI2bDMuMjQsMC45N2wxLjI4LDIuODhsMC41MiwwLjA2bDAuNjIsLTAuODRsMC4wNiwtMC4yMmwtMC40LC0yLjYxbC0wLjc0LC0yLjI5bDY4LjksLTAuMGwwLjMsLTAuM2wwLjAxLC0wLjk1bDAuMzIsLTAuMDFaTTMyLjUsNjcuNDNsMS43NSwxLjk5bDAuNDEsMC4wNGwxLjAyLC0wLjgxbDMuNzksMC4yNWwtMC4xLDAuNzJsMC4yNCwwLjM0bDMuODMsMC43N2wyLjYsLTAuNDRsNS4yMSwxLjQxbDQuODQsMC40M2wxLjksMC41N2wwLjE1LDAuMDFsMy4yNSwtMC43MWwzLjcyLDEuMzJsMi41MiwwLjU4bC0wLjAzLDM4LjE0bDAuMjksMC4zbDIuNDEsMC4xMWwyLjM0LDEuMGwxLjcsMS41OWwyLjIyLDIuNDJsMC40MiwwLjAzbDIuNDEsLTIuMDRsMi4yNSwtMS4wOGwxLjIzLDEuNzZsMS43MSwxLjUzbDIuMjQsMS42MmwxLjU0LDIuNTZsMi41Niw0LjA5bDAuMTEsMC4xMWw0LjEsMi4xN2wwLjA2LDEuOTNsLTEuMTIsMS4zNWwtMS4yMiwtMS4xNGwtMi4wOCwtMS4wNWwtMC42OCwtMi45NGwtMC4wOSwtMC4xNmwtMy4xOCwtMi44NGwtMS4zMiwtMy4zNWwtMC4yNSwtMC4xOWwtMi40MywtMC4yNGwtMy45MywtMC4wOWwtMi44NSwtMS4wMmwtNS4yNCwtMy44NWwtNi43NywtMi4wNGwtMy41MiwwLjNsLTQuODQsLTEuN2wtMi45NiwtMS42bC0wLjIzLC0wLjAybC0yLjc4LDAuOGwtMC4yMSwwLjM1bDAuNDYsMi4zMWwtMS4xMSwwLjE5bC0yLjksMC43OGwtMi4yNCwxLjI2bC0yLjQyLDAuNjhsLTAuMjksLTEuNzlsMS4wNywtMy40OWwyLjU0LC0xLjExbDAuMTIsLTAuNDVsLTAuNjksLTAuOTZsLTAuNDEsLTAuMDdsLTMuMTksMi4xMmwtMS43NiwyLjU0bC0zLjU3LDIuNjJsLTAuMDMsMC40NmwxLjYzLDEuNTlsLTIuMTQsMi4zOGwtMi42NCwxLjQ5bC0yLjQ5LDEuMDlsLTAuMTYsMC4xN2wtMC41OCwxLjQ4bC0zLjgsMS43OWwtMC4xNCwwLjE0bC0wLjc1LDEuNTdsLTIuNzUsMS40MWwtMS42MiwtMC4yNWwtMC4xNiwwLjAybC0yLjM1LDAuOThsLTIuNTQsMS4xOWwtMi4wNiwxLjE1bC00LjA1LDAuOTNsLTAuMSwtMC4xNWwyLjQ1LC0xLjQ1bDIuNDksLTEuMWwyLjYxLC0xLjg4bDMuMDMsLTAuMzlsMC4xOSwtMC4xbDEuMiwtMS40MWwzLjQzLC0yLjExbDAuNjEsLTAuNzVsMS44MSwtMS4yNGwwLjEzLC0wLjJsMC40MiwtMi43bDEuMjQsLTIuMTJsLTAuMDMsLTAuMzVsLTAuMzQsLTAuMDlsLTIuNzMsMS4wNWwtMC42NywtMC41M2wtMC4zOSwwLjAybC0xLjEzLDEuMTFsLTEuNDMsLTEuNjJsLTAuNDksMC4wNmwtMC40MSwwLjhsLTAuNjcsLTEuMzFsLTAuNDIsLTAuMTJsLTIuNDMsMS40M2wtMS4xOCwtMC4wbC0wLjE4LC0xLjg2bDAuNDMsLTEuM2wtMC4wOSwtMC4zM2wtMS42MSwtMS4zM2wtMC4yNiwtMC4wNmwtMy4xMSwwLjY4bC0yLjAsLTEuNjZsLTEuNjEsLTAuODVsLTAuMDEsLTEuOTdsLTAuMTEsLTAuMjNsLTEuNzYsLTEuNDhsMC44NiwtMS45NmwyLjAxLC0yLjEzbDAuODgsLTEuOTRsMS43OSwtMC4yNWwxLjY1LDAuNmwwLjMxLC0wLjA2bDEuOTEsLTEuOGwxLjY3LDAuMzFsMC4yMiwtMC4wNGwxLjkxLC0xLjIzbDAuMTMsLTAuMzNsLTAuNDcsLTEuODJsLTAuMTUsLTAuMTlsLTEuMCwtMC41MmwxLjUxLC0xLjI3bDAuMDksLTAuMzRsLTAuMjksLTAuMTlsLTEuNjIsMC4wNmwtMi42NiwwLjg4bC0wLjEzLDAuMDlsLTAuNjIsMC43MmwtMS43NywtMC44bC0wLjE2LC0wLjAybC0zLjQ4LDAuNDRsLTMuNSwtMC45MmwtMS4wNiwtMS42MWwtMi43OCwtMi4wOWwzLjA3LC0xLjUxbDUuNTIsLTIuMDFsMS42NSwwLjBsLTAuMjgsMS43M2wwLjMxLDAuMzVsNS4yOSwtMC4xNmwwLjIzLC0wLjQ5bC0yLjAzLC0yLjU5bC0wLjEsLTAuMDhsLTMuMDMsLTEuNThsLTEuNzksLTIuMTJsLTIuNCwtMS44M2wtMy4xOCwtMS4yN2wxLjEzLC0xLjg0bDQuMjgsLTAuMTRsMC4xNSwtMC4wNWwzLjE2LC0yLjBsMC4xMywtMC4xN2wwLjU3LC0yLjA3bDIuNDMsLTIuMDJsMi40MiwtMC41Mmw0LjY3LC0xLjk4bDIuMjIsMC4yOWwwLjIsLTAuMDRsMy43NCwtMi4zN2wzLjU3LDAuOTFaTTM3LjY2LDEyMy40OWwtMi4zMSwxLjI2bC0xLjA0LC0wLjc1bC0wLjMxLC0xLjM1bDIuMDYsLTEuMTZsMS4yNCwtMC41MWwxLjQ4LDAuMjJsMC43NiwwLjgxbC0xLjg5LDEuNDlaTTMwLjg5LDIzMy44NGwxLjIsMC41N2wwLjM1LDAuM2wwLjQ4LDAuNjlsLTEuNiwwLjg2bC0wLjMsMC4zMWwtMC4yNCwtMC4xNGwwLjA1LC0wLjU0bC0wLjAyLC0wLjE1bC0wLjM2LC0wLjgzbDAuMDUsLTAuMTJsMC4zOSwtMC4zOGwwLjA3LC0wLjMxbC0wLjA5LC0wLjI3Wk0yOS4wNiwyMzEuODlsMC41LDAuMTRsMC4zMSwwLjE5bC0wLjQ2LDAuMWwtMC4zNCwtMC40M1pNMjUuMDIsMjMwLjEzbDAuMiwtMC4xMWwwLjQsMC40N2wtMC40MywtMC4wNWwtMC4xNywtMC4zMVpNMjEuMjksMjI4LjY4bDAuMSwtMC4wN2wwLjIyLDAuMDJsMC4wMiwwLjIxbC0wLjAyLDAuMDJsLTAuMzIsLTAuMThaTTYuMCwxMTMuMzNsLTEuMTksMC40NWwtMS41LC0wLjY0bC0wLjk0LC0wLjYzbDEuNzYsLTAuNDZsMS43MSwwLjI5bDAuMTYsMC45OFpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhXCJ9LCBcIkxWXCI6IHtcInBhdGhcIjogXCJNNDczLjk5LDEyNy4xNmwwLjA3LC0yLjE1bDEuMTUsLTIuMTFsMi4wNSwtMS4wN2wxLjg0LDIuNDhsMC4yNSwwLjEybDIuMDEsLTAuMDdsMC4yOSwtMC4yNWwwLjQ1LC0yLjU4bDEuODUsLTAuNTZsMC45OCwwLjRsMi4xMywxLjMzbDAuMTYsMC4wNWwxLjk3LDAuMDFsMS4wMiwwLjdsMC4yMSwxLjY3bDAuNzEsMS44NGwtMi40NCwxLjIzbC0xLjM2LDAuNTNsLTIuMjgsLTEuNjJsLTAuMTIsLTAuMDVsLTEuMTgsLTAuMmwtMC4yOCwtMC42bC0wLjMxLC0wLjE3bC0yLjQzLDAuMzVsLTQuMTcsLTAuMjNsLTAuMTIsMC4wMmwtMi40NSwwLjkzWlwiLCBcIm5hbWVcIjogXCJMYXR2aWFcIn0sIFwiVVlcIjoge1wicGF0aFwiOiBcIk0yNzYuOSwzNjMuMTdsMS4zLC0wLjIzbDIuNCwyLjA0bDAuMjIsMC4wN2wwLjgyLC0wLjA3bDIuNDgsMS43bDEuOTMsMS41bDEuMjgsMS42N2wtMC45NSwxLjE0bC0wLjA0LDAuMzFsMC42MywxLjQ1bC0wLjk2LDEuNTdsLTIuNjUsMS40N2wtMS43MywtMC41M2wtMC4xNSwtMC4wMWwtMS4yNSwwLjI4bC0yLjIyLC0xLjE2bC0wLjE2LC0wLjAzbC0xLjU2LDAuMDhsLTEuMzMsLTEuMzZsMC4xNywtMS41OGwwLjQ4LC0wLjU1bDAuMDcsLTAuMmwtMC4wMiwtMi43NGwwLjY2LC0yLjhsMC41NywtMi4wMlpcIiwgXCJuYW1lXCI6IFwiVXJ1Z3VheVwifSwgXCJMQlwiOiB7XCJwYXRoXCI6IFwiTTUxMC40NCwxOTguMTFsLTAuNDgsMC4wM2wtMC4yNiwwLjE3bC0wLjE1LDAuMzJsLTAuMjEsLTAuMGwwLjcyLC0xLjg1bDEuMTksLTEuOWwwLjc0LDAuMDlsMC4yNywwLjczbC0xLjE5LDAuOTNsLTAuMDksMC4xM2wtMC41NCwxLjM2WlwiLCBcIm5hbWVcIjogXCJMZWJhbm9uXCJ9LCBcIkxBXCI6IHtcInBhdGhcIjogXCJNNjg0Ljg3LDI0OC44bDAuNjEsLTAuODZsMC4wNSwtMC4xNmwwLjExLC0yLjE3bC0wLjA4LC0wLjIybC0xLjk2LC0yLjE2bC0wLjE1LC0yLjQ0bC0wLjA4LC0wLjE4bC0xLjksLTIuMWwtMC4xOSwtMC4xbC0xLjg5LC0wLjE4bC0wLjI5LDAuMTVsLTAuNDIsMC43NmwtMS4yMSwwLjA2bC0wLjY3LC0wLjQxbC0wLjMxLC0wLjBsLTIuMiwxLjI5bC0wLjA1LC0xLjc3bDAuNjEsLTIuN2wtMC4yNywtMC4zN2wtMS40NCwtMC4xbC0wLjEyLC0xLjMxbC0wLjEyLC0wLjIxbC0wLjg3LC0wLjY1bDAuMzgsLTAuNjhsMS43NiwtMS40MWwwLjA4LDAuMjJsMC4yNywwLjJsMS4zMywwLjA3bDAuMzEsLTAuMzRsLTAuMzUsLTIuNzVsMC44NSwtMC4yNWwxLjMyLDEuODhsMS4xMSwyLjM2bDAuMjcsMC4xN2wyLjg5LDAuMDJsMC43OCwxLjgybC0xLjMyLDAuNTZsLTAuMTIsMC4wOWwtMC43MiwwLjkzbDAuMSwwLjQ1bDIuOTMsMS41MmwzLjYyLDUuMjdsMS44OCwxLjc4bDAuNTgsMS42N2wtMC4zOCwyLjExbC0xLjg3LC0wLjc5bC0wLjM3LDAuMTFsLTAuOTksMS41NGwtMS41MSwtMC43M1pcIiwgXCJuYW1lXCI6IFwiTGFvc1wifSwgXCJUV1wiOiB7XCJwYXRoXCI6IFwiTTcyNS42LDIyMi41bC0xLjUsNC4yMmwtMC44MiwxLjY1bC0xLjAxLC0xLjdsLTAuMjYsLTEuOGwxLjQsLTIuNDhsMS44LC0xLjgxbDAuNzYsMC41M2wtMC4zOCwxLjM5WlwiLCBcIm5hbWVcIjogXCJUYWl3YW5cIn0sIFwiVFRcIjoge1wicGF0aFwiOiBcIk0yNjYuMzUsMjU5LjQ2bDAuNDEsLTAuMzlsMC4wOSwtMC4yM2wtMC4wNCwtMC43NWwxLjE0LC0wLjI2bDAuMiwwLjAzbC0wLjA3LDEuMzdsLTEuNzMsMC4yM1pcIiwgXCJuYW1lXCI6IFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wifSwgXCJUUlwiOiB7XCJwYXRoXCI6IFwiTTUxMy4yNSwxNzUuMzhsMy42MywxLjE3bDAuMTQsMC4wMWwyLjg4LC0wLjQ1bDIuMTEsMC4yNmwwLjE4LC0wLjAzbDIuOSwtMS41M2wyLjUxLC0wLjEzbDIuMjUsMS4zN2wwLjM2LDAuODhsLTAuMjMsMS4zNmwwLjE5LDAuMzNsMS44MSwwLjcybDAuNjEsMC41M2wtMS4zMSwwLjY0bC0wLjE2LDAuMzRsMC43NiwzLjI0bC0wLjQ0LDAuOGwwLjAxLDAuM2wxLjE5LDIuMDJsLTAuNzEsMC4yOWwtMC43NCwtMC42MmwtMC4xNSwtMC4wN2wtMi45MSwtMC4zN2wtMC4xNSwwLjAybC0xLjA0LDAuNDNsLTIuNzgsMC40NGwtMS40NCwtMC4wM2wtMi44MywxLjA2bC0xLjk1LDAuMDFsLTEuMjgsLTAuNTJsLTAuMiwtMC4wMWwtMi42MiwwLjc2bC0wLjcsLTAuNDhsLTAuNDcsMC4yMmwtMC4xMywxLjQ5bC0xLjAxLDAuOTRsLTAuNTgsLTAuODJsMC43OSwtMC45bDAuMDQsLTAuMzRsLTAuMzEsLTAuMTVsLTEuNDYsMC4yM2wtMi4wMywtMC42NGwtMC4zLDAuMDdsLTEuNjUsMS41OGwtMy41OCwwLjNsLTEuOTQsLTEuNDdsLTAuMTcsLTAuMDZsLTIuNywtMC4xbC0wLjI4LDAuMTdsLTAuNTEsMS4wNmwtMS40NywwLjI5bC0yLjMyLC0xLjQ2bC0wLjE3LC0wLjA1bC0yLjU1LDAuMDVsLTEuNCwtMi43bC0xLjcyLC0xLjU0bDEuMTEsLTIuMDZsLTAuMDcsLTAuMzdsLTEuMzUsLTEuMTlsMi40NywtMi41MWwzLjc0LC0wLjExbDAuMjYsLTAuMTdsMC45NiwtMi4wN2w0LjU2LDAuMzhsMC4xOSwtMC4wNWwyLjk3LC0xLjkybDIuODQsLTAuODNsNC4wMywtMC4wNmw0LjMxLDIuMDhaTTQ4OC44NSwxNzYuOGwtMS44MSwxLjM4bC0wLjU3LC0xLjAxbDAuMDIsLTAuMzZsMC40NSwtMC4yNWwwLjEzLC0wLjE1bDAuNzgsLTEuODdsLTAuMTEsLTAuMzdsLTAuNzIsLTAuNDdsMS45MSwtMC43MWwxLjg5LDAuMzVsMC4yNSwwLjk3bDAuMTcsMC4ybDEuODcsMC44M2wtMC4xOSwwLjMxbC0yLjgyLDAuMTZsLTAuMTgsMC4wN2wtMS4wNiwwLjkxWlwiLCBcIm5hbWVcIjogXCJUdXJrZXlcIn0sIFwiTEtcIjoge1wicGF0aFwiOiBcIk02MjUuNDQsMjY2LjA3bC0wLjM1LDIuNGwtMC45LDAuNjFsLTEuOTEsMC41bC0xLjA0LC0xLjc1bC0wLjQzLC0zLjVsMS4wLC0zLjZsMS4zNCwxLjA5bDEuMTMsMS43MmwxLjE2LDIuNTJaXCIsIFwibmFtZVwiOiBcIlNyaSBMYW5rYVwifSwgXCJUTlwiOiB7XCJwYXRoXCI6IFwiTTQ0NC45MSwyMDYuMThsLTAuOTksLTQuNTdsLTAuMTIsLTAuMThsLTEuNDMsLTEuMDRsLTAuMDIsLTAuNTNsLTAuMTEsLTAuMjJsLTEuOTUsLTEuNTlsLTAuMTksLTEuODVsMS40NCwtMS40N2wwLjA4LC0wLjE0bDAuNTksLTIuMzRsLTAuMzgsLTIuNzdsMC40NCwtMS4yOGwyLjUyLC0xLjA4bDEuNDEsMC4yOGwtMC4wNiwxLjJsMC40MywwLjI4bDEuODEsLTAuOWwwLjAyLDAuMDZsLTEuMTQsMS4yOGwtMC4wOCwwLjJsLTAuMDIsMS4zMmwwLjExLDAuMjRsMC43NCwwLjZsLTAuMjksMi4xOGwtMS41NiwxLjM1bC0wLjA5LDAuMzJsMC40OCwxLjU0bDAuMjgsMC4yMWwxLjExLDAuMDRsMC41NSwxLjE3bDAuMTUsMC4xNGwwLjc2LDAuMzVsLTAuMTIsMS43OWwtMS4xLDAuNzJsLTAuOCwwLjkxbC0xLjY4LDEuMDRsLTAuMTMsMC4zMmwwLjI1LDEuMDhsLTAuMTgsMC45NmwtMC43NCwwLjM5WlwiLCBcIm5hbWVcIjogXCJUdW5pc2lhXCJ9LCBcIlRMXCI6IHtcInBhdGhcIjogXCJNNzM0LjIxLDMwNy4yMmwwLjE3LC0wLjM0bDEuOTksLTAuNTJsMS43MiwtMC4wOGwwLjc4LC0wLjNsMC4yOSwwLjFsLTAuNDMsMC4zMmwtMi41NywxLjA5bC0xLjcxLDAuNTlsLTAuMDUsLTAuNDlsLTAuMTksLTAuMzZaXCIsIFwibmFtZVwiOiBcIkVhc3QgVGltb3JcIn0sIFwiVE1cIjoge1wicGF0aFwiOiBcIk01NTMuMTYsMTczLjUxbC0wLjEyLDEuMGwtMC4yNiwtMC42NWwwLjM4LC0wLjM0Wk01NTMuNTQsMTczLjE2bDAuMTMsLTAuMTJsMC40MywtMC4wOWwtMC41NiwwLjIxWk01NTUuNjgsMTcyLjZsMC42NSwtMC4xNGwxLjUzLDAuNzZsMS43MSwyLjI5bDAuMjcsMC4xMmwxLjI3LC0wLjE0bDIuODEsLTAuMDRsMC4yOSwtMC4zOGwtMC4zNSwtMS4yN2wxLjk4LC0wLjk3bDEuOTYsLTEuNjNsMy4wNSwxLjQ0bDAuMjUsMi4yM2wwLjE0LDAuMjJsMC45NiwwLjYxbDAuMTgsMC4wNWwyLjYxLC0wLjEzbDAuNjgsMC40NGwxLjIsMi45N2wwLjEsMC4xM2wyLjg1LDIuMDNsMS42NywxLjQxbDIuNjYsMS40NWwzLjEzLDEuMTdsLTAuMDUsMS4yM2wtMC4zNiwtMC4wNGwtMS4xMiwtMC43M2wtMC40NCwwLjE0bC0wLjM0LDAuODlsLTEuOTYsMC41MmwtMC4yMiwwLjIzbC0wLjQ3LDIuMTdsLTEuMjYsMC43OGwtMS45MywwLjQybC0wLjIxLDAuMThsLTAuNDYsMS4xNGwtMS42NCwwLjMzbC0yLjMsLTAuOTdsLTAuMiwtMi4yM2wtMC4yOCwtMC4yN2wtMS43NiwtMC4xbC0yLjc4LC0yLjQ4bC0wLjE1LC0wLjA3bC0xLjk1LC0wLjMxbC0yLjgyLC0xLjQ4bC0xLjc4LC0wLjI3bC0wLjE4LDAuMDNsLTEuMDMsMC41MWwtMS42LC0wLjA4bC0wLjIyLDAuMDhsLTEuNzIsMS42bC0xLjgzLDAuNDZsLTAuMzksLTEuN2wwLjM2LC0zLjBsLTAuMTYsLTAuM2wtMS43MywtMC44OGwwLjU3LC0xLjc3bC0wLjI1LC0wLjM5bC0xLjMzLC0wLjE0bDAuNDEsLTEuODVsMi4wNSwwLjYzbDAuMjEsLTAuMDFsMi4yLC0wLjk1bDAuMDksLTAuNDlsLTEuNzgsLTEuNzVsLTAuNjksLTEuNjZsLTAuMDcsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlR1cmttZW5pc3RhblwifSwgXCJUSlwiOiB7XCJwYXRoXCI6IFwiTTU5Ny45OSwxNzguNzFsLTAuMjMsMC4yM2wtMi41NywtMC40N2wtMC4zNSwwLjI1bC0wLjI0LDEuN2wwLjMyLDAuMzRsMi42NiwtMC4yMmwzLjE1LDAuOTVsNC40NywtMC40MmwwLjU4LDIuNDVsMC4zOSwwLjIxbDAuNzEsLTAuMjVsMS4yMiwwLjUzbC0wLjA2LDEuMDFsMC4yOSwxLjI4bC0yLjE5LC0wLjBsLTEuNzEsLTAuMjFsLTAuMjMsMC4wN2wtMS41MSwxLjI1bC0xLjA1LDAuMjdsLTAuNzcsMC41MWwtMC43MSwtMC42N2wwLjIyLC0yLjI4bC0wLjI0LC0wLjMybC0wLjQzLC0wLjA4bDAuMTcsLTAuNTdsLTAuMTYsLTAuMzZsLTEuMzYsLTAuNjZsLTAuMzQsMC4wNWwtMS4wOCwxLjAxbC0wLjA5LDAuMTVsLTAuMjUsMS4wOWwtMC4yNCwwLjI2bC0xLjM2LC0wLjA1bC0wLjI3LDAuMTRsLTAuNjUsMS4wNmwtMC41OCwtMC4zOWwtMC4zLC0wLjAybC0xLjY4LDAuODZsLTAuMzYsLTAuMTZsMS4yOCwtMi42NWwwLjAyLC0wLjJsLTAuNTQsLTIuMTdsLTAuMTgsLTAuMjFsLTEuNTMsLTAuNThsMC40MSwtMC44MmwxLjg5LDAuMTNsMC4yNiwtMC4xMmwxLjE5LC0xLjYzbDAuNzcsLTEuODJsMi42NiwtMC41NWwtMC4zMywwLjg3bDAuMDEsMC4yM2wwLjM2LDAuODJsMC4zLDAuMThsMC4yMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiVGFqaWtpc3RhblwifSwgXCJMU1wiOiB7XCJwYXRoXCI6IFwiTTQ5My4zMiwzNTkuNjlsMC42OSwwLjY1bC0wLjY1LDEuMTJsLTAuMzgsMC44bC0xLjI3LDAuMzlsLTAuMTgsMC4xNWwtMC40LDAuNzdsLTAuNTksMC4xOGwtMS41OSwtMS43OGwxLjE2LC0xLjVsMS4zLC0xLjAybDAuOTcsLTAuNDZsMC45NCwwLjcyWlwiLCBcIm5hbWVcIjogXCJMZXNvdGhvXCJ9LCBcIlRIXCI6IHtcInBhdGhcIjogXCJNNjc3LjQyLDI1My42OGwtMS43LC0wLjg4bC0wLjE0LC0wLjAzbC0xLjc3LDAuMDRsMC4zLC0xLjY0bC0wLjMsLTAuMzVsLTIuMjEsMC4wMWwtMC4zLDAuMjhsLTAuMiwyLjc2bC0yLjE1LDUuOWwtMC4wMiwwLjEzbDAuMTcsMS44M2wwLjI4LDAuMjdsMS40NSwwLjA3bDAuOTMsMi4xbDAuNDQsMi4xNWwwLjA4LDAuMTVsMS40LDEuNDRsMC4xNiwwLjA5bDEuNDMsMC4yN2wxLjA0LDEuMDVsLTAuNTgsMC43M2wtMS4yNCwwLjIybC0wLjE1LC0wLjk5bC0wLjE1LC0wLjIybC0yLjA0LC0xLjFsLTAuMzYsMC4wNmwtMC4yMywwLjIzbC0wLjcyLC0wLjcxbC0wLjQxLC0xLjE4bC0wLjA2LC0wLjExbC0xLjMzLC0xLjQybC0xLjIyLC0xLjJsLTAuNSwwLjEzbC0wLjE1LDAuNTRsLTAuMTQsLTAuNDFsMC4yNiwtMS40OGwwLjczLC0yLjM4bDEuMiwtMi41N2wxLjM3LC0yLjM1bDAuMDIsLTAuMjdsLTAuOTUsLTIuMjZsMC4wMywtMS4xOWwtMC4yOSwtMS40MmwtMC4wNiwtMC4xM2wtMS42NSwtMi4wbC0wLjQ2LC0wLjk5bDAuNjIsLTAuMzRsMC4xMywtMC4xNWwwLjkyLC0yLjIzbC0wLjAyLC0wLjI3bC0xLjA1LC0xLjc0bC0xLjU3LC0xLjg2bC0xLjA0LC0xLjk2bDAuNzYsLTAuMzRsMC4xNiwtMC4xNmwxLjA3LC0yLjYzbDEuNTgsLTAuMWwwLjE2LC0wLjA2bDEuNDMsLTEuMTFsMS4yNCwtMC41MmwwLjg0LDAuNjJsMC4xMywxLjQzbDAuMjgsMC4yN2wxLjM0LDAuMDlsLTAuNTQsMi4zOWwwLjA1LDIuMzlsMC40NSwwLjI1bDIuNDgsLTEuNDVsMC42LDAuMzZsMC4xNywwLjA0bDEuNDcsLTAuMDdsMC4yNSwtMC4xNWwwLjQxLC0wLjczbDEuNTgsMC4xNWwxLjc2LDEuOTNsMC4xNSwyLjQ0bDAuMDgsMC4xOGwxLjk0LDIuMTVsLTAuMSwxLjk2bC0wLjY2LDAuOTNsLTIuMjUsLTAuMzRsLTMuMjQsMC40OWwtMC4xOSwwLjEybC0xLjYsMi4xMmwtMC4wNiwwLjI0bDAuNDgsMi40NlpcIiwgXCJuYW1lXCI6IFwiVGhhaWxhbmRcIn0sIFwiVEZcIjoge1wicGF0aFwiOiBcIk01OTMuNzYsNDE3LjczbDEuMzgsMC44NGwyLjE1LDAuMzdsMC4wNCwwLjMxbC0wLjU5LDEuMjRsLTMuMzYsMC4xOWwtMC4wNSwtMS4zOGwwLjQzLC0xLjU2WlwiLCBcIm5hbWVcIjogXCJGcmVuY2ggU291dGhlcm4gYW5kIEFudGFyY3RpYyBMYW5kc1wifSwgXCJUR1wiOiB7XCJwYXRoXCI6IFwiTTQyNS4yMywyNjkuMjlsLTEuNDksMC40bC0wLjQzLC0wLjY4bC0wLjY0LC0xLjU0bC0wLjE4LC0xLjE2bDAuNTQsLTIuMjFsLTAuMDQsLTAuMjRsLTAuNTksLTAuODZsLTAuMjMsLTEuOWwwLjAsLTEuODJsLTAuMDcsLTAuMTlsLTAuOTUsLTEuMTlsMC4xLC0wLjQxbDEuNTgsMC4wNGwtMC4yMywwLjk3bDAuMDgsMC4yOGwxLjU1LDEuNTVsMC4wOSwxLjEzbDAuMDgsMC4xOWwwLjQyLDAuNDNsLTAuMTEsNS42NmwwLjUyLDEuNTNaXCIsIFwibmFtZVwiOiBcIlRvZ29cIn0sIFwiVERcIjoge1wicGF0aFwiOiBcIk00NTcuNTcsMjUyLjQ2bDAuMjMsLTEuMDhsLTAuMjgsLTAuMzZsLTEuMzIsLTAuMDVsMC4wLC0xLjM1bC0wLjEsLTAuMjJsLTAuOSwtMC44MmwwLjk5LC0zLjFsMy4xMiwtMi4zN2wwLjEyLC0wLjIzbDAuMTMsLTMuMzNsMC45NSwtNS4ybDAuNTMsLTEuMDlsLTAuMDcsLTAuMzZsLTAuOTQsLTAuODFsLTAuMDMsLTAuN2wtMC4xMiwtMC4yM2wtMC44NCwtMC42MWwtMC41NywtMy43NmwyLjIxLC0xLjI2bDE5LjY3LDkuODhsMC4xMiw5Ljc0bC0xLjgzLC0wLjE1bC0wLjI4LDAuMTRsLTEuMTQsMS44OWwtMC42OCwxLjYybDAuMDUsMC4zMWwwLjMzLDAuMzhsLTAuNjEsMC41OGwtMC4wOCwwLjNsMC4yNSwwLjkzbC0wLjU4LDAuOTVsLTAuMjksMS4wMWwwLjM0LDAuMzdsMC42NywtMC4xMWwwLjM5LDAuNzNsMC4wMywxLjRsMC4xMSwwLjIzbDAuOCwwLjY1bC0wLjAxLDAuMjRsLTEuMzgsMC4zN2wtMC4xMSwwLjA2bC0xLjI3LDEuMDNsLTEuODMsMi43NmwtMi4yMSwxLjFsLTIuMzQsLTAuMTVsLTAuODIsMC4yNWwtMC4yLDAuMzdsMC4xOSwwLjY4bC0xLjE2LDAuNzlsLTEuMDEsMC45NGwtMi45MiwwLjg5bC0wLjUsLTAuNDZsLTAuMTcsLTAuMDhsLTAuNDEsLTAuMDVsLTAuMjgsMC4xMmwtMC4zOCwwLjU0bC0xLjM2LDAuMTJsMC4xLC0wLjE4bDAuMDEsLTAuMjdsLTAuNzgsLTEuNzJsLTAuMzUsLTEuMDNsLTAuMTcsLTAuMThsLTEuMDMsLTAuNDFsLTEuMjksLTEuMjhsMC4zNiwtMC43OGwwLjksMC4ybDAuMTQsLTAuMGwwLjY3LC0wLjE3bDEuMzYsMC4wMmwwLjI2LC0wLjQ1bC0xLjMyLC0yLjIybDAuMDksLTEuNjRsLTAuMTcsLTEuNjhsLTAuMDQsLTAuMTNsLTAuOTMsLTEuNTNaXCIsIFwibmFtZVwiOiBcIkNoYWRcIn0sIFwiTFlcIjoge1wicGF0aFwiOiBcIk00NTcuOTksMjI2LjM4bC0xLjU3LDAuODdsLTEuMjUsLTEuMjhsLTAuMTMsLTAuMDhsLTMuODUsLTEuMTFsLTEuMDQsLTEuNTdsLTAuMDksLTAuMDlsLTEuOTgsLTEuMjNsLTAuMjcsLTAuMDJsLTAuOTMsMC4zOWwtMC43MiwtMS4ybC0wLjA5LC0xLjA3bC0wLjA2LC0wLjE2bC0xLjMzLC0xLjc1bDAuODMsLTAuOTRsMC4wNywtMC4yNGwtMC4yMSwtMS42NGwwLjMxLC0xLjQzbC0wLjE3LC0xLjI5bDAuNDMsLTIuMjZsLTAuMTUsLTEuMzNsLTAuNzMsLTIuMThsMC45OSwtMC41MmwwLjE2LC0wLjIxbDAuMjIsLTEuMTZsLTAuMjIsLTEuMDZsMS41NCwtMC45NWwwLjgxLC0wLjkybDEuMTksLTAuNzhsMC4xNCwtMC4yM2wwLjEyLC0xLjc2bDIuNTcsMC44NGwwLjE2LDAuMDFsMC45OSwtMC4yM2wyLjAxLDAuNDVsMy4xOSwxLjJsMS4xMiwyLjM2bDAuMiwwLjE2bDIuMjQsMC41M2wzLjUsMS4xNGwyLjY1LDEuMzZsMC4yOSwtMC4wMWwxLjIyLC0wLjcxbDEuMjcsLTEuMzJsMC4wNywtMC4yOWwtMC41NSwtMi4wbDAuNjksLTEuMTlsMS43LC0xLjIzbDEuNjEsLTAuMzVsMy4yLDAuNTRsMC43OCwxLjE0bDAuMjQsMC4xM2wwLjg1LDAuMDFsMC44NCwwLjQ3bDIuMzUsMC4zMWwwLjQyLDAuNjNsLTAuNzksMS4xNmwtMC4wNCwwLjI2bDAuMzUsMS4wOGwtMC42MSwxLjZsLTAuMCwwLjJsMC43MywyLjE2bDAuMCwyNC4yNGwtMi41OCwwLjAxbC0wLjMsMC4yOWwtMC4wMiwwLjYybC0xOS41NSwtOS44M2wtMC4yOCwwLjAxbC0yLjUzLDEuNDRaXCIsIFwibmFtZVwiOiBcIkxpYnlhXCJ9LCBcIkFFXCI6IHtcInBhdGhcIjogXCJNNTUwLjU5LDIyMy44bDAuMTIsMC4wOGwxLjkyLC0wLjQxbDMuNTQsMC4xNWwwLjIzLC0wLjA5bDEuNzEsLTEuNzlsMS44NiwtMS43bDEuMzEsLTEuMzZsMC4yNiwwLjVsMC4yOCwxLjcybC0wLjkzLDAuMDFsLTAuMywwLjI2bC0wLjIxLDEuNzNsMC4xMSwwLjI3bDAuMDgsMC4wNmwtMC43LDAuMzJsLTAuMTcsMC4yN2wtMC4wMSwwLjk5bC0wLjY4LDEuMDJsLTAuMDUsMC4xNWwtMC4wNiwwLjk2bC0wLjMyLDAuMzZsLTcuMTksLTEuMjdsLTAuNzksLTIuMjJaXCIsIFwibmFtZVwiOiBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCJ9LCBcIlZFXCI6IHtcInBhdGhcIjogXCJNMjQwLjY2LDI1Ni41bDAuNjUsMC45MWwtMC4wMywxLjEzbC0xLjA1LDEuMzlsLTAuMDMsMC4zMWwwLjk1LDIuMGwwLjMyLDAuMTdsMS4wOCwtMC4xNmwwLjI0LC0wLjIxbDAuNTYsLTEuODNsLTAuMDYsLTAuMjlsLTAuNzEsLTAuODFsLTAuMSwtMS41OGwyLjksLTAuOTZsMC4xOSwtMC4zN2wtMC4yOSwtMS4wMmwwLjQ1LC0wLjQxbDAuNzIsMS40M2wwLjI2LDAuMTZsMS42NSwwLjA0bDEuNDYsMS4yN2wwLjA4LDAuNzJsMC4zLDAuMjdsMi4yOCwwLjAybDIuNTUsLTAuMjVsMS4zNCwxLjA2bDAuMTQsMC4wNmwxLjkyLDAuMzFsMC4yLC0wLjAzbDEuNCwtMC43OWwwLjE1LC0wLjI1bDAuMDIsLTAuMzZsMi44MiwtMC4xNGwxLjE3LC0wLjAxbC0wLjQxLDAuMTRsLTAuMTQsMC40NmwwLjg2LDEuMTlsMC4yMiwwLjEybDEuOTMsMC4xOGwxLjczLDEuMTNsMC4zNywxLjlsMC4zMSwwLjI0bDEuMjEsLTAuMDVsMC41MiwwLjMybC0xLjYzLDEuMjFsLTAuMTEsMC4xN2wtMC4yMiwwLjkybDAuMDcsMC4yN2wwLjYzLDAuNjlsLTAuMzEsMC4yNGwtMS40OCwwLjM5bC0wLjIyLDAuM2wwLjA0LDEuMDNsLTAuNTksMC42bC0wLjAxLDAuNDFsMS42NywxLjg3bDAuMjMsMC40OGwtMC43MiwwLjc2bC0yLjcxLDAuOTFsLTEuNzgsMC4zOWwtMC4xMywwLjA2bC0wLjYsMC40OWwtMS44NCwtMC41OGwtMS44OSwtMC4zM2wtMC4xOCwwLjAzbC0wLjQ3LDAuMjNsLTAuMDIsMC41M2wwLjk2LDAuNTZsLTAuMDgsMS41OGwwLjM1LDEuNThsMC4yNiwwLjIzbDEuOTEsMC4xOWwwLjAyLDAuMDdsLTEuNTQsMC42MmwtMC4xOCwwLjJsLTAuMjUsMC45MmwtMC44OCwwLjM1bC0xLjg1LDAuNThsLTAuMTYsMC4xM2wtMC40LDAuNjRsLTEuNjYsMC4xNGwtMS4yMiwtMS4xOGwtMC43OSwtMi41MmwtMC42NywtMC44OGwtMC42NiwtMC40M2wwLjk5LC0wLjk4bDAuMDksLTAuMjZsLTAuMDksLTAuNTZsLTAuMDgsLTAuMTZsLTAuNjYsLTAuNjlsLTAuNDcsLTEuNTRsMC4xOCwtMS42N2wwLjU1LC0wLjg1bDAuNDUsLTEuMzVsLTAuMTUsLTAuMzZsLTAuODksLTAuNDNsLTAuMTksLTAuMDJsLTEuMzksMC4yOGwtMS43NiwtMC4xM2wtMC45MiwwLjIzbC0xLjY0LC0yLjAxbC0wLjE3LC0wLjFsLTEuNTQsLTAuMzNsLTMuMDUsMC4yM2wtMC41LC0wLjczbC0wLjE1LC0wLjEybC0wLjQ1LC0wLjE1bC0wLjA1LC0wLjI4bDAuMjgsLTAuODZsMC4wMSwtMC4xNWwtMC4yLC0xLjAxbC0wLjA4LC0wLjE1bC0wLjUsLTAuNWwtMC4zLC0xLjA4bC0wLjI1LC0wLjIybC0wLjg5LC0wLjEybDAuNTQsLTEuMThsMC4yOSwtMS43M2wwLjY2LC0wLjg1bDAuOTQsLTAuN2wwLjA5LC0wLjExbDAuMywtMC42WlwiLCBcIm5hbWVcIjogXCJWZW5lenVlbGFcIn0sIFwiQUZcIjoge1wicGF0aFwiOiBcIk01NzQuNDIsMTkyLjFsMi4yNCwwLjk1bDAuMTgsMC4wMmwxLjg5LC0wLjM4bDAuMjIsLTAuMThsMC40NiwtMS4xNGwxLjgyLC0wLjRsMS41LC0wLjkxbDAuMTQsLTAuMTlsMC40NiwtMi4xMmwxLjkzLC0wLjUxbDAuMiwtMC4xOGwwLjI2LC0wLjY4bDAuODcsMC41N2wwLjEzLDAuMDVsMC43OSwwLjA5bDEuMzUsMC4wMmwxLjgzLDAuNTlsMC43NSwwLjM0bDAuMjYsLTAuMDFsMS42NiwtMC44NWwwLjcsMC40NmwwLjQyLC0wLjA5bDAuNzIsLTEuMTdsMS4zMiwwLjA1bDAuMjMsLTAuMWwwLjM5LC0wLjQzbDAuMDcsLTAuMTRsMC4yNCwtMS4wOGwwLjg2LC0wLjgxbDAuOTQsMC40NmwtMC4yLDAuNjRsMC4yMywwLjM4bDAuNDksMC4wOWwtMC4yMSwyLjE1bDAuMDksMC4yNWwwLjk5LDAuOTRsMC4zOCwwLjAzbDAuODMsLTAuNTdsMS4wNiwtMC4yN2wwLjEyLC0wLjA2bDEuNDYsLTEuMjFsMS42MywwLjJsMi40LDAuMGwwLjE3LDAuMzJsLTEuMTIsMC4yNWwtMS4yMywwLjUybC0yLjg2LDAuMzNsLTIuNjksMC42bC0wLjEzLDAuMDZsLTEuNDYsMS4yNWwtMC4wNywwLjM2bDAuNTgsMS4xOGwwLjI1LDEuMjFsLTEuMTMsMS4wOGwtMC4wOSwwLjI1bDAuMDksMC45OGwtMC41MywwLjc5bC0yLjIyLC0wLjA4bC0wLjI4LDAuNDRsMC44MywxLjU3bC0xLjMsMC41OGwtMC4xMywwLjExbC0xLjA2LDEuNjlsLTAuMDUsMC4xOGwwLjEzLDEuNTFsLTAuNzMsMC41OGwtMC43OCwtMC4yMmwtMC4xNCwtMC4wMWwtMS45MSwwLjM2bC0wLjIzLDAuMTlsLTAuMiwwLjU3bC0xLjY1LC0wLjBsLTAuMjIsMC4xbC0xLjQsMS41NmwtMC4wOCwwLjE5bC0wLjA4LDIuMTNsLTIuOTksMS4wNWwtMS42NywtMC4yM2wtMC4yNywwLjFsLTAuMzksMC40NmwtMS40MywtMC4zMWwtMi40MywwLjRsLTMuNjksLTEuMjNsMS45NiwtMi4xNWwwLjA4LC0wLjI0bC0wLjIxLC0xLjc4bC0wLjIzLC0wLjI2bC0xLjY5LC0wLjQybC0wLjE5LC0xLjYybC0wLjc3LC0yLjA4bDAuOTgsLTEuNDFsLTAuMTQsLTAuNDVsLTAuODIsLTAuMzFsMC42LC0xLjc5bDAuOTMsLTMuMjFaXCIsIFwibmFtZVwiOiBcIkFmZ2hhbmlzdGFuXCJ9LCBcIklRXCI6IHtcInBhdGhcIjogXCJNNTM0LjQyLDE5MC44OWwwLjEzLDAuMTRsMS41LDAuNzhsMC4xNSwxLjM0bC0xLjEzLDAuODdsLTAuMTEsMC4xNmwtMC41OCwyLjJsMC4wNCwwLjI0bDEuNzMsMi42N2wwLjEyLDAuMWwyLjk5LDEuNDlsMS4xOCwxLjk0bC0wLjM5LDEuODlsMC4yOSwwLjM2bDAuNSwtMC4wbDAuMDIsMS4xN2wwLjA4LDAuMmwwLjgzLDAuODZsLTIuMzYsLTAuMjlsLTAuMjksMC4xM2wtMS43NCwyLjQ5bC00LjQsLTAuMjFsLTcuMDMsLTUuNDlsLTMuNzMsLTEuOTRsLTIuOTIsLTAuNzRsLTAuODksLTMuMGw1LjMzLC0yLjgxbDAuMTUsLTAuMTlsMC45NSwtMy40M2wtMC4yLC0yLjBsMS4xOSwtMC42MWwwLjExLC0wLjA5bDEuMjMsLTEuNzNsMC45MiwtMC4zOGwyLjc1LDAuMzVsMC44MSwwLjY4bDAuMzEsMC4wNWwwLjk0LC0wLjM4bDEuNSwzLjE3WlwiLCBcIm5hbWVcIjogXCJJcmFxXCJ9LCBcIklTXCI6IHtcInBhdGhcIjogXCJNMzg0LjI2LDg3Ljk2bC0wLjUxLDIuMzVsMC4wOCwwLjI4bDIuNjEsMi41OGwtMi45OSwyLjgzbC03LjE2LDIuNzJsLTIuMDgsMC43bC05LjUxLC0xLjcxbDEuODksLTEuMzZsLTAuMDcsLTAuNTNsLTQuNCwtMS41OWwzLjMzLC0wLjU5bDAuMjUsLTAuMzJsLTAuMTEsLTEuMmwtMC4yNSwtMC4yN2wtNC44MiwtMC44OGwxLjM4LC0yLjJsMy41NCwtMC41N2wzLjgsMi43NGwwLjMzLDAuMDFsMy42OCwtMi4xOGwzLjAyLDEuMTJsMC4yNSwtMC4wMmw0LjAxLC0yLjE4bDMuNzIsMC4yN1pcIiwgXCJuYW1lXCI6IFwiSWNlbGFuZFwifSwgXCJJUlwiOiB7XCJwYXRoXCI6IFwiTTU1Ni4yLDE4Ny41bDIuMDUsLTAuNTJsMC4xMywtMC4wN2wxLjY5LC0xLjU3bDEuNTUsMC4wOGwwLjE1LC0wLjAzbDEuMDIsLTAuNWwxLjY0LDAuMjVsMi44MiwxLjQ4bDEuOTEsMC4zbDIuOCwyLjQ5bDAuMTgsMC4wOGwxLjYxLDAuMDlsMC4xOSwyLjA5bC0xLjAsMy40N2wtMC42OSwyLjA0bDAuMTgsMC4zOGwwLjczLDAuMjhsLTAuODUsMS4yMmwtMC4wNCwwLjI4bDAuODEsMi4xOWwwLjE5LDEuNzJsMC4yMywwLjI2bDEuNjksMC40MmwwLjE3LDEuNDNsLTIuMTgsMi4zOWwtMC4wMSwwLjRsMS4yMiwxLjQybDEuMCwxLjYybDAuMTIsMC4xMWwyLjIzLDEuMTFsMC4wNiwyLjJsMC4yLDAuMjdsMS4wMywwLjM4bDAuMTQsMC44M2wtMy4zOCwxLjNsLTAuMTgsMC4xOWwtMC44NywyLjg1bC00LjQ0LC0wLjc2bC0yLjc1LC0wLjYybC0yLjY0LC0wLjMybC0xLjAxLC0zLjExbC0wLjE3LC0wLjE5bC0xLjIsLTAuNDhsLTAuMTgsLTAuMDFsLTEuOTksMC41MWwtMi40MiwxLjI1bC0yLjg5LC0wLjg0bC0yLjQ4LC0yLjAzbC0yLjQxLC0wLjc5bC0xLjYxLC0yLjQ3bC0xLjg0LC0zLjYzbC0wLjM2LC0wLjE1bC0xLjIyLDAuNGwtMS40OCwtMC44NGwtMC4zNywwLjA2bC0wLjcyLDAuODJsLTEuMDgsLTEuMTJsLTAuMDIsLTEuMzVsLTAuMywtMC4yOWwtMC40MywwLjBsMC4zNCwtMS42NGwtMC4wNCwtMC4yMmwtMS4yOSwtMi4xMWwtMC4xMiwtMC4xMWwtMy4wLC0xLjQ5bC0xLjYyLC0yLjQ5bDAuNTIsLTEuOThsMS4xOCwtMC45MmwwLjExLC0wLjI3bC0wLjE5LC0xLjY2bC0wLjE2LC0wLjIzbC0xLjU1LC0wLjgxbC0xLjU4LC0zLjMzbC0xLjMsLTIuMmwwLjQxLC0wLjc1bDAuMDMsLTAuMjFsLTAuNzMsLTMuMTJsMS4yLC0wLjU5bDAuMzUsMC45bDEuMjYsMS4zNWwwLjE1LDAuMDlsMS44MSwwLjM5bDAuOTEsLTAuMDlsMC4xNSwtMC4wNmwyLjksLTIuMTNsMC43LC0wLjE2bDAuNDgsMC41NmwtMC43NSwxLjI2bDAuMDUsMC4zN2wxLjU2LDEuNTNsMC4yOCwwLjA4bDAuMzcsLTAuMDlsMC43LDEuODlsMC4yMSwwLjE5bDIuMzEsMC41OWwxLjY5LDEuNGwwLjE1LDAuMDdsMy42NiwwLjQ5bDMuOTEsLTAuNzZsMC4yMywtMC4xOWwwLjE5LC0wLjUyWlwiLCBcIm5hbWVcIjogXCJJcmFuXCJ9LCBcIkFNXCI6IHtcInBhdGhcIjogXCJNNTMwLjUxLDE3Ni4wOGwyLjkxLC0wLjM5bDAuNDEsMC42M2wwLjExLDAuMWwwLjY2LDAuMzZsLTAuMzIsMC40N2wwLjA3LDAuNDFsMS4xLDAuODRsLTAuNTMsMC43bDAuMDYsMC40MmwxLjA2LDAuOGwxLjAxLDAuNDRsMC4wNCwxLjU2bC0wLjQ0LDAuMDRsLTAuODgsLTEuNDZsMC4wMSwtMC4zN2wtMC4zLC0wLjMxbC0wLjk4LDAuMDFsLTAuNjUsLTAuNjlsLTAuMjYsLTAuMDlsLTAuMzgsMC4wNmwtMC45NywtMC44MmwtMS42NCwtMC42NWwwLjIsLTEuMmwtMC4wMiwtMC4xNmwtMC4yOCwtMC42OVpcIiwgXCJuYW1lXCI6IFwiQXJtZW5pYVwifSwgXCJJVFwiOiB7XCJwYXRoXCI6IFwiTTQ1MS42OCwxNTguNThsMC4yLDAuMTZsMy4zLDAuNzVsLTAuMjIsMS4yNmwwLjAyLDAuMThsMC4zNSwwLjc4bC0xLjQsLTAuMzJsLTAuMjEsMC4wM2wtMi4wNCwxLjFsLTAuMTYsMC4yOWwwLjEzLDEuNDdsLTAuMjksMC44MmwwLjAyLDAuMjRsMC44MiwxLjU3bDAuMSwwLjExbDIuMjgsMS41bDEuMjksMi41M2wyLjc5LDIuNDNsMC4yLDAuMDdsMS44MywtMC4wMmwwLjMxLDAuMzRsLTAuNDYsMC4zOWwwLjA2LDAuNWw0LjA2LDEuOTdsMi4wNiwxLjQ5bDAuMTcsMC4zNmwtMC4yNCwwLjUzbC0xLjA4LC0xLjA3bC0wLjE1LC0wLjA4bC0yLjE4LC0wLjQ5bC0wLjMzLDAuMTVsLTEuMDUsMS45MWwwLjExLDAuNGwxLjYzLDAuOThsLTAuMjIsMS4xMmwtMC44NCwwLjE0bC0wLjIyLDAuMTVsLTEuMjcsMi4zOGwtMC41NCwwLjEybDAuMDEsLTAuNDdsMC40OCwtMS40NmwwLjUsLTAuNThsMC4wMywtMC4zNWwtMC45NywtMS42OWwtMC43NiwtMS40OGwtMC4xNywtMC4xNWwtMC45NCwtMC4zM2wtMC42OCwtMS4xOGwtMC4xNiwtMC4xM2wtMS41MywtMC41MmwtMS4wMywtMS4xNGwtMC4xOSwtMC4xbC0xLjc4LC0wLjE5bC0xLjg4LC0xLjNsLTIuMjcsLTEuOTRsLTEuNjQsLTEuNjhsLTAuNzYsLTIuOTRsLTAuMjEsLTAuMjFsLTEuMjIsLTAuMzVsLTIuMDEsLTEuMGwtMC4yNCwtMC4wMWwtMS4xNSwwLjQybC0wLjExLDAuMDdsLTEuMzgsMS4zNmwtMC41LDAuMTFsMC4xOSwtMC44N2wtMC4yMSwtMC4zNWwtMS4xOSwtMC4zNGwtMC41NiwtMi4wNmwwLjc2LC0wLjgybDAuMDMsLTAuMzZsLTAuNjgsLTEuMDhsMC4wNCwtMC4zMWwwLjY4LDAuNDJsMC4xOSwwLjA0bDEuMjEsLTAuMTVsMC4xNCwtMC4wNmwxLjE4LC0wLjg5bDAuMjUsMC4yOWwwLjI1LDAuMWwxLjE5LC0wLjFsMC4yNSwtMC4xOGwwLjQ1LC0xLjA0bDEuNjEsMC4zNGwwLjE5LC0wLjAybDEuMSwtMC41M2wwLjE3LC0wLjIybDAuMTUsLTAuOTVsMS4xOSwwLjM1bDAuMzUsLTAuMTZsMC4yMywtMC40N2wyLjExLC0wLjQ3bDAuNDUsMC44OVpNNDU5LjM1LDE4NC42M2wtMC43MSwxLjgxbDAuMCwwLjIzbDAuMzMsMC43OWwtMC4zNywxLjAzbC0xLjYsLTAuOTFsLTEuMzMsLTAuMzRsLTMuMjQsLTEuMzZsMC4yMywtMC45OWwyLjczLDAuMjRsMy45NSwtMC41Wk00NDMuOTUsMTc1LjkxbDEuMjYsMS43N2wtMC4zMSwzLjQ3bC0wLjgyLC0wLjEzbC0wLjI2LDAuMDhsLTAuODMsMC43OWwtMC42NCwtMC41MmwtMC4xLC0zLjQybC0wLjQ0LC0xLjM0bDAuOTEsMC4xbDAuMjEsLTAuMDZsMS4wMSwtMC43NFpcIiwgXCJuYW1lXCI6IFwiSXRhbHlcIn0sIFwiVk5cIjoge1wicGF0aFwiOiBcIk02OTAuOCwyMzAuMjFsLTIuODYsMS45M2wtMi4wOSwyLjQ2bC0wLjA2LDAuMTFsLTAuNTUsMS44bDAuMDQsMC4yNmw0LjI2LDYuMWwyLjMxLDEuNjNsMS40NiwxLjk3bDEuMTIsNC42MmwtMC4zMiw0LjNsLTEuOTcsMS41N2wtMi44NSwxLjYybC0yLjA5LDIuMTRsLTIuODMsMi4xM2wtMC42NywtMS4xOWwwLjY1LC0xLjU4bC0wLjA5LC0wLjM1bC0xLjQ3LC0xLjE0bDEuNjcsLTAuNzlsMi41NywtMC4xOGwwLjIyLC0wLjQ3bC0wLjg5LC0xLjI0bDMuODgsLTEuOGwwLjE3LC0wLjI0bDAuMzEsLTMuMDVsLTAuMDEsLTAuMTNsLTAuNTYsLTEuNjNsMC40NCwtMi40OGwtMC4wMSwtMC4xNWwtMC42MywtMS44MWwtMC4wOCwtMC4xMmwtMS44NywtMS43N2wtMy42NCwtNS4zbC0wLjExLC0wLjFsLTIuNjgsLTEuMzlsMC40NSwtMC41OWwxLjUzLC0wLjY1bDAuMTYsLTAuMzlsLTAuOTcsLTIuMjdsLTAuMjcsLTAuMThsLTIuODksLTAuMDJsLTEuMDQsLTIuMjFsLTEuMjgsLTEuODNsMC45NiwtMC40NmwxLjk3LDAuMDFsMi40MywtMC4zbDAuMTMsLTAuMDVsMS45NSwtMS4yOWwxLjA0LDAuODVsMC4xMywwLjA2bDEuOTgsMC40MmwtMC4zMiwxLjIxbDAuMDksMC4zbDEuMTksMS4wN2wwLjEyLDAuMDdsMS44OCwwLjUxWlwiLCBcIm5hbWVcIjogXCJWaWV0bmFtXCJ9LCBcIkFSXCI6IHtcInBhdGhcIjogXCJNMjU4LjExLDM0MS4zNGwxLjQsMS44MWwwLjUxLC0wLjA2bDAuODksLTEuOTRsMi41MSwwLjFsMC4zNiwwLjQ5bDQuNiw0LjMxbDAuMTUsMC4wOGwxLjk5LDAuMzlsMy4wMSwxLjkzbDIuNSwxLjAxbDAuMjgsMC45MWwtMi40LDMuOTdsMC4xNywwLjQ0bDIuNTcsMC43NGwyLjgxLDAuNDFsMi4wOSwtMC40NGwwLjE0LC0wLjA3bDIuMjcsLTIuMDZsMC4wOSwtMC4xN2wwLjM4LC0yLjJsMC44OCwtMC4zNmwxLjA1LDEuMjlsLTAuMDQsMS44OGwtMS45OCwxLjRsLTEuNzIsMS4xM2wtMi44NCwyLjY1bC0zLjM0LDMuNzNsLTAuMDcsMC4xMmwtMC42MywyLjIybC0wLjY3LDIuODVsMC4wMiwyLjczbC0wLjQ3LDAuNTRsLTAuMDcsMC4xN2wtMC4zNiwzLjI4bDAuMTIsMC4yN2wzLjAzLDIuMzJsLTAuMzEsMS43OGwwLjExLDAuMjlsMS40NCwxLjE1bC0wLjExLDEuMTdsLTIuMzIsMy41N2wtMy41OSwxLjUxbC00Ljk1LDAuNmwtMi43MiwtMC4yOWwtMC4zMiwwLjM4bDAuNSwxLjY3bC0wLjQ5LDIuMTNsMC4wMSwwLjE2bDAuNCwxLjI5bC0xLjI3LDAuODhsLTIuNDEsMC4zOWwtMi4zMywtMS4wNWwtMC4zMSwwLjA0bC0wLjk3LDAuNzhsLTAuMTEsMC4yN2wwLjM1LDIuOThsMC4xNiwwLjIzbDEuNjksMC45MWwwLjMxLC0wLjAybDEuMDgsLTAuNzVsMC40NiwwLjk2bC0yLjEsMC44OGwtMi4wMSwxLjg5bC0wLjA5LDAuMThsLTAuMzYsMy4wNWwtMC41MSwxLjQybC0yLjE2LDAuMDFsLTAuMTksMC4wN2wtMS45NiwxLjU5bC0wLjEsMC4xNWwtMC43MiwyLjM0bDAuMDgsMC4zMWwyLjQ2LDIuMzFsMC4xMywwLjA3bDIuMDksMC41NmwtMC43NCwyLjQ1bC0yLjg2LDEuNzVsLTAuMTIsMC4xNGwtMS41OSwzLjcxbC0yLjIsMS4yNGwtMC4xLDAuMDlsLTEuMDMsMS41NGwtMC4wNCwwLjIzbDAuODEsMy40NWwwLjA2LDAuMTNsMS4xMywxLjMybC0yLjU5LC0wLjU3bC01Ljg5LC0wLjQ0bC0wLjkyLC0xLjczbDAuMDUsLTIuNGwtMC4zNCwtMC4zbC0xLjQ5LDAuMTlsLTAuNzIsLTAuOThsLTAuMiwtMy4yMWwxLjc5LC0xLjMzbDAuMSwtMC4xM2wwLjc5LC0yLjA0bDAuMDIsLTAuMTZsLTAuMjcsLTEuNTJsMS4zMSwtMi42OWwwLjkxLC00LjE1bC0wLjIzLC0xLjcybDAuOTEsLTAuNDlsMC4xNSwtMC4zM2wtMC4yNywtMS4xNmwtMC4xNSwtMC4ybC0wLjg3LC0wLjQ2bDAuNjUsLTEuMDFsLTAuMDQsLTAuMzdsLTEuMDYsLTEuMDlsLTAuNTQsLTMuMmwwLjgzLC0wLjUxbDAuMTQsLTAuMjlsLTAuNDIsLTMuNmwwLjU4LC0yLjk4bDAuNjQsLTIuNWwxLjQxLC0xLjBsMC4xMiwtMC4zMmwtMC43NSwtMi44bC0wLjAxLC0yLjQ4bDEuODEsLTEuNzhsMC4wOSwtMC4yMmwtMC4wNiwtMi4zbDEuMzksLTIuNjlsMC4wMywtMC4xNGwwLjAxLC0yLjU4bC0wLjExLC0wLjI0bC0wLjU3LC0wLjQ1bC0xLjEsLTQuNTlsMS40OSwtMi43M2wwLjA0LC0wLjE3bC0wLjIzLC0yLjU5bDAuODYsLTIuMzhsMS42LC0yLjQ4bDEuNzQsLTEuNjVsMC4wNCwtMC4zOWwtMC42NCwtMC44OWwwLjQyLC0wLjdsMC4wNCwtMC4xNmwtMC4wOCwtNC4yNmwyLjU1LC0xLjIzbDAuMTYsLTAuMThsMC44NiwtMi43NWwtMC4wMSwtMC4yMmwtMC4yMiwtMC40OGwxLjg0LC0yLjFsMy4wLDAuNTlaTTI1Ni43Nyw0MzguOThsLTIuMSwwLjE1bC0xLjE4LC0xLjE0bC0wLjE5LC0wLjA4bC0xLjUzLC0wLjA5bC0yLjM4LC0wLjBsLTAuMCwtNi4yOGwwLjQsMC42NWwxLjI1LDIuNTVsMC4xMSwwLjEybDMuMjYsMi4wN2wzLjE5LDAuOGwtMC44MiwxLjI2WlwiLCBcIm5hbWVcIjogXCJBcmdlbnRpbmFcIn0sIFwiQVVcIjoge1wicGF0aFwiOiBcIk03MDUuNTUsMzUzLjA2bDAuMDksMC4wOWwwLjM3LDAuMDVsMC4xMywtMC4zNWwtMC41NywtMS42OWwwLjQ4LDAuM2wwLjcxLDAuOTlsMC4zNCwwLjExbDAuMiwtMC4yOWwtMC4wNCwtMS4zN2wtMC4wNCwtMC4xNGwtMS4yMiwtMi4wN2wtMC4yOCwtMC45bC0wLjUxLC0wLjY5bDAuMjQsLTEuMzNsMC41MiwtMC43bDAuMzQsLTEuMzJsMC4wMSwtMC4xM2wtMC4yNSwtMS40NGwwLjUxLC0wLjk0bDAuMSwxLjAzbDAuMjMsMC4yNmwwLjMyLC0wLjE0bDEuMDEsLTEuNzJsMS45NCwtMC44NGwxLjI3LC0xLjE0bDEuODQsLTAuOTJsMS4wLC0wLjE4bDAuNiwwLjI4bDAuMjYsLTAuMGwxLjk0LC0wLjk2bDEuNDgsLTAuMjhsMC4xOSwtMC4xM2wwLjMyLC0wLjQ5bDAuNTEsLTAuMThsMS40MiwwLjA1bDIuNjMsLTAuNzZsMC4xMSwtMC4wNmwxLjM2LC0xLjE1bDAuMDgsLTAuMWwwLjYxLC0xLjMzbDEuNDIsLTEuMjdsMC4xLC0wLjE5bDAuMTEsLTEuMDNsMC4wNiwtMS4zMmwxLjM5LC0xLjc0bDAuODUsMS43OWwwLjQsMC4xNGwxLjA3LC0wLjUxbDAuMTEsLTAuNDVsLTAuNzcsLTEuMDVsMC41MywtMC44NGwwLjg2LDAuNDNsMC40MywtMC4yMmwwLjI5LC0xLjg1bDEuMjksLTEuMTlsMC42LC0wLjk4bDEuMTYsLTAuNGwwLjIsLTAuMjdsMC4wMiwtMC4zNGwwLjc0LDAuMmwwLjM4LC0wLjI3bDAuMDMsLTAuNDRsMS45OCwtMC42MWwxLjcsMS4wOGwxLjM2LDEuNDhsMC4yMiwwLjFsMS41NSwwLjAybDEuNTcsMC4yNGwwLjMzLC0wLjRsLTAuNDgsLTEuMjdsMS4wOSwtMS44NmwxLjA2LC0wLjYzbDAuMSwtMC40MmwtMC4yOCwtMC40NmwwLjkzLC0xLjI0bDEuMzYsLTAuOGwxLjE2LDAuMjdsMC4xNCwwLjBsMi4xLC0wLjQ4bDAuMjMsLTAuM2wtMC4wNSwtMS4zbC0wLjE4LC0wLjI2bC0xLjA4LC0wLjQ5bDAuNDQsLTAuMTJsMS41MiwwLjU4bDEuMzksMS4wNmwyLjExLDAuNjVsMC4xOSwtMC4wbDAuNTksLTAuMjFsMS40NCwwLjcybDAuMjcsMC4wbDEuMzcsLTAuNjhsMC44NCwwLjJsMC4yNiwtMC4wNmwwLjM3LC0wLjNsMC44MiwwLjg5bC0wLjU2LDEuMTRsLTAuODQsMC45MWwtMC43NSwwLjA3bC0wLjI2LDAuMzhsMC4yNiwwLjlsLTAuNjcsMS4xNWwtMC44OCwxLjI0bC0wLjA1LDAuMjVsMC4xOCwwLjcybDAuMTIsMC4xN2wxLjk5LDEuNDJsMS45NiwwLjg0bDEuMjUsMC44NmwxLjgsMS41MWwwLjE5LDAuMDdsMC42MywtMC4wbDEuMTUsMC41OGwwLjM0LDAuN2wwLjE3LDAuMTVsMi4zOSwwLjg4bDAuMjQsLTAuMDJsMS42NSwtMC44OGwwLjE0LC0wLjE2bDAuNDksLTEuMzdsMC41MiwtMS4xOWwwLjMxLC0xLjM5bDAuNzUsLTIuMDJsMC4wMSwtMC4xOWwtMC4zMywtMS4xNmwwLjE2LC0wLjY3bDAuMCwtMC4xM2wtMC4yOCwtMS40MWwwLjMsLTEuNzhsMC40MiwtMC40NWwwLjA1LC0wLjMzbC0wLjMzLC0wLjczbDAuNTYsLTEuMjVsMC40OCwtMS4zOWwwLjA3LC0wLjY5bDAuNTgsLTAuNTlsMC40OCwwLjg0bDAuMTcsMS41M2wwLjE3LDAuMjRsMC40NywwLjIzbDAuMDksMC45bDAuMDUsMC4xNGwwLjg3LDEuMjNsMC4xNywxLjMzbC0wLjA5LDAuODlsMC4wMywwLjE1bDAuOSwyLjBsMC40MywwLjEzbDEuMzgsLTAuODNsMC43MSwwLjkybDEuMDYsMC44OGwtMC4yMiwwLjk2bDAuMCwwLjE0bDAuNTMsMi4ybDAuMzgsMS4zbDAuMTUsMC4xOGwwLjUyLDAuMjZsMC42MiwyLjAxbC0wLjIzLDEuMjdsMC4wMiwwLjE4bDAuODEsMS43NmwwLjE0LDAuMTRsMi42OSwxLjM1bDMuMjEsMi4yMWwtMC4yLDAuNGwwLjA0LDAuMzRsMS4zOSwxLjZsMC45NSwyLjc4bDAuNDMsMC4xNmwwLjc5LC0wLjQ2bDAuODUsMC45NmwwLjM5LDAuMDVsMC4yMiwtMC4xNWwwLjM2LDIuMzNsMC4wOSwwLjE4bDEuNzgsMS42M2wxLjE2LDEuMDFsMS45LDIuMWwwLjY3LDIuMDVsMC4wNiwxLjQ3bC0wLjE3LDEuNjRsMC4wMywwLjE3bDEuMTYsMi4yMmwtMC4xNCwyLjI4bC0wLjQzLDEuMjRsLTAuNjgsMi40NGwwLjA0LDEuNjNsLTAuNDgsMS45MmwtMS4wNiwyLjQzbC0xLjc5LDEuMzJsLTAuMSwwLjEybC0wLjkxLDIuMTVsLTAuODIsMS4zN2wtMC43NiwyLjQ3bC0wLjk4LDEuNDZsLTAuNjMsMi4xNGwtMC4zMywyLjAybDAuMSwwLjgybC0xLjIxLDAuODVsLTIuNzEsMC4xbC0wLjEzLDAuMDNsLTIuMzEsMS4xOWwtMS4yMSwxLjE3bC0xLjM0LDEuMTFsLTEuODksLTEuMThsLTEuMzMsLTAuNDZsMC4zMiwtMS4yNGwtMC40LC0wLjM1bC0xLjQ2LDAuNjFsLTIuMDYsMS45OGwtMS45OSwtMC43M2wtMS40MywtMC40NmwtMS40NSwtMC4yMmwtMi4zMiwtMC44MWwtMS41MSwtMS42N2wtMC40NSwtMi4xMWwtMC42LC0xLjVsLTAuMDcsLTAuMTFsLTEuMjMsLTEuMTZsLTAuMTYsLTAuMDhsLTEuOTYsLTAuMjhsMC41OSwtMC45OWwwLjAzLC0wLjI0bC0wLjYxLC0yLjFsLTAuNTQsLTAuMDhsLTEuMTYsMS44NWwtMS4yMywwLjI5bDAuNzMsLTAuODhsMC4wNiwtMC4xMmwwLjM3LC0xLjU3bDAuOTMsLTEuMzNsMC4wNSwtMC4ybC0wLjIsLTIuMDdsLTAuNTMsLTAuMTdsLTIuMDEsMi4zNWwtMS41MiwwLjk0bC0wLjEyLDAuMTRsLTAuODIsMS45M2wtMS41LC0wLjlsMC4wNywtMS4zMmwtMC4wNiwtMC4ybC0xLjU3LC0yLjA0bC0xLjE1LC0wLjkybDAuMywtMC40MWwtMC4xLC0wLjQ0bC0zLjIxLC0xLjY5bC0wLjEzLC0wLjAzbC0xLjY5LC0wLjA4bC0yLjM1LC0xLjMxbC0wLjE2LC0wLjA0bC00LjU1LDAuMjdsLTMuMjQsMC45OWwtMi44LDAuOTFsLTIuMzMsLTAuMThsLTAuMTcsMC4wM2wtMi42MywxLjQxbC0yLjE0LDAuNjRsLTAuMiwwLjE5bC0wLjQ3LDEuNDJsLTAuOCwwLjk5bC0xLjk5LDAuMDZsLTEuNTUsMC4yNGwtMi4yNywtMC41bC0xLjc5LDAuM2wtMS43MSwwLjEzbC0wLjE5LDAuMDlsLTEuMzgsMS4zOWwtMC41OCwtMC4xbC0wLjIxLDAuMDRsLTEuMjYsMC44bC0xLjEzLDAuODVsLTEuNzIsLTAuMWwtMS42LC0wLjBsLTIuNTgsLTEuNzZsLTEuMjEsLTAuNDlsMC4wNCwtMS4xOWwxLjA0LC0wLjMybDAuMTYsLTAuMTJsMC40MiwtMC42NGwwLjA1LC0wLjE5bC0wLjA5LC0wLjk3bDAuMywtMi4wbC0wLjI4LC0xLjY0bC0xLjM0LC0yLjg0bC0wLjM5LC0xLjQ5bDAuMSwtMS41MWwtMC4wNCwtMC4xN2wtMC45NiwtMS43MmwtMC4wNiwtMC43M2wtMC4wOSwtMC4xOWwtMS4wNCwtMS4wMWwtMC4zLC0yLjAybC0wLjA1LC0wLjEybC0xLjIzLC0xLjgzWk03ODQuOTUsMzkzLjM1bDIuMzksMS4wMWwwLjIsMC4wMWwzLjI2LC0wLjk2bDEuMTksMC4xNmwwLjE2LDMuMTlsLTAuNzgsMC45NWwtMC4wNywwLjE2bC0wLjE5LDEuODNsLTAuNDMsLTAuNDFsLTAuNDQsMC4wM2wtMS42MSwxLjk2bC0wLjQsLTAuMTJsLTEuMzgsLTAuMDlsLTEuNDMsLTIuNDJsLTAuMzcsLTIuMDNsLTEuNCwtMi41M2wwLjA0LC0wLjk0bDEuMjcsMC4yWlwiLCBcIm5hbWVcIjogXCJBdXN0cmFsaWFcIn0sIFwiSUxcIjoge1wicGF0aFwiOiBcIk01MDkuMDQsMTk5LjIybDAuNzEsMC4wbDAuMjcsLTAuMTdsMC4xNSwtMC4zM2wwLjE5LC0wLjAxbDAuMDIsMC43M2wtMC4yNywwLjM0bDAuMDIsMC4wOGwtMC4zMiwwLjYybC0wLjY1LC0wLjI3bC0wLjQxLDAuMTlsLTAuNTIsMS44NWwwLjE2LDAuMzVsMC4xNCwwLjA3bC0wLjE3LDAuMWwtMC4xNCwwLjIxbC0wLjExLDAuNzNsMC4zOSwwLjMzbDAuODEsLTAuMjZsMC4wMywwLjY0bC0wLjk3LDMuNDNsLTEuMjgsLTMuNjdsMC42MiwtMC43OGwtMC4wMywtMC40MWwwLjU4LC0xLjE2bDAuNSwtMi4wN2wwLjI3LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJJc3JhZWxcIn0sIFwiSU5cIjoge1wicGF0aFwiOiBcIk02MTUuODQsMTkyLjU4bDIuNCwyLjk3bC0wLjI0LDIuMTdsMC4wNSwwLjJsMC45NCwxLjM1bC0wLjA2LDAuOTdsLTEuNDYsLTAuM2wtMC4zNSwwLjM2bDAuNywzLjA2bDAuMTIsMC4xOGwyLjQ2LDEuNzVsMy4xMSwxLjcybC0xLjIzLDAuOTZsLTAuMSwwLjEzbC0wLjk3LDIuNTVsMC4xNiwwLjM4bDIuNDEsMS4wMmwyLjM3LDEuMzNsMy4yNywxLjUybDMuNDMsMC4zN2wxLjM3LDEuM2wwLjE3LDAuMDhsMS45MiwwLjI1bDMuMCwwLjYybDIuMTUsLTAuMDRsMC4yOCwtMC4yMmwwLjI5LC0xLjA2bDAuMCwtMC4xM2wtMC4zMiwtMS42NmwwLjE2LC0wLjk0bDEuMCwtMC4zN2wwLjIzLDIuMjhsMC4xOCwwLjI0bDIuMjgsMS4wMmwwLjIsMC4wMmwxLjUyLC0wLjQxbDIuMDYsMC4xOGwyLjA4LC0wLjA4bDAuMjksLTAuMjdsMC4xOCwtMS42NmwtMC4xLC0wLjI2bC0wLjUzLC0wLjQ0bDEuMzgsLTAuMjNsMC4xNSwtMC4wN2wyLjI2LC0yLjBsMi43NSwtMS42NWwxLjk3LDAuNjNsMC4yNSwtMC4wM2wxLjU0LC0wLjk5bDAuODksMS4yOGwtMC43MiwwLjk3bDAuMiwwLjQ4bDIuNDksMC4zN2wwLjExLDAuNjFsLTAuNjksMC4zOWwtMC4xNSwwLjNsMC4xNSwxLjIybC0xLjM2LC0wLjM3bC0wLjIzLDAuMDNsLTMuMjQsMS44NmwtMC4xNSwwLjI4bDAuMDcsMS40NGwtMS4zMywyLjE2bC0wLjA0LDAuMTNsLTAuMTIsMS4yNGwtMC45OCwxLjkxbC0xLjcyLC0wLjUzbC0wLjM5LDAuMjhsLTAuMDksMi42NmwtMC41MiwwLjgzbC0wLjA0LDAuMjNsMC4yMSwwLjg5bC0wLjcxLDAuMzZsLTEuMjEsLTMuODVsLTAuMjksLTAuMjFsLTAuNjksMC4wMWwtMC4yOSwwLjIzbC0wLjI4LDEuMTdsLTAuODQsLTAuODRsMC42LC0xLjE3bDAuOTcsLTAuMTNsMC4yMywtMC4xNmwxLjE1LC0yLjI1bC0wLjE4LC0wLjQybC0xLjU0LC0wLjQ3bC0yLjMsMC4wNGwtMi4xMywtMC4zM2wtMC4xOSwtMS42M2wtMC4yNiwtMC4yNmwtMS4xMywtMC4xM2wtMS45MywtMS4xM2wtMC40MiwwLjEzbC0wLjg4LDEuODJsMC4wOCwwLjM3bDEuNDcsMS4xNWwtMS4yMSwwLjc3bC0wLjEsMC4xbC0wLjU2LDAuOTdsMC4xMywwLjQybDEuMzEsMC42MWwtMC4zNiwxLjM1bDAuMDEsMC4ybDAuODUsMS45NWwwLjM3LDIuMDVsLTAuMjYsMC42OGwtMS41NSwtMC4wMmwtMy4wOSwwLjU0bC0wLjI1LDAuMzJsMC4xMywxLjg0bC0xLjIxLDEuNGwtMy42NCwxLjc5bC0yLjc5LDMuMDRsLTEuODYsMS42MWwtMi40OCwxLjY4bC0wLjEzLDAuMjVsLTAuMCwxLjBsLTEuMDcsMC41NWwtMi4yMSwwLjlsLTEuMTMsMC4xM2wtMC4yNSwwLjE5bC0wLjc1LDEuOTZsLTAuMDIsMC4xNWwwLjUyLDMuMzFsMC4xMywyLjAzbC0xLjAzLDIuMzVsLTAuMDMsMC4xMmwtMC4wMSw0LjAzbC0xLjAyLDAuMWwtMC4yMywwLjE1bC0xLjE0LDEuOTNsMC4wNCwwLjM2bDAuNDQsMC40OGwtMS44MywwLjU3bC0wLjE4LDAuMTVsLTAuODEsMS42NWwtMC43NCwwLjUzbC0yLjE0LC0yLjEybC0xLjE0LC0zLjQ3bC0wLjk2LC0yLjU3bC0wLjksLTEuMjZsLTEuMywtMi4zOGwtMC42MSwtMy4xNGwtMC40NCwtMS42MmwtMi4yOSwtMy41NmwtMS4wMywtNC45NGwtMC43NCwtMy4yOWwwLjAxLC0zLjEybC0wLjQ5LC0yLjUxbC0wLjQxLC0wLjIybC0zLjU2LDEuNTNsLTEuNTksLTAuMjhsLTIuOTYsLTIuODdsMC45NCwtMC43NGwwLjA2LC0wLjQxbC0wLjc0LC0xLjAzbC0yLjczLC0yLjFsMS4zNSwtMS40M2w1LjM4LDAuMDFsMC4yOSwtMC4zNmwtMC41LC0yLjI5bC0wLjA5LC0wLjE1bC0xLjMzLC0xLjI4bC0wLjI3LC0xLjk2bC0wLjEyLC0wLjJsLTEuMzYsLTEuMGwyLjQyLC0yLjQ4bDIuNzcsMC4ybDAuMjQsLTAuMWwyLjYyLC0yLjg1bDEuNTksLTIuOGwyLjQxLC0yLjc0bDAuMDcsLTAuMmwtMC4wNCwtMS44MmwyLjAxLC0xLjUxbC0wLjAxLC0wLjQ5bC0xLjk1LC0xLjMzbC0wLjgzLC0xLjgxbC0wLjgyLC0yLjI3bDAuOTgsLTAuOTdsMy42NCwwLjY2bDIuODksLTAuNDJsMC4xNywtMC4wOGwyLjE4LC0yLjE1WlwiLCBcIm5hbWVcIjogXCJJbmRpYVwifSwgXCJUWlwiOiB7XCJwYXRoXCI6IFwiTTUwNS43NywyODcuNThsMC4zNiwwLjIzbDguOTUsNS4wM2wwLjE1LDEuM2wwLjEzLDAuMjFsMy40LDIuMzdsLTEuMDcsMi44OGwtMC4wMiwwLjE0bDAuMTUsMS40MmwwLjE1LDAuMjNsMS40NywwLjg0bDAuMDUsMC40MmwtMC42NiwxLjQ0bC0wLjAyLDAuMThsMC4xMywwLjcybC0wLjE2LDEuMTZsMC4wMywwLjE5bDAuODcsMS41N2wxLjAzLDIuNDhsMC4xMiwwLjE0bDAuNTMsMC4zMmwtMS41OSwxLjE4bC0yLjY0LDAuOTVsLTEuNDUsLTAuMDRsLTAuMiwwLjA3bC0wLjgxLDAuNjlsLTEuNjQsMC4wNmwtMC42OCwwLjNsLTIuOSwtMC42OWwtMS43MSwwLjE3bC0wLjY1LC0zLjE4bC0wLjA1LC0wLjEybC0xLjM1LC0xLjg4bC0wLjE5LC0wLjEybC0yLjQxLC0wLjQ2bC0xLjM4LC0wLjc0bC0xLjYzLC0wLjQ0bC0wLjk2LC0wLjQxbC0wLjk1LC0wLjU4bC0xLjMxLC0zLjA5bC0xLjQ3LC0xLjQ2bC0wLjQ1LC0xLjMxbDAuMjQsLTEuMzRsLTAuMzksLTEuOTlsMC43MSwtMC4wOGwwLjE4LC0wLjA5bDAuOTEsLTAuOTFsMC45OCwtMS4zMWwwLjU5LC0wLjVsMC4xMSwtMC4yNGwtMC4wMiwtMC44MWwtMC4wOCwtMC4ybC0wLjQ3LC0wLjVsLTAuMSwtMC42N2wwLjUxLC0wLjIzbDAuMTgsLTAuMjVsMC4xNCwtMS40N2wtMC4wNSwtMC4ybC0wLjc2LC0xLjA5bDAuNDUsLTAuMTVsMi43MSwwLjAzbDUuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlRhbnphbmlhXCJ9LCBcIkFaXCI6IHtcInBhdGhcIjogXCJNNTM5LjM2LDE3NS42NmwwLjE2LDAuMDlsMS4xMSwwLjJsMC4zMiwtMC4xNWwwLjQsLTAuNzFsMS4yMiwtMC45OWwxLjExLDEuMzNsMS4yNiwyLjA5bDAuMjIsMC4xNGwxLjA2LDAuMTNsMC4yOCwwLjI5bC0xLjQ2LDAuMTdsLTAuMjYsMC4yNGwtMC40MywyLjI2bC0wLjM5LDAuOTJsLTAuODUsMC42M2wtMC4xMiwwLjI1bDAuMDYsMS4ybC0wLjIyLDAuMDVsLTEuMjgsLTEuMjVsMC43NCwtMS4yNWwtMC4wMywtMC4zNWwtMC43NCwtMC44NmwtMC4zLC0wLjFsLTEuMDUsMC4yN2wtMi40OSwxLjgybC0wLjA0LC0xLjQ2bC0wLjE4LC0wLjI3bC0xLjA5LC0wLjQ3bC0wLjgsLTAuNmwwLjUzLC0wLjdsLTAuMDYsLTAuNDJsLTEuMTEsLTAuODRsMC4zNCwtMC41MWwtMC4xMSwtMC40M2wtMC44OSwtMC40OGwtMC4zMywtMC40OWwwLjI1LC0wLjJsMS43OCwwLjgxbDEuMzUsMC4xOGwwLjI1LC0wLjA5bDAuMzQsLTAuMzVsMC4wMiwtMC4zOWwtMS4wNCwtMS4zNmwwLjI4LC0wLjE4bDAuNDksMC4wN2wxLjY1LDEuNzRaTTUzMy41MywxODAuMTZsMC42MywwLjY3bDAuMjIsMC4wOWwwLjgsLTAuMGwwLjA0LDAuMzFsMC42NiwxLjA5bC0wLjk0LC0wLjIxbC0xLjE2LC0xLjI0bC0wLjI1LC0wLjcxWlwiLCBcIm5hbWVcIjogXCJBemVyYmFpamFuXCJ9LCBcIklFXCI6IHtcInBhdGhcIjogXCJNNDA1LjE3LDEzNS4zNWwwLjM2LDIuMTZsLTEuNzgsMi44NGwtNC4yOCwxLjkxbC0zLjAyLC0wLjQzbDEuODEsLTMuMTNsMC4wMiwtMC4yNmwtMS4yMywtMy4yNmwzLjI0LC0yLjU2bDEuNTQsLTEuMzJsMC4zNywxLjMzbC0wLjQ5LDEuNzdsMC4zLDAuMzhsMS40OSwtMC4wNWwxLjY4LDAuNjNaXCIsIFwibmFtZVwiOiBcIklyZWxhbmRcIn0sIFwiSURcIjoge1wicGF0aFwiOiBcIk03NTYuNTYsMjg3Ljg2bDAuNjksNC4wMmwwLjE1LDAuMjFsMi41OSwxLjVsMC4zOSwtMC4wN2wyLjA1LC0yLjYxbDIuNzUsLTEuNDVsMi4wOSwtMC4wbDIuMDgsMC44NWwxLjg1LDAuODlsMi41MiwwLjQ2bDAuMDgsMTUuNDRsLTEuNzIsLTEuNmwtMC4xNSwtMC4wN2wtMi41NCwtMC41MWwtMC4yOSwwLjFsLTAuNTMsMC42MmwtMi41MywwLjA2bDAuNzgsLTEuNTFsMS40OCwtMC42NmwwLjE3LC0wLjM0bC0wLjY1LC0yLjc0bC0xLjIzLC0yLjE5bC0wLjE0LC0wLjEzbC00Ljg1LC0yLjEzbC0yLjA5LC0wLjIzbC0zLjcsLTIuMjhsLTAuNDEsMC4xbC0wLjY3LDEuMTFsLTAuNjMsMC4xNGwtMC40MSwtMC42N2wtMC4wMSwtMS4wMWwtMC4xNCwtMC4yNWwtMS4zOSwtMC44OWwyLjA1LC0wLjY5bDEuNzMsMC4wNWwwLjI5LC0wLjM5bC0wLjIxLC0wLjY2bC0wLjI5LC0wLjIxbC0zLjUsLTAuMGwtMC45LC0xLjM2bC0wLjE5LC0wLjEzbC0yLjE0LC0wLjQ0bC0wLjY1LC0wLjc2bDIuODYsLTAuNTFsMS4yOCwtMC43OWwzLjc1LDAuOTZsMC4zMiwwLjc2Wk03NTguMDEsMzAwLjM3bC0wLjc5LDEuMDRsLTAuMTQsLTEuMDdsMC40LC0wLjgxbDAuMjksLTAuNDdsMC4yNCwwLjMxbC0wLjAsMS4wWk03NDcuNDUsMjkyLjlsMC40OCwxLjAybC0xLjQ1LC0wLjY5bC0yLjA5LC0wLjIxbC0xLjQ1LDAuMTZsLTEuMjgsLTAuMDdsMC4zNSwtMC44MWwyLjg2LC0wLjFsMi41OCwwLjY4Wk03NDEuMTUsMjg1LjY5bC0wLjE2LC0wLjI1bC0wLjcyLC0zLjA4bDAuNDcsLTEuODZsMC4zNSwtMC4zOGwwLjEsMC43M2wwLjI1LDAuMjZsMS4yOCwwLjE5bDAuMTgsMC43OGwtMC4xMSwxLjhsLTAuOTYsLTAuMThsLTAuMzUsMC4yMmwtMC4zOCwxLjUybDAuMDUsMC4yNFpNNzQxLjE5LDI4NS43NWwwLjc2LDAuOTdsLTAuMTEsMC4wNWwtMC42NSwtMS4wMlpNNzM5LjE4LDI5My41MmwtMC42MSwwLjU0bC0xLjQ0LC0wLjM4bC0wLjI1LC0wLjU1bDEuOTMsLTAuMDlsMC4zNiwwLjQ4Wk03MjguNCwyOTUuODdsLTAuMjcsLTAuMDdsLTIuMjYsMC44OWwtMC4zNywtMC40MWwwLjI3LC0wLjhsLTAuMDksLTAuMzNsLTEuNjgsLTEuMzdsMC4xNywtMi4yOWwtMC40MiwtMC4zbC0xLjY3LDAuNzZsLTAuMTcsMC4yOWwwLjIxLDIuOTJsMC4wOSwzLjM0bC0xLjIyLDAuMjhsLTAuNzgsLTAuNTRsMC42NSwtMi4xbDAuMDEsLTAuMTRsLTAuMzksLTIuNDJsLTAuMjksLTAuMjVsLTAuODYsLTAuMDJsLTAuNjMsLTEuNGwwLjk5LC0xLjYxbDAuMzUsLTEuOTdsMS4yNCwtMy43M2wwLjQ5LC0wLjk2bDEuOTUsLTEuN2wxLjg2LDAuNjlsMy4xNiwwLjM1bDIuOTIsLTAuMWwwLjE3LC0wLjA2bDIuMjQsLTEuNjVsMC4xMSwwLjE0bC0xLjgsMi4yMmwtMS43MiwwLjQ0bC0yLjQxLC0wLjQ4bC00LjIxLDAuMTNsLTIuMTksMC4zNmwtMC4yNSwwLjI0bC0wLjM2LDEuOWwwLjA4LDAuMjdsMi4yNCwyLjIzbDAuNCwwLjAybDEuMjksLTEuMDhsMy4xOSwtMC41OGwtMC4xOSwwLjA2bC0xLjA0LDEuNGwtMi4xMywwLjk0bC0wLjEyLDAuNDVsMi4yNiwzLjA2bC0wLjM3LDAuNjlsMC4wMywwLjMybDEuNTEsMS45NVpNNzI4LjQ4LDI5NS45N2wwLjU5LDAuNzZsLTAuMDIsMS4zN2wtMS4wLDAuNTVsLTAuNjQsLTAuNThsMS4wOSwtMS44NGwtMC4wMiwtMC4yNlpNNzI4LjY0LDI4Ni45NWwwLjc5LC0wLjE0bC0wLjA3LDAuMzlsLTAuNzIsLTAuMjRaTTczMi4zOCwzMTAuMWwtMS44OSwwLjQ5bC0wLjA2LC0wLjA2bDAuMTcsLTAuNjRsMS4wLC0xLjQybDIuMTQsLTAuODdsMC4xLDAuMmwwLjA0LDAuNThsLTEuNDksMS43MlpNNzI4LjI2LDMwNS43MWwtMC4xNywwLjYzbC0zLjUzLDAuNjdsLTMuMDIsLTAuMjhsLTAuMCwtMC40MmwxLjY2LC0wLjQ0bDEuNDcsMC43MWwwLjE2LDAuMDNsMS43NSwtMC4yMWwxLjY5LC0wLjY5Wk03MjIuOTgsMzEwLjMzbC0wLjc0LDAuMDNsLTIuNTIsLTEuMzVsMS40MiwtMC4zbDEuMTksMC43bDAuNzIsMC42M2wtMC4wNiwwLjI4Wk03MTYuMjQsMzA1LjYzbDAuNjYsMC40OWwwLjIyLDAuMDZsMS4zNSwtMC4xOGwwLjMxLDAuNTNsLTQuMTgsMC43N2wtMC44LC0wLjAxbDAuNTEsLTAuODZsMS4yLC0wLjAybDAuMjQsLTAuMTJsMC40OSwtMC42NVpNNzE1Ljg0LDI4MC4yMWwwLjA5LDAuMzRsMi4yNSwxLjg2bC0yLjI1LDAuMjJsLTAuMjQsMC4xN2wtMC44NCwxLjcxbC0wLjAzLDAuMTVsMC4xLDIuMTFsLTIuMjcsMS42MmwtMC4xMywwLjI0bC0wLjA2LDIuNDZsLTAuNzQsMi45MmwtMC4wMiwtMC4wNWwtMC4zOSwtMC4xNmwtMi42MiwxLjA0bC0wLjg2LC0xLjMzbC0wLjIzLC0wLjE0bC0xLjcxLC0wLjE0bC0xLjE5LC0wLjc2bC0wLjI1LC0wLjAzbC0yLjc4LDAuODRsLTAuNzksLTEuMDVsLTAuMjYsLTAuMTJsLTEuNjEsMC4xM2wtMS44LC0wLjI1bC0wLjM2LC0zLjEzbC0wLjE1LC0wLjIzbC0xLjE4LC0wLjY1bC0xLjEzLC0yLjAybC0wLjMzLC0yLjFsMC4yNywtMi4xOWwxLjA1LC0xLjE3bDAuMjgsMS4xMmwwLjEsMC4xNmwxLjcxLDEuNDFsMC4yOCwwLjA1bDEuNTUsLTAuNDlsMS41NCwwLjE3bDAuMjMsLTAuMDdsMS40LC0xLjIxbDEuMDUsLTAuMTlsMi4zLDAuNjhsMC4xNiwwLjBsMi4wNCwtMC41M2wwLjIxLC0wLjE5bDEuMjYsLTMuNDFsMC45MSwtMC44MmwwLjA5LC0wLjE0bDAuOCwtMi42NGwyLjYzLDAuMGwxLjcxLDAuMzNsLTEuMTksMS44OWwwLjAyLDAuMzRsMS43NCwyLjI0bC0wLjM3LDEuMFpNNjkyLjY3LDMwMi4wbDAuMjYsMC4xOWw0LjgsMC4yNWwwLjI4LC0wLjE2bDAuNDQsLTAuODNsNC4yOSwxLjEybDAuODUsMS41MmwwLjIzLDAuMTVsMy43MSwwLjQ1bDIuMzcsMS4xNWwtMi4wNiwwLjY5bC0yLjc3LC0xLjBsLTIuMjUsMC4wN2wtMi41NywtMC4xOGwtMi4zMSwtMC40NWwtMi45NCwtMC45N2wtMS44NCwtMC4yNWwtMC4xMywwLjAxbC0wLjk3LDAuMjlsLTQuMzQsLTAuOThsLTAuMzgsLTAuOTRsLTAuMjUsLTAuMTlsLTEuNzYsLTAuMTRsMS4zMSwtMS44NGwyLjgxLDAuMTRsMS45NywwLjk2bDAuOTUsMC4xOWwwLjI4LDAuNzRaTTY4NS42MywyOTkuMjdsLTIuMzYsMC4wNGwtMi4wNywtMi4wNWwtMy4xNywtMi4wMmwtMS4wNiwtMS41bC0xLjg4LC0yLjAybC0xLjIyLC0xLjg1bC0xLjksLTMuNDlsLTIuMiwtMi4xMWwtMC43MSwtMi4wOGwtMC45NCwtMS45OWwtMC4xLC0wLjEybC0yLjIxLC0xLjU0bC0xLjM1LC0yLjE3bC0xLjg2LC0xLjM5bC0yLjUzLC0yLjY4bC0wLjE0LC0wLjgxbDEuMjIsMC4wOGwzLjc2LDAuNDdsMi4xNiwyLjRsMS45NCwxLjdsMS4zNywxLjA0bDIuMzUsMi42N2wwLjIyLDAuMWwyLjQ0LDAuMDRsMS45OSwxLjYybDEuNDIsMi4wNmwwLjA5LDAuMDlsMS42NywxLjBsLTAuODgsMS44bDAuMTEsMC4zOWwxLjQ0LDAuODdsMC4xMywwLjA0bDAuNjgsMC4wNWwwLjQxLDEuNjJsMC44NywxLjRsMC4yMiwwLjE0bDEuNzEsMC4yMWwxLjA2LDEuMzhsLTAuNjEsMy4wNGwtMC4wOSwzLjZaXCIsIFwibmFtZVwiOiBcIkluZG9uZXNpYVwifSwgXCJVQVwiOiB7XCJwYXRoXCI6IFwiTTUwMC41NCwxNDEuNDJsMC45LDAuMTNsMC4yNywtMC4xMWwwLjUyLC0wLjYybDAuNjgsMC4xM2wyLjQzLC0wLjNsMS4zMiwxLjU3bC0wLjQ1LDAuNDhsLTAuMDcsMC4yNmwwLjIxLDEuMDNsMC4yNywwLjI0bDEuODUsMC4xNWwwLjc2LDEuMjJsLTAuMDUsMC41NWwwLjIsMC4zMWwzLjE4LDEuMTVsMC4xOCwwLjAxbDEuNzUsLTAuNDdsMS40MiwxLjQxbDAuMjIsMC4wOWwxLjQyLC0wLjAzbDMuNDQsMC45OWwwLjAyLDAuNjVsLTAuOTcsMS42MmwtMC4wMywwLjI0bDAuNTIsMS42N2wtMC4yOSwwLjc5bC0yLjI0LDAuMjJsLTAuMTQsMC4wNWwtMS4yOSwwLjg5bC0wLjEzLDAuMjNsLTAuMDcsMS4xNmwtMS43NSwwLjIybC0wLjEyLDAuMDRsLTEuNiwwLjk4bC0yLjI3LDAuMTZsLTAuMTIsMC4wNGwtMi4xNiwxLjE3bC0wLjE2LDAuMjlsMC4xNSwxLjk0bDAuMTQsMC4yM2wxLjIzLDAuNzVsMC4xOCwwLjA0bDIuMDYsLTAuMTVsLTAuMjIsMC41MWwtMi42NywwLjU0bC0zLjI3LDEuNzJsLTEuMCwtMC40NWwwLjQ1LC0xLjE5bC0wLjE5LC0wLjM5bC0yLjM0LC0wLjc4bDAuMTUsLTAuMmwyLjMyLC0xLjBsMC4wOSwtMC40OWwtMC43MywtMC43MmwtMC4xNSwtMC4wOGwtMy42OSwtMC43NWwtMC4xNCwtMC45NmwtMC4zNSwtMC4yNWwtMi4zMiwwLjM5bC0wLjIxLDAuMTVsLTAuOTEsMS43bC0xLjc3LDIuMWwtMC45MywtMC40NGwtMC4yNCwtMC4wbC0xLjA1LDAuNDVsLTAuNDgsLTAuMjVsMC4xMywtMC4wN2wwLjE0LC0wLjE1bDAuNDMsLTEuMDRsMC42NywtMC45N2wwLjA0LC0wLjI2bC0wLjEsLTAuMzFsMC4wNCwtMC4wMmwwLjExLDAuMTlsMC4yNCwwLjE1bDEuNDgsMC4wOWwwLjc4LC0wLjI1bDAuMDcsLTAuNTNsLTAuMjcsLTAuMTlsMC4wOSwtMC4yNWwtMC4wOCwtMC4zM2wtMC44MSwtMC43NGwtMC4zNCwtMS4yNGwtMC4xNCwtMC4xOGwtMC43MywtMC40MmwwLjE1LC0wLjg3bC0wLjExLC0wLjI5bC0xLjEzLC0wLjg2bC0wLjE1LC0wLjA2bC0wLjk3LC0wLjExbC0xLjc5LC0wLjk3bC0wLjIsLTAuMDNsLTEuNjYsMC4zMmwtMC4xMywwLjA2bC0wLjUyLDAuNDFsLTAuOTUsLTAuMGwtMC4yMywwLjExbC0wLjU2LDAuNjZsLTEuNzQsMC4yOWwtMC43OSwwLjQzbC0xLjAxLC0wLjY4bC0wLjE2LC0wLjA1bC0xLjU3LC0wLjAxbC0xLjUyLC0wLjM1bC0wLjIzLDAuMDRsLTAuNzEsMC40NWwtMC4wOSwtMC40M2wtMC4xMywtMC4xOWwtMS4xOCwtMC43NGwwLjM4LC0xLjAybDAuNTMsLTAuNjRsMC4zNSwwLjEybDAuMzcsLTAuNDFsLTAuNTcsLTEuMjlsMi4xLC0yLjVsMS4xNiwtMC4zNmwwLjIsLTAuMmwwLjI3LC0wLjkybC0wLjAxLC0wLjJsLTEuMSwtMi41MmwwLjc5LC0wLjA5bDAuMTMsLTAuMDVsMS4zLC0wLjg2bDEuODMsLTAuMDdsMi40OCwwLjI2bDIuODQsMC44bDEuOTEsMC4wNmwwLjg4LDAuNDVsMC4yOSwtMC4wMWwwLjcyLC0wLjQ0bDAuNDksMC41OGwwLjI1LDAuMTFsMi4yLC0wLjE2bDAuOTQsMC4zbDAuMzksLTAuMjZsMC4xNSwtMS41N2wwLjYxLC0wLjU5bDIuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlVrcmFpbmVcIn0sIFwiUUFcIjoge1wicGF0aFwiOiBcIk01NDguNDcsMjIxLjQ3bC0wLjE1LC0xLjcybDAuNTksLTEuMjNsMC4zOCwtMC4xNmwwLjU0LDAuNmwwLjA0LDEuNGwtMC40NywxLjM3bC0wLjQxLDAuMTFsLTAuNTMsLTAuMzdaXCIsIFwibmFtZVwiOiBcIlFhdGFyXCJ9LCBcIk1aXCI6IHtcInBhdGhcIjogXCJNNTA3LjcxLDMxNC4xNGwxLjY1LC0wLjE4bDIuOTYsMC43bDAuMiwtMC4wMmwwLjYsLTAuMjlsMS42OCwtMC4wNmwwLjE4LC0wLjA3bDAuOCwtMC42OWwxLjUsMC4wMmwyLjc0LC0wLjk4bDEuNzQsLTEuMjdsMC4yNSwwLjdsLTAuMSwyLjQ3bDAuMzEsMi4yN2wwLjEsMy45N2wwLjQyLDEuMjRsLTAuNywxLjcxbC0wLjk0LDEuNzNsLTEuNTIsMS41MmwtNS4wNiwyLjIxbC0yLjg4LDIuOGwtMS4wMSwwLjUxbC0xLjcyLDEuODFsLTAuOTksMC41OGwtMC4xNSwwLjIzbC0wLjIxLDEuODZsMC4wNCwwLjE5bDEuMTcsMS45NWwwLjQ3LDEuNDdsMC4wMywwLjc0bDAuMzksMC4yOGwwLjA1LC0wLjAxbC0wLjA2LDIuMTNsLTAuMzksMS4xOWwwLjEsMC4zM2wwLjQyLDAuMzJsLTAuMjgsMC44M2wtMC45NSwwLjg2bC0yLjAzLDAuODhsLTMuMDgsMS40OWwtMS4xLDAuOTlsLTAuMDksMC4yOGwwLjIxLDEuMTNsMC4yMSwwLjIzbDAuMzgsMC4xMWwtMC4xNCwwLjg5bC0xLjM5LC0wLjAybC0wLjE3LC0wLjk0bC0wLjM4LC0xLjIzbC0wLjIsLTAuODlsMC40NCwtMi45MWwtMC4wMSwtMC4xNGwtMC42NSwtMS44OGwtMS4xNSwtMy41NWwyLjUyLC0yLjg1bDAuNjgsLTEuODlsMC4yOSwtMC4xOGwwLjE0LC0wLjJsMC4yOCwtMS41M2wtMC4wMywtMC4xOWwtMC4zNiwtMC43bDAuMSwtMS44M2wwLjQ5LC0xLjg0bC0wLjAxLC0zLjI2bC0wLjE0LC0wLjI1bC0xLjMsLTAuODNsLTAuMTEsLTAuMDRsLTEuMDgsLTAuMTdsLTAuNDcsLTAuNTVsLTAuMSwtMC4wOGwtMS4xNiwtMC41NGwtMC4xMywtMC4wM2wtMS44MywwLjA0bC0wLjMyLC0yLjI1bDcuMTksLTEuOTlsMS4zMiwxLjEybDAuMjksMC4wNmwwLjU1LC0wLjE5bDAuNzUsMC40OWwwLjExLDAuODFsLTAuNDksMS4xMWwtMC4wMiwwLjE1bDAuMTksMS44MWwwLjA5LDAuMThsMS42MywxLjU5bDAuNDgsLTAuMWwwLjcyLC0xLjY4bDAuOTksLTAuNDlsMC4xNywtMC4yOWwtMC4yMSwtMy4yOWwtMC4wNCwtMC4xM2wtMS4xMSwtMS45MmwtMC45LC0wLjgybC0wLjIxLC0wLjA4bC0wLjYyLDAuMDNsLTAuNjMsLTIuOThsMC42MSwtMS42N1pcIiwgXCJuYW1lXCI6IFwiTW96YW1iaXF1ZVwifX0sIFwiaGVpZ2h0XCI6IDQ0MC43MDYzMTA3NDQxMzMxLCBcInByb2plY3Rpb25cIjoge1widHlwZVwiOiBcIm1pbGxcIiwgXCJjZW50cmFsTWVyaWRpYW5cIjogMTEuNX0sIFwid2lkdGhcIjogOTAwLjB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55\n"); - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(e){if(true){!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (e),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))}else{e(jQuery)}})(function(e){\"use strict\";var t={},n=Math.max,r=Math.min;t.c={};t.c.d=e(document);t.c.t=function(e){return e.originalEvent.touches.length-1};t.o=function(){var n=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.w=0;this.h=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.scale=1;this.relative=false;this.relativeWidth=false;this.relativeHeight=false;this.$div=null;this.run=function(){var t=function(e,t){var r;for(r in t){n.o[r]=t[r]}n._carve().init();n._configure()._draw()};if(this.$.data(\"kontroled\"))return;this.$.data(\"kontroled\",true);this.extend();this.o=e.extend({min:this.$.data(\"min\")!==undefined?this.$.data(\"min\"):0,max:this.$.data(\"max\")!==undefined?this.$.data(\"max\"):100,stopper:true,readOnly:this.$.data(\"readonly\")||this.$.attr(\"readonly\")===\"readonly\",cursor:this.$.data(\"cursor\")===true&&30||this.$.data(\"cursor\")||0,thickness:this.$.data(\"thickness\")&&Math.max(Math.min(this.$.data(\"thickness\"),1),.01)||.35,lineCap:this.$.data(\"linecap\")||\"butt\",width:this.$.data(\"width\")||200,height:this.$.data(\"height\")||200,displayInput:this.$.data(\"displayinput\")==null||this.$.data(\"displayinput\"),displayPrevious:this.$.data(\"displayprevious\"),fgColor:this.$.data(\"fgcolor\")||\"#87CEEB\",inputColor:this.$.data(\"inputcolor\"),font:this.$.data(\"font\")||\"Arial\",fontWeight:this.$.data(\"font-weight\")||\"bold\",inline:false,step:this.$.data(\"step\")||1,rotation:this.$.data(\"rotation\"),draw:null,change:null,cancel:null,release:null,format:function(e){return e},parse:function(e){return parseFloat(e)}},this.o);this.o.flip=this.o.rotation===\"anticlockwise\"||this.o.rotation===\"acw\";if(!this.o.inputColor){this.o.inputColor=this.o.fgColor}if(this.$.is(\"fieldset\")){this.v={};this.i=this.$.find(\"input\");this.i.each(function(t){var r=e(this);n.i[t]=r;n.v[t]=n.o.parse(r.val());r.bind(\"change blur\",function(){var e={};e[t]=r.val();n.val(n._validate(e))})});this.$.find(\"legend\").remove()}else{this.i=this.$;this.v=this.o.parse(this.$.val());this.v===\"\"&&(this.v=this.o.min);this.$.bind(\"change blur\",function(){n.val(n._validate(n.o.parse(n.$.val())))})}!this.o.displayInput&&this.$.hide();this.$c=e(document.createElement(\"canvas\")).attr({width:this.o.width,height:this.o.height});this.$div=e('<div style=\"'+(this.o.inline?\"display:inline;\":\"\")+\"width:\"+this.o.width+\"px;height:\"+this.o.height+\"px;\"+'\"></div>');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!==\"undefined\"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext(\"2d\"):null;if(!this.c){throw{name:\"CanvasNotSupportedException\",message:\"Canvas not supported. Please use excanvas on IE8.0.\",toString:function(){return this.name+\": \"+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf(\"%\");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf(\"%\");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind(\"configure\",t).parent().bind(\"configure\",t);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var e=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),t=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(e,t)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+\"px\",height:this.h+\"px\"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var e=true;n.g=n.c;n.clear();n.dH&&(e=n.dH());e!==false&&n.draw()};this._touch=function(e){var r=function(e){var t=n.xy2val(e.originalEvent.touches[n.t].pageX,e.originalEvent.touches[n.t].pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};this.t=t.c.t(e);r(e);t.c.d.bind(\"touchmove.k\",r).bind(\"touchend.k\",function(){t.c.d.unbind(\"touchmove.k touchend.k\");n.val(n.cv)});return this};this._mouse=function(e){var r=function(e){var t=n.xy2val(e.pageX,e.pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};r(e);t.c.d.bind(\"mousemove.k\",r).bind(\"keyup.k\",function(e){if(e.keyCode===27){t.c.d.unbind(\"mouseup.k mousemove.k keyup.k\");if(n.eH&&n.eH()===false)return;n.cancel()}}).bind(\"mouseup.k\",function(e){t.c.d.unbind(\"mousemove.k mouseup.k keyup.k\");n.val(n.cv)});return this};this._xy=function(){var e=this.$c.offset();this.x=e.left;this.y=e.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind(\"mousedown\",function(e){e.preventDefault();n._xy()._mouse(e)}).bind(\"touchstart\",function(e){e.preventDefault();n._xy()._touch(e)});this.listen()}else{this.$.attr(\"readonly\",\"readonly\")}if(this.relative){e(window).resize(function(){n._carve().init();n._draw()})}return this};this._configure=function(){if(this.o.draw)this.dH=this.o.draw;if(this.o.change)this.cH=this.o.change;if(this.o.cancel)this.eH=this.o.cancel;if(this.o.release)this.rH=this.o.release;if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,\"0.4\");this.fgColor=this.h2rgba(this.o.fgColor,\"0.6\")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(e){var t=~~((e<0?-.5:.5)+e/this.o.step)*this.o.step;return Math.round(t*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(e){};this.val=function(e){};this.xy2val=function(e,t){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(e,t){var n;e=e.substring(1,7);n=[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)];return\"rgba(\"+n[0]+\",\"+n[1]+\",\"+n[2]+\",\"+t+\")\"};this.copy=function(e,t){for(var n in e){t[n]=e[n]}}};t.Dial=function(){t.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=e.extend({bgColor:this.$.data(\"bgcolor\")||\"#EEEEEE\",angleOffset:this.$.data(\"angleoffset\")||0,angleArc:this.$.data(\"anglearc\")||360,inline:true},this.o)};this.val=function(e,t){if(null!=e){e=this.o.parse(e);if(t!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?n(r(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,t){var i,s;i=Math.atan2(e-(this.x+this.w2),-(t-this.y-this.w2))-this.angleOffset;if(this.o.flip){i=this.angleArc-i-this.PI2}if(this.angleArc!=this.PI2&&i<0&&i>-.5){i=0}else if(i<0){i+=this.PI2}s=i*(this.o.max-this.o.min)/this.angleArc+this.o.min;this.o.stopper&&(s=n(r(s,this.o.max),this.o.min));return s};this.listen=function(){var t=this,i,s,o=function(e){e.preventDefault();var o=e.originalEvent,u=o.detail||o.wheelDeltaX,a=o.detail||o.wheelDeltaY,f=t._validate(t.o.parse(t.$.val()))+(u>0||a>0?t.o.step:u<0||a<0?-t.o.step:0);f=n(r(f,t.o.max),t.o.min);t.val(f,false);if(t.rH){clearTimeout(i);i=setTimeout(function(){t.rH(f);i=null},100);if(!s){s=setTimeout(function(){if(i)t.rH(f);s=null},200)}}},u,a,f=1,l={37:-t.o.step,38:t.o.step,39:t.o.step,40:-t.o.step};this.$.bind(\"keydown\",function(i){var s=i.keyCode;if(s>=96&&s<=105){s=i.keyCode=s-48}u=parseInt(String.fromCharCode(s));if(isNaN(u)){s!==13&&s!==8&&s!==9&&s!==189&&(s!==190||t.$.val().match(/\\./))&&i.preventDefault();if(e.inArray(s,[37,38,39,40])>-1){i.preventDefault();var o=t.o.parse(t.$.val())+l[s]*f;t.o.stopper&&(o=n(r(o,t.o.max),t.o.min));t.change(t._validate(o));t._draw();a=window.setTimeout(function(){f*=2},30)}}}).bind(\"keyup\",function(e){if(isNaN(u)){if(a){window.clearTimeout(a);a=null;f=1;t.val(t.$.val())}}else{t.$.val()>t.o.max&&t.$.val(t.o.max)||t.$.val()<t.o.min&&t.$.val(t.o.min)}});this.$c.bind(\"mousewheel DOMMouseScroll\",o);this.$.bind(\"mousewheel DOMMouseScroll\",o)};this.init=function(){if(this.v<this.o.min||this.v>this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=n(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:(this.w/2+4>>0)+\"px\",height:(this.w/3>>0)+\"px\",position:\"absolute\",\"vertical-align\":\"middle\",\"margin-top\":(this.w/3>>0)+\"px\",\"margin-left\":\"-\"+(this.w*3/4+2>>0)+\"px\",border:0,background:\"none\",font:this.o.fontWeight+\" \"+(this.w/e>>0)+\"px \"+this.o.font,\"text-align\":\"center\",color:this.o.inputColor||this.o.fgColor,padding:\"0px\",\"-webkit-appearance\":\"none\"})||this.i.css({width:\"0px\",visibility:\"hidden\"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(e){var t,n;e=this.angle(e);if(this.o.flip){t=this.endAngle+1e-5;n=t-e-1e-5}else{t=this.startAngle-1e-5;n=t+e+1e-5}this.o.cursor&&(t=n-this.cursorExt)&&(n=n+this.cursorExt);return{s:t,e:n,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var e=this.g,t=this.arc(this.cv),n,r=1;e.lineWidth=this.lineWidth;e.lineCap=this.lineCap;if(this.o.bgColor!==\"none\"){e.beginPath();e.strokeStyle=this.o.bgColor;e.arc(this.xy,this.xy,this.radius,this.endAngle-1e-5,this.startAngle+1e-5,true);e.stroke()}if(this.o.displayPrevious){n=this.arc(this.v);e.beginPath();e.strokeStyle=this.pColor;e.arc(this.xy,this.xy,this.radius,n.s,n.e,n.d);e.stroke();r=this.cv==this.v}e.beginPath();e.strokeStyle=r?this.o.fgColor:this.fgColor;e.arc(this.xy,this.xy,this.radius,t.s,t.e,t.d);e.stroke()};this.cancel=function(){this.val(this.v)}};e.fn.dial=e.fn.knob=function(n){return this.each(function(){var r=new t.Dial;r.o=n;r.$=e(this);r.run()}).parent()}})//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1rbm9iL2Rpc3QvanF1ZXJ5Lmtub2IubWluLmpzPzRjOTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkdBQWEsU0FBMkM7QUFBQTtBQUFBO0FBQUEscUdBQXFCLEtBQUssV0FBVyxjQUFjLGFBQWEsUUFBUSx1QkFBdUIsT0FBTyxrQkFBa0Isa0JBQWtCLHlDQUF5QyxlQUFlLFdBQVcsWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLGFBQWEsU0FBUyxTQUFTLFNBQVMsU0FBUyxhQUFhLFlBQVksU0FBUyxrQkFBa0Isa0JBQWtCLGlCQUFpQixhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsb0JBQW9CLHlCQUF5QiwwQkFBMEIsZUFBZSxvQkFBb0Isb0JBQW9CLE1BQU0sWUFBWSxZQUFZLGtCQUFrQix3QkFBd0IsbUNBQW1DLDhCQUE4QixjQUFjLGlCQUFpQixtM0JBQW0zQixTQUFTLG1CQUFtQixzQkFBc0IsU0FBUyx1RUFBdUUsdUJBQXVCLGlDQUFpQywwQkFBMEIsVUFBVSw0QkFBNEIsd0JBQXdCLGNBQWMsU0FBUywwQkFBMEIsZ0NBQWdDLFNBQVMsYUFBYSxzQkFBc0IsRUFBRSxFQUFFLCtCQUErQixLQUFLLGNBQWMsa0NBQWtDLGlDQUFpQyxxQ0FBcUMseUNBQXlDLEVBQUUsb0NBQW9DLGtEQUFrRCx3Q0FBd0MsRUFBRSwwREFBMEQsZ0NBQWdDLDJCQUEyQixjQUFjLHVDQUF1QywwQkFBMEIsNENBQTRDLDJDQUEyQyw4REFBOEQsWUFBWSxNQUFNLHFIQUFxSCxxQ0FBcUMsbU5BQW1OLGlFQUFpRSxvRUFBb0Usc0RBQXNELGNBQWMsNkJBQTZCLFdBQVcsMEJBQTBCLEtBQUssZUFBZSx3REFBd0QseUNBQXlDLGlCQUFpQixrQ0FBa0MsYUFBYSxhQUFhLHVCQUF1QixrQkFBa0Isb05BQW9OLDRCQUE0QixLQUFLLG9CQUFvQixxQkFBcUIsZUFBZSxxQ0FBcUMsRUFBRSxjQUFjLDJCQUEyQixFQUFFLG1CQUFtQiw2Q0FBNkMsK0NBQStDLHNCQUFzQix1QkFBdUIsYUFBYSxzQkFBc0IsV0FBVyxRQUFRLFVBQVUsaUJBQWlCLHFCQUFxQix3QkFBd0Isa0JBQWtCLHNGQUFzRixrQkFBa0IsZ0NBQWdDLHlCQUF5QixXQUFXLGdCQUFnQixLQUFLLHlEQUF5RCx1Q0FBdUMsWUFBWSxFQUFFLGFBQWEsd0JBQXdCLGtCQUFrQixnQ0FBZ0Msa0JBQWtCLGdDQUFnQyx5QkFBeUIsV0FBVyxLQUFLLHVEQUF1RCxtQkFBbUIsOENBQThDLCtCQUErQixZQUFZLCtCQUErQiw4Q0FBOEMsWUFBWSxFQUFFLGFBQWEsb0JBQW9CLHVCQUF1QixjQUFjLGFBQWEsYUFBYSx3QkFBd0IscUJBQXFCLHFDQUFxQyxtQkFBbUIsa0JBQWtCLGdDQUFnQyxtQkFBbUIsa0JBQWtCLEVBQUUsY0FBYyxLQUFLLG1DQUFtQyxrQkFBa0IsNEJBQTRCLGtCQUFrQixVQUFVLEVBQUUsYUFBYSwyQkFBMkIsbUNBQW1DLHVDQUF1Qyx1Q0FBdUMseUNBQXlDLDJCQUEyQiw4Q0FBOEMsK0NBQStDLEtBQUssNEJBQTRCLGFBQWEsdUJBQXVCLG1DQUFtQywyQkFBMkIsaURBQWlELDhCQUE4Qix5QkFBeUIseUJBQXlCLHVCQUF1QiwwQkFBMEIsdUJBQXVCLDRCQUE0Qix1QkFBdUIsc0JBQXNCLGVBQWUsMEJBQTBCLE1BQU0sbUJBQW1CLDhGQUE4RixnREFBZ0Qsd0JBQXdCLGdCQUFnQixhQUFhLGtCQUFrQixlQUFlLHFCQUFxQixhQUFhLGlCQUFpQixvQkFBb0Isb0JBQW9CLGFBQWEsbUJBQW1CLHVCQUF1QixpQkFBaUIsc0lBQXNJLFVBQVUsdUJBQXVCLFlBQVksa0JBQWtCLHNEQUFzRCxPQUFPLHVEQUF1RCxlQUFlLGtDQUFrQyxhQUFhLEtBQUssZ0JBQWdCLDBCQUEwQixRQUFRLHNFQUFzRSxnQkFBZ0IsMkJBQTJCLHdDQUF3QyxJQUFJLGFBQWEsWUFBWSxxREFBcUQsa0RBQWtELFVBQVUsdUJBQXVCLDZCQUE2QixtQkFBbUIsdUpBQXVKLDBCQUEwQixlQUFlLFNBQVMsZ0JBQWdCLHdCQUF3QixRQUFRLE9BQU8sTUFBTSxPQUFPLHdCQUF3QixhQUFhLE9BQU8sUUFBUSxZQUFZLG1EQUFtRCxrQ0FBa0MsZ0JBQWdCLGtCQUFrQixpQkFBaUIsbUNBQW1DLGFBQWEsb0ZBQW9GLGtDQUFrQyxtQkFBbUIsa0NBQWtDLHlDQUF5Qyx5QkFBeUIsVUFBVSwrQkFBK0IsS0FBSyxPQUFPLDJCQUEyQixhQUFhLE1BQU0sdUJBQXVCLE9BQU8sSUFBSSxrQkFBa0IsS0FBSywwRUFBMEUsRUFBRSw0Q0FBNEMsNENBQTRDLHFCQUFxQix5Q0FBeUMsa0JBQWtCLG1CQUFtQixpQkFBaUIsaUNBQWlDLDJCQUEyQix3Q0FBd0MsNEJBQTRCLHFDQUFxQyx3RkFBd0YsbUZBQW1GLGdEQUFnRCwwQ0FBMEMsNkNBQTZDLHlEQUF5RCxxRkFBcUYsaUNBQWlDLDBXQUEwVyxlQUFlLGdDQUFnQyxHQUFHLHdCQUF3QixVQUFVLDhCQUE4Qix1QkFBdUIsNERBQTRELHFCQUFxQixRQUFRLGdCQUFnQixnQkFBZ0IscUJBQXFCLFdBQVcsS0FBSyx1QkFBdUIsV0FBVywwREFBMEQsT0FBTyx3Q0FBd0MscUJBQXFCLHVDQUF1QywyQkFBMkIsdUJBQXVCLDRCQUE0QixjQUFjLDZCQUE2QixnRkFBZ0YsV0FBVywyQkFBMkIsbUJBQW1CLGNBQWMsMEJBQTBCLCtDQUErQyxXQUFXLGtCQUFrQixjQUFjLDRDQUE0QywrQ0FBK0MsWUFBWSx1QkFBdUIsbUJBQW1CLGdDQUFnQyw0QkFBNEIsaUJBQWlCLE1BQU0sWUFBWSxRQUFRLFlBQVkiLCJmaWxlIjoiNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oZSl7aWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtcImpxdWVyeVwiXSxlKX1lbHNle2UoalF1ZXJ5KX19KShmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17fSxuPU1hdGgubWF4LHI9TWF0aC5taW47dC5jPXt9O3QuYy5kPWUoZG9jdW1lbnQpO3QuYy50PWZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGgtMX07dC5vPWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLm89bnVsbDt0aGlzLiQ9bnVsbDt0aGlzLmk9bnVsbDt0aGlzLmc9bnVsbDt0aGlzLnY9bnVsbDt0aGlzLmN2PW51bGw7dGhpcy54PTA7dGhpcy55PTA7dGhpcy53PTA7dGhpcy5oPTA7dGhpcy4kYz1udWxsO3RoaXMuYz1udWxsO3RoaXMudD0wO3RoaXMuaXNJbml0PWZhbHNlO3RoaXMuZmdDb2xvcj1udWxsO3RoaXMucENvbG9yPW51bGw7dGhpcy5kSD1udWxsO3RoaXMuY0g9bnVsbDt0aGlzLmVIPW51bGw7dGhpcy5ySD1udWxsO3RoaXMuc2NhbGU9MTt0aGlzLnJlbGF0aXZlPWZhbHNlO3RoaXMucmVsYXRpdmVXaWR0aD1mYWxzZTt0aGlzLnJlbGF0aXZlSGVpZ2h0PWZhbHNlO3RoaXMuJGRpdj1udWxsO3RoaXMucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2YXIgcjtmb3IociBpbiB0KXtuLm9bcl09dFtyXX1uLl9jYXJ2ZSgpLmluaXQoKTtuLl9jb25maWd1cmUoKS5fZHJhdygpfTtpZih0aGlzLiQuZGF0YShcImtvbnRyb2xlZFwiKSlyZXR1cm47dGhpcy4kLmRhdGEoXCJrb250cm9sZWRcIix0cnVlKTt0aGlzLmV4dGVuZCgpO3RoaXMubz1lLmV4dGVuZCh7bWluOnRoaXMuJC5kYXRhKFwibWluXCIpIT09dW5kZWZpbmVkP3RoaXMuJC5kYXRhKFwibWluXCIpOjAsbWF4OnRoaXMuJC5kYXRhKFwibWF4XCIpIT09dW5kZWZpbmVkP3RoaXMuJC5kYXRhKFwibWF4XCIpOjEwMCxzdG9wcGVyOnRydWUscmVhZE9ubHk6dGhpcy4kLmRhdGEoXCJyZWFkb25seVwiKXx8dGhpcy4kLmF0dHIoXCJyZWFkb25seVwiKT09PVwicmVhZG9ubHlcIixjdXJzb3I6dGhpcy4kLmRhdGEoXCJjdXJzb3JcIik9PT10cnVlJiYzMHx8dGhpcy4kLmRhdGEoXCJjdXJzb3JcIil8fDAsdGhpY2tuZXNzOnRoaXMuJC5kYXRhKFwidGhpY2tuZXNzXCIpJiZNYXRoLm1heChNYXRoLm1pbih0aGlzLiQuZGF0YShcInRoaWNrbmVzc1wiKSwxKSwuMDEpfHwuMzUsbGluZUNhcDp0aGlzLiQuZGF0YShcImxpbmVjYXBcIil8fFwiYnV0dFwiLHdpZHRoOnRoaXMuJC5kYXRhKFwid2lkdGhcIil8fDIwMCxoZWlnaHQ6dGhpcy4kLmRhdGEoXCJoZWlnaHRcIil8fDIwMCxkaXNwbGF5SW5wdXQ6dGhpcy4kLmRhdGEoXCJkaXNwbGF5aW5wdXRcIik9PW51bGx8fHRoaXMuJC5kYXRhKFwiZGlzcGxheWlucHV0XCIpLGRpc3BsYXlQcmV2aW91czp0aGlzLiQuZGF0YShcImRpc3BsYXlwcmV2aW91c1wiKSxmZ0NvbG9yOnRoaXMuJC5kYXRhKFwiZmdjb2xvclwiKXx8XCIjODdDRUVCXCIsaW5wdXRDb2xvcjp0aGlzLiQuZGF0YShcImlucHV0Y29sb3JcIiksZm9udDp0aGlzLiQuZGF0YShcImZvbnRcIil8fFwiQXJpYWxcIixmb250V2VpZ2h0OnRoaXMuJC5kYXRhKFwiZm9udC13ZWlnaHRcIil8fFwiYm9sZFwiLGlubGluZTpmYWxzZSxzdGVwOnRoaXMuJC5kYXRhKFwic3RlcFwiKXx8MSxyb3RhdGlvbjp0aGlzLiQuZGF0YShcInJvdGF0aW9uXCIpLGRyYXc6bnVsbCxjaGFuZ2U6bnVsbCxjYW5jZWw6bnVsbCxyZWxlYXNlOm51bGwsZm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VGbG9hdChlKX19LHRoaXMubyk7dGhpcy5vLmZsaXA9dGhpcy5vLnJvdGF0aW9uPT09XCJhbnRpY2xvY2t3aXNlXCJ8fHRoaXMuby5yb3RhdGlvbj09PVwiYWN3XCI7aWYoIXRoaXMuby5pbnB1dENvbG9yKXt0aGlzLm8uaW5wdXRDb2xvcj10aGlzLm8uZmdDb2xvcn1pZih0aGlzLiQuaXMoXCJmaWVsZHNldFwiKSl7dGhpcy52PXt9O3RoaXMuaT10aGlzLiQuZmluZChcImlucHV0XCIpO3RoaXMuaS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWUodGhpcyk7bi5pW3RdPXI7bi52W3RdPW4uby5wYXJzZShyLnZhbCgpKTtyLmJpbmQoXCJjaGFuZ2UgYmx1clwiLGZ1bmN0aW9uKCl7dmFyIGU9e307ZVt0XT1yLnZhbCgpO24udmFsKG4uX3ZhbGlkYXRlKGUpKX0pfSk7dGhpcy4kLmZpbmQoXCJsZWdlbmRcIikucmVtb3ZlKCl9ZWxzZXt0aGlzLmk9dGhpcy4kO3RoaXMudj10aGlzLm8ucGFyc2UodGhpcy4kLnZhbCgpKTt0aGlzLnY9PT1cIlwiJiYodGhpcy52PXRoaXMuby5taW4pO3RoaXMuJC5iaW5kKFwiY2hhbmdlIGJsdXJcIixmdW5jdGlvbigpe24udmFsKG4uX3ZhbGlkYXRlKG4uby5wYXJzZShuLiQudmFsKCkpKSl9KX0hdGhpcy5vLmRpc3BsYXlJbnB1dCYmdGhpcy4kLmhpZGUoKTt0aGlzLiRjPWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSkuYXR0cih7d2lkdGg6dGhpcy5vLndpZHRoLGhlaWdodDp0aGlzLm8uaGVpZ2h0fSk7dGhpcy4kZGl2PWUoJzxkaXYgc3R5bGU9XCInKyh0aGlzLm8uaW5saW5lP1wiZGlzcGxheTppbmxpbmU7XCI6XCJcIikrXCJ3aWR0aDpcIit0aGlzLm8ud2lkdGgrXCJweDtoZWlnaHQ6XCIrdGhpcy5vLmhlaWdodCtcInB4O1wiKydcIj48L2Rpdj4nKTt0aGlzLiQud3JhcCh0aGlzLiRkaXYpLmJlZm9yZSh0aGlzLiRjKTt0aGlzLiRkaXY9dGhpcy4kLnBhcmVudCgpO2lmKHR5cGVvZiBHX3ZtbENhbnZhc01hbmFnZXIhPT1cInVuZGVmaW5lZFwiKXtHX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQodGhpcy4kY1swXSl9dGhpcy5jPXRoaXMuJGNbMF0uZ2V0Q29udGV4dD90aGlzLiRjWzBdLmdldENvbnRleHQoXCIyZFwiKTpudWxsO2lmKCF0aGlzLmMpe3Rocm93e25hbWU6XCJDYW52YXNOb3RTdXBwb3J0ZWRFeGNlcHRpb25cIixtZXNzYWdlOlwiQ2FudmFzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgZXhjYW52YXMgb24gSUU4LjAuXCIsdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lK1wiOiBcIit0aGlzLm1lc3NhZ2V9fX10aGlzLnNjYWxlPSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvKHRoaXMuYy53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0aGlzLmMubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dGhpcy5jLm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dGhpcy5jLm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0aGlzLmMuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MSk7dGhpcy5yZWxhdGl2ZVdpZHRoPXRoaXMuby53aWR0aCUxIT09MCYmdGhpcy5vLndpZHRoLmluZGV4T2YoXCIlXCIpO3RoaXMucmVsYXRpdmVIZWlnaHQ9dGhpcy5vLmhlaWdodCUxIT09MCYmdGhpcy5vLmhlaWdodC5pbmRleE9mKFwiJVwiKTt0aGlzLnJlbGF0aXZlPXRoaXMucmVsYXRpdmVXaWR0aHx8dGhpcy5yZWxhdGl2ZUhlaWdodDt0aGlzLl9jYXJ2ZSgpO2lmKHRoaXMudiBpbnN0YW5jZW9mIE9iamVjdCl7dGhpcy5jdj17fTt0aGlzLmNvcHkodGhpcy52LHRoaXMuY3YpfWVsc2V7dGhpcy5jdj10aGlzLnZ9dGhpcy4kLmJpbmQoXCJjb25maWd1cmVcIix0KS5wYXJlbnQoKS5iaW5kKFwiY29uZmlndXJlXCIsdCk7dGhpcy5fbGlzdGVuKCkuX2NvbmZpZ3VyZSgpLl94eSgpLmluaXQoKTt0aGlzLmlzSW5pdD10cnVlO3RoaXMuJC52YWwodGhpcy5vLmZvcm1hdCh0aGlzLnYpKTt0aGlzLl9kcmF3KCk7cmV0dXJuIHRoaXN9O3RoaXMuX2NhcnZlPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWxhdGl2ZSl7dmFyIGU9dGhpcy5yZWxhdGl2ZVdpZHRoP3RoaXMuJGRpdi5wYXJlbnQoKS53aWR0aCgpKnBhcnNlSW50KHRoaXMuby53aWR0aCkvMTAwOnRoaXMuJGRpdi5wYXJlbnQoKS53aWR0aCgpLHQ9dGhpcy5yZWxhdGl2ZUhlaWdodD90aGlzLiRkaXYucGFyZW50KCkuaGVpZ2h0KCkqcGFyc2VJbnQodGhpcy5vLmhlaWdodCkvMTAwOnRoaXMuJGRpdi5wYXJlbnQoKS5oZWlnaHQoKTt0aGlzLnc9dGhpcy5oPU1hdGgubWluKGUsdCl9ZWxzZXt0aGlzLnc9dGhpcy5vLndpZHRoO3RoaXMuaD10aGlzLm8uaGVpZ2h0fXRoaXMuJGRpdi5jc3Moe3dpZHRoOnRoaXMudytcInB4XCIsaGVpZ2h0OnRoaXMuaCtcInB4XCJ9KTt0aGlzLiRjLmF0dHIoe3dpZHRoOnRoaXMudyxoZWlnaHQ6dGhpcy5ofSk7aWYodGhpcy5zY2FsZSE9PTEpe3RoaXMuJGNbMF0ud2lkdGg9dGhpcy4kY1swXS53aWR0aCp0aGlzLnNjYWxlO3RoaXMuJGNbMF0uaGVpZ2h0PXRoaXMuJGNbMF0uaGVpZ2h0KnRoaXMuc2NhbGU7dGhpcy4kYy53aWR0aCh0aGlzLncpO3RoaXMuJGMuaGVpZ2h0KHRoaXMuaCl9cmV0dXJuIHRoaXN9O3RoaXMuX2RyYXc9ZnVuY3Rpb24oKXt2YXIgZT10cnVlO24uZz1uLmM7bi5jbGVhcigpO24uZEgmJihlPW4uZEgoKSk7ZSE9PWZhbHNlJiZuLmRyYXcoKX07dGhpcy5fdG91Y2g9ZnVuY3Rpb24oZSl7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9bi54eTJ2YWwoZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbbi50XS5wYWdlWCxlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1tuLnRdLnBhZ2VZKTtpZih0PT1uLmN2KXJldHVybjtpZihuLmNIJiZuLmNIKHQpPT09ZmFsc2UpcmV0dXJuO24uY2hhbmdlKG4uX3ZhbGlkYXRlKHQpKTtuLl9kcmF3KCl9O3RoaXMudD10LmMudChlKTtyKGUpO3QuYy5kLmJpbmQoXCJ0b3VjaG1vdmUua1wiLHIpLmJpbmQoXCJ0b3VjaGVuZC5rXCIsZnVuY3Rpb24oKXt0LmMuZC51bmJpbmQoXCJ0b3VjaG1vdmUuayB0b3VjaGVuZC5rXCIpO24udmFsKG4uY3YpfSk7cmV0dXJuIHRoaXN9O3RoaXMuX21vdXNlPWZ1bmN0aW9uKGUpe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PW4ueHkydmFsKGUucGFnZVgsZS5wYWdlWSk7aWYodD09bi5jdilyZXR1cm47aWYobi5jSCYmbi5jSCh0KT09PWZhbHNlKXJldHVybjtuLmNoYW5nZShuLl92YWxpZGF0ZSh0KSk7bi5fZHJhdygpfTtyKGUpO3QuYy5kLmJpbmQoXCJtb3VzZW1vdmUua1wiLHIpLmJpbmQoXCJrZXl1cC5rXCIsZnVuY3Rpb24oZSl7aWYoZS5rZXlDb2RlPT09Mjcpe3QuYy5kLnVuYmluZChcIm1vdXNldXAuayBtb3VzZW1vdmUuayBrZXl1cC5rXCIpO2lmKG4uZUgmJm4uZUgoKT09PWZhbHNlKXJldHVybjtuLmNhbmNlbCgpfX0pLmJpbmQoXCJtb3VzZXVwLmtcIixmdW5jdGlvbihlKXt0LmMuZC51bmJpbmQoXCJtb3VzZW1vdmUuayBtb3VzZXVwLmsga2V5dXAua1wiKTtuLnZhbChuLmN2KX0pO3JldHVybiB0aGlzfTt0aGlzLl94eT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGMub2Zmc2V0KCk7dGhpcy54PWUubGVmdDt0aGlzLnk9ZS50b3A7cmV0dXJuIHRoaXN9O3RoaXMuX2xpc3Rlbj1mdW5jdGlvbigpe2lmKCF0aGlzLm8ucmVhZE9ubHkpe3RoaXMuJGMuYmluZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtuLl94eSgpLl9tb3VzZShlKX0pLmJpbmQoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO24uX3h5KCkuX3RvdWNoKGUpfSk7dGhpcy5saXN0ZW4oKX1lbHNle3RoaXMuJC5hdHRyKFwicmVhZG9ubHlcIixcInJlYWRvbmx5XCIpfWlmKHRoaXMucmVsYXRpdmUpe2Uod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKXtuLl9jYXJ2ZSgpLmluaXQoKTtuLl9kcmF3KCl9KX1yZXR1cm4gdGhpc307dGhpcy5fY29uZmlndXJlPWZ1bmN0aW9uKCl7aWYodGhpcy5vLmRyYXcpdGhpcy5kSD10aGlzLm8uZHJhdztpZih0aGlzLm8uY2hhbmdlKXRoaXMuY0g9dGhpcy5vLmNoYW5nZTtpZih0aGlzLm8uY2FuY2VsKXRoaXMuZUg9dGhpcy5vLmNhbmNlbDtpZih0aGlzLm8ucmVsZWFzZSl0aGlzLnJIPXRoaXMuby5yZWxlYXNlO2lmKHRoaXMuby5kaXNwbGF5UHJldmlvdXMpe3RoaXMucENvbG9yPXRoaXMuaDJyZ2JhKHRoaXMuby5mZ0NvbG9yLFwiMC40XCIpO3RoaXMuZmdDb2xvcj10aGlzLmgycmdiYSh0aGlzLm8uZmdDb2xvcixcIjAuNlwiKX1lbHNle3RoaXMuZmdDb2xvcj10aGlzLm8uZmdDb2xvcn1yZXR1cm4gdGhpc307dGhpcy5fY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLiRjWzBdLndpZHRoPXRoaXMuJGNbMF0ud2lkdGh9O3RoaXMuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PX5+KChlPDA/LS41Oi41KStlL3RoaXMuby5zdGVwKSp0aGlzLm8uc3RlcDtyZXR1cm4gTWF0aC5yb3VuZCh0KjEwMCkvMTAwfTt0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe307dGhpcy5leHRlbmQ9ZnVuY3Rpb24oKXt9O3RoaXMuaW5pdD1mdW5jdGlvbigpe307dGhpcy5jaGFuZ2U9ZnVuY3Rpb24oZSl7fTt0aGlzLnZhbD1mdW5jdGlvbihlKXt9O3RoaXMueHkydmFsPWZ1bmN0aW9uKGUsdCl7fTt0aGlzLmRyYXc9ZnVuY3Rpb24oKXt9O3RoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhcigpfTt0aGlzLmgycmdiYT1mdW5jdGlvbihlLHQpe3ZhciBuO2U9ZS5zdWJzdHJpbmcoMSw3KTtuPVtwYXJzZUludChlLnN1YnN0cmluZygwLDIpLDE2KSxwYXJzZUludChlLnN1YnN0cmluZygyLDQpLDE2KSxwYXJzZUludChlLnN1YnN0cmluZyg0LDYpLDE2KV07cmV0dXJuXCJyZ2JhKFwiK25bMF0rXCIsXCIrblsxXStcIixcIituWzJdK1wiLFwiK3QrXCIpXCJ9O3RoaXMuY29weT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKXt0W25dPWVbbl19fX07dC5EaWFsPWZ1bmN0aW9uKCl7dC5vLmNhbGwodGhpcyk7dGhpcy5zdGFydEFuZ2xlPW51bGw7dGhpcy54eT1udWxsO3RoaXMucmFkaXVzPW51bGw7dGhpcy5saW5lV2lkdGg9bnVsbDt0aGlzLmN1cnNvckV4dD1udWxsO3RoaXMudzI9bnVsbDt0aGlzLlBJMj0yKk1hdGguUEk7dGhpcy5leHRlbmQ9ZnVuY3Rpb24oKXt0aGlzLm89ZS5leHRlbmQoe2JnQ29sb3I6dGhpcy4kLmRhdGEoXCJiZ2NvbG9yXCIpfHxcIiNFRUVFRUVcIixhbmdsZU9mZnNldDp0aGlzLiQuZGF0YShcImFuZ2xlb2Zmc2V0XCIpfHwwLGFuZ2xlQXJjOnRoaXMuJC5kYXRhKFwiYW5nbGVhcmNcIil8fDM2MCxpbmxpbmU6dHJ1ZX0sdGhpcy5vKX07dGhpcy52YWw9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lKXtlPXRoaXMuby5wYXJzZShlKTtpZih0IT09ZmFsc2UmJmUhPXRoaXMudiYmdGhpcy5ySCYmdGhpcy5ySChlKT09PWZhbHNlKXtyZXR1cm59dGhpcy5jdj10aGlzLm8uc3RvcHBlcj9uKHIoZSx0aGlzLm8ubWF4KSx0aGlzLm8ubWluKTplO3RoaXMudj10aGlzLmN2O3RoaXMuJC52YWwodGhpcy5vLmZvcm1hdCh0aGlzLnYpKTt0aGlzLl9kcmF3KCl9ZWxzZXtyZXR1cm4gdGhpcy52fX07dGhpcy54eTJ2YWw9ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO2k9TWF0aC5hdGFuMihlLSh0aGlzLngrdGhpcy53MiksLSh0LXRoaXMueS10aGlzLncyKSktdGhpcy5hbmdsZU9mZnNldDtpZih0aGlzLm8uZmxpcCl7aT10aGlzLmFuZ2xlQXJjLWktdGhpcy5QSTJ9aWYodGhpcy5hbmdsZUFyYyE9dGhpcy5QSTImJmk8MCYmaT4tLjUpe2k9MH1lbHNlIGlmKGk8MCl7aSs9dGhpcy5QSTJ9cz1pKih0aGlzLm8ubWF4LXRoaXMuby5taW4pL3RoaXMuYW5nbGVBcmMrdGhpcy5vLm1pbjt0aGlzLm8uc3RvcHBlciYmKHM9bihyKHMsdGhpcy5vLm1heCksdGhpcy5vLm1pbikpO3JldHVybiBzfTt0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsaSxzLG89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPWUub3JpZ2luYWxFdmVudCx1PW8uZGV0YWlsfHxvLndoZWVsRGVsdGFYLGE9by5kZXRhaWx8fG8ud2hlZWxEZWx0YVksZj10Ll92YWxpZGF0ZSh0Lm8ucGFyc2UodC4kLnZhbCgpKSkrKHU+MHx8YT4wP3Quby5zdGVwOnU8MHx8YTwwPy10Lm8uc3RlcDowKTtmPW4ocihmLHQuby5tYXgpLHQuby5taW4pO3QudmFsKGYsZmFsc2UpO2lmKHQuckgpe2NsZWFyVGltZW91dChpKTtpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnJIKGYpO2k9bnVsbH0sMTAwKTtpZighcyl7cz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoaSl0LnJIKGYpO3M9bnVsbH0sMjAwKX19fSx1LGEsZj0xLGw9ezM3Oi10Lm8uc3RlcCwzODp0Lm8uc3RlcCwzOTp0Lm8uc3RlcCw0MDotdC5vLnN0ZXB9O3RoaXMuJC5iaW5kKFwia2V5ZG93blwiLGZ1bmN0aW9uKGkpe3ZhciBzPWkua2V5Q29kZTtpZihzPj05NiYmczw9MTA1KXtzPWkua2V5Q29kZT1zLTQ4fXU9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShzKSk7aWYoaXNOYU4odSkpe3MhPT0xMyYmcyE9PTgmJnMhPT05JiZzIT09MTg5JiYocyE9PTE5MHx8dC4kLnZhbCgpLm1hdGNoKC9cXC4vKSkmJmkucHJldmVudERlZmF1bHQoKTtpZihlLmluQXJyYXkocyxbMzcsMzgsMzksNDBdKT4tMSl7aS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPXQuby5wYXJzZSh0LiQudmFsKCkpK2xbc10qZjt0Lm8uc3RvcHBlciYmKG89bihyKG8sdC5vLm1heCksdC5vLm1pbikpO3QuY2hhbmdlKHQuX3ZhbGlkYXRlKG8pKTt0Ll9kcmF3KCk7YT13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2YqPTJ9LDMwKX19fSkuYmluZChcImtleXVwXCIsZnVuY3Rpb24oZSl7aWYoaXNOYU4odSkpe2lmKGEpe3dpbmRvdy5jbGVhclRpbWVvdXQoYSk7YT1udWxsO2Y9MTt0LnZhbCh0LiQudmFsKCkpfX1lbHNle3QuJC52YWwoKT50Lm8ubWF4JiZ0LiQudmFsKHQuby5tYXgpfHx0LiQudmFsKCk8dC5vLm1pbiYmdC4kLnZhbCh0Lm8ubWluKX19KTt0aGlzLiRjLmJpbmQoXCJtb3VzZXdoZWVsIERPTU1vdXNlU2Nyb2xsXCIsbyk7dGhpcy4kLmJpbmQoXCJtb3VzZXdoZWVsIERPTU1vdXNlU2Nyb2xsXCIsbyl9O3RoaXMuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMudjx0aGlzLm8ubWlufHx0aGlzLnY+dGhpcy5vLm1heCl7dGhpcy52PXRoaXMuby5taW59dGhpcy4kLnZhbCh0aGlzLnYpO3RoaXMudzI9dGhpcy53LzI7dGhpcy5jdXJzb3JFeHQ9dGhpcy5vLmN1cnNvci8xMDA7dGhpcy54eT10aGlzLncyKnRoaXMuc2NhbGU7dGhpcy5saW5lV2lkdGg9dGhpcy54eSp0aGlzLm8udGhpY2tuZXNzO3RoaXMubGluZUNhcD10aGlzLm8ubGluZUNhcDt0aGlzLnJhZGl1cz10aGlzLnh5LXRoaXMubGluZVdpZHRoLzI7dGhpcy5vLmFuZ2xlT2Zmc2V0JiYodGhpcy5vLmFuZ2xlT2Zmc2V0PWlzTmFOKHRoaXMuby5hbmdsZU9mZnNldCk/MDp0aGlzLm8uYW5nbGVPZmZzZXQpO3RoaXMuby5hbmdsZUFyYyYmKHRoaXMuby5hbmdsZUFyYz1pc05hTih0aGlzLm8uYW5nbGVBcmMpP3RoaXMuUEkyOnRoaXMuby5hbmdsZUFyYyk7dGhpcy5hbmdsZU9mZnNldD10aGlzLm8uYW5nbGVPZmZzZXQqTWF0aC5QSS8xODA7dGhpcy5hbmdsZUFyYz10aGlzLm8uYW5nbGVBcmMqTWF0aC5QSS8xODA7dGhpcy5zdGFydEFuZ2xlPTEuNSpNYXRoLlBJK3RoaXMuYW5nbGVPZmZzZXQ7dGhpcy5lbmRBbmdsZT0xLjUqTWF0aC5QSSt0aGlzLmFuZ2xlT2Zmc2V0K3RoaXMuYW5nbGVBcmM7dmFyIGU9bihTdHJpbmcoTWF0aC5hYnModGhpcy5vLm1heCkpLmxlbmd0aCxTdHJpbmcoTWF0aC5hYnModGhpcy5vLm1pbikpLmxlbmd0aCwyKSsyO3RoaXMuby5kaXNwbGF5SW5wdXQmJnRoaXMuaS5jc3Moe3dpZHRoOih0aGlzLncvMis0Pj4wKStcInB4XCIsaGVpZ2h0Oih0aGlzLncvMz4+MCkrXCJweFwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIixcInZlcnRpY2FsLWFsaWduXCI6XCJtaWRkbGVcIixcIm1hcmdpbi10b3BcIjoodGhpcy53LzM+PjApK1wicHhcIixcIm1hcmdpbi1sZWZ0XCI6XCItXCIrKHRoaXMudyozLzQrMj4+MCkrXCJweFwiLGJvcmRlcjowLGJhY2tncm91bmQ6XCJub25lXCIsZm9udDp0aGlzLm8uZm9udFdlaWdodCtcIiBcIisodGhpcy53L2U+PjApK1wicHggXCIrdGhpcy5vLmZvbnQsXCJ0ZXh0LWFsaWduXCI6XCJjZW50ZXJcIixjb2xvcjp0aGlzLm8uaW5wdXRDb2xvcnx8dGhpcy5vLmZnQ29sb3IscGFkZGluZzpcIjBweFwiLFwiLXdlYmtpdC1hcHBlYXJhbmNlXCI6XCJub25lXCJ9KXx8dGhpcy5pLmNzcyh7d2lkdGg6XCIwcHhcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9KX07dGhpcy5jaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5jdj1lO3RoaXMuJC52YWwodGhpcy5vLmZvcm1hdChlKSl9O3RoaXMuYW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdGhpcy5vLm1pbikqdGhpcy5hbmdsZUFyYy8odGhpcy5vLm1heC10aGlzLm8ubWluKX07dGhpcy5hcmM9ZnVuY3Rpb24oZSl7dmFyIHQsbjtlPXRoaXMuYW5nbGUoZSk7aWYodGhpcy5vLmZsaXApe3Q9dGhpcy5lbmRBbmdsZSsxZS01O249dC1lLTFlLTV9ZWxzZXt0PXRoaXMuc3RhcnRBbmdsZS0xZS01O249dCtlKzFlLTV9dGhpcy5vLmN1cnNvciYmKHQ9bi10aGlzLmN1cnNvckV4dCkmJihuPW4rdGhpcy5jdXJzb3JFeHQpO3JldHVybntzOnQsZTpuLGQ6dGhpcy5vLmZsaXAmJiF0aGlzLm8uY3Vyc29yfX07dGhpcy5kcmF3PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nLHQ9dGhpcy5hcmModGhpcy5jdiksbixyPTE7ZS5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGg7ZS5saW5lQ2FwPXRoaXMubGluZUNhcDtpZih0aGlzLm8uYmdDb2xvciE9PVwibm9uZVwiKXtlLmJlZ2luUGF0aCgpO2Uuc3Ryb2tlU3R5bGU9dGhpcy5vLmJnQ29sb3I7ZS5hcmModGhpcy54eSx0aGlzLnh5LHRoaXMucmFkaXVzLHRoaXMuZW5kQW5nbGUtMWUtNSx0aGlzLnN0YXJ0QW5nbGUrMWUtNSx0cnVlKTtlLnN0cm9rZSgpfWlmKHRoaXMuby5kaXNwbGF5UHJldmlvdXMpe249dGhpcy5hcmModGhpcy52KTtlLmJlZ2luUGF0aCgpO2Uuc3Ryb2tlU3R5bGU9dGhpcy5wQ29sb3I7ZS5hcmModGhpcy54eSx0aGlzLnh5LHRoaXMucmFkaXVzLG4ucyxuLmUsbi5kKTtlLnN0cm9rZSgpO3I9dGhpcy5jdj09dGhpcy52fWUuYmVnaW5QYXRoKCk7ZS5zdHJva2VTdHlsZT1yP3RoaXMuby5mZ0NvbG9yOnRoaXMuZmdDb2xvcjtlLmFyYyh0aGlzLnh5LHRoaXMueHksdGhpcy5yYWRpdXMsdC5zLHQuZSx0LmQpO2Uuc3Ryb2tlKCl9O3RoaXMuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy52YWwodGhpcy52KX19O2UuZm4uZGlhbD1lLmZuLmtub2I9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPW5ldyB0LkRpYWw7ci5vPW47ci4kPWUodGhpcyk7ci5ydW4oKX0pLnBhcmVudCgpfX0pXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1rbm9iL2Rpc3QvanF1ZXJ5Lmtub2IubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA1NlxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56\n"); +eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! AdminLTE app.js\n* ================\n* Main JS application file for AdminLTE v2. This file\n* should be included in all pages. It controls some layout\n* options and implements exclusive AdminLTE plugins.\n*\n* @Author Almsaeed Studio\n* @Support <https://www.almsaeedstudio.com>\n* @Email <abdullah@almsaeedstudio.com>\n* @version 2.4.2\n* @repository git://github.com/almasaeed2010/AdminLTE.git\n* @license MIT <http://opensource.org/licenses/MIT>\n*/\nif (\"undefined\" == typeof jQuery) throw new Error(\"AdminLTE requires jQuery\");+function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n g = e.data(c);if (!g) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, g = new f(e, h));\n }if (\"string\" == typeof g) {\n if (void 0 === g[b]) throw new Error(\"No method named \" + b);g[b]();\n }\n });\n }var c = \"lte.boxrefresh\",\n d = { source: \"\", params: {}, trigger: \".refresh-btn\", content: \".box-body\", loadInContent: !0, responseType: \"\", overlayTemplate: '<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>', onLoadStart: function onLoadStart() {}, onLoadDone: function onLoadDone(a) {\n return a;\n } },\n e = { data: '[data-widget=\"box-refresh\"]' },\n f = function f(b, c) {\n if (this.element = b, this.options = c, this.$overlay = a(c.overlay), \"\" === c.source) throw new Error(\"Source url was not defined. Please specify a url in your BoxRefresh source option.\");this._setUpListeners(), this.load();\n };f.prototype.load = function () {\n this._addOverlay(), this.options.onLoadStart.call(a(this)), a.get(this.options.source, this.options.params, function (b) {\n this.options.loadInContent && a(this.options.content).html(b), this.options.onLoadDone.call(a(this), b), this._removeOverlay();\n }.bind(this), \"\" !== this.options.responseType && this.options.responseType);\n }, f.prototype._setUpListeners = function () {\n a(this.element).on(\"click\", e.trigger, function (a) {\n a && a.preventDefault(), this.load();\n }.bind(this));\n }, f.prototype._addOverlay = function () {\n a(this.element).append(this.$overlay);\n }, f.prototype._removeOverlay = function () {\n a(this.element).remove(this.$overlay);\n };var g = a.fn.boxRefresh;a.fn.boxRefresh = b, a.fn.boxRefresh.Constructor = f, a.fn.boxRefresh.noConflict = function () {\n return a.fn.boxRefresh = g, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.boxwidget\",\n d = { animationSpeed: 500, collapseTrigger: '[data-widget=\"collapse\"]', removeTrigger: '[data-widget=\"remove\"]', collapseIcon: \"fa-minus\", expandIcon: \"fa-plus\", removeIcon: \"fa-times\" },\n e = { data: \".box\", collapsed: \".collapsed-box\", header: \".box-header\", body: \".box-body\", footer: \".box-footer\", tools: \".box-tools\" },\n f = { collapsed: \"collapsed-box\" },\n g = { collapsed: \"collapsed.boxwidget\", expanded: \"expanded.boxwidget\", removed: \"removed.boxwidget\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };h.prototype.toggle = function () {\n a(this.element).is(e.collapsed) ? this.expand() : this.collapse();\n }, h.prototype.expand = function () {\n var b = a.Event(g.expanded),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).removeClass(f.collapsed), a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + d).removeClass(d).addClass(c), a(this.element).children(e.body + \", \" + e.footer).slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.collapse = function () {\n var b = a.Event(g.collapsed),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + c).removeClass(c).addClass(d), a(this.element).children(e.body + \", \" + e.footer).slideUp(this.options.animationSpeed, function () {\n a(this.element).addClass(f.collapsed), a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.remove = function () {\n var b = a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed, function () {\n a(this.element).trigger(b), a(this.element).remove();\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.collapseTrigger, function (c) {\n return c && c.preventDefault(), b.toggle(a(this)), !1;\n }), a(this.element).on(\"click\", this.options.removeTrigger, function (c) {\n return c && c.preventDefault(), b.remove(a(this)), !1;\n });\n };var i = a.fn.boxWidget;a.fn.boxWidget = b, a.fn.boxWidget.Constructor = h, a.fn.boxWidget.noConflict = function () {\n return a.fn.boxWidget = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }\"string\" == typeof b && f.toggle();\n });\n }var c = \"lte.controlsidebar\",\n d = { slide: !0 },\n e = { sidebar: \".control-sidebar\", data: '[data-toggle=\"control-sidebar\"]', open: \".control-sidebar-open\", bg: \".control-sidebar-bg\", wrapper: \".wrapper\", content: \".content-wrapper\", boxed: \".layout-boxed\" },\n f = { open: \"control-sidebar-open\", fixed: \"fixed\" },\n g = { collapsed: \"collapsed.controlsidebar\", expanded: \"expanded.controlsidebar\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this.hasBindedResize = !1, this.init();\n };h.prototype.init = function () {\n a(this.element).is(e.data) || a(this).on(\"click\", this.toggle), this.fix(), a(window).resize(function () {\n this.fix();\n }.bind(this));\n }, h.prototype.toggle = function (b) {\n b && b.preventDefault(), this.fix(), a(e.sidebar).is(e.open) || a(\"body\").is(e.open) ? this.collapse() : this.expand();\n }, h.prototype.expand = function () {\n this.options.slide ? a(e.sidebar).addClass(f.open) : a(\"body\").addClass(f.open), a(this.element).trigger(a.Event(g.expanded));\n }, h.prototype.collapse = function () {\n a(\"body, \" + e.sidebar).removeClass(f.open), a(this.element).trigger(a.Event(g.collapsed));\n }, h.prototype.fix = function () {\n a(\"body\").is(e.boxed) && this._fixForBoxed(a(e.bg));\n }, h.prototype._fixForBoxed = function (b) {\n b.css({ position: \"absolute\", height: a(e.wrapper).height() });\n };var i = a.fn.controlSidebar;a.fn.controlSidebar = b, a.fn.controlSidebar.Constructor = h, a.fn.controlSidebar.noConflict = function () {\n return a.fn.controlSidebar = i, this;\n }, a(document).on(\"click\", e.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var d = a(this),\n e = d.data(c);e || d.data(c, e = new f(d)), \"string\" == typeof b && e.toggle(d);\n });\n }var c = \"lte.directchat\",\n d = { data: '[data-widget=\"chat-pane-toggle\"]', box: \".direct-chat\" },\n e = { open: \"direct-chat-contacts-open\" },\n f = function f(a) {\n this.element = a;\n };f.prototype.toggle = function (a) {\n a.parents(d.box).first().toggleClass(e.open);\n };var g = a.fn.directChat;a.fn.directChat = b, a.fn.directChat.Constructor = f, a.fn.directChat.noConflict = function () {\n return a.fn.directChat = g, this;\n }, a(document).on(\"click\", d.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(h));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.layout\",\n d = { slimscroll: !0, resetHeight: !0 },\n e = { wrapper: \".wrapper\", contentWrapper: \".content-wrapper\", layoutBoxed: \".layout-boxed\", mainFooter: \".main-footer\", mainHeader: \".main-header\", sidebar: \".sidebar\", controlSidebar: \".control-sidebar\", fixed: \".fixed\", sidebarMenu: \".sidebar-menu\", logo: \".main-header .logo\" },\n f = { fixed: \"fixed\", holdTransition: \"hold-transition\" },\n g = function g(a) {\n this.options = a, this.bindedResize = !1, this.activate();\n };g.prototype.activate = function () {\n this.fix(), this.fixSidebar(), a(\"body\").removeClass(f.holdTransition), this.options.resetHeight && a(\"body, html, \" + e.wrapper).css({ height: \"auto\", \"min-height\": \"100%\" }), this.bindedResize || (a(window).resize(function () {\n this.fix(), this.fixSidebar(), a(e.logo + \", \" + e.sidebar).one(\"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }.bind(this)), this.bindedResize = !0), a(e.sidebarMenu).on(\"expanded.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this)), a(e.sidebarMenu).on(\"collapsed.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }, g.prototype.fix = function () {\n a(e.layoutBoxed + \" > \" + e.wrapper).css(\"overflow\", \"hidden\");var b = a(e.mainFooter).outerHeight() || 0,\n c = a(e.mainHeader).outerHeight() + b,\n d = a(window).height(),\n g = a(e.sidebar).height() || 0;if (a(\"body\").hasClass(f.fixed)) a(e.contentWrapper).css(\"min-height\", d - b);else {\n var h;d >= g ? (a(e.contentWrapper).css(\"min-height\", d - c), h = d - c) : (a(e.contentWrapper).css(\"min-height\", g), h = g);var i = a(e.controlSidebar);void 0 !== i && i.height() > h && a(e.contentWrapper).css(\"min-height\", i.height());\n }\n }, g.prototype.fixSidebar = function () {\n if (!a(\"body\").hasClass(f.fixed)) return void (void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ destroy: !0 }).height(\"auto\"));this.options.slimscroll && void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ height: a(window).height() - a(e.mainHeader).height() + \"px\" });\n };var h = a.fn.layout;a.fn.layout = b, a.fn.layout.Constuctor = g, a.fn.layout.noConflict = function () {\n return a.fn.layout = h, this;\n }, a(window).on(\"load\", function () {\n b.call(a(\"body\"));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(g));\n }\"toggle\" === b && f.toggle();\n });\n }var c = \"lte.pushmenu\",\n d = { collapseScreenSize: 767, expandOnHover: !1, expandTransitionDelay: 200 },\n e = { collapsed: \".sidebar-collapse\", open: \".sidebar-open\", mainSidebar: \".main-sidebar\", contentWrapper: \".content-wrapper\", searchInput: \".sidebar-form .form-control\", button: '[data-toggle=\"push-menu\"]', mini: \".sidebar-mini\", expanded: \".sidebar-expanded-on-hover\", layoutFixed: \".fixed\" },\n f = { collapsed: \"sidebar-collapse\", open: \"sidebar-open\", mini: \"sidebar-mini\", expanded: \"sidebar-expanded-on-hover\", expandFeature: \"sidebar-mini-expand-feature\", layoutFixed: \"fixed\" },\n g = { expanded: \"expanded.pushMenu\", collapsed: \"collapsed.pushMenu\" },\n h = function h(a) {\n this.options = a, this.init();\n };h.prototype.init = function () {\n (this.options.expandOnHover || a(\"body\").is(e.mini + e.layoutFixed)) && (this.expandOnHover(), a(\"body\").addClass(f.expandFeature)), a(e.contentWrapper).click(function () {\n a(window).width() <= this.options.collapseScreenSize && a(\"body\").hasClass(f.open) && this.close();\n }.bind(this)), a(e.searchInput).click(function (a) {\n a.stopPropagation();\n });\n }, h.prototype.toggle = function () {\n var b = a(window).width(),\n c = !a(\"body\").hasClass(f.collapsed);b <= this.options.collapseScreenSize && (c = a(\"body\").hasClass(f.open)), c ? this.close() : this.open();\n }, h.prototype.open = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").removeClass(f.collapsed).trigger(a.Event(g.expanded)) : a(\"body\").addClass(f.open).trigger(a.Event(g.expanded));\n }, h.prototype.close = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").addClass(f.collapsed).trigger(a.Event(g.collapsed)) : a(\"body\").removeClass(f.open + \" \" + f.collapsed).trigger(a.Event(g.collapsed));\n }, h.prototype.expandOnHover = function () {\n a(e.mainSidebar).hover(function () {\n a(\"body\").is(e.mini + e.collapsed) && a(window).width() > this.options.collapseScreenSize && this.expand();\n }.bind(this), function () {\n a(\"body\").is(e.expanded) && this.collapse();\n }.bind(this));\n }, h.prototype.expand = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.collapsed).addClass(f.expanded);\n }, this.options.expandTransitionDelay);\n }, h.prototype.collapse = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.expanded).addClass(f.collapsed);\n }, this.options.expandTransitionDelay);\n };var i = a.fn.pushMenu;a.fn.pushMenu = b, a.fn.pushMenu.Constructor = h, a.fn.pushMenu.noConflict = function () {\n return a.fn.pushMenu = i, this;\n }, a(document).on(\"click\", e.button, function (c) {\n c.preventDefault(), b.call(a(this), \"toggle\");\n }), a(window).on(\"load\", function () {\n b.call(a(e.button));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(e, h));\n }if (\"string\" == typeof f) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.todolist\",\n d = { onCheck: function onCheck(a) {\n return a;\n }, onUnCheck: function onUnCheck(a) {\n return a;\n } },\n e = { data: '[data-widget=\"todo-list\"]' },\n f = { done: \"done\" },\n g = function g(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };g.prototype.toggle = function (a) {\n if (a.parents(e.li).first().toggleClass(f.done), !a.prop(\"checked\")) return void this.unCheck(a);this.check(a);\n }, g.prototype.check = function (a) {\n this.options.onCheck.call(a);\n }, g.prototype.unCheck = function (a) {\n this.options.onUnCheck.call(a);\n }, g.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"change ifChanged\", \"input:checkbox\", function () {\n b.toggle(a(this));\n });\n };var h = a.fn.todoList;a.fn.todoList = b, a.fn.todoList.Constructor = g, a.fn.todoList.noConflict = function () {\n return a.fn.todoList = h, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this);if (!e.data(c)) {\n var f = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, new h(e, f));\n }\n });\n }var c = \"lte.tree\",\n d = { animationSpeed: 500, accordion: !0, followLink: !1, trigger: \".treeview a\" },\n e = { tree: \".tree\", treeview: \".treeview\", treeviewMenu: \".treeview-menu\", open: \".menu-open, .active\", li: \"li\", data: '[data-widget=\"tree\"]', active: \".active\" },\n f = { open: \"menu-open\", tree: \"tree\" },\n g = { collapsed: \"collapsed.tree\", expanded: \"expanded.tree\" },\n h = function h(b, c) {\n this.element = b, this.options = c, a(this.element).addClass(f.tree), a(e.treeview + e.active, this.element).addClass(f.open), this._setUpListeners();\n };h.prototype.toggle = function (a, b) {\n var c = a.next(e.treeviewMenu),\n d = a.parent(),\n g = d.hasClass(f.open);d.is(e.treeview) && (this.options.followLink && \"#\" !== a.attr(\"href\") || b.preventDefault(), g ? this.collapse(c, d) : this.expand(c, d));\n }, h.prototype.expand = function (b, c) {\n var d = a.Event(g.expanded);if (this.options.accordion) {\n var h = c.siblings(e.open),\n i = h.children(e.treeviewMenu);this.collapse(i, h);\n }c.addClass(f.open), b.slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype.collapse = function (b, c) {\n var d = a.Event(g.collapsed);b.find(e.open).removeClass(f.open), c.removeClass(f.open), b.slideUp(this.options.animationSpeed, function () {\n b.find(e.open + \" > \" + e.treeview).slideUp(), a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.trigger, function (c) {\n b.toggle(a(this), c);\n });\n };var i = a.fn.tree;a.fn.tree = b, a.fn.tree.Constructor = h, a.fn.tree.noConflict = function () {\n return a.fn.tree = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcz9jMDQ2Il0sIm5hbWVzIjpbImpRdWVyeSIsIkVycm9yIiwiYSIsImIiLCJlYWNoIiwiZSIsImciLCJkYXRhIiwiYyIsImgiLCJleHRlbmQiLCJkIiwiZiIsInNvdXJjZSIsInBhcmFtcyIsInRyaWdnZXIiLCJjb250ZW50IiwibG9hZEluQ29udGVudCIsInJlc3BvbnNlVHlwZSIsIm92ZXJsYXlUZW1wbGF0ZSIsIm9uTG9hZFN0YXJ0Iiwib25Mb2FkRG9uZSIsImVsZW1lbnQiLCJvcHRpb25zIiwiJG92ZXJsYXkiLCJvdmVybGF5IiwiX3NldFVwTGlzdGVuZXJzIiwibG9hZCIsInByb3RvdHlwZSIsIl9hZGRPdmVybGF5IiwiY2FsbCIsImdldCIsImh0bWwiLCJfcmVtb3ZlT3ZlcmxheSIsImJpbmQiLCJvbiIsInByZXZlbnREZWZhdWx0IiwiYXBwZW5kIiwicmVtb3ZlIiwiZm4iLCJib3hSZWZyZXNoIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0Iiwid2luZG93IiwiYW5pbWF0aW9uU3BlZWQiLCJjb2xsYXBzZVRyaWdnZXIiLCJyZW1vdmVUcmlnZ2VyIiwiY29sbGFwc2VJY29uIiwiZXhwYW5kSWNvbiIsInJlbW92ZUljb24iLCJjb2xsYXBzZWQiLCJoZWFkZXIiLCJib2R5IiwiZm9vdGVyIiwidG9vbHMiLCJleHBhbmRlZCIsInJlbW92ZWQiLCJ0b2dnbGUiLCJpcyIsImV4cGFuZCIsImNvbGxhcHNlIiwiRXZlbnQiLCJyZW1vdmVDbGFzcyIsImNoaWxkcmVuIiwiZmluZCIsImFkZENsYXNzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImkiLCJib3hXaWRnZXQiLCJzbGlkZSIsInNpZGViYXIiLCJvcGVuIiwiYmciLCJ3cmFwcGVyIiwiYm94ZWQiLCJmaXhlZCIsImhhc0JpbmRlZFJlc2l6ZSIsImluaXQiLCJmaXgiLCJyZXNpemUiLCJfZml4Rm9yQm94ZWQiLCJjc3MiLCJwb3NpdGlvbiIsImhlaWdodCIsImNvbnRyb2xTaWRlYmFyIiwiZG9jdW1lbnQiLCJib3giLCJwYXJlbnRzIiwiZmlyc3QiLCJ0b2dnbGVDbGFzcyIsImRpcmVjdENoYXQiLCJzbGltc2Nyb2xsIiwicmVzZXRIZWlnaHQiLCJjb250ZW50V3JhcHBlciIsImxheW91dEJveGVkIiwibWFpbkZvb3RlciIsIm1haW5IZWFkZXIiLCJzaWRlYmFyTWVudSIsImxvZ28iLCJob2xkVHJhbnNpdGlvbiIsImJpbmRlZFJlc2l6ZSIsImFjdGl2YXRlIiwiZml4U2lkZWJhciIsIm9uZSIsIm91dGVySGVpZ2h0IiwiaGFzQ2xhc3MiLCJzbGltU2Nyb2xsIiwiZGVzdHJveSIsImxheW91dCIsIkNvbnN0dWN0b3IiLCJjb2xsYXBzZVNjcmVlblNpemUiLCJleHBhbmRPbkhvdmVyIiwiZXhwYW5kVHJhbnNpdGlvbkRlbGF5IiwibWFpblNpZGViYXIiLCJzZWFyY2hJbnB1dCIsImJ1dHRvbiIsIm1pbmkiLCJsYXlvdXRGaXhlZCIsImV4cGFuZEZlYXR1cmUiLCJjbGljayIsIndpZHRoIiwiY2xvc2UiLCJzdG9wUHJvcGFnYXRpb24iLCJob3ZlciIsInNldFRpbWVvdXQiLCJwdXNoTWVudSIsIm9uQ2hlY2siLCJvblVuQ2hlY2siLCJkb25lIiwibGkiLCJwcm9wIiwidW5DaGVjayIsImNoZWNrIiwidG9kb0xpc3QiLCJhY2NvcmRpb24iLCJmb2xsb3dMaW5rIiwidHJlZSIsInRyZWV2aWV3IiwidHJlZXZpZXdNZW51IiwiYWN0aXZlIiwibmV4dCIsInBhcmVudCIsImF0dHIiLCJzaWJsaW5ncyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7OztBQWFBLElBQUcsZUFBYSxPQUFPQSxNQUF2QixFQUE4QixNQUFNLElBQUlDLEtBQUosQ0FBVSwwQkFBVixDQUFOLENBQTRDLENBQUMsVUFBU0MsQ0FBVCxFQUFXO0FBQUM7QUFBYSxXQUFTQyxDQUFULENBQVdBLENBQVgsRUFBYTtB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LENBQXhCLENBQTFDO0FBQXFFLEtBQWhGLENBQWlGdUIsSUFBakYsQ0FBc0YsSUFBdEYsQ0FBdEMsQ0FBekQ7QUFBNEwsR0FBcnVCLEVBQXN1QnpCLEVBQUVtQixTQUFGLENBQVlGLGVBQVosR0FBNEIsWUFBVTtBQUFDLFFBQUl2QixJQUFFLElBQU4sQ0FBV0QsRUFBRSxLQUFLb0IsT0FBUCxFQUFnQmEsRUFBaEIsQ0FBbUIsT0FBbkIsRUFBMkIsS0FBS1osT0FBTCxDQUFhUixPQUF4QyxFQUFnRCxVQUFTUCxDQUFULEVBQVc7QUFBQ0wsUUFBRXNELE1BQUYsQ0FBU3ZELEVBQUUsSUFBRixDQUFULEVBQWlCTSxDQUFqQjtBQUFvQixLQUFoRjtBQUFrRixHQUExMkIsQ0FBMjJCLElBQUk0RCxJQUFFbEUsRUFBRXFDLEVBQUYsQ0FBS2tHLElBQVgsQ0FBZ0J2SSxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxHQUFVdEksQ0FBVixFQUFZRCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVaEcsV0FBVixHQUFzQmhDLENBQWxDLEVBQW9DUCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVL0YsVUFBVixHQUFxQixZQUFVO0FBQUMsV0FBT3hDLEVBQUVxQyxFQUFGLENBQUtrRyxJQUFMLEdBQVVyRSxDQUFWLEVBQVksSUFBbkI7QUFBd0IsR0FBNUYsRUFBNkZsRSxFQUFFeUMsTUFBRixFQUFVUixFQUFWLENBQWEsTUFBYixFQUFvQixZQUFVO0FBQUNqQyxNQUFFRyxFQUFFRSxJQUFKLEVBQVVILElBQVYsQ0FBZSxZQUFVO0FBQUNELFFBQUUyQixJQUFGLENBQU81QixFQUFFLElBQUYsQ0FBUDtBQUFnQixLQUExQztBQUE0QyxHQUEzRSxDQUE3RjtBQUEwSyxDQUFuckQsQ0FBb3JERixNQUFwckQsQ0FBN2dZIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIEFkbWluTFRFIGFwcC5qc1xuKiA9PT09PT09PT09PT09PT09XG4qIE1haW4gSlMgYXBwbGljYXRpb24gZmlsZSBmb3IgQWRtaW5MVEUgdjIuIFRoaXMgZmlsZVxuKiBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYWxsIHBhZ2VzLiBJdCBjb250cm9scyBzb21lIGxheW91dFxuKiBvcHRpb25zIGFuZCBpbXBsZW1lbnRzIGV4Y2x1c2l2ZSBBZG1pbkxURSBwbHVnaW5zLlxuKlxuKiBAQXV0aG9yICBBbG1zYWVlZCBTdHVkaW9cbiogQFN1cHBvcnQgPGh0dHBzOi8vd3d3LmFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQEVtYWlsICAgPGFiZHVsbGFoQGFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQHZlcnNpb24gMi40LjJcbiogQHJlcG9zaXRvcnkgZ2l0Oi8vZ2l0aHViLmNvbS9hbG1hc2FlZWQyMDEwL0FkbWluTFRFLmdpdFxuKiBAbGljZW5zZSBNSVQgPGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+XG4qL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJBZG1pbkxURSByZXF1aXJlcyBqUXVlcnlcIik7K2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZz1lLmRhdGEoYyk7aWYoIWcpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGc9bmV3IGYoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGcpe2lmKHZvaWQgMD09PWdbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2dbYl0oKX19KX12YXIgYz1cImx0ZS5ib3hyZWZyZXNoXCIsZD17c291cmNlOlwiXCIscGFyYW1zOnt9LHRyaWdnZXI6XCIucmVmcmVzaC1idG5cIixjb250ZW50OlwiLmJveC1ib2R5XCIsbG9hZEluQ29udGVudDohMCxyZXNwb25zZVR5cGU6XCJcIixvdmVybGF5VGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PGRpdiBjbGFzcz1cImZhIGZhLXJlZnJlc2ggZmEtc3BpblwiPjwvZGl2PjwvZGl2Picsb25Mb2FkU3RhcnQ6ZnVuY3Rpb24oKXt9LG9uTG9hZERvbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fSxlPXtkYXRhOidbZGF0YS13aWRnZXQ9XCJib3gtcmVmcmVzaFwiXSd9LGY9ZnVuY3Rpb24oYixjKXtpZih0aGlzLmVsZW1lbnQ9Yix0aGlzLm9wdGlvbnM9Yyx0aGlzLiRvdmVybGF5PWEoYy5vdmVybGF5KSxcIlwiPT09Yy5zb3VyY2UpdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHVybCB3YXMgbm90IGRlZmluZWQuIFBsZWFzZSBzcGVjaWZ5IGEgdXJsIGluIHlvdXIgQm94UmVmcmVzaCBzb3VyY2Ugb3B0aW9uLlwiKTt0aGlzLl9zZXRVcExpc3RlbmVycygpLHRoaXMubG9hZCgpfTtmLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5fYWRkT3ZlcmxheSgpLHRoaXMub3B0aW9ucy5vbkxvYWRTdGFydC5jYWxsKGEodGhpcykpLGEuZ2V0KHRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5vcHRpb25zLnBhcmFtcyxmdW5jdGlvbihiKXt0aGlzLm9wdGlvbnMubG9hZEluQ29udGVudCYmYSh0aGlzLm9wdGlvbnMuY29udGVudCkuaHRtbChiKSx0aGlzLm9wdGlvbnMub25Mb2FkRG9uZS5jYWxsKGEodGhpcyksYiksdGhpcy5fcmVtb3ZlT3ZlcmxheSgpfS5iaW5kKHRoaXMpLFwiXCIhPT10aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlJiZ0aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlKX0sZi5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIixlLnRyaWdnZXIsZnVuY3Rpb24oYSl7YSYmYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubG9hZCgpfS5iaW5kKHRoaXMpKX0sZi5wcm90b3R5cGUuX2FkZE92ZXJsYXk9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYXBwZW5kKHRoaXMuJG92ZXJsYXkpfSxmLnByb3RvdHlwZS5fcmVtb3ZlT3ZlcmxheT1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5yZW1vdmUodGhpcy4kb3ZlcmxheSl9O3ZhciBnPWEuZm4uYm94UmVmcmVzaDthLmZuLmJveFJlZnJlc2g9YixhLmZuLmJveFJlZnJlc2guQ29uc3RydWN0b3I9ZixhLmZuLmJveFJlZnJlc2gubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJveFJlZnJlc2g9Zyx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1pZihcInN0cmluZ1wiPT10eXBlb2YgYil7aWYodm9pZCAwPT09ZltiXSl0aHJvdyBuZXcgRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXCIrYik7ZltiXSgpfX0pfXZhciBjPVwibHRlLmJveHdpZGdldFwiLGQ9e2FuaW1hdGlvblNwZWVkOjUwMCxjb2xsYXBzZVRyaWdnZXI6J1tkYXRhLXdpZGdldD1cImNvbGxhcHNlXCJdJyxyZW1vdmVUcmlnZ2VyOidbZGF0YS13aWRnZXQ9XCJyZW1vdmVcIl0nLGNvbGxhcHNlSWNvbjpcImZhLW1pbnVzXCIsZXhwYW5kSWNvbjpcImZhLXBsdXNcIixyZW1vdmVJY29uOlwiZmEtdGltZXNcIn0sZT17ZGF0YTpcIi5ib3hcIixjb2xsYXBzZWQ6XCIuY29sbGFwc2VkLWJveFwiLGhlYWRlcjpcIi5ib3gtaGVhZGVyXCIsYm9keTpcIi5ib3gtYm9keVwiLGZvb3RlcjpcIi5ib3gtZm9vdGVyXCIsdG9vbHM6XCIuYm94LXRvb2xzXCJ9LGY9e2NvbGxhcHNlZDpcImNvbGxhcHNlZC1ib3hcIn0sZz17Y29sbGFwc2VkOlwiY29sbGFwc2VkLmJveHdpZGdldFwiLGV4cGFuZGVkOlwiZXhwYW5kZWQuYm94d2lkZ2V0XCIscmVtb3ZlZDpcInJlbW92ZWQuYm94d2lkZ2V0XCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuaXMoZS5jb2xsYXBzZWQpP3RoaXMuZXhwYW5kKCk6dGhpcy5jb2xsYXBzZSgpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KGcuZXhwYW5kZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCksYSh0aGlzLmVsZW1lbnQpLmNoaWxkcmVuKGUuaGVhZGVyK1wiLCBcIitlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5jaGlsZHJlbihlLnRvb2xzKS5maW5kKFwiLlwiK2QpLnJlbW92ZUNsYXNzKGQpLmFkZENsYXNzKGMpLGEodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYil9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3ZhciBiPWEuRXZlbnQoZy5jb2xsYXBzZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmhlYWRlcitcIiwgXCIrZS5ib2R5K1wiLCBcIitlLmZvb3RlcikuY2hpbGRyZW4oZS50b29scykuZmluZChcIi5cIitjKS5yZW1vdmVDbGFzcyhjKS5hZGRDbGFzcyhkKSxhKHRoaXMuZWxlbWVudCkuY2hpbGRyZW4oZS5ib2R5K1wiLCBcIitlLmZvb3Rlcikuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5jb2xsYXBzZWQpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudChnLnJlbW92ZWQpO2EodGhpcy5lbGVtZW50KS5zbGlkZVVwKHRoaXMub3B0aW9ucy5hbmltYXRpb25TcGVlZCxmdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpLGEodGhpcy5lbGVtZW50KS5yZW1vdmUoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIix0aGlzLm9wdGlvbnMuY29sbGFwc2VUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi50b2dnbGUoYSh0aGlzKSksITF9KSxhKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy5yZW1vdmVUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi5yZW1vdmUoYSh0aGlzKSksITF9KX07dmFyIGk9YS5mbi5ib3hXaWRnZXQ7YS5mbi5ib3hXaWRnZXQ9YixhLmZuLmJveFdpZGdldC5Db25zdHJ1Y3Rvcj1oLGEuZm4uYm94V2lkZ2V0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5ib3hXaWRnZXQ9aSx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1cInN0cmluZ1wiPT10eXBlb2YgYiYmZi50b2dnbGUoKX0pfXZhciBjPVwibHRlLmNvbnRyb2xzaWRlYmFyXCIsZD17c2xpZGU6ITB9LGU9e3NpZGViYXI6XCIuY29udHJvbC1zaWRlYmFyXCIsZGF0YTonW2RhdGEtdG9nZ2xlPVwiY29udHJvbC1zaWRlYmFyXCJdJyxvcGVuOlwiLmNvbnRyb2wtc2lkZWJhci1vcGVuXCIsYmc6XCIuY29udHJvbC1zaWRlYmFyLWJnXCIsd3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudDpcIi5jb250ZW50LXdyYXBwZXJcIixib3hlZDpcIi5sYXlvdXQtYm94ZWRcIn0sZj17b3BlbjpcImNvbnRyb2wtc2lkZWJhci1vcGVuXCIsZml4ZWQ6XCJmaXhlZFwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQuY29udHJvbHNpZGViYXJcIixleHBhbmRlZDpcImV4cGFuZGVkLmNvbnRyb2xzaWRlYmFyXCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLmhhc0JpbmRlZFJlc2l6ZT0hMSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5pcyhlLmRhdGEpfHxhKHRoaXMpLm9uKFwiY2xpY2tcIix0aGlzLnRvZ2dsZSksdGhpcy5maXgoKSxhKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7dGhpcy5maXgoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXtiJiZiLnByZXZlbnREZWZhdWx0KCksdGhpcy5maXgoKSxhKGUuc2lkZWJhcikuaXMoZS5vcGVuKXx8YShcImJvZHlcIikuaXMoZS5vcGVuKT90aGlzLmNvbGxhcHNlKCk6dGhpcy5leHBhbmQoKX0saC5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNsaWRlP2EoZS5zaWRlYmFyKS5hZGRDbGFzcyhmLm9wZW4pOmEoXCJib2R5XCIpLmFkZENsYXNzKGYub3BlbiksYSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNvbGxhcHNlPWZ1bmN0aW9uKCl7YShcImJvZHksIFwiK2Uuc2lkZWJhcikucmVtb3ZlQ2xhc3MoZi5vcGVuKSxhKHRoaXMuZWxlbWVudCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSl9LGgucHJvdG90eXBlLmZpeD1mdW5jdGlvbigpe2EoXCJib2R5XCIpLmlzKGUuYm94ZWQpJiZ0aGlzLl9maXhGb3JCb3hlZChhKGUuYmcpKX0saC5wcm90b3R5cGUuX2ZpeEZvckJveGVkPWZ1bmN0aW9uKGIpe2IuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsaGVpZ2h0OmEoZS53cmFwcGVyKS5oZWlnaHQoKX0pfTt2YXIgaT1hLmZuLmNvbnRyb2xTaWRlYmFyO2EuZm4uY29udHJvbFNpZGViYXI9YixhLmZuLmNvbnRyb2xTaWRlYmFyLkNvbnN0cnVjdG9yPWgsYS5mbi5jb250cm9sU2lkZWJhci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY29udHJvbFNpZGViYXI9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoYyk7ZXx8ZC5kYXRhKGMsZT1uZXcgZihkKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmUudG9nZ2xlKGQpfSl9dmFyIGM9XCJsdGUuZGlyZWN0Y2hhdFwiLGQ9e2RhdGE6J1tkYXRhLXdpZGdldD1cImNoYXQtcGFuZS10b2dnbGVcIl0nLGJveDpcIi5kaXJlY3QtY2hhdFwifSxlPXtvcGVuOlwiZGlyZWN0LWNoYXQtY29udGFjdHMtb3BlblwifSxmPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1hfTtmLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7YS5wYXJlbnRzKGQuYm94KS5maXJzdCgpLnRvZ2dsZUNsYXNzKGUub3Blbil9O3ZhciBnPWEuZm4uZGlyZWN0Q2hhdDthLmZuLmRpcmVjdENoYXQ9YixhLmZuLmRpcmVjdENoYXQuQ29uc3RydWN0b3I9ZixhLmZuLmRpcmVjdENoYXQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmRpcmVjdENoYXQ9Zyx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZC5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoaCkpfWlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtpZih2b2lkIDA9PT1mW2JdKXRocm93IG5ldyBFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcIitiKTtmW2JdKCl9fSl9dmFyIGM9XCJsdGUubGF5b3V0XCIsZD17c2xpbXNjcm9sbDohMCxyZXNldEhlaWdodDohMH0sZT17d3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudFdyYXBwZXI6XCIuY29udGVudC13cmFwcGVyXCIsbGF5b3V0Qm94ZWQ6XCIubGF5b3V0LWJveGVkXCIsbWFpbkZvb3RlcjpcIi5tYWluLWZvb3RlclwiLG1haW5IZWFkZXI6XCIubWFpbi1oZWFkZXJcIixzaWRlYmFyOlwiLnNpZGViYXJcIixjb250cm9sU2lkZWJhcjpcIi5jb250cm9sLXNpZGViYXJcIixmaXhlZDpcIi5maXhlZFwiLHNpZGViYXJNZW51OlwiLnNpZGViYXItbWVudVwiLGxvZ286XCIubWFpbi1oZWFkZXIgLmxvZ29cIn0sZj17Zml4ZWQ6XCJmaXhlZFwiLGhvbGRUcmFuc2l0aW9uOlwiaG9sZC10cmFuc2l0aW9uXCJ9LGc9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWEsdGhpcy5iaW5kZWRSZXNpemU9ITEsdGhpcy5hY3RpdmF0ZSgpfTtnLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5ob2xkVHJhbnNpdGlvbiksdGhpcy5vcHRpb25zLnJlc2V0SGVpZ2h0JiZhKFwiYm9keSwgaHRtbCwgXCIrZS53cmFwcGVyKS5jc3Moe2hlaWdodDpcImF1dG9cIixcIm1pbi1oZWlnaHRcIjpcIjEwMCVcIn0pLHRoaXMuYmluZGVkUmVzaXplfHwoYSh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShlLmxvZ28rXCIsIFwiK2Uuc2lkZWJhcikub25lKFwid2Via2l0VHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCBvVHJhbnNpdGlvbkVuZCBtc1RyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpLHRoaXMuYmluZGVkUmVzaXplPSEwKSxhKGUuc2lkZWJhck1lbnUpLm9uKFwiZXhwYW5kZWQudHJlZVwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSksYShlLnNpZGViYXJNZW51KS5vbihcImNvbGxhcHNlZC50cmVlXCIsZnVuY3Rpb24oKXt0aGlzLmZpeCgpLHRoaXMuZml4U2lkZWJhcigpfS5iaW5kKHRoaXMpKX0sZy5wcm90b3R5cGUuZml4PWZ1bmN0aW9uKCl7YShlLmxheW91dEJveGVkK1wiID4gXCIrZS53cmFwcGVyKS5jc3MoXCJvdmVyZmxvd1wiLFwiaGlkZGVuXCIpO3ZhciBiPWEoZS5tYWluRm9vdGVyKS5vdXRlckhlaWdodCgpfHwwLGM9YShlLm1haW5IZWFkZXIpLm91dGVySGVpZ2h0KCkrYixkPWEod2luZG93KS5oZWlnaHQoKSxnPWEoZS5zaWRlYmFyKS5oZWlnaHQoKXx8MDtpZihhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlhKGUuY29udGVudFdyYXBwZXIpLmNzcyhcIm1pbi1oZWlnaHRcIixkLWIpO2Vsc2V7dmFyIGg7ZD49Zz8oYShlLmNvbnRlbnRXcmFwcGVyKS5jc3MoXCJtaW4taGVpZ2h0XCIsZC1jKSxoPWQtYyk6KGEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGcpLGg9Zyk7dmFyIGk9YShlLmNvbnRyb2xTaWRlYmFyKTt2b2lkIDAhPT1pJiZpLmhlaWdodCgpPmgmJmEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGkuaGVpZ2h0KCkpfX0sZy5wcm90b3R5cGUuZml4U2lkZWJhcj1mdW5jdGlvbigpe2lmKCFhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlyZXR1cm4gdm9pZCh2b2lkIDAhPT1hLmZuLnNsaW1TY3JvbGwmJmEoZS5zaWRlYmFyKS5zbGltU2Nyb2xsKHtkZXN0cm95OiEwfSkuaGVpZ2h0KFwiYXV0b1wiKSk7dGhpcy5vcHRpb25zLnNsaW1zY3JvbGwmJnZvaWQgMCE9PWEuZm4uc2xpbVNjcm9sbCYmYShlLnNpZGViYXIpLnNsaW1TY3JvbGwoe2hlaWdodDphKHdpbmRvdykuaGVpZ2h0KCktYShlLm1haW5IZWFkZXIpLmhlaWdodCgpK1wicHhcIn0pfTt2YXIgaD1hLmZuLmxheW91dDthLmZuLmxheW91dD1iLGEuZm4ubGF5b3V0LkNvbnN0dWN0b3I9ZyxhLmZuLmxheW91dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ubGF5b3V0PWgsdGhpc30sYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoXCJib2R5XCIpKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBnPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGgoZykpfVwidG9nZ2xlXCI9PT1iJiZmLnRvZ2dsZSgpfSl9dmFyIGM9XCJsdGUucHVzaG1lbnVcIixkPXtjb2xsYXBzZVNjcmVlblNpemU6NzY3LGV4cGFuZE9uSG92ZXI6ITEsZXhwYW5kVHJhbnNpdGlvbkRlbGF5OjIwMH0sZT17Y29sbGFwc2VkOlwiLnNpZGViYXItY29sbGFwc2VcIixvcGVuOlwiLnNpZGViYXItb3BlblwiLG1haW5TaWRlYmFyOlwiLm1haW4tc2lkZWJhclwiLGNvbnRlbnRXcmFwcGVyOlwiLmNvbnRlbnQtd3JhcHBlclwiLHNlYXJjaElucHV0OlwiLnNpZGViYXItZm9ybSAuZm9ybS1jb250cm9sXCIsYnV0dG9uOidbZGF0YS10b2dnbGU9XCJwdXNoLW1lbnVcIl0nLG1pbmk6XCIuc2lkZWJhci1taW5pXCIsZXhwYW5kZWQ6XCIuc2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGxheW91dEZpeGVkOlwiLmZpeGVkXCJ9LGY9e2NvbGxhcHNlZDpcInNpZGViYXItY29sbGFwc2VcIixvcGVuOlwic2lkZWJhci1vcGVuXCIsbWluaTpcInNpZGViYXItbWluaVwiLGV4cGFuZGVkOlwic2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGV4cGFuZEZlYXR1cmU6XCJzaWRlYmFyLW1pbmktZXhwYW5kLWZlYXR1cmVcIixsYXlvdXRGaXhlZDpcImZpeGVkXCJ9LGc9e2V4cGFuZGVkOlwiZXhwYW5kZWQucHVzaE1lbnVcIixjb2xsYXBzZWQ6XCJjb2xsYXBzZWQucHVzaE1lbnVcIn0saD1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9YSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpeyh0aGlzLm9wdGlvbnMuZXhwYW5kT25Ib3Zlcnx8YShcImJvZHlcIikuaXMoZS5taW5pK2UubGF5b3V0Rml4ZWQpKSYmKHRoaXMuZXhwYW5kT25Ib3ZlcigpLGEoXCJib2R5XCIpLmFkZENsYXNzKGYuZXhwYW5kRmVhdHVyZSkpLGEoZS5jb250ZW50V3JhcHBlcikuY2xpY2soZnVuY3Rpb24oKXthKHdpbmRvdykud2lkdGgoKTw9dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZSYmYShcImJvZHlcIikuaGFzQ2xhc3MoZi5vcGVuKSYmdGhpcy5jbG9zZSgpfS5iaW5kKHRoaXMpKSxhKGUuc2VhcmNoSW5wdXQpLmNsaWNrKGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KX0saC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGI9YSh3aW5kb3cpLndpZHRoKCksYz0hYShcImJvZHlcIikuaGFzQ2xhc3MoZi5jb2xsYXBzZWQpO2I8PXRoaXMub3B0aW9ucy5jb2xsYXBzZVNjcmVlblNpemUmJihjPWEoXCJib2R5XCIpLmhhc0NsYXNzKGYub3BlbikpLGM/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxoLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuZXhwYW5kZWQpKTphKFwiYm9keVwiKS5hZGRDbGFzcyhmLm9wZW4pLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSk6YShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5vcGVuK1wiIFwiK2YuY29sbGFwc2VkKS50cmlnZ2VyKGEuRXZlbnQoZy5jb2xsYXBzZWQpKX0saC5wcm90b3R5cGUuZXhwYW5kT25Ib3Zlcj1mdW5jdGlvbigpe2EoZS5tYWluU2lkZWJhcikuaG92ZXIoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5pcyhlLm1pbmkrZS5jb2xsYXBzZWQpJiZhKHdpbmRvdykud2lkdGgoKT50aGlzLm9wdGlvbnMuY29sbGFwc2VTY3JlZW5TaXplJiZ0aGlzLmV4cGFuZCgpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7YShcImJvZHlcIikuaXMoZS5leHBhbmRlZCkmJnRoaXMuY29sbGFwc2UoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLmV4cGFuZD1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkuYWRkQ2xhc3MoZi5leHBhbmRlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmV4cGFuZGVkKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfTt2YXIgaT1hLmZuLnB1c2hNZW51O2EuZm4ucHVzaE1lbnU9YixhLmZuLnB1c2hNZW51LkNvbnN0cnVjdG9yPWgsYS5mbi5wdXNoTWVudS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ucHVzaE1lbnU9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5idXR0b24sZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwidG9nZ2xlXCIpfSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoZS5idXR0b24pKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpe2lmKHZvaWQgMD09PWZbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2ZbYl0oKX19KX12YXIgYz1cImx0ZS50b2RvbGlzdFwiLGQ9e29uQ2hlY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LG9uVW5DaGVjazpmdW5jdGlvbihhKXtyZXR1cm4gYX19LGU9e2RhdGE6J1tkYXRhLXdpZGdldD1cInRvZG8tbGlzdFwiXSd9LGY9e2RvbmU6XCJkb25lXCJ9LGc9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtnLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7aWYoYS5wYXJlbnRzKGUubGkpLmZpcnN0KCkudG9nZ2xlQ2xhc3MoZi5kb25lKSwhYS5wcm9wKFwiY2hlY2tlZFwiKSlyZXR1cm4gdm9pZCB0aGlzLnVuQ2hlY2soYSk7dGhpcy5jaGVjayhhKX0sZy5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zLm9uQ2hlY2suY2FsbChhKX0sZy5wcm90b3R5cGUudW5DaGVjaz1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnMub25VbkNoZWNrLmNhbGwoYSl9LGcucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2hhbmdlIGlmQ2hhbmdlZFwiLFwiaW5wdXQ6Y2hlY2tib3hcIixmdW5jdGlvbigpe2IudG9nZ2xlKGEodGhpcykpfSl9O3ZhciBoPWEuZm4udG9kb0xpc3Q7YS5mbi50b2RvTGlzdD1iLGEuZm4udG9kb0xpc3QuQ29uc3RydWN0b3I9ZyxhLmZuLnRvZG9MaXN0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b2RvTGlzdD1oLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmRhdGEoYykpe3ZhciBmPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLG5ldyBoKGUsZikpfX0pfXZhciBjPVwibHRlLnRyZWVcIixkPXthbmltYXRpb25TcGVlZDo1MDAsYWNjb3JkaW9uOiEwLGZvbGxvd0xpbms6ITEsdHJpZ2dlcjpcIi50cmVldmlldyBhXCJ9LGU9e3RyZWU6XCIudHJlZVwiLHRyZWV2aWV3OlwiLnRyZWV2aWV3XCIsdHJlZXZpZXdNZW51OlwiLnRyZWV2aWV3LW1lbnVcIixvcGVuOlwiLm1lbnUtb3BlbiwgLmFjdGl2ZVwiLGxpOlwibGlcIixkYXRhOidbZGF0YS13aWRnZXQ9XCJ0cmVlXCJdJyxhY3RpdmU6XCIuYWN0aXZlXCJ9LGY9e29wZW46XCJtZW51LW9wZW5cIix0cmVlOlwidHJlZVwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQudHJlZVwiLGV4cGFuZGVkOlwiZXhwYW5kZWQudHJlZVwifSxoPWZ1bmN0aW9uKGIsYyl7dGhpcy5lbGVtZW50PWIsdGhpcy5vcHRpb25zPWMsYSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKGYudHJlZSksYShlLnRyZWV2aWV3K2UuYWN0aXZlLHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5vcGVuKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5leHQoZS50cmVldmlld01lbnUpLGQ9YS5wYXJlbnQoKSxnPWQuaGFzQ2xhc3MoZi5vcGVuKTtkLmlzKGUudHJlZXZpZXcpJiYodGhpcy5vcHRpb25zLmZvbGxvd0xpbmsmJlwiI1wiIT09YS5hdHRyKFwiaHJlZlwiKXx8Yi5wcmV2ZW50RGVmYXVsdCgpLGc/dGhpcy5jb2xsYXBzZShjLGQpOnRoaXMuZXhwYW5kKGMsZCkpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oYixjKXt2YXIgZD1hLkV2ZW50KGcuZXhwYW5kZWQpO2lmKHRoaXMub3B0aW9ucy5hY2NvcmRpb24pe3ZhciBoPWMuc2libGluZ3MoZS5vcGVuKSxpPWguY2hpbGRyZW4oZS50cmVldmlld01lbnUpO3RoaXMuY29sbGFwc2UoaSxoKX1jLmFkZENsYXNzKGYub3BlbiksYi5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoZCl9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbihiLGMpe3ZhciBkPWEuRXZlbnQoZy5jb2xsYXBzZWQpO2IuZmluZChlLm9wZW4pLnJlbW92ZUNsYXNzKGYub3BlbiksYy5yZW1vdmVDbGFzcyhmLm9wZW4pLGIuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXtiLmZpbmQoZS5vcGVuK1wiID4gXCIrZS50cmVldmlldykuc2xpZGVVcCgpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGQpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpczthKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy50cmlnZ2VyLGZ1bmN0aW9uKGMpe2IudG9nZ2xlKGEodGhpcyksYyl9KX07dmFyIGk9YS5mbi50cmVlO2EuZm4udHJlZT1iLGEuZm4udHJlZS5Db25zdHJ1Y3Rvcj1oLGEuZm4udHJlZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udHJlZT1pLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///51\n"); /***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {!function(e,t){ true?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){\"use strict\";function e(){return Qe.apply(null,arguments)}function t(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function n(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function s(e){return void 0===e}function i(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function r(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function a(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function u(e,t){for(var n in t)o(t,n)&&(e[n]=t[n]);return o(t,\"toString\")&&(e.toString=t.toString),o(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return ge(e,t,n,s,!0).utc()}function d(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function h(e){if(null==e._isValid){var t=d(e),n=Xe.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function c(e){var t=l(NaN);return null!=e?u(d(t),e):d(t).userInvalidated=!0,t}function f(e,t){var n,i,r;if(s(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),s(t._i)||(e._i=t._i),s(t._f)||(e._f=t._f),s(t._l)||(e._l=t._l),s(t._strict)||(e._strict=t._strict),s(t._tzm)||(e._tzm=t._tzm),s(t._isUTC)||(e._isUTC=t._isUTC),s(t._offset)||(e._offset=t._offset),s(t._pf)||(e._pf=d(t)),s(t._locale)||(e._locale=t._locale),Ke.length>0)for(n=0;n<Ke.length;n++)s(r=t[i=Ke[n]])||(e[i]=r);return e}function m(t){f(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===et&&(et=!0,e.updateOffset(this),et=!1)}function _(e){return e instanceof m||null!=e&&null!=e._isAMomentObject}function y(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=y(t)),n}function p(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&g(e[s])!==g(t[s]))&&a++;return a+r}function w(t){!1===e.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+t)}function v(t,n){var s=!0;return u(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),s){for(var i,r=[],a=0;a<arguments.length;a++){if(i=\"\",\"object\"==typeof arguments[a]){i+=\"\\n[\"+a+\"] \";for(var o in arguments[0])i+=o+\": \"+arguments[0][o]+\", \";i=i.slice(0,-2)}else i=arguments[a];r.push(i)}w(t+\"\\nArguments: \"+Array.prototype.slice.call(r).join(\"\")+\"\\n\"+(new Error).stack),s=!1}return n.apply(this,arguments)},n)}function M(t,n){null!=e.deprecationHandler&&e.deprecationHandler(t,n),tt[t]||(w(n),tt[t]=!0)}function S(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function D(e,t){var s,i=u({},e);for(s in t)o(t,s)&&(n(e[s])&&n(t[s])?(i[s]={},u(i[s],e[s]),u(i[s],t[s])):null!=t[s]?i[s]=t[s]:delete i[s]);for(s in e)o(e,s)&&!o(t,s)&&n(e[s])&&(i[s]=u({},i[s]));return i}function k(e){null!=e&&this.set(e)}function Y(e,t){var n=e.toLowerCase();st[n]=st[n+\"s\"]=st[t]=e}function O(e){return\"string\"==typeof e?st[e]||st[e.toLowerCase()]:void 0}function T(e){var t,n,s={};for(n in e)o(e,n)&&(t=O(n))&&(s[t]=e[n]);return s}function x(e,t){it[e]=t}function b(e,t,n){var s=\"\"+Math.abs(e),i=t-s.length;return(e>=0?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}function P(e,t,n,s){var i=s;\"string\"==typeof s&&(i=function(){return this[s]()}),e&&(ut[e]=i),t&&(ut[t[0]]=function(){return b(i.apply(this,arguments),t[1],t[2])}),n&&(ut[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function W(e){return e.match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\")}function H(e,t){return e.isValid()?(t=R(t,e.localeData()),ot[t]=ot[t]||function(e){var t,n,s=e.match(rt);for(t=0,n=s.length;t<n;t++)ut[s[t]]?s[t]=ut[s[t]]:s[t]=W(s[t]);return function(t){var i,r=\"\";for(i=0;i<n;i++)r+=S(s[i])?s[i].call(t,e):s[i];return r}}(t),ot[t](e)):e.localeData().invalidDate()}function R(e,t){function n(e){return t.longDateFormat(e)||e}var s=5;for(at.lastIndex=0;s>=0&&at.test(e);)e=e.replace(at,n),at.lastIndex=0,s-=1;return e}function C(e,t,n){Yt[e]=S(t)?t:function(e,s){return e&&n?n:t}}function F(e,t){return o(Yt,e)?Yt[e](t._strict,t._locale):new RegExp(function(e){return U(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(e,t,n,s,i){return t||n||s||i}))}(e))}function U(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function L(e,t){var n,s=t;for(\"string\"==typeof e&&(e=[e]),i(t)&&(s=function(e,n){n[t]=g(e)}),n=0;n<e.length;n++)Ot[e[n]]=s}function N(e,t){L(e,function(e,n,s,i){s._w=s._w||{},t(e,s._w,s,i)})}function G(e,t,n){null!=t&&o(Ot,e)&&Ot[e](t,n._a,n,e)}function V(e){return E(e)?366:365}function E(e){return e%4==0&&e%100!=0||e%400==0}function I(t,n){return function(s){return null!=s?(j(this,t,s),e.updateOffset(this,n),this):A(this,t)}}function A(e,t){return e.isValid()?e._d[\"get\"+(e._isUTC?\"UTC\":\"\")+t]():NaN}function j(e,t,n){e.isValid()&&!isNaN(n)&&(\"FullYear\"===t&&E(e.year())&&1===e.month()&&29===e.date()?e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n,e.month(),Z(n,e.month())):e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n))}function Z(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=function(e,t){return(e%t+t)%t}(t,12);return e+=(t-n)/12,1===n?E(e)?29:28:31-n%7%2}function z(e,t){var n;if(!e.isValid())return e;if(\"string\"==typeof t)if(/^\\d+$/.test(t))t=g(t);else if(t=e.localeData().monthsParse(t),!i(t))return e;return n=Math.min(e.date(),Z(e.year(),t)),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+\"Month\"](t,n),e}function $(t){return null!=t?(z(this,t),e.updateOffset(this,!0),this):A(this,\"Month\")}function q(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=l([2e3,t]),s.push(this.monthsShort(n,\"\")),i.push(this.months(n,\"\")),r.push(this.months(n,\"\")),r.push(this.monthsShort(n,\"\"));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=U(s[t]),i[t]=U(i[t]);for(t=0;t<24;t++)r[t]=U(r[t]);this._monthsRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function J(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function B(e,t,n){var s=7+t-n;return-((7+J(e,0,s).getUTCDay()-t)%7)+s-1}function Q(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+B(e,s,i);return o<=0?a=V(r=e-1)+o:o>V(e)?(r=e+1,a=o-V(e)):(r=e,a=o),{year:r,dayOfYear:a}}function X(e,t,n){var s,i,r=B(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+K(i=e.year()-1,t,n):a>K(e.year(),t,n)?(s=a-K(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function K(e,t,n){var s=B(e,t,n),i=B(e+1,t,n);return(V(e)-s+i)/7}function ee(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],d=[];for(t=0;t<7;t++)n=l([2e3,1]).day(t),s=this.weekdaysMin(n,\"\"),i=this.weekdaysShort(n,\"\"),r=this.weekdays(n,\"\"),a.push(s),o.push(i),u.push(r),d.push(s),d.push(i),d.push(r);for(a.sort(e),o.sort(e),u.sort(e),d.sort(e),t=0;t<7;t++)o[t]=U(o[t]),u[t]=U(u[t]),d[t]=U(d[t]);this._weekdaysRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+u.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function te(){return this.hours()%12||12}function ne(e,t){P(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function se(e,t){return t._meridiemParse}function ie(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function re(e){var t=null;if(!Xt[e]&&\"undefined\"!=typeof module&&module&&module.exports)try{t=Jt._abbr;!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"./locale\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()),ae(t)}catch(e){}return Xt[e]}function ae(e,t){var n;return e&&(n=s(t)?ue(e):oe(e,t))&&(Jt=n),Jt._abbr}function oe(e,t){if(null!==t){var n=Qt;if(t.abbr=e,null!=Xt[e])M(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),n=Xt[e]._config;else if(null!=t.parentLocale){if(null==Xt[t.parentLocale])return Kt[t.parentLocale]||(Kt[t.parentLocale]=[]),Kt[t.parentLocale].push({name:e,config:t}),null;n=Xt[t.parentLocale]._config}return Xt[e]=new k(D(n,t)),Kt[e]&&Kt[e].forEach(function(e){oe(e.name,e.config)}),ae(e),Xt[e]}return delete Xt[e],null}function ue(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Jt;if(!t(e)){if(n=re(e))return n;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=ie(e[r]).split(\"-\")).length,n=(n=ie(e[r+1]))?n.split(\"-\"):null;t>0;){if(s=re(i.slice(0,t).join(\"-\")))return s;if(n&&n.length>=t&&p(i,n,!0)>=t-1)break;t--}r++}return null}(e)}function le(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[xt]<0||n[xt]>11?xt:n[bt]<1||n[bt]>Z(n[Tt],n[xt])?bt:n[Pt]<0||n[Pt]>24||24===n[Pt]&&(0!==n[Wt]||0!==n[Ht]||0!==n[Rt])?Pt:n[Wt]<0||n[Wt]>59?Wt:n[Ht]<0||n[Ht]>59?Ht:n[Rt]<0||n[Rt]>999?Rt:-1,d(e)._overflowDayOfYear&&(t<Tt||t>bt)&&(t=bt),d(e)._overflowWeeks&&-1===t&&(t=Ct),d(e)._overflowWeekday&&-1===t&&(t=Ft),d(e).overflow=t),e}function de(e,t,n){return null!=e?e:null!=t?t:n}function he(t){var n,s,i,r,a,o=[];if(!t._d){for(i=function(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}(t),t._w&&null==t._a[bt]&&null==t._a[xt]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=de(t.GG,e._a[Tt],X(pe(),1,4).year),s=de(t.W,1),((i=de(t.E,1))<1||i>7)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=X(pe(),r,a);n=de(t.gg,e._a[Tt],l.year),s=de(t.w,l.week),null!=t.d?((i=t.d)<0||i>6)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||t.e>6)&&(u=!0)):i=r}s<1||s>K(n,r,a)?d(e)._overflowWeeks=!0:null!=u?d(e)._overflowWeekday=!0:(o=Q(n,s,i,r,a),e._a[Tt]=o.year,e._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(a=de(t._a[Tt],i[Tt]),(t._dayOfYear>V(a)||0===t._dayOfYear)&&(d(t)._overflowDayOfYear=!0),s=J(a,0,t._dayOfYear),t._a[xt]=s.getUTCMonth(),t._a[bt]=s.getUTCDate()),n=0;n<3&&null==t._a[n];++n)t._a[n]=o[n]=i[n];for(;n<7;n++)t._a[n]=o[n]=null==t._a[n]?2===n?1:0:t._a[n];24===t._a[Pt]&&0===t._a[Wt]&&0===t._a[Ht]&&0===t._a[Rt]&&(t._nextDay=!0,t._a[Pt]=0),t._d=(t._useUTC?J:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&e>=0&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,o),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Pt]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(d(t).weekdayMismatch=!0)}}function ce(e){var t,n,s,i,r,a,o=e._i,u=en.exec(o)||tn.exec(o);if(u){for(d(e).iso=!0,t=0,n=sn.length;t<n;t++)if(sn[t][1].exec(u[1])){i=sn[t][0],s=!1!==sn[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=rn.length;t<n;t++)if(rn[t][1].exec(u[3])){r=(u[2]||\" \")+rn[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!nn.exec(u[4]))return void(e._isValid=!1);a=\"Z\"}e._f=i+(r||\"\")+(a||\"\"),_e(e)}else e._isValid=!1}function fe(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Vt.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}function me(e){var t=on.exec(function(e){return e.replace(/\\([^)]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").trim()}(e._i));if(t){var n=fe(t[4],t[3],t[2],t[5],t[6],t[7]);if(!function(e,t,n){if(e&&jt.indexOf(e)!==new Date(t[0],t[1],t[2]).getDay())return d(n).weekdayMismatch=!0,n._isValid=!1,!1;return!0}(t[1],n,e))return;e._a=n,e._tzm=function(e,t,n){if(e)return un[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(t[8],t[9],t[10]),e._d=J.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),d(e).rfc2822=!0}else e._isValid=!1}function _e(t){if(t._f!==e.ISO_8601)if(t._f!==e.RFC_2822){t._a=[],d(t).empty=!0;var n,s,i,r,a,o=\"\"+t._i,u=o.length,l=0;for(i=R(t._f,t._locale).match(rt)||[],n=0;n<i.length;n++)r=i[n],(s=(o.match(F(r,t))||[])[0])&&((a=o.substr(0,o.indexOf(s))).length>0&&d(t).unusedInput.push(a),o=o.slice(o.indexOf(s)+s.length),l+=s.length),ut[r]?(s?d(t).empty=!1:d(t).unusedTokens.push(r),G(r,s,t)):t._strict&&!s&&d(t).unusedTokens.push(r);d(t).charsLeftOver=u-l,o.length>0&&d(t).unusedInput.push(o),t._a[Pt]<=12&&!0===d(t).bigHour&&t._a[Pt]>0&&(d(t).bigHour=void 0),d(t).parsedDateParts=t._a.slice(0),d(t).meridiem=t._meridiem,t._a[Pt]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0),t):t}(t._locale,t._a[Pt],t._meridiem),he(t),le(t)}else me(t);else ce(t)}function ye(o){var l=o._i,y=o._f;return o._locale=o._locale||ue(o._l),null===l||void 0===y&&\"\"===l?c({nullInput:!0}):(\"string\"==typeof l&&(o._i=l=o._locale.preparse(l)),_(l)?new m(le(l)):(r(l)?o._d=l:t(y)?function(e){var t,n,s,i,r;if(0===e._f.length)return d(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;i<e._f.length;i++)r=0,t=f({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],_e(t),h(t)&&(r+=d(t).charsLeftOver,r+=10*d(t).unusedTokens.length,d(t).score=r,(null==s||r<s)&&(s=r,n=t));u(e,n||t)}(o):y?_e(o):function(o){var u=o._i;s(u)?o._d=new Date(e.now()):r(u)?o._d=new Date(u.valueOf()):\"string\"==typeof u?function(t){var n=an.exec(t._i);null===n?(ce(t),!1===t._isValid&&(delete t._isValid,me(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))):t._d=new Date(+n[1])}(o):t(u)?(o._a=a(u.slice(0),function(e){return parseInt(e,10)}),he(o)):n(u)?function(e){if(!e._d){var t=T(e._i);e._a=a([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),he(e)}}(o):i(u)?o._d=new Date(u):e.createFromInputFallback(o)}(o),h(o)||(o._d=null),o))}function ge(e,s,i,r,a){var o={};return!0!==i&&!1!==i||(r=i,i=void 0),(n(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||t(e)&&0===e.length)&&(e=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=a,o._l=i,o._i=e,o._f=s,o._strict=r,function(e){var t=new m(le(ye(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}(o)}function pe(e,t,n,s){return ge(e,t,n,s,!1)}function we(e,n){var s,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return pe();for(s=n[0],i=1;i<n.length;++i)n[i].isValid()&&!n[i][e](s)||(s=n[i]);return s}function ve(e){var t=T(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ut.call(hn,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<hn.length;++s)if(e[hn[s]]){if(n)return!1;parseFloat(e[hn[s]])!==g(e[hn[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=ue(),this._bubble()}function Me(e){return e instanceof ve}function Se(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function De(e,t){P(e,0,0,function(){var e=this.utcOffset(),n=\"+\";return e<0&&(e=-e,n=\"-\"),n+b(~~(e/60),2)+t+b(~~e%60,2)})}function ke(e,t){var n=(t||\"\").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+\"\").match(cn)||[\"-\",0,0],i=60*s[1]+g(s[2]);return 0===i?0:\"+\"===s[0]?i:-i}function Ye(t,n){var s,i;return n._isUTC?(s=n.clone(),i=(_(t)||r(t)?t.valueOf():pe(t).valueOf())-s.valueOf(),s._d.setTime(s._d.valueOf()+i),e.updateOffset(s,!1),s):pe(t).local()}function Oe(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Te(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function xe(e,t){var n,s,r,a=e,u=null;return Me(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:i(e)?(a={},t?a[t]=e:a.milliseconds=e):(u=fn.exec(e))?(n=\"-\"===u[1]?-1:1,a={y:0,d:g(u[bt])*n,h:g(u[Pt])*n,m:g(u[Wt])*n,s:g(u[Ht])*n,ms:g(Se(1e3*u[Rt]))*n}):(u=mn.exec(e))?(n=\"-\"===u[1]?-1:(u[1],1),a={y:be(u[2],n),M:be(u[3],n),w:be(u[4],n),d:be(u[5],n),h:be(u[6],n),m:be(u[7],n),s:be(u[8],n)}):null==a?a={}:\"object\"==typeof a&&(\"from\"in a||\"to\"in a)&&(r=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Ye(t,e),e.isBefore(t)?n=Pe(e,t):((n=Pe(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(pe(a.from),pe(a.to)),(a={}).ms=r.milliseconds,a.M=r.months),s=new ve(a),Me(e)&&o(e,\"_locale\")&&(s._locale=e._locale),s}function be(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function Pe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function We(e,t){return function(n,s){var i,r;return null===s||isNaN(+s)||(M(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),r=n,n=s,s=r),n=\"string\"==typeof n?+n:n,i=xe(n,s),He(this,i,e),this}}function He(t,n,s,i){var r=n._milliseconds,a=Se(n._days),o=Se(n._months);t.isValid()&&(i=null==i||i,o&&z(t,A(t,\"Month\")+o*s),a&&j(t,\"Date\",A(t,\"Date\")+a*s),r&&t._d.setTime(t._d.valueOf()+r*s),i&&e.updateOffset(t,a||o))}function Re(e,t){var n,s=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(s,\"months\");return n=t-i<0?(t-i)/(i-e.clone().add(s-1,\"months\")):(t-i)/(e.clone().add(s+1,\"months\")-i),-(s+n)||0}function Ce(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ue(e))&&(this._locale=t),this)}function Fe(){return this._locale}function Ue(e,t){P(0,[e,e.length],0,t)}function Le(e,t,n,s,i){var r;return null==e?X(this,s,i).year:(r=K(e,s,i),t>r&&(t=r),function(e,t,n,s,i){var r=Q(e,t,n,s,i),a=J(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}function Ne(e,t){t[Rt]=g(1e3*(\"0.\"+e))}function Ge(e){return e}function Ve(e,t,n,s){var i=ue(),r=l().set(s,t);return i[n](r,e)}function Ee(e,t,n){if(i(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return Ve(e,t,n,\"month\");var s,r=[];for(s=0;s<12;s++)r[s]=Ve(e,s,n,\"month\");return r}function Ie(e,t,n,s){\"boolean\"==typeof e?(i(t)&&(n=t,t=void 0),t=t||\"\"):(n=t=e,e=!1,i(t)&&(n=t,t=void 0),t=t||\"\");var r=ue(),a=e?r._week.dow:0;if(null!=n)return Ve(t,(n+a)%7,s,\"day\");var o,u=[];for(o=0;o<7;o++)u[o]=Ve(t,(o+a)%7,s,\"day\");return u}function Ae(e,t,n,s){var i=xe(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function je(e){return e<0?Math.floor(e):Math.ceil(e)}function Ze(e){return 4800*e/146097}function ze(e){return 146097*e/4800}function $e(e){return function(){return this.as(e)}}function qe(e){return function(){return this.isValid()?this._data[e]:NaN}}function Je(e){return(e>0)-(e<0)||+e}function Be(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=An(this._milliseconds)/1e3,s=An(this._days),i=An(this._months);t=y((e=y(n/60))/60),n%=60,e%=60;var r=y(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",h=this.asSeconds();if(!h)return\"P0D\";var c=h<0?\"-\":\"\",f=Je(this._months)!==Je(h)?\"-\":\"\",m=Je(this._days)!==Je(h)?\"-\":\"\",_=Je(this._milliseconds)!==Je(h)?\"-\":\"\";return c+\"P\"+(r?f+r+\"Y\":\"\")+(a?f+a+\"M\":\"\")+(o?m+o+\"D\":\"\")+(u||l||d?\"T\":\"\")+(u?_+u+\"H\":\"\")+(l?_+l+\"M\":\"\")+(d?_+d+\"S\":\"\")}var Qe,Xe;Xe=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var Ke=e.momentProperties=[],et=!1,tt={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var nt;nt=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)o(e,t)&&n.push(t);return n};var st={},it={},rt=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,at=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ot={},ut={},lt=/\\d/,dt=/\\d\\d/,ht=/\\d{3}/,ct=/\\d{4}/,ft=/[+-]?\\d{6}/,mt=/\\d\\d?/,_t=/\\d\\d\\d\\d?/,yt=/\\d\\d\\d\\d\\d\\d?/,gt=/\\d{1,3}/,pt=/\\d{1,4}/,wt=/[+-]?\\d{1,6}/,vt=/\\d+/,Mt=/[+-]?\\d+/,St=/Z|[+-]\\d\\d:?\\d\\d/gi,Dt=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,kt=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,Yt={},Ot={},Tt=0,xt=1,bt=2,Pt=3,Wt=4,Ht=5,Rt=6,Ct=7,Ft=8;P(\"Y\",0,0,function(){var e=this.year();return e<=9999?\"\"+e:\"+\"+e}),P(0,[\"YY\",2],0,function(){return this.year()%100}),P(0,[\"YYYY\",4],0,\"year\"),P(0,[\"YYYYY\",5],0,\"year\"),P(0,[\"YYYYYY\",6,!0],0,\"year\"),Y(\"year\",\"y\"),x(\"year\",1),C(\"Y\",Mt),C(\"YY\",mt,dt),C(\"YYYY\",pt,ct),C(\"YYYYY\",wt,ft),C(\"YYYYYY\",wt,ft),L([\"YYYYY\",\"YYYYYY\"],Tt),L(\"YYYY\",function(t,n){n[Tt]=2===t.length?e.parseTwoDigitYear(t):g(t)}),L(\"YY\",function(t,n){n[Tt]=e.parseTwoDigitYear(t)}),L(\"Y\",function(e,t){t[Tt]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var Ut,Lt=I(\"FullYear\",!0);Ut=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},P(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),P(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)}),P(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)}),Y(\"month\",\"M\"),x(\"month\",8),C(\"M\",mt),C(\"MM\",mt,dt),C(\"MMM\",function(e,t){return t.monthsShortRegex(e)}),C(\"MMMM\",function(e,t){return t.monthsRegex(e)}),L([\"M\",\"MM\"],function(e,t){t[xt]=g(e)-1}),L([\"MMM\",\"MMMM\"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[xt]=i:d(n).invalidMonth=e});var Nt=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,Gt=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),Vt=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Et=kt,It=kt;P(\"w\",[\"ww\",2],\"wo\",\"week\"),P(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),Y(\"week\",\"w\"),Y(\"isoWeek\",\"W\"),x(\"week\",5),x(\"isoWeek\",5),C(\"w\",mt),C(\"ww\",mt,dt),C(\"W\",mt),C(\"WW\",mt,dt),N([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});P(\"d\",0,\"do\",\"day\"),P(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),P(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),P(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),P(\"e\",0,0,\"weekday\"),P(\"E\",0,0,\"isoWeekday\"),Y(\"day\",\"d\"),Y(\"weekday\",\"e\"),Y(\"isoWeekday\",\"E\"),x(\"day\",11),x(\"weekday\",11),x(\"isoWeekday\",11),C(\"d\",mt),C(\"e\",mt),C(\"E\",mt),C(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),C(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),C(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),N([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:d(n).invalidWeekday=e}),N([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=g(e)});var At=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),jt=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Zt=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),zt=kt,$t=kt,qt=kt;P(\"H\",[\"HH\",2],0,\"hour\"),P(\"h\",[\"hh\",2],0,te),P(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),P(\"hmm\",0,0,function(){return\"\"+te.apply(this)+b(this.minutes(),2)}),P(\"hmmss\",0,0,function(){return\"\"+te.apply(this)+b(this.minutes(),2)+b(this.seconds(),2)}),P(\"Hmm\",0,0,function(){return\"\"+this.hours()+b(this.minutes(),2)}),P(\"Hmmss\",0,0,function(){return\"\"+this.hours()+b(this.minutes(),2)+b(this.seconds(),2)}),ne(\"a\",!0),ne(\"A\",!1),Y(\"hour\",\"h\"),x(\"hour\",13),C(\"a\",se),C(\"A\",se),C(\"H\",mt),C(\"h\",mt),C(\"k\",mt),C(\"HH\",mt,dt),C(\"hh\",mt,dt),C(\"kk\",mt,dt),C(\"hmm\",_t),C(\"hmmss\",yt),C(\"Hmm\",_t),C(\"Hmmss\",yt),L([\"H\",\"HH\"],Pt),L([\"k\",\"kk\"],function(e,t,n){var s=g(e);t[Pt]=24===s?0:s}),L([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),L([\"h\",\"hh\"],function(e,t,n){t[Pt]=g(e),d(n).bigHour=!0}),L(\"hmm\",function(e,t,n){var s=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s)),d(n).bigHour=!0}),L(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s,2)),t[Ht]=g(e.substr(i)),d(n).bigHour=!0}),L(\"Hmm\",function(e,t,n){var s=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s))}),L(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s,2)),t[Ht]=g(e.substr(i))});var Jt,Bt=I(\"Hours\",!0),Qt={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:Gt,monthsShort:Vt,week:{dow:0,doy:6},weekdays:At,weekdaysMin:Zt,weekdaysShort:jt,meridiemParse:/[ap]\\.?m?\\.?/i},Xt={},Kt={},en=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,tn=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,nn=/Z|[+-]\\d\\d(?::?\\d\\d)?/,sn=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/]],rn=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],an=/^\\/?Date\\((\\-?\\d+)/i,on=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,un={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=v(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var ln=v(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=pe.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:c()}),dn=v(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=pe.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),hn=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];De(\"Z\",\":\"),De(\"ZZ\",\"\"),C(\"Z\",Dt),C(\"ZZ\",Dt),L([\"Z\",\"ZZ\"],function(e,t,n){n._useUTC=!0,n._tzm=ke(Dt,e)});var cn=/([\\+\\-]|\\d\\d)/gi;e.updateOffset=function(){};var fn=/^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/,mn=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;xe.fn=ve.prototype,xe.invalid=function(){return xe(NaN)};var _n=We(1,\"add\"),yn=We(-1,\"subtract\");e.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",e.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var gn=v(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return void 0===e?this.localeData():this.locale(e)});P(0,[\"gg\",2],0,function(){return this.weekYear()%100}),P(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),Ue(\"gggg\",\"weekYear\"),Ue(\"ggggg\",\"weekYear\"),Ue(\"GGGG\",\"isoWeekYear\"),Ue(\"GGGGG\",\"isoWeekYear\"),Y(\"weekYear\",\"gg\"),Y(\"isoWeekYear\",\"GG\"),x(\"weekYear\",1),x(\"isoWeekYear\",1),C(\"G\",Mt),C(\"g\",Mt),C(\"GG\",mt,dt),C(\"gg\",mt,dt),C(\"GGGG\",pt,ct),C(\"gggg\",pt,ct),C(\"GGGGG\",wt,ft),C(\"ggggg\",wt,ft),N([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,n,s){t[s.substr(0,2)]=g(e)}),N([\"gg\",\"GG\"],function(t,n,s,i){n[i]=e.parseTwoDigitYear(t)}),P(\"Q\",0,\"Qo\",\"quarter\"),Y(\"quarter\",\"Q\"),x(\"quarter\",7),C(\"Q\",lt),L(\"Q\",function(e,t){t[xt]=3*(g(e)-1)}),P(\"D\",[\"DD\",2],\"Do\",\"date\"),Y(\"date\",\"D\"),x(\"date\",9),C(\"D\",mt),C(\"DD\",mt,dt),C(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),L([\"D\",\"DD\"],bt),L(\"Do\",function(e,t){t[bt]=g(e.match(mt)[0])});var pn=I(\"Date\",!0);P(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),Y(\"dayOfYear\",\"DDD\"),x(\"dayOfYear\",4),C(\"DDD\",gt),C(\"DDDD\",ht),L([\"DDD\",\"DDDD\"],function(e,t,n){n._dayOfYear=g(e)}),P(\"m\",[\"mm\",2],0,\"minute\"),Y(\"minute\",\"m\"),x(\"minute\",14),C(\"m\",mt),C(\"mm\",mt,dt),L([\"m\",\"mm\"],Wt);var wn=I(\"Minutes\",!1);P(\"s\",[\"ss\",2],0,\"second\"),Y(\"second\",\"s\"),x(\"second\",15),C(\"s\",mt),C(\"ss\",mt,dt),L([\"s\",\"ss\"],Ht);var vn=I(\"Seconds\",!1);P(\"S\",0,0,function(){return~~(this.millisecond()/100)}),P(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),P(0,[\"SSS\",3],0,\"millisecond\"),P(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),P(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),P(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),P(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),P(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),P(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),Y(\"millisecond\",\"ms\"),x(\"millisecond\",16),C(\"S\",gt,lt),C(\"SS\",gt,dt),C(\"SSS\",gt,ht);var Mn;for(Mn=\"SSSS\";Mn.length<=9;Mn+=\"S\")C(Mn,vt);for(Mn=\"S\";Mn.length<=9;Mn+=\"S\")L(Mn,Ne);var Sn=I(\"Milliseconds\",!1);P(\"z\",0,0,\"zoneAbbr\"),P(\"zz\",0,0,\"zoneName\");var Dn=m.prototype;Dn.add=_n,Dn.calendar=function(t,n){var s=t||pe(),i=Ye(s,this).startOf(\"day\"),r=e.calendarFormat(this,i)||\"sameElse\",a=n&&(S(n[r])?n[r].call(this,s):n[r]);return this.format(a||this.localeData().calendar(r,this,pe(s)))},Dn.clone=function(){return new m(this)},Dn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Ye(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=O(t)){case\"year\":r=Re(this,s)/12;break;case\"month\":r=Re(this,s);break;case\"quarter\":r=Re(this,s)/3;break;case\"second\":r=(this-s)/1e3;break;case\"minute\":r=(this-s)/6e4;break;case\"hour\":r=(this-s)/36e5;break;case\"day\":r=(this-s-i)/864e5;break;case\"week\":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:y(r)},Dn.endOf=function(e){return void 0===(e=O(e))||\"millisecond\"===e?this:(\"date\"===e&&(e=\"day\"),this.startOf(e).add(1,\"isoWeek\"===e?\"week\":e).subtract(1,\"ms\"))},Dn.format=function(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=H(this,t);return this.localeData().postformat(n)},Dn.from=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?xe({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Dn.fromNow=function(e){return this.from(pe(),e)},Dn.to=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?xe({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Dn.toNow=function(e){return this.to(pe(),e)},Dn.get=function(e){return e=O(e),S(this[e])?this[e]():this},Dn.invalidAt=function(){return d(this).overflow},Dn.isAfter=function(e,t){var n=_(e)?e:pe(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=O(s(t)?\"millisecond\":t))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},Dn.isBefore=function(e,t){var n=_(e)?e:pe(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=O(s(t)?\"millisecond\":t))?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},Dn.isBetween=function(e,t,n,s){return(\"(\"===(s=s||\"()\")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(\")\"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},Dn.isSame=function(e,t){var n,s=_(e)?e:pe(e);return!(!this.isValid()||!s.isValid())&&(\"millisecond\"===(t=O(t||\"millisecond\"))?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},Dn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},Dn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},Dn.isValid=function(){return h(this)},Dn.lang=gn,Dn.locale=Ce,Dn.localeData=Fe,Dn.max=dn,Dn.min=ln,Dn.parsingFlags=function(){return u({},d(this))},Dn.set=function(e,t){if(\"object\"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:it[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=T(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(e=O(e),S(this[e]))return this[e](t);return this},Dn.startOf=function(e){switch(e=O(e)){case\"year\":this.month(0);case\"quarter\":case\"month\":this.date(1);case\"week\":case\"isoWeek\":case\"day\":case\"date\":this.hours(0);case\"hour\":this.minutes(0);case\"minute\":this.seconds(0);case\"second\":this.milliseconds(0)}return\"week\"===e&&this.weekday(0),\"isoWeek\"===e&&this.isoWeekday(1),\"quarter\"===e&&this.month(3*Math.floor(this.month()/3)),this},Dn.subtract=yn,Dn.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},Dn.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},Dn.toDate=function(){return new Date(this.valueOf())},Dn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?H(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):S(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this._d.valueOf()).toISOString().replace(\"Z\",H(n,\"Z\")):H(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},Dn.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e=\"moment\",t=\"\";this.isLocal()||(e=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",t=\"Z\");var n=\"[\"+e+'(\"]',s=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",i=t+'[\")]';return this.format(n+s+\"-MM-DD[T]HH:mm:ss.SSS\"+i)},Dn.toJSON=function(){return this.isValid()?this.toISOString():null},Dn.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},Dn.unix=function(){return Math.floor(this.valueOf()/1e3)},Dn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Dn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Dn.year=Lt,Dn.isLeapYear=function(){return E(this.year())},Dn.weekYear=function(e){return Le.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Dn.isoWeekYear=function(e){return Le.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},Dn.quarter=Dn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},Dn.month=$,Dn.daysInMonth=function(){return Z(this.year(),this.month())},Dn.week=Dn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")},Dn.isoWeek=Dn.isoWeeks=function(e){var t=X(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")},Dn.weeksInYear=function(){var e=this.localeData()._week;return K(this.year(),e.dow,e.doy)},Dn.isoWeeksInYear=function(){return K(this.year(),1,4)},Dn.date=pn,Dn.day=Dn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return\"string\"!=typeof e?e:isNaN(e)?\"number\"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,\"d\")):t},Dn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,\"d\")},Dn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return\"string\"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},Dn.dayOfYear=function(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")},Dn.hour=Dn.hours=Bt,Dn.minute=Dn.minutes=wn,Dn.second=Dn.seconds=vn,Dn.millisecond=Dn.milliseconds=Sn,Dn.utcOffset=function(t,n,s){var i,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if(\"string\"==typeof t){if(null===(t=ke(Dt,t)))return this}else Math.abs(t)<16&&!s&&(t*=60);return!this._isUTC&&n&&(i=Oe(this)),this._offset=t,this._isUTC=!0,null!=i&&this.add(i,\"m\"),r!==t&&(!n||this._changeInProgress?He(this,xe(t-r,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Oe(this)},Dn.utc=function(e){return this.utcOffset(0,e)},Dn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Oe(this),\"m\")),this},Dn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var e=ke(St,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},Dn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?pe(e).utcOffset():0,(this.utcOffset()-e)%60==0)},Dn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Dn.isLocal=function(){return!!this.isValid()&&!this._isUTC},Dn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Dn.isUtc=Te,Dn.isUTC=Te,Dn.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},Dn.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},Dn.dates=v(\"dates accessor is deprecated. Use date instead.\",pn),Dn.months=v(\"months accessor is deprecated. Use month instead\",$),Dn.years=v(\"years accessor is deprecated. Use year instead\",Lt),Dn.zone=v(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(\"string\"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),Dn.isDSTShifted=v(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e={};if(f(e,this),(e=ye(e))._a){var t=e._isUTC?l(e._a):pe(e._a);this._isDSTShifted=this.isValid()&&p(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var kn=k.prototype;kn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return S(s)?s.call(t,n):s},kn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},kn.invalidDate=function(){return this._invalidDate},kn.ordinal=function(e){return this._ordinal.replace(\"%d\",e)},kn.preparse=Ge,kn.postformat=Ge,kn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return S(i)?i(e,t,n,s):i.replace(/%d/i,e)},kn.pastFuture=function(e,t){var n=this._relativeTime[e>0?\"future\":\"past\"];return S(n)?n(t):n.replace(/%s/i,t)},kn.set=function(e){var t,n;for(n in e)S(t=e[n])?this[n]=t:this[\"_\"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},kn.months=function(e,n){return e?t(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Nt).test(n)?\"format\":\"standalone\"][e.month()]:t(this._months)?this._months:this._months.standalone},kn.monthsShort=function(e,n){return e?t(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Nt.test(n)?\"format\":\"standalone\"][e.month()]:t(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},kn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,\"\").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(i=Ut.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ut.call(this._longMonthsParse,a))?i:null:\"MMM\"===t?-1!==(i=Ut.call(this._shortMonthsParse,a))?i:-1!==(i=Ut.call(this._longMonthsParse,a))?i:null:-1!==(i=Ut.call(this._longMonthsParse,a))?i:-1!==(i=Ut.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp(\"^\"+this.months(i,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[s]=new RegExp(\"^\"+this.monthsShort(i,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[s]||(r=\"^\"+this.months(i,\"\")+\"|^\"+this.monthsShort(i,\"\"),this._monthsParse[s]=new RegExp(r.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[s].test(e))return s;if(n&&\"MMM\"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},kn.monthsRegex=function(e){return this._monthsParseExact?(o(this,\"_monthsRegex\")||q.call(this),e?this._monthsStrictRegex:this._monthsRegex):(o(this,\"_monthsRegex\")||(this._monthsRegex=It),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},kn.monthsShortRegex=function(e){return this._monthsParseExact?(o(this,\"_monthsRegex\")||q.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(o(this,\"_monthsShortRegex\")||(this._monthsShortRegex=Et),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},kn.week=function(e){return X(e,this._week.dow,this._week.doy).week},kn.firstDayOfYear=function(){return this._week.doy},kn.firstDayOfWeek=function(){return this._week.dow},kn.weekdays=function(e,n){return e?t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?\"format\":\"standalone\"][e.day()]:t(this._weekdays)?this._weekdays:this._weekdays.standalone},kn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},kn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},kn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,\"\").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(i=Ut.call(this._weekdaysParse,a))?i:null:\"ddd\"===t?-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:\"dddd\"===t?-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:\"ddd\"===t?-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp(\"^\"+this.weekdays(i,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._shortWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysShort(i,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._minWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysMin(i,\"\").replace(\".\",\".?\")+\"$\",\"i\")),this._weekdaysParse[s]||(r=\"^\"+this.weekdays(i,\"\")+\"|^\"+this.weekdaysShort(i,\"\")+\"|^\"+this.weekdaysMin(i,\"\"),this._weekdaysParse[s]=new RegExp(r.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&\"dd\"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},kn.weekdaysRegex=function(e){return this._weekdaysParseExact?(o(this,\"_weekdaysRegex\")||ee.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(o(this,\"_weekdaysRegex\")||(this._weekdaysRegex=zt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},kn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(o(this,\"_weekdaysRegex\")||ee.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(o(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=$t),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},kn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(o(this,\"_weekdaysRegex\")||ee.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(o(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=qt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},kn.isPM=function(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)},kn.meridiem=function(e,t,n){return e>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"},ae(\"en\",{dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}}),e.lang=v(\"moment.lang is deprecated. Use moment.locale instead.\",ae),e.langData=v(\"moment.langData is deprecated. Use moment.localeData instead.\",ue);var Yn=Math.abs,On=$e(\"ms\"),Tn=$e(\"s\"),xn=$e(\"m\"),bn=$e(\"h\"),Pn=$e(\"d\"),Wn=$e(\"w\"),Hn=$e(\"M\"),Rn=$e(\"y\"),Cn=qe(\"milliseconds\"),Fn=qe(\"seconds\"),Un=qe(\"minutes\"),Ln=qe(\"hours\"),Nn=qe(\"days\"),Gn=qe(\"months\"),Vn=qe(\"years\"),En=Math.round,In={ss:44,s:45,m:45,h:22,d:26,M:11},An=Math.abs,jn=ve.prototype;return jn.isValid=function(){return this._isValid},jn.abs=function(){var e=this._data;return this._milliseconds=Yn(this._milliseconds),this._days=Yn(this._days),this._months=Yn(this._months),e.milliseconds=Yn(e.milliseconds),e.seconds=Yn(e.seconds),e.minutes=Yn(e.minutes),e.hours=Yn(e.hours),e.months=Yn(e.months),e.years=Yn(e.years),this},jn.add=function(e,t){return Ae(this,e,t,1)},jn.subtract=function(e,t){return Ae(this,e,t,-1)},jn.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if(\"month\"===(e=O(e))||\"year\"===e)return t=this._days+s/864e5,n=this._months+Ze(t),\"month\"===e?n:n/12;switch(t=this._days+Math.round(ze(this._months)),e){case\"week\":return t/7+s/6048e5;case\"day\":return t+s/864e5;case\"hour\":return 24*t+s/36e5;case\"minute\":return 1440*t+s/6e4;case\"second\":return 86400*t+s/1e3;case\"millisecond\":return Math.floor(864e5*t)+s;default:throw new Error(\"Unknown unit \"+e)}},jn.asMilliseconds=On,jn.asSeconds=Tn,jn.asMinutes=xn,jn.asHours=bn,jn.asDays=Pn,jn.asWeeks=Wn,jn.asMonths=Hn,jn.asYears=Rn,jn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},jn._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||r<=0&&a<=0&&o<=0||(r+=864e5*je(ze(o)+a),a=0,o=0),u.milliseconds=r%1e3,e=y(r/1e3),u.seconds=e%60,t=y(e/60),u.minutes=t%60,n=y(t/60),u.hours=n%24,a+=y(n/24),i=y(Ze(a)),o+=i,a-=je(ze(i)),s=y(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},jn.clone=function(){return xe(this)},jn.get=function(e){return e=O(e),this.isValid()?this[e+\"s\"]():NaN},jn.milliseconds=Cn,jn.seconds=Fn,jn.minutes=Un,jn.hours=Ln,jn.days=Nn,jn.weeks=function(){return y(this.days()/7)},jn.months=Gn,jn.years=Vn,jn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var s=xe(e).abs(),i=En(s.as(\"s\")),r=En(s.as(\"m\")),a=En(s.as(\"h\")),o=En(s.as(\"d\")),u=En(s.as(\"M\")),l=En(s.as(\"y\")),d=i<=In.ss&&[\"s\",i]||i<In.s&&[\"ss\",i]||r<=1&&[\"m\"]||r<In.m&&[\"mm\",r]||a<=1&&[\"h\"]||a<In.h&&[\"hh\",a]||o<=1&&[\"d\"]||o<In.d&&[\"dd\",o]||u<=1&&[\"M\"]||u<In.M&&[\"MM\",u]||l<=1&&[\"y\"]||[\"yy\",l];return d[2]=t,d[3]=+e>0,d[4]=n,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,d)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},jn.toISOString=Be,jn.toString=Be,jn.toJSON=Be,jn.locale=Ce,jn.localeData=Fe,jn.toIsoString=v(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Be),jn.lang=gn,P(\"X\",0,0,\"unix\"),P(\"x\",0,0,\"valueOf\"),C(\"x\",Mt),C(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),L(\"X\",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),L(\"x\",function(e,t,n){n._d=new Date(g(e))}),e.version=\"2.20.1\",function(e){Qe=e}(pe),e.fn=Dn,e.min=function(){return we(\"isBefore\",[].slice.call(arguments,0))},e.max=function(){return we(\"isAfter\",[].slice.call(arguments,0))},e.now=function(){return Date.now?Date.now():+new Date},e.utc=l,e.unix=function(e){return pe(1e3*e)},e.months=function(e,t){return Ee(e,t,\"months\")},e.isDate=r,e.locale=ae,e.invalid=c,e.duration=xe,e.isMoment=_,e.weekdays=function(e,t,n){return Ie(e,t,n,\"weekdays\")},e.parseZone=function(){return pe.apply(null,arguments).parseZone()},e.localeData=ue,e.isDuration=Me,e.monthsShort=function(e,t){return Ee(e,t,\"monthsShort\")},e.weekdaysMin=function(e,t,n){return Ie(e,t,n,\"weekdaysMin\")},e.defineLocale=oe,e.updateLocale=function(e,t){if(null!=t){var n,s,i=Qt;null!=(s=re(e))&&(i=s._config),(n=new k(t=D(i,t))).parentLocale=Xt[e],Xt[e]=n,ae(e)}else null!=Xt[e]&&(null!=Xt[e].parentLocale?Xt[e]=Xt[e].parentLocale:null!=Xt[e]&&delete Xt[e]);return Xt[e]},e.locales=function(){return nt(Xt)},e.weekdaysShort=function(e,t,n){return Ie(e,t,n,\"weekdaysShort\")},e.normalizeUnits=O,e.relativeTimeRounding=function(e){return void 0===e?En:\"function\"==typeof e&&(En=e,!0)},e.relativeTimeThreshold=function(e,t){return void 0!==In[e]&&(void 0===t?In[e]:(In[e]=t,\"s\"===e&&(In.ss=t-1),!0))},e.calendarFormat=function(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"},e.prototype=Dn,e.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"YYYY-[W]WW\",MONTH:\"YYYY-MM\"},e});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL21vbWVudC9taW4vbW9tZW50Lm1pbi5qcz9lNmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUFlLHNGQUFxSSxpQkFBaUIsYUFBYSxhQUFhLGdDQUFnQyxjQUFjLGdGQUFnRixjQUFjLHNFQUFzRSxjQUFjLGtCQUFrQixjQUFjLGdGQUFnRixjQUFjLDhFQUE4RSxnQkFBZ0IsV0FBVyxRQUFRLFdBQVcsc0JBQXNCLFNBQVMsZ0JBQWdCLGlEQUFpRCxnQkFBZ0IsbUNBQW1DLHdGQUF3RixvQkFBb0IsNEJBQTRCLGNBQWMsNEJBQTRCLDZNQUE2TSxRQUFRLGNBQWMscUJBQXFCLG1EQUFtRCxlQUFlLDZMQUE2TCwySUFBMkksYUFBYSxrQkFBa0IsY0FBYyxhQUFhLG1EQUFtRCxnQkFBZ0IsVUFBVSxvVkFBb1YsWUFBWSw4QkFBOEIsU0FBUyxjQUFjLDhJQUE4SSxjQUFjLHlEQUF5RCxjQUFjLHlDQUF5QyxjQUFjLGFBQWEsc0NBQXNDLGtCQUFrQixzRUFBc0UsUUFBUSxJQUFJLGlEQUFpRCxXQUFXLGNBQWMsdUhBQXVILGdCQUFnQixTQUFTLG9CQUFvQiwrREFBK0QsbUJBQW1CLG1CQUFtQixLQUFLLHVDQUF1QyxnQkFBZ0IseURBQXlELGdCQUFnQixvQkFBb0IsVUFBVSx3RkFBd0YsK0JBQStCLElBQUksZ0JBQWdCLDZFQUE2RSxjQUFjLHNGQUFzRixnQkFBZ0IsWUFBWSxJQUFJLDZDQUE2Qyw4REFBOEQsK0NBQStDLFFBQVEsU0FBUyxjQUFjLHFCQUFxQixnQkFBZ0Isc0JBQXNCLHdCQUF3QixjQUFjLDJEQUEyRCxjQUFjLGFBQWEseUNBQXlDLFNBQVMsZ0JBQWdCLFFBQVEsa0JBQWtCLGtDQUFrQyw0RUFBNEUsb0JBQW9CLFFBQVEsa0NBQWtDLGlCQUFpQix1Q0FBdUMsNENBQTRDLHVCQUF1Qiw0REFBNEQsRUFBRSxjQUFjLHdFQUF3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OGlCLDhEQUE4RCwyREFBMkQsZ0RBQWdELDhCQUE4QiwwUEFBMFAsbUNBQW1DLDZSQUE2UixpQ0FBaUMsK1FBQStRLHFCQUFxQiwyQ0FBMkMsNkJBQTZCLG9DQUFvQyxVQUFVLDJCQUEyQixJQUFJLG1DQUFtQyxXQUFXLHVFQUF1RSx3SkFBd0osK09BQStPLCtCQUErQiw2QkFBNkIsNkJBQTZCLHFCQUFxQixtQkFBbUIsaUJBQWlCLDhQQUE4UCxzQkFBc0Isc0JBQXNCLDJCQUEyQix1QkFBdUIsbUJBQW1CLDhCQUE4Qiw2QkFBNkIsc0dBQXNHLG9EQUFvRCwrQkFBK0IsMkJBQTJCLDhCQUE4QixpQ0FBaUMsa0NBQWtDLCtDQUErQyw0Q0FBNEMsa0pBQWtKLGdIQUFnSCx1QkFBdUIsNEVBQTRFLG9RQUFvUSxxQkFBcUIsZ0JBQWdCLG9CQUFvQiwrQ0FBK0MsMkZBQTJGLHdCQUF3QixrREFBa0QsMERBQTBELDBDQUEwQywyU0FBMlMsbURBQW1ELG9DQUFvQyxlQUFlLFlBQVksb0RBQW9ELHlRQUF5USxJQUFJLDJCQUEyQixvQ0FBb0Msd0JBQXdCLG9CQUFvQixpQ0FBaUMsS0FBSyw4QkFBOEIsaURBQWlELGtCQUFrQixnREFBZ0Qsa0JBQWtCLHFDQUFxQyw0QkFBNEIsaUJBQWlCLHdCQUF3Qix3QkFBd0IsMEZBQTBGLDRCQUE0Qix3QkFBd0IsNENBQTRDLDZEQUE2RCw2QkFBNkIsK0JBQStCLCtCQUErQixnREFBZ0QsWUFBWSxhQUFhLG9GQUFvRixnR0FBZ0csYUFBYSxzQkFBc0IsY0FBYyxpQ0FBaUMsaUNBQWlDLHVEQUF1RCxxREFBcUQsdUNBQXVDLDRFQUE0RSxnQ0FBZ0MsMEJBQTBCLDJHQUEyRyw2QkFBNkIsMk9BQTJPLEdBQUcsRSIsImZpbGUiOiI1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUubW9tZW50PXQoKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoKXtyZXR1cm4gUWUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheXx8XCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGwhPWUmJlwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxcIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlfHxcIltvYmplY3QgRGF0ZV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG4scz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXMucHVzaCh0KGVbbl0sbikpO3JldHVybiBzfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbiBpbiB0KW8odCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIG8odCxcInRvU3RyaW5nXCIpJiYoZS50b1N0cmluZz10LnRvU3RyaW5nKSxvKHQsXCJ2YWx1ZU9mXCIpJiYoZS52YWx1ZU9mPXQudmFsdWVPZiksZX1mdW5jdGlvbiBsKGUsdCxuLHMpe3JldHVybiBnZShlLHQsbixzLCEwKS51dGMoKX1mdW5jdGlvbiBkKGUpe3JldHVybiBudWxsPT1lLl9wZiYmKGUuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSxlLl9wZn1mdW5jdGlvbiBoKGUpe2lmKG51bGw9PWUuX2lzVmFsaWQpe3ZhciB0PWQoZSksbj1YZS5jYWxsKHQucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lfSkscz0haXNOYU4oZS5fZC5nZXRUaW1lKCkpJiZ0Lm92ZXJmbG93PDAmJiF0LmVtcHR5JiYhdC5pbnZhbGlkTW9udGgmJiF0LmludmFsaWRXZWVrZGF5JiYhdC53ZWVrZGF5TWlzbWF0Y2gmJiF0Lm51bGxJbnB1dCYmIXQuaW52YWxpZEZvcm1hdCYmIXQudXNlckludmFsaWRhdGVkJiYoIXQubWVyaWRpZW18fHQubWVyaWRpZW0mJm4pO2lmKGUuX3N0cmljdCYmKHM9cyYmMD09PXQuY2hhcnNMZWZ0T3ZlciYmMD09PXQudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09dC5iaWdIb3VyKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihlKSlyZXR1cm4gcztlLl9pc1ZhbGlkPXN9cmV0dXJuIGUuX2lzVmFsaWR9ZnVuY3Rpb24gYyhlKXt2YXIgdD1sKE5hTik7cmV0dXJuIG51bGwhPWU/dShkKHQpLGUpOmQodCkudXNlckludmFsaWRhdGVkPSEwLHR9ZnVuY3Rpb24gZihlLHQpe3ZhciBuLGkscjtpZihzKHQuX2lzQU1vbWVudE9iamVjdCl8fChlLl9pc0FNb21lbnRPYmplY3Q9dC5faXNBTW9tZW50T2JqZWN0KSxzKHQuX2kpfHwoZS5faT10Ll9pKSxzKHQuX2YpfHwoZS5fZj10Ll9mKSxzKHQuX2wpfHwoZS5fbD10Ll9sKSxzKHQuX3N0cmljdCl8fChlLl9zdHJpY3Q9dC5fc3RyaWN0KSxzKHQuX3R6bSl8fChlLl90em09dC5fdHptKSxzKHQuX2lzVVRDKXx8KGUuX2lzVVRDPXQuX2lzVVRDKSxzKHQuX29mZnNldCl8fChlLl9vZmZzZXQ9dC5fb2Zmc2V0KSxzKHQuX3BmKXx8KGUuX3BmPWQodCkpLHModC5fbG9jYWxlKXx8KGUuX2xvY2FsZT10Ll9sb2NhbGUpLEtlLmxlbmd0aD4wKWZvcihuPTA7bjxLZS5sZW5ndGg7bisrKXMocj10W2k9S2Vbbl1dKXx8KGVbaV09cik7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtmKHRoaXMsdCksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT10Ll9kP3QuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09ZXQmJihldD0hMCxlLnVwZGF0ZU9mZnNldCh0aGlzKSxldD0hMSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG18fG51bGwhPWUmJm51bGwhPWUuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiB5KGUpe3JldHVybiBlPDA/TWF0aC5jZWlsKGUpfHwwOk1hdGguZmxvb3IoZSl9ZnVuY3Rpb24gZyhlKXt2YXIgdD0rZSxuPTA7cmV0dXJuIDAhPT10JiZpc0Zpbml0ZSh0KSYmKG49eSh0KSksbn1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcyxpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPU1hdGguYWJzKGUubGVuZ3RoLXQubGVuZ3RoKSxhPTA7Zm9yKHM9MDtzPGk7cysrKShuJiZlW3NdIT09dFtzXXx8IW4mJmcoZVtzXSkhPT1nKHRbc10pKSYmYSsrO3JldHVybiBhK3J9ZnVuY3Rpb24gdyh0KXshMT09PWUuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oXCJEZXByZWNhdGlvbiB3YXJuaW5nOiBcIit0KX1mdW5jdGlvbiB2KHQsbil7dmFyIHM9ITA7cmV0dXJuIHUoZnVuY3Rpb24oKXtpZihudWxsIT1lLmRlcHJlY2F0aW9uSGFuZGxlciYmZS5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCx0KSxzKXtmb3IodmFyIGkscj1bXSxhPTA7YTxhcmd1bWVudHMubGVuZ3RoO2ErKyl7aWYoaT1cIlwiLFwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbYV0pe2krPVwiXFxuW1wiK2ErXCJdIFwiO2Zvcih2YXIgbyBpbiBhcmd1bWVudHNbMF0paSs9bytcIjogXCIrYXJndW1lbnRzWzBdW29dK1wiLCBcIjtpPWkuc2xpY2UoMCwtMil9ZWxzZSBpPWFyZ3VtZW50c1thXTtyLnB1c2goaSl9dyh0K1wiXFxuQXJndW1lbnRzOiBcIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKS5qb2luKFwiXCIpK1wiXFxuXCIrKG5ldyBFcnJvcikuc3RhY2spLHM9ITF9cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX1mdW5jdGlvbiBNKHQsbil7bnVsbCE9ZS5kZXByZWNhdGlvbkhhbmRsZXImJmUuZGVwcmVjYXRpb25IYW5kbGVyKHQsbiksdHRbdF18fCh3KG4pLHR0W3RdPSEwKX1mdW5jdGlvbiBTKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb258fFwiW29iamVjdCBGdW5jdGlvbl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBEKGUsdCl7dmFyIHMsaT11KHt9LGUpO2ZvcihzIGluIHQpbyh0LHMpJiYobihlW3NdKSYmbih0W3NdKT8oaVtzXT17fSx1KGlbc10sZVtzXSksdShpW3NdLHRbc10pKTpudWxsIT10W3NdP2lbc109dFtzXTpkZWxldGUgaVtzXSk7Zm9yKHMgaW4gZSlvKGUscykmJiFvKHQscykmJm4oZVtzXSkmJihpW3NdPXUoe30saVtzXSkpO3JldHVybiBpfWZ1bmN0aW9uIGsoZSl7bnVsbCE9ZSYmdGhpcy5zZXQoZSl9ZnVuY3Rpb24gWShlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtzdFtuXT1zdFtuK1wic1wiXT1zdFt0XT1lfWZ1bmN0aW9uIE8oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/c3RbZV18fHN0W2UudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIFQoZSl7dmFyIHQsbixzPXt9O2ZvcihuIGluIGUpbyhlLG4pJiYodD1PKG4pKSYmKHNbdF09ZVtuXSk7cmV0dXJuIHN9ZnVuY3Rpb24geChlLHQpe2l0W2VdPXR9ZnVuY3Rpb24gYihlLHQsbil7dmFyIHM9XCJcIitNYXRoLmFicyhlKSxpPXQtcy5sZW5ndGg7cmV0dXJuKGU+PTA/bj9cIitcIjpcIlwiOlwiLVwiKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLGkpKS50b1N0cmluZygpLnN1YnN0cigxKStzfWZ1bmN0aW9uIFAoZSx0LG4scyl7dmFyIGk9cztcInN0cmluZ1wiPT10eXBlb2YgcyYmKGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tzXSgpfSksZSYmKHV0W2VdPWkpLHQmJih1dFt0WzBdXT1mdW5jdGlvbigpe3JldHVybiBiKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRbMV0sdFsyXSl9KSxuJiYodXRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlKX0pfWZ1bmN0aW9uIFcoZSl7cmV0dXJuIGUubWF0Y2goL1xcW1tcXHNcXFNdLyk/ZS5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKTplLnJlcGxhY2UoL1xcXFwvZyxcIlwiKX1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIGUuaXNWYWxpZCgpPyh0PVIodCxlLmxvY2FsZURhdGEoKSksb3RbdF09b3RbdF18fGZ1bmN0aW9uKGUpe3ZhciB0LG4scz1lLm1hdGNoKHJ0KTtmb3IodD0wLG49cy5sZW5ndGg7dDxuO3QrKyl1dFtzW3RdXT9zW3RdPXV0W3NbdF1dOnNbdF09VyhzW3RdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGkscj1cIlwiO2ZvcihpPTA7aTxuO2krKylyKz1TKHNbaV0pP3NbaV0uY2FsbCh0LGUpOnNbaV07cmV0dXJuIHJ9fSh0KSxvdFt0XShlKSk6ZS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBSKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5sb25nRGF0ZUZvcm1hdChlKXx8ZX12YXIgcz01O2ZvcihhdC5sYXN0SW5kZXg9MDtzPj0wJiZhdC50ZXN0KGUpOyllPWUucmVwbGFjZShhdCxuKSxhdC5sYXN0SW5kZXg9MCxzLT0xO3JldHVybiBlfWZ1bmN0aW9uIEMoZSx0LG4pe1l0W2VdPVModCk/dDpmdW5jdGlvbihlLHMpe3JldHVybiBlJiZuP246dH19ZnVuY3Rpb24gRihlLHQpe3JldHVybiBvKFl0LGUpP1l0W2VdKHQuX3N0cmljdCx0Ll9sb2NhbGUpOm5ldyBSZWdFeHAoZnVuY3Rpb24oZSl7cmV0dXJuIFUoZS5yZXBsYWNlKFwiXFxcXFwiLFwiXCIpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxmdW5jdGlvbihlLHQsbixzLGkpe3JldHVybiB0fHxufHxzfHxpfSkpfShlKSl9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIil9ZnVuY3Rpb24gTChlLHQpe3ZhciBuLHM9dDtmb3IoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksaSh0KSYmKHM9ZnVuY3Rpb24oZSxuKXtuW3RdPWcoZSl9KSxuPTA7bjxlLmxlbmd0aDtuKyspT3RbZVtuXV09c31mdW5jdGlvbiBOKGUsdCl7TChlLGZ1bmN0aW9uKGUsbixzLGkpe3MuX3c9cy5fd3x8e30sdChlLHMuX3cscyxpKX0pfWZ1bmN0aW9uIEcoZSx0LG4pe251bGwhPXQmJm8oT3QsZSkmJk90W2VdKHQsbi5fYSxuLGUpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIEUoZSk/MzY2OjM2NX1mdW5jdGlvbiBFKGUpe3JldHVybiBlJTQ9PTAmJmUlMTAwIT0wfHxlJTQwMD09MH1mdW5jdGlvbiBJKHQsbil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBudWxsIT1zPyhqKHRoaXMsdCxzKSxlLnVwZGF0ZU9mZnNldCh0aGlzLG4pLHRoaXMpOkEodGhpcyx0KX19ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLmlzVmFsaWQoKT9lLl9kW1wiZ2V0XCIrKGUuX2lzVVRDP1wiVVRDXCI6XCJcIikrdF0oKTpOYU59ZnVuY3Rpb24gaihlLHQsbil7ZS5pc1ZhbGlkKCkmJiFpc05hTihuKSYmKFwiRnVsbFllYXJcIj09PXQmJkUoZS55ZWFyKCkpJiYxPT09ZS5tb250aCgpJiYyOT09PWUuZGF0ZSgpP2UuX2RbXCJzZXRcIisoZS5faXNVVEM/XCJVVENcIjpcIlwiKSt0XShuLGUubW9udGgoKSxaKG4sZS5tb250aCgpKSk6ZS5fZFtcInNldFwiKyhlLl9pc1VUQz9cIlVUQ1wiOlwiXCIpK3RdKG4pKX1mdW5jdGlvbiBaKGUsdCl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpKXJldHVybiBOYU47dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZSV0K3QpJXR9KHQsMTIpO3JldHVybiBlKz0odC1uKS8xMiwxPT09bj9FKGUpPzI5OjI4OjMxLW4lNyUyfWZ1bmN0aW9uIHooZSx0KXt2YXIgbjtpZighZS5pc1ZhbGlkKCkpcmV0dXJuIGU7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoL15cXGQrJC8udGVzdCh0KSl0PWcodCk7ZWxzZSBpZih0PWUubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHQpLCFpKHQpKXJldHVybiBlO3JldHVybiBuPU1hdGgubWluKGUuZGF0ZSgpLFooZS55ZWFyKCksdCkpLGUuX2RbXCJzZXRcIisoZS5faXNVVEM/XCJVVENcIjpcIlwiKStcIk1vbnRoXCJdKHQsbiksZX1mdW5jdGlvbiAkKHQpe3JldHVybiBudWxsIT10Pyh6KHRoaXMsdCksZS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6QSh0aGlzLFwiTW9udGhcIil9ZnVuY3Rpb24gcSgpe2Z1bmN0aW9uIGUoZSx0KXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9dmFyIHQsbixzPVtdLGk9W10scj1bXTtmb3IodD0wO3Q8MTI7dCsrKW49bChbMmUzLHRdKSxzLnB1c2godGhpcy5tb250aHNTaG9ydChuLFwiXCIpKSxpLnB1c2godGhpcy5tb250aHMobixcIlwiKSksci5wdXNoKHRoaXMubW9udGhzKG4sXCJcIikpLHIucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sXCJcIikpO2ZvcihzLnNvcnQoZSksaS5zb3J0KGUpLHIuc29ydChlKSx0PTA7dDwxMjt0Kyspc1t0XT1VKHNbdF0pLGlbdF09VShpW3RdKTtmb3IodD0wO3Q8MjQ7dCsrKXJbdF09VShyW3RdKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKFwiXihcIityLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK2kuam9pbihcInxcIikrXCIpXCIsXCJpXCIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrcy5qb2luKFwifFwiKStcIilcIixcImlcIil9ZnVuY3Rpb24gSihlKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlPDEwMCYmZT49MCYmaXNGaW5pdGUodC5nZXRVVENGdWxsWWVhcigpKSYmdC5zZXRVVENGdWxsWWVhcihlKSx0fWZ1bmN0aW9uIEIoZSx0LG4pe3ZhciBzPTcrdC1uO3JldHVybi0oKDcrSihlLDAscykuZ2V0VVRDRGF5KCktdCklNykrcy0xfWZ1bmN0aW9uIFEoZSx0LG4scyxpKXt2YXIgcixhLG89MSs3Kih0LTEpKyg3K24tcyklNytCKGUscyxpKTtyZXR1cm4gbzw9MD9hPVYocj1lLTEpK286bz5WKGUpPyhyPWUrMSxhPW8tVihlKSk6KHI9ZSxhPW8pLHt5ZWFyOnIsZGF5T2ZZZWFyOmF9fWZ1bmN0aW9uIFgoZSx0LG4pe3ZhciBzLGkscj1CKGUueWVhcigpLHQsbiksYT1NYXRoLmZsb29yKChlLmRheU9mWWVhcigpLXItMSkvNykrMTtyZXR1cm4gYTwxP3M9YStLKGk9ZS55ZWFyKCktMSx0LG4pOmE+SyhlLnllYXIoKSx0LG4pPyhzPWEtSyhlLnllYXIoKSx0LG4pLGk9ZS55ZWFyKCkrMSk6KGk9ZS55ZWFyKCkscz1hKSx7d2VlazpzLHllYXI6aX19ZnVuY3Rpb24gSyhlLHQsbil7dmFyIHM9QihlLHQsbiksaT1CKGUrMSx0LG4pO3JldHVybihWKGUpLXMraSkvN31mdW5jdGlvbiBlZSgpe2Z1bmN0aW9uIGUoZSx0KXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9dmFyIHQsbixzLGkscixhPVtdLG89W10sdT1bXSxkPVtdO2Zvcih0PTA7dDw3O3QrKyluPWwoWzJlMywxXSkuZGF5KHQpLHM9dGhpcy53ZWVrZGF5c01pbihuLFwiXCIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sXCJcIikscj10aGlzLndlZWtkYXlzKG4sXCJcIiksYS5wdXNoKHMpLG8ucHVzaChpKSx1LnB1c2gociksZC5wdXNoKHMpLGQucHVzaChpKSxkLnB1c2gocik7Zm9yKGEuc29ydChlKSxvLnNvcnQoZSksdS5zb3J0KGUpLGQuc29ydChlKSx0PTA7dDw3O3QrKylvW3RdPVUob1t0XSksdVt0XT1VKHVbdF0pLGRbdF09VShkW3RdKTt0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK2Quam9pbihcInxcIikrXCIpXCIsXCJpXCIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK3Uuam9pbihcInxcIikrXCIpXCIsXCJpXCIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKFwiXihcIitvLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK2Euam9pbihcInxcIikrXCIpXCIsXCJpXCIpfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gbmUoZSx0KXtQKGUsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSx0KX0pfWZ1bmN0aW9uIHNlKGUsdCl7cmV0dXJuIHQuX21lcmlkaWVtUGFyc2V9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIGU/ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoXCJfXCIsXCItXCIpOmV9ZnVuY3Rpb24gcmUoZSl7dmFyIHQ9bnVsbDtpZighWHRbZV0mJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpdHJ5e3Q9SnQuX2FiYnI7cmVxdWlyZShcIi4vbG9jYWxlL1wiK2UpLGFlKHQpfWNhdGNoKGUpe31yZXR1cm4gWHRbZV19ZnVuY3Rpb24gYWUoZSx0KXt2YXIgbjtyZXR1cm4gZSYmKG49cyh0KT91ZShlKTpvZShlLHQpKSYmKEp0PW4pLEp0Ll9hYmJyfWZ1bmN0aW9uIG9lKGUsdCl7aWYobnVsbCE9PXQpe3ZhciBuPVF0O2lmKHQuYWJicj1lLG51bGwhPVh0W2VdKU0oXCJkZWZpbmVMb2NhbGVPdmVycmlkZVwiLFwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uXCIpLG49WHRbZV0uX2NvbmZpZztlbHNlIGlmKG51bGwhPXQucGFyZW50TG9jYWxlKXtpZihudWxsPT1YdFt0LnBhcmVudExvY2FsZV0pcmV0dXJuIEt0W3QucGFyZW50TG9jYWxlXXx8KEt0W3QucGFyZW50TG9jYWxlXT1bXSksS3RbdC5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6ZSxjb25maWc6dH0pLG51bGw7bj1YdFt0LnBhcmVudExvY2FsZV0uX2NvbmZpZ31yZXR1cm4gWHRbZV09bmV3IGsoRChuLHQpKSxLdFtlXSYmS3RbZV0uZm9yRWFjaChmdW5jdGlvbihlKXtvZShlLm5hbWUsZS5jb25maWcpfSksYWUoZSksWHRbZV19cmV0dXJuIGRlbGV0ZSBYdFtlXSxudWxsfWZ1bmN0aW9uIHVlKGUpe3ZhciBuO2lmKGUmJmUuX2xvY2FsZSYmZS5fbG9jYWxlLl9hYmJyJiYoZT1lLl9sb2NhbGUuX2FiYnIpLCFlKXJldHVybiBKdDtpZighdChlKSl7aWYobj1yZShlKSlyZXR1cm4gbjtlPVtlXX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scyxpLHI9MDtyPGUubGVuZ3RoOyl7Zm9yKHQ9KGk9aWUoZVtyXSkuc3BsaXQoXCItXCIpKS5sZW5ndGgsbj0obj1pZShlW3IrMV0pKT9uLnNwbGl0KFwiLVwiKTpudWxsO3Q+MDspe2lmKHM9cmUoaS5zbGljZSgwLHQpLmpvaW4oXCItXCIpKSlyZXR1cm4gcztpZihuJiZuLmxlbmd0aD49dCYmcChpLG4sITApPj10LTEpYnJlYWs7dC0tfXIrK31yZXR1cm4gbnVsbH0oZSl9ZnVuY3Rpb24gbGUoZSl7dmFyIHQsbj1lLl9hO3JldHVybiBuJiYtMj09PWQoZSkub3ZlcmZsb3cmJih0PW5beHRdPDB8fG5beHRdPjExP3h0Om5bYnRdPDF8fG5bYnRdPloobltUdF0sblt4dF0pP2J0Om5bUHRdPDB8fG5bUHRdPjI0fHwyND09PW5bUHRdJiYoMCE9PW5bV3RdfHwwIT09bltIdF18fDAhPT1uW1J0XSk/UHQ6bltXdF08MHx8bltXdF0+NTk/V3Q6bltIdF08MHx8bltIdF0+NTk/SHQ6bltSdF08MHx8bltSdF0+OTk5P1J0Oi0xLGQoZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYodDxUdHx8dD5idCkmJih0PWJ0KSxkKGUpLl9vdmVyZmxvd1dlZWtzJiYtMT09PXQmJih0PUN0KSxkKGUpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09dCYmKHQ9RnQpLGQoZSkub3ZlcmZsb3c9dCksZX1mdW5jdGlvbiBkZShlLHQsbil7cmV0dXJuIG51bGwhPWU/ZTpudWxsIT10P3Q6bn1mdW5jdGlvbiBoZSh0KXt2YXIgbixzLGkscixhLG89W107aWYoIXQuX2Qpe2ZvcihpPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBEYXRlKGUubm93KCkpO3JldHVybiB0Ll91c2VVVEM/W24uZ2V0VVRDRnVsbFllYXIoKSxuLmdldFVUQ01vbnRoKCksbi5nZXRVVENEYXRlKCldOltuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpXX0odCksdC5fdyYmbnVsbD09dC5fYVtidF0mJm51bGw9PXQuX2FbeHRdJiZmdW5jdGlvbihlKXt2YXIgdCxuLHMsaSxyLGEsbyx1O2lmKG51bGwhPSh0PWUuX3cpLkdHfHxudWxsIT10Lld8fG51bGwhPXQuRSlyPTEsYT00LG49ZGUodC5HRyxlLl9hW1R0XSxYKHBlKCksMSw0KS55ZWFyKSxzPWRlKHQuVywxKSwoKGk9ZGUodC5FLDEpKTwxfHxpPjcpJiYodT0hMCk7ZWxzZXtyPWUuX2xvY2FsZS5fd2Vlay5kb3csYT1lLl9sb2NhbGUuX3dlZWsuZG95O3ZhciBsPVgocGUoKSxyLGEpO249ZGUodC5nZyxlLl9hW1R0XSxsLnllYXIpLHM9ZGUodC53LGwud2VlayksbnVsbCE9dC5kPygoaT10LmQpPDB8fGk+NikmJih1PSEwKTpudWxsIT10LmU/KGk9dC5lK3IsKHQuZTwwfHx0LmU+NikmJih1PSEwKSk6aT1yfXM8MXx8cz5LKG4scixhKT9kKGUpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPXU/ZChlKS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihvPVEobixzLGkscixhKSxlLl9hW1R0XT1vLnllYXIsZS5fZGF5T2ZZZWFyPW8uZGF5T2ZZZWFyKX0odCksbnVsbCE9dC5fZGF5T2ZZZWFyJiYoYT1kZSh0Ll9hW1R0XSxpW1R0XSksKHQuX2RheU9mWWVhcj5WKGEpfHwwPT09dC5fZGF5T2ZZZWFyKSYmKGQodCkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxzPUooYSwwLHQuX2RheU9mWWVhciksdC5fYVt4dF09cy5nZXRVVENNb250aCgpLHQuX2FbYnRdPXMuZ2V0VVRDRGF0ZSgpKSxuPTA7bjwzJiZudWxsPT10Ll9hW25dOysrbil0Ll9hW25dPW9bbl09aVtuXTtmb3IoO248NztuKyspdC5fYVtuXT1vW25dPW51bGw9PXQuX2Fbbl0/Mj09PW4/MTowOnQuX2Fbbl07MjQ9PT10Ll9hW1B0XSYmMD09PXQuX2FbV3RdJiYwPT09dC5fYVtIdF0mJjA9PT10Ll9hW1J0XSYmKHQuX25leHREYXk9ITAsdC5fYVtQdF09MCksdC5fZD0odC5fdXNlVVRDP0o6ZnVuY3Rpb24oZSx0LG4scyxpLHIsYSl7dmFyIG89bmV3IERhdGUoZSx0LG4scyxpLHIsYSk7cmV0dXJuIGU8MTAwJiZlPj0wJiZpc0Zpbml0ZShvLmdldEZ1bGxZZWFyKCkpJiZvLnNldEZ1bGxZZWFyKGUpLG99KS5hcHBseShudWxsLG8pLHI9dC5fdXNlVVRDP3QuX2QuZ2V0VVRDRGF5KCk6dC5fZC5nZXREYXkoKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hW1B0XT0yNCksdC5fdyYmdm9pZCAwIT09dC5fdy5kJiZ0Ll93LmQhPT1yJiYoZCh0KS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiBjZShlKXt2YXIgdCxuLHMsaSxyLGEsbz1lLl9pLHU9ZW4uZXhlYyhvKXx8dG4uZXhlYyhvKTtpZih1KXtmb3IoZChlKS5pc289ITAsdD0wLG49c24ubGVuZ3RoO3Q8bjt0KyspaWYoc25bdF1bMV0uZXhlYyh1WzFdKSl7aT1zblt0XVswXSxzPSExIT09c25bdF1bMl07YnJlYWt9aWYobnVsbD09aSlyZXR1cm4gdm9pZChlLl9pc1ZhbGlkPSExKTtpZih1WzNdKXtmb3IodD0wLG49cm4ubGVuZ3RoO3Q8bjt0KyspaWYocm5bdF1bMV0uZXhlYyh1WzNdKSl7cj0odVsyXXx8XCIgXCIpK3JuW3RdWzBdO2JyZWFrfWlmKG51bGw9PXIpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSl9aWYoIXMmJm51bGwhPXIpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSk7aWYodVs0XSl7aWYoIW5uLmV4ZWModVs0XSkpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSk7YT1cIlpcIn1lLl9mPWkrKHJ8fFwiXCIpKyhhfHxcIlwiKSxfZShlKX1lbHNlIGUuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gZmUoZSx0LG4scyxpLHIpe3ZhciBhPVtmdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLDEwKTt7aWYodDw9NDkpcmV0dXJuIDJlMyt0O2lmKHQ8PTk5OSlyZXR1cm4gMTkwMCt0fXJldHVybiB0fShlKSxWdC5pbmRleE9mKHQpLHBhcnNlSW50KG4sMTApLHBhcnNlSW50KHMsMTApLHBhcnNlSW50KGksMTApXTtyZXR1cm4gciYmYS5wdXNoKHBhcnNlSW50KHIsMTApKSxhfWZ1bmN0aW9uIG1lKGUpe3ZhciB0PW9uLmV4ZWMoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoW14pXSpcXCl8W1xcblxcdF0vZyxcIiBcIikucmVwbGFjZSgvKFxcc1xccyspL2csXCIgXCIpLnRyaW0oKX0oZS5faSkpO2lmKHQpe3ZhciBuPWZlKHRbNF0sdFszXSx0WzJdLHRbNV0sdFs2XSx0WzddKTtpZighZnVuY3Rpb24oZSx0LG4pe2lmKGUmJmp0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZSh0WzBdLHRbMV0sdFsyXSkuZ2V0RGF5KCkpcmV0dXJuIGQobikud2Vla2RheU1pc21hdGNoPSEwLG4uX2lzVmFsaWQ9ITEsITE7cmV0dXJuITB9KHRbMV0sbixlKSlyZXR1cm47ZS5fYT1uLGUuX3R6bT1mdW5jdGlvbihlLHQsbil7aWYoZSlyZXR1cm4gdW5bZV07aWYodClyZXR1cm4gMDt2YXIgcz1wYXJzZUludChuLDEwKSxpPXMlMTAwO3JldHVybihzLWkpLzEwMCo2MCtpfSh0WzhdLHRbOV0sdFsxMF0pLGUuX2Q9Si5hcHBseShudWxsLGUuX2EpLGUuX2Quc2V0VVRDTWludXRlcyhlLl9kLmdldFVUQ01pbnV0ZXMoKS1lLl90em0pLGQoZSkucmZjMjgyMj0hMH1lbHNlIGUuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gX2UodCl7aWYodC5fZiE9PWUuSVNPXzg2MDEpaWYodC5fZiE9PWUuUkZDXzI4MjIpe3QuX2E9W10sZCh0KS5lbXB0eT0hMDt2YXIgbixzLGkscixhLG89XCJcIit0Ll9pLHU9by5sZW5ndGgsbD0wO2ZvcihpPVIodC5fZix0Ll9sb2NhbGUpLm1hdGNoKHJ0KXx8W10sbj0wO248aS5sZW5ndGg7bisrKXI9aVtuXSwocz0oby5tYXRjaChGKHIsdCkpfHxbXSlbMF0pJiYoKGE9by5zdWJzdHIoMCxvLmluZGV4T2YocykpKS5sZW5ndGg+MCYmZCh0KS51bnVzZWRJbnB1dC5wdXNoKGEpLG89by5zbGljZShvLmluZGV4T2Yocykrcy5sZW5ndGgpLGwrPXMubGVuZ3RoKSx1dFtyXT8ocz9kKHQpLmVtcHR5PSExOmQodCkudW51c2VkVG9rZW5zLnB1c2gociksRyhyLHMsdCkpOnQuX3N0cmljdCYmIXMmJmQodCkudW51c2VkVG9rZW5zLnB1c2gocik7ZCh0KS5jaGFyc0xlZnRPdmVyPXUtbCxvLmxlbmd0aD4wJiZkKHQpLnVudXNlZElucHV0LnB1c2gobyksdC5fYVtQdF08PTEyJiYhMD09PWQodCkuYmlnSG91ciYmdC5fYVtQdF0+MCYmKGQodCkuYmlnSG91cj12b2lkIDApLGQodCkucGFyc2VkRGF0ZVBhcnRzPXQuX2Euc2xpY2UoMCksZCh0KS5tZXJpZGllbT10Ll9tZXJpZGllbSx0Ll9hW1B0XT1mdW5jdGlvbihlLHQsbil7dmFyIHM7aWYobnVsbD09bilyZXR1cm4gdDtyZXR1cm4gbnVsbCE9ZS5tZXJpZGllbUhvdXI/ZS5tZXJpZGllbUhvdXIodCxuKTpudWxsIT1lLmlzUE0/KChzPWUuaXNQTShuKSkmJnQ8MTImJih0Kz0xMiksc3x8MTIhPT10fHwodD0wKSx0KTp0fSh0Ll9sb2NhbGUsdC5fYVtQdF0sdC5fbWVyaWRpZW0pLGhlKHQpLGxlKHQpfWVsc2UgbWUodCk7ZWxzZSBjZSh0KX1mdW5jdGlvbiB5ZShvKXt2YXIgbD1vLl9pLHk9by5fZjtyZXR1cm4gby5fbG9jYWxlPW8uX2xvY2FsZXx8dWUoby5fbCksbnVsbD09PWx8fHZvaWQgMD09PXkmJlwiXCI9PT1sP2Moe251bGxJbnB1dDohMH0pOihcInN0cmluZ1wiPT10eXBlb2YgbCYmKG8uX2k9bD1vLl9sb2NhbGUucHJlcGFyc2UobCkpLF8obCk/bmV3IG0obGUobCkpOihyKGwpP28uX2Q9bDp0KHkpP2Z1bmN0aW9uKGUpe3ZhciB0LG4scyxpLHI7aWYoMD09PWUuX2YubGVuZ3RoKXJldHVybiBkKGUpLmludmFsaWRGb3JtYXQ9ITAsdm9pZChlLl9kPW5ldyBEYXRlKE5hTikpO2ZvcihpPTA7aTxlLl9mLmxlbmd0aDtpKyspcj0wLHQ9Zih7fSxlKSxudWxsIT1lLl91c2VVVEMmJih0Ll91c2VVVEM9ZS5fdXNlVVRDKSx0Ll9mPWUuX2ZbaV0sX2UodCksaCh0KSYmKHIrPWQodCkuY2hhcnNMZWZ0T3ZlcixyKz0xMCpkKHQpLnVudXNlZFRva2Vucy5sZW5ndGgsZCh0KS5zY29yZT1yLChudWxsPT1zfHxyPHMpJiYocz1yLG49dCkpO3UoZSxufHx0KX0obyk6eT9fZShvKTpmdW5jdGlvbihvKXt2YXIgdT1vLl9pO3ModSk/by5fZD1uZXcgRGF0ZShlLm5vdygpKTpyKHUpP28uX2Q9bmV3IERhdGUodS52YWx1ZU9mKCkpOlwic3RyaW5nXCI9PXR5cGVvZiB1P2Z1bmN0aW9uKHQpe3ZhciBuPWFuLmV4ZWModC5faSk7bnVsbD09PW4/KGNlKHQpLCExPT09dC5faXNWYWxpZCYmKGRlbGV0ZSB0Ll9pc1ZhbGlkLG1lKHQpLCExPT09dC5faXNWYWxpZCYmKGRlbGV0ZSB0Ll9pc1ZhbGlkLGUuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sodCkpKSk6dC5fZD1uZXcgRGF0ZSgrblsxXSl9KG8pOnQodSk/KG8uX2E9YSh1LnNsaWNlKDApLGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUludChlLDEwKX0pLGhlKG8pKTpuKHUpP2Z1bmN0aW9uKGUpe2lmKCFlLl9kKXt2YXIgdD1UKGUuX2kpO2UuX2E9YShbdC55ZWFyLHQubW9udGgsdC5kYXl8fHQuZGF0ZSx0LmhvdXIsdC5taW51dGUsdC5zZWNvbmQsdC5taWxsaXNlY29uZF0sZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnBhcnNlSW50KGUsMTApfSksaGUoZSl9fShvKTppKHUpP28uX2Q9bmV3IERhdGUodSk6ZS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhvKX0obyksaChvKXx8KG8uX2Q9bnVsbCksbykpfWZ1bmN0aW9uIGdlKGUscyxpLHIsYSl7dmFyIG89e307cmV0dXJuITAhPT1pJiYhMSE9PWl8fChyPWksaT12b2lkIDApLChuKGUpJiZmdW5jdGlvbihlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmxlbmd0aDt2YXIgdDtmb3IodCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITE7cmV0dXJuITB9KGUpfHx0KGUpJiYwPT09ZS5sZW5ndGgpJiYoZT12b2lkIDApLG8uX2lzQU1vbWVudE9iamVjdD0hMCxvLl91c2VVVEM9by5faXNVVEM9YSxvLl9sPWksby5faT1lLG8uX2Y9cyxvLl9zdHJpY3Q9cixmdW5jdGlvbihlKXt2YXIgdD1uZXcgbShsZSh5ZShlKSkpO3JldHVybiB0Ll9uZXh0RGF5JiYodC5hZGQoMSxcImRcIiksdC5fbmV4dERheT12b2lkIDApLHR9KG8pfWZ1bmN0aW9uIHBlKGUsdCxuLHMpe3JldHVybiBnZShlLHQsbixzLCExKX1mdW5jdGlvbiB3ZShlLG4pe3ZhciBzLGk7aWYoMT09PW4ubGVuZ3RoJiZ0KG5bMF0pJiYobj1uWzBdKSwhbi5sZW5ndGgpcmV0dXJuIHBlKCk7Zm9yKHM9blswXSxpPTE7aTxuLmxlbmd0aDsrK2kpbltpXS5pc1ZhbGlkKCkmJiFuW2ldW2VdKHMpfHwocz1uW2ldKTtyZXR1cm4gc31mdW5jdGlvbiB2ZShlKXt2YXIgdD1UKGUpLG49dC55ZWFyfHwwLHM9dC5xdWFydGVyfHwwLGk9dC5tb250aHx8MCxyPXQud2Vla3x8MCxhPXQuZGF5fHwwLG89dC5ob3VyfHwwLHU9dC5taW51dGV8fDAsbD10LnNlY29uZHx8MCxkPXQubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZigtMT09PVV0LmNhbGwoaG4sdCl8fG51bGwhPWVbdF0mJmlzTmFOKGVbdF0pKXJldHVybiExO2Zvcih2YXIgbj0hMSxzPTA7czxobi5sZW5ndGg7KytzKWlmKGVbaG5bc11dKXtpZihuKXJldHVybiExO3BhcnNlRmxvYXQoZVtobltzXV0pIT09ZyhlW2huW3NdXSkmJihuPSEwKX1yZXR1cm4hMH0odCksdGhpcy5fbWlsbGlzZWNvbmRzPStkKzFlMypsKzZlNCp1KzFlMypvKjYwKjYwLHRoaXMuX2RheXM9K2ErNypyLHRoaXMuX21vbnRocz0raSszKnMrMTIqbix0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT11ZSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdmV9ZnVuY3Rpb24gU2UoZSl7cmV0dXJuIGU8MD8tMSpNYXRoLnJvdW5kKC0xKmUpOk1hdGgucm91bmQoZSl9ZnVuY3Rpb24gRGUoZSx0KXtQKGUsMCwwLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51dGNPZmZzZXQoKSxuPVwiK1wiO3JldHVybiBlPDAmJihlPS1lLG49XCItXCIpLG4rYih+fihlLzYwKSwyKSt0K2Iofn5lJTYwLDIpfSl9ZnVuY3Rpb24ga2UoZSx0KXt2YXIgbj0odHx8XCJcIikubWF0Y2goZSk7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7dmFyIHM9KChuW24ubGVuZ3RoLTFdfHxbXSkrXCJcIikubWF0Y2goY24pfHxbXCItXCIsMCwwXSxpPTYwKnNbMV0rZyhzWzJdKTtyZXR1cm4gMD09PWk/MDpcIitcIj09PXNbMF0/aTotaX1mdW5jdGlvbiBZZSh0LG4pe3ZhciBzLGk7cmV0dXJuIG4uX2lzVVRDPyhzPW4uY2xvbmUoKSxpPShfKHQpfHxyKHQpP3QudmFsdWVPZigpOnBlKHQpLnZhbHVlT2YoKSktcy52YWx1ZU9mKCkscy5fZC5zZXRUaW1lKHMuX2QudmFsdWVPZigpK2kpLGUudXBkYXRlT2Zmc2V0KHMsITEpLHMpOnBlKHQpLmxvY2FsKCl9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKGUuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXQpfWZ1bmN0aW9uIHhlKGUsdCl7dmFyIG4scyxyLGE9ZSx1PW51bGw7cmV0dXJuIE1lKGUpP2E9e21zOmUuX21pbGxpc2Vjb25kcyxkOmUuX2RheXMsTTplLl9tb250aHN9OmkoZSk/KGE9e30sdD9hW3RdPWU6YS5taWxsaXNlY29uZHM9ZSk6KHU9Zm4uZXhlYyhlKSk/KG49XCItXCI9PT11WzFdPy0xOjEsYT17eTowLGQ6Zyh1W2J0XSkqbixoOmcodVtQdF0pKm4sbTpnKHVbV3RdKSpuLHM6Zyh1W0h0XSkqbixtczpnKFNlKDFlMyp1W1J0XSkpKm59KToodT1tbi5leGVjKGUpKT8obj1cIi1cIj09PXVbMV0/LTE6KHVbMV0sMSksYT17eTpiZSh1WzJdLG4pLE06YmUodVszXSxuKSx3OmJlKHVbNF0sbiksZDpiZSh1WzVdLG4pLGg6YmUodVs2XSxuKSxtOmJlKHVbN10sbiksczpiZSh1WzhdLG4pfSk6bnVsbD09YT9hPXt9Olwib2JqZWN0XCI9PXR5cGVvZiBhJiYoXCJmcm9tXCJpbiBhfHxcInRvXCJpbiBhKSYmKHI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZighZS5pc1ZhbGlkKCl8fCF0LmlzVmFsaWQoKSlyZXR1cm57bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9O3Q9WWUodCxlKSxlLmlzQmVmb3JlKHQpP249UGUoZSx0KTooKG49UGUodCxlKSkubWlsbGlzZWNvbmRzPS1uLm1pbGxpc2Vjb25kcyxuLm1vbnRocz0tbi5tb250aHMpO3JldHVybiBufShwZShhLmZyb20pLHBlKGEudG8pKSwoYT17fSkubXM9ci5taWxsaXNlY29uZHMsYS5NPXIubW9udGhzKSxzPW5ldyB2ZShhKSxNZShlKSYmbyhlLFwiX2xvY2FsZVwiKSYmKHMuX2xvY2FsZT1lLl9sb2NhbGUpLHN9ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbj1lJiZwYXJzZUZsb2F0KGUucmVwbGFjZShcIixcIixcIi5cIikpO3JldHVybihpc05hTihuKT8wOm4pKnR9ZnVuY3Rpb24gUGUoZSx0KXt2YXIgbj17bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9O3JldHVybiBuLm1vbnRocz10Lm1vbnRoKCktZS5tb250aCgpKzEyKih0LnllYXIoKS1lLnllYXIoKSksZS5jbG9uZSgpLmFkZChuLm1vbnRocyxcIk1cIikuaXNBZnRlcih0KSYmLS1uLm1vbnRocyxuLm1pbGxpc2Vjb25kcz0rdC0rZS5jbG9uZSgpLmFkZChuLm1vbnRocyxcIk1cIiksbn1mdW5jdGlvbiBXZShlLHQpe3JldHVybiBmdW5jdGlvbihuLHMpe3ZhciBpLHI7cmV0dXJuIG51bGw9PT1zfHxpc05hTigrcyl8fChNKHQsXCJtb21lbnQoKS5cIit0K1wiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLlwiK3QrXCIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uXCIpLHI9bixuPXMscz1yKSxuPVwic3RyaW5nXCI9PXR5cGVvZiBuPytuOm4saT14ZShuLHMpLEhlKHRoaXMsaSxlKSx0aGlzfX1mdW5jdGlvbiBIZSh0LG4scyxpKXt2YXIgcj1uLl9taWxsaXNlY29uZHMsYT1TZShuLl9kYXlzKSxvPVNlKG4uX21vbnRocyk7dC5pc1ZhbGlkKCkmJihpPW51bGw9PWl8fGksbyYmeih0LEEodCxcIk1vbnRoXCIpK28qcyksYSYmaih0LFwiRGF0ZVwiLEEodCxcIkRhdGVcIikrYSpzKSxyJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrcipzKSxpJiZlLnVwZGF0ZU9mZnNldCh0LGF8fG8pKX1mdW5jdGlvbiBSZShlLHQpe3ZhciBuLHM9MTIqKHQueWVhcigpLWUueWVhcigpKSsodC5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHMsXCJtb250aHNcIik7cmV0dXJuIG49dC1pPDA/KHQtaSkvKGktZS5jbG9uZSgpLmFkZChzLTEsXCJtb250aHNcIikpOih0LWkpLyhlLmNsb25lKCkuYWRkKHMrMSxcIm1vbnRoc1wiKS1pKSwtKHMrbil8fDB9ZnVuY3Rpb24gQ2UoZSl7dmFyIHQ7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0odD11ZShlKSkmJih0aGlzLl9sb2NhbGU9dCksdGhpcyl9ZnVuY3Rpb24gRmUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlfWZ1bmN0aW9uIFVlKGUsdCl7UCgwLFtlLGUubGVuZ3RoXSwwLHQpfWZ1bmN0aW9uIExlKGUsdCxuLHMsaSl7dmFyIHI7cmV0dXJuIG51bGw9PWU/WCh0aGlzLHMsaSkueWVhcjoocj1LKGUscyxpKSx0PnImJih0PXIpLGZ1bmN0aW9uKGUsdCxuLHMsaSl7dmFyIHI9UShlLHQsbixzLGkpLGE9SihyLnllYXIsMCxyLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihhLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoYS5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoYS5nZXRVVENEYXRlKCkpLHRoaXN9LmNhbGwodGhpcyxlLHQsbixzLGkpKX1mdW5jdGlvbiBOZShlLHQpe3RbUnRdPWcoMWUzKihcIjAuXCIrZSkpfWZ1bmN0aW9uIEdlKGUpe3JldHVybiBlfWZ1bmN0aW9uIFZlKGUsdCxuLHMpe3ZhciBpPXVlKCkscj1sKCkuc2V0KHMsdCk7cmV0dXJuIGlbbl0ocixlKX1mdW5jdGlvbiBFZShlLHQsbil7aWYoaShlKSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHxcIlwiLG51bGwhPXQpcmV0dXJuIFZlKGUsdCxuLFwibW9udGhcIik7dmFyIHMscj1bXTtmb3Iocz0wO3M8MTI7cysrKXJbc109VmUoZSxzLG4sXCJtb250aFwiKTtyZXR1cm4gcn1mdW5jdGlvbiBJZShlLHQsbixzKXtcImJvb2xlYW5cIj09dHlwZW9mIGU/KGkodCkmJihuPXQsdD12b2lkIDApLHQ9dHx8XCJcIik6KG49dD1lLGU9ITEsaSh0KSYmKG49dCx0PXZvaWQgMCksdD10fHxcIlwiKTt2YXIgcj11ZSgpLGE9ZT9yLl93ZWVrLmRvdzowO2lmKG51bGwhPW4pcmV0dXJuIFZlKHQsKG4rYSklNyxzLFwiZGF5XCIpO3ZhciBvLHU9W107Zm9yKG89MDtvPDc7bysrKXVbb109VmUodCwobythKSU3LHMsXCJkYXlcIik7cmV0dXJuIHV9ZnVuY3Rpb24gQWUoZSx0LG4scyl7dmFyIGk9eGUodCxuKTtyZXR1cm4gZS5fbWlsbGlzZWNvbmRzKz1zKmkuX21pbGxpc2Vjb25kcyxlLl9kYXlzKz1zKmkuX2RheXMsZS5fbW9udGhzKz1zKmkuX21vbnRocyxlLl9idWJibGUoKX1mdW5jdGlvbiBqZShlKXtyZXR1cm4gZTwwP01hdGguZmxvb3IoZSk6TWF0aC5jZWlsKGUpfWZ1bmN0aW9uIFplKGUpe3JldHVybiA0ODAwKmUvMTQ2MDk3fWZ1bmN0aW9uIHplKGUpe3JldHVybiAxNDYwOTcqZS80ODAwfWZ1bmN0aW9uICRlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKGUpfX1mdW5jdGlvbiBxZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVtlXTpOYU59fWZ1bmN0aW9uIEplKGUpe3JldHVybihlPjApLShlPDApfHwrZX1mdW5jdGlvbiBCZSgpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgZSx0LG49QW4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscz1Bbih0aGlzLl9kYXlzKSxpPUFuKHRoaXMuX21vbnRocyk7dD15KChlPXkobi82MCkpLzYwKSxuJT02MCxlJT02MDt2YXIgcj15KGkvMTIpLGE9aSU9MTIsbz1zLHU9dCxsPWUsZD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLyxcIlwiKTpcIlwiLGg9dGhpcy5hc1NlY29uZHMoKTtpZighaClyZXR1cm5cIlAwRFwiO3ZhciBjPWg8MD9cIi1cIjpcIlwiLGY9SmUodGhpcy5fbW9udGhzKSE9PUplKGgpP1wiLVwiOlwiXCIsbT1KZSh0aGlzLl9kYXlzKSE9PUplKGgpP1wiLVwiOlwiXCIsXz1KZSh0aGlzLl9taWxsaXNlY29uZHMpIT09SmUoaCk/XCItXCI6XCJcIjtyZXR1cm4gYytcIlBcIisocj9mK3IrXCJZXCI6XCJcIikrKGE/ZithK1wiTVwiOlwiXCIpKyhvP20rbytcIkRcIjpcIlwiKSsodXx8bHx8ZD9cIlRcIjpcIlwiKSsodT9fK3UrXCJIXCI6XCJcIikrKGw/XytsK1wiTVwiOlwiXCIpKyhkP18rZCtcIlNcIjpcIlwiKX12YXIgUWUsWGU7WGU9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdCh0aGlzKSxuPXQubGVuZ3RoPj4+MCxzPTA7czxuO3MrKylpZihzIGluIHQmJmUuY2FsbCh0aGlzLHRbc10scyx0KSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIEtlPWUubW9tZW50UHJvcGVydGllcz1bXSxldD0hMSx0dD17fTtlLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxlLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsO3ZhciBudDtudD1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIGUpbyhlLHQpJiZuLnB1c2godCk7cmV0dXJuIG59O3ZhciBzdD17fSxpdD17fSxydD0vKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLGF0PS8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csb3Q9e30sdXQ9e30sbHQ9L1xcZC8sZHQ9L1xcZFxcZC8saHQ9L1xcZHszfS8sY3Q9L1xcZHs0fS8sZnQ9L1srLV0/XFxkezZ9LyxtdD0vXFxkXFxkPy8sX3Q9L1xcZFxcZFxcZFxcZD8vLHl0PS9cXGRcXGRcXGRcXGRcXGRcXGQ/LyxndD0vXFxkezEsM30vLHB0PS9cXGR7MSw0fS8sd3Q9L1srLV0/XFxkezEsNn0vLHZ0PS9cXGQrLyxNdD0vWystXT9cXGQrLyxTdD0vWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksRHQ9L1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksa3Q9L1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksWXQ9e30sT3Q9e30sVHQ9MCx4dD0xLGJ0PTIsUHQ9MyxXdD00LEh0PTUsUnQ9NixDdD03LEZ0PTg7UChcIllcIiwwLDAsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnllYXIoKTtyZXR1cm4gZTw9OTk5OT9cIlwiK2U6XCIrXCIrZX0pLFAoMCxbXCJZWVwiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksUCgwLFtcIllZWVlcIiw0XSwwLFwieWVhclwiKSxQKDAsW1wiWVlZWVlcIiw1XSwwLFwieWVhclwiKSxQKDAsW1wiWVlZWVlZXCIsNiwhMF0sMCxcInllYXJcIiksWShcInllYXJcIixcInlcIikseChcInllYXJcIiwxKSxDKFwiWVwiLE10KSxDKFwiWVlcIixtdCxkdCksQyhcIllZWVlcIixwdCxjdCksQyhcIllZWVlZXCIsd3QsZnQpLEMoXCJZWVlZWVlcIix3dCxmdCksTChbXCJZWVlZWVwiLFwiWVlZWVlZXCJdLFR0KSxMKFwiWVlZWVwiLGZ1bmN0aW9uKHQsbil7bltUdF09Mj09PXQubGVuZ3RoP2UucGFyc2VUd29EaWdpdFllYXIodCk6Zyh0KX0pLEwoXCJZWVwiLGZ1bmN0aW9uKHQsbil7bltUdF09ZS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pLEwoXCJZXCIsZnVuY3Rpb24oZSx0KXt0W1R0XT1wYXJzZUludChlLDEwKX0pLGUucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSkrKGcoZSk+Njg/MTkwMDoyZTMpfTt2YXIgVXQsTHQ9SShcIkZ1bGxZZWFyXCIsITApO1V0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDx0aGlzLmxlbmd0aDsrK3QpaWYodGhpc1t0XT09PWUpcmV0dXJuIHQ7cmV0dXJuLTF9LFAoXCJNXCIsW1wiTU1cIiwyXSxcIk1vXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxQKFwiTU1NXCIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLGUpfSksUChcIk1NTU1cIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLGUpfSksWShcIm1vbnRoXCIsXCJNXCIpLHgoXCJtb250aFwiLDgpLEMoXCJNXCIsbXQpLEMoXCJNTVwiLG10LGR0KSxDKFwiTU1NXCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tb250aHNTaG9ydFJlZ2V4KGUpfSksQyhcIk1NTU1cIixmdW5jdGlvbihlLHQpe3JldHVybiB0Lm1vbnRoc1JlZ2V4KGUpfSksTChbXCJNXCIsXCJNTVwiXSxmdW5jdGlvbihlLHQpe3RbeHRdPWcoZSktMX0pLEwoW1wiTU1NXCIsXCJNTU1NXCJdLGZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpPW4uX2xvY2FsZS5tb250aHNQYXJzZShlLHMsbi5fc3RyaWN0KTtudWxsIT1pP3RbeHRdPWk6ZChuKS5pbnZhbGlkTW9udGg9ZX0pO3ZhciBOdD0vRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sR3Q9XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLFZ0PVwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksRXQ9a3QsSXQ9a3Q7UChcIndcIixbXCJ3d1wiLDJdLFwid29cIixcIndlZWtcIiksUChcIldcIixbXCJXV1wiLDJdLFwiV29cIixcImlzb1dlZWtcIiksWShcIndlZWtcIixcIndcIiksWShcImlzb1dlZWtcIixcIldcIikseChcIndlZWtcIiw1KSx4KFwiaXNvV2Vla1wiLDUpLEMoXCJ3XCIsbXQpLEMoXCJ3d1wiLG10LGR0KSxDKFwiV1wiLG10KSxDKFwiV1dcIixtdCxkdCksTihbXCJ3XCIsXCJ3d1wiLFwiV1wiLFwiV1dcIl0sZnVuY3Rpb24oZSx0LG4scyl7dFtzLnN1YnN0cigwLDEpXT1nKGUpfSk7UChcImRcIiwwLFwiZG9cIixcImRheVwiKSxQKFwiZGRcIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsZSl9KSxQKFwiZGRkXCIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsZSl9KSxQKFwiZGRkZFwiLDAsMCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyxlKX0pLFAoXCJlXCIsMCwwLFwid2Vla2RheVwiKSxQKFwiRVwiLDAsMCxcImlzb1dlZWtkYXlcIiksWShcImRheVwiLFwiZFwiKSxZKFwid2Vla2RheVwiLFwiZVwiKSxZKFwiaXNvV2Vla2RheVwiLFwiRVwiKSx4KFwiZGF5XCIsMTEpLHgoXCJ3ZWVrZGF5XCIsMTEpLHgoXCJpc29XZWVrZGF5XCIsMTEpLEMoXCJkXCIsbXQpLEMoXCJlXCIsbXQpLEMoXCJFXCIsbXQpLEMoXCJkZFwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2Vla2RheXNNaW5SZWdleChlKX0pLEMoXCJkZGRcIixmdW5jdGlvbihlLHQpe3JldHVybiB0LndlZWtkYXlzU2hvcnRSZWdleChlKX0pLEMoXCJkZGRkXCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC53ZWVrZGF5c1JlZ2V4KGUpfSksTihbXCJkZFwiLFwiZGRkXCIsXCJkZGRkXCJdLGZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGUscyxuLl9zdHJpY3QpO251bGwhPWk/dC5kPWk6ZChuKS5pbnZhbGlkV2Vla2RheT1lfSksTihbXCJkXCIsXCJlXCIsXCJFXCJdLGZ1bmN0aW9uKGUsdCxuLHMpe3Rbc109ZyhlKX0pO3ZhciBBdD1cIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLGp0PVwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLFp0PVwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksenQ9a3QsJHQ9a3QscXQ9a3Q7UChcIkhcIixbXCJISFwiLDJdLDAsXCJob3VyXCIpLFAoXCJoXCIsW1wiaGhcIiwyXSwwLHRlKSxQKFwia1wiLFtcImtrXCIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSksUChcImhtbVwiLDAsMCxmdW5jdGlvbigpe3JldHVyblwiXCIrdGUuYXBwbHkodGhpcykrYih0aGlzLm1pbnV0ZXMoKSwyKX0pLFAoXCJobW1zc1wiLDAsMCxmdW5jdGlvbigpe3JldHVyblwiXCIrdGUuYXBwbHkodGhpcykrYih0aGlzLm1pbnV0ZXMoKSwyKStiKHRoaXMuc2Vjb25kcygpLDIpfSksUChcIkhtbVwiLDAsMCxmdW5jdGlvbigpe3JldHVyblwiXCIrdGhpcy5ob3VycygpK2IodGhpcy5taW51dGVzKCksMil9KSxQKFwiSG1tc3NcIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5cIlwiK3RoaXMuaG91cnMoKStiKHRoaXMubWludXRlcygpLDIpK2IodGhpcy5zZWNvbmRzKCksMil9KSxuZShcImFcIiwhMCksbmUoXCJBXCIsITEpLFkoXCJob3VyXCIsXCJoXCIpLHgoXCJob3VyXCIsMTMpLEMoXCJhXCIsc2UpLEMoXCJBXCIsc2UpLEMoXCJIXCIsbXQpLEMoXCJoXCIsbXQpLEMoXCJrXCIsbXQpLEMoXCJISFwiLG10LGR0KSxDKFwiaGhcIixtdCxkdCksQyhcImtrXCIsbXQsZHQpLEMoXCJobW1cIixfdCksQyhcImhtbXNzXCIseXQpLEMoXCJIbW1cIixfdCksQyhcIkhtbXNzXCIseXQpLEwoW1wiSFwiLFwiSEhcIl0sUHQpLEwoW1wia1wiLFwia2tcIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciBzPWcoZSk7dFtQdF09MjQ9PT1zPzA6c30pLEwoW1wiYVwiLFwiQVwiXSxmdW5jdGlvbihlLHQsbil7bi5faXNQbT1uLl9sb2NhbGUuaXNQTShlKSxuLl9tZXJpZGllbT1lfSksTChbXCJoXCIsXCJoaFwiXSxmdW5jdGlvbihlLHQsbil7dFtQdF09ZyhlKSxkKG4pLmJpZ0hvdXI9ITB9KSxMKFwiaG1tXCIsZnVuY3Rpb24oZSx0LG4pe3ZhciBzPWUubGVuZ3RoLTI7dFtQdF09ZyhlLnN1YnN0cigwLHMpKSx0W1d0XT1nKGUuc3Vic3RyKHMpKSxkKG4pLmJpZ0hvdXI9ITB9KSxMKFwiaG1tc3NcIixmdW5jdGlvbihlLHQsbil7dmFyIHM9ZS5sZW5ndGgtNCxpPWUubGVuZ3RoLTI7dFtQdF09ZyhlLnN1YnN0cigwLHMpKSx0W1d0XT1nKGUuc3Vic3RyKHMsMikpLHRbSHRdPWcoZS5zdWJzdHIoaSkpLGQobikuYmlnSG91cj0hMH0pLEwoXCJIbW1cIixmdW5jdGlvbihlLHQsbil7dmFyIHM9ZS5sZW5ndGgtMjt0W1B0XT1nKGUuc3Vic3RyKDAscykpLHRbV3RdPWcoZS5zdWJzdHIocykpfSksTChcIkhtbXNzXCIsZnVuY3Rpb24oZSx0LG4pe3ZhciBzPWUubGVuZ3RoLTQsaT1lLmxlbmd0aC0yO3RbUHRdPWcoZS5zdWJzdHIoMCxzKSksdFtXdF09ZyhlLnN1YnN0cihzLDIpKSx0W0h0XT1nKGUuc3Vic3RyKGkpKX0pO3ZhciBKdCxCdD1JKFwiSG91cnNcIiwhMCksUXQ9e2NhbGVuZGFyOntzYW1lRGF5OlwiW1RvZGF5IGF0XSBMVFwiLG5leHREYXk6XCJbVG9tb3Jyb3cgYXRdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthdF0gTFRcIixsYXN0RGF5OlwiW1llc3RlcmRheSBhdF0gTFRcIixsYXN0V2VlazpcIltMYXN0XSBkZGRkIFthdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzpcImg6bW06c3MgQVwiLExUOlwiaDptbSBBXCIsTDpcIk1NL0REL1lZWVlcIixMTDpcIk1NTU0gRCwgWVlZWVwiLExMTDpcIk1NTU0gRCwgWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQVwifSxpbnZhbGlkRGF0ZTpcIkludmFsaWQgZGF0ZVwiLG9yZGluYWw6XCIlZFwiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9LG1vbnRoczpHdCxtb250aHNTaG9ydDpWdCx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6QXQsd2Vla2RheXNNaW46WnQsd2Vla2RheXNTaG9ydDpqdCxtZXJpZGllbVBhcnNlOi9bYXBdXFwuP20/XFwuPy9pfSxYdD17fSxLdD17fSxlbj0vXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sdG49L15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxubj0vWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sc249W1tcIllZWVlZWS1NTS1ERFwiLC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxbXCJZWVlZLU1NLUREXCIsL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sW1wiR0dHRy1bV11XVy1FXCIsL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFtcIkdHR0ctW1ddV1dcIiwvXFxkezR9LVdcXGRcXGQvLCExXSxbXCJZWVlZLURERFwiLC9cXGR7NH0tXFxkezN9L10sW1wiWVlZWS1NTVwiLC9cXGR7NH0tXFxkXFxkLywhMV0sW1wiWVlZWVlZTU1ERFwiLC9bKy1dXFxkezEwfS9dLFtcIllZWVlNTUREXCIsL1xcZHs4fS9dLFtcIkdHR0dbV11XV0VcIiwvXFxkezR9V1xcZHszfS9dLFtcIkdHR0dbV11XV1wiLC9cXGR7NH1XXFxkezJ9LywhMV0sW1wiWVlZWURERFwiLC9cXGR7N30vXV0scm49W1tcIkhIOm1tOnNzLlNTU1NcIiwvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sW1wiSEg6bW06c3MsU1NTU1wiLC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sW1wiSEg6bW06c3NcIiwvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxbXCJISDptbVwiLC9cXGRcXGQ6XFxkXFxkL10sW1wiSEhtbXNzLlNTU1NcIiwvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFtcIkhIbW1zcyxTU1NTXCIsL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sW1wiSEhtbXNzXCIsL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFtcIkhIbW1cIiwvXFxkXFxkXFxkXFxkL10sW1wiSEhcIiwvXFxkXFxkL11dLGFuPS9eXFwvP0RhdGVcXCgoXFwtP1xcZCspL2ksb249L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyx1bj17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz12KFwidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLlwiLGZ1bmN0aW9uKGUpe2UuX2Q9bmV3IERhdGUoZS5faSsoZS5fdXNlVVRDP1wiIFVUQ1wiOlwiXCIpKX0pLGUuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LGUuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBsbj12KFwibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC9cIixmdW5jdGlvbigpe3ZhciBlPXBlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpP2U8dGhpcz90aGlzOmU6YygpfSksZG49dihcIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvXCIsZnVuY3Rpb24oKXt2YXIgZT1wZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT9lPnRoaXM/dGhpczplOmMoKX0pLGhuPVtcInllYXJcIixcInF1YXJ0ZXJcIixcIm1vbnRoXCIsXCJ3ZWVrXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiLFwic2Vjb25kXCIsXCJtaWxsaXNlY29uZFwiXTtEZShcIlpcIixcIjpcIiksRGUoXCJaWlwiLFwiXCIpLEMoXCJaXCIsRHQpLEMoXCJaWlwiLER0KSxMKFtcIlpcIixcIlpaXCJdLGZ1bmN0aW9uKGUsdCxuKXtuLl91c2VVVEM9ITAsbi5fdHptPWtlKER0LGUpfSk7dmFyIGNuPS8oW1xcK1xcLV18XFxkXFxkKS9naTtlLnVwZGF0ZU9mZnNldD1mdW5jdGlvbigpe307dmFyIGZuPS9eKFxcLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKVxcOihcXGQrKSg/OlxcOihcXGQrKShcXC5cXGQqKT8pPyQvLG1uPS9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87eGUuZm49dmUucHJvdG90eXBlLHhlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4geGUoTmFOKX07dmFyIF9uPVdlKDEsXCJhZGRcIikseW49V2UoLTEsXCJzdWJ0cmFjdFwiKTtlLmRlZmF1bHRGb3JtYXQ9XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGUuZGVmYXVsdEZvcm1hdFV0Yz1cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjt2YXIgZ249dihcIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuXCIsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoZSl9KTtQKDAsW1wiZ2dcIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxQKDAsW1wiR0dcIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxVZShcImdnZ2dcIixcIndlZWtZZWFyXCIpLFVlKFwiZ2dnZ2dcIixcIndlZWtZZWFyXCIpLFVlKFwiR0dHR1wiLFwiaXNvV2Vla1llYXJcIiksVWUoXCJHR0dHR1wiLFwiaXNvV2Vla1llYXJcIiksWShcIndlZWtZZWFyXCIsXCJnZ1wiKSxZKFwiaXNvV2Vla1llYXJcIixcIkdHXCIpLHgoXCJ3ZWVrWWVhclwiLDEpLHgoXCJpc29XZWVrWWVhclwiLDEpLEMoXCJHXCIsTXQpLEMoXCJnXCIsTXQpLEMoXCJHR1wiLG10LGR0KSxDKFwiZ2dcIixtdCxkdCksQyhcIkdHR0dcIixwdCxjdCksQyhcImdnZ2dcIixwdCxjdCksQyhcIkdHR0dHXCIsd3QsZnQpLEMoXCJnZ2dnZ1wiLHd0LGZ0KSxOKFtcImdnZ2dcIixcImdnZ2dnXCIsXCJHR0dHXCIsXCJHR0dHR1wiXSxmdW5jdGlvbihlLHQsbixzKXt0W3Muc3Vic3RyKDAsMildPWcoZSl9KSxOKFtcImdnXCIsXCJHR1wiXSxmdW5jdGlvbih0LG4scyxpKXtuW2ldPWUucGFyc2VUd29EaWdpdFllYXIodCl9KSxQKFwiUVwiLDAsXCJRb1wiLFwicXVhcnRlclwiKSxZKFwicXVhcnRlclwiLFwiUVwiKSx4KFwicXVhcnRlclwiLDcpLEMoXCJRXCIsbHQpLEwoXCJRXCIsZnVuY3Rpb24oZSx0KXt0W3h0XT0zKihnKGUpLTEpfSksUChcIkRcIixbXCJERFwiLDJdLFwiRG9cIixcImRhdGVcIiksWShcImRhdGVcIixcIkRcIikseChcImRhdGVcIiw5KSxDKFwiRFwiLG10KSxDKFwiRERcIixtdCxkdCksQyhcIkRvXCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90Ll9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHx0Ll9vcmRpbmFsUGFyc2U6dC5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSxMKFtcIkRcIixcIkREXCJdLGJ0KSxMKFwiRG9cIixmdW5jdGlvbihlLHQpe3RbYnRdPWcoZS5tYXRjaChtdClbMF0pfSk7dmFyIHBuPUkoXCJEYXRlXCIsITApO1AoXCJERERcIixbXCJEREREXCIsM10sXCJERERvXCIsXCJkYXlPZlllYXJcIiksWShcImRheU9mWWVhclwiLFwiREREXCIpLHgoXCJkYXlPZlllYXJcIiw0KSxDKFwiREREXCIsZ3QpLEMoXCJEREREXCIsaHQpLEwoW1wiREREXCIsXCJEREREXCJdLGZ1bmN0aW9uKGUsdCxuKXtuLl9kYXlPZlllYXI9ZyhlKX0pLFAoXCJtXCIsW1wibW1cIiwyXSwwLFwibWludXRlXCIpLFkoXCJtaW51dGVcIixcIm1cIikseChcIm1pbnV0ZVwiLDE0KSxDKFwibVwiLG10KSxDKFwibW1cIixtdCxkdCksTChbXCJtXCIsXCJtbVwiXSxXdCk7dmFyIHduPUkoXCJNaW51dGVzXCIsITEpO1AoXCJzXCIsW1wic3NcIiwyXSwwLFwic2Vjb25kXCIpLFkoXCJzZWNvbmRcIixcInNcIikseChcInNlY29uZFwiLDE1KSxDKFwic1wiLG10KSxDKFwic3NcIixtdCxkdCksTChbXCJzXCIsXCJzc1wiXSxIdCk7dmFyIHZuPUkoXCJTZWNvbmRzXCIsITEpO1AoXCJTXCIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxQKDAsW1wiU1NcIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLFAoMCxbXCJTU1NcIiwzXSwwLFwibWlsbGlzZWNvbmRcIiksUCgwLFtcIlNTU1NcIiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pLFAoMCxbXCJTU1NTU1wiLDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pLFAoMCxbXCJTU1NTU1NcIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSxQKDAsW1wiU1NTU1NTU1wiLDddLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLFAoMCxbXCJTU1NTU1NTU1wiLDhdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLFAoMCxbXCJTU1NTU1NTU1NcIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxZKFwibWlsbGlzZWNvbmRcIixcIm1zXCIpLHgoXCJtaWxsaXNlY29uZFwiLDE2KSxDKFwiU1wiLGd0LGx0KSxDKFwiU1NcIixndCxkdCksQyhcIlNTU1wiLGd0LGh0KTt2YXIgTW47Zm9yKE1uPVwiU1NTU1wiO01uLmxlbmd0aDw9OTtNbis9XCJTXCIpQyhNbix2dCk7Zm9yKE1uPVwiU1wiO01uLmxlbmd0aDw9OTtNbis9XCJTXCIpTChNbixOZSk7dmFyIFNuPUkoXCJNaWxsaXNlY29uZHNcIiwhMSk7UChcInpcIiwwLDAsXCJ6b25lQWJiclwiKSxQKFwienpcIiwwLDAsXCJ6b25lTmFtZVwiKTt2YXIgRG49bS5wcm90b3R5cGU7RG4uYWRkPV9uLERuLmNhbGVuZGFyPWZ1bmN0aW9uKHQsbil7dmFyIHM9dHx8cGUoKSxpPVllKHMsdGhpcykuc3RhcnRPZihcImRheVwiKSxyPWUuY2FsZW5kYXJGb3JtYXQodGhpcyxpKXx8XCJzYW1lRWxzZVwiLGE9biYmKFMobltyXSk/bltyXS5jYWxsKHRoaXMscyk6bltyXSk7cmV0dXJuIHRoaXMuZm9ybWF0KGF8fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKHIsdGhpcyxwZShzKSkpfSxEbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzKX0sRG4uZGlmZj1mdW5jdGlvbihlLHQsbil7dmFyIHMsaSxyO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEocz1ZZShlLHRoaXMpKS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtzd2l0Y2goaT02ZTQqKHMudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksdD1PKHQpKXtjYXNlXCJ5ZWFyXCI6cj1SZSh0aGlzLHMpLzEyO2JyZWFrO2Nhc2VcIm1vbnRoXCI6cj1SZSh0aGlzLHMpO2JyZWFrO2Nhc2VcInF1YXJ0ZXJcIjpyPVJlKHRoaXMscykvMzticmVhaztjYXNlXCJzZWNvbmRcIjpyPSh0aGlzLXMpLzFlMzticmVhaztjYXNlXCJtaW51dGVcIjpyPSh0aGlzLXMpLzZlNDticmVhaztjYXNlXCJob3VyXCI6cj0odGhpcy1zKS8zNmU1O2JyZWFrO2Nhc2VcImRheVwiOnI9KHRoaXMtcy1pKS84NjRlNTticmVhaztjYXNlXCJ3ZWVrXCI6cj0odGhpcy1zLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OnI9dGhpcy1zfXJldHVybiBuP3I6eShyKX0sRG4uZW5kT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PShlPU8oZSkpfHxcIm1pbGxpc2Vjb25kXCI9PT1lP3RoaXM6KFwiZGF0ZVwiPT09ZSYmKGU9XCJkYXlcIiksdGhpcy5zdGFydE9mKGUpLmFkZCgxLFwiaXNvV2Vla1wiPT09ZT9cIndlZWtcIjplKS5zdWJ0cmFjdCgxLFwibXNcIikpfSxEbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2UuZGVmYXVsdEZvcm1hdFV0YzplLmRlZmF1bHRGb3JtYXQpO3ZhciBuPUgodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChuKX0sRG4uZnJvbT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8oZSkmJmUuaXNWYWxpZCgpfHxwZShlKS5pc1ZhbGlkKCkpP3hlKHt0bzp0aGlzLGZyb206ZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghdCk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sRG4uZnJvbU5vdz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mcm9tKHBlKCksZSl9LERuLnRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoXyhlKSYmZS5pc1ZhbGlkKCl8fHBlKGUpLmlzVmFsaWQoKSk/eGUoe2Zyb206dGhpcyx0bzplfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF0KTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxEbi50b05vdz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50byhwZSgpLGUpfSxEbi5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TyhlKSxTKHRoaXNbZV0pP3RoaXNbZV0oKTp0aGlzfSxEbi5pbnZhbGlkQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZCh0aGlzKS5vdmVyZmxvd30sRG4uaXNBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPV8oZSk/ZTpwZShlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW4uaXNWYWxpZCgpKSYmKFwibWlsbGlzZWNvbmRcIj09PSh0PU8ocyh0KT9cIm1pbGxpc2Vjb25kXCI6dCkpP3RoaXMudmFsdWVPZigpPm4udmFsdWVPZigpOm4udmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKHQpLnZhbHVlT2YoKSl9LERuLmlzQmVmb3JlPWZ1bmN0aW9uKGUsdCl7dmFyIG49XyhlKT9lOnBlKGUpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoXCJtaWxsaXNlY29uZFwiPT09KHQ9TyhzKHQpP1wibWlsbGlzZWNvbmRcIjp0KSk/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKHQpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LERuLmlzQmV0d2Vlbj1mdW5jdGlvbihlLHQsbixzKXtyZXR1cm4oXCIoXCI9PT0ocz1zfHxcIigpXCIpWzBdP3RoaXMuaXNBZnRlcihlLG4pOiF0aGlzLmlzQmVmb3JlKGUsbikpJiYoXCIpXCI9PT1zWzFdP3RoaXMuaXNCZWZvcmUodCxuKTohdGhpcy5pc0FmdGVyKHQsbikpfSxEbi5pc1NhbWU9ZnVuY3Rpb24oZSx0KXt2YXIgbixzPV8oZSk/ZTpwZShlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IXMuaXNWYWxpZCgpKSYmKFwibWlsbGlzZWNvbmRcIj09PSh0PU8odHx8XCJtaWxsaXNlY29uZFwiKSk/dGhpcy52YWx1ZU9mKCk9PT1zLnZhbHVlT2YoKToobj1zLnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZih0KS52YWx1ZU9mKCk8PW4mJm48PXRoaXMuY2xvbmUoKS5lbmRPZih0KS52YWx1ZU9mKCkpKX0sRG4uaXNTYW1lT3JBZnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmlzU2FtZShlLHQpfHx0aGlzLmlzQWZ0ZXIoZSx0KX0sRG4uaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pc1NhbWUoZSx0KXx8dGhpcy5pc0JlZm9yZShlLHQpfSxEbi5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcyl9LERuLmxhbmc9Z24sRG4ubG9jYWxlPUNlLERuLmxvY2FsZURhdGE9RmUsRG4ubWF4PWRuLERuLm1pbj1sbixEbi5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdSh7fSxkKHRoaXMpKX0sRG4uc2V0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpZm9yKHZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7dW5pdDpuLHByaW9yaXR5Oml0W25dfSk7cmV0dXJuIHQuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9KSx0fShlPVQoZSkpLHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzW25bc10udW5pdF0oZVtuW3NdLnVuaXRdKTtlbHNlIGlmKGU9TyhlKSxTKHRoaXNbZV0pKXJldHVybiB0aGlzW2VdKHQpO3JldHVybiB0aGlzfSxEbi5zdGFydE9mPWZ1bmN0aW9uKGUpe3N3aXRjaChlPU8oZSkpe2Nhc2VcInllYXJcIjp0aGlzLm1vbnRoKDApO2Nhc2VcInF1YXJ0ZXJcIjpjYXNlXCJtb250aFwiOnRoaXMuZGF0ZSgxKTtjYXNlXCJ3ZWVrXCI6Y2FzZVwiaXNvV2Vla1wiOmNhc2VcImRheVwiOmNhc2VcImRhdGVcIjp0aGlzLmhvdXJzKDApO2Nhc2VcImhvdXJcIjp0aGlzLm1pbnV0ZXMoMCk7Y2FzZVwibWludXRlXCI6dGhpcy5zZWNvbmRzKDApO2Nhc2VcInNlY29uZFwiOnRoaXMubWlsbGlzZWNvbmRzKDApfXJldHVyblwid2Vla1wiPT09ZSYmdGhpcy53ZWVrZGF5KDApLFwiaXNvV2Vla1wiPT09ZSYmdGhpcy5pc29XZWVrZGF5KDEpLFwicXVhcnRlclwiPT09ZSYmdGhpcy5tb250aCgzKk1hdGguZmxvb3IodGhpcy5tb250aCgpLzMpKSx0aGlzfSxEbi5zdWJ0cmFjdD15bixEbi50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSx0aGlzLmhvdXIoKSx0aGlzLm1pbnV0ZSgpLHRoaXMuc2Vjb25kKCksdGhpcy5taWxsaXNlY29uZCgpXX0sRG4udG9PYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57eWVhcnM6dGhpcy55ZWFyKCksbW9udGhzOnRoaXMubW9udGgoKSxkYXRlOnRoaXMuZGF0ZSgpLGhvdXJzOnRoaXMuaG91cnMoKSxtaW51dGVzOnRoaXMubWludXRlcygpLHNlY29uZHM6dGhpcy5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnRoaXMubWlsbGlzZWNvbmRzKCl9fSxEbi50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxEbi50b0lTT1N0cmluZz1mdW5jdGlvbihlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIHQ9ITAhPT1lLG49dD90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbi55ZWFyKCk8MHx8bi55ZWFyKCk+OTk5OT9IKG4sdD9cIllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXVwiOlwiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWlwiKTpTKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT90P3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLl9kLnZhbHVlT2YoKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKFwiWlwiLEgobixcIlpcIikpOkgobix0P1wiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXVwiOlwiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1pcIil9LERuLmluc3BlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuXCJtb21lbnQuaW52YWxpZCgvKiBcIit0aGlzLl9pK1wiICovKVwiO3ZhciBlPVwibW9tZW50XCIsdD1cIlwiO3RoaXMuaXNMb2NhbCgpfHwoZT0wPT09dGhpcy51dGNPZmZzZXQoKT9cIm1vbWVudC51dGNcIjpcIm1vbWVudC5wYXJzZVpvbmVcIix0PVwiWlwiKTt2YXIgbj1cIltcIitlKycoXCJdJyxzPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT9cIllZWVlcIjpcIllZWVlZWVwiLGk9dCsnW1wiKV0nO3JldHVybiB0aGlzLmZvcm1hdChuK3MrXCItTU0tRERbVF1ISDptbTpzcy5TU1NcIitpKX0sRG4udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxEbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKFwiZW5cIikuZm9ybWF0KFwiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlpcIil9LERuLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxEbi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoodGhpcy5fb2Zmc2V0fHwwKX0sRG4uY3JlYXRpb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX0sRG4ueWVhcj1MdCxEbi5pc0xlYXBZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcy55ZWFyKCkpfSxEbi53ZWVrWWVhcj1mdW5jdGlvbihlKXtyZXR1cm4gTGUuY2FsbCh0aGlzLGUsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LERuLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKGUpe3JldHVybiBMZS5jYWxsKHRoaXMsZSx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxEbi5xdWFydGVyPURuLnF1YXJ0ZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyooZS0xKSt0aGlzLm1vbnRoKCklMyl9LERuLm1vbnRoPSQsRG4uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gWih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxEbi53ZWVrPURuLndlZWtzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51bGw9PWU/dDp0aGlzLmFkZCg3KihlLXQpLFwiZFwiKX0sRG4uaXNvV2Vlaz1Ebi5pc29XZWVrcz1mdW5jdGlvbihlKXt2YXIgdD1YKHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT1lP3Q6dGhpcy5hZGQoNyooZS10KSxcImRcIil9LERuLndlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIEsodGhpcy55ZWFyKCksZS5kb3csZS5kb3kpfSxEbi5pc29XZWVrc0luWWVhcj1mdW5jdGlvbigpe3JldHVybiBLKHRoaXMueWVhcigpLDEsNCl9LERuLmRhdGU9cG4sRG4uZGF5PURuLmRheXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1lP3RoaXM6TmFOO3ZhciB0PXRoaXMuX2lzVVRDP3RoaXMuX2QuZ2V0VVRDRGF5KCk6dGhpcy5fZC5nZXREYXkoKTtyZXR1cm4gbnVsbCE9ZT8oZT1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/XCJudW1iZXJcIj09dHlwZW9mKGU9dC53ZWVrZGF5c1BhcnNlKGUpKT9lOm51bGw6cGFyc2VJbnQoZSwxMCl9KGUsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKGUtdCxcImRcIikpOnR9LERuLndlZWtkYXk9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1lP3RoaXM6TmFOO3ZhciB0PSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1lP3Q6dGhpcy5hZGQoZS10LFwiZFwiKX0sRG4uaXNvV2Vla2RheT1mdW5jdGlvbihlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWU/dGhpczpOYU47aWYobnVsbCE9ZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT90LndlZWtkYXlzUGFyc2UoZSklN3x8Nzppc05hTihlKT9udWxsOmV9KGUsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/dDp0LTcpfXJldHVybiB0aGlzLmRheSgpfHw3fSxEbi5kYXlPZlllYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJ5ZWFyXCIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09ZT90OnRoaXMuYWRkKGUtdCxcImRcIil9LERuLmhvdXI9RG4uaG91cnM9QnQsRG4ubWludXRlPURuLm1pbnV0ZXM9d24sRG4uc2Vjb25kPURuLnNlY29uZHM9dm4sRG4ubWlsbGlzZWNvbmQ9RG4ubWlsbGlzZWNvbmRzPVNuLERuLnV0Y09mZnNldD1mdW5jdGlvbih0LG4scyl7dmFyIGkscj10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGwhPXQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZihudWxsPT09KHQ9a2UoRHQsdCkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnModCk8MTYmJiFzJiYodCo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmbiYmKGk9T2UodGhpcykpLHRoaXMuX29mZnNldD10LHRoaXMuX2lzVVRDPSEwLG51bGwhPWkmJnRoaXMuYWRkKGksXCJtXCIpLHIhPT10JiYoIW58fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/SGUodGhpcyx4ZSh0LXIsXCJtXCIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLGUudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP3I6T2UodGhpcyl9LERuLnV0Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCxlKX0sRG4ubG9jYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2lzVVRDJiYodGhpcy51dGNPZmZzZXQoMCxlKSx0aGlzLl9pc1VUQz0hMSxlJiZ0aGlzLnN1YnRyYWN0KE9lKHRoaXMpLFwibVwiKSksdGhpc30sRG4ucGFyc2Vab25lPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5faSl7dmFyIGU9a2UoU3QsdGhpcy5faSk7bnVsbCE9ZT90aGlzLnV0Y09mZnNldChlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sRG4uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKGU9ZT9wZShlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLWUpJTYwPT0wKX0sRG4uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxEbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxEbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxEbi5pc1V0Yz1UZSxEbi5pc1VUQz1UZSxEbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz9cIlVUQ1wiOlwiXCJ9LERuLnpvbmVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDP1wiQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWVcIjpcIlwifSxEbi5kYXRlcz12KFwiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC5cIixwbiksRG4ubW9udGhzPXYoXCJtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWRcIiwkKSxEbi55ZWFycz12KFwieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZFwiLEx0KSxEbi56b25lPXYoXCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lL1wiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWU/KFwic3RyaW5nXCIhPXR5cGVvZiBlJiYoZT0tZSksdGhpcy51dGNPZmZzZXQoZSx0KSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLERuLmlzRFNUU2hpZnRlZD12KFwiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvblwiLGZ1bmN0aW9uKCl7aWYoIXModGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciBlPXt9O2lmKGYoZSx0aGlzKSwoZT15ZShlKSkuX2Epe3ZhciB0PWUuX2lzVVRDP2woZS5fYSk6cGUoZS5fYSk7dGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiZwKGUuX2EsdC50b0FycmF5KCkpPjB9ZWxzZSB0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITE7cmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciBrbj1rLnByb3RvdHlwZTtrbi5jYWxlbmRhcj1mdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcy5fY2FsZW5kYXJbZV18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBTKHMpP3MuY2FsbCh0LG4pOnN9LGtuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gdHx8IW4/dDoodGhpcy5fbG9uZ0RhdGVGb3JtYXRbZV09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgxKX0pLHRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdKX0sa24uaW52YWxpZERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LGtuLm9yZGluYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZShcIiVkXCIsZSl9LGtuLnByZXBhcnNlPUdlLGtuLnBvc3Rmb3JtYXQ9R2Usa24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gUyhpKT9pKGUsdCxuLHMpOmkucmVwbGFjZSgvJWQvaSxlKX0sa24ucGFzdEZ1dHVyZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVtlPjA/XCJmdXR1cmVcIjpcInBhc3RcIl07cmV0dXJuIFMobik/bih0KTpuLnJlcGxhY2UoLyVzL2ksdCl9LGtuLnNldD1mdW5jdGlvbihlKXt2YXIgdCxuO2ZvcihuIGluIGUpUyh0PWVbbl0pP3RoaXNbbl09dDp0aGlzW1wiX1wiK25dPXQ7dGhpcy5fY29uZmlnPWUsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpK1wifFwiKy9cXGR7MSwyfS8uc291cmNlKX0sa24ubW9udGhzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGU/dCh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1tlLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxOdCkudGVzdChuKT9cImZvcm1hdFwiOlwic3RhbmRhbG9uZVwiXVtlLm1vbnRoKCldOnQodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LGtuLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGU/dCh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtOdC50ZXN0KG4pP1wiZm9ybWF0XCI6XCJzdGFuZGFsb25lXCJdW2UubW9udGgoKV06dCh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0sa24ubW9udGhzUGFyc2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLGkscjtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHMsaSxyLGE9ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10scz0wO3M8MTI7KytzKXI9bChbMmUzLHNdKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW3NdPXRoaXMubW9udGhzU2hvcnQocixcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtzXT10aGlzLm1vbnRocyhyLFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/XCJNTU1cIj09PXQ/LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsYSkpP2k6bnVsbDotMSE9PShpPVV0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLGEpKT9pOm51bGw6XCJNTU1cIj09PXQ/LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsYSkpP2k6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxhKSk/aTpudWxsOi0xIT09KGk9VXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsYSkpP2k6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsYSkpP2k6bnVsbH0uY2FsbCh0aGlzLGUsdCxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscz0wO3M8MTI7cysrKXtpZihpPWwoWzJlMyxzXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtzXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtzXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMubW9udGhzKGksXCJcIikucmVwbGFjZShcIi5cIixcIlwiKStcIiRcIixcImlcIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtzXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMubW9udGhzU2hvcnQoaSxcIlwiKS5yZXBsYWNlKFwiLlwiLFwiXCIpK1wiJFwiLFwiaVwiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbc118fChyPVwiXlwiK3RoaXMubW9udGhzKGksXCJcIikrXCJ8XlwiK3RoaXMubW9udGhzU2hvcnQoaSxcIlwiKSx0aGlzLl9tb250aHNQYXJzZVtzXT1uZXcgUmVnRXhwKHIucmVwbGFjZShcIi5cIixcIlwiKSxcImlcIikpLG4mJlwiTU1NTVwiPT09dCYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3NdLnRlc3QoZSkpcmV0dXJuIHM7aWYobiYmXCJNTU1cIj09PXQmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbc10udGVzdChlKSlyZXR1cm4gcztpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbc10udGVzdChlKSlyZXR1cm4gc319LGtuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhvKHRoaXMsXCJfbW9udGhzUmVnZXhcIil8fHEuY2FsbCh0aGlzKSxlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KToobyh0aGlzLFwiX21vbnRoc1JlZ2V4XCIpfHwodGhpcy5fbW9udGhzUmVnZXg9SXQpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sa24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8obyh0aGlzLFwiX21vbnRoc1JlZ2V4XCIpfHxxLmNhbGwodGhpcyksZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihvKHRoaXMsXCJfbW9udGhzU2hvcnRSZWdleFwiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9RXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJmU/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sa24ud2Vlaz1mdW5jdGlvbihlKXtyZXR1cm4gWChlLHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95KS53ZWVrfSxrbi5maXJzdERheU9mWWVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZWVrLmRveX0sa24uZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LGtuLndlZWtkYXlzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGU/dCh0aGlzLl93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXNbZS5kYXkoKV06dGhpcy5fd2Vla2RheXNbdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChuKT9cImZvcm1hdFwiOlwic3RhbmRhbG9uZVwiXVtlLmRheSgpXTp0KHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5cy5zdGFuZGFsb25lfSxrbi53ZWVrZGF5c01pbj1mdW5jdGlvbihlKXtyZXR1cm4gZT90aGlzLl93ZWVrZGF5c01pbltlLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sa24ud2Vla2RheXNTaG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZT90aGlzLl93ZWVrZGF5c1Nob3J0W2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LGtuLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLGkscjtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxpLHIsYT1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10scz0wO3M8NzsrK3Mpcj1sKFsyZTMsMV0pLmRheShzKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3NdPXRoaXMud2Vla2RheXNNaW4ocixcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtzXT10aGlzLndlZWtkYXlzU2hvcnQocixcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbc109dGhpcy53ZWVrZGF5cyhyLFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/XCJkZGRkXCI9PT10Py0xIT09KGk9VXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGEpKT9pOm51bGw6XCJkZGRcIj09PXQ/LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxhKSk/aTpudWxsOi0xIT09KGk9VXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGEpKT9pOm51bGw6XCJkZGRkXCI9PT10Py0xIT09KGk9VXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGEpKT9pOi0xIT09KGk9VXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsYSkpP2k6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsYSkpP2k6bnVsbDpcImRkZFwiPT09dD8tMSE9PShpPVV0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGEpKT9pOi0xIT09KGk9VXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGEpKT9pOi0xIT09KGk9VXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGEpKT9pOm51bGw6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsYSkpP2k6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsYSkpP2k6LTEhPT0oaT1VdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxhKSk/aTpudWxsfS5jYWxsKHRoaXMsZSx0LG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscz0wO3M8NztzKyspe2lmKGk9bChbMmUzLDFdKS5kYXkocyksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3NdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbc109bmV3IFJlZ0V4cChcIl5cIit0aGlzLndlZWtkYXlzKGksXCJcIikucmVwbGFjZShcIi5cIixcIi4/XCIpK1wiJFwiLFwiaVwiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbc109bmV3IFJlZ0V4cChcIl5cIit0aGlzLndlZWtkYXlzU2hvcnQoaSxcIlwiKS5yZXBsYWNlKFwiLlwiLFwiLj9cIikrXCIkXCIsXCJpXCIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbc109bmV3IFJlZ0V4cChcIl5cIit0aGlzLndlZWtkYXlzTWluKGksXCJcIikucmVwbGFjZShcIi5cIixcIi4/XCIpK1wiJFwiLFwiaVwiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtzXXx8KHI9XCJeXCIrdGhpcy53ZWVrZGF5cyhpLFwiXCIpK1wifF5cIit0aGlzLndlZWtkYXlzU2hvcnQoaSxcIlwiKStcInxeXCIrdGhpcy53ZWVrZGF5c01pbihpLFwiXCIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbc109bmV3IFJlZ0V4cChyLnJlcGxhY2UoXCIuXCIsXCJcIiksXCJpXCIpKSxuJiZcImRkZGRcIj09PXQmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3NdLnRlc3QoZSkpcmV0dXJuIHM7aWYobiYmXCJkZGRcIj09PXQmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtzXS50ZXN0KGUpKXJldHVybiBzO2lmKG4mJlwiZGRcIj09PXQmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbc10udGVzdChlKSlyZXR1cm4gcztpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtzXS50ZXN0KGUpKXJldHVybiBzfX0sa24ud2Vla2RheXNSZWdleD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhvKHRoaXMsXCJfd2Vla2RheXNSZWdleFwiKXx8ZWUuY2FsbCh0aGlzKSxlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KG8odGhpcyxcIl93ZWVrZGF5c1JlZ2V4XCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD16dCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSxrbi53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8obyh0aGlzLFwiX3dlZWtkYXlzUmVnZXhcIil8fGVlLmNhbGwodGhpcyksZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KToobyh0aGlzLFwiX3dlZWtkYXlzU2hvcnRSZWdleFwiKXx8KHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD0kdCksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSxrbi53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KG8odGhpcyxcIl93ZWVrZGF5c1JlZ2V4XCIpfHxlZS5jYWxsKHRoaXMpLGU/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KToobyh0aGlzLFwiX3dlZWtkYXlzTWluUmVnZXhcIil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXF0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGtuLmlzUE09ZnVuY3Rpb24oZSl7cmV0dXJuXCJwXCI9PT0oZStcIlwiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sa24ubWVyaWRpZW09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPjExP24/XCJwbVwiOlwiUE1cIjpuP1wiYW1cIjpcIkFNXCJ9LGFlKFwiZW5cIix7ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuIGUrKDE9PT1nKGUlMTAwLzEwKT9cInRoXCI6MT09PXQ/XCJzdFwiOjI9PT10P1wibmRcIjozPT09dD9cInJkXCI6XCJ0aFwiKX19KSxlLmxhbmc9dihcIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuXCIsYWUpLGUubGFuZ0RhdGE9dihcIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC5cIix1ZSk7dmFyIFluPU1hdGguYWJzLE9uPSRlKFwibXNcIiksVG49JGUoXCJzXCIpLHhuPSRlKFwibVwiKSxibj0kZShcImhcIiksUG49JGUoXCJkXCIpLFduPSRlKFwid1wiKSxIbj0kZShcIk1cIiksUm49JGUoXCJ5XCIpLENuPXFlKFwibWlsbGlzZWNvbmRzXCIpLEZuPXFlKFwic2Vjb25kc1wiKSxVbj1xZShcIm1pbnV0ZXNcIiksTG49cWUoXCJob3Vyc1wiKSxObj1xZShcImRheXNcIiksR249cWUoXCJtb250aHNcIiksVm49cWUoXCJ5ZWFyc1wiKSxFbj1NYXRoLnJvdW5kLEluPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEFuPU1hdGguYWJzLGpuPXZlLnByb3RvdHlwZTtyZXR1cm4gam4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxqbi5hYnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9WW4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPVluKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1Zbih0aGlzLl9tb250aHMpLGUubWlsbGlzZWNvbmRzPVluKGUubWlsbGlzZWNvbmRzKSxlLnNlY29uZHM9WW4oZS5zZWNvbmRzKSxlLm1pbnV0ZXM9WW4oZS5taW51dGVzKSxlLmhvdXJzPVluKGUuaG91cnMpLGUubW9udGhzPVluKGUubW9udGhzKSxlLnllYXJzPVluKGUueWVhcnMpLHRoaXN9LGpuLmFkZD1mdW5jdGlvbihlLHQpe3JldHVybiBBZSh0aGlzLGUsdCwxKX0sam4uc3VidHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQWUodGhpcyxlLHQsLTEpfSxqbi5hcz1mdW5jdGlvbihlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgdCxuLHM9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKFwibW9udGhcIj09PShlPU8oZSkpfHxcInllYXJcIj09PWUpcmV0dXJuIHQ9dGhpcy5fZGF5cytzLzg2NGU1LG49dGhpcy5fbW9udGhzK1plKHQpLFwibW9udGhcIj09PWU/bjpuLzEyO3N3aXRjaCh0PXRoaXMuX2RheXMrTWF0aC5yb3VuZCh6ZSh0aGlzLl9tb250aHMpKSxlKXtjYXNlXCJ3ZWVrXCI6cmV0dXJuIHQvNytzLzYwNDhlNTtjYXNlXCJkYXlcIjpyZXR1cm4gdCtzLzg2NGU1O2Nhc2VcImhvdXJcIjpyZXR1cm4gMjQqdCtzLzM2ZTU7Y2FzZVwibWludXRlXCI6cmV0dXJuIDE0NDAqdCtzLzZlNDtjYXNlXCJzZWNvbmRcIjpyZXR1cm4gODY0MDAqdCtzLzFlMztjYXNlXCJtaWxsaXNlY29uZFwiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KnQpK3M7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHVuaXQgXCIrZSl9fSxqbi5hc01pbGxpc2Vjb25kcz1Pbixqbi5hc1NlY29uZHM9VG4sam4uYXNNaW51dGVzPXhuLGpuLmFzSG91cnM9Ym4sam4uYXNEYXlzPVBuLGpuLmFzV2Vla3M9V24sam4uYXNNb250aHM9SG4sam4uYXNZZWFycz1Sbixqbi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX21pbGxpc2Vjb25kcys4NjRlNSp0aGlzLl9kYXlzK3RoaXMuX21vbnRocyUxMioyNTkyZTYrMzE1MzZlNipnKHRoaXMuX21vbnRocy8xMik6TmFOfSxqbi5fYnViYmxlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHMsaSxyPXRoaXMuX21pbGxpc2Vjb25kcyxhPXRoaXMuX2RheXMsbz10aGlzLl9tb250aHMsdT10aGlzLl9kYXRhO3JldHVybiByPj0wJiZhPj0wJiZvPj0wfHxyPD0wJiZhPD0wJiZvPD0wfHwocis9ODY0ZTUqamUoemUobykrYSksYT0wLG89MCksdS5taWxsaXNlY29uZHM9ciUxZTMsZT15KHIvMWUzKSx1LnNlY29uZHM9ZSU2MCx0PXkoZS82MCksdS5taW51dGVzPXQlNjAsbj15KHQvNjApLHUuaG91cnM9biUyNCxhKz15KG4vMjQpLGk9eShaZShhKSksbys9aSxhLT1qZSh6ZShpKSkscz15KG8vMTIpLG8lPTEyLHUuZGF5cz1hLHUubW9udGhzPW8sdS55ZWFycz1zLHRoaXN9LGpuLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHhlKHRoaXMpfSxqbi5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TyhlKSx0aGlzLmlzVmFsaWQoKT90aGlzW2UrXCJzXCJdKCk6TmFOfSxqbi5taWxsaXNlY29uZHM9Q24sam4uc2Vjb25kcz1Gbixqbi5taW51dGVzPVVuLGpuLmhvdXJzPUxuLGpuLmRheXM9Tm4sam4ud2Vla3M9ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzLmRheXMoKS83KX0sam4ubW9udGhzPUduLGpuLnllYXJzPVZuLGpuLmh1bWFuaXplPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdD10aGlzLmxvY2FsZURhdGEoKSxuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz14ZShlKS5hYnMoKSxpPUVuKHMuYXMoXCJzXCIpKSxyPUVuKHMuYXMoXCJtXCIpKSxhPUVuKHMuYXMoXCJoXCIpKSxvPUVuKHMuYXMoXCJkXCIpKSx1PUVuKHMuYXMoXCJNXCIpKSxsPUVuKHMuYXMoXCJ5XCIpKSxkPWk8PUluLnNzJiZbXCJzXCIsaV18fGk8SW4ucyYmW1wic3NcIixpXXx8cjw9MSYmW1wibVwiXXx8cjxJbi5tJiZbXCJtbVwiLHJdfHxhPD0xJiZbXCJoXCJdfHxhPEluLmgmJltcImhoXCIsYV18fG88PTEmJltcImRcIl18fG88SW4uZCYmW1wiZGRcIixvXXx8dTw9MSYmW1wiTVwiXXx8dTxJbi5NJiZbXCJNTVwiLHVdfHxsPD0xJiZbXCJ5XCJdfHxbXCJ5eVwiLGxdO3JldHVybiBkWzJdPXQsZFszXT0rZT4wLGRbNF09bixmdW5jdGlvbihlLHQsbixzLGkpe3JldHVybiBpLnJlbGF0aXZlVGltZSh0fHwxLCEhbixlLHMpfS5hcHBseShudWxsLGQpfSh0aGlzLCFlLHQpO3JldHVybiBlJiYobj10LnBhc3RGdXR1cmUoK3RoaXMsbikpLHQucG9zdGZvcm1hdChuKX0sam4udG9JU09TdHJpbmc9QmUsam4udG9TdHJpbmc9QmUsam4udG9KU09OPUJlLGpuLmxvY2FsZT1DZSxqbi5sb2NhbGVEYXRhPUZlLGpuLnRvSXNvU3RyaW5nPXYoXCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKVwiLEJlKSxqbi5sYW5nPWduLFAoXCJYXCIsMCwwLFwidW5peFwiKSxQKFwieFwiLDAsMCxcInZhbHVlT2ZcIiksQyhcInhcIixNdCksQyhcIlhcIiwvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vKSxMKFwiWFwiLGZ1bmN0aW9uKGUsdCxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KGUsMTApKX0pLEwoXCJ4XCIsZnVuY3Rpb24oZSx0LG4pe24uX2Q9bmV3IERhdGUoZyhlKSl9KSxlLnZlcnNpb249XCIyLjIwLjFcIixmdW5jdGlvbihlKXtRZT1lfShwZSksZS5mbj1EbixlLm1pbj1mdW5jdGlvbigpe3JldHVybiB3ZShcImlzQmVmb3JlXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxlLm1heD1mdW5jdGlvbigpe3JldHVybiB3ZShcImlzQWZ0ZXJcIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxlLnV0Yz1sLGUudW5peD1mdW5jdGlvbihlKXtyZXR1cm4gcGUoMWUzKmUpfSxlLm1vbnRocz1mdW5jdGlvbihlLHQpe3JldHVybiBFZShlLHQsXCJtb250aHNcIil9LGUuaXNEYXRlPXIsZS5sb2NhbGU9YWUsZS5pbnZhbGlkPWMsZS5kdXJhdGlvbj14ZSxlLmlzTW9tZW50PV8sZS53ZWVrZGF5cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEllKGUsdCxuLFwid2Vla2RheXNcIil9LGUucGFyc2Vab25lPWZ1bmN0aW9uKCl7cmV0dXJuIHBlLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0sZS5sb2NhbGVEYXRhPXVlLGUuaXNEdXJhdGlvbj1NZSxlLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEVlKGUsdCxcIm1vbnRoc1Nob3J0XCIpfSxlLndlZWtkYXlzTWluPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSWUoZSx0LG4sXCJ3ZWVrZGF5c01pblwiKX0sZS5kZWZpbmVMb2NhbGU9b2UsZS51cGRhdGVMb2NhbGU9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KXt2YXIgbixzLGk9UXQ7bnVsbCE9KHM9cmUoZSkpJiYoaT1zLl9jb25maWcpLChuPW5ldyBrKHQ9RChpLHQpKSkucGFyZW50TG9jYWxlPVh0W2VdLFh0W2VdPW4sYWUoZSl9ZWxzZSBudWxsIT1YdFtlXSYmKG51bGwhPVh0W2VdLnBhcmVudExvY2FsZT9YdFtlXT1YdFtlXS5wYXJlbnRMb2NhbGU6bnVsbCE9WHRbZV0mJmRlbGV0ZSBYdFtlXSk7cmV0dXJuIFh0W2VdfSxlLmxvY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnQoWHQpfSxlLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBJZShlLHQsbixcIndlZWtkYXlzU2hvcnRcIil9LGUubm9ybWFsaXplVW5pdHM9TyxlLnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP0VuOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihFbj1lLCEwKX0sZS5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09SW5bZV0mJih2b2lkIDA9PT10P0luW2VdOihJbltlXT10LFwic1wiPT09ZSYmKEluLnNzPXQtMSksITApKX0sZS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlmZih0LFwiZGF5c1wiLCEwKTtyZXR1cm4gbjwtNj9cInNhbWVFbHNlXCI6bjwtMT9cImxhc3RXZWVrXCI6bjwwP1wibGFzdERheVwiOm48MT9cInNhbWVEYXlcIjpuPDI/XCJuZXh0RGF5XCI6bjw3P1wibmV4dFdlZWtcIjpcInNhbWVFbHNlXCJ9LGUucHJvdG90eXBlPURuLGUuSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDpcIllZWVktTU0tRERUSEg6bW1cIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOlwiWVlZWS1NTS1ERFRISDptbTpzc1wiLERBVEVUSU1FX0xPQ0FMX01TOlwiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NcIixEQVRFOlwiWVlZWS1NTS1ERFwiLFRJTUU6XCJISDptbVwiLFRJTUVfU0VDT05EUzpcIkhIOm1tOnNzXCIsVElNRV9NUzpcIkhIOm1tOnNzLlNTU1wiLFdFRUs6XCJZWVlZLVtXXVdXXCIsTU9OVEg6XCJZWVlZLU1NXCJ9LGV9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvbW9tZW50L21pbi9tb21lbnQubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///57\n"); - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n* @version: 2.1.27\n* @author: Dan Grossman http://www.dangrossman.info/\n* @copyright: Copyright (c) 2012-2017 Dan Grossman. All rights reserved.\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n* @website: http://www.daterangepicker.com/\n*/\n// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\n(function (root, factory) {\n if (true) {\n // AMD. Make globaly available as well\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"moment\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = (function (moment, jquery) {\n if (!jquery.fn) jquery.fn = {}; // webpack server rendering\n return factory(moment, jquery);\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof module === 'object' && module.exports) {\n // Node / Browserify\n //isomorphic issue\n var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;\n if (!jQuery) {\n jQuery = require('jquery');\n if (!jQuery.fn) jQuery.fn = {};\n }\n var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');\n module.exports = factory(moment, jQuery);\n } else {\n // Browser globals\n root.daterangepicker = factory(root.moment, root.jQuery);\n }\n}(this, function(moment, $) {\n var DateRangePicker = function(element, options, cb) {\n\n //default settings for options\n this.parentEl = 'body';\n this.element = $(element);\n this.startDate = moment().startOf('day');\n this.endDate = moment().endOf('day');\n this.minDate = false;\n this.maxDate = false;\n this.dateLimit = false;\n this.autoApply = false;\n this.singleDatePicker = false;\n this.showDropdowns = false;\n this.showWeekNumbers = false;\n this.showISOWeekNumbers = false;\n this.showCustomRangeLabel = true;\n this.timePicker = false;\n this.timePicker24Hour = false;\n this.timePickerIncrement = 1;\n this.timePickerSeconds = false;\n this.linkedCalendars = true;\n this.autoUpdateInput = true;\n this.alwaysShowCalendars = false;\n this.ranges = {};\n\n this.opens = 'right';\n if (this.element.hasClass('pull-right'))\n this.opens = 'left';\n\n this.drops = 'down';\n if (this.element.hasClass('dropup'))\n this.drops = 'up';\n\n this.buttonClasses = 'btn btn-sm';\n this.applyClass = 'btn-success';\n this.cancelClass = 'btn-default';\n\n this.locale = {\n direction: 'ltr',\n format: moment.localeData().longDateFormat('L'),\n separator: ' - ',\n applyLabel: 'Apply',\n cancelLabel: 'Cancel',\n weekLabel: 'W',\n customRangeLabel: 'Custom Range',\n daysOfWeek: moment.weekdaysMin(),\n monthNames: moment.monthsShort(),\n firstDay: moment.localeData().firstDayOfWeek()\n };\n\n this.callback = function() { };\n\n //some state information\n this.isShowing = false;\n this.leftCalendar = {};\n this.rightCalendar = {};\n\n //custom options from user\n if (typeof options !== 'object' || options === null)\n options = {};\n\n //allow setting options with data attributes\n //data-api options will be overwritten with custom javascript options\n options = $.extend(this.element.data(), options);\n\n //html template for the picker UI\n if (typeof options.template !== 'string' && !(options.template instanceof $))\n options.template = '<div class=\"daterangepicker dropdown-menu\">' +\n '<div class=\"calendar left\">' +\n '<div class=\"daterangepicker_input\">' +\n '<input class=\"input-mini form-control\" type=\"text\" name=\"daterangepicker_start\" value=\"\" />' +\n '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n '<div class=\"calendar-time\">' +\n '<div></div>' +\n '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n '</div>' +\n '</div>' +\n '<div class=\"calendar-table\"></div>' +\n '</div>' +\n '<div class=\"calendar right\">' +\n '<div class=\"daterangepicker_input\">' +\n '<input class=\"input-mini form-control\" type=\"text\" name=\"daterangepicker_end\" value=\"\" />' +\n '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n '<div class=\"calendar-time\">' +\n '<div></div>' +\n '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n '</div>' +\n '</div>' +\n '<div class=\"calendar-table\"></div>' +\n '</div>' +\n '<div class=\"ranges\">' +\n '<div class=\"range_inputs\">' +\n '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\n '<button class=\"cancelBtn\" type=\"button\"></button>' +\n '</div>' +\n '</div>' +\n '</div>';\n\n this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\n this.container = $(options.template).appendTo(this.parentEl);\n\n //\n // handle all the possible options overriding defaults\n //\n\n if (typeof options.locale === 'object') {\n\n if (typeof options.locale.direction === 'string')\n this.locale.direction = options.locale.direction;\n\n if (typeof options.locale.format === 'string')\n this.locale.format = options.locale.format;\n\n if (typeof options.locale.separator === 'string')\n this.locale.separator = options.locale.separator;\n\n if (typeof options.locale.daysOfWeek === 'object')\n this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\n\n if (typeof options.locale.monthNames === 'object')\n this.locale.monthNames = options.locale.monthNames.slice();\n\n if (typeof options.locale.firstDay === 'number')\n this.locale.firstDay = options.locale.firstDay;\n\n if (typeof options.locale.applyLabel === 'string')\n this.locale.applyLabel = options.locale.applyLabel;\n\n if (typeof options.locale.cancelLabel === 'string')\n this.locale.cancelLabel = options.locale.cancelLabel;\n\n if (typeof options.locale.weekLabel === 'string')\n this.locale.weekLabel = options.locale.weekLabel;\n\n if (typeof options.locale.customRangeLabel === 'string'){\n //Support unicode chars in the custom range name.\n var elem = document.createElement('textarea');\n elem.innerHTML = options.locale.customRangeLabel;\n var rangeHtml = elem.value;\n this.locale.customRangeLabel = rangeHtml;\n }\n }\n this.container.addClass(this.locale.direction);\n\n if (typeof options.startDate === 'string')\n this.startDate = moment(options.startDate, this.locale.format);\n\n if (typeof options.endDate === 'string')\n this.endDate = moment(options.endDate, this.locale.format);\n\n if (typeof options.minDate === 'string')\n this.minDate = moment(options.minDate, this.locale.format);\n\n if (typeof options.maxDate === 'string')\n this.maxDate = moment(options.maxDate, this.locale.format);\n\n if (typeof options.startDate === 'object')\n this.startDate = moment(options.startDate);\n\n if (typeof options.endDate === 'object')\n this.endDate = moment(options.endDate);\n\n if (typeof options.minDate === 'object')\n this.minDate = moment(options.minDate);\n\n if (typeof options.maxDate === 'object')\n this.maxDate = moment(options.maxDate);\n\n // sanity check for bad options\n if (this.minDate && this.startDate.isBefore(this.minDate))\n this.startDate = this.minDate.clone();\n\n // sanity check for bad options\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\n this.endDate = this.maxDate.clone();\n\n if (typeof options.applyClass === 'string')\n this.applyClass = options.applyClass;\n\n if (typeof options.cancelClass === 'string')\n this.cancelClass = options.cancelClass;\n\n if (typeof options.dateLimit === 'object')\n this.dateLimit = options.dateLimit;\n\n if (typeof options.opens === 'string')\n this.opens = options.opens;\n\n if (typeof options.drops === 'string')\n this.drops = options.drops;\n\n if (typeof options.showWeekNumbers === 'boolean')\n this.showWeekNumbers = options.showWeekNumbers;\n\n if (typeof options.showISOWeekNumbers === 'boolean')\n this.showISOWeekNumbers = options.showISOWeekNumbers;\n\n if (typeof options.buttonClasses === 'string')\n this.buttonClasses = options.buttonClasses;\n\n if (typeof options.buttonClasses === 'object')\n this.buttonClasses = options.buttonClasses.join(' ');\n\n if (typeof options.showDropdowns === 'boolean')\n this.showDropdowns = options.showDropdowns;\n\n if (typeof options.showCustomRangeLabel === 'boolean')\n this.showCustomRangeLabel = options.showCustomRangeLabel;\n\n if (typeof options.singleDatePicker === 'boolean') {\n this.singleDatePicker = options.singleDatePicker;\n if (this.singleDatePicker)\n this.endDate = this.startDate.clone();\n }\n\n if (typeof options.timePicker === 'boolean')\n this.timePicker = options.timePicker;\n\n if (typeof options.timePickerSeconds === 'boolean')\n this.timePickerSeconds = options.timePickerSeconds;\n\n if (typeof options.timePickerIncrement === 'number')\n this.timePickerIncrement = options.timePickerIncrement;\n\n if (typeof options.timePicker24Hour === 'boolean')\n this.timePicker24Hour = options.timePicker24Hour;\n\n if (typeof options.autoApply === 'boolean')\n this.autoApply = options.autoApply;\n\n if (typeof options.autoUpdateInput === 'boolean')\n this.autoUpdateInput = options.autoUpdateInput;\n\n if (typeof options.linkedCalendars === 'boolean')\n this.linkedCalendars = options.linkedCalendars;\n\n if (typeof options.isInvalidDate === 'function')\n this.isInvalidDate = options.isInvalidDate;\n\n if (typeof options.isCustomDate === 'function')\n this.isCustomDate = options.isCustomDate;\n\n if (typeof options.alwaysShowCalendars === 'boolean')\n this.alwaysShowCalendars = options.alwaysShowCalendars;\n\n // update day names order to firstDay\n if (this.locale.firstDay != 0) {\n var iterator = this.locale.firstDay;\n while (iterator > 0) {\n this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\n iterator--;\n }\n }\n\n var start, end, range;\n\n //if no start/end dates set, check if an input element contains initial values\n if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\n if ($(this.element).is('input[type=text]')) {\n var val = $(this.element).val(),\n split = val.split(this.locale.separator);\n\n start = end = null;\n\n if (split.length == 2) {\n start = moment(split[0], this.locale.format);\n end = moment(split[1], this.locale.format);\n } else if (this.singleDatePicker && val !== \"\") {\n start = moment(val, this.locale.format);\n end = moment(val, this.locale.format);\n }\n if (start !== null && end !== null) {\n this.setStartDate(start);\n this.setEndDate(end);\n }\n }\n }\n\n if (typeof options.ranges === 'object') {\n for (range in options.ranges) {\n\n if (typeof options.ranges[range][0] === 'string')\n start = moment(options.ranges[range][0], this.locale.format);\n else\n start = moment(options.ranges[range][0]);\n\n if (typeof options.ranges[range][1] === 'string')\n end = moment(options.ranges[range][1], this.locale.format);\n else\n end = moment(options.ranges[range][1]);\n\n // If the start or end date exceed those allowed by the minDate or dateLimit\n // options, shorten the range to the allowable period.\n if (this.minDate && start.isBefore(this.minDate))\n start = this.minDate.clone();\n\n var maxDate = this.maxDate;\n if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate))\n maxDate = start.clone().add(this.dateLimit);\n if (maxDate && end.isAfter(maxDate))\n end = maxDate.clone();\n\n // If the end of the range is before the minimum or the start of the range is\n // after the maximum, don't display this range option at all.\n if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) \n || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\n continue;\n\n //Support unicode chars in the range names.\n var elem = document.createElement('textarea');\n elem.innerHTML = range;\n var rangeHtml = elem.value;\n\n this.ranges[rangeHtml] = [start, end];\n }\n\n var list = '<ul>';\n for (range in this.ranges) {\n list += '<li data-range-key=\"' + range + '\">' + range + '</li>';\n }\n if (this.showCustomRangeLabel) {\n list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + '</li>';\n }\n list += '</ul>';\n this.container.find('.ranges').prepend(list);\n }\n\n if (typeof cb === 'function') {\n this.callback = cb;\n }\n\n if (!this.timePicker) {\n this.startDate = this.startDate.startOf('day');\n this.endDate = this.endDate.endOf('day');\n this.container.find('.calendar-time').hide();\n }\n\n //can't be used together for now\n if (this.timePicker && this.autoApply)\n this.autoApply = false;\n\n if (this.autoApply && typeof options.ranges !== 'object') {\n this.container.find('.ranges').hide();\n } else if (this.autoApply) {\n this.container.find('.applyBtn, .cancelBtn').addClass('hide');\n }\n\n if (this.singleDatePicker) {\n this.container.addClass('single');\n this.container.find('.calendar.left').addClass('single');\n this.container.find('.calendar.left').show();\n this.container.find('.calendar.right').hide();\n this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide();\n if (this.timePicker) {\n this.container.find('.ranges ul').hide();\n } else {\n this.container.find('.ranges').hide();\n }\n }\n\n if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\n this.container.addClass('show-calendar');\n }\n\n this.container.addClass('opens' + this.opens);\n\n //swap the position of the predefined ranges if opens right\n if (typeof options.ranges !== 'undefined' && this.opens == 'right') {\n this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() );\n }\n\n //apply CSS classes and labels to buttons\n this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\n if (this.applyClass.length)\n this.container.find('.applyBtn').addClass(this.applyClass);\n if (this.cancelClass.length)\n this.container.find('.cancelBtn').addClass(this.cancelClass);\n this.container.find('.applyBtn').html(this.locale.applyLabel);\n this.container.find('.cancelBtn').html(this.locale.cancelLabel);\n\n //\n // event listeners\n //\n\n this.container.find('.calendar')\n .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\n .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\n .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\n .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\n .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))\n .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\n .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\n .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))\n .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))\n .on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this))\n .on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this))\n .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this))\n .on('keydown.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsKeydown, this));\n\n this.container.find('.ranges')\n .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\n .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))\n .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))\n .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))\n .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));\n\n if (this.element.is('input') || this.element.is('button')) {\n this.element.on({\n 'click.daterangepicker': $.proxy(this.show, this),\n 'focus.daterangepicker': $.proxy(this.show, this),\n 'keyup.daterangepicker': $.proxy(this.elementChanged, this),\n 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility\n });\n } else {\n this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\n this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));\n }\n\n //\n // if attached to a text input, set the initial value\n //\n\n if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n this.element.trigger('change');\n } else if (this.element.is('input') && this.autoUpdateInput) {\n this.element.val(this.startDate.format(this.locale.format));\n this.element.trigger('change');\n }\n\n };\n\n DateRangePicker.prototype = {\n\n constructor: DateRangePicker,\n\n setStartDate: function(startDate) {\n if (typeof startDate === 'string')\n this.startDate = moment(startDate, this.locale.format);\n\n if (typeof startDate === 'object')\n this.startDate = moment(startDate);\n\n if (!this.timePicker)\n this.startDate = this.startDate.startOf('day');\n\n if (this.timePicker && this.timePickerIncrement)\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n if (this.minDate && this.startDate.isBefore(this.minDate)) {\n this.startDate = this.minDate.clone();\n if (this.timePicker && this.timePickerIncrement)\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n }\n\n if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\n this.startDate = this.maxDate.clone();\n if (this.timePicker && this.timePickerIncrement)\n this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n }\n\n if (!this.isShowing)\n this.updateElement();\n\n this.updateMonthsInView();\n },\n\n setEndDate: function(endDate) {\n if (typeof endDate === 'string')\n this.endDate = moment(endDate, this.locale.format);\n\n if (typeof endDate === 'object')\n this.endDate = moment(endDate);\n\n if (!this.timePicker)\n this.endDate = this.endDate.add(1,'d').startOf('day').subtract(1,'second');\n\n if (this.timePicker && this.timePickerIncrement)\n this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n if (this.endDate.isBefore(this.startDate))\n this.endDate = this.startDate.clone();\n\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\n this.endDate = this.maxDate.clone();\n\n if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))\n this.endDate = this.startDate.clone().add(this.dateLimit);\n\n this.previousRightTime = this.endDate.clone();\n\n if (!this.isShowing)\n this.updateElement();\n\n this.updateMonthsInView();\n },\n\n isInvalidDate: function() {\n return false;\n },\n\n isCustomDate: function() {\n return false;\n },\n\n updateView: function() {\n if (this.timePicker) {\n this.renderTimePicker('left');\n this.renderTimePicker('right');\n if (!this.endDate) {\n this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');\n } else {\n this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');\n }\n }\n if (this.endDate) {\n this.container.find('input[name=\"daterangepicker_end\"]').removeClass('active');\n this.container.find('input[name=\"daterangepicker_start\"]').addClass('active');\n } else {\n this.container.find('input[name=\"daterangepicker_end\"]').addClass('active');\n this.container.find('input[name=\"daterangepicker_start\"]').removeClass('active');\n }\n this.updateMonthsInView();\n this.updateCalendars();\n this.updateFormInputs();\n },\n\n updateMonthsInView: function() {\n if (this.endDate) {\n\n //if both dates are visible already, do nothing\n if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\n (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n &&\n (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n ) {\n return;\n }\n\n this.leftCalendar.month = this.startDate.clone().date(2);\n if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\n this.rightCalendar.month = this.endDate.clone().date(2);\n } else {\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n }\n\n } else {\n if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\n this.leftCalendar.month = this.startDate.clone().date(2);\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n }\n }\n if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\n this.rightCalendar.month = this.maxDate.clone().date(2);\n this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\n }\n },\n\n updateCalendars: function() {\n\n if (this.timePicker) {\n var hour, minute, second;\n if (this.endDate) {\n hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n if (!this.timePicker24Hour) {\n var ampm = this.container.find('.left .ampmselect').val();\n if (ampm === 'PM' && hour < 12)\n hour += 12;\n if (ampm === 'AM' && hour === 12)\n hour = 0;\n }\n } else {\n hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n if (!this.timePicker24Hour) {\n var ampm = this.container.find('.right .ampmselect').val();\n if (ampm === 'PM' && hour < 12)\n hour += 12;\n if (ampm === 'AM' && hour === 12)\n hour = 0;\n }\n }\n this.leftCalendar.month.hour(hour).minute(minute).second(second);\n this.rightCalendar.month.hour(hour).minute(minute).second(second);\n }\n\n this.renderCalendar('left');\n this.renderCalendar('right');\n\n //highlight any predefined range matching the current start and end dates\n this.container.find('.ranges li').removeClass('active');\n if (this.endDate == null) return;\n\n this.calculateChosenLabel();\n },\n\n renderCalendar: function(side) {\n\n //\n // Build the matrix of dates that will populate the calendar\n //\n\n var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\n var month = calendar.month.month();\n var year = calendar.month.year();\n var hour = calendar.month.hour();\n var minute = calendar.month.minute();\n var second = calendar.month.second();\n var daysInMonth = moment([year, month]).daysInMonth();\n var firstDay = moment([year, month, 1]);\n var lastDay = moment([year, month, daysInMonth]);\n var lastMonth = moment(firstDay).subtract(1, 'month').month();\n var lastYear = moment(firstDay).subtract(1, 'month').year();\n var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\n var dayOfWeek = firstDay.day();\n\n //initialize a 6 rows x 7 columns array for the calendar\n var calendar = [];\n calendar.firstDay = firstDay;\n calendar.lastDay = lastDay;\n\n for (var i = 0; i < 6; i++) {\n calendar[i] = [];\n }\n\n //populate the calendar with date objects\n var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n if (startDay > daysInLastMonth)\n startDay -= 7;\n\n if (dayOfWeek == this.locale.firstDay)\n startDay = daysInLastMonth - 6;\n\n var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\n\n var col, row;\n for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\n if (i > 0 && col % 7 === 0) {\n col = 0;\n row++;\n }\n calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n curDate.hour(12);\n\n if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\n calendar[row][col] = this.minDate.clone();\n }\n\n if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\n calendar[row][col] = this.maxDate.clone();\n }\n\n }\n\n //make the calendar object available to hoverDate/clickDate\n if (side == 'left') {\n this.leftCalendar.calendar = calendar;\n } else {\n this.rightCalendar.calendar = calendar;\n }\n\n //\n // Display the calendar\n //\n\n var minDate = side == 'left' ? this.minDate : this.startDate;\n var maxDate = this.maxDate;\n var selected = side == 'left' ? this.startDate : this.endDate;\n var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};\n\n var html = '<table class=\"table-condensed\">';\n html += '<thead>';\n html += '<tr>';\n\n // add empty cell for week number\n if (this.showWeekNumbers || this.showISOWeekNumbers)\n html += '<th></th>';\n\n if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\n html += '<th class=\"prev available\"><i class=\"fa fa-' + arrow.left + ' glyphicon glyphicon-' + arrow.left + '\"></i></th>';\n } else {\n html += '<th></th>';\n }\n\n var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\n\n if (this.showDropdowns) {\n var currentMonth = calendar[1][1].month();\n var currentYear = calendar[1][1].year();\n var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);\n var minYear = (minDate && minDate.year()) || (currentYear - 50);\n var inMinYear = currentYear == minYear;\n var inMaxYear = currentYear == maxYear;\n\n var monthHtml = '<select class=\"monthselect\">';\n for (var m = 0; m < 12; m++) {\n if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {\n monthHtml += \"<option value='\" + m + \"'\" +\n (m === currentMonth ? \" selected='selected'\" : \"\") +\n \">\" + this.locale.monthNames[m] + \"</option>\";\n } else {\n monthHtml += \"<option value='\" + m + \"'\" +\n (m === currentMonth ? \" selected='selected'\" : \"\") +\n \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\n }\n }\n monthHtml += \"</select>\";\n\n var yearHtml = '<select class=\"yearselect\">';\n for (var y = minYear; y <= maxYear; y++) {\n yearHtml += '<option value=\"' + y + '\"' +\n (y === currentYear ? ' selected=\"selected\"' : '') +\n '>' + y + '</option>';\n }\n yearHtml += '</select>';\n\n dateHtml = monthHtml + yearHtml;\n }\n\n html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\n if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\n html += '<th class=\"next available\"><i class=\"fa fa-' + arrow.right + ' glyphicon glyphicon-' + arrow.right + '\"></i></th>';\n } else {\n html += '<th></th>';\n }\n\n html += '</tr>';\n html += '<tr>';\n\n // add week number label\n if (this.showWeekNumbers || this.showISOWeekNumbers)\n html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\n\n $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\n html += '<th>' + dayOfWeek + '</th>';\n });\n\n html += '</tr>';\n html += '</thead>';\n html += '<tbody>';\n\n //adjust maxDate to reflect the dateLimit setting in order to\n //grey out end dates beyond the dateLimit\n if (this.endDate == null && this.dateLimit) {\n var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');\n if (!maxDate || maxLimit.isBefore(maxDate)) {\n maxDate = maxLimit;\n }\n }\n\n for (var row = 0; row < 6; row++) {\n html += '<tr>';\n\n // add week number\n if (this.showWeekNumbers)\n html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\n else if (this.showISOWeekNumbers)\n html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\n\n for (var col = 0; col < 7; col++) {\n\n var classes = [];\n\n //highlight today's date\n if (calendar[row][col].isSame(new Date(), \"day\"))\n classes.push('today');\n\n //highlight weekends\n if (calendar[row][col].isoWeekday() > 5)\n classes.push('weekend');\n\n //grey out the dates in other months displayed at beginning and end of this calendar\n if (calendar[row][col].month() != calendar[1][1].month())\n classes.push('off');\n\n //don't allow selection of dates before the minimum date\n if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\n classes.push('off', 'disabled');\n\n //don't allow selection of dates after the maximum date\n if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\n classes.push('off', 'disabled');\n\n //don't allow selection of date if a custom function decides it's invalid\n if (this.isInvalidDate(calendar[row][col]))\n classes.push('off', 'disabled');\n\n //highlight the currently selected start date\n if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\n classes.push('active', 'start-date');\n\n //highlight the currently selected end date\n if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\n classes.push('active', 'end-date');\n\n //highlight dates in-between the selected dates\n if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\n classes.push('in-range');\n\n //apply custom classes for this date\n var isCustom = this.isCustomDate(calendar[row][col]);\n if (isCustom !== false) {\n if (typeof isCustom === 'string')\n classes.push(isCustom);\n else\n Array.prototype.push.apply(classes, isCustom);\n }\n\n var cname = '', disabled = false;\n for (var i = 0; i < classes.length; i++) {\n cname += classes[i] + ' ';\n if (classes[i] == 'disabled')\n disabled = true;\n }\n if (!disabled)\n cname += 'available';\n\n html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\n\n }\n html += '</tr>';\n }\n\n html += '</tbody>';\n html += '</table>';\n\n this.container.find('.calendar.' + side + ' .calendar-table').html(html);\n\n },\n\n renderTimePicker: function(side) {\n\n // Don't bother updating the time picker if it's currently disabled\n // because an end date hasn't been clicked yet\n if (side == 'right' && !this.endDate) return;\n\n var html, selected, minDate, maxDate = this.maxDate;\n\n if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))\n maxDate = this.startDate.clone().add(this.dateLimit);\n\n if (side == 'left') {\n selected = this.startDate.clone();\n minDate = this.minDate;\n } else if (side == 'right') {\n selected = this.endDate.clone();\n minDate = this.startDate;\n\n //Preserve the time already selected\n var timeSelector = this.container.find('.calendar.right .calendar-time div');\n if (timeSelector.html() != '') {\n\n selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());\n selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());\n selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());\n\n if (!this.timePicker24Hour) {\n var ampm = timeSelector.find('.ampmselect option:selected').val();\n if (ampm === 'PM' && selected.hour() < 12)\n selected.hour(selected.hour() + 12);\n if (ampm === 'AM' && selected.hour() === 12)\n selected.hour(0);\n }\n\n }\n\n if (selected.isBefore(this.startDate))\n selected = this.startDate.clone();\n\n if (maxDate && selected.isAfter(maxDate))\n selected = maxDate.clone();\n\n }\n\n //\n // hours\n //\n\n html = '<select class=\"hourselect\">';\n\n var start = this.timePicker24Hour ? 0 : 1;\n var end = this.timePicker24Hour ? 23 : 12;\n\n for (var i = start; i <= end; i++) {\n var i_in_24 = i;\n if (!this.timePicker24Hour)\n i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\n\n var time = selected.clone().hour(i_in_24);\n var disabled = false;\n if (minDate && time.minute(59).isBefore(minDate))\n disabled = true;\n if (maxDate && time.minute(0).isAfter(maxDate))\n disabled = true;\n\n if (i_in_24 == selected.hour() && !disabled) {\n html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\n } else if (disabled) {\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\n } else {\n html += '<option value=\"' + i + '\">' + i + '</option>';\n }\n }\n\n html += '</select> ';\n\n //\n // minutes\n //\n\n html += ': <select class=\"minuteselect\">';\n\n for (var i = 0; i < 60; i += this.timePickerIncrement) {\n var padded = i < 10 ? '0' + i : i;\n var time = selected.clone().minute(i);\n\n var disabled = false;\n if (minDate && time.second(59).isBefore(minDate))\n disabled = true;\n if (maxDate && time.second(0).isAfter(maxDate))\n disabled = true;\n\n if (selected.minute() == i && !disabled) {\n html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n } else if (disabled) {\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n } else {\n html += '<option value=\"' + i + '\">' + padded + '</option>';\n }\n }\n\n html += '</select> ';\n\n //\n // seconds\n //\n\n if (this.timePickerSeconds) {\n html += ': <select class=\"secondselect\">';\n\n for (var i = 0; i < 60; i++) {\n var padded = i < 10 ? '0' + i : i;\n var time = selected.clone().second(i);\n\n var disabled = false;\n if (minDate && time.isBefore(minDate))\n disabled = true;\n if (maxDate && time.isAfter(maxDate))\n disabled = true;\n\n if (selected.second() == i && !disabled) {\n html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n } else if (disabled) {\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n } else {\n html += '<option value=\"' + i + '\">' + padded + '</option>';\n }\n }\n\n html += '</select> ';\n }\n\n //\n // AM/PM\n //\n\n if (!this.timePicker24Hour) {\n html += '<select class=\"ampmselect\">';\n\n var am_html = '';\n var pm_html = '';\n\n if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\n am_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\n pm_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n if (selected.hour() >= 12) {\n html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\n } else {\n html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\n }\n\n html += '</select>';\n }\n\n this.container.find('.calendar.' + side + ' .calendar-time div').html(html);\n\n },\n\n updateFormInputs: function() {\n\n //ignore mouse movements while an above-calendar text input has focus\n if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n return;\n\n this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));\n if (this.endDate)\n this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));\n\n if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\n this.container.find('button.applyBtn').removeAttr('disabled');\n } else {\n this.container.find('button.applyBtn').attr('disabled', 'disabled');\n }\n\n },\n\n move: function() {\n var parentOffset = { top: 0, left: 0 },\n containerTop;\n var parentRightEdge = $(window).width();\n if (!this.parentEl.is('body')) {\n parentOffset = {\n top: this.parentEl.offset().top - this.parentEl.scrollTop(),\n left: this.parentEl.offset().left - this.parentEl.scrollLeft()\n };\n parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\n }\n\n if (this.drops == 'up')\n containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n else\n containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');\n\n if (this.opens == 'left') {\n this.container.css({\n top: containerTop,\n right: parentRightEdge - this.element.offset().left - this.element.outerWidth(),\n left: 'auto'\n });\n if (this.container.offset().left < 0) {\n this.container.css({\n right: 'auto',\n left: 9\n });\n }\n } else if (this.opens == 'center') {\n this.container.css({\n top: containerTop,\n left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\n - this.container.outerWidth() / 2,\n right: 'auto'\n });\n if (this.container.offset().left < 0) {\n this.container.css({\n right: 'auto',\n left: 9\n });\n }\n } else {\n this.container.css({\n top: containerTop,\n left: this.element.offset().left - parentOffset.left,\n right: 'auto'\n });\n if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {\n this.container.css({\n left: 'auto',\n right: 0\n });\n }\n }\n },\n\n show: function(e) {\n if (this.isShowing) return;\n\n // Create a click proxy that is private to this instance of datepicker, for unbinding\n this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\n\n // Bind global datepicker mousedown for hiding and\n $(document)\n .on('mousedown.daterangepicker', this._outsideClickProxy)\n // also support mobile devices\n .on('touchend.daterangepicker', this._outsideClickProxy)\n // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\n .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\n // and also close when focus changes to outside the picker (eg. tabbing between controls)\n .on('focusin.daterangepicker', this._outsideClickProxy);\n\n // Reposition the picker if the window is resized while it's open\n $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\n\n this.oldStartDate = this.startDate.clone();\n this.oldEndDate = this.endDate.clone();\n this.previousRightTime = this.endDate.clone();\n\n this.updateView();\n this.container.show();\n this.move();\n this.element.trigger('show.daterangepicker', this);\n this.isShowing = true;\n },\n\n hide: function(e) {\n if (!this.isShowing) return;\n\n //incomplete date selection, revert to last values\n if (!this.endDate) {\n this.startDate = this.oldStartDate.clone();\n this.endDate = this.oldEndDate.clone();\n }\n\n //if a new date range was selected, invoke the user callback function\n if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\n this.callback(this.startDate, this.endDate, this.chosenLabel);\n\n //if picker is attached to a text input, update it\n this.updateElement();\n\n $(document).off('.daterangepicker');\n $(window).off('.daterangepicker');\n this.container.hide();\n this.element.trigger('hide.daterangepicker', this);\n this.isShowing = false;\n },\n\n toggle: function(e) {\n if (this.isShowing) {\n this.hide();\n } else {\n this.show();\n }\n },\n\n outsideClick: function(e) {\n var target = $(e.target);\n // if the page is clicked anywhere except within the daterangerpicker/button\n // itself then call this.hide()\n if (\n // ie modal dialog fix\n e.type == \"focusin\" ||\n target.closest(this.element).length ||\n target.closest(this.container).length ||\n target.closest('.calendar-table').length\n ) return;\n this.hide();\n this.element.trigger('outsideClick.daterangepicker', this);\n },\n\n showCalendars: function() {\n this.container.addClass('show-calendar');\n this.move();\n this.element.trigger('showCalendar.daterangepicker', this);\n },\n\n hideCalendars: function() {\n this.container.removeClass('show-calendar');\n this.element.trigger('hideCalendar.daterangepicker', this);\n },\n\n hoverRange: function(e) {\n\n //ignore mouse movements while an above-calendar text input has focus\n if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n return;\n\n var label = e.target.getAttribute('data-range-key');\n\n if (label == this.locale.customRangeLabel) {\n this.updateView();\n } else {\n var dates = this.ranges[label];\n this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));\n this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));\n }\n\n },\n\n clickRange: function(e) {\n var label = e.target.getAttribute('data-range-key');\n this.chosenLabel = label;\n if (label == this.locale.customRangeLabel) {\n this.showCalendars();\n } else {\n var dates = this.ranges[label];\n this.startDate = dates[0];\n this.endDate = dates[1];\n\n if (!this.timePicker) {\n this.startDate.startOf('day');\n this.endDate.endOf('day');\n }\n\n if (!this.alwaysShowCalendars)\n this.hideCalendars();\n this.clickApply();\n }\n },\n\n clickPrev: function(e) {\n var cal = $(e.target).parents('.calendar');\n if (cal.hasClass('left')) {\n this.leftCalendar.month.subtract(1, 'month');\n if (this.linkedCalendars)\n this.rightCalendar.month.subtract(1, 'month');\n } else {\n this.rightCalendar.month.subtract(1, 'month');\n }\n this.updateCalendars();\n },\n\n clickNext: function(e) {\n var cal = $(e.target).parents('.calendar');\n if (cal.hasClass('left')) {\n this.leftCalendar.month.add(1, 'month');\n } else {\n this.rightCalendar.month.add(1, 'month');\n if (this.linkedCalendars)\n this.leftCalendar.month.add(1, 'month');\n }\n this.updateCalendars();\n },\n\n hoverDate: function(e) {\n\n //ignore mouse movements while an above-calendar text input has focus\n //if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n // return;\n\n //ignore dates that can't be selected\n if (!$(e.target).hasClass('available')) return;\n\n //have the text inputs above calendars reflect the date being hovered over\n var title = $(e.target).attr('data-title');\n var row = title.substr(1, 1);\n var col = title.substr(3, 1);\n var cal = $(e.target).parents('.calendar');\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(\":focus\")) {\n this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));\n } else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(\":focus\")) {\n this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));\n }\n\n //highlight the dates between the start date and the date being hovered as a potential end date\n var leftCalendar = this.leftCalendar;\n var rightCalendar = this.rightCalendar;\n var startDate = this.startDate;\n if (!this.endDate) {\n this.container.find('.calendar tbody td').each(function(index, el) {\n\n //skip week numbers, only look at dates\n if ($(el).hasClass('week')) return;\n\n var title = $(el).attr('data-title');\n var row = title.substr(1, 1);\n var col = title.substr(3, 1);\n var cal = $(el).parents('.calendar');\n var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\n\n if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\n $(el).addClass('in-range');\n } else {\n $(el).removeClass('in-range');\n }\n\n });\n }\n\n },\n\n clickDate: function(e) {\n\n if (!$(e.target).hasClass('available')) return;\n\n var title = $(e.target).attr('data-title');\n var row = title.substr(1, 1);\n var col = title.substr(3, 1);\n var cal = $(e.target).parents('.calendar');\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n //\n // this function needs to do a few things:\n // * alternate between selecting a start and end date for the range,\n // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\n // * if autoapply is enabled, and an end date was chosen, apply the selection\n // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\n // * if one of the inputs above the calendars was focused, cancel that manual input\n //\n\n if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\n if (this.timePicker) {\n var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n if (!this.timePicker24Hour) {\n var ampm = this.container.find('.left .ampmselect').val();\n if (ampm === 'PM' && hour < 12)\n hour += 12;\n if (ampm === 'AM' && hour === 12)\n hour = 0;\n }\n var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n date = date.clone().hour(hour).minute(minute).second(second);\n }\n this.endDate = null;\n this.setStartDate(date.clone());\n } else if (!this.endDate && date.isBefore(this.startDate)) {\n //special case: clicking the same date for start/end,\n //but the time of the end date is before the start date\n this.setEndDate(this.startDate.clone());\n } else { // picking end\n if (this.timePicker) {\n var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n if (!this.timePicker24Hour) {\n var ampm = this.container.find('.right .ampmselect').val();\n if (ampm === 'PM' && hour < 12)\n hour += 12;\n if (ampm === 'AM' && hour === 12)\n hour = 0;\n }\n var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n date = date.clone().hour(hour).minute(minute).second(second);\n }\n this.setEndDate(date.clone());\n if (this.autoApply) {\n this.calculateChosenLabel();\n this.clickApply();\n }\n }\n\n if (this.singleDatePicker) {\n this.setEndDate(this.startDate);\n if (!this.timePicker)\n this.clickApply();\n }\n\n this.updateView();\n\n //This is to cancel the blur event handler if the mouse was in one of the inputs\n e.stopPropagation();\n\n },\n\n calculateChosenLabel: function () {\n var customRange = true;\n var i = 0;\n for (var range in this.ranges) {\n if (this.timePicker) {\n var format = this.timePickerSeconds ? \"YYYY-MM-DD hh:mm:ss\" : \"YYYY-MM-DD hh:mm\";\n //ignore times when comparing dates if time picker seconds is not enabled\n if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\n customRange = false;\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n break;\n }\n } else {\n //ignore times when comparing dates if time picker is not enabled\n if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\n customRange = false;\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n break;\n }\n }\n i++;\n }\n if (customRange) {\n if (this.showCustomRangeLabel) {\n this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();\n } else {\n this.chosenLabel = null;\n }\n this.showCalendars();\n }\n },\n\n clickApply: function(e) {\n this.hide();\n this.element.trigger('apply.daterangepicker', this);\n },\n\n clickCancel: function(e) {\n this.startDate = this.oldStartDate;\n this.endDate = this.oldEndDate;\n this.hide();\n this.element.trigger('cancel.daterangepicker', this);\n },\n\n monthOrYearChanged: function(e) {\n var isLeft = $(e.target).closest('.calendar').hasClass('left'),\n leftOrRight = isLeft ? 'left' : 'right',\n cal = this.container.find('.calendar.'+leftOrRight);\n\n // Month must be Number for new moment versions\n var month = parseInt(cal.find('.monthselect').val(), 10);\n var year = cal.find('.yearselect').val();\n\n if (!isLeft) {\n if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\n month = this.startDate.month();\n year = this.startDate.year();\n }\n }\n\n if (this.minDate) {\n if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\n month = this.minDate.month();\n year = this.minDate.year();\n }\n }\n\n if (this.maxDate) {\n if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\n month = this.maxDate.month();\n year = this.maxDate.year();\n }\n }\n\n if (isLeft) {\n this.leftCalendar.month.month(month).year(year);\n if (this.linkedCalendars)\n this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\n } else {\n this.rightCalendar.month.month(month).year(year);\n if (this.linkedCalendars)\n this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\n }\n this.updateCalendars();\n },\n\n timeChanged: function(e) {\n\n var cal = $(e.target).closest('.calendar'),\n isLeft = cal.hasClass('left');\n\n var hour = parseInt(cal.find('.hourselect').val(), 10);\n var minute = parseInt(cal.find('.minuteselect').val(), 10);\n var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\n\n if (!this.timePicker24Hour) {\n var ampm = cal.find('.ampmselect').val();\n if (ampm === 'PM' && hour < 12)\n hour += 12;\n if (ampm === 'AM' && hour === 12)\n hour = 0;\n }\n\n if (isLeft) {\n var start = this.startDate.clone();\n start.hour(hour);\n start.minute(minute);\n start.second(second);\n this.setStartDate(start);\n if (this.singleDatePicker) {\n this.endDate = this.startDate.clone();\n } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\n this.setEndDate(start.clone());\n }\n } else if (this.endDate) {\n var end = this.endDate.clone();\n end.hour(hour);\n end.minute(minute);\n end.second(second);\n this.setEndDate(end);\n }\n\n //update the calendars so all clickable dates reflect the new time component\n this.updateCalendars();\n\n //update the form inputs above the calendars with the new time\n this.updateFormInputs();\n\n //re-render the time pickers because changing one selection can affect what's enabled in another\n this.renderTimePicker('left');\n this.renderTimePicker('right');\n\n },\n\n formInputsChanged: function(e) {\n var isRight = $(e.target).closest('.calendar').hasClass('right');\n var start = moment(this.container.find('input[name=\"daterangepicker_start\"]').val(), this.locale.format);\n var end = moment(this.container.find('input[name=\"daterangepicker_end\"]').val(), this.locale.format);\n\n if (start.isValid() && end.isValid()) {\n\n if (isRight && end.isBefore(start))\n start = end.clone();\n\n this.setStartDate(start);\n this.setEndDate(end);\n\n if (isRight) {\n this.container.find('input[name=\"daterangepicker_start\"]').val(this.startDate.format(this.locale.format));\n } else {\n this.container.find('input[name=\"daterangepicker_end\"]').val(this.endDate.format(this.locale.format));\n }\n\n }\n\n this.updateView();\n },\n\n formInputsFocused: function(e) {\n\n // Highlight the focused input\n this.container.find('input[name=\"daterangepicker_start\"], input[name=\"daterangepicker_end\"]').removeClass('active');\n $(e.target).addClass('active');\n\n // Set the state such that if the user goes back to using a mouse, \n // the calendars are aware we're selecting the end of the range, not\n // the start. This allows someone to edit the end of a date range without\n // re-selecting the beginning, by clicking on the end date input then\n // using the calendar.\n var isRight = $(e.target).closest('.calendar').hasClass('right');\n if (isRight) {\n this.endDate = null;\n this.setStartDate(this.startDate.clone());\n this.updateView();\n }\n\n },\n\n formInputsBlurred: function(e) {\n\n // this function has one purpose right now: if you tab from the first\n // text input to the second in the UI, the endDate is nulled so that\n // you can click another, but if you tab out without clicking anything\n // or changing the input value, the old endDate should be retained\n\n if (!this.endDate) {\n var val = this.container.find('input[name=\"daterangepicker_end\"]').val();\n var end = moment(val, this.locale.format);\n if (end.isValid()) {\n this.setEndDate(end);\n this.updateView();\n }\n }\n\n },\n\n formInputsKeydown: function(e) {\n // This function ensures that if the 'enter' key was pressed in the input, then the calendars\n // are updated with the startDate and endDate.\n // This behaviour is automatic in Chrome/Firefox/Edge but not in IE 11 hence why this exists.\n // Other browsers and versions of IE are untested and the behaviour is unknown.\n if (e.keyCode === 13) {\n // Prevent the calendar from being updated twice on Chrome/Firefox/Edge\n e.preventDefault(); \n this.formInputsChanged(e);\n }\n },\n\n\n elementChanged: function() {\n if (!this.element.is('input')) return;\n if (!this.element.val().length) return;\n\n var dateString = this.element.val().split(this.locale.separator),\n start = null,\n end = null;\n\n if (dateString.length === 2) {\n start = moment(dateString[0], this.locale.format);\n end = moment(dateString[1], this.locale.format);\n }\n\n if (this.singleDatePicker || start === null || end === null) {\n start = moment(this.element.val(), this.locale.format);\n end = start;\n }\n\n if (!start.isValid() || !end.isValid()) return;\n\n this.setStartDate(start);\n this.setEndDate(end);\n this.updateView();\n },\n\n keydown: function(e) {\n //hide on tab or enter\n if ((e.keyCode === 9) || (e.keyCode === 13)) {\n this.hide();\n }\n\n //hide on esc and prevent propagation\n if (e.keyCode === 27) {\n e.preventDefault();\n e.stopPropagation();\n\n this.hide();\n }\n },\n\n updateElement: function() {\n if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n this.element.trigger('change');\n } else if (this.element.is('input') && this.autoUpdateInput) {\n this.element.val(this.startDate.format(this.locale.format));\n this.element.trigger('change');\n }\n },\n\n remove: function() {\n this.container.remove();\n this.element.off('.daterangepicker');\n this.element.removeData();\n }\n\n };\n\n $.fn.daterangepicker = function(options, callback) {\n var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\n this.each(function() {\n var el = $(this);\n if (el.data('daterangepicker'))\n el.data('daterangepicker').remove();\n el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));\n });\n return this;\n };\n\n return DateRangePicker;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1kYXRlcmFuZ2VwaWNrZXIvZGF0ZXJhbmdlcGlja2VyLmpzPzk2MDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsU0FBUztBQUFBO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7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RXhGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjs7QUFFQSxTQUFTOztBQUVUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAdmVyc2lvbjogMi4xLjI3XG4qIEBhdXRob3I6IERhbiBHcm9zc21hbiBodHRwOi8vd3d3LmRhbmdyb3NzbWFuLmluZm8vXG4qIEBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAxMi0yMDE3IERhbiBHcm9zc21hbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogQGxpY2Vuc2U6IExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4gU2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4qIEB3ZWJzaXRlOiBodHRwOi8vd3d3LmRhdGVyYW5nZXBpY2tlci5jb20vXG4qL1xuLy8gRm9sbG93IHRoZSBVTUQgdGVtcGxhdGUgaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci90ZW1wbGF0ZXMvcmV0dXJuRXhwb3J0c0dsb2JhbC5qc1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIE1ha2UgZ2xvYmFseSBhdmFpbGFibGUgYXMgd2VsbFxuICAgICAgICBkZWZpbmUoWydtb21lbnQnLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChtb21lbnQsIGpxdWVyeSkge1xuICAgICAgICAgICAgaWYgKCFqcXVlcnkuZm4pIGpxdWVyeS5mbiA9IHt9OyAvLyB3ZWJwYWNrIHNlcnZlciByZW5kZXJpbmdcbiAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KG1vbWVudCwganF1ZXJ5KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAvLyBOb2RlIC8gQnJvd3NlcmlmeVxuICAgICAgICAvL2lzb21vcnBoaWMgaXNzdWVcbiAgICAgICAgdmFyIGpRdWVyeSA9ICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5qUXVlcnkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghalF1ZXJ5KSB7XG4gICAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKTtcbiAgICAgICAgICAgIGlmICghalF1ZXJ5LmZuKSBqUXVlcnkuZm4gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9tZW50ID0gKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tb21lbnQgIT0gJ3VuZGVmaW5lZCcpID8gd2luZG93Lm1vbWVudCA6IHJlcXVpcmUoJ21vbWVudCcpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50LCBqUXVlcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgICAgICByb290LmRhdGVyYW5nZXBpY2tlciA9IGZhY3Rvcnkocm9vdC5tb21lbnQsIHJvb3QualF1ZXJ5KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKG1vbWVudCwgJCkge1xuICAgIHZhciBEYXRlUmFuZ2VQaWNrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCBjYikge1xuXG4gICAgICAgIC8vZGVmYXVsdCBzZXR0aW5ncyBmb3Igb3B0aW9uc1xuICAgICAgICB0aGlzLnBhcmVudEVsID0gJ2JvZHknO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQoKS5lbmRPZignZGF5Jyk7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1heERhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRlTGltaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvQXBwbHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaW5nbGVEYXRlUGlja2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3ducyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dJU09XZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dDdXN0b21SYW5nZUxhYmVsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZVBpY2tlcjI0SG91ciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQgPSAxO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGlua2VkQ2FsZW5kYXJzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSB7fTtcblxuICAgICAgICB0aGlzLm9wZW5zID0gJ3JpZ2h0JztcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oYXNDbGFzcygncHVsbC1yaWdodCcpKVxuICAgICAgICAgICAgdGhpcy5vcGVucyA9ICdsZWZ0JztcblxuICAgICAgICB0aGlzLmRyb3BzID0gJ2Rvd24nO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Lmhhc0NsYXNzKCdkcm9wdXAnKSlcbiAgICAgICAgICAgIHRoaXMuZHJvcHMgPSAndXAnO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uQ2xhc3NlcyA9ICdidG4gYnRuLXNtJztcbiAgICAgICAgdGhpcy5hcHBseUNsYXNzID0gJ2J0bi1zdWNjZXNzJztcbiAgICAgICAgdGhpcy5jYW5jZWxDbGFzcyA9ICdidG4tZGVmYXVsdCc7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSB7XG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgICAgICAgZm9ybWF0OiBtb21lbnQubG9jYWxlRGF0YSgpLmxvbmdEYXRlRm9ybWF0KCdMJyksXG4gICAgICAgICAgICBzZXBhcmF0b3I6ICcgLSAnLFxuICAgICAgICAgICAgYXBwbHlMYWJlbDogJ0FwcGx5JyxcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgIHdlZWtMYWJlbDogJ1cnLFxuICAgICAgICAgICAgY3VzdG9tUmFuZ2VMYWJlbDogJ0N1c3RvbSBSYW5nZScsXG4gICAgICAgICAgICBkYXlzT2ZXZWVrOiBtb21lbnQud2Vla2RheXNNaW4oKSxcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IG1vbWVudC5tb250aHNTaG9ydCgpLFxuICAgICAgICAgICAgZmlyc3REYXk6IG1vbWVudC5sb2NhbGVEYXRhKCkuZmlyc3REYXlPZldlZWsoKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsgfTtcblxuICAgICAgICAvL3NvbWUgc3RhdGUgaW5mb3JtYXRpb25cbiAgICAgICAgdGhpcy5pc1Nob3dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIgPSB7fTtcbiAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyID0ge307XG5cbiAgICAgICAgLy9jdXN0b20gb3B0aW9ucyBmcm9tIHVzZXJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyB8fCBvcHRpb25zID09PSBudWxsKVxuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIC8vYWxsb3cgc2V0dGluZyBvcHRpb25zIHdpdGggZGF0YSBhdHRyaWJ1dGVzXG4gICAgICAgIC8vZGF0YS1hcGkgb3B0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggY3VzdG9tIGphdmFzY3JpcHQgb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gJC5leHRlbmQodGhpcy5lbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICAgICAgLy9odG1sIHRlbXBsYXRlIGZvciB0aGUgcGlja2VyIFVJXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50ZW1wbGF0ZSAhPT0gJ3N0cmluZycgJiYgIShvcHRpb25zLnRlbXBsYXRlIGluc3RhbmNlb2YgJCkpXG4gICAgICAgICAgICBvcHRpb25zLnRlbXBsYXRlID0gJzxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXIgZHJvcGRvd24tbWVudVwiPicgK1xuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXIgbGVmdFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlcl9pbnB1dFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJpbnB1dC1taW5pIGZvcm0tY29udHJvbFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRhdGVyYW5nZXBpY2tlcl9zdGFydFwiIHZhbHVlPVwiXCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciBnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyXCI+PC9pPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGltZVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXY+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jbG9jay1vIGdseXBoaWNvbiBnbHlwaGljb24tdGltZVwiPjwvaT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjYWxlbmRhci10YWJsZVwiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImNhbGVuZGFyIHJpZ2h0XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyX2lucHV0XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cImlucHV0LW1pbmkgZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX2VuZFwiIHZhbHVlPVwiXCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciBnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyXCI+PC9pPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGltZVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXY+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jbG9jay1vIGdseXBoaWNvbiBnbHlwaGljb24tdGltZVwiPjwvaT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjYWxlbmRhci10YWJsZVwiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInJhbmdlc1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInJhbmdlX2lucHV0c1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJhcHBseUJ0blwiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJjYW5jZWxCdG5cIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcblxuICAgICAgICB0aGlzLnBhcmVudEVsID0gKG9wdGlvbnMucGFyZW50RWwgJiYgJChvcHRpb25zLnBhcmVudEVsKS5sZW5ndGgpID8gJChvcHRpb25zLnBhcmVudEVsKSA6ICQodGhpcy5wYXJlbnRFbCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gJChvcHRpb25zLnRlbXBsYXRlKS5hcHBlbmRUbyh0aGlzLnBhcmVudEVsKTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBoYW5kbGUgYWxsIHRoZSBwb3NzaWJsZSBvcHRpb25zIG92ZXJyaWRpbmcgZGVmYXVsdHNcbiAgICAgICAgLy9cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlID09PSAnb2JqZWN0Jykge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRpcmVjdGlvbiA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGlyZWN0aW9uID0gb3B0aW9ucy5sb2NhbGUuZGlyZWN0aW9uO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmZvcm1hdCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZm9ybWF0ID0gb3B0aW9ucy5sb2NhbGUuZm9ybWF0O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLnNlcGFyYXRvciA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuc2VwYXJhdG9yID0gb3B0aW9ucy5sb2NhbGUuc2VwYXJhdG9yO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRheXNPZldlZWsgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlLmRheXNPZldlZWsgPSBvcHRpb25zLmxvY2FsZS5kYXlzT2ZXZWVrLnNsaWNlKCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUubW9udGhOYW1lcyA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLm1vbnRoTmFtZXMgPSBvcHRpb25zLmxvY2FsZS5tb250aE5hbWVzLnNsaWNlKCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUuZmlyc3REYXkgPT09ICdudW1iZXInKVxuICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5maXJzdERheSA9IG9wdGlvbnMubG9jYWxlLmZpcnN0RGF5O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmFwcGx5TGFiZWwgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5hcHBseUxhYmVsID0gb3B0aW9ucy5sb2NhbGUuYXBwbHlMYWJlbDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2FsZS5jYW5jZWxMYWJlbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLmNhbmNlbExhYmVsID0gb3B0aW9ucy5sb2NhbGUuY2FuY2VsTGFiZWw7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUud2Vla0xhYmVsID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUud2Vla0xhYmVsID0gb3B0aW9ucy5sb2NhbGUud2Vla0xhYmVsO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgICAgICAvL1N1cHBvcnQgdW5pY29kZSBjaGFycyBpbiB0aGUgY3VzdG9tIHJhbmdlIG5hbWUuXG4gICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gb3B0aW9ucy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbDtcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VIdG1sID0gZWxlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsID0gcmFuZ2VIdG1sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKHRoaXMubG9jYWxlLmRpcmVjdGlvbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnN0YXJ0RGF0ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudChvcHRpb25zLnN0YXJ0RGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW5kRGF0ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQob3B0aW9ucy5lbmREYXRlLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW5EYXRlID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG1vbWVudChvcHRpb25zLm1pbkRhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heERhdGUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbW9tZW50KG9wdGlvbnMubWF4RGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RhcnREYXRlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gbW9tZW50KG9wdGlvbnMuc3RhcnREYXRlKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW5kRGF0ZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQob3B0aW9ucy5lbmREYXRlKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWluRGF0ZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBtb21lbnQob3B0aW9ucy5taW5EYXRlKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4RGF0ZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICB0aGlzLm1heERhdGUgPSBtb21lbnQob3B0aW9ucy5tYXhEYXRlKTtcblxuICAgICAgICAvLyBzYW5pdHkgY2hlY2sgZm9yIGJhZCBvcHRpb25zXG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5zdGFydERhdGUuaXNCZWZvcmUodGhpcy5taW5EYXRlKSlcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XG5cbiAgICAgICAgLy8gc2FuaXR5IGNoZWNrIGZvciBiYWQgb3B0aW9uc1xuICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuZW5kRGF0ZS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkpXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXBwbHlDbGFzcyA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q2xhc3MgPSBvcHRpb25zLmFwcGx5Q2xhc3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhbmNlbENsYXNzID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2xhc3MgPSBvcHRpb25zLmNhbmNlbENsYXNzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRlTGltaXQgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgdGhpcy5kYXRlTGltaXQgPSBvcHRpb25zLmRhdGVMaW1pdDtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMub3BlbnMgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhpcy5vcGVucyA9IG9wdGlvbnMub3BlbnM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRyb3BzID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMuZHJvcHMgPSBvcHRpb25zLmRyb3BzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93V2Vla051bWJlcnMgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIHRoaXMuc2hvd1dlZWtOdW1iZXJzID0gb3B0aW9ucy5zaG93V2Vla051bWJlcnM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNob3dJU09XZWVrTnVtYmVycyA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgdGhpcy5zaG93SVNPV2Vla051bWJlcnMgPSBvcHRpb25zLnNob3dJU09XZWVrTnVtYmVycztcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYnV0dG9uQ2xhc3NlcyA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsYXNzZXMgPSBvcHRpb25zLmJ1dHRvbkNsYXNzZXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmJ1dHRvbkNsYXNzZXMgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGFzc2VzID0gb3B0aW9ucy5idXR0b25DbGFzc2VzLmpvaW4oJyAnKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0Ryb3Bkb3ducyA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgdGhpcy5zaG93RHJvcGRvd25zID0gb3B0aW9ucy5zaG93RHJvcGRvd25zO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgdGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IG9wdGlvbnMuc2hvd0N1c3RvbVJhbmdlTGFiZWw7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNpbmdsZURhdGVQaWNrZXIgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVEYXRlUGlja2VyID0gb3B0aW9ucy5zaW5nbGVEYXRlUGlja2VyO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlcilcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVQaWNrZXIgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlciA9IG9wdGlvbnMudGltZVBpY2tlcjtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGltZVBpY2tlclNlY29uZHMgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlclNlY29uZHMgPSBvcHRpb25zLnRpbWVQaWNrZXJTZWNvbmRzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50aW1lUGlja2VySW5jcmVtZW50ID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlckluY3JlbWVudCA9IG9wdGlvbnMudGltZVBpY2tlckluY3JlbWVudDtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGltZVBpY2tlcjI0SG91ciA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgdGhpcy50aW1lUGlja2VyMjRIb3VyID0gb3B0aW9ucy50aW1lUGlja2VyMjRIb3VyO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvQXBwbHkgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIHRoaXMuYXV0b0FwcGx5ID0gb3B0aW9ucy5hdXRvQXBwbHk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9VcGRhdGVJbnB1dCA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlSW5wdXQgPSBvcHRpb25zLmF1dG9VcGRhdGVJbnB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubGlua2VkQ2FsZW5kYXJzID09PSAnYm9vbGVhbicpXG4gICAgICAgICAgICB0aGlzLmxpbmtlZENhbGVuZGFycyA9IG9wdGlvbnMubGlua2VkQ2FsZW5kYXJzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5pc0ludmFsaWREYXRlID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdGhpcy5pc0ludmFsaWREYXRlID0gb3B0aW9ucy5pc0ludmFsaWREYXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5pc0N1c3RvbURhdGUgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IG9wdGlvbnMuaXNDdXN0b21EYXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hbHdheXNTaG93Q2FsZW5kYXJzID09PSAnYm9vbGVhbicpXG4gICAgICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBvcHRpb25zLmFsd2F5c1Nob3dDYWxlbmRhcnM7XG5cbiAgICAgICAgLy8gdXBkYXRlIGRheSBuYW1lcyBvcmRlciB0byBmaXJzdERheVxuICAgICAgICBpZiAodGhpcy5sb2NhbGUuZmlyc3REYXkgIT0gMCkge1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gdGhpcy5sb2NhbGUuZmlyc3REYXk7XG4gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGF5c09mV2Vlay5wdXNoKHRoaXMubG9jYWxlLmRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3ItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydCwgZW5kLCByYW5nZTtcblxuICAgICAgICAvL2lmIG5vIHN0YXJ0L2VuZCBkYXRlcyBzZXQsIGNoZWNrIGlmIGFuIGlucHV0IGVsZW1lbnQgY29udGFpbnMgaW5pdGlhbCB2YWx1ZXNcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnN0YXJ0RGF0ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdGlvbnMuZW5kRGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICgkKHRoaXMuZWxlbWVudCkuaXMoJ2lucHV0W3R5cGU9dGV4dF0nKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAkKHRoaXMuZWxlbWVudCkudmFsKCksXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gdmFsLnNwbGl0KHRoaXMubG9jYWxlLnNlcGFyYXRvcik7XG5cbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXQubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQoc3BsaXRbMF0sIHRoaXMubG9jYWxlLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudChzcGxpdFsxXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlciAmJiB2YWwgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQodmFsLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQodmFsLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnREYXRlKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJhbmdlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAocmFuZ2UgaW4gb3B0aW9ucy5yYW5nZXMpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzBdID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQob3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzBdLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQob3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzBdKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzFdID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbW9tZW50KG9wdGlvbnMucmFuZ2VzW3JhbmdlXVsxXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudChvcHRpb25zLnJhbmdlc1tyYW5nZV1bMV0pO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9yIGVuZCBkYXRlIGV4Y2VlZCB0aG9zZSBhbGxvd2VkIGJ5IHRoZSBtaW5EYXRlIG9yIGRhdGVMaW1pdFxuICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMsIHNob3J0ZW4gdGhlIHJhbmdlIHRvIHRoZSBhbGxvd2FibGUgcGVyaW9kLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgc3RhcnQuaXNCZWZvcmUodGhpcy5taW5EYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLm1pbkRhdGUuY2xvbmUoKTtcblxuICAgICAgICAgICAgICAgIHZhciBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVMaW1pdCAmJiBtYXhEYXRlICYmIHN0YXJ0LmNsb25lKCkuYWRkKHRoaXMuZGF0ZUxpbWl0KS5pc0FmdGVyKG1heERhdGUpKVxuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlID0gc3RhcnQuY2xvbmUoKS5hZGQodGhpcy5kYXRlTGltaXQpO1xuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIGVuZC5pc0FmdGVyKG1heERhdGUpKVxuICAgICAgICAgICAgICAgICAgICBlbmQgPSBtYXhEYXRlLmNsb25lKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoZSByYW5nZSBpcyBiZWZvcmUgdGhlIG1pbmltdW0gb3IgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpc1xuICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBtYXhpbXVtLCBkb24ndCBkaXNwbGF5IHRoaXMgcmFuZ2Ugb3B0aW9uIGF0IGFsbC5cbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMubWluRGF0ZSAmJiBlbmQuaXNCZWZvcmUodGhpcy5taW5EYXRlLCB0aGlzLnRpbWVwaWNrZXIgPyAnbWludXRlJyA6ICdkYXknKSkgXG4gICAgICAgICAgICAgICAgICB8fCAobWF4RGF0ZSAmJiBzdGFydC5pc0FmdGVyKG1heERhdGUsIHRoaXMudGltZXBpY2tlciA/ICdtaW51dGUnIDogJ2RheScpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvL1N1cHBvcnQgdW5pY29kZSBjaGFycyBpbiB0aGUgcmFuZ2UgbmFtZXMuXG4gICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlSHRtbCA9IGVsZW0udmFsdWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tyYW5nZUh0bWxdID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbGlzdCA9ICc8dWw+JztcbiAgICAgICAgICAgIGZvciAocmFuZ2UgaW4gdGhpcy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBsaXN0ICs9ICc8bGkgZGF0YS1yYW5nZS1rZXk9XCInICsgcmFuZ2UgKyAnXCI+JyArIHJhbmdlICsgJzwvbGk+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpIGRhdGEtcmFuZ2Uta2V5PVwiJyArIHRoaXMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwgKyAnXCI+JyArIHRoaXMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwgKyAnPC9saT4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdCArPSAnPC91bD4nO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLnJhbmdlcycpLnByZXBlbmQobGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuZW5kRGF0ZS5lbmRPZignZGF5Jyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXItdGltZScpLmhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2FuJ3QgYmUgdXNlZCB0b2dldGhlciBmb3Igbm93XG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy5hdXRvQXBwbHkpXG4gICAgICAgICAgICB0aGlzLmF1dG9BcHBseSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9BcHBseSAmJiB0eXBlb2Ygb3B0aW9ucy5yYW5nZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzJykuaGlkZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b0FwcGx5KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuYXBwbHlCdG4sIC5jYW5jZWxCdG4nKS5hZGRDbGFzcygnaGlkZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3NpbmdsZScpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmNhbGVuZGFyLmxlZnQnKS5hZGRDbGFzcygnc2luZ2xlJyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXIubGVmdCcpLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5jYWxlbmRhci5yaWdodCcpLmhpZGUoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5kYXRlcmFuZ2VwaWNrZXJfaW5wdXQgaW5wdXQsIC5kYXRlcmFuZ2VwaWNrZXJfaW5wdXQgPiBpJykuaGlkZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMgdWwnKS5oaWRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMnKS5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zLnJhbmdlcyA9PT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMuc2luZ2xlRGF0ZVBpY2tlcikgfHwgdGhpcy5hbHdheXNTaG93Q2FsZW5kYXJzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcygnc2hvdy1jYWxlbmRhcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ29wZW5zJyArIHRoaXMub3BlbnMpO1xuXG4gICAgICAgIC8vc3dhcCB0aGUgcG9zaXRpb24gb2YgdGhlIHByZWRlZmluZWQgcmFuZ2VzIGlmIG9wZW5zIHJpZ2h0XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yYW5nZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3BlbnMgPT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLnJhbmdlcycpLnByZXBlbmRUbyggdGhpcy5jb250YWluZXIuZmluZCgnLmNhbGVuZGFyLmxlZnQnKS5wYXJlbnQoKSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9hcHBseSBDU1MgY2xhc3NlcyBhbmQgbGFiZWxzIHRvIGJ1dHRvbnNcbiAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmFwcGx5QnRuLCAuY2FuY2VsQnRuJykuYWRkQ2xhc3ModGhpcy5idXR0b25DbGFzc2VzKTtcbiAgICAgICAgaWYgKHRoaXMuYXBwbHlDbGFzcy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuYXBwbHlCdG4nKS5hZGRDbGFzcyh0aGlzLmFwcGx5Q2xhc3MpO1xuICAgICAgICBpZiAodGhpcy5jYW5jZWxDbGFzcy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FuY2VsQnRuJykuYWRkQ2xhc3ModGhpcy5jYW5jZWxDbGFzcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5hcHBseUJ0bicpLmh0bWwodGhpcy5sb2NhbGUuYXBwbHlMYWJlbCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5jYW5jZWxCdG4nKS5odG1sKHRoaXMubG9jYWxlLmNhbmNlbExhYmVsKTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgLy9cblxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXInKVxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnLnByZXYnLCAkLnByb3h5KHRoaXMuY2xpY2tQcmV2LCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJy5uZXh0JywgJC5wcm94eSh0aGlzLmNsaWNrTmV4dCwgdGhpcykpXG4gICAgICAgICAgICAub24oJ21vdXNlZG93bi5kYXRlcmFuZ2VwaWNrZXInLCAndGQuYXZhaWxhYmxlJywgJC5wcm94eSh0aGlzLmNsaWNrRGF0ZSwgdGhpcykpXG4gICAgICAgICAgICAub24oJ21vdXNlZW50ZXIuZGF0ZXJhbmdlcGlja2VyJywgJ3RkLmF2YWlsYWJsZScsICQucHJveHkodGhpcy5ob3ZlckRhdGUsIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdtb3VzZWxlYXZlLmRhdGVyYW5nZXBpY2tlcicsICd0ZC5hdmFpbGFibGUnLCAkLnByb3h5KHRoaXMudXBkYXRlRm9ybUlucHV0cywgdGhpcykpXG4gICAgICAgICAgICAub24oJ2NoYW5nZS5kYXRlcmFuZ2VwaWNrZXInLCAnc2VsZWN0LnllYXJzZWxlY3QnLCAkLnByb3h5KHRoaXMubW9udGhPclllYXJDaGFuZ2VkLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignY2hhbmdlLmRhdGVyYW5nZXBpY2tlcicsICdzZWxlY3QubW9udGhzZWxlY3QnLCAkLnByb3h5KHRoaXMubW9udGhPclllYXJDaGFuZ2VkLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignY2hhbmdlLmRhdGVyYW5nZXBpY2tlcicsICdzZWxlY3QuaG91cnNlbGVjdCxzZWxlY3QubWludXRlc2VsZWN0LHNlbGVjdC5zZWNvbmRzZWxlY3Qsc2VsZWN0LmFtcG1zZWxlY3QnLCAkLnByb3h5KHRoaXMudGltZUNoYW5nZWQsIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnLmRhdGVyYW5nZXBpY2tlcl9pbnB1dCBpbnB1dCcsICQucHJveHkodGhpcy5zaG93Q2FsZW5kYXJzLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignZm9jdXMuZGF0ZXJhbmdlcGlja2VyJywgJy5kYXRlcmFuZ2VwaWNrZXJfaW5wdXQgaW5wdXQnLCAkLnByb3h5KHRoaXMuZm9ybUlucHV0c0ZvY3VzZWQsIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdibHVyLmRhdGVyYW5nZXBpY2tlcicsICcuZGF0ZXJhbmdlcGlja2VyX2lucHV0IGlucHV0JywgJC5wcm94eSh0aGlzLmZvcm1JbnB1dHNCbHVycmVkLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignY2hhbmdlLmRhdGVyYW5nZXBpY2tlcicsICcuZGF0ZXJhbmdlcGlja2VyX2lucHV0IGlucHV0JywgJC5wcm94eSh0aGlzLmZvcm1JbnB1dHNDaGFuZ2VkLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbigna2V5ZG93bi5kYXRlcmFuZ2VwaWNrZXInLCAnLmRhdGVyYW5nZXBpY2tlcl9pbnB1dCBpbnB1dCcsICQucHJveHkodGhpcy5mb3JtSW5wdXRzS2V5ZG93biwgdGhpcykpO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMnKVxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnYnV0dG9uLmFwcGx5QnRuJywgJC5wcm94eSh0aGlzLmNsaWNrQXBwbHksIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnYnV0dG9uLmNhbmNlbEJ0bicsICQucHJveHkodGhpcy5jbGlja0NhbmNlbCwgdGhpcykpXG4gICAgICAgICAgICAub24oJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcicsICdsaScsICQucHJveHkodGhpcy5jbGlja1JhbmdlLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignbW91c2VlbnRlci5kYXRlcmFuZ2VwaWNrZXInLCAnbGknLCAkLnByb3h5KHRoaXMuaG92ZXJSYW5nZSwgdGhpcykpXG4gICAgICAgICAgICAub24oJ21vdXNlbGVhdmUuZGF0ZXJhbmdlcGlja2VyJywgJ2xpJywgJC5wcm94eSh0aGlzLnVwZGF0ZUZvcm1JbnB1dHMsIHRoaXMpKTtcblxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpIHx8IHRoaXMuZWxlbWVudC5pcygnYnV0dG9uJykpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vbih7XG4gICAgICAgICAgICAgICAgJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcic6ICQucHJveHkodGhpcy5zaG93LCB0aGlzKSxcbiAgICAgICAgICAgICAgICAnZm9jdXMuZGF0ZXJhbmdlcGlja2VyJzogJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxuICAgICAgICAgICAgICAgICdrZXl1cC5kYXRlcmFuZ2VwaWNrZXInOiAkLnByb3h5KHRoaXMuZWxlbWVudENoYW5nZWQsIHRoaXMpLFxuICAgICAgICAgICAgICAgICdrZXlkb3duLmRhdGVyYW5nZXBpY2tlcic6ICQucHJveHkodGhpcy5rZXlkb3duLCB0aGlzKSAvL0lFIDExIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAkLnByb3h5KHRoaXMudG9nZ2xlLCB0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQub24oJ2tleWRvd24uZGF0ZXJhbmdlcGlja2VyJywgJC5wcm94eSh0aGlzLnRvZ2dsZSwgdGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgYXR0YWNoZWQgdG8gYSB0ZXh0IGlucHV0LCBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgICAgLy9cblxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpICYmICF0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdGhpcy5hdXRvVXBkYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC52YWwodGhpcy5zdGFydERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCkgKyB0aGlzLmxvY2FsZS5zZXBhcmF0b3IgKyB0aGlzLmVuZERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCkpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKSAmJiB0aGlzLmF1dG9VcGRhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnZhbCh0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBEYXRlUmFuZ2VQaWNrZXIucHJvdG90eXBlID0ge1xuXG4gICAgICAgIGNvbnN0cnVjdG9yOiBEYXRlUmFuZ2VQaWNrZXIsXG5cbiAgICAgICAgc2V0U3RhcnREYXRlOiBmdW5jdGlvbihzdGFydERhdGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudChzdGFydERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudChzdGFydERhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcilcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5taW51dGUoTWF0aC5yb3VuZCh0aGlzLnN0YXJ0RGF0ZS5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQmVmb3JlKHRoaXMubWluRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMubWluRGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy50aW1lUGlja2VySW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5taW51dGUoTWF0aC5yb3VuZCh0aGlzLnN0YXJ0RGF0ZS5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQWZ0ZXIodGhpcy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5tYXhEYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlciAmJiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLm1pbnV0ZShNYXRoLmZsb29yKHRoaXMuc3RhcnREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KCk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0RW5kRGF0ZTogZnVuY3Rpb24oZW5kRGF0ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmREYXRlID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQoZW5kRGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmREYXRlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQoZW5kRGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuZW5kRGF0ZS5hZGQoMSwnZCcpLnN0YXJ0T2YoJ2RheScpLnN1YnRyYWN0KDEsJ3NlY29uZCcpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUubWludXRlKE1hdGgucm91bmQodGhpcy5lbmREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUuaXNCZWZvcmUodGhpcy5zdGFydERhdGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5lbmREYXRlLmlzQWZ0ZXIodGhpcy5tYXhEYXRlKSlcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZUxpbWl0ICYmIHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMuZGF0ZUxpbWl0KS5pc0JlZm9yZSh0aGlzLmVuZERhdGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMuZGF0ZUxpbWl0KTtcblxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1JpZ2h0VGltZSA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTaG93aW5nKVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzSW52YWxpZERhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzQ3VzdG9tRGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlVmlldzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdsZWZ0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuY2FsZW5kYXItdGltZSBzZWxlY3QnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuY2FsZW5kYXItdGltZSBzZWxlY3QnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX2VuZFwiXScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XCJdJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX2VuZFwiXScpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XCJdJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVNb250aHNJblZpZXcoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1JbnB1dHMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGVNb250aHNJblZpZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSkge1xuXG4gICAgICAgICAgICAgICAgLy9pZiBib3RoIGRhdGVzIGFyZSB2aXNpYmxlIGFscmVhZHksIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2luZ2xlRGF0ZVBpY2tlciAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpIHx8IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSlcbiAgICAgICAgICAgICAgICAgICAgJiZcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSA9PSB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSB8fCB0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NJykgPT0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5kYXRlKDIpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5saW5rZWRDYWxlbmRhcnMgJiYgKHRoaXMuZW5kRGF0ZS5tb250aCgpICE9IHRoaXMuc3RhcnREYXRlLm1vbnRoKCkgfHwgdGhpcy5lbmREYXRlLnllYXIoKSAhPSB0aGlzLnN0YXJ0RGF0ZS55ZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpLmRhdGUoMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5kYXRlKDIpLmFkZCgxLCAnbW9udGgnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpICE9IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSAhPSB0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuZGF0ZSgyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5kYXRlKDIpLmFkZCgxLCAnbW9udGgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMubGlua2VkQ2FsZW5kYXJzICYmICF0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID4gdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpLmRhdGUoMik7XG4gICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5tYXhEYXRlLmNsb25lKCkuZGF0ZSgyKS5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGVDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZSwgc2Vjb25kO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5ob3Vyc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW1wbSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5hbXBtc2VsZWN0JykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VyIDwgMTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuaG91cnNlbGVjdCcpLnZhbCgpLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kID0gdGhpcy50aW1lUGlja2VyU2Vjb25kcyA/IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW1wbSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuYW1wbXNlbGVjdCcpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdQTScgJiYgaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCdsZWZ0Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCdyaWdodCcpO1xuXG4gICAgICAgICAgICAvL2hpZ2hsaWdodCBhbnkgcHJlZGVmaW5lZCByYW5nZSBtYXRjaGluZyB0aGUgY3VycmVudCBzdGFydCBhbmQgZW5kIGRhdGVzXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzIGxpJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ2hvc2VuTGFiZWwoKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW5kZXJDYWxlbmRhcjogZnVuY3Rpb24oc2lkZSkge1xuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQnVpbGQgdGhlIG1hdHJpeCBvZiBkYXRlcyB0aGF0IHdpbGwgcG9wdWxhdGUgdGhlIGNhbGVuZGFyXG4gICAgICAgICAgICAvL1xuXG4gICAgICAgICAgICB2YXIgY2FsZW5kYXIgPSBzaWRlID09ICdsZWZ0JyA/IHRoaXMubGVmdENhbGVuZGFyIDogdGhpcy5yaWdodENhbGVuZGFyO1xuICAgICAgICAgICAgdmFyIG1vbnRoID0gY2FsZW5kYXIubW9udGgubW9udGgoKTtcbiAgICAgICAgICAgIHZhciB5ZWFyID0gY2FsZW5kYXIubW9udGgueWVhcigpO1xuICAgICAgICAgICAgdmFyIGhvdXIgPSBjYWxlbmRhci5tb250aC5ob3VyKCk7XG4gICAgICAgICAgICB2YXIgbWludXRlID0gY2FsZW5kYXIubW9udGgubWludXRlKCk7XG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gY2FsZW5kYXIubW9udGguc2Vjb25kKCk7XG4gICAgICAgICAgICB2YXIgZGF5c0luTW9udGggPSBtb21lbnQoW3llYXIsIG1vbnRoXSkuZGF5c0luTW9udGgoKTtcbiAgICAgICAgICAgIHZhciBmaXJzdERheSA9IG1vbWVudChbeWVhciwgbW9udGgsIDFdKTtcbiAgICAgICAgICAgIHZhciBsYXN0RGF5ID0gbW9tZW50KFt5ZWFyLCBtb250aCwgZGF5c0luTW9udGhdKTtcbiAgICAgICAgICAgIHZhciBsYXN0TW9udGggPSBtb21lbnQoZmlyc3REYXkpLnN1YnRyYWN0KDEsICdtb250aCcpLm1vbnRoKCk7XG4gICAgICAgICAgICB2YXIgbGFzdFllYXIgPSBtb21lbnQoZmlyc3REYXkpLnN1YnRyYWN0KDEsICdtb250aCcpLnllYXIoKTtcbiAgICAgICAgICAgIHZhciBkYXlzSW5MYXN0TW9udGggPSBtb21lbnQoW2xhc3RZZWFyLCBsYXN0TW9udGhdKS5kYXlzSW5Nb250aCgpO1xuICAgICAgICAgICAgdmFyIGRheU9mV2VlayA9IGZpcnN0RGF5LmRheSgpO1xuXG4gICAgICAgICAgICAvL2luaXRpYWxpemUgYSA2IHJvd3MgeCA3IGNvbHVtbnMgYXJyYXkgZm9yIHRoZSBjYWxlbmRhclxuICAgICAgICAgICAgdmFyIGNhbGVuZGFyID0gW107XG4gICAgICAgICAgICBjYWxlbmRhci5maXJzdERheSA9IGZpcnN0RGF5O1xuICAgICAgICAgICAgY2FsZW5kYXIubGFzdERheSA9IGxhc3REYXk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9wb3B1bGF0ZSB0aGUgY2FsZW5kYXIgd2l0aCBkYXRlIG9iamVjdHNcbiAgICAgICAgICAgIHZhciBzdGFydERheSA9IGRheXNJbkxhc3RNb250aCAtIGRheU9mV2VlayArIHRoaXMubG9jYWxlLmZpcnN0RGF5ICsgMTtcbiAgICAgICAgICAgIGlmIChzdGFydERheSA+IGRheXNJbkxhc3RNb250aClcbiAgICAgICAgICAgICAgICBzdGFydERheSAtPSA3O1xuXG4gICAgICAgICAgICBpZiAoZGF5T2ZXZWVrID09IHRoaXMubG9jYWxlLmZpcnN0RGF5KVxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gNjtcblxuICAgICAgICAgICAgdmFyIGN1ckRhdGUgPSBtb21lbnQoW2xhc3RZZWFyLCBsYXN0TW9udGgsIHN0YXJ0RGF5LCAxMiwgbWludXRlLCBzZWNvbmRdKTtcblxuICAgICAgICAgICAgdmFyIGNvbCwgcm93O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNvbCA9IDAsIHJvdyA9IDA7IGkgPCA0MjsgaSsrLCBjb2wrKywgY3VyRGF0ZSA9IG1vbWVudChjdXJEYXRlKS5hZGQoMjQsICdob3VyJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgY29sICUgNyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gY3VyRGF0ZS5jbG9uZSgpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSkuc2Vjb25kKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5ob3VyKDEyKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHRoaXMubWluRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlKSAmJiBzaWRlID09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcltyb3ddW2NvbF0gPSB0aGlzLm1pbkRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PSB0aGlzLm1heERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmlzQWZ0ZXIodGhpcy5tYXhEYXRlKSAmJiBzaWRlID09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gdGhpcy5tYXhEYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vbWFrZSB0aGUgY2FsZW5kYXIgb2JqZWN0IGF2YWlsYWJsZSB0byBob3ZlckRhdGUvY2xpY2tEYXRlXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIERpc3BsYXkgdGhlIGNhbGVuZGFyXG4gICAgICAgICAgICAvL1xuXG4gICAgICAgICAgICB2YXIgbWluRGF0ZSA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5taW5EYXRlIDogdGhpcy5zdGFydERhdGU7XG4gICAgICAgICAgICB2YXIgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5zdGFydERhdGUgOiB0aGlzLmVuZERhdGU7XG4gICAgICAgICAgICB2YXIgYXJyb3cgPSB0aGlzLmxvY2FsZS5kaXJlY3Rpb24gPT0gJ2x0cicgPyB7bGVmdDogJ2NoZXZyb24tbGVmdCcsIHJpZ2h0OiAnY2hldnJvbi1yaWdodCd9IDoge2xlZnQ6ICdjaGV2cm9uLXJpZ2h0JywgcmlnaHQ6ICdjaGV2cm9uLWxlZnQnfTtcblxuICAgICAgICAgICAgdmFyIGh0bWwgPSAnPHRhYmxlIGNsYXNzPVwidGFibGUtY29uZGVuc2VkXCI+JztcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0aGVhZD4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPHRyPic7XG5cbiAgICAgICAgICAgIC8vIGFkZCBlbXB0eSBjZWxsIGZvciB3ZWVrIG51bWJlclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWtOdW1iZXJzIHx8IHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzKVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aD48L3RoPic7XG5cbiAgICAgICAgICAgIGlmICgoIW1pbkRhdGUgfHwgbWluRGF0ZS5pc0JlZm9yZShjYWxlbmRhci5maXJzdERheSkpICYmICghdGhpcy5saW5rZWRDYWxlbmRhcnMgfHwgc2lkZSA9PSAnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNsYXNzPVwicHJldiBhdmFpbGFibGVcIj48aSBjbGFzcz1cImZhIGZhLScgKyBhcnJvdy5sZWZ0ICsgJyBnbHlwaGljb24gZ2x5cGhpY29uLScgKyBhcnJvdy5sZWZ0ICsgJ1wiPjwvaT48L3RoPic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aD48L3RoPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkYXRlSHRtbCA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXNbY2FsZW5kYXJbMV1bMV0ubW9udGgoKV0gKyBjYWxlbmRhclsxXVsxXS5mb3JtYXQoXCIgWVlZWVwiKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3ducykge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TW9udGggPSBjYWxlbmRhclsxXVsxXS5tb250aCgpO1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50WWVhciA9IGNhbGVuZGFyWzFdWzFdLnllYXIoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWF4WWVhciA9IChtYXhEYXRlICYmIG1heERhdGUueWVhcigpKSB8fCAoY3VycmVudFllYXIgKyA1KTtcbiAgICAgICAgICAgICAgICB2YXIgbWluWWVhciA9IChtaW5EYXRlICYmIG1pbkRhdGUueWVhcigpKSB8fCAoY3VycmVudFllYXIgLSA1MCk7XG4gICAgICAgICAgICAgICAgdmFyIGluTWluWWVhciA9IGN1cnJlbnRZZWFyID09IG1pblllYXI7XG4gICAgICAgICAgICAgICAgdmFyIGluTWF4WWVhciA9IGN1cnJlbnRZZWFyID09IG1heFllYXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgbW9udGhIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJtb250aHNlbGVjdFwiPic7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCAxMjsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWluTWluWWVhciB8fCBtID49IG1pbkRhdGUubW9udGgoKSkgJiYgKCFpbk1heFllYXIgfHwgbSA8PSBtYXhEYXRlLm1vbnRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aEh0bWwgKz0gXCI8b3B0aW9uIHZhbHVlPSdcIiArIG0gKyBcIidcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0gPT09IGN1cnJlbnRNb250aCA/IFwiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIiA6IFwiXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cIiArIHRoaXMubG9jYWxlLm1vbnRoTmFtZXNbbV0gKyBcIjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhIdG1sICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyBtICsgXCInXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID09PSBjdXJyZW50TW9udGggPyBcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCIgOiBcIlwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZGlzYWJsZWQ9J2Rpc2FibGVkJz5cIiArIHRoaXMubG9jYWxlLm1vbnRoTmFtZXNbbV0gKyBcIjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vbnRoSHRtbCArPSBcIjwvc2VsZWN0PlwiO1xuXG4gICAgICAgICAgICAgICAgdmFyIHllYXJIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJ5ZWFyc2VsZWN0XCI+JztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gbWluWWVhcjsgeSA8PSBtYXhZZWFyOyB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgeWVhckh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgeSArICdcIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHkgPT09IGN1cnJlbnRZZWFyID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+JyArIHkgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWVhckh0bWwgKz0gJzwvc2VsZWN0Pic7XG5cbiAgICAgICAgICAgICAgICBkYXRlSHRtbCA9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodG1sICs9ICc8dGggY29sc3Bhbj1cIjVcIiBjbGFzcz1cIm1vbnRoXCI+JyArIGRhdGVIdG1sICsgJzwvdGg+JztcbiAgICAgICAgICAgIGlmICgoIW1heERhdGUgfHwgbWF4RGF0ZS5pc0FmdGVyKGNhbGVuZGFyLmxhc3REYXkpKSAmJiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzIHx8IHNpZGUgPT0gJ3JpZ2h0JyB8fCB0aGlzLnNpbmdsZURhdGVQaWNrZXIpKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNsYXNzPVwibmV4dCBhdmFpbGFibGVcIj48aSBjbGFzcz1cImZhIGZhLScgKyBhcnJvdy5yaWdodCArICcgZ2x5cGhpY29uIGdseXBoaWNvbi0nICsgYXJyb3cucmlnaHQgKyAnXCI+PC9pPjwvdGg+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoPjwvdGg+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaHRtbCArPSAnPC90cj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPHRyPic7XG5cbiAgICAgICAgICAgIC8vIGFkZCB3ZWVrIG51bWJlciBsYWJlbFxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWtOdW1iZXJzIHx8IHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzKVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aCBjbGFzcz1cIndlZWtcIj4nICsgdGhpcy5sb2NhbGUud2Vla0xhYmVsICsgJzwvdGg+JztcblxuICAgICAgICAgICAgJC5lYWNoKHRoaXMubG9jYWxlLmRheXNPZldlZWssIGZ1bmN0aW9uKGluZGV4LCBkYXlPZldlZWspIHtcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGg+JyArIGRheU9mV2VlayArICc8L3RoPic7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaHRtbCArPSAnPC90cj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPC90aGVhZD4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPHRib2R5Pic7XG5cbiAgICAgICAgICAgIC8vYWRqdXN0IG1heERhdGUgdG8gcmVmbGVjdCB0aGUgZGF0ZUxpbWl0IHNldHRpbmcgaW4gb3JkZXIgdG9cbiAgICAgICAgICAgIC8vZ3JleSBvdXQgZW5kIGRhdGVzIGJleW9uZCB0aGUgZGF0ZUxpbWl0XG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlID09IG51bGwgJiYgdGhpcy5kYXRlTGltaXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4TGltaXQgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmFkZCh0aGlzLmRhdGVMaW1pdCkuZW5kT2YoJ2RheScpO1xuICAgICAgICAgICAgICAgIGlmICghbWF4RGF0ZSB8fCBtYXhMaW1pdC5pc0JlZm9yZShtYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlID0gbWF4TGltaXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCA2OyByb3crKykge1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0cj4nO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHdlZWsgbnVtYmVyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWtOdW1iZXJzKVxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9XCJ3ZWVrXCI+JyArIGNhbGVuZGFyW3Jvd11bMF0ud2VlaygpICsgJzwvdGQ+JztcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNob3dJU09XZWVrTnVtYmVycylcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPVwid2Vla1wiPicgKyBjYWxlbmRhcltyb3ddWzBdLmlzb1dlZWsoKSArICc8L3RkPic7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCA3OyBjb2wrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjbGFzc2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdG9kYXkncyBkYXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNTYW1lKG5ldyBEYXRlKCksIFwiZGF5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vaGlnaGxpZ2h0IHdlZWtlbmRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNvV2Vla2RheSgpID4gNSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnd2Vla2VuZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vZ3JleSBvdXQgdGhlIGRhdGVzIGluIG90aGVyIG1vbnRocyBkaXNwbGF5ZWQgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhpcyBjYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLm1vbnRoKCkgIT0gY2FsZW5kYXJbMV1bMV0ubW9udGgoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9kb24ndCBhbGxvdyBzZWxlY3Rpb24gb2YgZGF0ZXMgYmVmb3JlIHRoZSBtaW5pbXVtIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlLCAnZGF5JykpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicsICdkaXNhYmxlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGFmdGVyIHRoZSBtYXhpbXVtIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmlzQWZ0ZXIobWF4RGF0ZSwgJ2RheScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvZmYnLCAnZGlzYWJsZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAvL2Rvbid0IGFsbG93IHNlbGVjdGlvbiBvZiBkYXRlIGlmIGEgY3VzdG9tIGZ1bmN0aW9uIGRlY2lkZXMgaXQncyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW52YWxpZERhdGUoY2FsZW5kYXJbcm93XVtjb2xdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdGFydCBkYXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdzdGFydC1kYXRlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbmQgZGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlICE9IG51bGwgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHRoaXMuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ2VuZC1kYXRlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgZGF0ZXMgaW4tYmV0d2VlbiB0aGUgc2VsZWN0ZWQgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSAhPSBudWxsICYmIGNhbGVuZGFyW3Jvd11bY29sXSA+IHRoaXMuc3RhcnREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXSA8IHRoaXMuZW5kRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaW4tcmFuZ2UnKTtcblxuICAgICAgICAgICAgICAgICAgICAvL2FwcGx5IGN1c3RvbSBjbGFzc2VzIGZvciB0aGlzIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ3VzdG9tID0gdGhpcy5pc0N1c3RvbURhdGUoY2FsZW5kYXJbcm93XVtjb2xdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc0N1c3RvbSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGlzQ3VzdG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjbGFzc2VzLCBpc0N1c3RvbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgY25hbWUgPSAnJywgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbmFtZSArPSBjbGFzc2VzW2ldICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzZXNbaV0gPT0gJ2Rpc2FibGVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lICs9ICdhdmFpbGFibGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBjbGFzcz1cIicgKyBjbmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykgKyAnXCIgZGF0YS10aXRsZT1cIicgKyAncicgKyByb3cgKyAnYycgKyBjb2wgKyAnXCI+JyArIGNhbGVuZGFyW3Jvd11bY29sXS5kYXRlKCkgKyAnPC90ZD4nO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvdHI+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaHRtbCArPSAnPC90Ym9keT4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPC90YWJsZT4nO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXIuJyArIHNpZGUgKyAnIC5jYWxlbmRhci10YWJsZScpLmh0bWwoaHRtbCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICByZW5kZXJUaW1lUGlja2VyOiBmdW5jdGlvbihzaWRlKSB7XG5cbiAgICAgICAgICAgIC8vIERvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgdGltZSBwaWNrZXIgaWYgaXQncyBjdXJyZW50bHkgZGlzYWJsZWRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gZW5kIGRhdGUgaGFzbid0IGJlZW4gY2xpY2tlZCB5ZXRcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdyaWdodCcgJiYgIXRoaXMuZW5kRGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgaHRtbCwgc2VsZWN0ZWQsIG1pbkRhdGUsIG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVMaW1pdCAmJiAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmFkZCh0aGlzLmRhdGVMaW1pdCkuaXNBZnRlcih0aGlzLm1heERhdGUpKSlcbiAgICAgICAgICAgICAgICBtYXhEYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5kYXRlTGltaXQpO1xuXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgbWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lkZSA9PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBtaW5EYXRlID0gdGhpcy5zdGFydERhdGU7XG5cbiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIHRoZSB0aW1lIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB2YXIgdGltZVNlbGVjdG9yID0gdGhpcy5jb250YWluZXIuZmluZCgnLmNhbGVuZGFyLnJpZ2h0IC5jYWxlbmRhci10aW1lIGRpdicpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lU2VsZWN0b3IuaHRtbCgpICE9ICcnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuaG91cih0aW1lU2VsZWN0b3IuZmluZCgnLmhvdXJzZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCkgfHwgc2VsZWN0ZWQuaG91cigpKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQubWludXRlKHRpbWVTZWxlY3Rvci5maW5kKCcubWludXRlc2VsZWN0IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpIHx8IHNlbGVjdGVkLm1pbnV0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuc2Vjb25kKHRpbWVTZWxlY3Rvci5maW5kKCcuc2Vjb25kc2VsZWN0IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpIHx8IHNlbGVjdGVkLnNlY29uZCgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcjI0SG91cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0aW1lU2VsZWN0b3IuZmluZCgnLmFtcG1zZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBzZWxlY3RlZC5ob3VyKCkgPCAxMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZC5ob3VyKHNlbGVjdGVkLmhvdXIoKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIHNlbGVjdGVkLmhvdXIoKSA9PT0gMTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuaG91cigwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgc2VsZWN0ZWQuaXNBZnRlcihtYXhEYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBtYXhEYXRlLmNsb25lKCk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAvL1xuXG4gICAgICAgICAgICBodG1sID0gJzxzZWxlY3QgY2xhc3M9XCJob3Vyc2VsZWN0XCI+JztcblxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy50aW1lUGlja2VyMjRIb3VyID8gMCA6IDE7XG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy50aW1lUGlja2VyMjRIb3VyID8gMjMgOiAxMjtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlfaW5fMjQgPSBpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKVxuICAgICAgICAgICAgICAgICAgICBpX2luXzI0ID0gc2VsZWN0ZWQuaG91cigpID49IDEyID8gKGkgPT0gMTIgPyAxMiA6IGkgKyAxMikgOiAoaSA9PSAxMiA/IDAgOiBpKTtcblxuICAgICAgICAgICAgICAgIHZhciB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKGlfaW5fMjQpO1xuICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUubWludXRlKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIHRpbWUubWludXRlKDApLmlzQWZ0ZXIobWF4RGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpX2luXzI0ID09IHNlbGVjdGVkLmhvdXIoKSAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj4nICsgaSArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiBjbGFzcz1cImRpc2FibGVkXCI+JyArIGkgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCI+JyArIGkgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgICAgLy9cblxuICAgICAgICAgICAgaHRtbCArPSAnOiA8c2VsZWN0IGNsYXNzPVwibWludXRlc2VsZWN0XCI+JztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2MDsgaSArPSB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFkZGVkID0gaSA8IDEwID8gJzAnICsgaSA6IGk7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSBzZWxlY3RlZC5jbG9uZSgpLm1pbnV0ZShpKTtcblxuICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUuc2Vjb25kKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIHRpbWUuc2Vjb25kKDApLmlzQWZ0ZXIobWF4RGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZC5taW51dGUoKSA9PSBpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIiBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+ICc7XG5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAvL1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzogPHNlbGVjdCBjbGFzcz1cInNlY29uZHNlbGVjdFwiPic7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDYwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZSA9IHNlbGVjdGVkLmNsb25lKCkuc2Vjb25kKGkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWluRGF0ZSAmJiB0aW1lLmlzQmVmb3JlKG1pbkRhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLmlzQWZ0ZXIobWF4RGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLnNlY29uZCgpID09IGkgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiBjbGFzcz1cImRpc2FibGVkXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQU0vUE1cbiAgICAgICAgICAgIC8vXG5cbiAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHNlbGVjdCBjbGFzcz1cImFtcG1zZWxlY3RcIj4nO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFtX2h0bWwgPSAnJztcbiAgICAgICAgICAgICAgICB2YXIgcG1faHRtbCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1pbkRhdGUgJiYgc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKDEyKS5taW51dGUoMCkuc2Vjb25kKDApLmlzQmVmb3JlKG1pbkRhdGUpKVxuICAgICAgICAgICAgICAgICAgICBhbV9odG1sID0gJyBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIHNlbGVjdGVkLmNsb25lKCkuaG91cigwKS5taW51dGUoMCkuc2Vjb25kKDApLmlzQWZ0ZXIobWF4RGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIHBtX2h0bWwgPSAnIGRpc2FibGVkPVwiZGlzYWJsZWRcIiBjbGFzcz1cImRpc2FibGVkXCInO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmhvdXIoKSA+PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiQU1cIicgKyBhbV9odG1sICsgJz5BTTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJQTVwiIHNlbGVjdGVkPVwic2VsZWN0ZWRcIicgKyBwbV9odG1sICsgJz5QTTwvb3B0aW9uPic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIkFNXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyArIGFtX2h0bWwgKyAnPkFNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlBNXCInICsgcG1faHRtbCArICc+UE08L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0Pic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5jYWxlbmRhci4nICsgc2lkZSArICcgLmNhbGVuZGFyLXRpbWUgZGl2JykuaHRtbChodG1sKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZUZvcm1JbnB1dHM6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAvL2lnbm9yZSBtb3VzZSBtb3ZlbWVudHMgd2hpbGUgYW4gYWJvdmUtY2FsZW5kYXIgdGV4dCBpbnB1dCBoYXMgZm9jdXNcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9zdGFydF0nKS5pcyhcIjpmb2N1c1wiKSB8fCB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9lbmRdJykuaXMoXCI6Zm9jdXNcIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9zdGFydF0nKS52YWwodGhpcy5zdGFydERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9lbmRdJykudmFsKHRoaXMuZW5kRGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIgfHwgKHRoaXMuZW5kRGF0ZSAmJiAodGhpcy5zdGFydERhdGUuaXNCZWZvcmUodGhpcy5lbmREYXRlKSB8fCB0aGlzLnN0YXJ0RGF0ZS5pc1NhbWUodGhpcy5lbmREYXRlKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnYnV0dG9uLmFwcGx5QnRuJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnYnV0dG9uLmFwcGx5QnRuJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIG1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wO1xuICAgICAgICAgICAgdmFyIHBhcmVudFJpZ2h0RWRnZSA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmVudEVsLmlzKCdib2R5JykpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5wYXJlbnRFbC5vZmZzZXQoKS50b3AgLSB0aGlzLnBhcmVudEVsLnNjcm9sbFRvcCgpLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLnBhcmVudEVsLm9mZnNldCgpLmxlZnQgLSB0aGlzLnBhcmVudEVsLnNjcm9sbExlZnQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcGFyZW50UmlnaHRFZGdlID0gdGhpcy5wYXJlbnRFbFswXS5jbGllbnRXaWR0aCArIHRoaXMucGFyZW50RWwub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcHMgPT0gJ3VwJylcbiAgICAgICAgICAgICAgICBjb250YWluZXJUb3AgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkudG9wIC0gdGhpcy5jb250YWluZXIub3V0ZXJIZWlnaHQoKSAtIHBhcmVudE9mZnNldC50b3A7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLnRvcCArIHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIC0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyW3RoaXMuZHJvcHMgPT0gJ3VwJyA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgnZHJvcHVwJyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5zID09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogY29udGFpbmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogcGFyZW50UmlnaHRFZGdlIC0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAnYXV0bydcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIub2Zmc2V0KCkubGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiA5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVucyA9PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogY29udGFpbmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0ICsgdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoaXMuY29udGFpbmVyLm91dGVyV2lkdGgoKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIub2Zmc2V0KCkubGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiA5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuZWxlbWVudC5vZmZzZXQoKS5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIub2Zmc2V0KCkubGVmdCArIHRoaXMuY29udGFpbmVyLm91dGVyV2lkdGgoKSA+ICQod2luZG93KS53aWR0aCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93aW5nKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNsaWNrIHByb3h5IHRoYXQgaXMgcHJpdmF0ZSB0byB0aGlzIGluc3RhbmNlIG9mIGRhdGVwaWNrZXIsIGZvciB1bmJpbmRpbmdcbiAgICAgICAgICAgIHRoaXMuX291dHNpZGVDbGlja1Byb3h5ID0gJC5wcm94eShmdW5jdGlvbihlKSB7IHRoaXMub3V0c2lkZUNsaWNrKGUpOyB9LCB0aGlzKTtcblxuICAgICAgICAgICAgLy8gQmluZCBnbG9iYWwgZGF0ZXBpY2tlciBtb3VzZWRvd24gZm9yIGhpZGluZyBhbmRcbiAgICAgICAgICAgICQoZG9jdW1lbnQpXG4gICAgICAgICAgICAgIC5vbignbW91c2Vkb3duLmRhdGVyYW5nZXBpY2tlcicsIHRoaXMuX291dHNpZGVDbGlja1Byb3h5KVxuICAgICAgICAgICAgICAvLyBhbHNvIHN1cHBvcnQgbW9iaWxlIGRldmljZXNcbiAgICAgICAgICAgICAgLm9uKCd0b3VjaGVuZC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSlcbiAgICAgICAgICAgICAgLy8gYWxzbyBleHBsaWNpdGx5IHBsYXkgbmljZSB3aXRoIEJvb3RzdHJhcCBkcm9wZG93bnMsIHdoaWNoIHN0b3BQcm9wYWdhdGlvbiB3aGVuIGNsaWNraW5nIHRoZW1cbiAgICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnW2RhdGEtdG9nZ2xlPWRyb3Bkb3duXScsIHRoaXMuX291dHNpZGVDbGlja1Byb3h5KVxuICAgICAgICAgICAgICAvLyBhbmQgYWxzbyBjbG9zZSB3aGVuIGZvY3VzIGNoYW5nZXMgdG8gb3V0c2lkZSB0aGUgcGlja2VyIChlZy4gdGFiYmluZyBiZXR3ZWVuIGNvbnRyb2xzKVxuICAgICAgICAgICAgICAub24oJ2ZvY3VzaW4uZGF0ZXJhbmdlcGlja2VyJywgdGhpcy5fb3V0c2lkZUNsaWNrUHJveHkpO1xuXG4gICAgICAgICAgICAvLyBSZXBvc2l0aW9uIHRoZSBwaWNrZXIgaWYgdGhlIHdpbmRvdyBpcyByZXNpemVkIHdoaWxlIGl0J3Mgb3BlblxuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuZGF0ZXJhbmdlcGlja2VyJywgJC5wcm94eShmdW5jdGlvbihlKSB7IHRoaXMubW92ZShlKTsgfSwgdGhpcykpO1xuXG4gICAgICAgICAgICB0aGlzLm9sZFN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB0aGlzLm9sZEVuZERhdGUgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNSaWdodFRpbWUgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zaG93KCk7XG4gICAgICAgICAgICB0aGlzLm1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdzaG93LmRhdGVyYW5nZXBpY2tlcicsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5pc1Nob3dpbmcgPSB0cnVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhpZGU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpIHJldHVybjtcblxuICAgICAgICAgICAgLy9pbmNvbXBsZXRlIGRhdGUgc2VsZWN0aW9uLCByZXZlcnQgdG8gbGFzdCB2YWx1ZXNcbiAgICAgICAgICAgIGlmICghdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm9sZFN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMub2xkRW5kRGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2lmIGEgbmV3IGRhdGUgcmFuZ2Ugd2FzIHNlbGVjdGVkLCBpbnZva2UgdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydERhdGUuaXNTYW1lKHRoaXMub2xkU3RhcnREYXRlKSB8fCAhdGhpcy5lbmREYXRlLmlzU2FtZSh0aGlzLm9sZEVuZERhdGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5zdGFydERhdGUsIHRoaXMuZW5kRGF0ZSwgdGhpcy5jaG9zZW5MYWJlbCk7XG5cbiAgICAgICAgICAgIC8vaWYgcGlja2VyIGlzIGF0dGFjaGVkIHRvIGEgdGV4dCBpbnB1dCwgdXBkYXRlIGl0XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcblxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCcuZGF0ZXJhbmdlcGlja2VyJyk7XG4gICAgICAgICAgICAkKHdpbmRvdykub2ZmKCcuZGF0ZXJhbmdlcGlja2VyJyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignaGlkZS5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0c2lkZUNsaWNrOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICAgICAgICAvLyBpZiB0aGUgcGFnZSBpcyBjbGlja2VkIGFueXdoZXJlIGV4Y2VwdCB3aXRoaW4gdGhlIGRhdGVyYW5nZXJwaWNrZXIvYnV0dG9uXG4gICAgICAgICAgICAvLyBpdHNlbGYgdGhlbiBjYWxsIHRoaXMuaGlkZSgpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gaWUgbW9kYWwgZGlhbG9nIGZpeFxuICAgICAgICAgICAgICAgIGUudHlwZSA9PSBcImZvY3VzaW5cIiB8fFxuICAgICAgICAgICAgICAgIHRhcmdldC5jbG9zZXN0KHRoaXMuZWxlbWVudCkubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3Nlc3QodGhpcy5jb250YWluZXIpLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgIHRhcmdldC5jbG9zZXN0KCcuY2FsZW5kYXItdGFibGUnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICApIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ291dHNpZGVDbGljay5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzaG93Q2FsZW5kYXJzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdzaG93LWNhbGVuZGFyJyk7XG4gICAgICAgICAgICB0aGlzLm1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdzaG93Q2FsZW5kYXIuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZUNhbGVuZGFyczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2hvdy1jYWxlbmRhcicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2hpZGVDYWxlbmRhci5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBob3ZlclJhbmdlOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgIC8vaWdub3JlIG1vdXNlIG1vdmVtZW50cyB3aGlsZSBhbiBhYm92ZS1jYWxlbmRhciB0ZXh0IGlucHV0IGhhcyBmb2N1c1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9ZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XScpLmlzKFwiOmZvY3VzXCIpIHx8IHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9ZGF0ZXJhbmdlcGlja2VyX2VuZF0nKS5pcyhcIjpmb2N1c1wiKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciBsYWJlbCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yYW5nZS1rZXknKTtcblxuICAgICAgICAgICAgaWYgKGxhYmVsID09IHRoaXMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzID0gdGhpcy5yYW5nZXNbbGFiZWxdO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9ZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XScpLnZhbChkYXRlc1swXS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1kYXRlcmFuZ2VwaWNrZXJfZW5kXScpLnZhbChkYXRlc1sxXS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjbGlja1JhbmdlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmFuZ2Uta2V5Jyk7XG4gICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gbGFiZWw7XG4gICAgICAgICAgICBpZiAobGFiZWwgPT0gdGhpcy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NhbGVuZGFycygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZXMgPSB0aGlzLnJhbmdlc1tsYWJlbF07XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlc1sxXTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUuZW5kT2YoJ2RheScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbHdheXNTaG93Q2FsZW5kYXJzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrQXBwbHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjbGlja1ByZXY6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuY2FsZW5kYXInKTtcbiAgICAgICAgICAgIGlmIChjYWwuaGFzQ2xhc3MoJ2xlZnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnN1YnRyYWN0KDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLnN1YnRyYWN0KDEsICdtb250aCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGguc3VidHJhY3QoMSwgJ21vbnRoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsaWNrTmV4dDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIGNhbCA9ICQoZS50YXJnZXQpLnBhcmVudHMoJy5jYWxlbmRhcicpO1xuICAgICAgICAgICAgaWYgKGNhbC5oYXNDbGFzcygnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguYWRkKDEsICdtb250aCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGguYWRkKDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguYWRkKDEsICdtb250aCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBob3ZlckRhdGU6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgLy9pZ25vcmUgbW91c2UgbW92ZW1lbnRzIHdoaWxlIGFuIGFib3ZlLWNhbGVuZGFyIHRleHQgaW5wdXQgaGFzIGZvY3VzXG4gICAgICAgICAgICAvL2lmICh0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9zdGFydF0nKS5pcyhcIjpmb2N1c1wiKSB8fCB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9lbmRdJykuaXMoXCI6Zm9jdXNcIikpXG4gICAgICAgICAgICAvLyAgICByZXR1cm47XG5cbiAgICAgICAgICAgIC8vaWdub3JlIGRhdGVzIHRoYXQgY2FuJ3QgYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2F2YWlsYWJsZScpKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vaGF2ZSB0aGUgdGV4dCBpbnB1dHMgYWJvdmUgY2FsZW5kYXJzIHJlZmxlY3QgdGhlIGRhdGUgYmVpbmcgaG92ZXJlZCBvdmVyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAkKGUudGFyZ2V0KS5hdHRyKCdkYXRhLXRpdGxlJyk7XG4gICAgICAgICAgICB2YXIgcm93ID0gdGl0bGUuc3Vic3RyKDEsIDEpO1xuICAgICAgICAgICAgdmFyIGNvbCA9IHRpdGxlLnN1YnN0cigzLCAxKTtcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuY2FsZW5kYXInKTtcbiAgICAgICAgICAgIHZhciBkYXRlID0gY2FsLmhhc0NsYXNzKCdsZWZ0JykgPyB0aGlzLmxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXJbcm93XVtjb2xdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlICYmICF0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPWRhdGVyYW5nZXBpY2tlcl9zdGFydF0nKS5pcyhcIjpmb2N1c1wiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9ZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XScpLnZhbChkYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW5kRGF0ZSAmJiAhdGhpcy5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1kYXRlcmFuZ2VwaWNrZXJfZW5kXScpLmlzKFwiOmZvY3VzXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1kYXRlcmFuZ2VwaWNrZXJfZW5kXScpLnZhbChkYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGRhdGVzIGJldHdlZW4gdGhlIHN0YXJ0IGRhdGUgYW5kIHRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgYXMgYSBwb3RlbnRpYWwgZW5kIGRhdGVcbiAgICAgICAgICAgIHZhciBsZWZ0Q2FsZW5kYXIgPSB0aGlzLmxlZnRDYWxlbmRhcjtcbiAgICAgICAgICAgIHZhciByaWdodENhbGVuZGFyID0gdGhpcy5yaWdodENhbGVuZGFyO1xuICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXIgdGJvZHkgdGQnKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vc2tpcCB3ZWVrIG51bWJlcnMsIG9ubHkgbG9vayBhdCBkYXRlc1xuICAgICAgICAgICAgICAgICAgICBpZiAoJChlbCkuaGFzQ2xhc3MoJ3dlZWsnKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICQoZWwpLmF0dHIoJ2RhdGEtdGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHRpdGxlLnN1YnN0cigxLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbCA9IHRpdGxlLnN1YnN0cigzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbCA9ICQoZWwpLnBhcmVudHMoJy5jYWxlbmRhcicpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZHQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKSA/IGxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiByaWdodENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoKGR0LmlzQWZ0ZXIoc3RhcnREYXRlKSAmJiBkdC5pc0JlZm9yZShkYXRlKSkgfHwgZHQuaXNTYW1lKGRhdGUsICdkYXknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuYWRkQ2xhc3MoJ2luLXJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5yZW1vdmVDbGFzcygnaW4tcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjbGlja0RhdGU6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgaWYgKCEkKGUudGFyZ2V0KS5oYXNDbGFzcygnYXZhaWxhYmxlJykpIHJldHVybjtcblxuICAgICAgICAgICAgdmFyIHRpdGxlID0gJChlLnRhcmdldCkuYXR0cignZGF0YS10aXRsZScpO1xuICAgICAgICAgICAgdmFyIHJvdyA9IHRpdGxlLnN1YnN0cigxLCAxKTtcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aXRsZS5zdWJzdHIoMywgMSk7XG4gICAgICAgICAgICB2YXIgY2FsID0gJChlLnRhcmdldCkucGFyZW50cygnLmNhbGVuZGFyJyk7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGNhbC5oYXNDbGFzcygnbGVmdCcpID8gdGhpcy5sZWZ0Q2FsZW5kYXIuY2FsZW5kYXJbcm93XVtjb2xdIDogdGhpcy5yaWdodENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXTtcblxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gZG8gYSBmZXcgdGhpbmdzOlxuICAgICAgICAgICAgLy8gKiBhbHRlcm5hdGUgYmV0d2VlbiBzZWxlY3RpbmcgYSBzdGFydCBhbmQgZW5kIGRhdGUgZm9yIHRoZSByYW5nZSxcbiAgICAgICAgICAgIC8vICogaWYgdGhlIHRpbWUgcGlja2VyIGlzIGVuYWJsZWQsIGFwcGx5IHRoZSBob3VyL21pbnV0ZS9zZWNvbmQgZnJvbSB0aGUgc2VsZWN0IGJveGVzIHRvIHRoZSBjbGlja2VkIGRhdGVcbiAgICAgICAgICAgIC8vICogaWYgYXV0b2FwcGx5IGlzIGVuYWJsZWQsIGFuZCBhbiBlbmQgZGF0ZSB3YXMgY2hvc2VuLCBhcHBseSB0aGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAvLyAqIGlmIHNpbmdsZSBkYXRlIHBpY2tlciBtb2RlLCBhbmQgdGltZSBwaWNrZXIgaXNuJ3QgZW5hYmxlZCwgYXBwbHkgdGhlIHNlbGVjdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgLy8gKiBpZiBvbmUgb2YgdGhlIGlucHV0cyBhYm92ZSB0aGUgY2FsZW5kYXJzIHdhcyBmb2N1c2VkLCBjYW5jZWwgdGhhdCBtYW51YWwgaW5wdXRcbiAgICAgICAgICAgIC8vXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgfHwgZGF0ZS5pc0JlZm9yZSh0aGlzLnN0YXJ0RGF0ZSwgJ2RheScpKSB7IC8vcGlja2luZyBzdGFydFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuaG91cnNlbGVjdCcpLnZhbCgpLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW1wbSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5hbXBtc2VsZWN0JykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VyIDwgMTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXJ0RGF0ZShkYXRlLmNsb25lKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5lbmREYXRlICYmIGRhdGUuaXNCZWZvcmUodGhpcy5zdGFydERhdGUpKSB7XG4gICAgICAgICAgICAgICAgLy9zcGVjaWFsIGNhc2U6IGNsaWNraW5nIHRoZSBzYW1lIGRhdGUgZm9yIHN0YXJ0L2VuZCxcbiAgICAgICAgICAgICAgICAvL2J1dCB0aGUgdGltZSBvZiB0aGUgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKHRoaXMuc3RhcnREYXRlLmNsb25lKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcGlja2luZyBlbmRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBob3VyID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5ob3Vyc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5hbXBtc2VsZWN0JykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VyIDwgMTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5zZWNvbmRzZWxlY3QnKS52YWwoKSwgMTApIDogMDtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGRhdGUuY2xvbmUoKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoZGF0ZS5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvQXBwbHkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ2hvc2VuTGFiZWwoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tBcHBseSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tBcHBseSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcblxuICAgICAgICAgICAgLy9UaGlzIGlzIHRvIGNhbmNlbCB0aGUgYmx1ciBldmVudCBoYW5kbGVyIGlmIHRoZSBtb3VzZSB3YXMgaW4gb25lIG9mIHRoZSBpbnB1dHNcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxjdWxhdGVDaG9zZW5MYWJlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGN1c3RvbVJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIHJhbmdlIGluIHRoaXMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBcIllZWVktTU0tREQgaGg6bW06c3NcIiA6IFwiWVlZWS1NTS1ERCBoaDptbVwiO1xuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZSB0aW1lcyB3aGVuIGNvbXBhcmluZyBkYXRlcyBpZiB0aW1lIHBpY2tlciBzZWNvbmRzIGlzIG5vdCBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQoZm9ybWF0KSA9PSB0aGlzLnJhbmdlc1tyYW5nZV1bMF0uZm9ybWF0KGZvcm1hdCkgJiYgdGhpcy5lbmREYXRlLmZvcm1hdChmb3JtYXQpID09IHRoaXMucmFuZ2VzW3JhbmdlXVsxXS5mb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzIGxpOmVxKCcgKyBpICsgJyknKS5hZGRDbGFzcygnYWN0aXZlJykuaHRtbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZSB0aW1lcyB3aGVuIGNvbXBhcmluZyBkYXRlcyBpZiB0aW1lIHBpY2tlciBpcyBub3QgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5yYW5nZXNbcmFuZ2VdWzBdLmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIHRoaXMuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PSB0aGlzLnJhbmdlc1tyYW5nZV1bMV0uZm9ybWF0KCdZWVlZLU1NLUREJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVJhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJhbmdlcyBsaTplcSgnICsgaSArICcpJykuYWRkQ2xhc3MoJ2FjdGl2ZScpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXN0b21SYW5nZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzIGxpOmxhc3QnKS5hZGRDbGFzcygnYWN0aXZlJykuaHRtbCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjbGlja0FwcGx5OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdhcHBseS5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjbGlja0NhbmNlbDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm9sZFN0YXJ0RGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMub2xkRW5kRGF0ZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBtb250aE9yWWVhckNoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBpc0xlZnQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuY2FsZW5kYXInKS5oYXNDbGFzcygnbGVmdCcpLFxuICAgICAgICAgICAgICAgIGxlZnRPclJpZ2h0ID0gaXNMZWZ0ID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICBjYWwgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXIuJytsZWZ0T3JSaWdodCk7XG5cbiAgICAgICAgICAgIC8vIE1vbnRoIG11c3QgYmUgTnVtYmVyIGZvciBuZXcgbW9tZW50IHZlcnNpb25zXG4gICAgICAgICAgICB2YXIgbW9udGggPSBwYXJzZUludChjYWwuZmluZCgnLm1vbnRoc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgIHZhciB5ZWFyID0gY2FsLmZpbmQoJy55ZWFyc2VsZWN0JykudmFsKCk7XG5cbiAgICAgICAgICAgIGlmICghaXNMZWZ0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPCB0aGlzLnN0YXJ0RGF0ZS55ZWFyKCkgfHwgKHllYXIgPT0gdGhpcy5zdGFydERhdGUueWVhcigpICYmIG1vbnRoIDwgdGhpcy5zdGFydERhdGUubW9udGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLnN0YXJ0RGF0ZS5tb250aCgpO1xuICAgICAgICAgICAgICAgICAgICB5ZWFyID0gdGhpcy5zdGFydERhdGUueWVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5taW5EYXRlLnllYXIoKSB8fCAoeWVhciA9PSB0aGlzLm1pbkRhdGUueWVhcigpICYmIG1vbnRoIDwgdGhpcy5taW5EYXRlLm1vbnRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdGhpcy5taW5EYXRlLm1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLm1pbkRhdGUueWVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh5ZWFyID4gdGhpcy5tYXhEYXRlLnllYXIoKSB8fCAoeWVhciA9PSB0aGlzLm1heERhdGUueWVhcigpICYmIG1vbnRoID4gdGhpcy5tYXhEYXRlLm1vbnRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdGhpcy5tYXhEYXRlLm1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLm1heERhdGUueWVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguY2xvbmUoKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5tb250aChtb250aCkueWVhcih5ZWFyKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saW5rZWRDYWxlbmRhcnMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLmNsb25lKCkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRpbWVDaGFuZ2VkOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuY2FsZW5kYXInKSxcbiAgICAgICAgICAgICAgICBpc0xlZnQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKTtcblxuICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludChjYWwuZmluZCgnLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IHBhcnNlSW50KGNhbC5maW5kKCcubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcbiAgICAgICAgICAgIHZhciBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQoY2FsLmZpbmQoJy5zZWNvbmRzZWxlY3QnKS52YWwoKSwgMTApIDogMDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW1wbSA9IGNhbC5maW5kKCcuYW1wbXNlbGVjdCcpLnZhbCgpO1xuICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0xlZnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIHN0YXJ0LmhvdXIoaG91cik7XG4gICAgICAgICAgICAgICAgc3RhcnQubWludXRlKG1pbnV0ZSk7XG4gICAgICAgICAgICAgICAgc3RhcnQuc2Vjb25kKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5kRGF0ZSAmJiB0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gc3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgdGhpcy5lbmREYXRlLmlzQmVmb3JlKHN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgZW5kLmhvdXIoaG91cik7XG4gICAgICAgICAgICAgICAgZW5kLm1pbnV0ZShtaW51dGUpO1xuICAgICAgICAgICAgICAgIGVuZC5zZWNvbmQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoZW5kKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIGNhbGVuZGFycyBzbyBhbGwgY2xpY2thYmxlIGRhdGVzIHJlZmxlY3QgdGhlIG5ldyB0aW1lIGNvbXBvbmVudFxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcblxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIGZvcm0gaW5wdXRzIGFib3ZlIHRoZSBjYWxlbmRhcnMgd2l0aCB0aGUgbmV3IHRpbWVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUlucHV0cygpO1xuXG4gICAgICAgICAgICAvL3JlLXJlbmRlciB0aGUgdGltZSBwaWNrZXJzIGJlY2F1c2UgY2hhbmdpbmcgb25lIHNlbGVjdGlvbiBjYW4gYWZmZWN0IHdoYXQncyBlbmFibGVkIGluIGFub3RoZXJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcignbGVmdCcpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ybUlucHV0c0NoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBpc1JpZ2h0ID0gJChlLnRhcmdldCkuY2xvc2VzdCgnLmNhbGVuZGFyJykuaGFzQ2xhc3MoJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBtb21lbnQodGhpcy5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1cImRhdGVyYW5nZXBpY2tlcl9zdGFydFwiXScpLnZhbCgpLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuICAgICAgICAgICAgdmFyIGVuZCA9IG1vbWVudCh0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX2VuZFwiXScpLnZhbCgpLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnQuaXNWYWxpZCgpICYmIGVuZC5pc1ZhbGlkKCkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChpc1JpZ2h0ICYmIGVuZC5pc0JlZm9yZShzdGFydCkpXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kLmNsb25lKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX3N0YXJ0XCJdJykudmFsKHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiZGF0ZXJhbmdlcGlja2VyX2VuZFwiXScpLnZhbCh0aGlzLmVuZERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmb3JtSW5wdXRzRm9jdXNlZDogZnVuY3Rpb24oZSkge1xuXG4gICAgICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGZvY3VzZWQgaW5wdXRcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9XCJkYXRlcmFuZ2VwaWNrZXJfc3RhcnRcIl0sIGlucHV0W25hbWU9XCJkYXRlcmFuZ2VwaWNrZXJfZW5kXCJdJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgJChlLnRhcmdldCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHN0YXRlIHN1Y2ggdGhhdCBpZiB0aGUgdXNlciBnb2VzIGJhY2sgdG8gdXNpbmcgYSBtb3VzZSwgXG4gICAgICAgICAgICAvLyB0aGUgY2FsZW5kYXJzIGFyZSBhd2FyZSB3ZSdyZSBzZWxlY3RpbmcgdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIG5vdFxuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0LiBUaGlzIGFsbG93cyBzb21lb25lIHRvIGVkaXQgdGhlIGVuZCBvZiBhIGRhdGUgcmFuZ2Ugd2l0aG91dFxuICAgICAgICAgICAgLy8gcmUtc2VsZWN0aW5nIHRoZSBiZWdpbm5pbmcsIGJ5IGNsaWNraW5nIG9uIHRoZSBlbmQgZGF0ZSBpbnB1dCB0aGVuXG4gICAgICAgICAgICAvLyB1c2luZyB0aGUgY2FsZW5kYXIuXG4gICAgICAgICAgICB2YXIgaXNSaWdodCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5jYWxlbmRhcicpLmhhc0NsYXNzKCdyaWdodCcpO1xuICAgICAgICAgICAgaWYgKGlzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnREYXRlKHRoaXMuc3RhcnREYXRlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ybUlucHV0c0JsdXJyZWQ6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBoYXMgb25lIHB1cnBvc2UgcmlnaHQgbm93OiBpZiB5b3UgdGFiIGZyb20gdGhlIGZpcnN0XG4gICAgICAgICAgICAvLyB0ZXh0IGlucHV0IHRvIHRoZSBzZWNvbmQgaW4gdGhlIFVJLCB0aGUgZW5kRGF0ZSBpcyBudWxsZWQgc28gdGhhdFxuICAgICAgICAgICAgLy8geW91IGNhbiBjbGljayBhbm90aGVyLCBidXQgaWYgeW91IHRhYiBvdXQgd2l0aG91dCBjbGlja2luZyBhbnl0aGluZ1xuICAgICAgICAgICAgLy8gb3IgY2hhbmdpbmcgdGhlIGlucHV0IHZhbHVlLCB0aGUgb2xkIGVuZERhdGUgc2hvdWxkIGJlIHJldGFpbmVkXG5cbiAgICAgICAgICAgIGlmICghdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9XCJkYXRlcmFuZ2VwaWNrZXJfZW5kXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG1vbWVudCh2YWwsIHRoaXMubG9jYWxlLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGZvcm1JbnB1dHNLZXlkb3duOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBpZiB0aGUgJ2VudGVyJyBrZXkgd2FzIHByZXNzZWQgaW4gdGhlIGlucHV0LCB0aGVuIHRoZSBjYWxlbmRhcnNcbiAgICAgICAgICAgIC8vIGFyZSB1cGRhdGVkIHdpdGggdGhlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZS5cbiAgICAgICAgICAgIC8vIFRoaXMgYmVoYXZpb3VyIGlzIGF1dG9tYXRpYyBpbiBDaHJvbWUvRmlyZWZveC9FZGdlIGJ1dCBub3QgaW4gSUUgMTEgaGVuY2Ugd2h5IHRoaXMgZXhpc3RzLlxuICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnMgYW5kIHZlcnNpb25zIG9mIElFIGFyZSB1bnRlc3RlZCBhbmQgdGhlIGJlaGF2aW91ciBpcyB1bmtub3duLlxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBjYWxlbmRhciBmcm9tIGJlaW5nIHVwZGF0ZWQgdHdpY2Ugb24gQ2hyb21lL0ZpcmVmb3gvRWRnZVxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtSW5wdXRzQ2hhbmdlZChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuXG4gICAgICAgIGVsZW1lbnRDaGFuZ2VkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC52YWwoKS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgICAgdmFyIGRhdGVTdHJpbmcgPSB0aGlzLmVsZW1lbnQudmFsKCkuc3BsaXQodGhpcy5sb2NhbGUuc2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICBzdGFydCA9IG51bGwsXG4gICAgICAgICAgICAgICAgZW5kID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQoZGF0ZVN0cmluZ1swXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQoZGF0ZVN0cmluZ1sxXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlciB8fCBzdGFydCA9PT0gbnVsbCB8fCBlbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IG1vbWVudCh0aGlzLmVsZW1lbnQudmFsKCksIHRoaXMubG9jYWxlLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc3RhcnQuaXNWYWxpZCgpIHx8ICFlbmQuaXNWYWxpZCgpKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhcnREYXRlKHN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9oaWRlIG9uIHRhYiBvciBlbnRlclxuICAgICAgICAgICAgaWYgKChlLmtleUNvZGUgPT09IDkpIHx8IChlLmtleUNvZGUgPT09IDEzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2hpZGUgb24gZXNjIGFuZCBwcmV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpICYmICF0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdGhpcy5hdXRvVXBkYXRlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQudmFsKHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpICsgdGhpcy5sb2NhbGUuc2VwYXJhdG9yICsgdGhpcy5lbmREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKSAmJiB0aGlzLmF1dG9VcGRhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC52YWwodGhpcy5zdGFydERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQub2ZmKCcuZGF0ZXJhbmdlcGlja2VyJyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgJC5mbi5kYXRlcmFuZ2VwaWNrZXIgPSBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaW1wbGVtZW50T3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLmZuLmRhdGVyYW5nZXBpY2tlci5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBlbCA9ICQodGhpcyk7XG4gICAgICAgICAgICBpZiAoZWwuZGF0YSgnZGF0ZXJhbmdlcGlja2VyJykpXG4gICAgICAgICAgICAgICAgZWwuZGF0YSgnZGF0ZXJhbmdlcGlja2VyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICBlbC5kYXRhKCdkYXRlcmFuZ2VwaWNrZXInLCBuZXcgRGF0ZVJhbmdlUGlja2VyKGVsLCBpbXBsZW1lbnRPcHRpb25zLCBjYWxsYmFjaykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIHJldHVybiBEYXRlUmFuZ2VQaWNrZXI7XG5cbn0pKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///58\n"); -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { +/***/ 52: +/***/ (function(module, exports) { -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Datepicker for Bootstrap v1.7.1 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n!function(a){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):a(\"object\"==typeof exports?require(\"jquery\"):jQuery)}(function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(c,d){return function(){return d!==b&&a.fn.datepicker.deprecated(d),this[c].apply(this,arguments)}}function g(a){return a&&!isNaN(a.getTime())}function h(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp(\"^\"+c.toLowerCase()+\"([A-Z])\");c=new RegExp(\"^\"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function i(b){var c={};if(q[b]||(b=b.split(\"-\")[0],q[b])){var d=q[b];return a.each(p,function(a,b){b in d&&(c[b]=d[b])}),c}}var j=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;c<d;c++)if(0<=this[c].valueOf()-b&&this[c].valueOf()-b<864e5)return c;return-1},remove:function(a){this.splice(a,1)},replace:function(b){b&&(a.isArray(b)||(b=[b]),this.clear(),this.push.apply(this,b))},clear:function(){this.length=0},copy:function(){var a=new j;return a.replace(this),a}};return function(){var c=[];return c.push.apply(c,arguments),a.extend(c,b),c}}(),k=function(b,c){a.data(b,\"datepicker\",this),this._process_options(c),this.dates=new j,this.viewDate=this.o.defaultViewDate,this.focusDate=null,this.element=a(b),this.isInput=this.element.is(\"input\"),this.inputField=this.isInput?this.element:this.element.find(\"input\"),this.component=!!this.element.hasClass(\"date\")&&this.element.find(\".add-on, .input-group-addon, .btn\"),this.component&&0===this.component.length&&(this.component=!1),this.isInline=!this.component&&this.element.is(\"div\"),this.picker=a(r.template),this._check_template(this.o.templates.leftArrow)&&this.picker.find(\".prev\").html(this.o.templates.leftArrow),this._check_template(this.o.templates.rightArrow)&&this.picker.find(\".next\").html(this.o.templates.rightArrow),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass(\"datepicker-inline\").appendTo(this.element):this.picker.addClass(\"datepicker-dropdown dropdown-menu\"),this.o.rtl&&this.picker.addClass(\"datepicker-rtl\"),this.o.calendarWeeks&&this.picker.find(\".datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear\").attr(\"colspan\",function(a,b){return Number(b)+1}),this._process_options({startDate:this._o.startDate,endDate:this._o.endDate,daysOfWeekDisabled:this.o.daysOfWeekDisabled,daysOfWeekHighlighted:this.o.daysOfWeekHighlighted,datesDisabled:this.o.datesDisabled}),this._allow_update=!1,this.setViewMode(this.o.startView),this._allow_update=!0,this.fillDow(),this.fillMonths(),this.update(),this.isInline&&this.show()};k.prototype={constructor:k,_resolveViewName:function(b){return a.each(r.viewModes,function(c,d){if(b===c||a.inArray(b,d.names)!==-1)return b=c,!1}),b},_resolveDaysOfWeek:function(b){return a.isArray(b)||(b=b.split(/[,\\s]*/)),a.map(b,Number)},_check_template:function(c){try{if(c===b||\"\"===c)return!1;if((c.match(/[<>]/g)||[]).length<=0)return!0;var d=a(c);return d.length>0}catch(a){return!1}},_process_options:function(b){this._o=a.extend({},this._o,b);var e=this.o=a.extend({},this._o),f=e.language;q[f]||(f=f.split(\"-\")[0],q[f]||(f=o.language)),e.language=f,e.startView=this._resolveViewName(e.startView),e.minViewMode=this._resolveViewName(e.minViewMode),e.maxViewMode=this._resolveViewName(e.maxViewMode),e.startView=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,e.startView)),e.multidate!==!0&&(e.multidate=Number(e.multidate)||!1,e.multidate!==!1&&(e.multidate=Math.max(0,e.multidate))),e.multidateSeparator=String(e.multidateSeparator),e.weekStart%=7,e.weekEnd=(e.weekStart+6)%7;var g=r.parseFormat(e.format);e.startDate!==-(1/0)&&(e.startDate?e.startDate instanceof Date?e.startDate=this._local_to_utc(this._zero_time(e.startDate)):e.startDate=r.parseDate(e.startDate,g,e.language,e.assumeNearbyYear):e.startDate=-(1/0)),e.endDate!==1/0&&(e.endDate?e.endDate instanceof Date?e.endDate=this._local_to_utc(this._zero_time(e.endDate)):e.endDate=r.parseDate(e.endDate,g,e.language,e.assumeNearbyYear):e.endDate=1/0),e.daysOfWeekDisabled=this._resolveDaysOfWeek(e.daysOfWeekDisabled||[]),e.daysOfWeekHighlighted=this._resolveDaysOfWeek(e.daysOfWeekHighlighted||[]),e.datesDisabled=e.datesDisabled||[],a.isArray(e.datesDisabled)||(e.datesDisabled=e.datesDisabled.split(\",\")),e.datesDisabled=a.map(e.datesDisabled,function(a){return r.parseDate(a,g,e.language,e.assumeNearbyYear)});var h=String(e.orientation).toLowerCase().split(/\\s+/g),i=e.orientation.toLowerCase();if(h=a.grep(h,function(a){return/^auto|left|right|top|bottom$/.test(a)}),e.orientation={x:\"auto\",y:\"auto\"},i&&\"auto\"!==i)if(1===h.length)switch(h[0]){case\"top\":case\"bottom\":e.orientation.y=h[0];break;case\"left\":case\"right\":e.orientation.x=h[0]}else i=a.grep(h,function(a){return/^left|right$/.test(a)}),e.orientation.x=i[0]||\"auto\",i=a.grep(h,function(a){return/^top|bottom$/.test(a)}),e.orientation.y=i[0]||\"auto\";else;if(e.defaultViewDate instanceof Date||\"string\"==typeof e.defaultViewDate)e.defaultViewDate=r.parseDate(e.defaultViewDate,g,e.language,e.assumeNearbyYear);else if(e.defaultViewDate){var j=e.defaultViewDate.year||(new Date).getFullYear(),k=e.defaultViewDate.month||0,l=e.defaultViewDate.day||1;e.defaultViewDate=c(j,k,l)}else e.defaultViewDate=d()},_events:[],_secondaryEvents:[],_applyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(d=b,e=a[f][1]):3===a[f].length&&(d=a[f][1],e=a[f][2]),c.on(e,d)},_unapplyEvents:function(a){for(var c,d,e,f=0;f<a.length;f++)c=a[f][0],2===a[f].length?(e=b,d=a[f][1]):3===a[f].length&&(e=a[f][1],d=a[f][2]),c.off(d,e)},_buildEvents:function(){var b={keyup:a.proxy(function(b){a.inArray(b.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:a.proxy(this.keydown,this),paste:a.proxy(this.paste,this)};this.o.showOnFocus===!0&&(b.focus=a.proxy(this.show,this)),this.isInput?this._events=[[this.element,b]]:this.component&&this.inputField.length?this._events=[[this.inputField,b],[this.component,{click:a.proxy(this.show,this)}]]:this._events=[[this.element,{click:a.proxy(this.show,this),keydown:a.proxy(this.keydown,this)}]],this._events.push([this.element,\"*\",{blur:a.proxy(function(a){this._focused_from=a.target},this)}],[this.element,{blur:a.proxy(function(a){this._focused_from=a.target},this)}]),this.o.immediateUpdates&&this._events.push([this.element,{\"changeYear changeMonth\":a.proxy(function(a){this.update(a.date)},this)}]),this._secondaryEvents=[[this.picker,{click:a.proxy(this.click,this)}],[this.picker,\".prev, .next\",{click:a.proxy(this.navArrowsClick,this)}],[this.picker,\".day:not(.disabled)\",{click:a.proxy(this.dayCellClick,this)}],[a(window),{resize:a.proxy(this.place,this)}],[a(document),{\"mousedown touchstart\":a.proxy(function(a){this.element.is(a.target)||this.element.find(a.target).length||this.picker.is(a.target)||this.picker.find(a.target).length||this.isInline||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(b,c){var d=c||this.dates.get(-1),e=this._utc_to_local(d);this.element.trigger({type:b,date:e,viewMode:this.viewMode,dates:a.map(this.dates,this._utc_to_local),format:a.proxy(function(a,b){0===arguments.length?(a=this.dates.length-1,b=this.o.format):\"string\"==typeof a&&(b=a,a=this.dates.length-1),b=b||this.o.format;var c=this.dates.get(a);return r.formatDate(c,b,this.o.language)},this)})},show:function(){if(!(this.inputField.prop(\"disabled\")||this.inputField.prop(\"readonly\")&&this.o.enableOnReadonly===!1))return this.isInline||this.picker.appendTo(this.o.container),this.place(),this.picker.show(),this._attachSecondaryEvents(),this._trigger(\"show\"),(window.navigator.msMaxTouchPoints||\"ontouchstart\"in document)&&this.o.disableTouchKeyboard&&a(this.element).blur(),this},hide:function(){return this.isInline||!this.picker.is(\":visible\")?this:(this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.setViewMode(this.o.startView),this.o.forceParse&&this.inputField.val()&&this.setValue(),this._trigger(\"hide\"),this)},destroy:function(){return this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date,this},paste:function(b){var c;if(b.originalEvent.clipboardData&&b.originalEvent.clipboardData.types&&a.inArray(\"text/plain\",b.originalEvent.clipboardData.types)!==-1)c=b.originalEvent.clipboardData.getData(\"text/plain\");else{if(!window.clipboardData)return;c=window.clipboardData.getData(\"Text\")}this.setDate(c),this.update(),b.preventDefault()},_utc_to_local:function(a){if(!a)return a;var b=new Date(a.getTime()+6e4*a.getTimezoneOffset());return b.getTimezoneOffset()!==a.getTimezoneOffset()&&(b=new Date(a.getTime()+6e4*b.getTimezoneOffset())),b},_local_to_utc:function(a){return a&&new Date(a.getTime()-6e4*a.getTimezoneOffset())},_zero_time:function(a){return a&&new Date(a.getFullYear(),a.getMonth(),a.getDate())},_zero_utc_time:function(a){return a&&c(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate())},getDates:function(){return a.map(this.dates,this._utc_to_local)},getUTCDates:function(){return a.map(this.dates,function(a){return new Date(a)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){var a=this.dates.get(-1);return a!==b?new Date(a):null},clearDates:function(){this.inputField.val(\"\"),this.update(),this._trigger(\"changeDate\"),this.o.autoclose&&this.hide()},setDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,b),this._trigger(\"changeDate\"),this.setValue(),this},setUTCDates:function(){var b=a.isArray(arguments[0])?arguments[0]:arguments;return this.setDates.apply(this,a.map(b,this._utc_to_local)),this},setDate:f(\"setDates\"),setUTCDate:f(\"setUTCDates\"),remove:f(\"destroy\",\"Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead\"),setValue:function(){var a=this.getFormattedDate();return this.inputField.val(a),this},getFormattedDate:function(c){c===b&&(c=this.o.format);var d=this.o.language;return a.map(this.dates,function(a){return r.formatDate(a,c,d)}).join(this.o.multidateSeparator)},getStartDate:function(){return this.o.startDate},setStartDate:function(a){return this._process_options({startDate:a}),this.update(),this.updateNavArrows(),this},getEndDate:function(){return this.o.endDate},setEndDate:function(a){return this._process_options({endDate:a}),this.update(),this.updateNavArrows(),this},setDaysOfWeekDisabled:function(a){return this._process_options({daysOfWeekDisabled:a}),this.update(),this},setDaysOfWeekHighlighted:function(a){return this._process_options({daysOfWeekHighlighted:a}),this.update(),this},setDatesDisabled:function(a){return this._process_options({datesDisabled:a}),this.update(),this},place:function(){if(this.isInline)return this;var b=this.picker.outerWidth(),c=this.picker.outerHeight(),d=10,e=a(this.o.container),f=e.width(),g=\"body\"===this.o.container?a(document).scrollTop():e.scrollTop(),h=e.offset(),i=[0];this.element.parents().each(function(){var b=a(this).css(\"z-index\");\"auto\"!==b&&0!==Number(b)&&i.push(Number(b))});var j=Math.max.apply(Math,i)+this.o.zIndexOffset,k=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),m=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),n=k.left-h.left,o=k.top-h.top;\"body\"!==this.o.container&&(o+=g),this.picker.removeClass(\"datepicker-orient-top datepicker-orient-bottom datepicker-orient-right datepicker-orient-left\"),\"auto\"!==this.o.orientation.x?(this.picker.addClass(\"datepicker-orient-\"+this.o.orientation.x),\"right\"===this.o.orientation.x&&(n-=b-m)):k.left<0?(this.picker.addClass(\"datepicker-orient-left\"),n-=k.left-d):n+b>f?(this.picker.addClass(\"datepicker-orient-right\"),n+=m-b):this.o.rtl?this.picker.addClass(\"datepicker-orient-right\"):this.picker.addClass(\"datepicker-orient-left\");var p,q=this.o.orientation.y;if(\"auto\"===q&&(p=-g+o-c,q=p<0?\"bottom\":\"top\"),this.picker.addClass(\"datepicker-orient-\"+q),\"top\"===q?o-=c+parseInt(this.picker.css(\"padding-top\")):o+=l,this.o.rtl){var r=f-(n+m);this.picker.css({top:o,right:r,zIndex:j})}else this.picker.css({top:o,left:n,zIndex:j});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data(\"date\")||this.inputField.val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return r.parseDate(a,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),c=a.grep(c,a.proxy(function(a){return!this.dateWithinRange(a)||!a},this),!0),this.dates.replace(c),this.o.updateViewDate&&(this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate),d?(this.setValue(),this.element.change()):this.dates.length&&String(b)!==String(this.dates)&&d&&(this._trigger(\"changeDate\"),this.element.change()),!this.dates.length&&b.length&&(this._trigger(\"clearDate\"),this.element.change()),this.fill(),this},fillDow:function(){if(this.o.showWeekDays){var b=this.o.weekStart,c=\"<tr>\";for(this.o.calendarWeeks&&(c+='<th class=\"cw\"> </th>');b<this.o.weekStart+7;)c+='<th class=\"dow',a.inArray(b,this.o.daysOfWeekDisabled)!==-1&&(c+=\" disabled\"),c+='\">'+q[this.o.language].daysMin[b++%7]+\"</th>\";c+=\"</tr>\",this.picker.find(\".datepicker-days thead\").append(c)}},fillMonths:function(){for(var a,b=this._utc_to_local(this.viewDate),c=\"\",d=0;d<12;d++)a=b&&b.getMonth()===d?\" focused\":\"\",c+='<span class=\"month'+a+'\">'+q[this.o.language].monthsShort[d]+\"</span>\";this.picker.find(\".datepicker-months td\").html(c)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],f=this.viewDate.getUTCFullYear(),g=this.viewDate.getUTCMonth(),h=d();return b.getUTCFullYear()<f||b.getUTCFullYear()===f&&b.getUTCMonth()<g?c.push(\"old\"):(b.getUTCFullYear()>f||b.getUTCFullYear()===f&&b.getUTCMonth()>g)&&c.push(\"new\"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push(\"focused\"),this.o.todayHighlight&&e(b,h)&&c.push(\"today\"),this.dates.contains(b)!==-1&&c.push(\"active\"),this.dateWithinRange(b)||c.push(\"disabled\"),this.dateIsDisabled(b)&&c.push(\"disabled\",\"disabled-date\"),a.inArray(b.getUTCDay(),this.o.daysOfWeekHighlighted)!==-1&&c.push(\"highlighted\"),this.range&&(b>this.range[0]&&b<this.range[this.range.length-1]&&c.push(\"range\"),a.inArray(b.valueOf(),this.range)!==-1&&c.push(\"selected\"),b.valueOf()===this.range[0]&&c.push(\"range-start\"),b.valueOf()===this.range[this.range.length-1]&&c.push(\"range-end\")),c},_fill_yearsView:function(c,d,e,f,g,h,i){for(var j,k,l,m=\"\",n=e/10,o=this.picker.find(c),p=Math.floor(f/e)*e,q=p+9*n,r=Math.floor(this.viewDate.getFullYear()/n)*n,s=a.map(this.dates,function(a){return Math.floor(a.getUTCFullYear()/n)*n}),t=p-n;t<=q+n;t+=n)j=[d],k=null,t===p-n?j.push(\"old\"):t===q+n&&j.push(\"new\"),a.inArray(t,s)!==-1&&j.push(\"active\"),(t<g||t>h)&&j.push(\"disabled\"),t===r&&j.push(\"focused\"),i!==a.noop&&(l=i(new Date(t,0,1)),l===b?l={}:\"boolean\"==typeof l?l={enabled:l}:\"string\"==typeof l&&(l={classes:l}),l.enabled===!1&&j.push(\"disabled\"),l.classes&&(j=j.concat(l.classes.split(/\\s+/))),l.tooltip&&(k=l.tooltip)),m+='<span class=\"'+j.join(\" \")+'\"'+(k?' title=\"'+k+'\"':\"\")+\">\"+t+\"</span>\";o.find(\".datepicker-switch\").text(p+\"-\"+q),o.find(\"td\").html(m)},fill:function(){var d,e,f=new Date(this.viewDate),g=f.getUTCFullYear(),h=f.getUTCMonth(),i=this.o.startDate!==-(1/0)?this.o.startDate.getUTCFullYear():-(1/0),j=this.o.startDate!==-(1/0)?this.o.startDate.getUTCMonth():-(1/0),k=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,l=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,m=q[this.o.language].today||q.en.today||\"\",n=q[this.o.language].clear||q.en.clear||\"\",o=q[this.o.language].titleFormat||q.en.titleFormat;if(!isNaN(g)&&!isNaN(h)){this.picker.find(\".datepicker-days .datepicker-switch\").text(r.formatDate(f,o,this.o.language)),this.picker.find(\"tfoot .today\").text(m).css(\"display\",this.o.todayBtn===!0||\"linked\"===this.o.todayBtn?\"table-cell\":\"none\"),this.picker.find(\"tfoot .clear\").text(n).css(\"display\",this.o.clearBtn===!0?\"table-cell\":\"none\"),this.picker.find(\"thead .datepicker-title\").text(this.o.title).css(\"display\",\"string\"==typeof this.o.title&&\"\"!==this.o.title?\"table-cell\":\"none\"),this.updateNavArrows(),this.fillMonths();var p=c(g,h,0),s=p.getUTCDate();p.setUTCDate(s-(p.getUTCDay()-this.o.weekStart+7)%7);var t=new Date(p);p.getUTCFullYear()<100&&t.setUTCFullYear(p.getUTCFullYear()),t.setUTCDate(t.getUTCDate()+42),t=t.valueOf();for(var u,v,w=[];p.valueOf()<t;){if(u=p.getUTCDay(),u===this.o.weekStart&&(w.push(\"<tr>\"),this.o.calendarWeeks)){var x=new Date(+p+(this.o.weekStart-u-7)%7*864e5),y=new Date(Number(x)+(11-x.getUTCDay())%7*864e5),z=new Date(Number(z=c(y.getUTCFullYear(),0,1))+(11-z.getUTCDay())%7*864e5),A=(y-z)/864e5/7+1;w.push('<td class=\"cw\">'+A+\"</td>\")}v=this.getClassNames(p),v.push(\"day\");var B=p.getUTCDate();this.o.beforeShowDay!==a.noop&&(e=this.o.beforeShowDay(this._utc_to_local(p)),e===b?e={}:\"boolean\"==typeof e?e={enabled:e}:\"string\"==typeof e&&(e={classes:e}),e.enabled===!1&&v.push(\"disabled\"),e.classes&&(v=v.concat(e.classes.split(/\\s+/))),e.tooltip&&(d=e.tooltip),e.content&&(B=e.content)),v=a.isFunction(a.uniqueSort)?a.uniqueSort(v):a.unique(v),w.push('<td class=\"'+v.join(\" \")+'\"'+(d?' title=\"'+d+'\"':\"\")+' data-date=\"'+p.getTime().toString()+'\">'+B+\"</td>\"),d=null,u===this.o.weekEnd&&w.push(\"</tr>\"),p.setUTCDate(p.getUTCDate()+1)}this.picker.find(\".datepicker-days tbody\").html(w.join(\"\"));var C=q[this.o.language].monthsTitle||q.en.monthsTitle||\"Months\",D=this.picker.find(\".datepicker-months\").find(\".datepicker-switch\").text(this.o.maxViewMode<2?C:g).end().find(\"tbody span\").removeClass(\"active\");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===g&&D.eq(b.getUTCMonth()).addClass(\"active\")}),(g<i||g>k)&&D.addClass(\"disabled\"),g===i&&D.slice(0,j).addClass(\"disabled\"),g===k&&D.slice(l+1).addClass(\"disabled\"),this.o.beforeShowMonth!==a.noop){var E=this;a.each(D,function(c,d){var e=new Date(g,c,1),f=E.o.beforeShowMonth(e);f===b?f={}:\"boolean\"==typeof f?f={enabled:f}:\"string\"==typeof f&&(f={classes:f}),f.enabled!==!1||a(d).hasClass(\"disabled\")||a(d).addClass(\"disabled\"),f.classes&&a(d).addClass(f.classes),f.tooltip&&a(d).prop(\"title\",f.tooltip)})}this._fill_yearsView(\".datepicker-years\",\"year\",10,g,i,k,this.o.beforeShowYear),this._fill_yearsView(\".datepicker-decades\",\"decade\",100,g,i,k,this.o.beforeShowDecade),this._fill_yearsView(\".datepicker-centuries\",\"century\",1e3,g,i,k,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var a,b,c=new Date(this.viewDate),d=c.getUTCFullYear(),e=c.getUTCMonth(),f=this.o.startDate!==-(1/0)?this.o.startDate.getUTCFullYear():-(1/0),g=this.o.startDate!==-(1/0)?this.o.startDate.getUTCMonth():-(1/0),h=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,i=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,j=1;switch(this.viewMode){case 0:a=d<=f&&e<=g,b=d>=h&&e>=i;break;case 4:j*=10;case 3:j*=10;case 2:j*=10;case 1:a=Math.floor(d/j)*j<=f,b=Math.floor(d/j)*j+j>=h}this.picker.find(\".prev\").toggleClass(\"disabled\",a),this.picker.find(\".next\").toggleClass(\"disabled\",b)}},click:function(b){b.preventDefault(),b.stopPropagation();var e,f,g,h;e=a(b.target),e.hasClass(\"datepicker-switch\")&&this.viewMode!==this.o.maxViewMode&&this.setViewMode(this.viewMode+1),e.hasClass(\"today\")&&!e.hasClass(\"day\")&&(this.setViewMode(0),this._setDate(d(),\"linked\"===this.o.todayBtn?null:\"view\")),e.hasClass(\"clear\")&&this.clearDates(),e.hasClass(\"disabled\")||(e.hasClass(\"month\")||e.hasClass(\"year\")||e.hasClass(\"decade\")||e.hasClass(\"century\"))&&(this.viewDate.setUTCDate(1),f=1,1===this.viewMode?(h=e.parent().find(\"span\").index(e),g=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(h)):(h=0,g=Number(e.text()),this.viewDate.setUTCFullYear(g)),this._trigger(r.viewModes[this.viewMode-1].e,this.viewDate),this.viewMode===this.o.minViewMode?this._setDate(c(g,h,f)):(this.setViewMode(this.viewMode-1),this.fill())),this.picker.is(\":visible\")&&this._focused_from&&this._focused_from.focus(),delete this._focused_from},dayCellClick:function(b){var c=a(b.currentTarget),d=c.data(\"date\"),e=new Date(d);this.o.updateViewDate&&(e.getUTCFullYear()!==this.viewDate.getUTCFullYear()&&this._trigger(\"changeYear\",this.viewDate),e.getUTCMonth()!==this.viewDate.getUTCMonth()&&this._trigger(\"changeMonth\",this.viewDate)),this._setDate(e)},navArrowsClick:function(b){var c=a(b.currentTarget),d=c.hasClass(\"prev\")?-1:1;0!==this.viewMode&&(d*=12*r.viewModes[this.viewMode].navStep),this.viewDate=this.moveMonth(this.viewDate,d),this._trigger(r.viewModes[this.viewMode].e,this.viewDate),this.fill()},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),b!==-1?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):this.o.multidate===!1?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),\"number\"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&\"date\"!==b||this._toggle_multidate(a&&new Date(a)),(!b&&this.o.updateViewDate||\"view\"===b)&&(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&\"view\"===b||this._trigger(\"changeDate\"),this.inputField.trigger(\"change\"),!this.o.autoclose||b&&\"date\"!==b||this.hide()},moveDay:function(a,b){var c=new Date(a);return c.setUTCDate(a.getUTCDate()+b),c},moveWeek:function(a,b){return this.moveDay(a,7*b)},moveMonth:function(a,b){if(!g(a))return this.o.defaultViewDate;if(!b)return a;var c,d,e=new Date(a.valueOf()),f=e.getUTCDate(),h=e.getUTCMonth(),i=Math.abs(b);if(b=b>0?1:-1,1===i)d=b===-1?function(){return e.getUTCMonth()===h}:function(){return e.getUTCMonth()!==c},c=h+b,e.setUTCMonth(c),c=(c+12)%12;else{for(var j=0;j<i;j++)e=this.moveMonth(e,b);c=e.getUTCMonth(),e.setUTCDate(f),d=function(){return c!==e.getUTCMonth()}}for(;d();)e.setUTCDate(--f),e.setUTCMonth(c);return e},moveYear:function(a,b){return this.moveMonth(a,12*b)},moveAvailableDate:function(a,b,c){do{if(a=this[c](a,b),!this.dateWithinRange(a))return!1;c=\"moveDay\"}while(this.dateIsDisabled(a));return a},weekOfDateIsDisabled:function(b){return a.inArray(b.getUTCDay(),this.o.daysOfWeekDisabled)!==-1},dateIsDisabled:function(b){return this.weekOfDateIsDisabled(b)||a.grep(this.o.datesDisabled,function(a){return e(b,a)}).length>0},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(\":visible\"))return void(40!==a.keyCode&&27!==a.keyCode||(this.show(),a.stopPropagation()));var b,c,d=!1,e=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault(),a.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;b=37===a.keyCode||38===a.keyCode?-1:1,0===this.viewMode?a.ctrlKey?(c=this.moveAvailableDate(e,b,\"moveYear\"),c&&this._trigger(\"changeYear\",this.viewDate)):a.shiftKey?(c=this.moveAvailableDate(e,b,\"moveMonth\"),c&&this._trigger(\"changeMonth\",this.viewDate)):37===a.keyCode||39===a.keyCode?c=this.moveAvailableDate(e,b,\"moveDay\"):this.weekOfDateIsDisabled(e)||(c=this.moveAvailableDate(e,b,\"moveWeek\")):1===this.viewMode?(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,\"moveMonth\")):2===this.viewMode&&(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,\"moveYear\")),c&&(this.focusDate=this.viewDate=c,this.setValue(),this.fill(),a.preventDefault());break;case 13:if(!this.o.forceParse)break;e=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(e),d=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(\":visible\")&&(a.preventDefault(),a.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}d&&(this.dates.length?this._trigger(\"changeDate\"):this._trigger(\"clearDate\"),this.inputField.trigger(\"change\"))},setViewMode:function(a){this.viewMode=a,this.picker.children(\"div\").hide().filter(\".datepicker-\"+r.viewModes[this.viewMode].clsName).show(),this.updateNavArrows(),this._trigger(\"changeViewMode\",new Date(this.viewDate))}};var l=function(b,c){a.data(b,\"datepicker\",this),this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,this.keepEmptyValues=c.keepEmptyValues,delete c.keepEmptyValues,n.call(a(this.inputs),c).on(\"changeDate\",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a.data(b,\"datepicker\")}),this.updateDates()};l.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},dateUpdated:function(c){if(!this.updating){this.updating=!0;var d=a.data(c.target,\"datepicker\");if(d!==b){var e=d.getUTCDate(),f=this.keepEmptyValues,g=a.inArray(c.target,this.inputs),h=g-1,i=g+1,j=this.inputs.length;if(g!==-1){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b!==d&&f||b.setUTCDate(e)}),e<this.dates[h])for(;h>=0&&e<this.dates[h];)this.pickers[h--].setUTCDate(e);else if(e>this.dates[i])for(;i<j&&e>this.dates[i];)this.pickers[i++].setUTCDate(e);this.updateDates(),delete this.updating}}}},destroy:function(){a.map(this.pickers,function(a){a.destroy()}),a(this.inputs).off(\"changeDate\",this.dateUpdated),delete this.element.data().datepicker},remove:f(\"destroy\",\"Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead\")};var m=a.fn.datepicker,n=function(c){var d=Array.apply(null,arguments);d.shift();var e;if(this.each(function(){var b=a(this),f=b.data(\"datepicker\"),g=\"object\"==typeof c&&c;if(!f){var j=h(this,\"date\"),m=a.extend({},o,j,g),n=i(m.language),p=a.extend({},o,n,j,g);b.hasClass(\"input-daterange\")||p.inputs?(a.extend(p,{inputs:p.inputs||b.find(\"input\").toArray()}),f=new l(this,p)):f=new k(this,p),b.data(\"datepicker\",f)}\"string\"==typeof c&&\"function\"==typeof f[c]&&(e=f[c].apply(f,d))}),e===b||e instanceof k||e instanceof l)return this;if(this.length>1)throw new Error(\"Using only allowed for the collection of a single element (\"+c+\" function)\");return e};a.fn.datepicker=n;var o=a.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,beforeShowYear:a.noop,beforeShowDecade:a.noop,beforeShowCentury:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:\"mm/dd/yyyy\",keepEmptyValues:!1,keyboardNavigation:!0,language:\"en\",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:\",\",orientation:\"auto\",rtl:!1,startDate:-(1/0),startView:0,todayBtn:!1,todayHighlight:!1,updateViewDate:!0,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:\"body\",immediateUpdates:!1,title:\"\",templates:{leftArrow:\"«\",rightArrow:\"»\"},showWeekDays:!0},p=a.fn.datepicker.locale_opts=[\"format\",\"rtl\",\"weekStart\"];a.fn.datepicker.Constructor=k;var q=a.fn.datepicker.dates={en:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],daysMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],today:\"Today\",clear:\"Clear\",titleFormat:\"MM yyyy\"}},r={viewModes:[{names:[\"days\",\"month\"],clsName:\"days\",e:\"changeMonth\"},{names:[\"months\",\"year\"],clsName:\"months\",e:\"changeYear\",navStep:1},{names:[\"years\",\"decade\"],clsName:\"years\",e:\"changeDecade\",navStep:10},{names:[\"decades\",\"century\"],clsName:\"decades\",e:\"changeCentury\",navStep:100},{names:[\"centuries\",\"millennium\"],clsName:\"centuries\",e:\"changeMillennium\",navStep:1e3}],validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,parseFormat:function(a){if(\"function\"==typeof a.toValue&&\"function\"==typeof a.toDisplay)return a;var b=a.replace(this.validParts,\"\\0\").split(\"\\0\"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error(\"Invalid date format.\");return{separators:b,parts:c}},parseDate:function(c,e,f,g){function h(a,b){return b===!0&&(b=10),a<100&&(a+=2e3,a>(new Date).getFullYear()+b&&(a-=100)),a}function i(){var a=this.slice(0,j[n].length),b=j[n].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!c)return b;if(c instanceof Date)return c;if(\"string\"==typeof e&&(e=r.parseFormat(e)),e.toValue)return e.toValue(c,e,f);var j,l,m,n,o,p={d:\"moveDay\",m:\"moveMonth\",w:\"moveWeek\",y:\"moveYear\"},s={yesterday:\"-1d\",today:\"+0d\",tomorrow:\"+1d\"};if(c in s&&(c=s[c]),/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(c)){for(j=c.match(/([\\-+]\\d+)([dmwy])/gi),c=new Date,n=0;n<j.length;n++)l=j[n].match(/([\\-+]\\d+)([dmwy])/i),m=Number(l[1]),o=p[l[2].toLowerCase()],c=k.prototype[o](c,m);return k.prototype._zero_utc_time(c)}j=c&&c.match(this.nonpunctuation)||[];var t,u,v={},w=[\"yyyy\",\"yy\",\"M\",\"MM\",\"m\",\"mm\",\"d\",\"dd\"],x={yyyy:function(a,b){return a.setUTCFullYear(g?h(b,g):b)},m:function(a,b){if(isNaN(a))return a;for(b-=1;b<0;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!==b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};x.yy=x.yyyy,x.M=x.MM=x.mm=x.m,x.dd=x.d,c=d();var y=e.parts.slice();if(j.length!==y.length&&(y=a(y).filter(function(b,c){return a.inArray(c,w)!==-1}).toArray()),j.length===y.length){var z;for(n=0,z=y.length;n<z;n++){if(t=parseInt(j[n],10),l=y[n],isNaN(t))switch(l){case\"MM\":u=a(q[f].months).filter(i),t=a.inArray(u[0],q[f].months)+1;break;case\"M\":u=a(q[f].monthsShort).filter(i),t=a.inArray(u[0],q[f].monthsShort)+1}v[l]=t}var A,B;for(n=0;n<w.length;n++)B=w[n],B in v&&!isNaN(v[B])&&(A=new Date(c),x[B](A,v[B]),isNaN(A)||(c=A))}return c},formatDate:function(b,c,d){if(!b)return\"\";if(\"string\"==typeof c&&(c=r.parseFormat(c)),c.toDisplay)return c.toDisplay(b,c,d);var e={d:b.getUTCDate(),D:q[d].daysShort[b.getUTCDay()],DD:q[d].days[b.getUTCDay()],m:b.getUTCMonth()+1,M:q[d].monthsShort[b.getUTCMonth()],MM:q[d].months[b.getUTCMonth()],yy:b.getUTCFullYear().toString().substring(2),yyyy:b.getUTCFullYear()};e.dd=(e.d<10?\"0\":\"\")+e.d,e.mm=(e.m<10?\"0\":\"\")+e.m,b=[];for(var f=a.extend([],c.separators),g=0,h=c.parts.length;g<=h;g++)f.length&&b.push(f.shift()),b.push(e[c.parts[g]]);return b.join(\"\")},headTemplate:'<thead><tr><th colspan=\"7\" class=\"datepicker-title\"></th></tr><tr><th class=\"prev\">'+o.templates.leftArrow+'</th><th colspan=\"5\" class=\"datepicker-switch\"></th><th class=\"next\">'+o.templates.rightArrow+\"</th></tr></thead>\",\ncontTemplate:'<tbody><tr><td colspan=\"7\"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'};r.template='<div class=\"datepicker\"><div class=\"datepicker-days\"><table class=\"table-condensed\">'+r.headTemplate+\"<tbody></tbody>\"+r.footTemplate+'</table></div><div class=\"datepicker-months\"><table class=\"table-condensed\">'+r.headTemplate+r.contTemplate+r.footTemplate+'</table></div><div class=\"datepicker-years\"><table class=\"table-condensed\">'+r.headTemplate+r.contTemplate+r.footTemplate+'</table></div><div class=\"datepicker-decades\"><table class=\"table-condensed\">'+r.headTemplate+r.contTemplate+r.footTemplate+'</table></div><div class=\"datepicker-centuries\"><table class=\"table-condensed\">'+r.headTemplate+r.contTemplate+r.footTemplate+\"</table></div></div>\",a.fn.datepicker.DPGlobal=r,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=m,this},a.fn.datepicker.version=\"1.7.1\",a.fn.datepicker.deprecated=function(a){var b=window.console;b&&b.warn&&b.warn(\"DEPRECATED: \"+a)},a(document).on(\"focus.datepicker.data-api click.datepicker.data-api\",'[data-provide=\"datepicker\"]',function(b){var c=a(this);c.data(\"datepicker\")||(b.preventDefault(),n.call(c,\"show\"))}),a(function(){n.call(a('[data-provide=\"datepicker-inline\"]'))})});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1kYXRlcGlja2VyL2Rpc3QvanMvYm9vdHN0cmFwLWRhdGVwaWNrZXIubWluLmpzP2U4MzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQUE7QUFBQTtBQUFBLDBKQUFnSCxlQUFlLGFBQWEsZ0RBQWdELGFBQWEsZUFBZSxtREFBbUQsZ0JBQWdCLG1IQUFtSCxnQkFBZ0Isa0JBQWtCLDJFQUEyRSxjQUFjLDhCQUE4QixnQkFBZ0IsZ0JBQWdCLHVCQUF1Qix3QkFBd0IsNkNBQTZDLGtDQUFrQyx1REFBdUQsU0FBUyxjQUFjLFNBQVMsbUNBQW1DLFdBQVcsOEJBQThCLG9CQUFvQixLQUFLLGlCQUFpQixPQUFPLGdCQUFnQix3QkFBd0Isc0JBQXNCLDJDQUEyQyxJQUFJLGtFQUFrRSxTQUFTLG9CQUFvQixpQkFBaUIscUJBQXFCLGdFQUFnRSxrQkFBa0IsY0FBYyxpQkFBaUIsWUFBWSwyQkFBMkIsa0JBQWtCLFNBQVMsa0RBQWtELG1CQUFtQixtbENBQW1sQyxtQkFBbUIseUJBQXlCLHVMQUF1TCw0SkFBNEosYUFBYSwyQ0FBMkMsd0NBQXdDLGtEQUFrRCxJQUFJLGdDQUFnQywyREFBMkQsNkJBQTZCLElBQUksMEJBQTBCLDZDQUE2QyxXQUFXLGtCQUFrQixTQUFTLFVBQVUsOEJBQThCLG1CQUFtQixZQUFZLHdCQUF3Qix1QkFBdUIsZ2ZBQWdmLDhCQUE4Qix1c0JBQXVzQixzREFBc0QsRUFBRSxzRkFBc0YsMEJBQTBCLDZDQUE2QyxpQkFBaUIsa0JBQWtCLDRDQUE0Qyw0Q0FBNEMsTUFBTSw0Q0FBNEMsNEJBQTRCLDZCQUE2QixzREFBc0QsNkJBQTZCLCtCQUErQixLQUFLLDBKQUEwSiwyQkFBMkIsK0dBQStHLDJCQUEyQiwyQkFBMkIseURBQXlELGtCQUFrQixXQUFX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ZSw4QkFBOEIsOEVBQThFLGlCQUFpQixvREFBb0QsSUFBSSw0Q0FBNEMsd0VBQXdFLHFEQUFxRCxXQUFXLHFHQUFxRyxxQ0FBcUMsc0NBQXNDLFlBQVksK0NBQStDLG1CQUFtQixvQ0FBb0MsaUJBQWlCLHFCQUFxQixTQUFTLElBQUksT0FBTywyQkFBMkIsb0JBQW9CLGdDQUFnQyxTQUFTLGlCQUFpQix5QkFBeUIsNkNBQTZDLHNCQUFzQixxREFBcUQsMkJBQTJCLGtDQUFrQyxNQUFNLG1CQUFtQixJQUFJLEtBQUssaURBQWlELG9FQUFvRSxNQUFNLDZFQUE2RSxPQUFPLFFBQVEsUUFBUSxXQUFXLDhFQUE4RSxTQUFTLDRCQUE0QixlQUFlLGtGQUFrRixPQUFPLDRPQUE0Tyx1REFBdUQseURBQXlELEtBQUssc0RBQXNELGtCQUFrQjtBQUNoaStCLHFMQUFxTCw2dEJBQTZ0Qiw4QkFBOEIsd0VBQXdFLHFCQUFxQixvQ0FBb0MsZ0hBQWdILGNBQWMsNERBQTRELGVBQWUsZ0RBQWdELEVBQUUiLCJmaWxlIjoiNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIERhdGVwaWNrZXIgZm9yIEJvb3RzdHJhcCB2MS43LjEgKGh0dHBzOi8vZ2l0aHViLmNvbS91eHNvbHV0aW9ucy9ib290c3RyYXAtZGF0ZXBpY2tlcilcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCAoaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuICovXG5cbiFmdW5jdGlvbihhKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSxhKTphKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KERhdGUsYXJndW1lbnRzKSl9ZnVuY3Rpb24gZCgpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS5nZXRVVENGdWxsWWVhcigpPT09Yi5nZXRVVENGdWxsWWVhcigpJiZhLmdldFVUQ01vbnRoKCk9PT1iLmdldFVUQ01vbnRoKCkmJmEuZ2V0VVRDRGF0ZSgpPT09Yi5nZXRVVENEYXRlKCl9ZnVuY3Rpb24gZihjLGQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkIT09YiYmYS5mbi5kYXRlcGlja2VyLmRlcHJlY2F0ZWQoZCksdGhpc1tjXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGEmJiFpc05hTihhLmdldFRpbWUoKSl9ZnVuY3Rpb24gaChiLGMpe2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYi50b0xvd2VyQ2FzZSgpfXZhciBlLGY9YShiKS5kYXRhKCksZz17fSxoPW5ldyBSZWdFeHAoXCJeXCIrYy50b0xvd2VyQ2FzZSgpK1wiKFtBLVpdKVwiKTtjPW5ldyBSZWdFeHAoXCJeXCIrYy50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGkgaW4gZiljLnRlc3QoaSkmJihlPWkucmVwbGFjZShoLGQpLGdbZV09ZltpXSk7cmV0dXJuIGd9ZnVuY3Rpb24gaShiKXt2YXIgYz17fTtpZihxW2JdfHwoYj1iLnNwbGl0KFwiLVwiKVswXSxxW2JdKSl7dmFyIGQ9cVtiXTtyZXR1cm4gYS5lYWNoKHAsZnVuY3Rpb24oYSxiKXtiIGluIGQmJihjW2JdPWRbYl0pfSksY319dmFyIGo9ZnVuY3Rpb24oKXt2YXIgYj17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNsaWNlKGEpWzBdfSxjb250YWluczpmdW5jdGlvbihhKXtmb3IodmFyIGI9YSYmYS52YWx1ZU9mKCksYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKylpZigwPD10aGlzW2NdLnZhbHVlT2YoKS1iJiZ0aGlzW2NdLnZhbHVlT2YoKS1iPDg2NGU1KXJldHVybiBjO3JldHVybi0xfSxyZW1vdmU6ZnVuY3Rpb24oYSl7dGhpcy5zcGxpY2UoYSwxKX0scmVwbGFjZTpmdW5jdGlvbihiKXtiJiYoYS5pc0FycmF5KGIpfHwoYj1bYl0pLHRoaXMuY2xlYXIoKSx0aGlzLnB1c2guYXBwbHkodGhpcyxiKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sY29weTpmdW5jdGlvbigpe3ZhciBhPW5ldyBqO3JldHVybiBhLnJlcGxhY2UodGhpcyksYX19O3JldHVybiBmdW5jdGlvbigpe3ZhciBjPVtdO3JldHVybiBjLnB1c2guYXBwbHkoYyxhcmd1bWVudHMpLGEuZXh0ZW5kKGMsYiksY319KCksaz1mdW5jdGlvbihiLGMpe2EuZGF0YShiLFwiZGF0ZXBpY2tlclwiLHRoaXMpLHRoaXMuX3Byb2Nlc3Nfb3B0aW9ucyhjKSx0aGlzLmRhdGVzPW5ldyBqLHRoaXMudmlld0RhdGU9dGhpcy5vLmRlZmF1bHRWaWV3RGF0ZSx0aGlzLmZvY3VzRGF0ZT1udWxsLHRoaXMuZWxlbWVudD1hKGIpLHRoaXMuaXNJbnB1dD10aGlzLmVsZW1lbnQuaXMoXCJpbnB1dFwiKSx0aGlzLmlucHV0RmllbGQ9dGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudDp0aGlzLmVsZW1lbnQuZmluZChcImlucHV0XCIpLHRoaXMuY29tcG9uZW50PSEhdGhpcy5lbGVtZW50Lmhhc0NsYXNzKFwiZGF0ZVwiKSYmdGhpcy5lbGVtZW50LmZpbmQoXCIuYWRkLW9uLCAuaW5wdXQtZ3JvdXAtYWRkb24sIC5idG5cIiksdGhpcy5jb21wb25lbnQmJjA9PT10aGlzLmNvbXBvbmVudC5sZW5ndGgmJih0aGlzLmNvbXBvbmVudD0hMSksdGhpcy5pc0lubGluZT0hdGhpcy5jb21wb25lbnQmJnRoaXMuZWxlbWVudC5pcyhcImRpdlwiKSx0aGlzLnBpY2tlcj1hKHIudGVtcGxhdGUpLHRoaXMuX2NoZWNrX3RlbXBsYXRlKHRoaXMuby50ZW1wbGF0ZXMubGVmdEFycm93KSYmdGhpcy5waWNrZXIuZmluZChcIi5wcmV2XCIpLmh0bWwodGhpcy5vLnRlbXBsYXRlcy5sZWZ0QXJyb3cpLHRoaXMuX2NoZWNrX3RlbXBsYXRlKHRoaXMuby50ZW1wbGF0ZXMucmlnaHRBcnJvdykmJnRoaXMucGlja2VyLmZpbmQoXCIubmV4dFwiKS5odG1sKHRoaXMuby50ZW1wbGF0ZXMucmlnaHRBcnJvdyksdGhpcy5fYnVpbGRFdmVudHMoKSx0aGlzLl9hdHRhY2hFdmVudHMoKSx0aGlzLmlzSW5saW5lP3RoaXMucGlja2VyLmFkZENsYXNzKFwiZGF0ZXBpY2tlci1pbmxpbmVcIikuYXBwZW5kVG8odGhpcy5lbGVtZW50KTp0aGlzLnBpY2tlci5hZGRDbGFzcyhcImRhdGVwaWNrZXItZHJvcGRvd24gZHJvcGRvd24tbWVudVwiKSx0aGlzLm8ucnRsJiZ0aGlzLnBpY2tlci5hZGRDbGFzcyhcImRhdGVwaWNrZXItcnRsXCIpLHRoaXMuby5jYWxlbmRhcldlZWtzJiZ0aGlzLnBpY2tlci5maW5kKFwiLmRhdGVwaWNrZXItZGF5cyAuZGF0ZXBpY2tlci1zd2l0Y2gsIHRoZWFkIC5kYXRlcGlja2VyLXRpdGxlLCB0Zm9vdCAudG9kYXksIHRmb290IC5jbGVhclwiKS5hdHRyKFwiY29sc3BhblwiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIE51bWJlcihiKSsxfSksdGhpcy5fcHJvY2Vzc19vcHRpb25zKHtzdGFydERhdGU6dGhpcy5fby5zdGFydERhdGUsZW5kRGF0ZTp0aGlzLl9vLmVuZERhdGUsZGF5c09mV2Vla0Rpc2FibGVkOnRoaXMuby5kYXlzT2ZXZWVrRGlzYWJsZWQsZGF5c09mV2Vla0hpZ2hsaWdodGVkOnRoaXMuby5kYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQsZGF0ZXNEaXNhYmxlZDp0aGlzLm8uZGF0ZXNEaXNhYmxlZH0pLHRoaXMuX2FsbG93X3VwZGF0ZT0hMSx0aGlzLnNldFZpZXdNb2RlKHRoaXMuby5zdGFydFZpZXcpLHRoaXMuX2FsbG93X3VwZGF0ZT0hMCx0aGlzLmZpbGxEb3coKSx0aGlzLmZpbGxNb250aHMoKSx0aGlzLnVwZGF0ZSgpLHRoaXMuaXNJbmxpbmUmJnRoaXMuc2hvdygpfTtrLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ayxfcmVzb2x2ZVZpZXdOYW1lOmZ1bmN0aW9uKGIpe3JldHVybiBhLmVhY2goci52aWV3TW9kZXMsZnVuY3Rpb24oYyxkKXtpZihiPT09Y3x8YS5pbkFycmF5KGIsZC5uYW1lcykhPT0tMSlyZXR1cm4gYj1jLCExfSksYn0sX3Jlc29sdmVEYXlzT2ZXZWVrOmZ1bmN0aW9uKGIpe3JldHVybiBhLmlzQXJyYXkoYil8fChiPWIuc3BsaXQoL1ssXFxzXSovKSksYS5tYXAoYixOdW1iZXIpfSxfY2hlY2tfdGVtcGxhdGU6ZnVuY3Rpb24oYyl7dHJ5e2lmKGM9PT1ifHxcIlwiPT09YylyZXR1cm4hMTtpZigoYy5tYXRjaCgvWzw+XS9nKXx8W10pLmxlbmd0aDw9MClyZXR1cm4hMDt2YXIgZD1hKGMpO3JldHVybiBkLmxlbmd0aD4wfWNhdGNoKGEpe3JldHVybiExfX0sX3Byb2Nlc3Nfb3B0aW9uczpmdW5jdGlvbihiKXt0aGlzLl9vPWEuZXh0ZW5kKHt9LHRoaXMuX28sYik7dmFyIGU9dGhpcy5vPWEuZXh0ZW5kKHt9LHRoaXMuX28pLGY9ZS5sYW5ndWFnZTtxW2ZdfHwoZj1mLnNwbGl0KFwiLVwiKVswXSxxW2ZdfHwoZj1vLmxhbmd1YWdlKSksZS5sYW5ndWFnZT1mLGUuc3RhcnRWaWV3PXRoaXMuX3Jlc29sdmVWaWV3TmFtZShlLnN0YXJ0VmlldyksZS5taW5WaWV3TW9kZT10aGlzLl9yZXNvbHZlVmlld05hbWUoZS5taW5WaWV3TW9kZSksZS5tYXhWaWV3TW9kZT10aGlzLl9yZXNvbHZlVmlld05hbWUoZS5tYXhWaWV3TW9kZSksZS5zdGFydFZpZXc9TWF0aC5tYXgodGhpcy5vLm1pblZpZXdNb2RlLE1hdGgubWluKHRoaXMuby5tYXhWaWV3TW9kZSxlLnN0YXJ0VmlldykpLGUubXVsdGlkYXRlIT09ITAmJihlLm11bHRpZGF0ZT1OdW1iZXIoZS5tdWx0aWRhdGUpfHwhMSxlLm11bHRpZGF0ZSE9PSExJiYoZS5tdWx0aWRhdGU9TWF0aC5tYXgoMCxlLm11bHRpZGF0ZSkpKSxlLm11bHRpZGF0ZVNlcGFyYXRvcj1TdHJpbmcoZS5tdWx0aWRhdGVTZXBhcmF0b3IpLGUud2Vla1N0YXJ0JT03LGUud2Vla0VuZD0oZS53ZWVrU3RhcnQrNiklNzt2YXIgZz1yLnBhcnNlRm9ybWF0KGUuZm9ybWF0KTtlLnN0YXJ0RGF0ZSE9PS0oMS8wKSYmKGUuc3RhcnREYXRlP2Uuc3RhcnREYXRlIGluc3RhbmNlb2YgRGF0ZT9lLnN0YXJ0RGF0ZT10aGlzLl9sb2NhbF90b191dGModGhpcy5femVyb190aW1lKGUuc3RhcnREYXRlKSk6ZS5zdGFydERhdGU9ci5wYXJzZURhdGUoZS5zdGFydERhdGUsZyxlLmxhbmd1YWdlLGUuYXNzdW1lTmVhcmJ5WWVhcik6ZS5zdGFydERhdGU9LSgxLzApKSxlLmVuZERhdGUhPT0xLzAmJihlLmVuZERhdGU/ZS5lbmREYXRlIGluc3RhbmNlb2YgRGF0ZT9lLmVuZERhdGU9dGhpcy5fbG9jYWxfdG9fdXRjKHRoaXMuX3plcm9fdGltZShlLmVuZERhdGUpKTplLmVuZERhdGU9ci5wYXJzZURhdGUoZS5lbmREYXRlLGcsZS5sYW5ndWFnZSxlLmFzc3VtZU5lYXJieVllYXIpOmUuZW5kRGF0ZT0xLzApLGUuZGF5c09mV2Vla0Rpc2FibGVkPXRoaXMuX3Jlc29sdmVEYXlzT2ZXZWVrKGUuZGF5c09mV2Vla0Rpc2FibGVkfHxbXSksZS5kYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQ9dGhpcy5fcmVzb2x2ZURheXNPZldlZWsoZS5kYXlzT2ZXZWVrSGlnaGxpZ2h0ZWR8fFtdKSxlLmRhdGVzRGlzYWJsZWQ9ZS5kYXRlc0Rpc2FibGVkfHxbXSxhLmlzQXJyYXkoZS5kYXRlc0Rpc2FibGVkKXx8KGUuZGF0ZXNEaXNhYmxlZD1lLmRhdGVzRGlzYWJsZWQuc3BsaXQoXCIsXCIpKSxlLmRhdGVzRGlzYWJsZWQ9YS5tYXAoZS5kYXRlc0Rpc2FibGVkLGZ1bmN0aW9uKGEpe3JldHVybiByLnBhcnNlRGF0ZShhLGcsZS5sYW5ndWFnZSxlLmFzc3VtZU5lYXJieVllYXIpfSk7dmFyIGg9U3RyaW5nKGUub3JpZW50YXRpb24pLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1xccysvZyksaT1lLm9yaWVudGF0aW9uLnRvTG93ZXJDYXNlKCk7aWYoaD1hLmdyZXAoaCxmdW5jdGlvbihhKXtyZXR1cm4vXmF1dG98bGVmdHxyaWdodHx0b3B8Ym90dG9tJC8udGVzdChhKX0pLGUub3JpZW50YXRpb249e3g6XCJhdXRvXCIseTpcImF1dG9cIn0saSYmXCJhdXRvXCIhPT1pKWlmKDE9PT1oLmxlbmd0aClzd2l0Y2goaFswXSl7Y2FzZVwidG9wXCI6Y2FzZVwiYm90dG9tXCI6ZS5vcmllbnRhdGlvbi55PWhbMF07YnJlYWs7Y2FzZVwibGVmdFwiOmNhc2VcInJpZ2h0XCI6ZS5vcmllbnRhdGlvbi54PWhbMF19ZWxzZSBpPWEuZ3JlcChoLGZ1bmN0aW9uKGEpe3JldHVybi9ebGVmdHxyaWdodCQvLnRlc3QoYSl9KSxlLm9yaWVudGF0aW9uLng9aVswXXx8XCJhdXRvXCIsaT1hLmdyZXAoaCxmdW5jdGlvbihhKXtyZXR1cm4vXnRvcHxib3R0b20kLy50ZXN0KGEpfSksZS5vcmllbnRhdGlvbi55PWlbMF18fFwiYXV0b1wiO2Vsc2U7aWYoZS5kZWZhdWx0Vmlld0RhdGUgaW5zdGFuY2VvZiBEYXRlfHxcInN0cmluZ1wiPT10eXBlb2YgZS5kZWZhdWx0Vmlld0RhdGUpZS5kZWZhdWx0Vmlld0RhdGU9ci5wYXJzZURhdGUoZS5kZWZhdWx0Vmlld0RhdGUsZyxlLmxhbmd1YWdlLGUuYXNzdW1lTmVhcmJ5WWVhcik7ZWxzZSBpZihlLmRlZmF1bHRWaWV3RGF0ZSl7dmFyIGo9ZS5kZWZhdWx0Vmlld0RhdGUueWVhcnx8KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGs9ZS5kZWZhdWx0Vmlld0RhdGUubW9udGh8fDAsbD1lLmRlZmF1bHRWaWV3RGF0ZS5kYXl8fDE7ZS5kZWZhdWx0Vmlld0RhdGU9YyhqLGssbCl9ZWxzZSBlLmRlZmF1bHRWaWV3RGF0ZT1kKCl9LF9ldmVudHM6W10sX3NlY29uZGFyeUV2ZW50czpbXSxfYXBwbHlFdmVudHM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQsZSxmPTA7ZjxhLmxlbmd0aDtmKyspYz1hW2ZdWzBdLDI9PT1hW2ZdLmxlbmd0aD8oZD1iLGU9YVtmXVsxXSk6Mz09PWFbZl0ubGVuZ3RoJiYoZD1hW2ZdWzFdLGU9YVtmXVsyXSksYy5vbihlLGQpfSxfdW5hcHBseUV2ZW50czpmdW5jdGlvbihhKXtmb3IodmFyIGMsZCxlLGY9MDtmPGEubGVuZ3RoO2YrKyljPWFbZl1bMF0sMj09PWFbZl0ubGVuZ3RoPyhlPWIsZD1hW2ZdWzFdKTozPT09YVtmXS5sZW5ndGgmJihlPWFbZl1bMV0sZD1hW2ZdWzJdKSxjLm9mZihkLGUpfSxfYnVpbGRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgYj17a2V5dXA6YS5wcm94eShmdW5jdGlvbihiKXthLmluQXJyYXkoYi5rZXlDb2RlLFsyNywzNywzOSwzOCw0MCwzMiwxMyw5XSk9PT0tMSYmdGhpcy51cGRhdGUoKX0sdGhpcyksa2V5ZG93bjphLnByb3h5KHRoaXMua2V5ZG93bix0aGlzKSxwYXN0ZTphLnByb3h5KHRoaXMucGFzdGUsdGhpcyl9O3RoaXMuby5zaG93T25Gb2N1cz09PSEwJiYoYi5mb2N1cz1hLnByb3h5KHRoaXMuc2hvdyx0aGlzKSksdGhpcy5pc0lucHV0P3RoaXMuX2V2ZW50cz1bW3RoaXMuZWxlbWVudCxiXV06dGhpcy5jb21wb25lbnQmJnRoaXMuaW5wdXRGaWVsZC5sZW5ndGg/dGhpcy5fZXZlbnRzPVtbdGhpcy5pbnB1dEZpZWxkLGJdLFt0aGlzLmNvbXBvbmVudCx7Y2xpY2s6YS5wcm94eSh0aGlzLnNob3csdGhpcyl9XV06dGhpcy5fZXZlbnRzPVtbdGhpcy5lbGVtZW50LHtjbGljazphLnByb3h5KHRoaXMuc2hvdyx0aGlzKSxrZXlkb3duOmEucHJveHkodGhpcy5rZXlkb3duLHRoaXMpfV1dLHRoaXMuX2V2ZW50cy5wdXNoKFt0aGlzLmVsZW1lbnQsXCIqXCIse2JsdXI6YS5wcm94eShmdW5jdGlvbihhKXt0aGlzLl9mb2N1c2VkX2Zyb209YS50YXJnZXR9LHRoaXMpfV0sW3RoaXMuZWxlbWVudCx7Ymx1cjphLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzZWRfZnJvbT1hLnRhcmdldH0sdGhpcyl9XSksdGhpcy5vLmltbWVkaWF0ZVVwZGF0ZXMmJnRoaXMuX2V2ZW50cy5wdXNoKFt0aGlzLmVsZW1lbnQse1wiY2hhbmdlWWVhciBjaGFuZ2VNb250aFwiOmEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy51cGRhdGUoYS5kYXRlKX0sdGhpcyl9XSksdGhpcy5fc2Vjb25kYXJ5RXZlbnRzPVtbdGhpcy5waWNrZXIse2NsaWNrOmEucHJveHkodGhpcy5jbGljayx0aGlzKX1dLFt0aGlzLnBpY2tlcixcIi5wcmV2LCAubmV4dFwiLHtjbGljazphLnByb3h5KHRoaXMubmF2QXJyb3dzQ2xpY2ssdGhpcyl9XSxbdGhpcy5waWNrZXIsXCIuZGF5Om5vdCguZGlzYWJsZWQpXCIse2NsaWNrOmEucHJveHkodGhpcy5kYXlDZWxsQ2xpY2ssdGhpcyl9XSxbYSh3aW5kb3cpLHtyZXNpemU6YS5wcm94eSh0aGlzLnBsYWNlLHRoaXMpfV0sW2EoZG9jdW1lbnQpLHtcIm1vdXNlZG93biB0b3VjaHN0YXJ0XCI6YS5wcm94eShmdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQuaXMoYS50YXJnZXQpfHx0aGlzLmVsZW1lbnQuZmluZChhLnRhcmdldCkubGVuZ3RofHx0aGlzLnBpY2tlci5pcyhhLnRhcmdldCl8fHRoaXMucGlja2VyLmZpbmQoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy5pc0lubGluZXx8dGhpcy5oaWRlKCl9LHRoaXMpfV1dfSxfYXR0YWNoRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoRXZlbnRzKCksdGhpcy5fYXBwbHlFdmVudHModGhpcy5fZXZlbnRzKX0sX2RldGFjaEV2ZW50czpmdW5jdGlvbigpe3RoaXMuX3VuYXBwbHlFdmVudHModGhpcy5fZXZlbnRzKX0sX2F0dGFjaFNlY29uZGFyeUV2ZW50czpmdW5jdGlvbigpe3RoaXMuX2RldGFjaFNlY29uZGFyeUV2ZW50cygpLHRoaXMuX2FwcGx5RXZlbnRzKHRoaXMuX3NlY29uZGFyeUV2ZW50cyl9LF9kZXRhY2hTZWNvbmRhcnlFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLl91bmFwcGx5RXZlbnRzKHRoaXMuX3NlY29uZGFyeUV2ZW50cyl9LF90cmlnZ2VyOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Y3x8dGhpcy5kYXRlcy5nZXQoLTEpLGU9dGhpcy5fdXRjX3RvX2xvY2FsKGQpO3RoaXMuZWxlbWVudC50cmlnZ2VyKHt0eXBlOmIsZGF0ZTplLHZpZXdNb2RlOnRoaXMudmlld01vZGUsZGF0ZXM6YS5tYXAodGhpcy5kYXRlcyx0aGlzLl91dGNfdG9fbG9jYWwpLGZvcm1hdDphLnByb3h5KGZ1bmN0aW9uKGEsYil7MD09PWFyZ3VtZW50cy5sZW5ndGg/KGE9dGhpcy5kYXRlcy5sZW5ndGgtMSxiPXRoaXMuby5mb3JtYXQpOlwic3RyaW5nXCI9PXR5cGVvZiBhJiYoYj1hLGE9dGhpcy5kYXRlcy5sZW5ndGgtMSksYj1ifHx0aGlzLm8uZm9ybWF0O3ZhciBjPXRoaXMuZGF0ZXMuZ2V0KGEpO3JldHVybiByLmZvcm1hdERhdGUoYyxiLHRoaXMuby5sYW5ndWFnZSl9LHRoaXMpfSl9LHNob3c6ZnVuY3Rpb24oKXtpZighKHRoaXMuaW5wdXRGaWVsZC5wcm9wKFwiZGlzYWJsZWRcIil8fHRoaXMuaW5wdXRGaWVsZC5wcm9wKFwicmVhZG9ubHlcIikmJnRoaXMuby5lbmFibGVPblJlYWRvbmx5PT09ITEpKXJldHVybiB0aGlzLmlzSW5saW5lfHx0aGlzLnBpY2tlci5hcHBlbmRUbyh0aGlzLm8uY29udGFpbmVyKSx0aGlzLnBsYWNlKCksdGhpcy5waWNrZXIuc2hvdygpLHRoaXMuX2F0dGFjaFNlY29uZGFyeUV2ZW50cygpLHRoaXMuX3RyaWdnZXIoXCJzaG93XCIpLCh3aW5kb3cubmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHN8fFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudCkmJnRoaXMuby5kaXNhYmxlVG91Y2hLZXlib2FyZCYmYSh0aGlzLmVsZW1lbnQpLmJsdXIoKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmxpbmV8fCF0aGlzLnBpY2tlci5pcyhcIjp2aXNpYmxlXCIpP3RoaXM6KHRoaXMuZm9jdXNEYXRlPW51bGwsdGhpcy5waWNrZXIuaGlkZSgpLmRldGFjaCgpLHRoaXMuX2RldGFjaFNlY29uZGFyeUV2ZW50cygpLHRoaXMuc2V0Vmlld01vZGUodGhpcy5vLnN0YXJ0VmlldyksdGhpcy5vLmZvcmNlUGFyc2UmJnRoaXMuaW5wdXRGaWVsZC52YWwoKSYmdGhpcy5zZXRWYWx1ZSgpLHRoaXMuX3RyaWdnZXIoXCJoaWRlXCIpLHRoaXMpfSxkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlkZSgpLHRoaXMuX2RldGFjaEV2ZW50cygpLHRoaXMuX2RldGFjaFNlY29uZGFyeUV2ZW50cygpLHRoaXMucGlja2VyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmVsZW1lbnQuZGF0YSgpLmRhdGVwaWNrZXIsdGhpcy5pc0lucHV0fHxkZWxldGUgdGhpcy5lbGVtZW50LmRhdGEoKS5kYXRlLHRoaXN9LHBhc3RlOmZ1bmN0aW9uKGIpe3ZhciBjO2lmKGIub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhJiZiLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcyYmYS5pbkFycmF5KFwidGV4dC9wbGFpblwiLGIub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzKSE9PS0xKWM9Yi5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7ZWxzZXtpZighd2luZG93LmNsaXBib2FyZERhdGEpcmV0dXJuO2M9d2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIil9dGhpcy5zZXREYXRlKGMpLHRoaXMudXBkYXRlKCksYi5wcmV2ZW50RGVmYXVsdCgpfSxfdXRjX3RvX2xvY2FsOmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiBhO3ZhciBiPW5ldyBEYXRlKGEuZ2V0VGltZSgpKzZlNCphLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiBiLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1hLmdldFRpbWV6b25lT2Zmc2V0KCkmJihiPW5ldyBEYXRlKGEuZ2V0VGltZSgpKzZlNCpiLmdldFRpbWV6b25lT2Zmc2V0KCkpKSxifSxfbG9jYWxfdG9fdXRjOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZuZXcgRGF0ZShhLmdldFRpbWUoKS02ZTQqYS5nZXRUaW1lem9uZU9mZnNldCgpKX0sX3plcm9fdGltZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9LF96ZXJvX3V0Y190aW1lOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZjKGEuZ2V0VVRDRnVsbFllYXIoKSxhLmdldFVUQ01vbnRoKCksYS5nZXRVVENEYXRlKCkpfSxnZXREYXRlczpmdW5jdGlvbigpe3JldHVybiBhLm1hcCh0aGlzLmRhdGVzLHRoaXMuX3V0Y190b19sb2NhbCl9LGdldFVUQ0RhdGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWFwKHRoaXMuZGF0ZXMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEYXRlKGEpfSl9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXRjX3RvX2xvY2FsKHRoaXMuZ2V0VVRDRGF0ZSgpKX0sZ2V0VVRDRGF0ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0ZXMuZ2V0KC0xKTtyZXR1cm4gYSE9PWI/bmV3IERhdGUoYSk6bnVsbH0sY2xlYXJEYXRlczpmdW5jdGlvbigpe3RoaXMuaW5wdXRGaWVsZC52YWwoXCJcIiksdGhpcy51cGRhdGUoKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlRGF0ZVwiKSx0aGlzLm8uYXV0b2Nsb3NlJiZ0aGlzLmhpZGUoKX0sc2V0RGF0ZXM6ZnVuY3Rpb24oKXt2YXIgYj1hLmlzQXJyYXkoYXJndW1lbnRzWzBdKT9hcmd1bWVudHNbMF06YXJndW1lbnRzO3JldHVybiB0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLGIpLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VEYXRlXCIpLHRoaXMuc2V0VmFsdWUoKSx0aGlzfSxzZXRVVENEYXRlczpmdW5jdGlvbigpe3ZhciBiPWEuaXNBcnJheShhcmd1bWVudHNbMF0pP2FyZ3VtZW50c1swXTphcmd1bWVudHM7cmV0dXJuIHRoaXMuc2V0RGF0ZXMuYXBwbHkodGhpcyxhLm1hcChiLHRoaXMuX3V0Y190b19sb2NhbCkpLHRoaXN9LHNldERhdGU6ZihcInNldERhdGVzXCIpLHNldFVUQ0RhdGU6ZihcInNldFVUQ0RhdGVzXCIpLHJlbW92ZTpmKFwiZGVzdHJveVwiLFwiTWV0aG9kIGByZW1vdmVgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDIuMC4gVXNlIGBkZXN0cm95YCBpbnN0ZWFkXCIpLHNldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRGb3JtYXR0ZWREYXRlKCk7cmV0dXJuIHRoaXMuaW5wdXRGaWVsZC52YWwoYSksdGhpc30sZ2V0Rm9ybWF0dGVkRGF0ZTpmdW5jdGlvbihjKXtjPT09YiYmKGM9dGhpcy5vLmZvcm1hdCk7dmFyIGQ9dGhpcy5vLmxhbmd1YWdlO3JldHVybiBhLm1hcCh0aGlzLmRhdGVzLGZ1bmN0aW9uKGEpe3JldHVybiByLmZvcm1hdERhdGUoYSxjLGQpfSkuam9pbih0aGlzLm8ubXVsdGlkYXRlU2VwYXJhdG9yKX0sZ2V0U3RhcnREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5zdGFydERhdGV9LHNldFN0YXJ0RGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc19vcHRpb25zKHtzdGFydERhdGU6YX0pLHRoaXMudXBkYXRlKCksdGhpcy51cGRhdGVOYXZBcnJvd3MoKSx0aGlzfSxnZXRFbmREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5lbmREYXRlfSxzZXRFbmREYXRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9wcm9jZXNzX29wdGlvbnMoe2VuZERhdGU6YX0pLHRoaXMudXBkYXRlKCksdGhpcy51cGRhdGVOYXZBcnJvd3MoKSx0aGlzfSxzZXREYXlzT2ZXZWVrRGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3Byb2Nlc3Nfb3B0aW9ucyh7ZGF5c09mV2Vla0Rpc2FibGVkOmF9KSx0aGlzLnVwZGF0ZSgpLHRoaXN9LHNldERheXNPZldlZWtIaWdobGlnaHRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc19vcHRpb25zKHtkYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQ6YX0pLHRoaXMudXBkYXRlKCksdGhpc30sc2V0RGF0ZXNEaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc19vcHRpb25zKHtkYXRlc0Rpc2FibGVkOmF9KSx0aGlzLnVwZGF0ZSgpLHRoaXN9LHBsYWNlOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0lubGluZSlyZXR1cm4gdGhpczt2YXIgYj10aGlzLnBpY2tlci5vdXRlcldpZHRoKCksYz10aGlzLnBpY2tlci5vdXRlckhlaWdodCgpLGQ9MTAsZT1hKHRoaXMuby5jb250YWluZXIpLGY9ZS53aWR0aCgpLGc9XCJib2R5XCI9PT10aGlzLm8uY29udGFpbmVyP2EoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOmUuc2Nyb2xsVG9wKCksaD1lLm9mZnNldCgpLGk9WzBdO3RoaXMuZWxlbWVudC5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcykuY3NzKFwiei1pbmRleFwiKTtcImF1dG9cIiE9PWImJjAhPT1OdW1iZXIoYikmJmkucHVzaChOdW1iZXIoYikpfSk7dmFyIGo9TWF0aC5tYXguYXBwbHkoTWF0aCxpKSt0aGlzLm8uekluZGV4T2Zmc2V0LGs9dGhpcy5jb21wb25lbnQ/dGhpcy5jb21wb25lbnQucGFyZW50KCkub2Zmc2V0KCk6dGhpcy5lbGVtZW50Lm9mZnNldCgpLGw9dGhpcy5jb21wb25lbnQ/dGhpcy5jb21wb25lbnQub3V0ZXJIZWlnaHQoITApOnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCghMSksbT10aGlzLmNvbXBvbmVudD90aGlzLmNvbXBvbmVudC5vdXRlcldpZHRoKCEwKTp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCghMSksbj1rLmxlZnQtaC5sZWZ0LG89ay50b3AtaC50b3A7XCJib2R5XCIhPT10aGlzLm8uY29udGFpbmVyJiYobys9ZyksdGhpcy5waWNrZXIucmVtb3ZlQ2xhc3MoXCJkYXRlcGlja2VyLW9yaWVudC10b3AgZGF0ZXBpY2tlci1vcmllbnQtYm90dG9tIGRhdGVwaWNrZXItb3JpZW50LXJpZ2h0IGRhdGVwaWNrZXItb3JpZW50LWxlZnRcIiksXCJhdXRvXCIhPT10aGlzLm8ub3JpZW50YXRpb24ueD8odGhpcy5waWNrZXIuYWRkQ2xhc3MoXCJkYXRlcGlja2VyLW9yaWVudC1cIit0aGlzLm8ub3JpZW50YXRpb24ueCksXCJyaWdodFwiPT09dGhpcy5vLm9yaWVudGF0aW9uLngmJihuLT1iLW0pKTprLmxlZnQ8MD8odGhpcy5waWNrZXIuYWRkQ2xhc3MoXCJkYXRlcGlja2VyLW9yaWVudC1sZWZ0XCIpLG4tPWsubGVmdC1kKTpuK2I+Zj8odGhpcy5waWNrZXIuYWRkQ2xhc3MoXCJkYXRlcGlja2VyLW9yaWVudC1yaWdodFwiKSxuKz1tLWIpOnRoaXMuby5ydGw/dGhpcy5waWNrZXIuYWRkQ2xhc3MoXCJkYXRlcGlja2VyLW9yaWVudC1yaWdodFwiKTp0aGlzLnBpY2tlci5hZGRDbGFzcyhcImRhdGVwaWNrZXItb3JpZW50LWxlZnRcIik7dmFyIHAscT10aGlzLm8ub3JpZW50YXRpb24ueTtpZihcImF1dG9cIj09PXEmJihwPS1nK28tYyxxPXA8MD9cImJvdHRvbVwiOlwidG9wXCIpLHRoaXMucGlja2VyLmFkZENsYXNzKFwiZGF0ZXBpY2tlci1vcmllbnQtXCIrcSksXCJ0b3BcIj09PXE/by09YytwYXJzZUludCh0aGlzLnBpY2tlci5jc3MoXCJwYWRkaW5nLXRvcFwiKSk6bys9bCx0aGlzLm8ucnRsKXt2YXIgcj1mLShuK20pO3RoaXMucGlja2VyLmNzcyh7dG9wOm8scmlnaHQ6cix6SW5kZXg6an0pfWVsc2UgdGhpcy5waWNrZXIuY3NzKHt0b3A6byxsZWZ0Om4sekluZGV4Omp9KTtyZXR1cm4gdGhpc30sX2FsbG93X3VwZGF0ZTohMCx1cGRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fYWxsb3dfdXBkYXRlKXJldHVybiB0aGlzO3ZhciBiPXRoaXMuZGF0ZXMuY29weSgpLGM9W10sZD0hMTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5lYWNoKGFyZ3VtZW50cyxhLnByb3h5KGZ1bmN0aW9uKGEsYil7YiBpbnN0YW5jZW9mIERhdGUmJihiPXRoaXMuX2xvY2FsX3RvX3V0YyhiKSksYy5wdXNoKGIpfSx0aGlzKSksZD0hMCk6KGM9dGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwoKTp0aGlzLmVsZW1lbnQuZGF0YShcImRhdGVcIil8fHRoaXMuaW5wdXRGaWVsZC52YWwoKSxjPWMmJnRoaXMuby5tdWx0aWRhdGU/Yy5zcGxpdCh0aGlzLm8ubXVsdGlkYXRlU2VwYXJhdG9yKTpbY10sZGVsZXRlIHRoaXMuZWxlbWVudC5kYXRhKCkuZGF0ZSksYz1hLm1hcChjLGEucHJveHkoZnVuY3Rpb24oYSl7cmV0dXJuIHIucGFyc2VEYXRlKGEsdGhpcy5vLmZvcm1hdCx0aGlzLm8ubGFuZ3VhZ2UsdGhpcy5vLmFzc3VtZU5lYXJieVllYXIpfSx0aGlzKSksYz1hLmdyZXAoYyxhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmRhdGVXaXRoaW5SYW5nZShhKXx8IWF9LHRoaXMpLCEwKSx0aGlzLmRhdGVzLnJlcGxhY2UoYyksdGhpcy5vLnVwZGF0ZVZpZXdEYXRlJiYodGhpcy5kYXRlcy5sZW5ndGg/dGhpcy52aWV3RGF0ZT1uZXcgRGF0ZSh0aGlzLmRhdGVzLmdldCgtMSkpOnRoaXMudmlld0RhdGU8dGhpcy5vLnN0YXJ0RGF0ZT90aGlzLnZpZXdEYXRlPW5ldyBEYXRlKHRoaXMuby5zdGFydERhdGUpOnRoaXMudmlld0RhdGU+dGhpcy5vLmVuZERhdGU/dGhpcy52aWV3RGF0ZT1uZXcgRGF0ZSh0aGlzLm8uZW5kRGF0ZSk6dGhpcy52aWV3RGF0ZT10aGlzLm8uZGVmYXVsdFZpZXdEYXRlKSxkPyh0aGlzLnNldFZhbHVlKCksdGhpcy5lbGVtZW50LmNoYW5nZSgpKTp0aGlzLmRhdGVzLmxlbmd0aCYmU3RyaW5nKGIpIT09U3RyaW5nKHRoaXMuZGF0ZXMpJiZkJiYodGhpcy5fdHJpZ2dlcihcImNoYW5nZURhdGVcIiksdGhpcy5lbGVtZW50LmNoYW5nZSgpKSwhdGhpcy5kYXRlcy5sZW5ndGgmJmIubGVuZ3RoJiYodGhpcy5fdHJpZ2dlcihcImNsZWFyRGF0ZVwiKSx0aGlzLmVsZW1lbnQuY2hhbmdlKCkpLHRoaXMuZmlsbCgpLHRoaXN9LGZpbGxEb3c6ZnVuY3Rpb24oKXtpZih0aGlzLm8uc2hvd1dlZWtEYXlzKXt2YXIgYj10aGlzLm8ud2Vla1N0YXJ0LGM9XCI8dHI+XCI7Zm9yKHRoaXMuby5jYWxlbmRhcldlZWtzJiYoYys9Jzx0aCBjbGFzcz1cImN3XCI+JiMxNjA7PC90aD4nKTtiPHRoaXMuby53ZWVrU3RhcnQrNzspYys9Jzx0aCBjbGFzcz1cImRvdycsYS5pbkFycmF5KGIsdGhpcy5vLmRheXNPZldlZWtEaXNhYmxlZCkhPT0tMSYmKGMrPVwiIGRpc2FibGVkXCIpLGMrPSdcIj4nK3FbdGhpcy5vLmxhbmd1YWdlXS5kYXlzTWluW2IrKyU3XStcIjwvdGg+XCI7Yys9XCI8L3RyPlwiLHRoaXMucGlja2VyLmZpbmQoXCIuZGF0ZXBpY2tlci1kYXlzIHRoZWFkXCIpLmFwcGVuZChjKX19LGZpbGxNb250aHM6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj10aGlzLl91dGNfdG9fbG9jYWwodGhpcy52aWV3RGF0ZSksYz1cIlwiLGQ9MDtkPDEyO2QrKylhPWImJmIuZ2V0TW9udGgoKT09PWQ/XCIgZm9jdXNlZFwiOlwiXCIsYys9JzxzcGFuIGNsYXNzPVwibW9udGgnK2ErJ1wiPicrcVt0aGlzLm8ubGFuZ3VhZ2VdLm1vbnRoc1Nob3J0W2RdK1wiPC9zcGFuPlwiO3RoaXMucGlja2VyLmZpbmQoXCIuZGF0ZXBpY2tlci1tb250aHMgdGRcIikuaHRtbChjKX0sc2V0UmFuZ2U6ZnVuY3Rpb24oYil7YiYmYi5sZW5ndGg/dGhpcy5yYW5nZT1hLm1hcChiLGZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlT2YoKX0pOmRlbGV0ZSB0aGlzLnJhbmdlLHRoaXMuZmlsbCgpfSxnZXRDbGFzc05hbWVzOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGY9dGhpcy52aWV3RGF0ZS5nZXRVVENGdWxsWWVhcigpLGc9dGhpcy52aWV3RGF0ZS5nZXRVVENNb250aCgpLGg9ZCgpO3JldHVybiBiLmdldFVUQ0Z1bGxZZWFyKCk8Znx8Yi5nZXRVVENGdWxsWWVhcigpPT09ZiYmYi5nZXRVVENNb250aCgpPGc/Yy5wdXNoKFwib2xkXCIpOihiLmdldFVUQ0Z1bGxZZWFyKCk+Znx8Yi5nZXRVVENGdWxsWWVhcigpPT09ZiYmYi5nZXRVVENNb250aCgpPmcpJiZjLnB1c2goXCJuZXdcIiksdGhpcy5mb2N1c0RhdGUmJmIudmFsdWVPZigpPT09dGhpcy5mb2N1c0RhdGUudmFsdWVPZigpJiZjLnB1c2goXCJmb2N1c2VkXCIpLHRoaXMuby50b2RheUhpZ2hsaWdodCYmZShiLGgpJiZjLnB1c2goXCJ0b2RheVwiKSx0aGlzLmRhdGVzLmNvbnRhaW5zKGIpIT09LTEmJmMucHVzaChcImFjdGl2ZVwiKSx0aGlzLmRhdGVXaXRoaW5SYW5nZShiKXx8Yy5wdXNoKFwiZGlzYWJsZWRcIiksdGhpcy5kYXRlSXNEaXNhYmxlZChiKSYmYy5wdXNoKFwiZGlzYWJsZWRcIixcImRpc2FibGVkLWRhdGVcIiksYS5pbkFycmF5KGIuZ2V0VVRDRGF5KCksdGhpcy5vLmRheXNPZldlZWtIaWdobGlnaHRlZCkhPT0tMSYmYy5wdXNoKFwiaGlnaGxpZ2h0ZWRcIiksdGhpcy5yYW5nZSYmKGI+dGhpcy5yYW5nZVswXSYmYjx0aGlzLnJhbmdlW3RoaXMucmFuZ2UubGVuZ3RoLTFdJiZjLnB1c2goXCJyYW5nZVwiKSxhLmluQXJyYXkoYi52YWx1ZU9mKCksdGhpcy5yYW5nZSkhPT0tMSYmYy5wdXNoKFwic2VsZWN0ZWRcIiksYi52YWx1ZU9mKCk9PT10aGlzLnJhbmdlWzBdJiZjLnB1c2goXCJyYW5nZS1zdGFydFwiKSxiLnZhbHVlT2YoKT09PXRoaXMucmFuZ2VbdGhpcy5yYW5nZS5sZW5ndGgtMV0mJmMucHVzaChcInJhbmdlLWVuZFwiKSksY30sX2ZpbGxfeWVhcnNWaWV3OmZ1bmN0aW9uKGMsZCxlLGYsZyxoLGkpe2Zvcih2YXIgaixrLGwsbT1cIlwiLG49ZS8xMCxvPXRoaXMucGlja2VyLmZpbmQoYykscD1NYXRoLmZsb29yKGYvZSkqZSxxPXArOSpuLHI9TWF0aC5mbG9vcih0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCkvbikqbixzPWEubWFwKHRoaXMuZGF0ZXMsZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguZmxvb3IoYS5nZXRVVENGdWxsWWVhcigpL24pKm59KSx0PXAtbjt0PD1xK247dCs9bilqPVtkXSxrPW51bGwsdD09PXAtbj9qLnB1c2goXCJvbGRcIik6dD09PXErbiYmai5wdXNoKFwibmV3XCIpLGEuaW5BcnJheSh0LHMpIT09LTEmJmoucHVzaChcImFjdGl2ZVwiKSwodDxnfHx0PmgpJiZqLnB1c2goXCJkaXNhYmxlZFwiKSx0PT09ciYmai5wdXNoKFwiZm9jdXNlZFwiKSxpIT09YS5ub29wJiYobD1pKG5ldyBEYXRlKHQsMCwxKSksbD09PWI/bD17fTpcImJvb2xlYW5cIj09dHlwZW9mIGw/bD17ZW5hYmxlZDpsfTpcInN0cmluZ1wiPT10eXBlb2YgbCYmKGw9e2NsYXNzZXM6bH0pLGwuZW5hYmxlZD09PSExJiZqLnB1c2goXCJkaXNhYmxlZFwiKSxsLmNsYXNzZXMmJihqPWouY29uY2F0KGwuY2xhc3Nlcy5zcGxpdCgvXFxzKy8pKSksbC50b29sdGlwJiYoaz1sLnRvb2x0aXApKSxtKz0nPHNwYW4gY2xhc3M9XCInK2ouam9pbihcIiBcIikrJ1wiJysoaz8nIHRpdGxlPVwiJytrKydcIic6XCJcIikrXCI+XCIrdCtcIjwvc3Bhbj5cIjtvLmZpbmQoXCIuZGF0ZXBpY2tlci1zd2l0Y2hcIikudGV4dChwK1wiLVwiK3EpLG8uZmluZChcInRkXCIpLmh0bWwobSl9LGZpbGw6ZnVuY3Rpb24oKXt2YXIgZCxlLGY9bmV3IERhdGUodGhpcy52aWV3RGF0ZSksZz1mLmdldFVUQ0Z1bGxZZWFyKCksaD1mLmdldFVUQ01vbnRoKCksaT10aGlzLm8uc3RhcnREYXRlIT09LSgxLzApP3RoaXMuby5zdGFydERhdGUuZ2V0VVRDRnVsbFllYXIoKTotKDEvMCksaj10aGlzLm8uc3RhcnREYXRlIT09LSgxLzApP3RoaXMuby5zdGFydERhdGUuZ2V0VVRDTW9udGgoKTotKDEvMCksaz10aGlzLm8uZW5kRGF0ZSE9PTEvMD90aGlzLm8uZW5kRGF0ZS5nZXRVVENGdWxsWWVhcigpOjEvMCxsPXRoaXMuby5lbmREYXRlIT09MS8wP3RoaXMuby5lbmREYXRlLmdldFVUQ01vbnRoKCk6MS8wLG09cVt0aGlzLm8ubGFuZ3VhZ2VdLnRvZGF5fHxxLmVuLnRvZGF5fHxcIlwiLG49cVt0aGlzLm8ubGFuZ3VhZ2VdLmNsZWFyfHxxLmVuLmNsZWFyfHxcIlwiLG89cVt0aGlzLm8ubGFuZ3VhZ2VdLnRpdGxlRm9ybWF0fHxxLmVuLnRpdGxlRm9ybWF0O2lmKCFpc05hTihnKSYmIWlzTmFOKGgpKXt0aGlzLnBpY2tlci5maW5kKFwiLmRhdGVwaWNrZXItZGF5cyAuZGF0ZXBpY2tlci1zd2l0Y2hcIikudGV4dChyLmZvcm1hdERhdGUoZixvLHRoaXMuby5sYW5ndWFnZSkpLHRoaXMucGlja2VyLmZpbmQoXCJ0Zm9vdCAudG9kYXlcIikudGV4dChtKS5jc3MoXCJkaXNwbGF5XCIsdGhpcy5vLnRvZGF5QnRuPT09ITB8fFwibGlua2VkXCI9PT10aGlzLm8udG9kYXlCdG4/XCJ0YWJsZS1jZWxsXCI6XCJub25lXCIpLHRoaXMucGlja2VyLmZpbmQoXCJ0Zm9vdCAuY2xlYXJcIikudGV4dChuKS5jc3MoXCJkaXNwbGF5XCIsdGhpcy5vLmNsZWFyQnRuPT09ITA/XCJ0YWJsZS1jZWxsXCI6XCJub25lXCIpLHRoaXMucGlja2VyLmZpbmQoXCJ0aGVhZCAuZGF0ZXBpY2tlci10aXRsZVwiKS50ZXh0KHRoaXMuby50aXRsZSkuY3NzKFwiZGlzcGxheVwiLFwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm8udGl0bGUmJlwiXCIhPT10aGlzLm8udGl0bGU/XCJ0YWJsZS1jZWxsXCI6XCJub25lXCIpLHRoaXMudXBkYXRlTmF2QXJyb3dzKCksdGhpcy5maWxsTW9udGhzKCk7dmFyIHA9YyhnLGgsMCkscz1wLmdldFVUQ0RhdGUoKTtwLnNldFVUQ0RhdGUocy0ocC5nZXRVVENEYXkoKS10aGlzLm8ud2Vla1N0YXJ0KzcpJTcpO3ZhciB0PW5ldyBEYXRlKHApO3AuZ2V0VVRDRnVsbFllYXIoKTwxMDAmJnQuc2V0VVRDRnVsbFllYXIocC5nZXRVVENGdWxsWWVhcigpKSx0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNDIpLHQ9dC52YWx1ZU9mKCk7Zm9yKHZhciB1LHYsdz1bXTtwLnZhbHVlT2YoKTx0Oyl7aWYodT1wLmdldFVUQ0RheSgpLHU9PT10aGlzLm8ud2Vla1N0YXJ0JiYody5wdXNoKFwiPHRyPlwiKSx0aGlzLm8uY2FsZW5kYXJXZWVrcykpe3ZhciB4PW5ldyBEYXRlKCtwKyh0aGlzLm8ud2Vla1N0YXJ0LXUtNyklNyo4NjRlNSkseT1uZXcgRGF0ZShOdW1iZXIoeCkrKDExLXguZ2V0VVRDRGF5KCkpJTcqODY0ZTUpLHo9bmV3IERhdGUoTnVtYmVyKHo9Yyh5LmdldFVUQ0Z1bGxZZWFyKCksMCwxKSkrKDExLXouZ2V0VVRDRGF5KCkpJTcqODY0ZTUpLEE9KHkteikvODY0ZTUvNysxO3cucHVzaCgnPHRkIGNsYXNzPVwiY3dcIj4nK0ErXCI8L3RkPlwiKX12PXRoaXMuZ2V0Q2xhc3NOYW1lcyhwKSx2LnB1c2goXCJkYXlcIik7dmFyIEI9cC5nZXRVVENEYXRlKCk7dGhpcy5vLmJlZm9yZVNob3dEYXkhPT1hLm5vb3AmJihlPXRoaXMuby5iZWZvcmVTaG93RGF5KHRoaXMuX3V0Y190b19sb2NhbChwKSksZT09PWI/ZT17fTpcImJvb2xlYW5cIj09dHlwZW9mIGU/ZT17ZW5hYmxlZDplfTpcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9e2NsYXNzZXM6ZX0pLGUuZW5hYmxlZD09PSExJiZ2LnB1c2goXCJkaXNhYmxlZFwiKSxlLmNsYXNzZXMmJih2PXYuY29uY2F0KGUuY2xhc3Nlcy5zcGxpdCgvXFxzKy8pKSksZS50b29sdGlwJiYoZD1lLnRvb2x0aXApLGUuY29udGVudCYmKEI9ZS5jb250ZW50KSksdj1hLmlzRnVuY3Rpb24oYS51bmlxdWVTb3J0KT9hLnVuaXF1ZVNvcnQodik6YS51bmlxdWUodiksdy5wdXNoKCc8dGQgY2xhc3M9XCInK3Yuam9pbihcIiBcIikrJ1wiJysoZD8nIHRpdGxlPVwiJytkKydcIic6XCJcIikrJyBkYXRhLWRhdGU9XCInK3AuZ2V0VGltZSgpLnRvU3RyaW5nKCkrJ1wiPicrQitcIjwvdGQ+XCIpLGQ9bnVsbCx1PT09dGhpcy5vLndlZWtFbmQmJncucHVzaChcIjwvdHI+XCIpLHAuc2V0VVRDRGF0ZShwLmdldFVUQ0RhdGUoKSsxKX10aGlzLnBpY2tlci5maW5kKFwiLmRhdGVwaWNrZXItZGF5cyB0Ym9keVwiKS5odG1sKHcuam9pbihcIlwiKSk7dmFyIEM9cVt0aGlzLm8ubGFuZ3VhZ2VdLm1vbnRoc1RpdGxlfHxxLmVuLm1vbnRoc1RpdGxlfHxcIk1vbnRoc1wiLEQ9dGhpcy5waWNrZXIuZmluZChcIi5kYXRlcGlja2VyLW1vbnRoc1wiKS5maW5kKFwiLmRhdGVwaWNrZXItc3dpdGNoXCIpLnRleHQodGhpcy5vLm1heFZpZXdNb2RlPDI/QzpnKS5lbmQoKS5maW5kKFwidGJvZHkgc3BhblwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtpZihhLmVhY2godGhpcy5kYXRlcyxmdW5jdGlvbihhLGIpe2IuZ2V0VVRDRnVsbFllYXIoKT09PWcmJkQuZXEoYi5nZXRVVENNb250aCgpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKX0pLChnPGl8fGc+aykmJkQuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSxnPT09aSYmRC5zbGljZSgwLGopLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksZz09PWsmJkQuc2xpY2UobCsxKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLHRoaXMuby5iZWZvcmVTaG93TW9udGghPT1hLm5vb3Ape3ZhciBFPXRoaXM7YS5lYWNoKEQsZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgRGF0ZShnLGMsMSksZj1FLm8uYmVmb3JlU2hvd01vbnRoKGUpO2Y9PT1iP2Y9e306XCJib29sZWFuXCI9PXR5cGVvZiBmP2Y9e2VuYWJsZWQ6Zn06XCJzdHJpbmdcIj09dHlwZW9mIGYmJihmPXtjbGFzc2VzOmZ9KSxmLmVuYWJsZWQhPT0hMXx8YShkKS5oYXNDbGFzcyhcImRpc2FibGVkXCIpfHxhKGQpLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksZi5jbGFzc2VzJiZhKGQpLmFkZENsYXNzKGYuY2xhc3NlcyksZi50b29sdGlwJiZhKGQpLnByb3AoXCJ0aXRsZVwiLGYudG9vbHRpcCl9KX10aGlzLl9maWxsX3llYXJzVmlldyhcIi5kYXRlcGlja2VyLXllYXJzXCIsXCJ5ZWFyXCIsMTAsZyxpLGssdGhpcy5vLmJlZm9yZVNob3dZZWFyKSx0aGlzLl9maWxsX3llYXJzVmlldyhcIi5kYXRlcGlja2VyLWRlY2FkZXNcIixcImRlY2FkZVwiLDEwMCxnLGksayx0aGlzLm8uYmVmb3JlU2hvd0RlY2FkZSksdGhpcy5fZmlsbF95ZWFyc1ZpZXcoXCIuZGF0ZXBpY2tlci1jZW50dXJpZXNcIixcImNlbnR1cnlcIiwxZTMsZyxpLGssdGhpcy5vLmJlZm9yZVNob3dDZW50dXJ5KX19LHVwZGF0ZU5hdkFycm93czpmdW5jdGlvbigpe2lmKHRoaXMuX2FsbG93X3VwZGF0ZSl7dmFyIGEsYixjPW5ldyBEYXRlKHRoaXMudmlld0RhdGUpLGQ9Yy5nZXRVVENGdWxsWWVhcigpLGU9Yy5nZXRVVENNb250aCgpLGY9dGhpcy5vLnN0YXJ0RGF0ZSE9PS0oMS8wKT90aGlzLm8uc3RhcnREYXRlLmdldFVUQ0Z1bGxZZWFyKCk6LSgxLzApLGc9dGhpcy5vLnN0YXJ0RGF0ZSE9PS0oMS8wKT90aGlzLm8uc3RhcnREYXRlLmdldFVUQ01vbnRoKCk6LSgxLzApLGg9dGhpcy5vLmVuZERhdGUhPT0xLzA/dGhpcy5vLmVuZERhdGUuZ2V0VVRDRnVsbFllYXIoKToxLzAsaT10aGlzLm8uZW5kRGF0ZSE9PTEvMD90aGlzLm8uZW5kRGF0ZS5nZXRVVENNb250aCgpOjEvMCxqPTE7c3dpdGNoKHRoaXMudmlld01vZGUpe2Nhc2UgMDphPWQ8PWYmJmU8PWcsYj1kPj1oJiZlPj1pO2JyZWFrO2Nhc2UgNDpqKj0xMDtjYXNlIDM6aio9MTA7Y2FzZSAyOmoqPTEwO2Nhc2UgMTphPU1hdGguZmxvb3IoZC9qKSpqPD1mLGI9TWF0aC5mbG9vcihkL2opKmoraj49aH10aGlzLnBpY2tlci5maW5kKFwiLnByZXZcIikudG9nZ2xlQ2xhc3MoXCJkaXNhYmxlZFwiLGEpLHRoaXMucGlja2VyLmZpbmQoXCIubmV4dFwiKS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsYil9fSxjbGljazpmdW5jdGlvbihiKXtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZSxmLGcsaDtlPWEoYi50YXJnZXQpLGUuaGFzQ2xhc3MoXCJkYXRlcGlja2VyLXN3aXRjaFwiKSYmdGhpcy52aWV3TW9kZSE9PXRoaXMuby5tYXhWaWV3TW9kZSYmdGhpcy5zZXRWaWV3TW9kZSh0aGlzLnZpZXdNb2RlKzEpLGUuaGFzQ2xhc3MoXCJ0b2RheVwiKSYmIWUuaGFzQ2xhc3MoXCJkYXlcIikmJih0aGlzLnNldFZpZXdNb2RlKDApLHRoaXMuX3NldERhdGUoZCgpLFwibGlua2VkXCI9PT10aGlzLm8udG9kYXlCdG4/bnVsbDpcInZpZXdcIikpLGUuaGFzQ2xhc3MoXCJjbGVhclwiKSYmdGhpcy5jbGVhckRhdGVzKCksZS5oYXNDbGFzcyhcImRpc2FibGVkXCIpfHwoZS5oYXNDbGFzcyhcIm1vbnRoXCIpfHxlLmhhc0NsYXNzKFwieWVhclwiKXx8ZS5oYXNDbGFzcyhcImRlY2FkZVwiKXx8ZS5oYXNDbGFzcyhcImNlbnR1cnlcIikpJiYodGhpcy52aWV3RGF0ZS5zZXRVVENEYXRlKDEpLGY9MSwxPT09dGhpcy52aWV3TW9kZT8oaD1lLnBhcmVudCgpLmZpbmQoXCJzcGFuXCIpLmluZGV4KGUpLGc9dGhpcy52aWV3RGF0ZS5nZXRVVENGdWxsWWVhcigpLHRoaXMudmlld0RhdGUuc2V0VVRDTW9udGgoaCkpOihoPTAsZz1OdW1iZXIoZS50ZXh0KCkpLHRoaXMudmlld0RhdGUuc2V0VVRDRnVsbFllYXIoZykpLHRoaXMuX3RyaWdnZXIoci52aWV3TW9kZXNbdGhpcy52aWV3TW9kZS0xXS5lLHRoaXMudmlld0RhdGUpLHRoaXMudmlld01vZGU9PT10aGlzLm8ubWluVmlld01vZGU/dGhpcy5fc2V0RGF0ZShjKGcsaCxmKSk6KHRoaXMuc2V0Vmlld01vZGUodGhpcy52aWV3TW9kZS0xKSx0aGlzLmZpbGwoKSkpLHRoaXMucGlja2VyLmlzKFwiOnZpc2libGVcIikmJnRoaXMuX2ZvY3VzZWRfZnJvbSYmdGhpcy5fZm9jdXNlZF9mcm9tLmZvY3VzKCksZGVsZXRlIHRoaXMuX2ZvY3VzZWRfZnJvbX0sZGF5Q2VsbENsaWNrOmZ1bmN0aW9uKGIpe3ZhciBjPWEoYi5jdXJyZW50VGFyZ2V0KSxkPWMuZGF0YShcImRhdGVcIiksZT1uZXcgRGF0ZShkKTt0aGlzLm8udXBkYXRlVmlld0RhdGUmJihlLmdldFVUQ0Z1bGxZZWFyKCkhPT10aGlzLnZpZXdEYXRlLmdldFVUQ0Z1bGxZZWFyKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VZZWFyXCIsdGhpcy52aWV3RGF0ZSksZS5nZXRVVENNb250aCgpIT09dGhpcy52aWV3RGF0ZS5nZXRVVENNb250aCgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlTW9udGhcIix0aGlzLnZpZXdEYXRlKSksdGhpcy5fc2V0RGF0ZShlKX0sbmF2QXJyb3dzQ2xpY2s6ZnVuY3Rpb24oYil7dmFyIGM9YShiLmN1cnJlbnRUYXJnZXQpLGQ9Yy5oYXNDbGFzcyhcInByZXZcIik/LTE6MTswIT09dGhpcy52aWV3TW9kZSYmKGQqPTEyKnIudmlld01vZGVzW3RoaXMudmlld01vZGVdLm5hdlN0ZXApLHRoaXMudmlld0RhdGU9dGhpcy5tb3ZlTW9udGgodGhpcy52aWV3RGF0ZSxkKSx0aGlzLl90cmlnZ2VyKHIudmlld01vZGVzW3RoaXMudmlld01vZGVdLmUsdGhpcy52aWV3RGF0ZSksdGhpcy5maWxsKCl9LF90b2dnbGVfbXVsdGlkYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0ZXMuY29udGFpbnMoYSk7aWYoYXx8dGhpcy5kYXRlcy5jbGVhcigpLGIhPT0tMT8odGhpcy5vLm11bHRpZGF0ZT09PSEwfHx0aGlzLm8ubXVsdGlkYXRlPjF8fHRoaXMuby50b2dnbGVBY3RpdmUpJiZ0aGlzLmRhdGVzLnJlbW92ZShiKTp0aGlzLm8ubXVsdGlkYXRlPT09ITE/KHRoaXMuZGF0ZXMuY2xlYXIoKSx0aGlzLmRhdGVzLnB1c2goYSkpOnRoaXMuZGF0ZXMucHVzaChhKSxcIm51bWJlclwiPT10eXBlb2YgdGhpcy5vLm11bHRpZGF0ZSlmb3IoO3RoaXMuZGF0ZXMubGVuZ3RoPnRoaXMuby5tdWx0aWRhdGU7KXRoaXMuZGF0ZXMucmVtb3ZlKDApfSxfc2V0RGF0ZTpmdW5jdGlvbihhLGIpe2ImJlwiZGF0ZVwiIT09Ynx8dGhpcy5fdG9nZ2xlX211bHRpZGF0ZShhJiZuZXcgRGF0ZShhKSksKCFiJiZ0aGlzLm8udXBkYXRlVmlld0RhdGV8fFwidmlld1wiPT09YikmJih0aGlzLnZpZXdEYXRlPWEmJm5ldyBEYXRlKGEpKSx0aGlzLmZpbGwoKSx0aGlzLnNldFZhbHVlKCksYiYmXCJ2aWV3XCI9PT1ifHx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlRGF0ZVwiKSx0aGlzLmlucHV0RmllbGQudHJpZ2dlcihcImNoYW5nZVwiKSwhdGhpcy5vLmF1dG9jbG9zZXx8YiYmXCJkYXRlXCIhPT1ifHx0aGlzLmhpZGUoKX0sbW92ZURheTpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBEYXRlKGEpO3JldHVybiBjLnNldFVUQ0RhdGUoYS5nZXRVVENEYXRlKCkrYiksY30sbW92ZVdlZWs6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3ZlRGF5KGEsNypiKX0sbW92ZU1vbnRoOmZ1bmN0aW9uKGEsYil7aWYoIWcoYSkpcmV0dXJuIHRoaXMuby5kZWZhdWx0Vmlld0RhdGU7aWYoIWIpcmV0dXJuIGE7dmFyIGMsZCxlPW5ldyBEYXRlKGEudmFsdWVPZigpKSxmPWUuZ2V0VVRDRGF0ZSgpLGg9ZS5nZXRVVENNb250aCgpLGk9TWF0aC5hYnMoYik7aWYoYj1iPjA/MTotMSwxPT09aSlkPWI9PT0tMT9mdW5jdGlvbigpe3JldHVybiBlLmdldFVUQ01vbnRoKCk9PT1ofTpmdW5jdGlvbigpe3JldHVybiBlLmdldFVUQ01vbnRoKCkhPT1jfSxjPWgrYixlLnNldFVUQ01vbnRoKGMpLGM9KGMrMTIpJTEyO2Vsc2V7Zm9yKHZhciBqPTA7ajxpO2orKyllPXRoaXMubW92ZU1vbnRoKGUsYik7Yz1lLmdldFVUQ01vbnRoKCksZS5zZXRVVENEYXRlKGYpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYyE9PWUuZ2V0VVRDTW9udGgoKX19Zm9yKDtkKCk7KWUuc2V0VVRDRGF0ZSgtLWYpLGUuc2V0VVRDTW9udGgoYyk7cmV0dXJuIGV9LG1vdmVZZWFyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW92ZU1vbnRoKGEsMTIqYil9LG1vdmVBdmFpbGFibGVEYXRlOmZ1bmN0aW9uKGEsYixjKXtkb3tpZihhPXRoaXNbY10oYSxiKSwhdGhpcy5kYXRlV2l0aGluUmFuZ2UoYSkpcmV0dXJuITE7Yz1cIm1vdmVEYXlcIn13aGlsZSh0aGlzLmRhdGVJc0Rpc2FibGVkKGEpKTtyZXR1cm4gYX0sd2Vla09mRGF0ZUlzRGlzYWJsZWQ6ZnVuY3Rpb24oYil7cmV0dXJuIGEuaW5BcnJheShiLmdldFVUQ0RheSgpLHRoaXMuby5kYXlzT2ZXZWVrRGlzYWJsZWQpIT09LTF9LGRhdGVJc0Rpc2FibGVkOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndlZWtPZkRhdGVJc0Rpc2FibGVkKGIpfHxhLmdyZXAodGhpcy5vLmRhdGVzRGlzYWJsZWQsZnVuY3Rpb24oYSl7cmV0dXJuIGUoYixhKX0pLmxlbmd0aD4wfSxkYXRlV2l0aGluUmFuZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXRoaXMuby5zdGFydERhdGUmJmE8PXRoaXMuby5lbmREYXRlfSxrZXlkb3duOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLnBpY2tlci5pcyhcIjp2aXNpYmxlXCIpKXJldHVybiB2b2lkKDQwIT09YS5rZXlDb2RlJiYyNyE9PWEua2V5Q29kZXx8KHRoaXMuc2hvdygpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKTt2YXIgYixjLGQ9ITEsZT10aGlzLmZvY3VzRGF0ZXx8dGhpcy52aWV3RGF0ZTtzd2l0Y2goYS5rZXlDb2RlKXtjYXNlIDI3OnRoaXMuZm9jdXNEYXRlPyh0aGlzLmZvY3VzRGF0ZT1udWxsLHRoaXMudmlld0RhdGU9dGhpcy5kYXRlcy5nZXQoLTEpfHx0aGlzLnZpZXdEYXRlLHRoaXMuZmlsbCgpKTp0aGlzLmhpZGUoKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTticmVhaztjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOmlmKCF0aGlzLm8ua2V5Ym9hcmROYXZpZ2F0aW9ufHw3PT09dGhpcy5vLmRheXNPZldlZWtEaXNhYmxlZC5sZW5ndGgpYnJlYWs7Yj0zNz09PWEua2V5Q29kZXx8Mzg9PT1hLmtleUNvZGU/LTE6MSwwPT09dGhpcy52aWV3TW9kZT9hLmN0cmxLZXk/KGM9dGhpcy5tb3ZlQXZhaWxhYmxlRGF0ZShlLGIsXCJtb3ZlWWVhclwiKSxjJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlWWVhclwiLHRoaXMudmlld0RhdGUpKTphLnNoaWZ0S2V5PyhjPXRoaXMubW92ZUF2YWlsYWJsZURhdGUoZSxiLFwibW92ZU1vbnRoXCIpLGMmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VNb250aFwiLHRoaXMudmlld0RhdGUpKTozNz09PWEua2V5Q29kZXx8Mzk9PT1hLmtleUNvZGU/Yz10aGlzLm1vdmVBdmFpbGFibGVEYXRlKGUsYixcIm1vdmVEYXlcIik6dGhpcy53ZWVrT2ZEYXRlSXNEaXNhYmxlZChlKXx8KGM9dGhpcy5tb3ZlQXZhaWxhYmxlRGF0ZShlLGIsXCJtb3ZlV2Vla1wiKSk6MT09PXRoaXMudmlld01vZGU/KDM4IT09YS5rZXlDb2RlJiY0MCE9PWEua2V5Q29kZXx8KGIqPTQpLGM9dGhpcy5tb3ZlQXZhaWxhYmxlRGF0ZShlLGIsXCJtb3ZlTW9udGhcIikpOjI9PT10aGlzLnZpZXdNb2RlJiYoMzghPT1hLmtleUNvZGUmJjQwIT09YS5rZXlDb2RlfHwoYio9NCksYz10aGlzLm1vdmVBdmFpbGFibGVEYXRlKGUsYixcIm1vdmVZZWFyXCIpKSxjJiYodGhpcy5mb2N1c0RhdGU9dGhpcy52aWV3RGF0ZT1jLHRoaXMuc2V0VmFsdWUoKSx0aGlzLmZpbGwoKSxhLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2Nhc2UgMTM6aWYoIXRoaXMuby5mb3JjZVBhcnNlKWJyZWFrO2U9dGhpcy5mb2N1c0RhdGV8fHRoaXMuZGF0ZXMuZ2V0KC0xKXx8dGhpcy52aWV3RGF0ZSx0aGlzLm8ua2V5Ym9hcmROYXZpZ2F0aW9uJiYodGhpcy5fdG9nZ2xlX211bHRpZGF0ZShlKSxkPSEwKSx0aGlzLmZvY3VzRGF0ZT1udWxsLHRoaXMudmlld0RhdGU9dGhpcy5kYXRlcy5nZXQoLTEpfHx0aGlzLnZpZXdEYXRlLHRoaXMuc2V0VmFsdWUoKSx0aGlzLmZpbGwoKSx0aGlzLnBpY2tlci5pcyhcIjp2aXNpYmxlXCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vLmF1dG9jbG9zZSYmdGhpcy5oaWRlKCkpO2JyZWFrO2Nhc2UgOTp0aGlzLmZvY3VzRGF0ZT1udWxsLHRoaXMudmlld0RhdGU9dGhpcy5kYXRlcy5nZXQoLTEpfHx0aGlzLnZpZXdEYXRlLHRoaXMuZmlsbCgpLHRoaXMuaGlkZSgpfWQmJih0aGlzLmRhdGVzLmxlbmd0aD90aGlzLl90cmlnZ2VyKFwiY2hhbmdlRGF0ZVwiKTp0aGlzLl90cmlnZ2VyKFwiY2xlYXJEYXRlXCIpLHRoaXMuaW5wdXRGaWVsZC50cmlnZ2VyKFwiY2hhbmdlXCIpKX0sc2V0Vmlld01vZGU6ZnVuY3Rpb24oYSl7dGhpcy52aWV3TW9kZT1hLHRoaXMucGlja2VyLmNoaWxkcmVuKFwiZGl2XCIpLmhpZGUoKS5maWx0ZXIoXCIuZGF0ZXBpY2tlci1cIityLnZpZXdNb2Rlc1t0aGlzLnZpZXdNb2RlXS5jbHNOYW1lKS5zaG93KCksdGhpcy51cGRhdGVOYXZBcnJvd3MoKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlVmlld01vZGVcIixuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlKSl9fTt2YXIgbD1mdW5jdGlvbihiLGMpe2EuZGF0YShiLFwiZGF0ZXBpY2tlclwiLHRoaXMpLHRoaXMuZWxlbWVudD1hKGIpLHRoaXMuaW5wdXRzPWEubWFwKGMuaW5wdXRzLGZ1bmN0aW9uKGEpe3JldHVybiBhLmpxdWVyeT9hWzBdOmF9KSxkZWxldGUgYy5pbnB1dHMsdGhpcy5rZWVwRW1wdHlWYWx1ZXM9Yy5rZWVwRW1wdHlWYWx1ZXMsZGVsZXRlIGMua2VlcEVtcHR5VmFsdWVzLG4uY2FsbChhKHRoaXMuaW5wdXRzKSxjKS5vbihcImNoYW5nZURhdGVcIixhLnByb3h5KHRoaXMuZGF0ZVVwZGF0ZWQsdGhpcykpLHRoaXMucGlja2Vycz1hLm1hcCh0aGlzLmlucHV0cyxmdW5jdGlvbihiKXtyZXR1cm4gYS5kYXRhKGIsXCJkYXRlcGlja2VyXCIpfSksdGhpcy51cGRhdGVEYXRlcygpfTtsLnByb3RvdHlwZT17dXBkYXRlRGF0ZXM6ZnVuY3Rpb24oKXt0aGlzLmRhdGVzPWEubWFwKHRoaXMucGlja2VycyxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRVVENEYXRlKCl9KSx0aGlzLnVwZGF0ZVJhbmdlcygpfSx1cGRhdGVSYW5nZXM6ZnVuY3Rpb24oKXt2YXIgYj1hLm1hcCh0aGlzLmRhdGVzLGZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlT2YoKX0pO2EuZWFjaCh0aGlzLnBpY2tlcnMsZnVuY3Rpb24oYSxjKXtjLnNldFJhbmdlKGIpfSl9LGRhdGVVcGRhdGVkOmZ1bmN0aW9uKGMpe2lmKCF0aGlzLnVwZGF0aW5nKXt0aGlzLnVwZGF0aW5nPSEwO3ZhciBkPWEuZGF0YShjLnRhcmdldCxcImRhdGVwaWNrZXJcIik7aWYoZCE9PWIpe3ZhciBlPWQuZ2V0VVRDRGF0ZSgpLGY9dGhpcy5rZWVwRW1wdHlWYWx1ZXMsZz1hLmluQXJyYXkoYy50YXJnZXQsdGhpcy5pbnB1dHMpLGg9Zy0xLGk9ZysxLGo9dGhpcy5pbnB1dHMubGVuZ3RoO2lmKGchPT0tMSl7aWYoYS5lYWNoKHRoaXMucGlja2VycyxmdW5jdGlvbihhLGIpe2IuZ2V0VVRDRGF0ZSgpfHxiIT09ZCYmZnx8Yi5zZXRVVENEYXRlKGUpfSksZTx0aGlzLmRhdGVzW2hdKWZvcig7aD49MCYmZTx0aGlzLmRhdGVzW2hdOyl0aGlzLnBpY2tlcnNbaC0tXS5zZXRVVENEYXRlKGUpO2Vsc2UgaWYoZT50aGlzLmRhdGVzW2ldKWZvcig7aTxqJiZlPnRoaXMuZGF0ZXNbaV07KXRoaXMucGlja2Vyc1tpKytdLnNldFVUQ0RhdGUoZSk7dGhpcy51cGRhdGVEYXRlcygpLGRlbGV0ZSB0aGlzLnVwZGF0aW5nfX19fSxkZXN0cm95OmZ1bmN0aW9uKCl7YS5tYXAodGhpcy5waWNrZXJzLGZ1bmN0aW9uKGEpe2EuZGVzdHJveSgpfSksYSh0aGlzLmlucHV0cykub2ZmKFwiY2hhbmdlRGF0ZVwiLHRoaXMuZGF0ZVVwZGF0ZWQpLGRlbGV0ZSB0aGlzLmVsZW1lbnQuZGF0YSgpLmRhdGVwaWNrZXJ9LHJlbW92ZTpmKFwiZGVzdHJveVwiLFwiTWV0aG9kIGByZW1vdmVgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDIuMC4gVXNlIGBkZXN0cm95YCBpbnN0ZWFkXCIpfTt2YXIgbT1hLmZuLmRhdGVwaWNrZXIsbj1mdW5jdGlvbihjKXt2YXIgZD1BcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7ZC5zaGlmdCgpO3ZhciBlO2lmKHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyksZj1iLmRhdGEoXCJkYXRlcGlja2VyXCIpLGc9XCJvYmplY3RcIj09dHlwZW9mIGMmJmM7aWYoIWYpe3ZhciBqPWgodGhpcyxcImRhdGVcIiksbT1hLmV4dGVuZCh7fSxvLGosZyksbj1pKG0ubGFuZ3VhZ2UpLHA9YS5leHRlbmQoe30sbyxuLGosZyk7Yi5oYXNDbGFzcyhcImlucHV0LWRhdGVyYW5nZVwiKXx8cC5pbnB1dHM/KGEuZXh0ZW5kKHAse2lucHV0czpwLmlucHV0c3x8Yi5maW5kKFwiaW5wdXRcIikudG9BcnJheSgpfSksZj1uZXcgbCh0aGlzLHApKTpmPW5ldyBrKHRoaXMscCksYi5kYXRhKFwiZGF0ZXBpY2tlclwiLGYpfVwic3RyaW5nXCI9PXR5cGVvZiBjJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBmW2NdJiYoZT1mW2NdLmFwcGx5KGYsZCkpfSksZT09PWJ8fGUgaW5zdGFuY2VvZiBrfHxlIGluc3RhbmNlb2YgbClyZXR1cm4gdGhpcztpZih0aGlzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcihcIlVzaW5nIG9ubHkgYWxsb3dlZCBmb3IgdGhlIGNvbGxlY3Rpb24gb2YgYSBzaW5nbGUgZWxlbWVudCAoXCIrYytcIiBmdW5jdGlvbilcIik7cmV0dXJuIGV9O2EuZm4uZGF0ZXBpY2tlcj1uO3ZhciBvPWEuZm4uZGF0ZXBpY2tlci5kZWZhdWx0cz17YXNzdW1lTmVhcmJ5WWVhcjohMSxhdXRvY2xvc2U6ITEsYmVmb3JlU2hvd0RheTphLm5vb3AsYmVmb3JlU2hvd01vbnRoOmEubm9vcCxiZWZvcmVTaG93WWVhcjphLm5vb3AsYmVmb3JlU2hvd0RlY2FkZTphLm5vb3AsYmVmb3JlU2hvd0NlbnR1cnk6YS5ub29wLGNhbGVuZGFyV2Vla3M6ITEsY2xlYXJCdG46ITEsdG9nZ2xlQWN0aXZlOiExLGRheXNPZldlZWtEaXNhYmxlZDpbXSxkYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQ6W10sZGF0ZXNEaXNhYmxlZDpbXSxlbmREYXRlOjEvMCxmb3JjZVBhcnNlOiEwLGZvcm1hdDpcIm1tL2RkL3l5eXlcIixrZWVwRW1wdHlWYWx1ZXM6ITEsa2V5Ym9hcmROYXZpZ2F0aW9uOiEwLGxhbmd1YWdlOlwiZW5cIixtaW5WaWV3TW9kZTowLG1heFZpZXdNb2RlOjQsbXVsdGlkYXRlOiExLG11bHRpZGF0ZVNlcGFyYXRvcjpcIixcIixvcmllbnRhdGlvbjpcImF1dG9cIixydGw6ITEsc3RhcnREYXRlOi0oMS8wKSxzdGFydFZpZXc6MCx0b2RheUJ0bjohMSx0b2RheUhpZ2hsaWdodDohMSx1cGRhdGVWaWV3RGF0ZTohMCx3ZWVrU3RhcnQ6MCxkaXNhYmxlVG91Y2hLZXlib2FyZDohMSxlbmFibGVPblJlYWRvbmx5OiEwLHNob3dPbkZvY3VzOiEwLHpJbmRleE9mZnNldDoxMCxjb250YWluZXI6XCJib2R5XCIsaW1tZWRpYXRlVXBkYXRlczohMSx0aXRsZTpcIlwiLHRlbXBsYXRlczp7bGVmdEFycm93OlwiJiN4MDBBQjtcIixyaWdodEFycm93OlwiJiN4MDBCQjtcIn0sc2hvd1dlZWtEYXlzOiEwfSxwPWEuZm4uZGF0ZXBpY2tlci5sb2NhbGVfb3B0cz1bXCJmb3JtYXRcIixcInJ0bFwiLFwid2Vla1N0YXJ0XCJdO2EuZm4uZGF0ZXBpY2tlci5Db25zdHJ1Y3Rvcj1rO3ZhciBxPWEuZm4uZGF0ZXBpY2tlci5kYXRlcz17ZW46e2RheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5c1Nob3J0OltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxkYXlzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLG1vbnRoczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhzU2hvcnQ6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXSx0b2RheTpcIlRvZGF5XCIsY2xlYXI6XCJDbGVhclwiLHRpdGxlRm9ybWF0OlwiTU0geXl5eVwifX0scj17dmlld01vZGVzOlt7bmFtZXM6W1wiZGF5c1wiLFwibW9udGhcIl0sY2xzTmFtZTpcImRheXNcIixlOlwiY2hhbmdlTW9udGhcIn0se25hbWVzOltcIm1vbnRoc1wiLFwieWVhclwiXSxjbHNOYW1lOlwibW9udGhzXCIsZTpcImNoYW5nZVllYXJcIixuYXZTdGVwOjF9LHtuYW1lczpbXCJ5ZWFyc1wiLFwiZGVjYWRlXCJdLGNsc05hbWU6XCJ5ZWFyc1wiLGU6XCJjaGFuZ2VEZWNhZGVcIixuYXZTdGVwOjEwfSx7bmFtZXM6W1wiZGVjYWRlc1wiLFwiY2VudHVyeVwiXSxjbHNOYW1lOlwiZGVjYWRlc1wiLGU6XCJjaGFuZ2VDZW50dXJ5XCIsbmF2U3RlcDoxMDB9LHtuYW1lczpbXCJjZW50dXJpZXNcIixcIm1pbGxlbm5pdW1cIl0sY2xzTmFtZTpcImNlbnR1cmllc1wiLGU6XCJjaGFuZ2VNaWxsZW5uaXVtXCIsbmF2U3RlcDoxZTN9XSx2YWxpZFBhcnRzOi9kZD98REQ/fG1tP3xNTT98eXkoPzp5eSk/L2csbm9ucHVuY3R1YXRpb246L1teIC1cXC86LUBcXHU1ZTc0XFx1NjcwOFxcdTY1ZTVcXFstYHstflxcdFxcblxccl0rL2cscGFyc2VGb3JtYXQ6ZnVuY3Rpb24oYSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYS50b1ZhbHVlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnRvRGlzcGxheSlyZXR1cm4gYTt2YXIgYj1hLnJlcGxhY2UodGhpcy52YWxpZFBhcnRzLFwiXFwwXCIpLnNwbGl0KFwiXFwwXCIpLGM9YS5tYXRjaCh0aGlzLnZhbGlkUGFydHMpO2lmKCFifHwhYi5sZW5ndGh8fCFjfHwwPT09Yy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIGZvcm1hdC5cIik7cmV0dXJue3NlcGFyYXRvcnM6YixwYXJ0czpjfX0scGFyc2VEYXRlOmZ1bmN0aW9uKGMsZSxmLGcpe2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYj09PSEwJiYoYj0xMCksYTwxMDAmJihhKz0yZTMsYT4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkrYiYmKGEtPTEwMCkpLGF9ZnVuY3Rpb24gaSgpe3ZhciBhPXRoaXMuc2xpY2UoMCxqW25dLmxlbmd0aCksYj1qW25dLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiBhLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9aWYoIWMpcmV0dXJuIGI7aWYoYyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXIucGFyc2VGb3JtYXQoZSkpLGUudG9WYWx1ZSlyZXR1cm4gZS50b1ZhbHVlKGMsZSxmKTt2YXIgaixsLG0sbixvLHA9e2Q6XCJtb3ZlRGF5XCIsbTpcIm1vdmVNb250aFwiLHc6XCJtb3ZlV2Vla1wiLHk6XCJtb3ZlWWVhclwifSxzPXt5ZXN0ZXJkYXk6XCItMWRcIix0b2RheTpcIiswZFwiLHRvbW9ycm93OlwiKzFkXCJ9O2lmKGMgaW4gcyYmKGM9c1tjXSksL15bXFwtK11cXGQrW2Rtd3ldKFtcXHMsXStbXFwtK11cXGQrW2Rtd3ldKSokL2kudGVzdChjKSl7Zm9yKGo9Yy5tYXRjaCgvKFtcXC0rXVxcZCspKFtkbXd5XSkvZ2kpLGM9bmV3IERhdGUsbj0wO248ai5sZW5ndGg7bisrKWw9altuXS5tYXRjaCgvKFtcXC0rXVxcZCspKFtkbXd5XSkvaSksbT1OdW1iZXIobFsxXSksbz1wW2xbMl0udG9Mb3dlckNhc2UoKV0sYz1rLnByb3RvdHlwZVtvXShjLG0pO3JldHVybiBrLnByb3RvdHlwZS5femVyb191dGNfdGltZShjKX1qPWMmJmMubWF0Y2godGhpcy5ub25wdW5jdHVhdGlvbil8fFtdO3ZhciB0LHUsdj17fSx3PVtcInl5eXlcIixcInl5XCIsXCJNXCIsXCJNTVwiLFwibVwiLFwibW1cIixcImRcIixcImRkXCJdLHg9e3l5eXk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zZXRVVENGdWxsWWVhcihnP2goYixnKTpiKX0sbTpmdW5jdGlvbihhLGIpe2lmKGlzTmFOKGEpKXJldHVybiBhO2ZvcihiLT0xO2I8MDspYis9MTI7Zm9yKGIlPTEyLGEuc2V0VVRDTW9udGgoYik7YS5nZXRVVENNb250aCgpIT09YjspYS5zZXRVVENEYXRlKGEuZ2V0VVRDRGF0ZSgpLTEpO3JldHVybiBhfSxkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc2V0VVRDRGF0ZShiKX19O3gueXk9eC55eXl5LHguTT14Lk1NPXgubW09eC5tLHguZGQ9eC5kLGM9ZCgpO3ZhciB5PWUucGFydHMuc2xpY2UoKTtpZihqLmxlbmd0aCE9PXkubGVuZ3RoJiYoeT1hKHkpLmZpbHRlcihmdW5jdGlvbihiLGMpe3JldHVybiBhLmluQXJyYXkoYyx3KSE9PS0xfSkudG9BcnJheSgpKSxqLmxlbmd0aD09PXkubGVuZ3RoKXt2YXIgejtmb3Iobj0wLHo9eS5sZW5ndGg7bjx6O24rKyl7aWYodD1wYXJzZUludChqW25dLDEwKSxsPXlbbl0saXNOYU4odCkpc3dpdGNoKGwpe2Nhc2VcIk1NXCI6dT1hKHFbZl0ubW9udGhzKS5maWx0ZXIoaSksdD1hLmluQXJyYXkodVswXSxxW2ZdLm1vbnRocykrMTticmVhaztjYXNlXCJNXCI6dT1hKHFbZl0ubW9udGhzU2hvcnQpLmZpbHRlcihpKSx0PWEuaW5BcnJheSh1WzBdLHFbZl0ubW9udGhzU2hvcnQpKzF9dltsXT10fXZhciBBLEI7Zm9yKG49MDtuPHcubGVuZ3RoO24rKylCPXdbbl0sQiBpbiB2JiYhaXNOYU4odltCXSkmJihBPW5ldyBEYXRlKGMpLHhbQl0oQSx2W0JdKSxpc05hTihBKXx8KGM9QSkpfXJldHVybiBjfSxmb3JtYXREYXRlOmZ1bmN0aW9uKGIsYyxkKXtpZighYilyZXR1cm5cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBjJiYoYz1yLnBhcnNlRm9ybWF0KGMpKSxjLnRvRGlzcGxheSlyZXR1cm4gYy50b0Rpc3BsYXkoYixjLGQpO3ZhciBlPXtkOmIuZ2V0VVRDRGF0ZSgpLEQ6cVtkXS5kYXlzU2hvcnRbYi5nZXRVVENEYXkoKV0sREQ6cVtkXS5kYXlzW2IuZ2V0VVRDRGF5KCldLG06Yi5nZXRVVENNb250aCgpKzEsTTpxW2RdLm1vbnRoc1Nob3J0W2IuZ2V0VVRDTW9udGgoKV0sTU06cVtkXS5tb250aHNbYi5nZXRVVENNb250aCgpXSx5eTpiLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMikseXl5eTpiLmdldFVUQ0Z1bGxZZWFyKCl9O2UuZGQ9KGUuZDwxMD9cIjBcIjpcIlwiKStlLmQsZS5tbT0oZS5tPDEwP1wiMFwiOlwiXCIpK2UubSxiPVtdO2Zvcih2YXIgZj1hLmV4dGVuZChbXSxjLnNlcGFyYXRvcnMpLGc9MCxoPWMucGFydHMubGVuZ3RoO2c8PWg7ZysrKWYubGVuZ3RoJiZiLnB1c2goZi5zaGlmdCgpKSxiLnB1c2goZVtjLnBhcnRzW2ddXSk7cmV0dXJuIGIuam9pbihcIlwiKX0saGVhZFRlbXBsYXRlOic8dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPVwiN1wiIGNsYXNzPVwiZGF0ZXBpY2tlci10aXRsZVwiPjwvdGg+PC90cj48dHI+PHRoIGNsYXNzPVwicHJldlwiPicrby50ZW1wbGF0ZXMubGVmdEFycm93Kyc8L3RoPjx0aCBjb2xzcGFuPVwiNVwiIGNsYXNzPVwiZGF0ZXBpY2tlci1zd2l0Y2hcIj48L3RoPjx0aCBjbGFzcz1cIm5leHRcIj4nK28udGVtcGxhdGVzLnJpZ2h0QXJyb3crXCI8L3RoPjwvdHI+PC90aGVhZD5cIixcbmNvbnRUZW1wbGF0ZTonPHRib2R5Pjx0cj48dGQgY29sc3Bhbj1cIjdcIj48L3RkPjwvdHI+PC90Ym9keT4nLGZvb3RUZW1wbGF0ZTonPHRmb290Pjx0cj48dGggY29sc3Bhbj1cIjdcIiBjbGFzcz1cInRvZGF5XCI+PC90aD48L3RyPjx0cj48dGggY29sc3Bhbj1cIjdcIiBjbGFzcz1cImNsZWFyXCI+PC90aD48L3RyPjwvdGZvb3Q+J307ci50ZW1wbGF0ZT0nPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJcIj48ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1kYXlzXCI+PHRhYmxlIGNsYXNzPVwidGFibGUtY29uZGVuc2VkXCI+JytyLmhlYWRUZW1wbGF0ZStcIjx0Ym9keT48L3Rib2R5PlwiK3IuZm9vdFRlbXBsYXRlKyc8L3RhYmxlPjwvZGl2PjxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLW1vbnRoc1wiPjx0YWJsZSBjbGFzcz1cInRhYmxlLWNvbmRlbnNlZFwiPicrci5oZWFkVGVtcGxhdGUrci5jb250VGVtcGxhdGUrci5mb290VGVtcGxhdGUrJzwvdGFibGU+PC9kaXY+PGRpdiBjbGFzcz1cImRhdGVwaWNrZXIteWVhcnNcIj48dGFibGUgY2xhc3M9XCJ0YWJsZS1jb25kZW5zZWRcIj4nK3IuaGVhZFRlbXBsYXRlK3IuY29udFRlbXBsYXRlK3IuZm9vdFRlbXBsYXRlKyc8L3RhYmxlPjwvZGl2PjxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWRlY2FkZXNcIj48dGFibGUgY2xhc3M9XCJ0YWJsZS1jb25kZW5zZWRcIj4nK3IuaGVhZFRlbXBsYXRlK3IuY29udFRlbXBsYXRlK3IuZm9vdFRlbXBsYXRlKyc8L3RhYmxlPjwvZGl2PjxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNlbnR1cmllc1wiPjx0YWJsZSBjbGFzcz1cInRhYmxlLWNvbmRlbnNlZFwiPicrci5oZWFkVGVtcGxhdGUrci5jb250VGVtcGxhdGUrci5mb290VGVtcGxhdGUrXCI8L3RhYmxlPjwvZGl2PjwvZGl2PlwiLGEuZm4uZGF0ZXBpY2tlci5EUEdsb2JhbD1yLGEuZm4uZGF0ZXBpY2tlci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZGF0ZXBpY2tlcj1tLHRoaXN9LGEuZm4uZGF0ZXBpY2tlci52ZXJzaW9uPVwiMS43LjFcIixhLmZuLmRhdGVwaWNrZXIuZGVwcmVjYXRlZD1mdW5jdGlvbihhKXt2YXIgYj13aW5kb3cuY29uc29sZTtiJiZiLndhcm4mJmIud2FybihcIkRFUFJFQ0FURUQ6IFwiK2EpfSxhKGRvY3VtZW50KS5vbihcImZvY3VzLmRhdGVwaWNrZXIuZGF0YS1hcGkgY2xpY2suZGF0ZXBpY2tlci5kYXRhLWFwaVwiLCdbZGF0YS1wcm92aWRlPVwiZGF0ZXBpY2tlclwiXScsZnVuY3Rpb24oYil7dmFyIGM9YSh0aGlzKTtjLmRhdGEoXCJkYXRlcGlja2VyXCIpfHwoYi5wcmV2ZW50RGVmYXVsdCgpLG4uY2FsbChjLFwic2hvd1wiKSl9KSxhKGZ1bmN0aW9uKCl7bi5jYWxsKGEoJ1tkYXRhLXByb3ZpZGU9XCJkYXRlcGlja2VyLWlubGluZVwiXScpKX0pfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1kYXRlcGlja2VyL2Rpc3QvanMvYm9vdHN0cmFwLWRhdGVwaWNrZXIubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA1OVxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n"); +eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * jVectorMap version 1.2.2\n *\n * Copyright 2011-2013, Kirill Lebedev\n * Licensed under the MIT license.\n *\n */(function (e) {\n var t = { set: { colors: 1, values: 1, backgroundColor: 1, scaleColors: 1, normalizeFunction: 1, focus: 1 }, get: { selectedRegions: 1, selectedMarkers: 1, mapObject: 1, regionName: 1 } };e.fn.vectorMap = function (e) {\n var n,\n r,\n i,\n n = this.children(\".jvectormap-container\").data(\"mapObject\");if (e === \"addMap\") jvm.WorldMap.maps[arguments[1]] = arguments[2];else {\n if (!(e !== \"set\" && e !== \"get\" || !t[e][arguments[1]])) return r = arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1), n[e + r].apply(n, Array.prototype.slice.call(arguments, 2));e = e || {}, e.container = this, n = new jvm.WorldMap(e);\n }return this;\n };\n})(jQuery), function (e) {\n function r(t) {\n var n = t || window.event,\n r = [].slice.call(arguments, 1),\n i = 0,\n s = !0,\n o = 0,\n u = 0;return t = e.event.fix(n), t.type = \"mousewheel\", n.wheelDelta && (i = n.wheelDelta / 120), n.detail && (i = -n.detail / 3), u = i, n.axis !== undefined && n.axis === n.HORIZONTAL_AXIS && (u = 0, o = -1 * i), n.wheelDeltaY !== undefined && (u = n.wheelDeltaY / 120), n.wheelDeltaX !== undefined && (o = -1 * n.wheelDeltaX / 120), r.unshift(t, i, o, u), (e.event.dispatch || e.event.handle).apply(this, r);\n }var t = [\"DOMMouseScroll\", \"mousewheel\"];if (e.event.fixHooks) for (var n = t.length; n;) {\n e.event.fixHooks[t[--n]] = e.event.mouseHooks;\n }e.event.special.mousewheel = { setup: function setup() {\n if (this.addEventListener) for (var e = t.length; e;) {\n this.addEventListener(t[--e], r, !1);\n } else this.onmousewheel = r;\n }, teardown: function teardown() {\n if (this.removeEventListener) for (var e = t.length; e;) {\n this.removeEventListener(t[--e], r, !1);\n } else this.onmousewheel = null;\n } }, e.fn.extend({ mousewheel: function mousewheel(e) {\n return e ? this.bind(\"mousewheel\", e) : this.trigger(\"mousewheel\");\n }, unmousewheel: function unmousewheel(e) {\n return this.unbind(\"mousewheel\", e);\n } });\n}(jQuery);var jvm = { inherits: function inherits(e, t) {\n function n() {}n.prototype = t.prototype, e.prototype = new n(), e.prototype.constructor = e, e.parentClass = t;\n }, mixin: function mixin(e, t) {\n var n;for (n in t.prototype) {\n t.prototype.hasOwnProperty(n) && (e.prototype[n] = t.prototype[n]);\n }\n }, min: function min(e) {\n var t = Number.MAX_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] < t && (t = e[n]);\n } else for (n in e) {\n e[n] < t && (t = e[n]);\n }return t;\n }, max: function max(e) {\n var t = Number.MIN_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] > t && (t = e[n]);\n } else for (n in e) {\n e[n] > t && (t = e[n]);\n }return t;\n }, keys: function keys(e) {\n var t = [],\n n;for (n in e) {\n t.push(n);\n }return t;\n }, values: function values(e) {\n var t = [],\n n,\n r;for (r = 0; r < arguments.length; r++) {\n e = arguments[r];for (n in e) {\n t.push(e[n]);\n }\n }return t;\n } };jvm.$ = jQuery, jvm.AbstractElement = function (e, t) {\n this.node = this.createElement(e), this.name = e, this.properties = {}, t && this.set(t);\n}, jvm.AbstractElement.prototype.set = function (e, t) {\n var n;if ((typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\") for (n in e) {\n this.properties[n] = e[n], this.applyAttr(n, e[n]);\n } else this.properties[e] = t, this.applyAttr(e, t);\n}, jvm.AbstractElement.prototype.get = function (e) {\n return this.properties[e];\n}, jvm.AbstractElement.prototype.applyAttr = function (e, t) {\n this.node.setAttribute(e, t);\n}, jvm.AbstractElement.prototype.remove = function () {\n jvm.$(this.node).remove();\n}, jvm.AbstractCanvasElement = function (e, t, n) {\n this.container = e, this.setSize(t, n), this.rootElement = new jvm[this.classPrefix + \"GroupElement\"](), this.node.appendChild(this.rootElement.node), this.container.appendChild(this.node);\n}, jvm.AbstractCanvasElement.prototype.add = function (e, t) {\n t = t || this.rootElement, t.add(e), e.canvas = this;\n}, jvm.AbstractCanvasElement.prototype.addPath = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"PathElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addCircle = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"CircleElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addGroup = function (e) {\n var t = new jvm[this.classPrefix + \"GroupElement\"]();return e ? e.node.appendChild(t.node) : this.node.appendChild(t.node), t.canvas = this, t;\n}, jvm.AbstractShapeElement = function (e, t, n) {\n this.style = n || {}, this.style.current = {}, this.isHovered = !1, this.isSelected = !1, this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.setHovered = function (e) {\n this.isHovered !== e && (this.isHovered = e, this.updateStyle());\n}, jvm.AbstractShapeElement.prototype.setSelected = function (e) {\n this.isSelected !== e && (this.isSelected = e, this.updateStyle(), jvm.$(this.node).trigger(\"selected\", [e]));\n}, jvm.AbstractShapeElement.prototype.setStyle = function (e, t) {\n var n = {};(typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\" ? n = e : n[e] = t, jvm.$.extend(this.style.current, n), this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.updateStyle = function () {\n var e = {};jvm.AbstractShapeElement.mergeStyles(e, this.style.initial), jvm.AbstractShapeElement.mergeStyles(e, this.style.current), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.hover), this.isSelected && (jvm.AbstractShapeElement.mergeStyles(e, this.style.selected), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.selectedHover)), this.set(e);\n}, jvm.AbstractShapeElement.mergeStyles = function (e, t) {\n var n;t = t || {};for (n in t) {\n t[n] === null ? delete e[n] : e[n] = t[n];\n }\n}, jvm.SVGElement = function (e, t) {\n jvm.SVGElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.SVGElement, jvm.AbstractElement), jvm.SVGElement.svgns = \"http://www.w3.org/2000/svg\", jvm.SVGElement.prototype.createElement = function (e) {\n return document.createElementNS(jvm.SVGElement.svgns, e);\n}, jvm.SVGElement.prototype.addClass = function (e) {\n this.node.setAttribute(\"class\", e);\n}, jvm.SVGElement.prototype.getElementCtr = function (e) {\n return jvm[\"SVG\" + e];\n}, jvm.SVGElement.prototype.getBBox = function () {\n return this.node.getBBox();\n}, jvm.SVGGroupElement = function () {\n jvm.SVGGroupElement.parentClass.call(this, \"g\");\n}, jvm.inherits(jvm.SVGGroupElement, jvm.SVGElement), jvm.SVGGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.SVGCanvasElement = function (e, t, n) {\n this.classPrefix = \"SVG\", jvm.SVGCanvasElement.parentClass.call(this, \"svg\"), jvm.AbstractCanvasElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGCanvasElement, jvm.SVGElement), jvm.mixin(jvm.SVGCanvasElement, jvm.AbstractCanvasElement), jvm.SVGCanvasElement.prototype.setSize = function (e, t) {\n this.width = e, this.height = t, this.node.setAttribute(\"width\", e), this.node.setAttribute(\"height\", t);\n}, jvm.SVGCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.setAttribute(\"transform\", \"scale(\" + e + \") translate(\" + t + \", \" + n + \")\");\n}, jvm.SVGShapeElement = function (e, t, n) {\n jvm.SVGShapeElement.parentClass.call(this, e, t), jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGShapeElement, jvm.SVGElement), jvm.mixin(jvm.SVGShapeElement, jvm.AbstractShapeElement), jvm.SVGPathElement = function (e, t) {\n jvm.SVGPathElement.parentClass.call(this, \"path\", e, t), this.node.setAttribute(\"fill-rule\", \"evenodd\");\n}, jvm.inherits(jvm.SVGPathElement, jvm.SVGShapeElement), jvm.SVGCircleElement = function (e, t) {\n jvm.SVGCircleElement.parentClass.call(this, \"circle\", e, t);\n}, jvm.inherits(jvm.SVGCircleElement, jvm.SVGShapeElement), jvm.VMLElement = function (e, t) {\n jvm.VMLElement.VMLInitialized || jvm.VMLElement.initializeVML(), jvm.VMLElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.VMLElement, jvm.AbstractElement), jvm.VMLElement.VMLInitialized = !1, jvm.VMLElement.initializeVML = function () {\n try {\n document.namespaces.rvml || document.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\"), jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<rvml:\" + e + ' class=\"rvml\">');\n };\n } catch (e) {\n jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<\" + e + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n };\n }document.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\"), jvm.VMLElement.VMLInitialized = !0;\n}, jvm.VMLElement.prototype.getElementCtr = function (e) {\n return jvm[\"VML\" + e];\n}, jvm.VMLElement.prototype.addClass = function (e) {\n jvm.$(this.node).addClass(e);\n}, jvm.VMLElement.prototype.applyAttr = function (e, t) {\n this.node[e] = t;\n}, jvm.VMLElement.prototype.getBBox = function () {\n var e = jvm.$(this.node);return { x: e.position().left / this.canvas.scale, y: e.position().top / this.canvas.scale, width: e.width() / this.canvas.scale, height: e.height() / this.canvas.scale };\n}, jvm.VMLGroupElement = function () {\n jvm.VMLGroupElement.parentClass.call(this, \"group\"), this.node.style.left = \"0px\", this.node.style.top = \"0px\", this.node.coordorigin = \"0 0\";\n}, jvm.inherits(jvm.VMLGroupElement, jvm.VMLElement), jvm.VMLGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.VMLCanvasElement = function (e, t, n) {\n this.classPrefix = \"VML\", jvm.VMLCanvasElement.parentClass.call(this, \"group\"), jvm.AbstractCanvasElement.apply(this, arguments), this.node.style.position = \"absolute\";\n}, jvm.inherits(jvm.VMLCanvasElement, jvm.VMLElement), jvm.mixin(jvm.VMLCanvasElement, jvm.AbstractCanvasElement), jvm.VMLCanvasElement.prototype.setSize = function (e, t) {\n var n, r, i, s;this.width = e, this.height = t, this.node.style.width = e + \"px\", this.node.style.height = t + \"px\", this.node.coordsize = e + \" \" + t, this.node.coordorigin = \"0 0\";if (this.rootElement) {\n n = this.rootElement.node.getElementsByTagName(\"shape\");for (i = 0, s = n.length; i < s; i++) {\n n[i].coordsize = e + \" \" + t, n[i].style.width = e + \"px\", n[i].style.height = t + \"px\";\n }r = this.node.getElementsByTagName(\"group\");for (i = 0, s = r.length; i < s; i++) {\n r[i].coordsize = e + \" \" + t, r[i].style.width = e + \"px\", r[i].style.height = t + \"px\";\n }\n }\n}, jvm.VMLCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.coordorigin = this.width - t - this.width / 100 + \",\" + (this.height - n - this.height / 100), this.rootElement.node.coordsize = this.width / e + \",\" + this.height / e;\n}, jvm.VMLShapeElement = function (e, t) {\n jvm.VMLShapeElement.parentClass.call(this, e, t), this.fillElement = new jvm.VMLElement(\"fill\"), this.strokeElement = new jvm.VMLElement(\"stroke\"), this.node.appendChild(this.fillElement.node), this.node.appendChild(this.strokeElement.node), this.node.stroked = !1, jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.VMLShapeElement, jvm.VMLElement), jvm.mixin(jvm.VMLShapeElement, jvm.AbstractShapeElement), jvm.VMLShapeElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"fill\":\n this.node.fillcolor = t;break;case \"fill-opacity\":\n this.fillElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke\":\n t === \"none\" ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokecolor = t;break;case \"stroke-opacity\":\n this.strokeElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke-width\":\n parseInt(t, 10) === 0 ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokeweight = t;break;case \"d\":\n this.node.path = jvm.VMLPathElement.pathSvgToVml(t);break;default:\n jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this, arguments);}\n}, jvm.VMLPathElement = function (e, t) {\n var n = new jvm.VMLElement(\"skew\");jvm.VMLPathElement.parentClass.call(this, \"shape\", e, t), this.node.coordorigin = \"0 0\", n.node.on = !0, n.node.matrix = \"0.01,0,0,0.01,0,0\", n.node.offset = \"0,0\", this.node.appendChild(n.node);\n}, jvm.inherits(jvm.VMLPathElement, jvm.VMLShapeElement), jvm.VMLPathElement.prototype.applyAttr = function (e, t) {\n e === \"d\" ? this.node.path = jvm.VMLPathElement.pathSvgToVml(t) : jvm.VMLShapeElement.prototype.applyAttr.call(this, e, t);\n}, jvm.VMLPathElement.pathSvgToVml = function (e) {\n var t = \"\",\n n = 0,\n r = 0,\n i,\n s;return e = e.replace(/(-?\\d+)e(-?\\d+)/g, \"0\"), e.replace(/([MmLlHhVvCcSs])\\s*((?:-?\\d*(?:\\.\\d+)?\\s*,?\\s*)+)/g, function (e, t, o, u) {\n o = o.replace(/(\\d)-/g, \"$1,-\").replace(/^\\s+/g, \"\").replace(/\\s+$/g, \"\").replace(/\\s+/g, \",\").split(\",\"), o[0] || o.shift();for (var a = 0, f = o.length; a < f; a++) {\n o[a] = Math.round(100 * o[a]);\n }switch (t) {case \"m\":\n return n += o[0], r += o[1], \"t\" + o.join(\",\");case \"M\":\n return n = o[0], r = o[1], \"m\" + o.join(\",\");case \"l\":\n return n += o[0], r += o[1], \"r\" + o.join(\",\");case \"L\":\n return n = o[0], r = o[1], \"l\" + o.join(\",\");case \"h\":\n return n += o[0], \"r\" + o[0] + \",0\";case \"H\":\n return n = o[0], \"l\" + n + \",\" + r;case \"v\":\n return r += o[0], \"r0,\" + o[0];case \"V\":\n return r = o[0], \"l\" + n + \",\" + r;case \"c\":\n return i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"C\":\n return i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");case \"s\":\n return o.unshift(r - s), o.unshift(n - i), i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"S\":\n return o.unshift(r + r - s), o.unshift(n + n - i), i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");}return \"\";\n }).replace(/z/g, \"e\");\n}, jvm.VMLCircleElement = function (e, t) {\n jvm.VMLCircleElement.parentClass.call(this, \"oval\", e, t);\n}, jvm.inherits(jvm.VMLCircleElement, jvm.VMLShapeElement), jvm.VMLCircleElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"r\":\n this.node.style.width = t * 2 + \"px\", this.node.style.height = t * 2 + \"px\", this.applyAttr(\"cx\", this.get(\"cx\") || 0), this.applyAttr(\"cy\", this.get(\"cy\") || 0);break;case \"cx\":\n if (!t) return;this.node.style.left = t - (this.get(\"r\") || 0) + \"px\";break;case \"cy\":\n if (!t) return;this.node.style.top = t - (this.get(\"r\") || 0) + \"px\";break;default:\n jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this, e, t);}\n}, jvm.VectorCanvas = function (e, t, n) {\n return this.mode = window.SVGAngle ? \"svg\" : \"vml\", this.mode == \"svg\" ? this.impl = new jvm.SVGCanvasElement(e, t, n) : this.impl = new jvm.VMLCanvasElement(e, t, n), this.impl;\n}, jvm.SimpleScale = function (e) {\n this.scale = e;\n}, jvm.SimpleScale.prototype.getValue = function (e) {\n return e;\n}, jvm.OrdinalScale = function (e) {\n this.scale = e;\n}, jvm.OrdinalScale.prototype.getValue = function (e) {\n return this.scale[e];\n}, jvm.NumericScale = function (e, t, n, r) {\n this.scale = [], t = t || \"linear\", e && this.setScale(e), t && this.setNormalizeFunction(t), n && this.setMin(n), r && this.setMax(r);\n}, jvm.NumericScale.prototype = { setMin: function setMin(e) {\n this.clearMinValue = e, typeof this.normalize == \"function\" ? this.minValue = this.normalize(e) : this.minValue = e;\n }, setMax: function setMax(e) {\n this.clearMaxValue = e, typeof this.normalize == \"function\" ? this.maxValue = this.normalize(e) : this.maxValue = e;\n }, setScale: function setScale(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = [e[t]];\n }\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n e === \"polynomial\" ? this.normalize = function (e) {\n return Math.pow(e, .2);\n } : e === \"linear\" ? delete this.normalize : this.normalize = e, this.setMin(this.clearMinValue), this.setMax(this.clearMaxValue);\n }, getValue: function getValue(e) {\n var t = [],\n n = 0,\n r,\n i = 0,\n s;typeof this.normalize == \"function\" && (e = this.normalize(e));for (i = 0; i < this.scale.length - 1; i++) {\n r = this.vectorLength(this.vectorSubtract(this.scale[i + 1], this.scale[i])), t.push(r), n += r;\n }s = (this.maxValue - this.minValue) / n;for (i = 0; i < t.length; i++) {\n t[i] *= s;\n }i = 0, e -= this.minValue;while (e - t[i] >= 0) {\n e -= t[i], i++;\n }return i == this.scale.length - 1 ? e = this.vectorToNum(this.scale[i]) : e = this.vectorToNum(this.vectorAdd(this.scale[i], this.vectorMult(this.vectorSubtract(this.scale[i + 1], this.scale[i]), e / t[i]))), e;\n }, vectorToNum: function vectorToNum(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += Math.round(e[n]) * Math.pow(256, e.length - n - 1);\n }return t;\n }, vectorSubtract: function vectorSubtract(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] - t[r];\n }return n;\n }, vectorAdd: function vectorAdd(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] + t[r];\n }return n;\n }, vectorMult: function vectorMult(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] * t;\n }return n;\n }, vectorLength: function vectorLength(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += e[n] * e[n];\n }return Math.sqrt(t);\n } }, jvm.ColorScale = function (e, t, n, r) {\n jvm.ColorScale.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.ColorScale, jvm.NumericScale), jvm.ColorScale.prototype.setScale = function (e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = jvm.ColorScale.rgbToArray(e[t]);\n }\n}, jvm.ColorScale.prototype.getValue = function (e) {\n return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this, e));\n}, jvm.ColorScale.arrayToRgb = function (e) {\n var t = \"#\",\n n,\n r;for (r = 0; r < e.length; r++) {\n n = e[r].toString(16), t += n.length == 1 ? \"0\" + n : n;\n }return t;\n}, jvm.ColorScale.numToRgb = function (e) {\n e = e.toString(16);while (e.length < 6) {\n e = \"0\" + e;\n }return \"#\" + e;\n}, jvm.ColorScale.rgbToArray = function (e) {\n return e = e.substr(1), [parseInt(e.substr(0, 2), 16), parseInt(e.substr(2, 2), 16), parseInt(e.substr(4, 2), 16)];\n}, jvm.DataSeries = function (e, t) {\n var n;e = e || {}, e.attribute = e.attribute || \"fill\", this.elements = t, this.params = e, e.attributes && this.setAttributes(e.attributes), jvm.$.isArray(e.scale) ? (n = e.attribute === \"fill\" || e.attribute === \"stroke\" ? jvm.ColorScale : jvm.NumericScale, this.scale = new n(e.scale, e.normalizeFunction, e.min, e.max)) : e.scale ? this.scale = new jvm.OrdinalScale(e.scale) : this.scale = new jvm.SimpleScale(e.scale), this.values = e.values || {}, this.setValues(this.values);\n}, jvm.DataSeries.prototype = { setAttributes: function setAttributes(e, t) {\n var n = e,\n r;if (typeof e == \"string\") this.elements[e] && this.elements[e].setStyle(this.params.attribute, t);else for (r in n) {\n this.elements[r] && this.elements[r].element.setStyle(this.params.attribute, n[r]);\n }\n }, setValues: function setValues(e) {\n var t = Number.MIN_VALUE,\n n = Number.MAX_VALUE,\n r,\n i,\n s = {};if (this.scale instanceof jvm.OrdinalScale || this.scale instanceof jvm.SimpleScale) for (i in e) {\n e[i] ? s[i] = this.scale.getValue(e[i]) : s[i] = this.elements[i].element.style.initial[this.params.attribute];\n } else {\n if (!this.params.min || !this.params.max) {\n for (i in e) {\n r = parseFloat(e[i]), r > t && (t = e[i]), r < n && (n = r);\n }this.params.min || this.scale.setMin(n), this.params.max || this.scale.setMax(t), this.params.min = n, this.params.max = t;\n }for (i in e) {\n r = parseFloat(e[i]), isNaN(r) ? s[i] = this.elements[i].element.style.initial[this.params.attribute] : s[i] = this.scale.getValue(r);\n }\n }this.setAttributes(s), jvm.$.extend(this.values, e);\n }, clear: function clear() {\n var e,\n t = {};for (e in this.values) {\n this.elements[e] && (t[e] = this.elements[e].element.style.initial[this.params.attribute]);\n }this.setAttributes(t), this.values = {};\n }, setScale: function setScale(e) {\n this.scale.setScale(e), this.values && this.setValues(this.values);\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n this.scale.setNormalizeFunction(e), this.values && this.setValues(this.values);\n } }, jvm.Proj = { degRad: 180 / Math.PI, radDeg: Math.PI / 180, radius: 6381372, sgn: function sgn(e) {\n return e > 0 ? 1 : e < 0 ? -1 : e;\n }, mill: function mill(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan((45 + .4 * e) * this.radDeg)) / .8 };\n }, mill_inv: function mill_inv(e, t, n) {\n return { lat: (2.5 * Math.atan(Math.exp(.8 * t / this.radius)) - 5 * Math.PI / 8) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, merc: function merc(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan(Math.PI / 4 + e * Math.PI / 360)) };\n }, merc_inv: function merc_inv(e, t, n) {\n return { lat: (2 * Math.atan(Math.exp(t / this.radius)) - Math.PI / 2) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, aea: function aea(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = 29.5 * this.radDeg,\n o = 45.5 * this.radDeg,\n u = e * this.radDeg,\n a = t * this.radDeg,\n f = (Math.sin(s) + Math.sin(o)) / 2,\n l = Math.cos(s) * Math.cos(s) + 2 * f * Math.sin(s),\n c = f * (a - i),\n h = Math.sqrt(l - 2 * f * Math.sin(u)) / f,\n p = Math.sqrt(l - 2 * f * Math.sin(r)) / f;return { x: h * Math.sin(c) * this.radius, y: -(p - h * Math.cos(c)) * this.radius };\n }, aea_inv: function aea_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 29.5 * this.radDeg,\n a = 45.5 * this.radDeg,\n f = (Math.sin(u) + Math.sin(a)) / 2,\n l = Math.cos(u) * Math.cos(u) + 2 * f * Math.sin(u),\n c = Math.sqrt(l - 2 * f * Math.sin(s)) / f,\n h = Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: Math.asin((l - h * h * f * f) / (2 * f)) * this.degRad, lng: (o + p / f) * this.degRad };\n }, lcc: function lcc(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = t * this.radDeg,\n o = 33 * this.radDeg,\n u = 45 * this.radDeg,\n a = e * this.radDeg,\n f = Math.log(Math.cos(o) * (1 / Math.cos(u))) / Math.log(Math.tan(Math.PI / 4 + u / 2) * (1 / Math.tan(Math.PI / 4 + o / 2))),\n l = Math.cos(o) * Math.pow(Math.tan(Math.PI / 4 + o / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + a / 2), f),\n h = l * Math.pow(1 / Math.tan(Math.PI / 4 + r / 2), f);return { x: c * Math.sin(f * (s - i)) * this.radius, y: -(h - c * Math.cos(f * (s - i))) * this.radius };\n }, lcc_inv: function lcc_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 33 * this.radDeg,\n a = 45 * this.radDeg,\n f = Math.log(Math.cos(u) * (1 / Math.cos(a))) / Math.log(Math.tan(Math.PI / 4 + a / 2) * (1 / Math.tan(Math.PI / 4 + u / 2))),\n l = Math.cos(u) * Math.pow(Math.tan(Math.PI / 4 + u / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + s / 2), f),\n h = this.sgn(f) * Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: (2 * Math.atan(Math.pow(l / h, 1 / f)) - Math.PI / 2) * this.degRad, lng: (o + p / f) * this.degRad };\n } }, jvm.WorldMap = function (e) {\n var t = this,\n n;this.params = jvm.$.extend(!0, {}, jvm.WorldMap.defaultParams, e);if (!jvm.WorldMap.maps[this.params.map]) throw new Error(\"Attempt to use map which was not loaded: \" + this.params.map);this.mapData = jvm.WorldMap.maps[this.params.map], this.markers = {}, this.regions = {}, this.regionsColors = {}, this.regionsData = {}, this.container = jvm.$(\"<div>\").css({ width: \"100%\", height: \"100%\" }).addClass(\"jvectormap-container\"), this.params.container.append(this.container), this.container.data(\"mapObject\", this), this.container.css({ position: \"relative\", overflow: \"hidden\" }), this.defaultWidth = this.mapData.width, this.defaultHeight = this.mapData.height, this.setBackgroundColor(this.params.backgroundColor), this.onResize = function () {\n t.setSize();\n }, jvm.$(window).resize(this.onResize);for (n in jvm.WorldMap.apiEvents) {\n this.params[n] && this.container.bind(jvm.WorldMap.apiEvents[n] + \".jvectormap\", this.params[n]);\n }this.canvas = new jvm.VectorCanvas(this.container[0], this.width, this.height), \"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch ? this.params.bindTouchEvents && this.bindContainerTouchEvents() : this.bindContainerEvents(), this.bindElementEvents(), this.createLabel(), this.params.zoomButtons && this.bindZoomButtons(), this.createRegions(), this.createMarkers(this.params.markers || {}), this.setSize(), this.params.focusOn && (_typeof(this.params.focusOn) == \"object\" ? this.setFocus.call(this, this.params.focusOn.scale, this.params.focusOn.x, this.params.focusOn.y) : this.setFocus.call(this, this.params.focusOn)), this.params.selectedRegions && this.setSelectedRegions(this.params.selectedRegions), this.params.selectedMarkers && this.setSelectedMarkers(this.params.selectedMarkers), this.params.series && this.createSeries();\n}, jvm.WorldMap.prototype = { transX: 0, transY: 0, scale: 1, baseTransX: 0, baseTransY: 0, baseScale: 1, width: 0, height: 0, setBackgroundColor: function setBackgroundColor(e) {\n this.container.css(\"background-color\", e);\n }, resize: function resize() {\n var e = this.baseScale;this.width / this.height > this.defaultWidth / this.defaultHeight ? (this.baseScale = this.height / this.defaultHeight, this.baseTransX = Math.abs(this.width - this.defaultWidth * this.baseScale) / (2 * this.baseScale)) : (this.baseScale = this.width / this.defaultWidth, this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale)), this.scale *= this.baseScale / e, this.transX *= this.baseScale / e, this.transY *= this.baseScale / e;\n }, setSize: function setSize() {\n this.width = this.container.width(), this.height = this.container.height(), this.resize(), this.canvas.setSize(this.width, this.height), this.applyTransform();\n }, reset: function reset() {\n var e, t;for (e in this.series) {\n for (t = 0; t < this.series[e].length; t++) {\n this.series[e][t].clear();\n }\n }this.scale = this.baseScale, this.transX = this.baseTransX, this.transY = this.baseTransY, this.applyTransform();\n }, applyTransform: function applyTransform() {\n var e, t, n, r;this.defaultWidth * this.scale <= this.width ? (e = (this.width - this.defaultWidth * this.scale) / (2 * this.scale), n = (this.width - this.defaultWidth * this.scale) / (2 * this.scale)) : (e = 0, n = (this.width - this.defaultWidth * this.scale) / this.scale), this.defaultHeight * this.scale <= this.height ? (t = (this.height - this.defaultHeight * this.scale) / (2 * this.scale), r = (this.height - this.defaultHeight * this.scale) / (2 * this.scale)) : (t = 0, r = (this.height - this.defaultHeight * this.scale) / this.scale), this.transY > t ? this.transY = t : this.transY < r && (this.transY = r), this.transX > e ? this.transX = e : this.transX < n && (this.transX = n), this.canvas.applyTransformParams(this.scale, this.transX, this.transY), this.markers && this.repositionMarkers(), this.container.trigger(\"viewportChange\", [this.scale / this.baseScale, this.transX, this.transY]);\n }, bindContainerEvents: function bindContainerEvents() {\n var e = !1,\n t,\n n,\n r = this;this.container.mousemove(function (i) {\n return e && (r.transX -= (t - i.pageX) / r.scale, r.transY -= (n - i.pageY) / r.scale, r.applyTransform(), t = i.pageX, n = i.pageY), !1;\n }).mousedown(function (r) {\n return e = !0, t = r.pageX, n = r.pageY, !1;\n }), jvm.$(\"body\").mouseup(function () {\n e = !1;\n }), this.params.zoomOnScroll && this.container.mousewheel(function (e, t, n, i) {\n var s = jvm.$(r.container).offset(),\n o = e.pageX - s.left,\n u = e.pageY - s.top,\n a = Math.pow(1.3, i);r.label.hide(), r.setScale(r.scale * a, o, u), e.preventDefault();\n });\n }, bindContainerTouchEvents: function bindContainerTouchEvents() {\n var e,\n t,\n n = this,\n r,\n i,\n s,\n o,\n u,\n a = function a(_a) {\n var f = _a.originalEvent.touches,\n l,\n c,\n h,\n p;_a.type == \"touchstart\" && (u = 0), f.length == 1 ? (u == 1 && (h = n.transX, p = n.transY, n.transX -= (r - f[0].pageX) / n.scale, n.transY -= (i - f[0].pageY) / n.scale, n.applyTransform(), n.label.hide(), (h != n.transX || p != n.transY) && _a.preventDefault()), r = f[0].pageX, i = f[0].pageY) : f.length == 2 && (u == 2 ? (c = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)) / t, n.setScale(e * c, s, o), n.label.hide(), _a.preventDefault()) : (l = jvm.$(n.container).offset(), f[0].pageX > f[1].pageX ? s = f[1].pageX + (f[0].pageX - f[1].pageX) / 2 : s = f[0].pageX + (f[1].pageX - f[0].pageX) / 2, f[0].pageY > f[1].pageY ? o = f[1].pageY + (f[0].pageY - f[1].pageY) / 2 : o = f[0].pageY + (f[1].pageY - f[0].pageY) / 2, s -= l.left, o -= l.top, e = n.scale, t = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)))), u = f.length;\n };jvm.$(this.container).bind(\"touchstart\", a), jvm.$(this.container).bind(\"touchmove\", a);\n }, bindElementEvents: function bindElementEvents() {\n var e = this,\n t;this.container.mousemove(function () {\n t = !0;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseover mouseout\", function (t) {\n var n = this,\n r = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n i = r.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n s = i == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n o = i == \"region\" ? e.regions[s].element : e.markers[s].element,\n u = i == \"region\" ? e.mapData.paths[s].name : e.markers[s].config.name || \"\",\n a = jvm.$.Event(i + \"LabelShow.jvectormap\"),\n f = jvm.$.Event(i + \"Over.jvectormap\");t.type == \"mouseover\" ? (e.container.trigger(f, [s]), f.isDefaultPrevented() || o.setHovered(!0), e.label.text(u), e.container.trigger(a, [e.label, s]), a.isDefaultPrevented() || (e.label.show(), e.labelWidth = e.label.width(), e.labelHeight = e.label.height())) : (o.setHovered(!1), e.label.hide(), e.container.trigger(i + \"Out.jvectormap\", [s]));\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mousedown\", function (e) {\n t = !1;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseup\", function (n) {\n var r = this,\n i = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n s = i.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n o = s == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n u = jvm.$.Event(s + \"Click.jvectormap\"),\n a = s == \"region\" ? e.regions[o].element : e.markers[o].element;if (!t) {\n e.container.trigger(u, [o]);if (s === \"region\" && e.params.regionsSelectable || s === \"marker\" && e.params.markersSelectable) u.isDefaultPrevented() || (e.params[s + \"sSelectableOne\"] && e.clearSelected(s + \"s\"), a.setSelected(!a.isSelected));\n }\n });\n }, bindZoomButtons: function bindZoomButtons() {\n var e = this;jvm.$(\"<div/>\").addClass(\"jvectormap-zoomin\").text(\"+\").appendTo(this.container), jvm.$(\"<div/>\").addClass(\"jvectormap-zoomout\").html(\"−\").appendTo(this.container), this.container.find(\".jvectormap-zoomin\").click(function () {\n e.setScale(e.scale * e.params.zoomStep, e.width / 2, e.height / 2);\n }), this.container.find(\".jvectormap-zoomout\").click(function () {\n e.setScale(e.scale / e.params.zoomStep, e.width / 2, e.height / 2);\n });\n }, createLabel: function createLabel() {\n var e = this;this.label = jvm.$(\"<div/>\").addClass(\"jvectormap-label\").appendTo(jvm.$(\"body\")), this.container.mousemove(function (t) {\n var n = t.pageX - 15 - e.labelWidth,\n r = t.pageY - 15 - e.labelHeight;n < 5 && (n = t.pageX + 15), r < 5 && (r = t.pageY + 15), e.label.is(\":visible\") && e.label.css({ left: n, top: r });\n });\n }, setScale: function setScale(e, t, n, r) {\n var i,\n s = jvm.$.Event(\"zoom.jvectormap\");e > this.params.zoomMax * this.baseScale ? e = this.params.zoomMax * this.baseScale : e < this.params.zoomMin * this.baseScale && (e = this.params.zoomMin * this.baseScale), typeof t != \"undefined\" && typeof n != \"undefined\" && (i = e / this.scale, r ? (this.transX = t + this.defaultWidth * (this.width / (this.defaultWidth * e)) / 2, this.transY = n + this.defaultHeight * (this.height / (this.defaultHeight * e)) / 2) : (this.transX -= (i - 1) / e * t, this.transY -= (i - 1) / e * n)), this.scale = e, this.applyTransform(), this.container.trigger(s, [e / this.baseScale]);\n }, setFocus: function setFocus(e, t, n) {\n var r, i, s, o, u;if (jvm.$.isArray(e) || this.regions[e]) {\n jvm.$.isArray(e) ? o = e : o = [e];for (u = 0; u < o.length; u++) {\n this.regions[o[u]] && (i = this.regions[o[u]].element.getBBox(), i && (typeof r == \"undefined\" ? r = i : (s = { x: Math.min(r.x, i.x), y: Math.min(r.y, i.y), width: Math.max(r.x + r.width, i.x + i.width) - Math.min(r.x, i.x), height: Math.max(r.y + r.height, i.y + i.height) - Math.min(r.y, i.y) }, r = s)));\n }this.setScale(Math.min(this.width / r.width, this.height / r.height), -(r.x + r.width / 2), -(r.y + r.height / 2), !0);\n } else e *= this.baseScale, this.setScale(e, -t * this.defaultWidth, -n * this.defaultHeight, !0);\n }, getSelected: function getSelected(e) {\n var t,\n n = [];for (t in this[e]) {\n this[e][t].element.isSelected && n.push(t);\n }return n;\n }, getSelectedRegions: function getSelectedRegions() {\n return this.getSelected(\"regions\");\n }, getSelectedMarkers: function getSelectedMarkers() {\n return this.getSelected(\"markers\");\n }, setSelected: function setSelected(e, t) {\n var n;(typeof t === \"undefined\" ? \"undefined\" : _typeof(t)) != \"object\" && (t = [t]);if (jvm.$.isArray(t)) for (n = 0; n < t.length; n++) {\n this[e][t[n]].element.setSelected(!0);\n } else for (n in t) {\n this[e][n].element.setSelected(!!t[n]);\n }\n }, setSelectedRegions: function setSelectedRegions(e) {\n this.setSelected(\"regions\", e);\n }, setSelectedMarkers: function setSelectedMarkers(e) {\n this.setSelected(\"markers\", e);\n }, clearSelected: function clearSelected(e) {\n var t = {},\n n = this.getSelected(e),\n r;for (r = 0; r < n.length; r++) {\n t[n[r]] = !1;\n }this.setSelected(e, t);\n }, clearSelectedRegions: function clearSelectedRegions() {\n this.clearSelected(\"regions\");\n }, clearSelectedMarkers: function clearSelectedMarkers() {\n this.clearSelected(\"markers\");\n }, getMapObject: function getMapObject() {\n return this;\n }, getRegionName: function getRegionName(e) {\n return this.mapData.paths[e].name;\n }, createRegions: function createRegions() {\n var e,\n t,\n n = this;for (e in this.mapData.paths) {\n t = this.canvas.addPath({ d: this.mapData.paths[e].path, \"data-code\": e }, jvm.$.extend(!0, {}, this.params.regionStyle)), jvm.$(t.node).bind(\"selected\", function (e, t) {\n n.container.trigger(\"regionSelected.jvectormap\", [jvm.$(this).attr(\"data-code\"), t, n.getSelectedRegions()]);\n }), t.addClass(\"jvectormap-region jvectormap-element\"), this.regions[e] = { element: t, config: this.mapData.paths[e] };\n }\n }, createMarkers: function createMarkers(e) {\n var t,\n n,\n r,\n i,\n s,\n o = this;this.markersGroup = this.markersGroup || this.canvas.addGroup();if (jvm.$.isArray(e)) {\n s = e.slice(), e = {};for (t = 0; t < s.length; t++) {\n e[t] = s[t];\n }\n }for (t in e) {\n i = e[t] instanceof Array ? { latLng: e[t] } : e[t], r = this.getMarkerPosition(i), r !== !1 && (n = this.canvas.addCircle({ \"data-index\": t, cx: r.x, cy: r.y }, jvm.$.extend(!0, {}, this.params.markerStyle, { initial: i.style || {} }), this.markersGroup), n.addClass(\"jvectormap-marker jvectormap-element\"), jvm.$(n.node).bind(\"selected\", function (e, t) {\n o.container.trigger(\"markerSelected.jvectormap\", [jvm.$(this).attr(\"data-index\"), t, o.getSelectedMarkers()]);\n }), this.markers[t] && this.removeMarkers([t]), this.markers[t] = { element: n, config: i });\n }\n }, repositionMarkers: function repositionMarkers() {\n var e, t;for (e in this.markers) {\n t = this.getMarkerPosition(this.markers[e].config), t !== !1 && this.markers[e].element.setStyle({ cx: t.x, cy: t.y });\n }\n }, getMarkerPosition: function getMarkerPosition(e) {\n return jvm.WorldMap.maps[this.params.map].projection ? this.latLngToPoint.apply(this, e.latLng || [0, 0]) : { x: e.coords[0] * this.scale + this.transX * this.scale, y: e.coords[1] * this.scale + this.transY * this.scale };\n }, addMarker: function addMarker(e, t, n) {\n var r = {},\n i = [],\n s,\n o,\n n = n || [];r[e] = t;for (o = 0; o < n.length; o++) {\n s = {}, s[e] = n[o], i.push(s);\n }this.addMarkers(r, i);\n }, addMarkers: function addMarkers(e, t) {\n var n;t = t || [], this.createMarkers(e);for (n = 0; n < t.length; n++) {\n this.series.markers[n].setValues(t[n] || {});\n }\n }, removeMarkers: function removeMarkers(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.markers[e[t]].element.remove(), delete this.markers[e[t]];\n }\n }, removeAllMarkers: function removeAllMarkers() {\n var e,\n t = [];for (e in this.markers) {\n t.push(e);\n }this.removeMarkers(t);\n }, latLngToPoint: function latLngToPoint(e, t) {\n var n,\n r = jvm.WorldMap.maps[this.params.map].projection,\n i = r.centralMeridian,\n s = this.width - this.baseTransX * 2 * this.baseScale,\n o = this.height - this.baseTransY * 2 * this.baseScale,\n u,\n a,\n f = this.scale / this.baseScale;return t < -180 + i && (t += 360), n = jvm.Proj[r.type](e, t, i), u = this.getInsetForPoint(n.x, n.y), u ? (a = u.bbox, n.x = (n.x - a[0].x) / (a[1].x - a[0].x) * u.width * this.scale, n.y = (n.y - a[0].y) / (a[1].y - a[0].y) * u.height * this.scale, { x: n.x + this.transX * this.scale + u.left * this.scale, y: n.y + this.transY * this.scale + u.top * this.scale }) : !1;\n }, pointToLatLng: function pointToLatLng(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].projection,\n r = n.centralMeridian,\n i = jvm.WorldMap.maps[this.params.map].insets,\n s,\n o,\n u,\n a,\n f;for (s = 0; s < i.length; s++) {\n o = i[s], u = o.bbox, a = e - (this.transX * this.scale + o.left * this.scale), f = t - (this.transY * this.scale + o.top * this.scale), a = a / (o.width * this.scale) * (u[1].x - u[0].x) + u[0].x, f = f / (o.height * this.scale) * (u[1].y - u[0].y) + u[0].y;if (a > u[0].x && a < u[1].x && f > u[0].y && f < u[1].y) return jvm.Proj[n.type + \"_inv\"](a, -f, r);\n }return !1;\n }, getInsetForPoint: function getInsetForPoint(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].insets,\n r,\n i;for (r = 0; r < n.length; r++) {\n i = n[r].bbox;if (e > i[0].x && e < i[1].x && t > i[0].y && t < i[1].y) return n[r];\n }\n }, createSeries: function createSeries() {\n var e, t;this.series = { markers: [], regions: [] };for (t in this.params.series) {\n for (e = 0; e < this.params.series[t].length; e++) {\n this.series[t][e] = new jvm.DataSeries(this.params.series[t][e], this[t]);\n }\n }\n }, remove: function remove() {\n this.label.remove(), this.container.remove(), jvm.$(window).unbind(\"resize\", this.onResize);\n } }, jvm.WorldMap.maps = {}, jvm.WorldMap.defaultParams = { map: \"world_mill_en\", backgroundColor: \"#505050\", zoomButtons: !0, zoomOnScroll: !0, zoomMax: 8, zoomMin: 1, zoomStep: 1.6, regionsSelectable: !1, markersSelectable: !1, bindTouchEvents: !0, regionStyle: { initial: { fill: \"white\", \"fill-opacity\": 1, stroke: \"none\", \"stroke-width\": 0, \"stroke-opacity\": 1 }, hover: { \"fill-opacity\": .8 }, selected: { fill: \"yellow\" }, selectedHover: {} }, markerStyle: { initial: { fill: \"grey\", stroke: \"#505050\", \"fill-opacity\": 1, \"stroke-width\": 1, \"stroke-opacity\": 1, r: 5 }, hover: { stroke: \"black\", \"stroke-width\": 2 }, selected: { fill: \"blue\" }, selectedHover: {} } }, jvm.WorldMap.apiEvents = { onRegionLabelShow: \"regionLabelShow\", onRegionOver: \"regionOver\", onRegionOut: \"regionOut\", onRegionClick: \"regionClick\", onRegionSelected: \"regionSelected\", onMarkerLabelShow: \"markerLabelShow\", onMarkerOver: \"markerOver\", onMarkerOut: \"markerOut\", onMarkerClick: \"markerClick\", onMarkerSelected: \"markerSelected\", onViewportChange: \"viewportChange\" };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtMS4yLjIubWluLmpzPzQ3MjEiXSwibmFtZXMiOlsiZSIsInQiLCJzZXQiLCJjb2xvcnMiLCJ2YWx1ZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzY2FsZUNvbG9ycyIsIm5vcm1hbGl6ZUZ1bmN0aW9uIiwiZm9jdXMiLCJnZXQiLCJzZWxlY3RlZFJlZ2lvbnMiLCJzZWxlY3RlZE1hcmtlcnMiLCJtYXBPYmplY3QiLCJyZWdpb25OYW1lIiwiZm4iLCJ2ZWN0b3JNYXAiLCJuIiwiciIsImkiLCJjaGlsZHJlbiIsImRhdGEiLCJqdm0iLCJXb3JsZE1hcCIsIm1hcHMiLCJhcmd1bWVudHMiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0ciIsImFwcGx5IiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJjb250YWluZXIiLCJqUXVlcnkiLCJ3aW5kb3ciLCJldmVudCIsInMiLCJvIiwidSIsImZpeCIsInR5cGUiLCJ3aGVlbERlbHRhIiwiZGV0YWlsIiwiYXhpcyIsInVuZGVmaW5lZCIsIkhPUklaT05UQUxfQVhJUyIsIndoZWVsRGVsdGFZIiwid2hlZWxEZWx0YVgiLCJ1bnNoaWZ0IiwiZGlzcGF0Y2giLCJoYW5kbGUiLCJmaXhIb29rcyIsImxlbmd0aCIsIm1vdXNlSG9va3MiLCJzcGVjaWFsIiwibW91c2V3aGVlbCIsInNldHVwIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ubW91c2V3aGVlbCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV4dGVuZCIsImJpbmQiLCJ0cmlnZ2VyIiwidW5tb3VzZXdoZWVsIiwidW5iaW5kIiwiaW5oZXJpdHMiLCJjb25zdHJ1Y3RvciIsInBhcmVudENsYXNzIiwibWl4aW4iLCJoYXNPd25Qcm9wZXJ0eSIsIm1pbiIsIk51bWJlciIsIk1BWF9WQUxVRSIsIm1heCIsIk1JTl9WQUxVRSIsImtleXMiLCJwdXNoIiwiJCIsIkFic3RyYWN0RWxlbWVudCIsIm5vZGUiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsInByb3BlcnRpZXMiLCJhcHBseUF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmUiLCJBYnN0cmFjdENhbnZhc0VsZW1lbnQiLCJzZXRTaXplIiwicm9vdEVsZW1lbnQiLCJjbGFzc1ByZWZpeCIsImFwcGVuZENoaWxkIiwiYWRkIiwiY2FudmFzIiwiYWRkUGF0aCIsImFkZENpcmNsZSIsImFkZEdyb3VwIiwiQWJzdHJhY3RTaGFwZUVsZW1lbnQiLCJzdHlsZSIsImN1cnJlbnQiLCJpc0hvdmVyZWQiLCJpc1NlbGVjdGVkIiwidXBkYXRlU3R5bGUiLCJzZXRIb3ZlcmVkIiwic2V0U2VsZWN0ZWQiLCJzZXRTdHlsZSIsIm1lcmdlU3R5bGVzIiwiaW5pdGlhbCIsImhvdmVyIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEhvdmVyIiwiU1ZHRWxlbWVudCIsInN2Z25zIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhZGRDbGFzcyIsImdldEVsZW1lbnRDdHIiLCJnZXRCQm94IiwiU1ZHR3JvdXBFbGVtZW50IiwiU1ZHQ2FudmFzRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0IiwiYXBwbHlUcmFuc2Zvcm1QYXJhbXMiLCJzY2FsZSIsInRyYW5zWCIsInRyYW5zWSIsIlNWR1NoYXBlRWxlbWVudCIsIlNWR1BhdGhFbGVtZW50IiwiU1ZHQ2lyY2xlRWxlbWVudCIsIlZNTEVsZW1lbnQiLCJWTUxJbml0aWFsaXplZCIsImluaXRpYWxpemVWTUwiLCJuYW1lc3BhY2VzIiwicnZtbCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJhZGRSdWxlIiwieCIsInBvc2l0aW9uIiwibGVmdCIsInkiLCJ0b3AiLCJWTUxHcm91cEVsZW1lbnQiLCJjb29yZG9yaWdpbiIsIlZNTENhbnZhc0VsZW1lbnQiLCJjb29yZHNpemUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIlZNTFNoYXBlRWxlbWVudCIsImZpbGxFbGVtZW50Iiwic3Ryb2tlRWxlbWVudCIsInN0cm9rZWQiLCJmaWxsY29sb3IiLCJvcGFjaXR5IiwiTWF0aCIsInJvdW5kIiwic3Ryb2tlY29sb3IiLCJwYXJzZUludCIsInN0cm9rZXdlaWdodCIsInBhdGgiLCJWTUxQYXRoRWxlbWVudCIsInBhdGhTdmdUb1ZtbCIsIm9uIiwibWF0cml4Iiwib2Zmc2V0IiwicmVwbGFjZSIsInNwbGl0Iiwic2hpZnQiLCJhIiwiZiIsImpvaW4iLCJWTUxDaXJjbGVFbGVtZW50IiwiVmVjdG9yQ2FudmFzIiwibW9kZSIsIlNWR0FuZ2xlIiwiaW1wbCIsIlNpbXBsZVNjYWxlIiwiZ2V0VmFsdWUiLCJPcmRpbmFsU2NhbGUiLCJOdW1lcmljU2NhbGUiLCJzZXRTY2FsZSIsInNldE5vcm1hbGl6ZUZ1bmN0aW9uIiwic2V0TWluIiwic2V0TWF4IiwiY2xlYXJNaW5WYWx1ZSIsIm5vcm1hbGl6ZSIsIm1pblZhbHVlIiwiY2xlYXJNYXhWYWx1ZSIsIm1heFZhbHVlIiwicG93IiwidmVjdG9yTGVuZ3RoIiwidmVjdG9yU3VidHJhY3QiLCJ2ZWN0b3JUb051bSIsInZlY3RvckFkZCIsInZlY3Rvck11bHQiLCJzcXJ0IiwiQ29sb3JTY2FsZSIsInJnYlRvQXJyYXkiLCJudW1Ub1JnYiIsImFycmF5VG9SZ2IiLCJ0b1N0cmluZyIsIkRhdGFTZXJpZXMiLCJhdHRyaWJ1dGUiLCJlbGVtZW50cyIsInBhcmFtcyIsImF0dHJpYnV0ZXMiLCJzZXRBdHRyaWJ1dGVzIiwiaXNBcnJheSIsInNldFZhbHVlcyIsImVsZW1lbnQiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJjbGVhciIsIlByb2oiLCJkZWdSYWQiLCJQSSIsInJhZERlZyIsInJhZGl1cyIsInNnbiIsIm1pbGwiLCJsb2ciLCJ0YW4iLCJtaWxsX2ludiIsImxhdCIsImF0YW4iLCJleHAiLCJsbmciLCJtZXJjIiwibWVyY19pbnYiLCJhZWEiLCJzaW4iLCJsIiwiY29zIiwiYyIsImgiLCJwIiwiYWVhX2ludiIsImFzaW4iLCJsY2MiLCJsY2NfaW52IiwiZGVmYXVsdFBhcmFtcyIsIm1hcCIsIkVycm9yIiwibWFwRGF0YSIsIm1hcmtlcnMiLCJyZWdpb25zIiwicmVnaW9uc0NvbG9ycyIsInJlZ2lvbnNEYXRhIiwiY3NzIiwiYXBwZW5kIiwib3ZlcmZsb3ciLCJkZWZhdWx0V2lkdGgiLCJkZWZhdWx0SGVpZ2h0Iiwic2V0QmFja2dyb3VuZENvbG9yIiwib25SZXNpemUiLCJyZXNpemUiLCJhcGlFdmVudHMiLCJEb2N1bWVudFRvdWNoIiwiYmluZFRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lclRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lckV2ZW50cyIsImJpbmRFbGVtZW50RXZlbnRzIiwiY3JlYXRlTGFiZWwiLCJ6b29tQnV0dG9ucyIsImJpbmRab29tQnV0dG9ucyIsImNyZWF0ZVJlZ2lvbnMiLCJjcmVhdGVNYXJrZXJzIiwiZm9jdXNPbiIsInNldEZvY3VzIiwic2V0U2VsZWN0ZWRSZWdpb25zIiwic2V0U2VsZWN0ZWRNYXJrZXJzIiwic2VyaWVzIiwiY3JlYXRlU2VyaWVzIiwiYmFzZVRyYW5zWCIsImJhc2VUcmFuc1kiLCJiYXNlU2NhbGUiLCJhYnMiLCJhcHBseVRyYW5zZm9ybSIsInJlc2V0IiwicmVwb3NpdGlvbk1hcmtlcnMiLCJtb3VzZW1vdmUiLCJwYWdlWCIsInBhZ2VZIiwibW91c2Vkb3duIiwibW91c2V1cCIsInpvb21PblNjcm9sbCIsImxhYmVsIiwiaGlkZSIsInByZXZlbnREZWZhdWx0Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJkZWxlZ2F0ZSIsImF0dHIiLCJiYXNlVmFsIiwiaW5kZXhPZiIsInBhdGhzIiwiY29uZmlnIiwiRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJ0ZXh0Iiwic2hvdyIsImxhYmVsV2lkdGgiLCJsYWJlbEhlaWdodCIsInJlZ2lvbnNTZWxlY3RhYmxlIiwibWFya2Vyc1NlbGVjdGFibGUiLCJjbGVhclNlbGVjdGVkIiwiYXBwZW5kVG8iLCJodG1sIiwiZmluZCIsImNsaWNrIiwiem9vbVN0ZXAiLCJpcyIsInpvb21NYXgiLCJ6b29tTWluIiwiZ2V0U2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFJlZ2lvbnMiLCJnZXRTZWxlY3RlZE1hcmtlcnMiLCJjbGVhclNlbGVjdGVkUmVnaW9ucyIsImNsZWFyU2VsZWN0ZWRNYXJrZXJzIiwiZ2V0TWFwT2JqZWN0IiwiZ2V0UmVnaW9uTmFtZSIsImQiLCJyZWdpb25TdHlsZSIsIm1hcmtlcnNHcm91cCIsImxhdExuZyIsImdldE1hcmtlclBvc2l0aW9uIiwiY3giLCJjeSIsIm1hcmtlclN0eWxlIiwicmVtb3ZlTWFya2VycyIsInByb2plY3Rpb24iLCJsYXRMbmdUb1BvaW50IiwiY29vcmRzIiwiYWRkTWFya2VyIiwiYWRkTWFya2VycyIsInJlbW92ZUFsbE1hcmtlcnMiLCJjZW50cmFsTWVyaWRpYW4iLCJnZXRJbnNldEZvclBvaW50IiwiYmJveCIsInBvaW50VG9MYXRMbmciLCJpbnNldHMiLCJmaWxsIiwic3Ryb2tlIiwib25SZWdpb25MYWJlbFNob3ciLCJvblJlZ2lvbk92ZXIiLCJvblJlZ2lvbk91dCIsIm9uUmVnaW9uQ2xpY2siLCJvblJlZ2lvblNlbGVjdGVkIiwib25NYXJrZXJMYWJlbFNob3ciLCJvbk1hcmtlck92ZXIiLCJvbk1hcmtlck91dCIsIm9uTWFya2VyQ2xpY2siLCJvbk1hcmtlclNlbGVjdGVkIiwib25WaWV3cG9ydENoYW5nZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUcsQ0FBQyxVQUFTQSxDQUFULEVBQVc7QUFBQyxNQUFJQyxJQUFFLEVBQUNDLEtBQUksRUFBQ0MsUUFBTyxDQUFSLEVBQVVDLFFBQU8sQ0FBakIsRUFBbUJDLGlCQUFnQixDQUFuQyxFQUFxQ0MsYUFBWSxDQUFqRCxFQUFtREMsbUJBQWtCLENBQXJFLEVBQXVFQyxPQUFNLENBQTdFLEVBQUwsRUFBcUZDLEtBQUksRUFBQ0MsaUJBQWdCLENBQWpCLEVBQW1CQyxpQkFBZ0IsQ0FBbkMsRUFBcUNDLFdB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SyxFQUQraS9CLEVBQTl6NkIsRUFDOWpFMUYsSUFBSUMsUUFBSixDQUFheU8sU0FBYixHQUF1QixFQUFDdUYsbUJBQWtCLGlCQUFuQixFQUFxQ0MsY0FBYSxZQUFsRCxFQUErREMsYUFBWSxXQUEzRSxFQUF1RkMsZUFBYyxhQUFyRyxFQUFtSEMsa0JBQWlCLGdCQUFwSSxFQUFxSkMsbUJBQWtCLGlCQUF2SyxFQUF5TEMsY0FBYSxZQUF0TSxFQUFtTkMsYUFBWSxXQUEvTixFQUEyT0MsZUFBYyxhQUF6UCxFQUF1UUMsa0JBQWlCLGdCQUF4UixFQUF5U0Msa0JBQWlCLGdCQUExVCxFQUR1aUUiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGpWZWN0b3JNYXAgdmVyc2lvbiAxLjIuMlxuICpcbiAqIENvcHlyaWdodCAyMDExLTIwMTMsIEtpcmlsbCBMZWJlZGV2XG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICovKGZ1bmN0aW9uKGUpe3ZhciB0PXtzZXQ6e2NvbG9yczoxLHZhbHVlczoxLGJhY2tncm91bmRDb2xvcjoxLHNjYWxlQ29sb3JzOjEsbm9ybWFsaXplRnVuY3Rpb246MSxmb2N1czoxfSxnZXQ6e3NlbGVjdGVkUmVnaW9uczoxLHNlbGVjdGVkTWFya2VyczoxLG1hcE9iamVjdDoxLHJlZ2lvbk5hbWU6MX19O2UuZm4udmVjdG9yTWFwPWZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxuPXRoaXMuY2hpbGRyZW4oXCIuanZlY3Rvcm1hcC1jb250YWluZXJcIikuZGF0YShcIm1hcE9iamVjdFwiKTtpZihlPT09XCJhZGRNYXBcIilqdm0uV29ybGRNYXAubWFwc1thcmd1bWVudHNbMV1dPWFyZ3VtZW50c1syXTtlbHNle2lmKCEoZSE9PVwic2V0XCImJmUhPT1cImdldFwifHwhdFtlXVthcmd1bWVudHNbMV1dKSlyZXR1cm4gcj1hcmd1bWVudHNbMV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYXJndW1lbnRzWzFdLnN1YnN0cigxKSxuW2Urcl0uYXBwbHkobixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2U9ZXx8e30sZS5jb250YWluZXI9dGhpcyxuPW5ldyBqdm0uV29ybGRNYXAoZSl9cmV0dXJuIHRoaXN9fSkoalF1ZXJ5KSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3ZhciBuPXR8fHdpbmRvdy5ldmVudCxyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGk9MCxzPSEwLG89MCx1PTA7cmV0dXJuIHQ9ZS5ldmVudC5maXgobiksdC50eXBlPVwibW91c2V3aGVlbFwiLG4ud2hlZWxEZWx0YSYmKGk9bi53aGVlbERlbHRhLzEyMCksbi5kZXRhaWwmJihpPS1uLmRldGFpbC8zKSx1PWksbi5heGlzIT09dW5kZWZpbmVkJiZuLmF4aXM9PT1uLkhPUklaT05UQUxfQVhJUyYmKHU9MCxvPS0xKmkpLG4ud2hlZWxEZWx0YVkhPT11bmRlZmluZWQmJih1PW4ud2hlZWxEZWx0YVkvMTIwKSxuLndoZWVsRGVsdGFYIT09dW5kZWZpbmVkJiYobz0tMSpuLndoZWVsRGVsdGFYLzEyMCksci51bnNoaWZ0KHQsaSxvLHUpLChlLmV2ZW50LmRpc3BhdGNofHxlLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcyxyKX12YXIgdD1bXCJET01Nb3VzZVNjcm9sbFwiLFwibW91c2V3aGVlbFwiXTtpZihlLmV2ZW50LmZpeEhvb2tzKWZvcih2YXIgbj10Lmxlbmd0aDtuOyllLmV2ZW50LmZpeEhvb2tzW3RbLS1uXV09ZS5ldmVudC5tb3VzZUhvb2tzO2UuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsPXtzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcilmb3IodmFyIGU9dC5sZW5ndGg7ZTspdGhpcy5hZGRFdmVudExpc3RlbmVyKHRbLS1lXSxyLCExKTtlbHNlIHRoaXMub25tb3VzZXdoZWVsPXJ9LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKWZvcih2YXIgZT10Lmxlbmd0aDtlOyl0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFstLWVdLHIsITEpO2Vsc2UgdGhpcy5vbm1vdXNld2hlZWw9bnVsbH19LGUuZm4uZXh0ZW5kKHttb3VzZXdoZWVsOmZ1bmN0aW9uKGUpe3JldHVybiBlP3RoaXMuYmluZChcIm1vdXNld2hlZWxcIixlKTp0aGlzLnRyaWdnZXIoXCJtb3VzZXdoZWVsXCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudW5iaW5kKFwibW91c2V3aGVlbFwiLGUpfX0pfShqUXVlcnkpO3ZhciBqdm09e2luaGVyaXRzOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe31uLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucGFyZW50Q2xhc3M9dH0sbWl4aW46ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IobiBpbiB0LnByb3RvdHlwZSl0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShuKSYmKGUucHJvdG90eXBlW25dPXQucHJvdG90eXBlW25dKX0sbWluOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NQVhfVkFMVUUsbjtpZihlIGluc3RhbmNlb2YgQXJyYXkpZm9yKG49MDtuPGUubGVuZ3RoO24rKyllW25dPHQmJih0PWVbbl0pO2Vsc2UgZm9yKG4gaW4gZSllW25dPHQmJih0PWVbbl0pO3JldHVybiB0fSxtYXg6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyLk1JTl9WQUxVRSxuO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlmb3Iobj0wO248ZS5sZW5ndGg7bisrKWVbbl0+dCYmKHQ9ZVtuXSk7ZWxzZSBmb3IobiBpbiBlKWVbbl0+dCYmKHQ9ZVtuXSk7cmV0dXJuIHR9LGtleXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbjtmb3IobiBpbiBlKXQucHVzaChuKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLG4scjtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe2U9YXJndW1lbnRzW3JdO2ZvcihuIGluIGUpdC5wdXNoKGVbbl0pfXJldHVybiB0fX07anZtLiQ9alF1ZXJ5LGp2bS5BYnN0cmFjdEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGU9dGhpcy5jcmVhdGVFbGVtZW50KGUpLHRoaXMubmFtZT1lLHRoaXMucHJvcGVydGllcz17fSx0JiZ0aGlzLnNldCh0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYodHlwZW9mIGU9PVwib2JqZWN0XCIpZm9yKG4gaW4gZSl0aGlzLnByb3BlcnRpZXNbbl09ZVtuXSx0aGlzLmFwcGx5QXR0cihuLGVbbl0pO2Vsc2UgdGhpcy5wcm9wZXJ0aWVzW2VdPXQsdGhpcy5hcHBseUF0dHIoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BlcnRpZXNbZV19LGp2bS5BYnN0cmFjdEVsZW1lbnQucHJvdG90eXBlLmFwcGx5QXR0cj1mdW5jdGlvbihlLHQpe3RoaXMubm9kZS5zZXRBdHRyaWJ1dGUoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7anZtLiQodGhpcy5ub2RlKS5yZW1vdmUoKX0sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dGhpcy5jb250YWluZXI9ZSx0aGlzLnNldFNpemUodCxuKSx0aGlzLnJvb3RFbGVtZW50PW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkdyb3VwRWxlbWVudFwiXSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudC5ub2RlKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXMucm9vdEVsZW1lbnQsdC5hZGQoZSksZS5jYW52YXM9dGhpc30sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5wcm90b3R5cGUuYWRkUGF0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IGp2bVt0aGlzLmNsYXNzUHJlZml4K1wiUGF0aEVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRDaXJjbGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkNpcmNsZUVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRHcm91cD1mdW5jdGlvbihlKXt2YXIgdD1uZXcganZtW3RoaXMuY2xhc3NQcmVmaXgrXCJHcm91cEVsZW1lbnRcIl07cmV0dXJuIGU/ZS5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSk6dGhpcy5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSksdC5jYW52YXM9dGhpcyx0fSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3R5bGU9bnx8e30sdGhpcy5zdHlsZS5jdXJyZW50PXt9LHRoaXMuaXNIb3ZlcmVkPSExLHRoaXMuaXNTZWxlY3RlZD0hMSx0aGlzLnVwZGF0ZVN0eWxlKCl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0SG92ZXJlZD1mdW5jdGlvbihlKXt0aGlzLmlzSG92ZXJlZCE9PWUmJih0aGlzLmlzSG92ZXJlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7dGhpcy5pc1NlbGVjdGVkIT09ZSYmKHRoaXMuaXNTZWxlY3RlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSxqdm0uJCh0aGlzLm5vZGUpLnRyaWdnZXIoXCJzZWxlY3RlZFwiLFtlXSkpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307dHlwZW9mIGU9PVwib2JqZWN0XCI/bj1lOm5bZV09dCxqdm0uJC5leHRlbmQodGhpcy5zdHlsZS5jdXJyZW50LG4pLHRoaXMudXBkYXRlU3R5bGUoKX0sanZtLkFic3RyYWN0U2hhcGVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVTdHlsZT1mdW5jdGlvbigpe3ZhciBlPXt9O2p2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuaW5pdGlhbCksanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5jdXJyZW50KSx0aGlzLmlzSG92ZXJlZCYmanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5ob3ZlciksdGhpcy5pc1NlbGVjdGVkJiYoanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5zZWxlY3RlZCksdGhpcy5pc0hvdmVyZWQmJmp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuc2VsZWN0ZWRIb3ZlcikpLHRoaXMuc2V0KGUpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQubWVyZ2VTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjt0PXR8fHt9O2ZvcihuIGluIHQpdFtuXT09PW51bGw/ZGVsZXRlIGVbbl06ZVtuXT10W25dfSxqdm0uU1ZHRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdFbGVtZW50LnBhcmVudENsYXNzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sanZtLmluaGVyaXRzKGp2bS5TVkdFbGVtZW50LGp2bS5BYnN0cmFjdEVsZW1lbnQpLGp2bS5TVkdFbGVtZW50LnN2Z25zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp2bS5TVkdFbGVtZW50LnN2Z25zLGUpfSxqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsZSl9LGp2bS5TVkdFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJTVkdcIitlXX0sanZtLlNWR0VsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldEJCb3goKX0sanZtLlNWR0dyb3VwRWxlbWVudD1mdW5jdGlvbigpe2p2bS5TVkdHcm91cEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiZ1wiKX0sanZtLmluaGVyaXRzKGp2bS5TVkdHcm91cEVsZW1lbnQsanZtLlNWR0VsZW1lbnQpLGp2bS5TVkdHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlNWR0NhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJTVkdcIixqdm0uU1ZHQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJzdmdcIiksanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHQ2FudmFzRWxlbWVudCxqdm0uU1ZHRWxlbWVudCksanZtLm1peGluKGp2bS5TVkdDYW52YXNFbGVtZW50LGp2bS5BYnN0cmFjdENhbnZhc0VsZW1lbnQpLGp2bS5TVkdDYW52YXNFbGVtZW50LnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXQsdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsZSksdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLHQpfSxqdm0uU1ZHQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm1QYXJhbXM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2NhbGU9ZSx0aGlzLnRyYW5zWD10LHRoaXMudHJhbnNZPW4sdGhpcy5yb290RWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwic2NhbGUoXCIrZStcIikgdHJhbnNsYXRlKFwiK3QrXCIsIFwiK24rXCIpXCIpfSxqdm0uU1ZHU2hhcGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtqdm0uU1ZHU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLmNhbGwodGhpcyxlLHQpLGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHU2hhcGVFbGVtZW50LGp2bS5TVkdFbGVtZW50KSxqdm0ubWl4aW4oanZtLlNWR1NoYXBlRWxlbWVudCxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQpLGp2bS5TVkdQYXRoRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdQYXRoRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJwYXRoXCIsZSx0KSx0aGlzLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpfSxqdm0uaW5oZXJpdHMoanZtLlNWR1BhdGhFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5TVkdDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlNWR0NpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiY2lyY2xlXCIsZSx0KX0sanZtLmluaGVyaXRzKGp2bS5TVkdDaXJjbGVFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5WTUxFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWR8fGp2bS5WTUxFbGVtZW50LmluaXRpYWxpemVWTUwoKSxqdm0uVk1MRWxlbWVudC5wYXJlbnRDbGFzcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uVk1MRWxlbWVudCxqdm0uQWJzdHJhY3RFbGVtZW50KSxqdm0uVk1MRWxlbWVudC5WTUxJbml0aWFsaXplZD0hMSxqdm0uVk1MRWxlbWVudC5pbml0aWFsaXplVk1MPWZ1bmN0aW9uKCl7dHJ5e2RvY3VtZW50Lm5hbWVzcGFjZXMucnZtbHx8ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoXCJydm1sXCIsXCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbFwiKSxqdm0uVk1MRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIjxydm1sOlwiK2UrJyBjbGFzcz1cInJ2bWxcIj4nKX19Y2F0Y2goZSl7anZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrZSsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInJ2bWxcIj4nKX19ZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCgpLmFkZFJ1bGUoXCIucnZtbFwiLFwiYmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTClcIiksanZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWQ9ITB9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJWTUxcIitlXX0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKGUpe2p2bS4kKHRoaXMubm9kZSkuYWRkQ2xhc3MoZSl9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGVbZV09dH0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXt2YXIgZT1qdm0uJCh0aGlzLm5vZGUpO3JldHVybnt4OmUucG9zaXRpb24oKS5sZWZ0L3RoaXMuY2FudmFzLnNjYWxlLHk6ZS5wb3NpdGlvbigpLnRvcC90aGlzLmNhbnZhcy5zY2FsZSx3aWR0aDplLndpZHRoKCkvdGhpcy5jYW52YXMuc2NhbGUsaGVpZ2h0OmUuaGVpZ2h0KCkvdGhpcy5jYW52YXMuc2NhbGV9fSxqdm0uVk1MR3JvdXBFbGVtZW50PWZ1bmN0aW9uKCl7anZtLlZNTEdyb3VwRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSx0aGlzLm5vZGUuc3R5bGUubGVmdD1cIjBweFwiLHRoaXMubm9kZS5zdHlsZS50b3A9XCIwcHhcIix0aGlzLm5vZGUuY29vcmRvcmlnaW49XCIwIDBcIn0sanZtLmluaGVyaXRzKGp2bS5WTUxHcm91cEVsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5WTUxHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlZNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJWTUxcIixqdm0uVk1MQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm5vZGUuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwifSxqdm0uaW5oZXJpdHMoanZtLlZNTENhbnZhc0VsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5taXhpbihqdm0uVk1MQ2FudmFzRWxlbWVudCxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50KSxqdm0uVk1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzO3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMubm9kZS5zdHlsZS53aWR0aD1lK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQrXCJweFwiLHRoaXMubm9kZS5jb29yZHNpemU9ZStcIiBcIit0LHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiO2lmKHRoaXMucm9vdEVsZW1lbnQpe249dGhpcy5yb290RWxlbWVudC5ub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2hhcGVcIik7Zm9yKGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspbltpXS5jb29yZHNpemU9ZStcIiBcIit0LG5baV0uc3R5bGUud2lkdGg9ZStcInB4XCIsbltpXS5zdHlsZS5oZWlnaHQ9dCtcInB4XCI7cj10aGlzLm5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJncm91cFwiKTtmb3IoaT0wLHM9ci5sZW5ndGg7aTxzO2krKylyW2ldLmNvb3Jkc2l6ZT1lK1wiIFwiK3QscltpXS5zdHlsZS53aWR0aD1lK1wicHhcIixyW2ldLnN0eWxlLmhlaWdodD10K1wicHhcIn19LGp2bS5WTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybVBhcmFtcz1mdW5jdGlvbihlLHQsbil7dGhpcy5zY2FsZT1lLHRoaXMudHJhbnNYPXQsdGhpcy50cmFuc1k9bix0aGlzLnJvb3RFbGVtZW50Lm5vZGUuY29vcmRvcmlnaW49dGhpcy53aWR0aC10LXRoaXMud2lkdGgvMTAwK1wiLFwiKyh0aGlzLmhlaWdodC1uLXRoaXMuaGVpZ2h0LzEwMCksdGhpcy5yb290RWxlbWVudC5ub2RlLmNvb3Jkc2l6ZT10aGlzLndpZHRoL2UrXCIsXCIrdGhpcy5oZWlnaHQvZX0sanZtLlZNTFNoYXBlRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5WTUxTaGFwZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLGUsdCksdGhpcy5maWxsRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJmaWxsXCIpLHRoaXMuc3Ryb2tlRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJzdHJva2VcIiksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuZmlsbEVsZW1lbnQubm9kZSksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuc3Ryb2tlRWxlbWVudC5ub2RlKSx0aGlzLm5vZGUuc3Ryb2tlZD0hMSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLlZNTFNoYXBlRWxlbWVudCxqdm0uVk1MRWxlbWVudCksanZtLm1peGluKGp2bS5WTUxTaGFwZUVsZW1lbnQsanZtLkFic3RyYWN0U2hhcGVFbGVtZW50KSxqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZmlsbFwiOnRoaXMubm9kZS5maWxsY29sb3I9dDticmVhaztjYXNlXCJmaWxsLW9wYWNpdHlcIjp0aGlzLmZpbGxFbGVtZW50Lm5vZGUub3BhY2l0eT1NYXRoLnJvdW5kKHQqMTAwKStcIiVcIjticmVhaztjYXNlXCJzdHJva2VcIjp0PT09XCJub25lXCI/dGhpcy5ub2RlLnN0cm9rZWQ9ITE6dGhpcy5ub2RlLnN0cm9rZWQ9ITAsdGhpcy5ub2RlLnN0cm9rZWNvbG9yPXQ7YnJlYWs7Y2FzZVwic3Ryb2tlLW9wYWNpdHlcIjp0aGlzLnN0cm9rZUVsZW1lbnQubm9kZS5vcGFjaXR5PU1hdGgucm91bmQodCoxMDApK1wiJVwiO2JyZWFrO2Nhc2VcInN0cm9rZS13aWR0aFwiOnBhcnNlSW50KHQsMTApPT09MD90aGlzLm5vZGUuc3Ryb2tlZD0hMTp0aGlzLm5vZGUuc3Ryb2tlZD0hMCx0aGlzLm5vZGUuc3Ryb2tld2VpZ2h0PXQ7YnJlYWs7Y2FzZVwiZFwiOnRoaXMubm9kZS5wYXRoPWp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWwodCk7YnJlYWs7ZGVmYXVsdDpqdm0uVk1MU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLnByb3RvdHlwZS5hcHBseUF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sanZtLlZNTFBhdGhFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGp2bS5WTUxFbGVtZW50KFwic2tld1wiKTtqdm0uVk1MUGF0aEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwic2hhcGVcIixlLHQpLHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiLG4ubm9kZS5vbj0hMCxuLm5vZGUubWF0cml4PVwiMC4wMSwwLDAsMC4wMSwwLDBcIixuLm5vZGUub2Zmc2V0PVwiMCwwXCIsdGhpcy5ub2RlLmFwcGVuZENoaWxkKG4ubm9kZSl9LGp2bS5pbmhlcml0cyhqdm0uVk1MUGF0aEVsZW1lbnQsanZtLlZNTFNoYXBlRWxlbWVudCksanZtLlZNTFBhdGhFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtlPT09XCJkXCI/dGhpcy5ub2RlLnBhdGg9anZtLlZNTFBhdGhFbGVtZW50LnBhdGhTdmdUb1ZtbCh0KTpqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHIuY2FsbCh0aGlzLGUsdCl9LGp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWw9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPTAscj0wLGkscztyZXR1cm4gZT1lLnJlcGxhY2UoLygtP1xcZCspZSgtP1xcZCspL2csXCIwXCIpLGUucmVwbGFjZSgvKFtNbUxsSGhWdkNjU3NdKVxccyooKD86LT9cXGQqKD86XFwuXFxkKyk/XFxzKiw/XFxzKikrKS9nLGZ1bmN0aW9uKGUsdCxvLHUpe289by5yZXBsYWNlKC8oXFxkKS0vZyxcIiQxLC1cIikucmVwbGFjZSgvXlxccysvZyxcIlwiKS5yZXBsYWNlKC9cXHMrJC9nLFwiXCIpLnJlcGxhY2UoL1xccysvZyxcIixcIikuc3BsaXQoXCIsXCIpLG9bMF18fG8uc2hpZnQoKTtmb3IodmFyIGE9MCxmPW8ubGVuZ3RoO2E8ZjthKyspb1thXT1NYXRoLnJvdW5kKDEwMCpvW2FdKTtzd2l0Y2godCl7Y2FzZVwibVwiOnJldHVybiBuKz1vWzBdLHIrPW9bMV0sXCJ0XCIrby5qb2luKFwiLFwiKTtjYXNlXCJNXCI6cmV0dXJuIG49b1swXSxyPW9bMV0sXCJtXCIrby5qb2luKFwiLFwiKTtjYXNlXCJsXCI6cmV0dXJuIG4rPW9bMF0scis9b1sxXSxcInJcIitvLmpvaW4oXCIsXCIpO2Nhc2VcIkxcIjpyZXR1cm4gbj1vWzBdLHI9b1sxXSxcImxcIitvLmpvaW4oXCIsXCIpO2Nhc2VcImhcIjpyZXR1cm4gbis9b1swXSxcInJcIitvWzBdK1wiLDBcIjtjYXNlXCJIXCI6cmV0dXJuIG49b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwidlwiOnJldHVybiByKz1vWzBdLFwicjAsXCIrb1swXTtjYXNlXCJWXCI6cmV0dXJuIHI9b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwiY1wiOnJldHVybiBpPW4rb1tvLmxlbmd0aC00XSxzPXIrb1tvLmxlbmd0aC0zXSxuKz1vW28ubGVuZ3RoLTJdLHIrPW9bby5sZW5ndGgtMV0sXCJ2XCIrby5qb2luKFwiLFwiKTtjYXNlXCJDXCI6cmV0dXJuIGk9b1tvLmxlbmd0aC00XSxzPW9bby5sZW5ndGgtM10sbj1vW28ubGVuZ3RoLTJdLHI9b1tvLmxlbmd0aC0xXSxcImNcIitvLmpvaW4oXCIsXCIpO2Nhc2VcInNcIjpyZXR1cm4gby51bnNoaWZ0KHItcyksby51bnNoaWZ0KG4taSksaT1uK29bby5sZW5ndGgtNF0scz1yK29bby5sZW5ndGgtM10sbis9b1tvLmxlbmd0aC0yXSxyKz1vW28ubGVuZ3RoLTFdLFwidlwiK28uam9pbihcIixcIik7Y2FzZVwiU1wiOnJldHVybiBvLnVuc2hpZnQocityLXMpLG8udW5zaGlmdChuK24taSksaT1vW28ubGVuZ3RoLTRdLHM9b1tvLmxlbmd0aC0zXSxuPW9bby5sZW5ndGgtMl0scj1vW28ubGVuZ3RoLTFdLFwiY1wiK28uam9pbihcIixcIil9cmV0dXJuXCJcIn0pLnJlcGxhY2UoL3ovZyxcImVcIil9LGp2bS5WTUxDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwib3ZhbFwiLGUsdCl9LGp2bS5pbmhlcml0cyhqdm0uVk1MQ2lyY2xlRWxlbWVudCxqdm0uVk1MU2hhcGVFbGVtZW50KSxqdm0uVk1MQ2lyY2xlRWxlbWVudC5wcm90b3R5cGUuYXBwbHlBdHRyPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcInJcIjp0aGlzLm5vZGUuc3R5bGUud2lkdGg9dCoyK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQqMitcInB4XCIsdGhpcy5hcHBseUF0dHIoXCJjeFwiLHRoaXMuZ2V0KFwiY3hcIil8fDApLHRoaXMuYXBwbHlBdHRyKFwiY3lcIix0aGlzLmdldChcImN5XCIpfHwwKTticmVhaztjYXNlXCJjeFwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUubGVmdD10LSh0aGlzLmdldChcInJcIil8fDApK1wicHhcIjticmVhaztjYXNlXCJjeVwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUudG9wPXQtKHRoaXMuZ2V0KFwiclwiKXx8MCkrXCJweFwiO2JyZWFrO2RlZmF1bHQ6anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MucHJvdG90eXBlLmFwcGx5QXR0ci5jYWxsKHRoaXMsZSx0KX19LGp2bS5WZWN0b3JDYW52YXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm1vZGU9d2luZG93LlNWR0FuZ2xlP1wic3ZnXCI6XCJ2bWxcIix0aGlzLm1vZGU9PVwic3ZnXCI/dGhpcy5pbXBsPW5ldyBqdm0uU1ZHQ2FudmFzRWxlbWVudChlLHQsbik6dGhpcy5pbXBsPW5ldyBqdm0uVk1MQ2FudmFzRWxlbWVudChlLHQsbiksdGhpcy5pbXBsfSxqdm0uU2ltcGxlU2NhbGU9ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZT1lfSxqdm0uU2ltcGxlU2NhbGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxqdm0uT3JkaW5hbFNjYWxlPWZ1bmN0aW9uKGUpe3RoaXMuc2NhbGU9ZX0sanZtLk9yZGluYWxTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NhbGVbZV19LGp2bS5OdW1lcmljU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zY2FsZT1bXSx0PXR8fFwibGluZWFyXCIsZSYmdGhpcy5zZXRTY2FsZShlKSx0JiZ0aGlzLnNldE5vcm1hbGl6ZUZ1bmN0aW9uKHQpLG4mJnRoaXMuc2V0TWluKG4pLHImJnRoaXMuc2V0TWF4KHIpfSxqdm0uTnVtZXJpY1NjYWxlLnByb3RvdHlwZT17c2V0TWluOmZ1bmN0aW9uKGUpe3RoaXMuY2xlYXJNaW5WYWx1ZT1lLHR5cGVvZiB0aGlzLm5vcm1hbGl6ZT09XCJmdW5jdGlvblwiP3RoaXMubWluVmFsdWU9dGhpcy5ub3JtYWxpemUoZSk6dGhpcy5taW5WYWx1ZT1lfSxzZXRNYXg6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhck1heFZhbHVlPWUsdHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCI/dGhpcy5tYXhWYWx1ZT10aGlzLm5vcm1hbGl6ZShlKTp0aGlzLm1heFZhbHVlPWV9LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1bZVt0XV19LHNldE5vcm1hbGl6ZUZ1bmN0aW9uOmZ1bmN0aW9uKGUpe2U9PT1cInBvbHlub21pYWxcIj90aGlzLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSwuMil9OmU9PT1cImxpbmVhclwiP2RlbGV0ZSB0aGlzLm5vcm1hbGl6ZTp0aGlzLm5vcm1hbGl6ZT1lLHRoaXMuc2V0TWluKHRoaXMuY2xlYXJNaW5WYWx1ZSksdGhpcy5zZXRNYXgodGhpcy5jbGVhck1heFZhbHVlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0wLHIsaT0wLHM7dHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCImJihlPXRoaXMubm9ybWFsaXplKGUpKTtmb3IoaT0wO2k8dGhpcy5zY2FsZS5sZW5ndGgtMTtpKyspcj10aGlzLnZlY3Rvckxlbmd0aCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSksdC5wdXNoKHIpLG4rPXI7cz0odGhpcy5tYXhWYWx1ZS10aGlzLm1pblZhbHVlKS9uO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXSo9cztpPTAsZS09dGhpcy5taW5WYWx1ZTt3aGlsZShlLXRbaV0+PTApZS09dFtpXSxpKys7cmV0dXJuIGk9PXRoaXMuc2NhbGUubGVuZ3RoLTE/ZT10aGlzLnZlY3RvclRvTnVtKHRoaXMuc2NhbGVbaV0pOmU9dGhpcy52ZWN0b3JUb051bSh0aGlzLnZlY3RvckFkZCh0aGlzLnNjYWxlW2ldLHRoaXMudmVjdG9yTXVsdCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSxlL3RbaV0pKSksZX0sdmVjdG9yVG9OdW06ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspdCs9TWF0aC5yb3VuZChlW25dKSpNYXRoLnBvdygyNTYsZS5sZW5ndGgtbi0xKTtyZXR1cm4gdH0sdmVjdG9yU3VidHJhY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1lW3JdLXRbcl07cmV0dXJuIG59LHZlY3RvckFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0rdFtyXTtyZXR1cm4gbn0sdmVjdG9yTXVsdDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0qdDtyZXR1cm4gbn0sdmVjdG9yTGVuZ3RoOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl0qZVtuXTtyZXR1cm4gTWF0aC5zcXJ0KHQpfX0sanZtLkNvbG9yU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7anZtLkNvbG9yU2NhbGUucGFyZW50Q2xhc3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLkNvbG9yU2NhbGUsanZtLk51bWVyaWNTY2FsZSksanZtLkNvbG9yU2NhbGUucHJvdG90eXBlLnNldFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1qdm0uQ29sb3JTY2FsZS5yZ2JUb0FycmF5KGVbdF0pfSxqdm0uQ29sb3JTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGp2bS5Db2xvclNjYWxlLm51bVRvUmdiKGp2bS5Db2xvclNjYWxlLnBhcmVudENsYXNzLnByb3RvdHlwZS5nZXRWYWx1ZS5jYWxsKHRoaXMsZSkpfSxqdm0uQ29sb3JTY2FsZS5hcnJheVRvUmdiPWZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiLG4scjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKW49ZVtyXS50b1N0cmluZygxNiksdCs9bi5sZW5ndGg9PTE/XCIwXCIrbjpuO3JldHVybiB0fSxqdm0uQ29sb3JTY2FsZS5udW1Ub1JnYj1mdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoMTYpO3doaWxlKGUubGVuZ3RoPDYpZT1cIjBcIitlO3JldHVyblwiI1wiK2V9LGp2bS5Db2xvclNjYWxlLnJnYlRvQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5zdWJzdHIoMSksW3BhcnNlSW50KGUuc3Vic3RyKDAsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDIsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDQsMiksMTYpXX0sanZtLkRhdGFTZXJpZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjtlPWV8fHt9LGUuYXR0cmlidXRlPWUuYXR0cmlidXRlfHxcImZpbGxcIix0aGlzLmVsZW1lbnRzPXQsdGhpcy5wYXJhbXM9ZSxlLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyhlLmF0dHJpYnV0ZXMpLGp2bS4kLmlzQXJyYXkoZS5zY2FsZSk/KG49ZS5hdHRyaWJ1dGU9PT1cImZpbGxcInx8ZS5hdHRyaWJ1dGU9PT1cInN0cm9rZVwiP2p2bS5Db2xvclNjYWxlOmp2bS5OdW1lcmljU2NhbGUsdGhpcy5zY2FsZT1uZXcgbihlLnNjYWxlLGUubm9ybWFsaXplRnVuY3Rpb24sZS5taW4sZS5tYXgpKTplLnNjYWxlP3RoaXMuc2NhbGU9bmV3IGp2bS5PcmRpbmFsU2NhbGUoZS5zY2FsZSk6dGhpcy5zY2FsZT1uZXcganZtLlNpbXBsZVNjYWxlKGUuc2NhbGUpLHRoaXMudmFsdWVzPWUudmFsdWVzfHx7fSx0aGlzLnNldFZhbHVlcyh0aGlzLnZhbHVlcyl9LGp2bS5EYXRhU2VyaWVzLnByb3RvdHlwZT17c2V0QXR0cmlidXRlczpmdW5jdGlvbihlLHQpe3ZhciBuPWUscjtpZih0eXBlb2YgZT09XCJzdHJpbmdcIil0aGlzLmVsZW1lbnRzW2VdJiZ0aGlzLmVsZW1lbnRzW2VdLnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSx0KTtlbHNlIGZvcihyIGluIG4pdGhpcy5lbGVtZW50c1tyXSYmdGhpcy5lbGVtZW50c1tyXS5lbGVtZW50LnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSxuW3JdKX0sc2V0VmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NSU5fVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLHIsaSxzPXt9O2lmKHRoaXMuc2NhbGUgaW5zdGFuY2VvZiBqdm0uT3JkaW5hbFNjYWxlfHx0aGlzLnNjYWxlIGluc3RhbmNlb2YganZtLlNpbXBsZVNjYWxlKWZvcihpIGluIGUpZVtpXT9zW2ldPXRoaXMuc2NhbGUuZ2V0VmFsdWUoZVtpXSk6c1tpXT10aGlzLmVsZW1lbnRzW2ldLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdO2Vsc2V7aWYoIXRoaXMucGFyYW1zLm1pbnx8IXRoaXMucGFyYW1zLm1heCl7Zm9yKGkgaW4gZSlyPXBhcnNlRmxvYXQoZVtpXSkscj50JiYodD1lW2ldKSxyPG4mJihuPXIpO3RoaXMucGFyYW1zLm1pbnx8dGhpcy5zY2FsZS5zZXRNaW4obiksdGhpcy5wYXJhbXMubWF4fHx0aGlzLnNjYWxlLnNldE1heCh0KSx0aGlzLnBhcmFtcy5taW49bix0aGlzLnBhcmFtcy5tYXg9dH1mb3IoaSBpbiBlKXI9cGFyc2VGbG9hdChlW2ldKSxpc05hTihyKT9zW2ldPXRoaXMuZWxlbWVudHNbaV0uZWxlbWVudC5zdHlsZS5pbml0aWFsW3RoaXMucGFyYW1zLmF0dHJpYnV0ZV06c1tpXT10aGlzLnNjYWxlLmdldFZhbHVlKHIpfXRoaXMuc2V0QXR0cmlidXRlcyhzKSxqdm0uJC5leHRlbmQodGhpcy52YWx1ZXMsZSl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGUsdD17fTtmb3IoZSBpbiB0aGlzLnZhbHVlcyl0aGlzLmVsZW1lbnRzW2VdJiYodFtlXT10aGlzLmVsZW1lbnRzW2VdLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdKTt0aGlzLnNldEF0dHJpYnV0ZXModCksdGhpcy52YWx1ZXM9e319LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuc2NhbGUuc2V0U2NhbGUoZSksdGhpcy52YWx1ZXMmJnRoaXMuc2V0VmFsdWVzKHRoaXMudmFsdWVzKX0sc2V0Tm9ybWFsaXplRnVuY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZS5zZXROb3JtYWxpemVGdW5jdGlvbihlKSx0aGlzLnZhbHVlcyYmdGhpcy5zZXRWYWx1ZXModGhpcy52YWx1ZXMpfX0sanZtLlByb2o9e2RlZ1JhZDoxODAvTWF0aC5QSSxyYWREZWc6TWF0aC5QSS8xODAscmFkaXVzOjYzODEzNzIsc2duOmZ1bmN0aW9uKGUpe3JldHVybiBlPjA/MTplPDA/LTE6ZX0sbWlsbDpmdW5jdGlvbihlLHQsbil7cmV0dXJue3g6dGhpcy5yYWRpdXMqKHQtbikqdGhpcy5yYWREZWcseTotdGhpcy5yYWRpdXMqTWF0aC5sb2coTWF0aC50YW4oKDQ1Ky40KmUpKnRoaXMucmFkRGVnKSkvLjh9fSxtaWxsX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCp0L3RoaXMucmFkaXVzKSktNSpNYXRoLlBJLzgpKnRoaXMuZGVnUmFkLGxuZzoobip0aGlzLnJhZERlZytlL3RoaXMucmFkaXVzKSp0aGlzLmRlZ1JhZH19LG1lcmM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt4OnRoaXMucmFkaXVzKih0LW4pKnRoaXMucmFkRGVnLHk6LXRoaXMucmFkaXVzKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtlKk1hdGguUEkvMzYwKSl9fSxtZXJjX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5leHAodC90aGlzLnJhZGl1cykpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihuKnRoaXMucmFkRGVnK2UvdGhpcy5yYWRpdXMpKnRoaXMuZGVnUmFkfX0sYWVhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wLGk9bip0aGlzLnJhZERlZyxzPTI5LjUqdGhpcy5yYWREZWcsbz00NS41KnRoaXMucmFkRGVnLHU9ZSp0aGlzLnJhZERlZyxhPXQqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4ocykrTWF0aC5zaW4obykpLzIsbD1NYXRoLmNvcyhzKSpNYXRoLmNvcyhzKSsyKmYqTWF0aC5zaW4ocyksYz1mKihhLWkpLGg9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHUpKS9mLHA9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHIpKS9mO3JldHVybnt4OmgqTWF0aC5zaW4oYykqdGhpcy5yYWRpdXMseTotKHAtaCpNYXRoLmNvcyhjKSkqdGhpcy5yYWRpdXN9fSxhZWFfaW52OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lL3RoaXMucmFkaXVzLGk9dC90aGlzLnJhZGl1cyxzPTAsbz1uKnRoaXMucmFkRGVnLHU9MjkuNSp0aGlzLnJhZERlZyxhPTQ1LjUqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4odSkrTWF0aC5zaW4oYSkpLzIsbD1NYXRoLmNvcyh1KSpNYXRoLmNvcyh1KSsyKmYqTWF0aC5zaW4odSksYz1NYXRoLnNxcnQobC0yKmYqTWF0aC5zaW4ocykpL2YsaD1NYXRoLnNxcnQocipyKyhjLWkpKihjLWkpKSxwPU1hdGguYXRhbihyLyhjLWkpKTtyZXR1cm57bGF0Ok1hdGguYXNpbigobC1oKmgqZipmKS8oMipmKSkqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fSxsY2M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT1uKnRoaXMucmFkRGVnLHM9dCp0aGlzLnJhZERlZyxvPTMzKnRoaXMucmFkRGVnLHU9NDUqdGhpcy5yYWREZWcsYT1lKnRoaXMucmFkRGVnLGY9TWF0aC5sb2coTWF0aC5jb3MobykqKDEvTWF0aC5jb3ModSkpKS9NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSooMS9NYXRoLnRhbihNYXRoLlBJLzQrby8yKSkpLGw9TWF0aC5jb3MobykqTWF0aC5wb3coTWF0aC50YW4oTWF0aC5QSS80K28vMiksZikvZixjPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrYS8yKSxmKSxoPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrci8yKSxmKTtyZXR1cm57eDpjKk1hdGguc2luKGYqKHMtaSkpKnRoaXMucmFkaXVzLHk6LShoLWMqTWF0aC5jb3MoZioocy1pKSkpKnRoaXMucmFkaXVzfX0sbGNjX2ludjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS90aGlzLnJhZGl1cyxpPXQvdGhpcy5yYWRpdXMscz0wLG89bip0aGlzLnJhZERlZyx1PTMzKnRoaXMucmFkRGVnLGE9NDUqdGhpcy5yYWREZWcsZj1NYXRoLmxvZyhNYXRoLmNvcyh1KSooMS9NYXRoLmNvcyhhKSkpL01hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKigxL01hdGgudGFuKE1hdGguUEkvNCt1LzIpKSksbD1NYXRoLmNvcyh1KSpNYXRoLnBvdyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSxmKS9mLGM9bCpNYXRoLnBvdygxL01hdGgudGFuKE1hdGguUEkvNCtzLzIpLGYpLGg9dGhpcy5zZ24oZikqTWF0aC5zcXJ0KHIqcisoYy1pKSooYy1pKSkscD1NYXRoLmF0YW4oci8oYy1pKSk7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5wb3cobC9oLDEvZikpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fX0sanZtLldvcmxkTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbjt0aGlzLnBhcmFtcz1qdm0uJC5leHRlbmQoITAse30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXMsZSk7aWYoIWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0pdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdCB0byB1c2UgbWFwIHdoaWNoIHdhcyBub3QgbG9hZGVkOiBcIit0aGlzLnBhcmFtcy5tYXApO3RoaXMubWFwRGF0YT1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLHRoaXMubWFya2Vycz17fSx0aGlzLnJlZ2lvbnM9e30sdGhpcy5yZWdpb25zQ29sb3JzPXt9LHRoaXMucmVnaW9uc0RhdGE9e30sdGhpcy5jb250YWluZXI9anZtLiQoXCI8ZGl2PlwiKS5jc3Moe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIn0pLmFkZENsYXNzKFwianZlY3Rvcm1hcC1jb250YWluZXJcIiksdGhpcy5wYXJhbXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXIuZGF0YShcIm1hcE9iamVjdFwiLHRoaXMpLHRoaXMuY29udGFpbmVyLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSx0aGlzLmRlZmF1bHRXaWR0aD10aGlzLm1hcERhdGEud2lkdGgsdGhpcy5kZWZhdWx0SGVpZ2h0PXRoaXMubWFwRGF0YS5oZWlnaHQsdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IodGhpcy5wYXJhbXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLm9uUmVzaXplPWZ1bmN0aW9uKCl7dC5zZXRTaXplKCl9LGp2bS4kKHdpbmRvdykucmVzaXplKHRoaXMub25SZXNpemUpO2ZvcihuIGluIGp2bS5Xb3JsZE1hcC5hcGlFdmVudHMpdGhpcy5wYXJhbXNbbl0mJnRoaXMuY29udGFpbmVyLmJpbmQoanZtLldvcmxkTWFwLmFwaUV2ZW50c1tuXStcIi5qdmVjdG9ybWFwXCIsdGhpcy5wYXJhbXNbbl0pO3RoaXMuY2FudmFzPW5ldyBqdm0uVmVjdG9yQ2FudmFzKHRoaXMuY29udGFpbmVyWzBdLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLFwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fHdpbmRvdy5Eb2N1bWVudFRvdWNoJiZkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2g/dGhpcy5wYXJhbXMuYmluZFRvdWNoRXZlbnRzJiZ0aGlzLmJpbmRDb250YWluZXJUb3VjaEV2ZW50cygpOnRoaXMuYmluZENvbnRhaW5lckV2ZW50cygpLHRoaXMuYmluZEVsZW1lbnRFdmVudHMoKSx0aGlzLmNyZWF0ZUxhYmVsKCksdGhpcy5wYXJhbXMuem9vbUJ1dHRvbnMmJnRoaXMuYmluZFpvb21CdXR0b25zKCksdGhpcy5jcmVhdGVSZWdpb25zKCksdGhpcy5jcmVhdGVNYXJrZXJzKHRoaXMucGFyYW1zLm1hcmtlcnN8fHt9KSx0aGlzLnNldFNpemUoKSx0aGlzLnBhcmFtcy5mb2N1c09uJiYodHlwZW9mIHRoaXMucGFyYW1zLmZvY3VzT249PVwib2JqZWN0XCI/dGhpcy5zZXRGb2N1cy5jYWxsKHRoaXMsdGhpcy5wYXJhbXMuZm9jdXNPbi5zY2FsZSx0aGlzLnBhcmFtcy5mb2N1c09uLngsdGhpcy5wYXJhbXMuZm9jdXNPbi55KTp0aGlzLnNldEZvY3VzLmNhbGwodGhpcyx0aGlzLnBhcmFtcy5mb2N1c09uKSksdGhpcy5wYXJhbXMuc2VsZWN0ZWRSZWdpb25zJiZ0aGlzLnNldFNlbGVjdGVkUmVnaW9ucyh0aGlzLnBhcmFtcy5zZWxlY3RlZFJlZ2lvbnMpLHRoaXMucGFyYW1zLnNlbGVjdGVkTWFya2VycyYmdGhpcy5zZXRTZWxlY3RlZE1hcmtlcnModGhpcy5wYXJhbXMuc2VsZWN0ZWRNYXJrZXJzKSx0aGlzLnBhcmFtcy5zZXJpZXMmJnRoaXMuY3JlYXRlU2VyaWVzKCl9LGp2bS5Xb3JsZE1hcC5wcm90b3R5cGU9e3RyYW5zWDowLHRyYW5zWTowLHNjYWxlOjEsYmFzZVRyYW5zWDowLGJhc2VUcmFuc1k6MCxiYXNlU2NhbGU6MSx3aWR0aDowLGhlaWdodDowLHNldEJhY2tncm91bmRDb2xvcjpmdW5jdGlvbihlKXt0aGlzLmNvbnRhaW5lci5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsZSl9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZVNjYWxlO3RoaXMud2lkdGgvdGhpcy5oZWlnaHQ+dGhpcy5kZWZhdWx0V2lkdGgvdGhpcy5kZWZhdWx0SGVpZ2h0Pyh0aGlzLmJhc2VTY2FsZT10aGlzLmhlaWdodC90aGlzLmRlZmF1bHRIZWlnaHQsdGhpcy5iYXNlVHJhbnNYPU1hdGguYWJzKHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5iYXNlU2NhbGUpLygyKnRoaXMuYmFzZVNjYWxlKSk6KHRoaXMuYmFzZVNjYWxlPXRoaXMud2lkdGgvdGhpcy5kZWZhdWx0V2lkdGgsdGhpcy5iYXNlVHJhbnNZPU1hdGguYWJzKHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLmJhc2VTY2FsZSkvKDIqdGhpcy5iYXNlU2NhbGUpKSx0aGlzLnNjYWxlKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNYKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNZKj10aGlzLmJhc2VTY2FsZS9lfSxzZXRTaXplOmZ1bmN0aW9uKCl7dGhpcy53aWR0aD10aGlzLmNvbnRhaW5lci53aWR0aCgpLHRoaXMuaGVpZ2h0PXRoaXMuY29udGFpbmVyLmhlaWdodCgpLHRoaXMucmVzaXplKCksdGhpcy5jYW52YXMuc2V0U2l6ZSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LHJlc2V0OmZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoZSBpbiB0aGlzLnNlcmllcylmb3IodD0wO3Q8dGhpcy5zZXJpZXNbZV0ubGVuZ3RoO3QrKyl0aGlzLnNlcmllc1tlXVt0XS5jbGVhcigpO3RoaXMuc2NhbGU9dGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1g9dGhpcy5iYXNlVHJhbnNYLHRoaXMudHJhbnNZPXRoaXMuYmFzZVRyYW5zWSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGFwcGx5VHJhbnNmb3JtOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7dGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZTw9dGhpcy53aWR0aD8oZT0odGhpcy53aWR0aC10aGlzLmRlZmF1bHRXaWR0aCp0aGlzLnNjYWxlKS8oMip0aGlzLnNjYWxlKSxuPSh0aGlzLndpZHRoLXRoaXMuZGVmYXVsdFdpZHRoKnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKTooZT0wLG49KHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZSkvdGhpcy5zY2FsZSksdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGU8PXRoaXMuaGVpZ2h0Pyh0PSh0aGlzLmhlaWdodC10aGlzLmRlZmF1bHRIZWlnaHQqdGhpcy5zY2FsZSkvKDIqdGhpcy5zY2FsZSkscj0odGhpcy5oZWlnaHQtdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKToodD0wLHI9KHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLnNjYWxlKS90aGlzLnNjYWxlKSx0aGlzLnRyYW5zWT50P3RoaXMudHJhbnNZPXQ6dGhpcy50cmFuc1k8ciYmKHRoaXMudHJhbnNZPXIpLHRoaXMudHJhbnNYPmU/dGhpcy50cmFuc1g9ZTp0aGlzLnRyYW5zWDxuJiYodGhpcy50cmFuc1g9biksdGhpcy5jYW52YXMuYXBwbHlUcmFuc2Zvcm1QYXJhbXModGhpcy5zY2FsZSx0aGlzLnRyYW5zWCx0aGlzLnRyYW5zWSksdGhpcy5tYXJrZXJzJiZ0aGlzLnJlcG9zaXRpb25NYXJrZXJzKCksdGhpcy5jb250YWluZXIudHJpZ2dlcihcInZpZXdwb3J0Q2hhbmdlXCIsW3RoaXMuc2NhbGUvdGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1gsdGhpcy50cmFuc1ldKX0sYmluZENvbnRhaW5lckV2ZW50czpmdW5jdGlvbigpe3ZhciBlPSExLHQsbixyPXRoaXM7dGhpcy5jb250YWluZXIubW91c2Vtb3ZlKGZ1bmN0aW9uKGkpe3JldHVybiBlJiYoci50cmFuc1gtPSh0LWkucGFnZVgpL3Iuc2NhbGUsci50cmFuc1ktPShuLWkucGFnZVkpL3Iuc2NhbGUsci5hcHBseVRyYW5zZm9ybSgpLHQ9aS5wYWdlWCxuPWkucGFnZVkpLCExfSkubW91c2Vkb3duKGZ1bmN0aW9uKHIpe3JldHVybiBlPSEwLHQ9ci5wYWdlWCxuPXIucGFnZVksITF9KSxqdm0uJChcImJvZHlcIikubW91c2V1cChmdW5jdGlvbigpe2U9ITF9KSx0aGlzLnBhcmFtcy56b29tT25TY3JvbGwmJnRoaXMuY29udGFpbmVyLm1vdXNld2hlZWwoZnVuY3Rpb24oZSx0LG4saSl7dmFyIHM9anZtLiQoci5jb250YWluZXIpLm9mZnNldCgpLG89ZS5wYWdlWC1zLmxlZnQsdT1lLnBhZ2VZLXMudG9wLGE9TWF0aC5wb3coMS4zLGkpO3IubGFiZWwuaGlkZSgpLHIuc2V0U2NhbGUoci5zY2FsZSphLG8sdSksZS5wcmV2ZW50RGVmYXVsdCgpfSl9LGJpbmRDb250YWluZXJUb3VjaEV2ZW50czpmdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLHIsaSxzLG8sdSxhPWZ1bmN0aW9uKGEpe3ZhciBmPWEub3JpZ2luYWxFdmVudC50b3VjaGVzLGwsYyxoLHA7YS50eXBlPT1cInRvdWNoc3RhcnRcIiYmKHU9MCksZi5sZW5ndGg9PTE/KHU9PTEmJihoPW4udHJhbnNYLHA9bi50cmFuc1ksbi50cmFuc1gtPShyLWZbMF0ucGFnZVgpL24uc2NhbGUsbi50cmFuc1ktPShpLWZbMF0ucGFnZVkpL24uc2NhbGUsbi5hcHBseVRyYW5zZm9ybSgpLG4ubGFiZWwuaGlkZSgpLChoIT1uLnRyYW5zWHx8cCE9bi50cmFuc1kpJiZhLnByZXZlbnREZWZhdWx0KCkpLHI9ZlswXS5wYWdlWCxpPWZbMF0ucGFnZVkpOmYubGVuZ3RoPT0yJiYodT09Mj8oYz1NYXRoLnNxcnQoTWF0aC5wb3coZlswXS5wYWdlWC1mWzFdLnBhZ2VYLDIpK01hdGgucG93KGZbMF0ucGFnZVktZlsxXS5wYWdlWSwyKSkvdCxuLnNldFNjYWxlKGUqYyxzLG8pLG4ubGFiZWwuaGlkZSgpLGEucHJldmVudERlZmF1bHQoKSk6KGw9anZtLiQobi5jb250YWluZXIpLm9mZnNldCgpLGZbMF0ucGFnZVg+ZlsxXS5wYWdlWD9zPWZbMV0ucGFnZVgrKGZbMF0ucGFnZVgtZlsxXS5wYWdlWCkvMjpzPWZbMF0ucGFnZVgrKGZbMV0ucGFnZVgtZlswXS5wYWdlWCkvMixmWzBdLnBhZ2VZPmZbMV0ucGFnZVk/bz1mWzFdLnBhZ2VZKyhmWzBdLnBhZ2VZLWZbMV0ucGFnZVkpLzI6bz1mWzBdLnBhZ2VZKyhmWzFdLnBhZ2VZLWZbMF0ucGFnZVkpLzIscy09bC5sZWZ0LG8tPWwudG9wLGU9bi5zY2FsZSx0PU1hdGguc3FydChNYXRoLnBvdyhmWzBdLnBhZ2VYLWZbMV0ucGFnZVgsMikrTWF0aC5wb3coZlswXS5wYWdlWS1mWzFdLnBhZ2VZLDIpKSkpLHU9Zi5sZW5ndGh9O2p2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2hzdGFydFwiLGEpLGp2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2htb3ZlXCIsYSl9LGJpbmRFbGVtZW50RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0O3RoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbigpe3Q9ITB9KSx0aGlzLmNvbnRhaW5lci5kZWxlZ2F0ZShcIltjbGFzc349J2p2ZWN0b3JtYXAtZWxlbWVudCddXCIsXCJtb3VzZW92ZXIgbW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLGk9ci5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIscz1pPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksbz1pPT1cInJlZ2lvblwiP2UucmVnaW9uc1tzXS5lbGVtZW50OmUubWFya2Vyc1tzXS5lbGVtZW50LHU9aT09XCJyZWdpb25cIj9lLm1hcERhdGEucGF0aHNbc10ubmFtZTplLm1hcmtlcnNbc10uY29uZmlnLm5hbWV8fFwiXCIsYT1qdm0uJC5FdmVudChpK1wiTGFiZWxTaG93Lmp2ZWN0b3JtYXBcIiksZj1qdm0uJC5FdmVudChpK1wiT3Zlci5qdmVjdG9ybWFwXCIpO3QudHlwZT09XCJtb3VzZW92ZXJcIj8oZS5jb250YWluZXIudHJpZ2dlcihmLFtzXSksZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8by5zZXRIb3ZlcmVkKCEwKSxlLmxhYmVsLnRleHQodSksZS5jb250YWluZXIudHJpZ2dlcihhLFtlLmxhYmVsLHNdKSxhLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZS5sYWJlbC5zaG93KCksZS5sYWJlbFdpZHRoPWUubGFiZWwud2lkdGgoKSxlLmxhYmVsSGVpZ2h0PWUubGFiZWwuaGVpZ2h0KCkpKTooby5zZXRIb3ZlcmVkKCExKSxlLmxhYmVsLmhpZGUoKSxlLmNvbnRhaW5lci50cmlnZ2VyKGkrXCJPdXQuanZlY3Rvcm1hcFwiLFtzXSkpfSksdGhpcy5jb250YWluZXIuZGVsZWdhdGUoXCJbY2xhc3N+PSdqdmVjdG9ybWFwLWVsZW1lbnQnXVwiLFwibW91c2Vkb3duXCIsZnVuY3Rpb24oZSl7dD0hMX0pLHRoaXMuY29udGFpbmVyLmRlbGVnYXRlKFwiW2NsYXNzfj0nanZlY3Rvcm1hcC1lbGVtZW50J11cIixcIm1vdXNldXBcIixmdW5jdGlvbihuKXt2YXIgcj10aGlzLGk9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLHM9aS5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIsbz1zPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksdT1qdm0uJC5FdmVudChzK1wiQ2xpY2suanZlY3Rvcm1hcFwiKSxhPXM9PVwicmVnaW9uXCI/ZS5yZWdpb25zW29dLmVsZW1lbnQ6ZS5tYXJrZXJzW29dLmVsZW1lbnQ7aWYoIXQpe2UuY29udGFpbmVyLnRyaWdnZXIodSxbb10pO2lmKHM9PT1cInJlZ2lvblwiJiZlLnBhcmFtcy5yZWdpb25zU2VsZWN0YWJsZXx8cz09PVwibWFya2VyXCImJmUucGFyYW1zLm1hcmtlcnNTZWxlY3RhYmxlKXUuaXNEZWZhdWx0UHJldmVudGVkKCl8fChlLnBhcmFtc1tzK1wic1NlbGVjdGFibGVPbmVcIl0mJmUuY2xlYXJTZWxlY3RlZChzK1wic1wiKSxhLnNldFNlbGVjdGVkKCFhLmlzU2VsZWN0ZWQpKX19KX0sYmluZFpvb21CdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbWluXCIpLnRleHQoXCIrXCIpLmFwcGVuZFRvKHRoaXMuY29udGFpbmVyKSxqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbW91dFwiKS5odG1sKFwiJiN4MjIxMjtcIikuYXBwZW5kVG8odGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyLmZpbmQoXCIuanZlY3Rvcm1hcC16b29taW5cIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUqZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSksdGhpcy5jb250YWluZXIuZmluZChcIi5qdmVjdG9ybWFwLXpvb21vdXRcIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUvZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSl9LGNyZWF0ZUxhYmVsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhYmVsPWp2bS4kKFwiPGRpdi8+XCIpLmFkZENsYXNzKFwianZlY3Rvcm1hcC1sYWJlbFwiKS5hcHBlbmRUbyhqdm0uJChcImJvZHlcIikpLHRoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbih0KXt2YXIgbj10LnBhZ2VYLTE1LWUubGFiZWxXaWR0aCxyPXQucGFnZVktMTUtZS5sYWJlbEhlaWdodDtuPDUmJihuPXQucGFnZVgrMTUpLHI8NSYmKHI9dC5wYWdlWSsxNSksZS5sYWJlbC5pcyhcIjp2aXNpYmxlXCIpJiZlLmxhYmVsLmNzcyh7bGVmdDpuLHRvcDpyfSl9KX0sc2V0U2NhbGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGkscz1qdm0uJC5FdmVudChcInpvb20uanZlY3Rvcm1hcFwiKTtlPnRoaXMucGFyYW1zLnpvb21NYXgqdGhpcy5iYXNlU2NhbGU/ZT10aGlzLnBhcmFtcy56b29tTWF4KnRoaXMuYmFzZVNjYWxlOmU8dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSYmKGU9dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSksdHlwZW9mIHQhPVwidW5kZWZpbmVkXCImJnR5cGVvZiBuIT1cInVuZGVmaW5lZFwiJiYoaT1lL3RoaXMuc2NhbGUscj8odGhpcy50cmFuc1g9dCt0aGlzLmRlZmF1bHRXaWR0aCoodGhpcy53aWR0aC8odGhpcy5kZWZhdWx0V2lkdGgqZSkpLzIsdGhpcy50cmFuc1k9bit0aGlzLmRlZmF1bHRIZWlnaHQqKHRoaXMuaGVpZ2h0Lyh0aGlzLmRlZmF1bHRIZWlnaHQqZSkpLzIpOih0aGlzLnRyYW5zWC09KGktMSkvZSp0LHRoaXMudHJhbnNZLT0oaS0xKS9lKm4pKSx0aGlzLnNjYWxlPWUsdGhpcy5hcHBseVRyYW5zZm9ybSgpLHRoaXMuY29udGFpbmVyLnRyaWdnZXIocyxbZS90aGlzLmJhc2VTY2FsZV0pfSxzZXRGb2N1czpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG8sdTtpZihqdm0uJC5pc0FycmF5KGUpfHx0aGlzLnJlZ2lvbnNbZV0pe2p2bS4kLmlzQXJyYXkoZSk/bz1lOm89W2VdO2Zvcih1PTA7dTxvLmxlbmd0aDt1KyspdGhpcy5yZWdpb25zW29bdV1dJiYoaT10aGlzLnJlZ2lvbnNbb1t1XV0uZWxlbWVudC5nZXRCQm94KCksaSYmKHR5cGVvZiByPT1cInVuZGVmaW5lZFwiP3I9aToocz17eDpNYXRoLm1pbihyLngsaS54KSx5Ok1hdGgubWluKHIueSxpLnkpLHdpZHRoOk1hdGgubWF4KHIueCtyLndpZHRoLGkueCtpLndpZHRoKS1NYXRoLm1pbihyLngsaS54KSxoZWlnaHQ6TWF0aC5tYXgoci55K3IuaGVpZ2h0LGkueStpLmhlaWdodCktTWF0aC5taW4oci55LGkueSl9LHI9cykpKTt0aGlzLnNldFNjYWxlKE1hdGgubWluKHRoaXMud2lkdGgvci53aWR0aCx0aGlzLmhlaWdodC9yLmhlaWdodCksLShyLngrci53aWR0aC8yKSwtKHIueStyLmhlaWdodC8yKSwhMCl9ZWxzZSBlKj10aGlzLmJhc2VTY2FsZSx0aGlzLnNldFNjYWxlKGUsLXQqdGhpcy5kZWZhdWx0V2lkdGgsLW4qdGhpcy5kZWZhdWx0SGVpZ2h0LCEwKX0sZ2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodCBpbiB0aGlzW2VdKXRoaXNbZV1bdF0uZWxlbWVudC5pc1NlbGVjdGVkJiZuLnB1c2godCk7cmV0dXJuIG59LGdldFNlbGVjdGVkUmVnaW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNlbGVjdGVkKFwicmVnaW9uc1wiKX0sZ2V0U2VsZWN0ZWRNYXJrZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbihlLHQpe3ZhciBuO3R5cGVvZiB0IT1cIm9iamVjdFwiJiYodD1bdF0pO2lmKGp2bS4kLmlzQXJyYXkodCkpZm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzW2VdW3Rbbl1dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoITApO2Vsc2UgZm9yKG4gaW4gdCl0aGlzW2VdW25dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoISF0W25dKX0sc2V0U2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U2VsZWN0ZWQoXCJyZWdpb25zXCIsZSl9LHNldFNlbGVjdGVkTWFya2VyczpmdW5jdGlvbihlKXt0aGlzLnNldFNlbGVjdGVkKFwibWFya2Vyc1wiLGUpfSxjbGVhclNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49dGhpcy5nZXRTZWxlY3RlZChlKSxyO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspdFtuW3JdXT0hMTt0aGlzLnNldFNlbGVjdGVkKGUsdCl9LGNsZWFyU2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKCl7dGhpcy5jbGVhclNlbGVjdGVkKFwicmVnaW9uc1wiKX0sY2xlYXJTZWxlY3RlZE1hcmtlcnM6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyU2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxnZXRNYXBPYmplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZ2V0UmVnaW9uTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBEYXRhLnBhdGhzW2VdLm5hbWV9LGNyZWF0ZVJlZ2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG49dGhpcztmb3IoZSBpbiB0aGlzLm1hcERhdGEucGF0aHMpdD10aGlzLmNhbnZhcy5hZGRQYXRoKHtkOnRoaXMubWFwRGF0YS5wYXRoc1tlXS5wYXRoLFwiZGF0YS1jb2RlXCI6ZX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLnJlZ2lvblN0eWxlKSksanZtLiQodC5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe24uY29udGFpbmVyLnRyaWdnZXIoXCJyZWdpb25TZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIiksdCxuLmdldFNlbGVjdGVkUmVnaW9ucygpXSl9KSx0LmFkZENsYXNzKFwianZlY3Rvcm1hcC1yZWdpb24ganZlY3Rvcm1hcC1lbGVtZW50XCIpLHRoaXMucmVnaW9uc1tlXT17ZWxlbWVudDp0LGNvbmZpZzp0aGlzLm1hcERhdGEucGF0aHNbZV19fSxjcmVhdGVNYXJrZXJzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbz10aGlzO3RoaXMubWFya2Vyc0dyb3VwPXRoaXMubWFya2Vyc0dyb3VwfHx0aGlzLmNhbnZhcy5hZGRHcm91cCgpO2lmKGp2bS4kLmlzQXJyYXkoZSkpe3M9ZS5zbGljZSgpLGU9e307Zm9yKHQ9MDt0PHMubGVuZ3RoO3QrKyllW3RdPXNbdF19Zm9yKHQgaW4gZSlpPWVbdF1pbnN0YW5jZW9mIEFycmF5P3tsYXRMbmc6ZVt0XX06ZVt0XSxyPXRoaXMuZ2V0TWFya2VyUG9zaXRpb24oaSksciE9PSExJiYobj10aGlzLmNhbnZhcy5hZGRDaXJjbGUoe1wiZGF0YS1pbmRleFwiOnQsY3g6ci54LGN5OnIueX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLm1hcmtlclN0eWxlLHtpbml0aWFsOmkuc3R5bGV8fHt9fSksdGhpcy5tYXJrZXJzR3JvdXApLG4uYWRkQ2xhc3MoXCJqdmVjdG9ybWFwLW1hcmtlciBqdmVjdG9ybWFwLWVsZW1lbnRcIiksanZtLiQobi5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe28uY29udGFpbmVyLnRyaWdnZXIoXCJtYXJrZXJTZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWluZGV4XCIpLHQsby5nZXRTZWxlY3RlZE1hcmtlcnMoKV0pfSksdGhpcy5tYXJrZXJzW3RdJiZ0aGlzLnJlbW92ZU1hcmtlcnMoW3RdKSx0aGlzLm1hcmtlcnNbdF09e2VsZW1lbnQ6bixjb25maWc6aX0pfSxyZXBvc2l0aW9uTWFya2VyczpmdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKGUgaW4gdGhpcy5tYXJrZXJzKXQ9dGhpcy5nZXRNYXJrZXJQb3NpdGlvbih0aGlzLm1hcmtlcnNbZV0uY29uZmlnKSx0IT09ITEmJnRoaXMubWFya2Vyc1tlXS5lbGVtZW50LnNldFN0eWxlKHtjeDp0LngsY3k6dC55fSl9LGdldE1hcmtlclBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBqdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24/dGhpcy5sYXRMbmdUb1BvaW50LmFwcGx5KHRoaXMsZS5sYXRMbmd8fFswLDBdKTp7eDplLmNvb3Jkc1swXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNYKnRoaXMuc2NhbGUseTplLmNvb3Jkc1sxXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNZKnRoaXMuc2NhbGV9fSxhZGRNYXJrZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9LGk9W10scyxvLG49bnx8W107cltlXT10O2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspcz17fSxzW2VdPW5bb10saS5wdXNoKHMpO3RoaXMuYWRkTWFya2VycyhyLGkpfSxhZGRNYXJrZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG47dD10fHxbXSx0aGlzLmNyZWF0ZU1hcmtlcnMoZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLnNlcmllcy5tYXJrZXJzW25dLnNldFZhbHVlcyh0W25dfHx7fSl9LHJlbW92ZU1hcmtlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLm1hcmtlcnNbZVt0XV0uZWxlbWVudC5yZW1vdmUoKSxkZWxldGUgdGhpcy5tYXJrZXJzW2VbdF1dfSxyZW1vdmVBbGxNYXJrZXJzOmZ1bmN0aW9uKCl7dmFyIGUsdD1bXTtmb3IoZSBpbiB0aGlzLm1hcmtlcnMpdC5wdXNoKGUpO3RoaXMucmVtb3ZlTWFya2Vycyh0KX0sbGF0TG5nVG9Qb2ludDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9anZtLldvcmxkTWFwLm1hcHNbdGhpcy5wYXJhbXMubWFwXS5wcm9qZWN0aW9uLGk9ci5jZW50cmFsTWVyaWRpYW4scz10aGlzLndpZHRoLXRoaXMuYmFzZVRyYW5zWCoyKnRoaXMuYmFzZVNjYWxlLG89dGhpcy5oZWlnaHQtdGhpcy5iYXNlVHJhbnNZKjIqdGhpcy5iYXNlU2NhbGUsdSxhLGY9dGhpcy5zY2FsZS90aGlzLmJhc2VTY2FsZTtyZXR1cm4gdDwtMTgwK2kmJih0Kz0zNjApLG49anZtLlByb2pbci50eXBlXShlLHQsaSksdT10aGlzLmdldEluc2V0Rm9yUG9pbnQobi54LG4ueSksdT8oYT11LmJib3gsbi54PShuLngtYVswXS54KS8oYVsxXS54LWFbMF0ueCkqdS53aWR0aCp0aGlzLnNjYWxlLG4ueT0obi55LWFbMF0ueSkvKGFbMV0ueS1hWzBdLnkpKnUuaGVpZ2h0KnRoaXMuc2NhbGUse3g6bi54K3RoaXMudHJhbnNYKnRoaXMuc2NhbGUrdS5sZWZ0KnRoaXMuc2NhbGUseTpuLnkrdGhpcy50cmFuc1kqdGhpcy5zY2FsZSt1LnRvcCp0aGlzLnNjYWxlfSk6ITF9LHBvaW50VG9MYXRMbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24scj1uLmNlbnRyYWxNZXJpZGlhbixpPWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0uaW5zZXRzLHMsbyx1LGEsZjtmb3Iocz0wO3M8aS5sZW5ndGg7cysrKXtvPWlbc10sdT1vLmJib3gsYT1lLSh0aGlzLnRyYW5zWCp0aGlzLnNjYWxlK28ubGVmdCp0aGlzLnNjYWxlKSxmPXQtKHRoaXMudHJhbnNZKnRoaXMuc2NhbGUrby50b3AqdGhpcy5zY2FsZSksYT1hLyhvLndpZHRoKnRoaXMuc2NhbGUpKih1WzFdLngtdVswXS54KSt1WzBdLngsZj1mLyhvLmhlaWdodCp0aGlzLnNjYWxlKSoodVsxXS55LXVbMF0ueSkrdVswXS55O2lmKGE+dVswXS54JiZhPHVbMV0ueCYmZj51WzBdLnkmJmY8dVsxXS55KXJldHVybiBqdm0uUHJvaltuLnR5cGUrXCJfaW52XCJdKGEsLWYscil9cmV0dXJuITF9LGdldEluc2V0Rm9yUG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLmluc2V0cyxyLGk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7aT1uW3JdLmJib3g7aWYoZT5pWzBdLngmJmU8aVsxXS54JiZ0PmlbMF0ueSYmdDxpWzFdLnkpcmV0dXJuIG5bcl19fSxjcmVhdGVTZXJpZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O3RoaXMuc2VyaWVzPXttYXJrZXJzOltdLHJlZ2lvbnM6W119O2Zvcih0IGluIHRoaXMucGFyYW1zLnNlcmllcylmb3IoZT0wO2U8dGhpcy5wYXJhbXMuc2VyaWVzW3RdLmxlbmd0aDtlKyspdGhpcy5zZXJpZXNbdF1bZV09bmV3IGp2bS5EYXRhU2VyaWVzKHRoaXMucGFyYW1zLnNlcmllc1t0XVtlXSx0aGlzW3RdKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5yZW1vdmUoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSxqdm0uJCh3aW5kb3cpLnVuYmluZChcInJlc2l6ZVwiLHRoaXMub25SZXNpemUpfX0sanZtLldvcmxkTWFwLm1hcHM9e30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXM9e21hcDpcIndvcmxkX21pbGxfZW5cIixiYWNrZ3JvdW5kQ29sb3I6XCIjNTA1MDUwXCIsem9vbUJ1dHRvbnM6ITAsem9vbU9uU2Nyb2xsOiEwLHpvb21NYXg6OCx6b29tTWluOjEsem9vbVN0ZXA6MS42LHJlZ2lvbnNTZWxlY3RhYmxlOiExLG1hcmtlcnNTZWxlY3RhYmxlOiExLGJpbmRUb3VjaEV2ZW50czohMCxyZWdpb25TdHlsZTp7aW5pdGlhbDp7ZmlsbDpcIndoaXRlXCIsXCJmaWxsLW9wYWNpdHlcIjoxLHN0cm9rZTpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOjAsXCJzdHJva2Utb3BhY2l0eVwiOjF9LGhvdmVyOntcImZpbGwtb3BhY2l0eVwiOi44fSxzZWxlY3RlZDp7ZmlsbDpcInllbGxvd1wifSxzZWxlY3RlZEhvdmVyXG46e319LG1hcmtlclN0eWxlOntpbml0aWFsOntmaWxsOlwiZ3JleVwiLHN0cm9rZTpcIiM1MDUwNTBcIixcImZpbGwtb3BhY2l0eVwiOjEsXCJzdHJva2Utd2lkdGhcIjoxLFwic3Ryb2tlLW9wYWNpdHlcIjoxLHI6NX0saG92ZXI6e3N0cm9rZTpcImJsYWNrXCIsXCJzdHJva2Utd2lkdGhcIjoyfSxzZWxlY3RlZDp7ZmlsbDpcImJsdWVcIn0sc2VsZWN0ZWRIb3Zlcjp7fX19LGp2bS5Xb3JsZE1hcC5hcGlFdmVudHM9e29uUmVnaW9uTGFiZWxTaG93OlwicmVnaW9uTGFiZWxTaG93XCIsb25SZWdpb25PdmVyOlwicmVnaW9uT3ZlclwiLG9uUmVnaW9uT3V0OlwicmVnaW9uT3V0XCIsb25SZWdpb25DbGljazpcInJlZ2lvbkNsaWNrXCIsb25SZWdpb25TZWxlY3RlZDpcInJlZ2lvblNlbGVjdGVkXCIsb25NYXJrZXJMYWJlbFNob3c6XCJtYXJrZXJMYWJlbFNob3dcIixvbk1hcmtlck92ZXI6XCJtYXJrZXJPdmVyXCIsb25NYXJrZXJPdXQ6XCJtYXJrZXJPdXRcIixvbk1hcmtlckNsaWNrOlwibWFya2VyQ2xpY2tcIixvbk1hcmtlclNlbGVjdGVkOlwibWFya2VyU2VsZWN0ZWRcIixvblZpZXdwb3J0Q2hhbmdlOlwidmlld3BvcnRDaGFuZ2VcIn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvcGx1Z2lucy9qdmVjdG9ybWFwL2pxdWVyeS1qdmVjdG9ybWFwLTEuMi4yLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n"); /***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_LOCAL_MODULE_0__;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! bootstrap3-wysihtml5-bower 2014-09-26 */\nvar wysihtml5, Base, Handlebars;Object.defineProperty && Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(Element.prototype, \"textContent\") && !Object.getOwnPropertyDescriptor(Element.prototype, \"textContent\").get && !function () {\n var a = Object.getOwnPropertyDescriptor(Element.prototype, \"innerText\");Object.defineProperty(Element.prototype, \"textContent\", { get: function get() {\n return a.get.call(this);\n }, set: function set(b) {\n return a.set.call(this, b);\n } });\n}(), Array.isArray || (Array.isArray = function (a) {\n return \"[object Array]\" === Object.prototype.toString.call(a);\n}), wysihtml5 = { version: \"0.4.15\", commands: {}, dom: {}, quirks: {}, toolbar: {}, lang: {}, selection: {}, views: {}, INVISIBLE_SPACE: \"\", EMPTY_FUNCTION: function EMPTY_FUNCTION() {}, ELEMENT_NODE: 1, TEXT_NODE: 3, BACKSPACE_KEY: 8, ENTER_KEY: 13, ESCAPE_KEY: 27, SPACE_KEY: 32, DELETE_KEY: 46 }, function (a, b) {\n true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : b.rangy = a();\n}(function () {\n function a(a, b) {\n var c = _typeof(a[b]);return c == x || !(c != w || !a[b]) || \"unknown\" == c;\n }function b(a, b) {\n return !(_typeof(a[b]) != w || !a[b]);\n }function c(a, b) {\n return _typeof(a[b]) != y;\n }function d(a) {\n return function (b, c) {\n for (var d = c.length; d--;) {\n if (!a(b, c[d])) return !1;\n }return !0;\n };\n }function e(a) {\n return a && D(a, C) && F(a, B);\n }function f(a) {\n return b(a, \"body\") ? a.body : a.getElementsByTagName(\"body\")[0];\n }function g(c) {\n b(window, \"console\") && a(window.console, \"log\") && window.console.log(c);\n }function h(a, b) {\n b ? window.alert(a) : g(a);\n }function i(a) {\n H.initialized = !0, H.supported = !1, h(\"Rangy is not supported on this page in your browser. Reason: \" + a, H.config.alertOnFail);\n }function j(a) {\n h(\"Rangy warning: \" + a, H.config.alertOnWarn);\n }function k(a) {\n return a.message || a.description || a + \"\";\n }function l() {\n var b, c, d, h, j, l, m, o, p;if (!H.initialized) {\n if (c = !1, d = !1, a(document, \"createRange\") && (b = document.createRange(), D(b, A) && F(b, z) && (c = !0)), h = f(document), !h || \"body\" != h.nodeName.toLowerCase()) return i(\"No body element found\"), void 0;if (h && a(h, \"createTextRange\") && (b = h.createTextRange(), e(b) && (d = !0)), !c && !d) return i(\"Neither Range nor TextRange are available\"), void 0;H.initialized = !0, H.features = { implementsDomRange: c, implementsTextRange: d };for (m in G) {\n (j = G[m]) instanceof n && j.init(j, H);\n }for (o = 0, p = s.length; p > o; ++o) {\n try {\n s[o](H);\n } catch (q) {\n l = \"Rangy init listener threw an exception. Continuing. Detail: \" + k(q), g(l);\n }\n }\n }\n }function m(a) {\n a = a || window, l();for (var b = 0, c = t.length; c > b; ++b) {\n t[b](a);\n }\n }function n(a, b, c) {\n this.name = a, this.dependencies = b, this.initialized = !1, this.supported = !1, this.initializer = c;\n }function o(a, b, c, d) {\n var e = new n(b, c, function (a) {\n if (!a.initialized) {\n a.initialized = !0;try {\n d(H, a), a.supported = !0;\n } catch (c) {\n var e = \"Module '\" + b + \"' failed to load: \" + k(c);g(e);\n }\n }\n });G[b] = e;\n }function p() {}function q() {}var r,\n s,\n t,\n u,\n v,\n w = \"object\",\n x = \"function\",\n y = \"undefined\",\n z = [\"startContainer\", \"startOffset\", \"endContainer\", \"endOffset\", \"collapsed\", \"commonAncestorContainer\"],\n A = [\"setStart\", \"setStartBefore\", \"setStartAfter\", \"setEnd\", \"setEndBefore\", \"setEndAfter\", \"collapse\", \"selectNode\", \"selectNodeContents\", \"compareBoundaryPoints\", \"deleteContents\", \"extractContents\", \"cloneContents\", \"insertNode\", \"surroundContents\", \"cloneRange\", \"toString\", \"detach\"],\n B = [\"boundingHeight\", \"boundingLeft\", \"boundingTop\", \"boundingWidth\", \"htmlText\", \"text\"],\n C = [\"collapse\", \"compareEndPoints\", \"duplicate\", \"moveToElementText\", \"parentElement\", \"select\", \"setEndPoint\", \"getBoundingClientRect\"],\n D = d(a),\n E = d(b),\n F = d(c),\n G = {},\n H = { version: \"1.3alpha.20140804\", initialized: !1, supported: !0, util: { isHostMethod: a, isHostObject: b, isHostProperty: c, areHostMethods: D, areHostObjects: E, areHostProperties: F, isTextRange: e, getBody: f }, features: {}, modules: G, config: { alertOnFail: !0, alertOnWarn: !1, preferTextRange: !1, autoInitialize: (typeof rangyAutoInitialize === \"undefined\" ? \"undefined\" : _typeof(rangyAutoInitialize)) == y ? !0 : rangyAutoInitialize } };return H.fail = i, H.warn = j, {}.hasOwnProperty ? H.util.extend = function (a, b, c) {\n var d, e, f;for (f in b) {\n b.hasOwnProperty(f) && (d = a[f], e = b[f], c && null !== d && \"object\" == (typeof d === \"undefined\" ? \"undefined\" : _typeof(d)) && null !== e && \"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) && H.util.extend(d, e, !0), a[f] = e);\n }return b.hasOwnProperty(\"toString\") && (a.toString = b.toString), a;\n } : i(\"hasOwnProperty not supported\"), function () {\n var a,\n b,\n c = document.createElement(\"div\");c.appendChild(document.createElement(\"span\")), a = [].slice;try {\n 1 == a.call(c.childNodes, 0)[0].nodeType && (b = function b(_b) {\n return a.call(_b, 0);\n });\n } catch (d) {}b || (b = function b(a) {\n var b,\n c,\n d = [];for (b = 0, c = a.length; c > b; ++b) {\n d[b] = a[b];\n }return d;\n }), H.util.toArray = b;\n }(), a(document, \"addEventListener\") ? r = function r(a, b, c) {\n a.addEventListener(b, c, !1);\n } : a(document, \"attachEvent\") ? r = function r(a, b, c) {\n a.attachEvent(\"on\" + b, c);\n } : i(\"Document does not have required addEventListener or attachEvent method\"), H.util.addListener = r, s = [], H.init = l, H.addInitListener = function (a) {\n H.initialized ? a(H) : s.push(a);\n }, t = [], H.addShimListener = function (a) {\n t.push(a);\n }, H.shim = H.createMissingNativeApi = m, n.prototype = { init: function init() {\n var a,\n b,\n c,\n d,\n e = this.dependencies || [];for (a = 0, b = e.length; b > a; ++a) {\n if (d = e[a], c = G[d], !(c && c instanceof n)) throw Error(\"required module '\" + d + \"' not found\");if (c.init(), !c.supported) throw Error(\"required module '\" + d + \"' not supported\");\n }this.initializer(this);\n }, fail: function fail(a) {\n throw this.initialized = !0, this.supported = !1, Error(\"Module '\" + this.name + \"' failed to load: \" + a);\n }, warn: function warn(a) {\n H.warn(\"Module \" + this.name + \": \" + a);\n }, deprecationNotice: function deprecationNotice(a, b) {\n H.warn(\"DEPRECATED: \" + a + \" in module \" + this.name + \"is deprecated. Please use \" + b + \" instead\");\n }, createError: function createError(a) {\n return Error(\"Error in Rangy \" + this.name + \" module: \" + a);\n } }, H.createModule = function (a) {\n var b, c, d;2 == arguments.length ? (b = arguments[1], c = []) : (b = arguments[2], c = arguments[1]), d = o(!1, a, c, b), H.initialized && d.init();\n }, H.createCoreModule = function (a, b, c) {\n o(!0, a, b, c);\n }, H.RangePrototype = p, H.rangePrototype = new p(), H.selectionPrototype = new q(), u = !1, v = function v() {\n u || (u = !0, !H.initialized && H.config.autoInitialize && l());\n }, (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == y ? (i(\"No window found\"), void 0) : (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) == y ? (i(\"No document found\"), void 0) : (a(document, \"addEventListener\") && document.addEventListener(\"DOMContentLoaded\", v, !1), r(window, \"load\", v), H.createCoreModule(\"DomUtil\", [], function (a, b) {\n function c(a) {\n var b;return _typeof(a.namespaceURI) == I || null === (b = a.namespaceURI) || \"http://www.w3.org/1999/xhtml\" == b;\n }function d(a) {\n var b = a.parentNode;return 1 == b.nodeType ? b : null;\n }function e(a) {\n for (var b = 0; a = a.previousSibling;) {\n ++b;\n }return b;\n }function f(a) {\n switch (a.nodeType) {case 7:case 10:\n return 0;case 3:case 8:\n return a.length;default:\n return a.childNodes.length;}\n }function g(a, b) {\n var c,\n d = [];for (c = a; c; c = c.parentNode) {\n d.push(c);\n }for (c = b; c; c = c.parentNode) {\n if (F(d, c)) return c;\n }return null;\n }function h(a, b, c) {\n for (var d = c ? b : b.parentNode; d;) {\n if (d === a) return !0;d = d.parentNode;\n }return !1;\n }function i(a, b) {\n return h(a, b, !0);\n }function j(a, b, c) {\n for (var d, e = c ? a : a.parentNode; e;) {\n if (d = e.parentNode, d === b) return e;e = d;\n }return null;\n }function k(a) {\n var b = a.nodeType;return 3 == b || 4 == b || 8 == b;\n }function l(a) {\n if (!a) return !1;var b = a.nodeType;return 3 == b || 8 == b;\n }function m(a, b) {\n var c = b.nextSibling,\n d = b.parentNode;return c ? d.insertBefore(a, c) : d.appendChild(a), a;\n }function n(a, b, c) {\n var d,\n f,\n g = a.cloneNode(!1);if (g.deleteData(0, b), a.deleteData(b, a.length - b), m(g, a), c) for (d = 0; f = c[d++];) {\n f.node == a && f.offset > b ? (f.node = g, f.offset -= b) : f.node == a.parentNode && f.offset > e(a) && ++f.offset;\n }return g;\n }function o(a) {\n if (9 == a.nodeType) return a;if (_typeof(a.ownerDocument) != I) return a.ownerDocument;if (_typeof(a.document) != I) return a.document;if (a.parentNode) return o(a.parentNode);throw b.createError(\"getDocument: no document found for node\");\n }function p(a) {\n var c = o(a);if (_typeof(c.defaultView) != I) return c.defaultView;if (_typeof(c.parentWindow) != I) return c.parentWindow;throw b.createError(\"Cannot get a window object for node\");\n }function q(a) {\n if (_typeof(a.contentDocument) != I) return a.contentDocument;if (_typeof(a.contentWindow) != I) return a.contentWindow.document;throw b.createError(\"getIframeDocument: No Document object found for iframe element\");\n }function r(a) {\n if (_typeof(a.contentWindow) != I) return a.contentWindow;if (_typeof(a.contentDocument) != I) return a.contentDocument.defaultView;throw b.createError(\"getIframeWindow: No Window object found for iframe element\");\n }function s(a) {\n return a && J.isHostMethod(a, \"setTimeout\") && J.isHostObject(a, \"document\");\n }function t(a, b, c) {\n var d;if (a ? J.isHostProperty(a, \"nodeType\") ? d = 1 == a.nodeType && \"iframe\" == a.tagName.toLowerCase() ? q(a) : o(a) : s(a) && (d = a.document) : d = document, !d) throw b.createError(c + \"(): Parameter must be a Window object or DOM node\");return d;\n }function u(a) {\n for (var b; b = a.parentNode;) {\n a = b;\n }return a;\n }function v(a, c, d, f) {\n var h, i, k, l, m;if (a == d) return c === f ? 0 : f > c ? -1 : 1;if (h = j(d, a, !0)) return c <= e(h) ? -1 : 1;if (h = j(a, d, !0)) return e(h) < f ? -1 : 1;if (i = g(a, d), !i) throw Error(\"comparePoints error: nodes have no common ancestor\");if (k = a === i ? i : j(a, i, !0), l = d === i ? i : j(d, i, !0), k === l) throw b.createError(\"comparePoints got to case 4 and childA and childB are the same!\");for (m = i.firstChild; m;) {\n if (m === k) return -1;if (m === l) return 1;m = m.nextSibling;\n }\n }function w(a) {\n var b;try {\n return b = a.parentNode, !1;\n } catch (c) {\n return !0;\n }\n }function x(a) {\n if (!a) return \"[No node]\";if (G && w(a)) return \"[Broken node]\";if (k(a)) return '\"' + a.data + '\"';if (1 == a.nodeType) {\n var b = a.id ? ' id=\"' + a.id + '\"' : \"\";return \"<\" + a.nodeName + b + \">[index:\" + e(a) + \",length:\" + a.childNodes.length + \"][\" + (a.innerHTML || \"[innerHTML not supported]\").slice(0, 25) + \"]\";\n }return a.nodeName;\n }function y(a) {\n for (var b, c = o(a).createDocumentFragment(); b = a.firstChild;) {\n c.appendChild(b);\n }return c;\n }function z(a) {\n this.root = a, this._next = a;\n }function A(a) {\n return new z(a);\n }function B(a, b) {\n this.node = a, this.offset = b;\n }function C(a) {\n this.code = this[a], this.codeName = a, this.message = \"DOMException: \" + this.codeName;\n }var D,\n E,\n F,\n G,\n H,\n I = \"undefined\",\n J = a.util;J.areHostMethods(document, [\"createDocumentFragment\", \"createElement\", \"createTextNode\"]) || b.fail(\"document missing a Node creation method\"), J.isHostMethod(document, \"getElementsByTagName\") || b.fail(\"document missing getElementsByTagName method\"), D = document.createElement(\"div\"), J.areHostMethods(D, [\"insertBefore\", \"appendChild\", \"cloneNode\"] || !J.areHostObjects(D, [\"previousSibling\", \"nextSibling\", \"childNodes\", \"parentNode\"])) || b.fail(\"Incomplete Element implementation\"), J.isHostProperty(D, \"innerHTML\") || b.fail(\"Element is missing innerHTML property\"), E = document.createTextNode(\"test\"), J.areHostMethods(E, [\"splitText\", \"deleteData\", \"insertData\", \"appendData\", \"cloneNode\"] || !J.areHostObjects(D, [\"previousSibling\", \"nextSibling\", \"childNodes\", \"parentNode\"]) || !J.areHostProperties(E, [\"data\"])) || b.fail(\"Incomplete Text Node implementation\"), F = function F(a, b) {\n for (var c = a.length; c--;) {\n if (a[c] === b) return !0;\n }return !1;\n }, G = !1, function () {\n var b,\n c = document.createElement(\"b\");c.innerHTML = \"1\", b = c.firstChild, c.innerHTML = \"<br>\", G = w(b), a.features.crashyTextNodes = G;\n }(), _typeof(window.getComputedStyle) != I ? H = function H(a, b) {\n return p(a).getComputedStyle(a, null)[b];\n } : _typeof(document.documentElement.currentStyle) != I ? H = function H(a, b) {\n return a.currentStyle[b];\n } : b.fail(\"No means of obtaining computed style properties found\"), z.prototype = { _current: null, hasNext: function hasNext() {\n return !!this._next;\n }, next: function next() {\n var a,\n b,\n c = this._current = this._next;if (this._current) if (a = c.firstChild, a) this._next = a;else {\n for (b = null; c !== this.root && !(b = c.nextSibling);) {\n c = c.parentNode;\n }this._next = b;\n }return this._current;\n }, detach: function detach() {\n this._current = this._next = this.root = null;\n } }, B.prototype = { equals: function equals(a) {\n return !!a && this.node === a.node && this.offset == a.offset;\n }, inspect: function inspect() {\n return \"[DomPosition(\" + x(this.node) + \":\" + this.offset + \")]\";\n }, toString: function toString() {\n return this.inspect();\n } }, C.prototype = { INDEX_SIZE_ERR: 1, HIERARCHY_REQUEST_ERR: 3, WRONG_DOCUMENT_ERR: 4, NO_MODIFICATION_ALLOWED_ERR: 7, NOT_FOUND_ERR: 8, NOT_SUPPORTED_ERR: 9, INVALID_STATE_ERR: 11, INVALID_NODE_TYPE_ERR: 24 }, C.prototype.toString = function () {\n return this.message;\n }, a.dom = { arrayContains: F, isHtmlNamespace: c, parentElement: d, getNodeIndex: e, getNodeLength: f, getCommonAncestor: g, isAncestorOf: h, isOrIsAncestorOf: i, getClosestAncestorIn: j, isCharacterDataNode: k, isTextOrCommentNode: l, insertAfter: m, splitDataNode: n, getDocument: o, getWindow: p, getIframeWindow: r, getIframeDocument: q, getBody: J.getBody, isWindow: s, getContentDocument: t, getRootContainer: u, comparePoints: v, isBrokenNode: w, inspectNode: x, getComputedStyleProperty: H, fragmentFromNodeChildren: y, createIterator: A, DomPosition: B }, a.DOMException = C;\n }), H.createCoreModule(\"DomRange\", [\"DomUtil\"], function (a) {\n function b(a, b) {\n return 3 != a.nodeType && (gb(a, b.startContainer) || gb(a, b.endContainer));\n }function c(a) {\n return a.document || hb(a.startContainer);\n }function d(a) {\n return new cb(a.parentNode, fb(a));\n }function e(a) {\n return new cb(a.parentNode, fb(a) + 1);\n }function f(a, b, c) {\n var d = 11 == a.nodeType ? a.firstChild : a;return eb(b) ? c == b.length ? ab.insertAfter(a, b) : b.parentNode.insertBefore(a, 0 == c ? b : jb(b, c)) : c >= b.childNodes.length ? b.appendChild(a) : b.insertBefore(a, b.childNodes[c]), d;\n }function g(a, b, d) {\n if (y(a), y(b), c(b) != c(a)) throw new db(\"WRONG_DOCUMENT_ERR\");var e = ib(a.startContainer, a.startOffset, b.endContainer, b.endOffset),\n f = ib(a.endContainer, a.endOffset, b.startContainer, b.startOffset);return d ? 0 >= e && f >= 0 : 0 > e && f > 0;\n }function h(a) {\n var b, d, e, f;for (e = c(a.range).createDocumentFragment(); d = a.next();) {\n if (b = a.isPartiallySelectedSubtree(), d = d.cloneNode(!b), b && (f = a.getSubtreeIterator(), d.appendChild(h(f)), f.detach()), 10 == d.nodeType) throw new db(\"HIERARCHY_REQUEST_ERR\");e.appendChild(d);\n }return e;\n }function i(a, b, c) {\n var d, e, f, g;for (c = c || { stop: !1 }; f = a.next();) {\n if (a.isPartiallySelectedSubtree()) {\n if (b(f) === !1) return c.stop = !0, void 0;if (g = a.getSubtreeIterator(), i(g, b, c), g.detach(), c.stop) return;\n } else for (d = ab.createIterator(f); e = d.next();) {\n if (b(e) === !1) return c.stop = !0, void 0;\n }\n }\n }function j(a) {\n for (var b; a.next();) {\n a.isPartiallySelectedSubtree() ? (b = a.getSubtreeIterator(), j(b), b.detach()) : a.remove();\n }\n }function k(a) {\n for (var b, d, e = c(a.range).createDocumentFragment(); b = a.next();) {\n if (a.isPartiallySelectedSubtree() ? (b = b.cloneNode(!1), d = a.getSubtreeIterator(), b.appendChild(k(d)), d.detach()) : a.remove(), 10 == b.nodeType) throw new db(\"HIERARCHY_REQUEST_ERR\");e.appendChild(b);\n }return e;\n }function l(a, b, c) {\n var d,\n e,\n f = !(!b || !b.length),\n g = !!c;return f && (d = RegExp(\"^(\" + b.join(\"|\") + \")$\")), e = [], i(new n(a, !1), function (b) {\n var h, i;(!f || d.test(b.nodeType)) && (!g || c(b)) && (h = a.startContainer, b == h && eb(h) && a.startOffset == h.length || (i = a.endContainer, b == i && eb(i) && 0 == a.endOffset || e.push(b)));\n }), e;\n }function m(a) {\n var b = void 0 === a.getName ? \"Range\" : a.getName();return \"[\" + b + \"(\" + ab.inspectNode(a.startContainer) + \":\" + a.startOffset + \", \" + ab.inspectNode(a.endContainer) + \":\" + a.endOffset + \")]\";\n }function n(a, b) {\n if (this.range = a, this.clonePartiallySelectedTextNodes = b, !a.collapsed) {\n this.sc = a.startContainer, this.so = a.startOffset, this.ec = a.endContainer, this.eo = a.endOffset;var c = a.commonAncestorContainer;this.sc === this.ec && eb(this.sc) ? (this.isSingleCharacterDataNode = !0, this._first = this._last = this._next = this.sc) : (this._first = this._next = this.sc !== c || eb(this.sc) ? kb(this.sc, c, !0) : this.sc.childNodes[this.so], this._last = this.ec !== c || eb(this.ec) ? kb(this.ec, c, !0) : this.ec.childNodes[this.eo - 1]);\n }\n }function o(a) {\n return function (b, c) {\n for (var d, e = c ? b : b.parentNode; e;) {\n if (d = e.nodeType, mb(a, d)) return e;e = e.parentNode;\n }return null;\n };\n }function p(a, b) {\n if (P(a, b)) throw new db(\"INVALID_NODE_TYPE_ERR\");\n }function q(a, b) {\n if (!mb(b, a.nodeType)) throw new db(\"INVALID_NODE_TYPE_ERR\");\n }function r(a, b) {\n if (0 > b || b > (eb(a) ? a.length : a.childNodes.length)) throw new db(\"INDEX_SIZE_ERR\");\n }function s(a, b) {\n if (N(a, !0) !== N(b, !0)) throw new db(\"WRONG_DOCUMENT_ERR\");\n }function t(a) {\n if (O(a, !0)) throw new db(\"NO_MODIFICATION_ALLOWED_ERR\");\n }function u(a, b) {\n if (!a) throw new db(b);\n }function v(a) {\n return ob && ab.isBrokenNode(a) || !mb(J, a.nodeType) && !N(a, !0);\n }function w(a, b) {\n return b <= (eb(a) ? a.length : a.childNodes.length);\n }function x(a) {\n return !!a.startContainer && !!a.endContainer && !v(a.startContainer) && !v(a.endContainer) && w(a.startContainer, a.startOffset) && w(a.endContainer, a.endOffset);\n }function y(a) {\n if (!x(a)) throw Error(\"Range error: Range is no longer valid after DOM mutation (\" + a.inspect() + \")\");\n }function z(a, b) {\n var c, d, e, f, g;y(a), c = a.startContainer, d = a.startOffset, e = a.endContainer, f = a.endOffset, g = c === e, eb(e) && f > 0 && f < e.length && jb(e, f, b), eb(c) && d > 0 && d < c.length && (c = jb(c, d, b), g ? (f -= d, e = c) : e == c.parentNode && f >= fb(c) && f++, d = 0), a.setStartAndEnd(c, d, e, f);\n }function A(a) {\n y(a);var b = a.commonAncestorContainer.parentNode.cloneNode(!1);return b.appendChild(a.cloneContents()), b.innerHTML;\n }function B(a) {\n a.START_TO_START = U, a.START_TO_END = V, a.END_TO_END = W, a.END_TO_START = X, a.NODE_BEFORE = Y, a.NODE_AFTER = Z, a.NODE_BEFORE_AND_AFTER = $, a.NODE_INSIDE = _;\n }function C(a) {\n B(a), B(a.prototype);\n }function D(a, b) {\n return function () {\n var c, d, f, g, h, j, k;return y(this), c = this.startContainer, d = this.startOffset, f = this.commonAncestorContainer, g = new n(this, !0), c !== f && (h = kb(c, f, !0), j = e(h), c = j.node, d = j.offset), i(g, t), g.reset(), k = a(g), g.detach(), b(this, c, d, c, d), k;\n };\n }function E(c, f) {\n function g(a, b) {\n return function (c) {\n q(c, I), q(nb(c), J);var f = (a ? d : e)(c);(b ? h : i)(this, f.node, f.offset);\n };\n }function h(a, b, c) {\n var d = a.endContainer,\n e = a.endOffset;(b !== a.startContainer || c !== a.startOffset) && ((nb(b) != nb(d) || 1 == ib(b, c, d, e)) && (d = b, e = c), f(a, b, c, d, e));\n }function i(a, b, c) {\n var d = a.startContainer,\n e = a.startOffset;(b !== a.endContainer || c !== a.endOffset) && ((nb(b) != nb(d) || -1 == ib(b, c, d, e)) && (d = b, e = c), f(a, d, e, b, c));\n }var l = function l() {};l.prototype = a.rangePrototype, c.prototype = new l(), bb.extend(c.prototype, { setStart: function setStart(a, b) {\n p(a, !0), r(a, b), h(this, a, b);\n }, setEnd: function setEnd(a, b) {\n p(a, !0), r(a, b), i(this, a, b);\n }, setStartAndEnd: function setStartAndEnd() {\n var a = arguments,\n b = a[0],\n c = a[1],\n d = b,\n e = c;switch (a.length) {case 3:\n e = a[2];break;case 4:\n d = a[2], e = a[3];}f(this, b, c, d, e);\n }, setBoundary: function setBoundary(a, b, c) {\n this[\"set\" + (c ? \"Start\" : \"End\")](a, b);\n }, setStartBefore: g(!0, !0), setStartAfter: g(!1, !0), setEndBefore: g(!0, !1), setEndAfter: g(!1, !1), collapse: function collapse(a) {\n y(this), a ? f(this, this.startContainer, this.startOffset, this.startContainer, this.startOffset) : f(this, this.endContainer, this.endOffset, this.endContainer, this.endOffset);\n }, selectNodeContents: function selectNodeContents(a) {\n p(a, !0), f(this, a, 0, a, lb(a));\n }, selectNode: function selectNode(a) {\n p(a, !1), q(a, I);var b = d(a),\n c = e(a);f(this, b.node, b.offset, c.node, c.offset);\n }, extractContents: D(k, f), deleteContents: D(j, f), canSurroundContents: function canSurroundContents() {\n var a, c;return y(this), t(this.startContainer), t(this.endContainer), a = new n(this, !0), c = a._first && b(a._first, this) || a._last && b(a._last, this), a.detach(), !c;\n }, splitBoundaries: function splitBoundaries() {\n z(this);\n }, splitBoundariesPreservingPositions: function splitBoundariesPreservingPositions(a) {\n z(this, a);\n }, normalizeBoundaries: function normalizeBoundaries() {\n var a, b, c, d, e, g, h, i, j;y(this), a = this.startContainer, b = this.startOffset, c = this.endContainer, d = this.endOffset, e = function e(a) {\n var b = a.nextSibling;b && b.nodeType == a.nodeType && (c = a, d = a.length, a.appendData(b.data), b.parentNode.removeChild(b));\n }, g = function g(e) {\n var f,\n g,\n h = e.previousSibling;h && h.nodeType == e.nodeType && (a = e, f = e.length, b = h.length, e.insertData(0, h.data), h.parentNode.removeChild(h), a == c ? (d += b, c = a) : c == e.parentNode && (g = fb(e), d == g ? (c = e, d = f) : d > g && d--));\n }, h = !0, eb(c) ? c.length == d && e(c) : (d > 0 && (i = c.childNodes[d - 1], i && eb(i) && e(i)), h = !this.collapsed), h ? eb(a) ? 0 == b && g(a) : b < a.childNodes.length && (j = a.childNodes[b], j && eb(j) && g(j)) : (a = c, b = d), f(this, a, b, c, d);\n }, collapseToPoint: function collapseToPoint(a, b) {\n p(a, !0), r(a, b), this.setStartAndEnd(a, b);\n } }), C(c);\n }function F(a) {\n a.collapsed = a.startContainer === a.endContainer && a.startOffset === a.endOffset, a.commonAncestorContainer = a.collapsed ? a.startContainer : ab.getCommonAncestor(a.startContainer, a.endContainer);\n }function G(a, b, c, d, e) {\n a.startContainer = b, a.startOffset = c, a.endContainer = d, a.endOffset = e, a.document = ab.getDocument(b), F(a);\n }function H(a) {\n this.startContainer = a, this.startOffset = 0, this.endContainer = a, this.endOffset = 0, this.document = a, F(this);\n }var I,\n J,\n K,\n L,\n M,\n N,\n O,\n P,\n Q,\n R,\n S,\n T,\n U,\n V,\n W,\n X,\n Y,\n Z,\n $,\n _,\n ab = a.dom,\n bb = a.util,\n cb = ab.DomPosition,\n db = a.DOMException,\n eb = ab.isCharacterDataNode,\n fb = ab.getNodeIndex,\n gb = ab.isOrIsAncestorOf,\n hb = ab.getDocument,\n ib = ab.comparePoints,\n jb = ab.splitDataNode,\n kb = ab.getClosestAncestorIn,\n lb = ab.getNodeLength,\n mb = ab.arrayContains,\n nb = ab.getRootContainer,\n ob = a.features.crashyTextNodes;n.prototype = { _current: null, _next: null, _first: null, _last: null, isSingleCharacterDataNode: !1, reset: function reset() {\n this._current = null, this._next = this._first;\n }, hasNext: function hasNext() {\n return !!this._next;\n }, next: function next() {\n var a = this._current = this._next;return a && (this._next = a !== this._last ? a.nextSibling : null, eb(a) && this.clonePartiallySelectedTextNodes && (a === this.ec && (a = a.cloneNode(!0)).deleteData(this.eo, a.length - this.eo), this._current === this.sc && (a = a.cloneNode(!0)).deleteData(0, this.so))), a;\n }, remove: function remove() {\n var a,\n b,\n c = this._current;!eb(c) || c !== this.sc && c !== this.ec ? c.parentNode && c.parentNode.removeChild(c) : (a = c === this.sc ? this.so : 0, b = c === this.ec ? this.eo : c.length, a != b && c.deleteData(a, b - a));\n }, isPartiallySelectedSubtree: function isPartiallySelectedSubtree() {\n var a = this._current;return b(a, this.range);\n }, getSubtreeIterator: function getSubtreeIterator() {\n var a, b, d, e, f, g;return this.isSingleCharacterDataNode ? (a = this.range.cloneRange(), a.collapse(!1)) : (a = new H(c(this.range)), b = this._current, d = b, e = 0, f = b, g = lb(b), gb(b, this.sc) && (d = this.sc, e = this.so), gb(b, this.ec) && (f = this.ec, g = this.eo), G(a, d, e, f, g)), new n(a, this.clonePartiallySelectedTextNodes);\n }, detach: function detach() {\n this.range = this._current = this._next = this._first = this._last = this.sc = this.so = this.ec = this.eo = null;\n } }, I = [1, 3, 4, 5, 7, 8, 10], J = [2, 9, 11], K = [5, 6, 10, 12], L = [1, 3, 4, 5, 7, 8, 10, 11], M = [1, 3, 4, 5, 7, 8], N = o([9, 11]), O = o(K), P = o([6, 10, 12]), Q = document.createElement(\"style\"), R = !1;try {\n Q.innerHTML = \"<b>x</b>\", R = 3 == Q.firstChild.nodeType;\n } catch (pb) {}a.features.htmlParsingConforms = R, S = R ? function (a) {\n var b,\n c = this.startContainer,\n d = hb(c);if (!c) throw new db(\"INVALID_STATE_ERR\");return b = null, 1 == c.nodeType ? b = c : eb(c) && (b = ab.parentElement(c)), b = null === b || \"HTML\" == b.nodeName && ab.isHtmlNamespace(hb(b).documentElement) && ab.isHtmlNamespace(b) ? d.createElement(\"body\") : b.cloneNode(!1), b.innerHTML = a, ab.fragmentFromNodeChildren(b);\n } : function (a) {\n var b = c(this),\n d = b.createElement(\"body\");return d.innerHTML = a, ab.fragmentFromNodeChildren(d);\n }, T = [\"startContainer\", \"startOffset\", \"endContainer\", \"endOffset\", \"collapsed\", \"commonAncestorContainer\"], U = 0, V = 1, W = 2, X = 3, Y = 0, Z = 1, $ = 2, _ = 3, bb.extend(a.rangePrototype, { compareBoundaryPoints: function compareBoundaryPoints(a, b) {\n var c, d, e, f, g, h;return y(this), s(this.startContainer, b.startContainer), g = a == X || a == U ? \"start\" : \"end\", h = a == V || a == U ? \"start\" : \"end\", c = this[g + \"Container\"], d = this[g + \"Offset\"], e = b[h + \"Container\"], f = b[h + \"Offset\"], ib(c, d, e, f);\n }, insertNode: function insertNode(a) {\n if (y(this), q(a, L), t(this.startContainer), gb(a, this.startContainer)) throw new db(\"HIERARCHY_REQUEST_ERR\");var b = f(a, this.startContainer, this.startOffset);this.setStartBefore(b);\n }, cloneContents: function cloneContents() {\n var a, b, d;return y(this), this.collapsed ? c(this).createDocumentFragment() : this.startContainer === this.endContainer && eb(this.startContainer) ? (a = this.startContainer.cloneNode(!0), a.data = a.data.slice(this.startOffset, this.endOffset), b = c(this).createDocumentFragment(), b.appendChild(a), b) : (d = new n(this, !0), a = h(d), d.detach(), a);\n }, canSurroundContents: function canSurroundContents() {\n var a, c;return y(this), t(this.startContainer), t(this.endContainer), a = new n(this, !0), c = a._first && b(a._first, this) || a._last && b(a._last, this), a.detach(), !c;\n }, surroundContents: function surroundContents(a) {\n if (q(a, M), !this.canSurroundContents()) throw new db(\"INVALID_STATE_ERR\");var b = this.extractContents();if (a.hasChildNodes()) for (; a.lastChild;) {\n a.removeChild(a.lastChild);\n }f(a, this.startContainer, this.startOffset), a.appendChild(b), this.selectNode(a);\n }, cloneRange: function cloneRange() {\n var a, b, d;for (y(this), a = new H(c(this)), b = T.length; b--;) {\n d = T[b], a[d] = this[d];\n }return a;\n }, toString: function toString() {\n var a, b, c;return y(this), a = this.startContainer, a === this.endContainer && eb(a) ? 3 == a.nodeType || 4 == a.nodeType ? a.data.slice(this.startOffset, this.endOffset) : \"\" : (b = [], c = new n(this, !0), i(c, function (a) {\n (3 == a.nodeType || 4 == a.nodeType) && b.push(a.data);\n }), c.detach(), b.join(\"\"));\n }, compareNode: function compareNode(a) {\n var b, c, d, e;if (y(this), b = a.parentNode, c = fb(a), !b) throw new db(\"NOT_FOUND_ERR\");return d = this.comparePoint(b, c), e = this.comparePoint(b, c + 1), 0 > d ? e > 0 ? $ : Y : e > 0 ? Z : _;\n }, comparePoint: function comparePoint(a, b) {\n return y(this), u(a, \"HIERARCHY_REQUEST_ERR\"), s(a, this.startContainer), ib(a, b, this.startContainer, this.startOffset) < 0 ? -1 : ib(a, b, this.endContainer, this.endOffset) > 0 ? 1 : 0;\n }, createContextualFragment: S, toHtml: function toHtml() {\n return A(this);\n }, intersectsNode: function intersectsNode(a, b) {\n var d, e, f, g;return y(this), u(a, \"NOT_FOUND_ERR\"), hb(a) !== c(this) ? !1 : (d = a.parentNode, e = fb(a), u(d, \"NOT_FOUND_ERR\"), f = ib(d, e, this.endContainer, this.endOffset), g = ib(d, e + 1, this.startContainer, this.startOffset), b ? 0 >= f && g >= 0 : 0 > f && g > 0);\n }, isPointInRange: function isPointInRange(a, b) {\n return y(this), u(a, \"HIERARCHY_REQUEST_ERR\"), s(a, this.startContainer), ib(a, b, this.startContainer, this.startOffset) >= 0 && ib(a, b, this.endContainer, this.endOffset) <= 0;\n }, intersectsRange: function intersectsRange(a) {\n return g(this, a, !1);\n }, intersectsOrTouchesRange: function intersectsOrTouchesRange(a) {\n return g(this, a, !0);\n }, intersection: function intersection(a) {\n var b, c, d;return this.intersectsRange(a) ? (b = ib(this.startContainer, this.startOffset, a.startContainer, a.startOffset), c = ib(this.endContainer, this.endOffset, a.endContainer, a.endOffset), d = this.cloneRange(), -1 == b && d.setStart(a.startContainer, a.startOffset), 1 == c && d.setEnd(a.endContainer, a.endOffset), d) : null;\n }, union: function union(a) {\n if (this.intersectsOrTouchesRange(a)) {\n var b = this.cloneRange();return -1 == ib(a.startContainer, a.startOffset, this.startContainer, this.startOffset) && b.setStart(a.startContainer, a.startOffset), 1 == ib(a.endContainer, a.endOffset, this.endContainer, this.endOffset) && b.setEnd(a.endContainer, a.endOffset), b;\n }throw new db(\"Ranges do not intersect\");\n }, containsNode: function containsNode(a, b) {\n return b ? this.intersectsNode(a, !1) : this.compareNode(a) == _;\n }, containsNodeContents: function containsNodeContents(a) {\n return this.comparePoint(a, 0) >= 0 && this.comparePoint(a, lb(a)) <= 0;\n }, containsRange: function containsRange(a) {\n var b = this.intersection(a);return null !== b && a.equals(b);\n }, containsNodeText: function containsNodeText(a) {\n var b,\n c,\n d = this.cloneRange();return d.selectNode(a), b = d.getNodes([3]), b.length > 0 ? (d.setStart(b[0], 0), c = b.pop(), d.setEnd(c, c.length), this.containsRange(d)) : this.containsNodeContents(a);\n }, getNodes: function getNodes(a, b) {\n return y(this), l(this, a, b);\n }, getDocument: function getDocument() {\n return c(this);\n }, collapseBefore: function collapseBefore(a) {\n this.setEndBefore(a), this.collapse(!1);\n }, collapseAfter: function collapseAfter(a) {\n this.setStartAfter(a), this.collapse(!0);\n }, getBookmark: function getBookmark(b) {\n var d,\n e,\n f,\n g = c(this),\n h = a.createRange(g);return b = b || ab.getBody(g), h.selectNodeContents(b), d = this.intersection(h), e = 0, f = 0, d && (h.setEnd(d.startContainer, d.startOffset), e = (\"\" + h).length, f = e + (\"\" + d).length), { start: e, end: f, containerNode: b };\n }, moveToBookmark: function moveToBookmark(a) {\n var b,\n c,\n d,\n e,\n f,\n g,\n h,\n i = a.containerNode,\n j = 0;for (this.setStart(i, 0), this.collapse(!0), b = [i], d = !1, e = !1; !e && (c = b.pop());) {\n if (3 == c.nodeType) f = j + c.length, !d && a.start >= j && a.start <= f && (this.setStart(c, a.start - j), d = !0), d && a.end >= j && a.end <= f && (this.setEnd(c, a.end - j), e = !0), j = f;else for (h = c.childNodes, g = h.length; g--;) {\n b.push(h[g]);\n }\n }\n }, getName: function getName() {\n return \"DomRange\";\n }, equals: function equals(a) {\n return H.rangesEqual(this, a);\n }, isValid: function isValid() {\n return x(this);\n }, inspect: function inspect() {\n return m(this);\n }, detach: function detach() {} }), E(H, G), bb.extend(H, { rangeProperties: T, RangeIterator: n, copyComparisonConstants: C, createPrototypeRange: E, inspect: m, toHtml: A, getRangeDocument: c, rangesEqual: function rangesEqual(a, b) {\n return a.startContainer === b.startContainer && a.startOffset === b.startOffset && a.endContainer === b.endContainer && a.endOffset === b.endOffset;\n } }), a.DomRange = H;\n }), H.createCoreModule(\"WrappedRange\", [\"DomRange\"], function (a, b) {\n var c,\n d,\n e,\n f,\n g,\n h,\n i,\n j,\n k = a.dom,\n l = a.util,\n m = k.DomPosition,\n n = a.DomRange,\n o = k.getBody,\n p = k.getContentDocument,\n q = k.isCharacterDataNode;a.features.implementsDomRange && !function () {\n function d(a) {\n for (var b, c = s.length; c--;) {\n b = s[c], a[b] = a.nativeRange[b];\n }a.collapsed = a.startContainer === a.endContainer && a.startOffset === a.endOffset;\n }function e(a, b, c, d, e) {\n var f = a.startContainer !== b || a.startOffset != c,\n g = a.endContainer !== d || a.endOffset != e,\n h = !a.equals(a.nativeRange);(f || g || h) && (a.setEnd(d, e), a.setStart(b, c));\n }var f,\n g,\n h,\n i,\n j,\n m,\n q,\n r,\n s = n.rangeProperties;c = function c(a) {\n if (!a) throw b.createError(\"WrappedRange: Range must be specified\");this.nativeRange = a, d(this);\n }, n.createPrototypeRange(c, e), f = c.prototype, f.selectNode = function (a) {\n this.nativeRange.selectNode(a), d(this);\n }, f.cloneContents = function () {\n return this.nativeRange.cloneContents();\n }, f.surroundContents = function (a) {\n this.nativeRange.surroundContents(a), d(this);\n }, f.collapse = function (a) {\n this.nativeRange.collapse(a), d(this);\n }, f.cloneRange = function () {\n return new c(this.nativeRange.cloneRange());\n }, f.refresh = function () {\n d(this);\n }, f.toString = function () {\n return \"\" + this.nativeRange;\n }, h = document.createTextNode(\"test\"), o(document).appendChild(h), i = document.createRange(), i.setStart(h, 0), i.setEnd(h, 0);try {\n i.setStart(h, 1), f.setStart = function (a, b) {\n this.nativeRange.setStart(a, b), d(this);\n }, f.setEnd = function (a, b) {\n this.nativeRange.setEnd(a, b), d(this);\n }, g = function g(a) {\n return function (b) {\n this.nativeRange[a](b), d(this);\n };\n };\n } catch (t) {\n f.setStart = function (a, b) {\n try {\n this.nativeRange.setStart(a, b);\n } catch (c) {\n this.nativeRange.setEnd(a, b), this.nativeRange.setStart(a, b);\n }d(this);\n }, f.setEnd = function (a, b) {\n try {\n this.nativeRange.setEnd(a, b);\n } catch (c) {\n this.nativeRange.setStart(a, b), this.nativeRange.setEnd(a, b);\n }d(this);\n }, g = function g(a, b) {\n return function (c) {\n try {\n this.nativeRange[a](c);\n } catch (e) {\n this.nativeRange[b](c), this.nativeRange[a](c);\n }d(this);\n };\n };\n }f.setStartBefore = g(\"setStartBefore\", \"setEndBefore\"), f.setStartAfter = g(\"setStartAfter\", \"setEndAfter\"), f.setEndBefore = g(\"setEndBefore\", \"setStartBefore\"), f.setEndAfter = g(\"setEndAfter\", \"setStartAfter\"), f.selectNodeContents = function (a) {\n this.setStartAndEnd(a, 0, k.getNodeLength(a));\n }, i.selectNodeContents(h), i.setEnd(h, 3), j = document.createRange(), j.selectNodeContents(h), j.setEnd(h, 4), j.setStart(h, 2), f.compareBoundaryPoints = -1 == i.compareBoundaryPoints(i.START_TO_END, j) && 1 == i.compareBoundaryPoints(i.END_TO_START, j) ? function (a, b) {\n return b = b.nativeRange || b, a == b.START_TO_END ? a = b.END_TO_START : a == b.END_TO_START && (a = b.START_TO_END), this.nativeRange.compareBoundaryPoints(a, b);\n } : function (a, b) {\n return this.nativeRange.compareBoundaryPoints(a, b.nativeRange || b);\n }, m = document.createElement(\"div\"), m.innerHTML = \"123\", q = m.firstChild, r = o(document), r.appendChild(m), i.setStart(q, 1), i.setEnd(q, 2), i.deleteContents(), \"13\" == q.data && (f.deleteContents = function () {\n this.nativeRange.deleteContents(), d(this);\n }, f.extractContents = function () {\n var a = this.nativeRange.extractContents();return d(this), a;\n }), r.removeChild(m), r = null, l.isHostMethod(i, \"createContextualFragment\") && (f.createContextualFragment = function (a) {\n return this.nativeRange.createContextualFragment(a);\n }), o(document).removeChild(h), f.getName = function () {\n return \"WrappedRange\";\n }, a.WrappedRange = c, a.createNativeRange = function (a) {\n return a = p(a, b, \"createNativeRange\"), a.createRange();\n };\n }(), a.features.implementsTextRange && (e = function e(a) {\n var b,\n c,\n d,\n e = a.parentElement(),\n f = a.duplicate();return f.collapse(!0), b = f.parentElement(), f = a.duplicate(), f.collapse(!1), c = f.parentElement(), d = b == c ? b : k.getCommonAncestor(b, c), d == e ? d : k.getCommonAncestor(e, d);\n }, f = function f(a) {\n return 0 == a.compareEndPoints(\"StartToEnd\", a);\n }, g = function g(a, b, c, d, e) {\n var f,\n g,\n h,\n i,\n j,\n l,\n n,\n o,\n p,\n r,\n s,\n t,\n u,\n v,\n w,\n x,\n y = a.duplicate();if (y.collapse(c), f = y.parentElement(), k.isOrIsAncestorOf(b, f) || (f = b), !f.canHaveHTML) return g = new m(f.parentNode, k.getNodeIndex(f)), { boundaryPosition: g, nodeInfo: { nodeIndex: g.offset, containerElement: g.node } };for (h = k.getDocument(f).createElement(\"span\"), h.parentNode && h.parentNode.removeChild(h), j = c ? \"StartToStart\" : \"StartToEnd\", r = e && e.containerElement == f ? e.nodeIndex : 0, s = f.childNodes.length, t = s, u = t;;) {\n if (u == s ? f.appendChild(h) : f.insertBefore(h, f.childNodes[u]), y.moveToElementText(h), i = y.compareEndPoints(j, a), 0 == i || r == t) break;if (-1 == i) {\n if (t == r + 1) break;r = u;\n } else t = t == r + 1 ? r : u;u = Math.floor((r + t) / 2), f.removeChild(h);\n }if (p = h.nextSibling, -1 == i && p && q(p)) {\n if (y.setEndPoint(c ? \"EndToStart\" : \"EndToEnd\", a), /[\\r\\n]/.test(p.data)) for (w = y.duplicate(), x = w.text.replace(/\\r\\n/g, \"\\r\").length, v = w.moveStart(\"character\", x); -1 == (i = w.compareEndPoints(\"StartToEnd\", w));) {\n v++, w.moveStart(\"character\", 1);\n } else v = y.text.length;o = new m(p, v);\n } else l = (d || !c) && h.previousSibling, n = (d || c) && h.nextSibling, o = n && q(n) ? new m(n, 0) : l && q(l) ? new m(l, l.data.length) : new m(f, k.getNodeIndex(h));return h.parentNode.removeChild(h), { boundaryPosition: o, nodeInfo: { nodeIndex: u, containerElement: f } };\n }, h = function h(a, b) {\n var c,\n d,\n e,\n f,\n g = a.offset,\n h = k.getDocument(a.node),\n i = o(h).createTextRange(),\n j = q(a.node);return j ? (c = a.node, d = c.parentNode) : (f = a.node.childNodes, c = g < f.length ? f[g] : null, d = a.node), e = h.createElement(\"span\"), e.innerHTML = \"&#feff;\", c ? d.insertBefore(e, c) : d.appendChild(e), i.moveToElementText(e), i.collapse(!b), d.removeChild(e), j && i[b ? \"moveStart\" : \"moveEnd\"](\"character\", g), i;\n }, d = function d(a) {\n this.textRange = a, this.refresh();\n }, d.prototype = new n(document), d.prototype.refresh = function () {\n var a,\n b,\n c,\n d = e(this.textRange);\n f(this.textRange) ? b = a = g(this.textRange, d, !0, !0).boundaryPosition : (c = g(this.textRange, d, !0, !1), a = c.boundaryPosition, b = g(this.textRange, d, !1, !1, c.nodeInfo).boundaryPosition), this.setStart(a.node, a.offset), this.setEnd(b.node, b.offset);\n }, d.prototype.getName = function () {\n return \"WrappedTextRange\";\n }, n.copyComparisonConstants(d), i = function i(a) {\n var b, c, d;return a.collapsed ? h(new m(a.startContainer, a.startOffset), !0) : (b = h(new m(a.startContainer, a.startOffset), !0), c = h(new m(a.endContainer, a.endOffset), !1), d = o(n.getRangeDocument(a)).createTextRange(), d.setEndPoint(\"StartToStart\", b), d.setEndPoint(\"EndToEnd\", c), d);\n }, d.rangeToTextRange = i, d.prototype.toTextRange = function () {\n return i(this);\n }, a.WrappedTextRange = d, (!a.features.implementsDomRange || a.config.preferTextRange) && (j = function () {\n return this;\n }(), void 0 === j.Range && (j.Range = d), a.createNativeRange = function (a) {\n return a = p(a, b, \"createNativeRange\"), o(a).createTextRange();\n }, a.WrappedRange = d)), a.createRange = function (c) {\n return c = p(c, b, \"createRange\"), new a.WrappedRange(a.createNativeRange(c));\n }, a.createRangyRange = function (a) {\n return a = p(a, b, \"createRangyRange\"), new n(a);\n }, a.createIframeRange = function (c) {\n return b.deprecationNotice(\"createIframeRange()\", \"createRange(iframeEl)\"), a.createRange(c);\n }, a.createIframeRangyRange = function (c) {\n return b.deprecationNotice(\"createIframeRangyRange()\", \"createRangyRange(iframeEl)\"), a.createRangyRange(c);\n }, a.addShimListener(function (b) {\n var c = b.document;void 0 === c.createRange && (c.createRange = function () {\n return a.createRange(c);\n }), c = b = null;\n });\n }), H.createCoreModule(\"WrappedSelection\", [\"DomRange\", \"WrappedRange\"], function (a, b) {\n function c(a) {\n return \"string\" == typeof a ? /^backward(s)?$/i.test(a) : !!a;\n }function d(a, c) {\n if (a) {\n if (A.isWindow(a)) return a;if (a instanceof r) return a.win;var d = A.getContentDocument(a, b, c);return A.getWindow(d);\n }return window;\n }function e(a) {\n return d(a, \"getWinSelection\").getSelection();\n }function f(a) {\n return d(a, \"getDocSelection\").document.selection;\n }function g(a) {\n var b = !1;return a.anchorNode && (b = 1 == A.comparePoints(a.anchorNode, a.anchorOffset, a.focusNode, a.focusOffset)), b;\n }function h(a, b, c) {\n var d = c ? \"end\" : \"start\",\n e = c ? \"start\" : \"end\";a.anchorNode = b[d + \"Container\"], a.anchorOffset = b[d + \"Offset\"], a.focusNode = b[e + \"Container\"], a.focusOffset = b[e + \"Offset\"];\n }function i(a) {\n var b = a.nativeSelection;a.anchorNode = b.anchorNode, a.anchorOffset = b.anchorOffset, a.focusNode = b.focusNode, a.focusOffset = b.focusOffset;\n }function j(a) {\n a.anchorNode = a.focusNode = null, a.anchorOffset = a.focusOffset = 0, a.rangeCount = 0, a.isCollapsed = !0, a._ranges.length = 0;\n }function k(b) {\n var c;return b instanceof D ? (c = a.createNativeRange(b.getDocument()), c.setEnd(b.endContainer, b.endOffset), c.setStart(b.startContainer, b.startOffset)) : b instanceof E ? c = b.nativeRange : J.implementsDomRange && b instanceof A.getWindow(b.startContainer).Range && (c = b), c;\n }function l(a) {\n if (!a.length || 1 != a[0].nodeType) return !1;for (var b = 1, c = a.length; c > b; ++b) {\n if (!A.isAncestorOf(a[0], a[b])) return !1;\n }return !0;\n }function m(a) {\n var c = a.getNodes();if (!l(c)) throw b.createError(\"getSingleElementFromRange: range \" + a.inspect() + \" did not consist of a single element\");return c[0];\n }function n(a) {\n return !!a && void 0 !== a.text;\n }function o(a, b) {\n var c = new E(b);a._ranges = [c], h(a, c, !1), a.rangeCount = 1, a.isCollapsed = c.collapsed;\n }function p(b) {\n var c, d, e, f;if (b._ranges.length = 0, \"None\" == b.docSelection.type) j(b);else if (c = b.docSelection.createRange(), n(c)) o(b, c);else {\n for (b.rangeCount = c.length, e = L(c.item(0)), f = 0; f < b.rangeCount; ++f) {\n d = a.createRange(e), d.selectNode(c.item(f)), b._ranges.push(d);\n }b.isCollapsed = 1 == b.rangeCount && b._ranges[0].collapsed, h(b, b._ranges[b.rangeCount - 1], !1);\n }\n }function q(a, c) {\n var d,\n e,\n f = a.docSelection.createRange(),\n g = m(c),\n h = L(f.item(0)),\n i = M(h).createControlRange();for (d = 0, e = f.length; e > d; ++d) {\n i.add(f.item(d));\n }try {\n i.add(g);\n } catch (j) {\n throw b.createError(\"addRange(): Element within the specified Range could not be added to control selection (does it have layout?)\");\n }i.select(), p(a);\n }function r(a, b, c) {\n this.nativeSelection = a, this.docSelection = b, this._ranges = [], this.win = c, this.refresh();\n }function s(a) {\n a.win = a.anchorNode = a.focusNode = a._ranges = null, a.rangeCount = a.anchorOffset = a.focusOffset = 0, a.detached = !0;\n }function t(a, b) {\n for (var c, d, e = bb.length; e--;) {\n if (c = bb[e], d = c.selection, \"deleteAll\" == b) s(d);else if (c.win == a) return \"delete\" == b ? (bb.splice(e, 1), !0) : d;\n }return \"deleteAll\" == b && (bb.length = 0), null;\n }function u(a, c) {\n var d,\n e,\n f,\n g = L(c[0].startContainer),\n h = M(g).createControlRange();for (d = 0, f = c.length; f > d; ++d) {\n e = m(c[d]);try {\n h.add(e);\n } catch (i) {\n throw b.createError(\"setRanges(): Element within one of the specified Ranges could not be added to control selection (does it have layout?)\");\n }\n }h.select(), p(a);\n }function v(a, b) {\n if (a.win.document != L(b)) throw new F(\"WRONG_DOCUMENT_ERR\");\n }function w(b) {\n return function (c, d) {\n var e;this.rangeCount ? (e = this.getRangeAt(0), e[\"set\" + (b ? \"Start\" : \"End\")](c, d)) : (e = a.createRange(this.win.document), e.setStartAndEnd(c, d)), this.setSingleRange(e, this.isBackward());\n };\n }function x(a) {\n var b,\n c,\n d = [],\n e = new G(a.anchorNode, a.anchorOffset),\n f = new G(a.focusNode, a.focusOffset),\n g = \"function\" == typeof a.getName ? a.getName() : \"Selection\";if (void 0 !== a.rangeCount) for (b = 0, c = a.rangeCount; c > b; ++b) {\n d[b] = D.inspect(a.getRangeAt(b));\n }return \"[\" + g + \"(Ranges: \" + d.join(\", \") + \")(anchor: \" + e.inspect() + \", focus: \" + f.inspect() + \"]\";\n }var y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, $, _, ab, bb, cb, db, eb, fb, gb, hb;if (a.config.checkSelectionRanges = !0, y = \"boolean\", z = \"number\", A = a.dom, B = a.util, C = B.isHostMethod, D = a.DomRange, E = a.WrappedRange, F = a.DOMException, G = A.DomPosition, J = a.features, K = \"Control\", L = A.getDocument, M = A.getBody, N = D.rangesEqual, O = C(window, \"getSelection\"), P = B.isHostObject(document, \"selection\"), J.implementsWinGetSelection = O, J.implementsDocSelection = P, Q = P && (!O || a.config.preferTextRange), Q ? (H = f, a.isSelectionValid = function (a) {\n var b = d(a, \"isSelectionValid\").document,\n c = b.selection;return \"None\" != c.type || L(c.createRange().parentElement()) == b;\n }) : O ? (H = e, a.isSelectionValid = function () {\n return !0;\n }) : b.fail(\"Neither document.selection or window.getSelection() detected.\"), a.getNativeSelection = H, R = H(), S = a.createNativeRange(document), T = M(document), U = B.areHostProperties(R, [\"anchorNode\", \"focusNode\", \"anchorOffset\", \"focusOffset\"]), J.selectionHasAnchorAndFocus = U, V = C(R, \"extend\"), J.selectionHasExtend = V, W = _typeof(R.rangeCount) == z, J.selectionHasRangeCount = W, X = !1, Y = !0, Z = V ? function (b, c) {\n var d = D.getRangeDocument(c),\n e = a.createRange(d);e.collapseToPoint(c.endContainer, c.endOffset), b.addRange(k(e)), b.extend(c.startContainer, c.startOffset);\n } : null, B.areHostMethods(R, [\"addRange\", \"getRangeAt\", \"removeAllRanges\"]) && _typeof(R.rangeCount) == z && J.implementsDomRange && !function () {\n var b,\n c,\n d,\n e,\n f,\n h,\n i,\n j,\n k,\n l,\n m,\n n = window.getSelection();if (n) {\n for (b = n.rangeCount, c = b > 1, d = [], e = g(n), f = 0; b > f; ++f) {\n d[f] = n.getRangeAt(f);\n }for (h = M(document), i = h.appendChild(document.createElement(\"div\")), i.contentEditable = \"false\", j = i.appendChild(document.createTextNode(\" \")), k = document.createRange(), k.setStart(j, 1), k.collapse(!0), n.addRange(k), Y = 1 == n.rangeCount, n.removeAllRanges(), c || (l = window.navigator.appVersion.match(/Chrome\\/(.*?) /), l && parseInt(l[1]) >= 36 ? X = !1 : (m = k.cloneRange(), k.setStart(j, 0), m.setEnd(j, 3), m.setStart(j, 2), n.addRange(k), n.addRange(m), X = 2 == n.rangeCount)), h.removeChild(i), n.removeAllRanges(), f = 0; b > f; ++f) {\n 0 == f && e ? Z ? Z(n, d[f]) : (a.warn(\"Rangy initialization: original selection was backwards but selection has been restored forwards because the browser does not support Selection.extend\"), n.addRange(d[f])) : n.addRange(d[f]);\n }\n }\n }(), J.selectionSupportsMultipleRanges = X, J.collapsedNonEditableSelectionsSupported = Y, $ = !1, T && C(T, \"createControlRange\") && (_ = T.createControlRange(), B.areHostProperties(_, [\"item\", \"add\"]) && ($ = !0)), J.implementsControlRange = $, I = U ? function (a) {\n return a.anchorNode === a.focusNode && a.anchorOffset === a.focusOffset;\n } : function (a) {\n return a.rangeCount ? a.getRangeAt(a.rangeCount - 1).collapsed : !1;\n }, C(R, \"getRangeAt\") ? ab = function ab(a, b) {\n try {\n return a.getRangeAt(b);\n } catch (c) {\n return null;\n }\n } : U && (ab = function ab(b) {\n var c = L(b.anchorNode),\n d = a.createRange(c);return d.setStartAndEnd(b.anchorNode, b.anchorOffset, b.focusNode, b.focusOffset), d.collapsed !== this.isCollapsed && d.setStartAndEnd(b.focusNode, b.focusOffset, b.anchorNode, b.anchorOffset), d;\n }), r.prototype = a.selectionPrototype, bb = [], cb = function cb(a) {\n var b, c, e;return a && a instanceof r ? (a.refresh(), a) : (a = d(a, \"getNativeSelection\"), b = t(a), c = H(a), e = P ? f(a) : null, b ? (b.nativeSelection = c, b.docSelection = e, b.refresh()) : (b = new r(c, e, a), bb.push({ win: a, selection: b })), b);\n }, a.getSelection = cb, a.getIframeSelection = function (c) {\n return b.deprecationNotice(\"getIframeSelection()\", \"getSelection(iframeEl)\"), a.getSelection(A.getIframeWindow(c));\n }, db = r.prototype, !Q && U && B.areHostMethods(R, [\"removeAllRanges\", \"addRange\"])) db.removeAllRanges = function () {\n this.nativeSelection.removeAllRanges(), j(this);\n }, eb = function eb(a, b) {\n Z(a.nativeSelection, b), a.refresh();\n }, db.addRange = W ? function (b, d) {\n var e, f;$ && P && this.docSelection.type == K ? q(this, b) : c(d) && V ? eb(this, b) : (X ? e = this.rangeCount : (this.removeAllRanges(), e = 0), this.nativeSelection.addRange(k(b).cloneRange()), this.rangeCount = this.nativeSelection.rangeCount, this.rangeCount == e + 1 ? (a.config.checkSelectionRanges && (f = ab(this.nativeSelection, this.rangeCount - 1), f && !N(f, b) && (b = new E(f))), this._ranges[this.rangeCount - 1] = b, h(this, b, hb(this.nativeSelection)), this.isCollapsed = I(this)) : this.refresh());\n } : function (a, b) {\n c(b) && V ? eb(this, a) : (this.nativeSelection.addRange(k(a)), this.refresh());\n }, db.setRanges = function (a) {\n if ($ && P && a.length > 1) u(this, a);else {\n this.removeAllRanges();for (var b = 0, c = a.length; c > b; ++b) {\n this.addRange(a[b]);\n }\n }\n };else {\n if (!(C(R, \"empty\") && C(S, \"select\") && $ && Q)) return b.fail(\"No means of selecting a Range or TextRange was found\"), !1;db.removeAllRanges = function () {\n var a, b, c;try {\n this.docSelection.empty(), \"None\" != this.docSelection.type && (this.anchorNode ? a = L(this.anchorNode) : this.docSelection.type == K && (b = this.docSelection.createRange(), b.length && (a = L(b.item(0)))), a && (c = M(a).createTextRange(), c.select(), this.docSelection.empty()));\n } catch (d) {}j(this);\n }, db.addRange = function (b) {\n this.docSelection.type == K ? q(this, b) : (a.WrappedTextRange.rangeToTextRange(b).select(), this._ranges[0] = b, this.rangeCount = 1, this.isCollapsed = this._ranges[0].collapsed, h(this, b, !1));\n }, db.setRanges = function (a) {\n this.removeAllRanges();var b = a.length;b > 1 ? u(this, a) : b && this.addRange(a[0]);\n };\n }if (db.getRangeAt = function (a) {\n if (0 > a || a >= this.rangeCount) throw new F(\"INDEX_SIZE_ERR\");return this._ranges[a].cloneRange();\n }, Q) fb = function fb(b) {\n var c;a.isSelectionValid(b.win) ? c = b.docSelection.createRange() : (c = M(b.win.document).createTextRange(), c.collapse(!0)), b.docSelection.type == K ? p(b) : n(c) ? o(b, c) : j(b);\n };else if (C(R, \"getRangeAt\") && _typeof(R.rangeCount) == z) fb = function fb(b) {\n if ($ && P && b.docSelection.type == K) p(b);else if (b._ranges.length = b.rangeCount = b.nativeSelection.rangeCount, b.rangeCount) {\n for (var c = 0, d = b.rangeCount; d > c; ++c) {\n b._ranges[c] = new a.WrappedRange(b.nativeSelection.getRangeAt(c));\n }h(b, b._ranges[b.rangeCount - 1], hb(b.nativeSelection)), b.isCollapsed = I(b);\n } else j(b);\n };else {\n if (!U || _typeof(R.isCollapsed) != y || _typeof(S.collapsed) != y || !J.implementsDomRange) return b.fail(\"No means of obtaining a Range or TextRange from the user's selection was found\"), !1;fb = function fb(a) {\n var b,\n c = a.nativeSelection;c.anchorNode ? (b = ab(c, 0), a._ranges = [b], a.rangeCount = 1, i(a), a.isCollapsed = I(a)) : j(a);\n };\n }db.refresh = function (a) {\n var b,\n c = a ? this._ranges.slice(0) : null,\n d = this.anchorNode,\n e = this.anchorOffset;if (fb(this), a) {\n if (b = c.length, b != this._ranges.length) return !0;if (this.anchorNode != d || this.anchorOffset != e) return !0;for (; b--;) {\n if (!N(c[b], this._ranges[b])) return !0;\n }return !1;\n }\n }, gb = function gb(a, b) {\n var c,\n d,\n e = a.getAllRanges();for (a.removeAllRanges(), c = 0, d = e.length; d > c; ++c) {\n N(b, e[c]) || a.addRange(e[c]);\n }a.rangeCount || j(a);\n }, db.removeRange = $ && P ? function (a) {\n var b, c, d, e, f, g, h, i;if (this.docSelection.type == K) {\n for (b = this.docSelection.createRange(), c = m(a), d = L(b.item(0)), e = M(d).createControlRange(), g = !1, h = 0, i = b.length; i > h; ++h) {\n f = b.item(h), f !== c || g ? e.add(b.item(h)) : g = !0;\n }e.select(), p(this);\n } else gb(this, a);\n } : function (a) {\n gb(this, a);\n }, !Q && U && J.implementsDomRange ? (hb = g, db.isBackward = function () {\n return hb(this);\n }) : hb = db.isBackward = function () {\n return !1;\n }, db.isBackwards = db.isBackward, db.toString = function () {\n var a,\n b,\n c = [];for (a = 0, b = this.rangeCount; b > a; ++a) {\n c[a] = \"\" + this._ranges[a];\n }return c.join(\"\");\n }, db.collapse = function (b, c) {\n v(this, b);var d = a.createRange(b);d.collapseToPoint(b, c), this.setSingleRange(d), this.isCollapsed = !0;\n }, db.collapseToStart = function () {\n if (!this.rangeCount) throw new F(\"INVALID_STATE_ERR\");var a = this._ranges[0];this.collapse(a.startContainer, a.startOffset);\n }, db.collapseToEnd = function () {\n if (!this.rangeCount) throw new F(\"INVALID_STATE_ERR\");var a = this._ranges[this.rangeCount - 1];this.collapse(a.endContainer, a.endOffset);\n }, db.selectAllChildren = function (b) {\n v(this, b);var c = a.createRange(b);c.selectNodeContents(b), this.setSingleRange(c);\n }, db.deleteFromDocument = function () {\n var a, b, c, d, e;if ($ && P && this.docSelection.type == K) {\n for (a = this.docSelection.createRange(); a.length;) {\n b = a.item(0), a.remove(b), b.parentNode.removeChild(b);\n }this.refresh();\n } else if (this.rangeCount && (c = this.getAllRanges(), c.length)) {\n for (this.removeAllRanges(), d = 0, e = c.length; e > d; ++d) {\n c[d].deleteContents();\n }this.addRange(c[e - 1]);\n }\n }, db.eachRange = function (a, b) {\n for (var c = 0, d = this._ranges.length; d > c; ++c) {\n if (a(this.getRangeAt(c))) return b;\n }\n }, db.getAllRanges = function () {\n var a = [];return this.eachRange(function (b) {\n a.push(b);\n }), a;\n }, db.setSingleRange = function (a, b) {\n this.removeAllRanges(), this.addRange(a, b);\n }, db.callMethodOnEachRange = function (a, b) {\n var c = [];return this.eachRange(function (d) {\n c.push(d[a].apply(d, b));\n }), c;\n }, db.setStart = w(!0), db.setEnd = w(!1), a.rangePrototype.select = function (a) {\n cb(this.getDocument()).setSingleRange(this, a);\n }, db.changeEachRange = function (a) {\n var b = [],\n c = this.isBackward();this.eachRange(function (c) {\n a(c), b.push(c);\n }), this.removeAllRanges(), c && 1 == b.length ? this.addRange(b[0], \"backward\") : this.setRanges(b);\n }, db.containsNode = function (a, b) {\n return this.eachRange(function (c) {\n return c.containsNode(a, b);\n }, !0) || !1;\n }, db.getBookmark = function (a) {\n return { backward: this.isBackward(), rangeBookmarks: this.callMethodOnEachRange(\"getBookmark\", [a]) };\n }, db.moveToBookmark = function (b) {\n var c,\n d,\n e,\n f = [];for (c = 0; d = b.rangeBookmarks[c++];) {\n e = a.createRange(this.win), e.moveToBookmark(d), f.push(e);\n }b.backward ? this.setSingleRange(f[0], \"backward\") : this.setRanges(f);\n }, db.toHtml = function () {\n var a = [];return this.eachRange(function (b) {\n a.push(D.toHtml(b));\n }), a.join(\"\");\n }, J.implementsTextRange && (db.getNativeTextRange = function () {\n var c, d;if (c = this.docSelection) {\n if (d = c.createRange(), n(d)) return d;throw b.createError(\"getNativeTextRange: selection is a control selection\");\n }if (this.rangeCount > 0) return a.WrappedTextRange.rangeToTextRange(this.getRangeAt(0));throw b.createError(\"getNativeTextRange: selection contains no range\");\n }), db.getName = function () {\n return \"WrappedSelection\";\n }, db.inspect = function () {\n return x(this);\n }, db.detach = function () {\n t(this.win, \"delete\"), s(this);\n }, r.detachAll = function () {\n t(null, \"deleteAll\");\n }, r.inspect = x, r.isDirectionBackward = c, a.Selection = r, a.selectionPrototype = db, a.addShimListener(function (a) {\n void 0 === a.getSelection && (a.getSelection = function () {\n return cb(a);\n }), a = null;\n });\n }), H);\n}, this), function (a, b) {\n true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"rangy\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())], __WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : a(b.rangy);\n}(function (a) {\n a.createModule(\"SaveRestore\", [\"WrappedRange\"], function (a, b) {\n function c(a, b) {\n return (b || document).getElementById(a);\n }function d(a, b) {\n var c,\n d = \"selectionBoundary_\" + +new Date() + \"_\" + (\"\" + Math.random()).slice(2),\n e = o.getDocument(a.startContainer),\n f = a.cloneRange();return f.collapse(b), c = e.createElement(\"span\"), c.id = d, c.style.lineHeight = \"0\", c.style.display = \"none\", c.className = \"rangySelectionBoundary\", c.appendChild(e.createTextNode(p)), f.insertNode(c), c;\n }function e(a, d, e, f) {\n var g = c(e, a);g ? (d[f ? \"setStartBefore\" : \"setEndBefore\"](g), g.parentNode.removeChild(g)) : b.warn(\"Marker element has been removed. Cannot restore selection.\");\n }function f(a, b) {\n return b.compareBoundaryPoints(a.START_TO_START, a);\n }function g(b, c) {\n var e,\n f,\n g = a.DomRange.getRangeDocument(b),\n h = \"\" + b;return b.collapsed ? (f = d(b, !1), { document: g, markerId: f.id, collapsed: !0 }) : (f = d(b, !1), e = d(b, !0), { document: g, startMarkerId: e.id, endMarkerId: f.id, collapsed: !1, backward: c, toString: function toString() {\n return \"original text: '\" + h + \"', new text: '\" + b + \"'\";\n } });\n }function h(d, f) {\n var g,\n h,\n i,\n j = d.document;return void 0 === f && (f = !0), g = a.createRange(j), d.collapsed ? (h = c(d.markerId, j), h ? (h.style.display = \"inline\", i = h.previousSibling, i && 3 == i.nodeType ? (h.parentNode.removeChild(h), g.collapseToPoint(i, i.length)) : (g.collapseBefore(h), h.parentNode.removeChild(h))) : b.warn(\"Marker element has been removed. Cannot restore selection.\")) : (e(j, g, d.startMarkerId, !0), e(j, g, d.endMarkerId, !1)), f && g.normalizeBoundaries(), g;\n }function i(b, d) {\n var e,\n h,\n i,\n j,\n k = [];for (b = b.slice(0), b.sort(f), i = 0, j = b.length; j > i; ++i) {\n k[i] = g(b[i], d);\n }for (i = j - 1; i >= 0; --i) {\n e = b[i], h = a.DomRange.getRangeDocument(e), e.collapsed ? e.collapseAfter(c(k[i].markerId, h)) : (e.setEndBefore(c(k[i].endMarkerId, h)), e.setStartAfter(c(k[i].startMarkerId, h)));\n }return k;\n }function j(c) {\n var d, e, f, g;return a.isSelectionValid(c) ? (d = a.getSelection(c), e = d.getAllRanges(), f = 1 == e.length && d.isBackward(), g = i(e, f), f ? d.setSingleRange(e[0], \"backward\") : d.setRanges(e), { win: c, rangeInfos: g, restored: !1 }) : (b.warn(\"Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus.\"), null);\n }function k(a) {\n var b,\n c = [],\n d = a.length;for (b = d - 1; b >= 0; b--) {\n c[b] = h(a[b], !0);\n }return c;\n }function l(b, c) {\n var d, e, f, g;b.restored || (d = b.rangeInfos, e = a.getSelection(b.win), f = k(d), g = d.length, 1 == g && c && a.features.selectionHasExtend && d[0].backward ? (e.removeAllRanges(), e.addRange(f[0], !0)) : e.setRanges(f), b.restored = !0);\n }function m(a, b) {\n var d = c(b, a);d && d.parentNode.removeChild(d);\n }function n(a) {\n var b,\n c,\n d,\n e = a.rangeInfos;for (b = 0, c = e.length; c > b; ++b) {\n d = e[b], d.collapsed ? m(a.doc, d.markerId) : (m(a.doc, d.startMarkerId), m(a.doc, d.endMarkerId));\n }\n }var o = a.dom,\n p = \"\";a.util.extend(a, { saveRange: g, restoreRange: h, saveRanges: i, restoreRanges: k, saveSelection: j, restoreSelection: l, removeMarkerElement: m, removeMarkers: n });\n });\n}, this), Base = function Base() {}, Base.extend = function (a, b) {\n var c,\n d,\n e,\n f = Base.prototype.extend;return Base._prototyping = !0, c = new this(), f.call(c, a), c.base = function () {}, delete Base._prototyping, d = c.constructor, e = c.constructor = function () {\n if (!Base._prototyping) if (this._constructing || this.constructor == e) this._constructing = !0, d.apply(this, arguments), delete this._constructing;else if (null != arguments[0]) return (arguments[0].extend || f).call(arguments[0], c);\n }, e.ancestor = this, e.extend = this.extend, e.forEach = this.forEach, e.implement = this.implement, e.prototype = c, e.toString = this.toString, e.valueOf = function (a) {\n return \"object\" == a ? e : d.valueOf();\n }, f.call(e, b), \"function\" == typeof e.init && e.init(), e;\n}, Base.prototype = { extend: function extend(a, b) {\n var c, d, e, f, g, h, i;if (arguments.length > 1) c = this[a], !c || \"function\" != typeof b || c.valueOf && c.valueOf() == b.valueOf() || !/\\bbase\\b/.test(b) || (d = b.valueOf(), b = function b() {\n var a,\n b = this.base || Base.prototype.base;return this.base = c, a = d.apply(this, arguments), this.base = b, a;\n }, b.valueOf = function (a) {\n return \"object\" == a ? b : d;\n }, b.toString = Base.toString), this[a] = b;else if (a) {\n for (e = Base.prototype.extend, Base._prototyping || \"function\" == typeof this || (e = this.extend || e), f = { toSource: null }, g = [\"constructor\", \"toString\", \"valueOf\"], h = Base._prototyping ? 0 : 1; i = g[h++];) {\n a[i] != f[i] && e.call(this, i, a[i]);\n }for (i in a) {\n f[i] || e.call(this, i, a[i]);\n }\n }return this;\n } }, Base = Base.extend({ constructor: function constructor() {\n this.extend(arguments[0]);\n } }, { ancestor: Object, version: \"1.1\", forEach: function forEach(a, b, c) {\n for (var d in a) {\n void 0 === this.prototype[d] && b.call(c, a[d], d, a);\n }\n }, implement: function implement() {\n for (var a = 0; a < arguments.length; a++) {\n \"function\" == typeof arguments[a] ? arguments[a](this.prototype) : this.prototype.extend(arguments[a]);\n }return this;\n }, toString: function toString() {\n return this.valueOf() + \"\";\n } }), wysihtml5.browser = function () {\n function a(a) {\n return +(/ipad|iphone|ipod/.test(a) && a.match(/ os (\\d+).+? like mac os x/) || [void 0, 0])[1];\n }function b(a) {\n return +(a.match(/android (\\d+)/) || [void 0, 0])[1];\n }function c(a, b) {\n var c,\n d = -1;return \"Microsoft Internet Explorer\" == navigator.appName ? c = RegExp(\"MSIE ([0-9]{1,}[.0-9]{0,})\") : \"Netscape\" == navigator.appName && (c = RegExp(\"Trident/.*rv:([0-9]{1,}[.0-9]{0,})\")), c && null != c.exec(navigator.userAgent) && (d = parseFloat(RegExp.$1)), -1 === d ? !1 : a ? b ? \"<\" === b ? d > a : \">\" === b ? a > d : \"<=\" === b ? d >= a : \">=\" === b ? a >= d : void 0 : a === d : !0;\n }var d = navigator.userAgent,\n e = document.createElement(\"div\"),\n f = -1 !== d.indexOf(\"Gecko\") && -1 === d.indexOf(\"KHTML\"),\n g = -1 !== d.indexOf(\"AppleWebKit/\"),\n h = -1 !== d.indexOf(\"Chrome/\"),\n i = -1 !== d.indexOf(\"Opera/\");return { USER_AGENT: d, supported: function supported() {\n var c = this.USER_AGENT.toLowerCase(),\n d = \"contentEditable\" in e,\n f = document.execCommand && document.queryCommandSupported && document.queryCommandState,\n g = document.querySelector && document.querySelectorAll,\n h = this.isIos() && a(c) < 5 || this.isAndroid() && b(c) < 4 || -1 !== c.indexOf(\"opera mobi\") || -1 !== c.indexOf(\"hpwos/\");return d && f && g && !h;\n }, isTouchDevice: function isTouchDevice() {\n return this.supportsEvent(\"touchmove\");\n }, isIos: function isIos() {\n return (/ipad|iphone|ipod/i.test(this.USER_AGENT)\n );\n }, isAndroid: function isAndroid() {\n return -1 !== this.USER_AGENT.indexOf(\"Android\");\n }, supportsSandboxedIframes: function supportsSandboxedIframes() {\n return c();\n }, throwsMixedContentWarningWhenIframeSrcIsEmpty: function throwsMixedContentWarningWhenIframeSrcIsEmpty() {\n return !(\"querySelector\" in document);\n }, displaysCaretInEmptyContentEditableCorrectly: function displaysCaretInEmptyContentEditableCorrectly() {\n return c();\n }, hasCurrentStyleProperty: function hasCurrentStyleProperty() {\n return \"currentStyle\" in e;\n }, hasHistoryIssue: function hasHistoryIssue() {\n return f && \"Mac\" === navigator.platform.substr(0, 3);\n }, insertsLineBreaksOnReturn: function insertsLineBreaksOnReturn() {\n return f;\n }, supportsPlaceholderAttributeOn: function supportsPlaceholderAttributeOn(a) {\n return \"placeholder\" in a;\n }, supportsEvent: function supportsEvent(a) {\n return \"on\" + a in e || function () {\n return e.setAttribute(\"on\" + a, \"return;\"), \"function\" == typeof e[\"on\" + a];\n }();\n }, supportsEventsInIframeCorrectly: function supportsEventsInIframeCorrectly() {\n return !i;\n }, supportsHTML5Tags: function supportsHTML5Tags(a) {\n var b = a.createElement(\"div\"),\n c = \"<article>foo</article>\";return b.innerHTML = c, b.innerHTML.toLowerCase() === c;\n }, supportsCommand: function () {\n var a = { formatBlock: c(10, \"<=\"), insertUnorderedList: c(), insertOrderedList: c() },\n b = { insertHTML: f };return function (c, d) {\n var e = a[d];if (!e) {\n try {\n return c.queryCommandSupported(d);\n } catch (f) {}try {\n return c.queryCommandEnabled(d);\n } catch (g) {\n return !!b[d];\n }\n }return !1;\n };\n }(), doesAutoLinkingInContentEditable: function doesAutoLinkingInContentEditable() {\n return c();\n }, canDisableAutoLinking: function canDisableAutoLinking() {\n return this.supportsCommand(document, \"AutoUrlDetect\");\n }, clearsContentEditableCorrectly: function clearsContentEditableCorrectly() {\n return f || i || g;\n }, supportsGetAttributeCorrectly: function supportsGetAttributeCorrectly() {\n var a = document.createElement(\"td\");return \"1\" != a.getAttribute(\"rowspan\");\n }, canSelectImagesInContentEditable: function canSelectImagesInContentEditable() {\n return f || c() || i;\n }, autoScrollsToCaret: function autoScrollsToCaret() {\n return !g;\n }, autoClosesUnclosedTags: function autoClosesUnclosedTags() {\n var a,\n b,\n c = e.cloneNode(!1);return c.innerHTML = \"<p><div></div>\", b = c.innerHTML.toLowerCase(), a = \"<p></p><div></div>\" === b || \"<p><div></div></p>\" === b, this.autoClosesUnclosedTags = function () {\n return a;\n }, a;\n }, supportsNativeGetElementsByClassName: function supportsNativeGetElementsByClassName() {\n return -1 !== (document.getElementsByClassName + \"\").indexOf(\"[native code]\");\n }, supportsSelectionModify: function supportsSelectionModify() {\n return \"getSelection\" in window && \"modify\" in window.getSelection();\n }, needsSpaceAfterLineBreak: function needsSpaceAfterLineBreak() {\n return i;\n }, supportsSpeechApiOn: function supportsSpeechApiOn(a) {\n var b = d.match(/Chrome\\/(\\d+)/) || [void 0, 0];return b[1] >= 11 && (\"onwebkitspeechchange\" in a || \"speech\" in a);\n }, crashesWhenDefineProperty: function crashesWhenDefineProperty(a) {\n return c(9) && (\"XMLHttpRequest\" === a || \"XDomainRequest\" === a);\n }, doesAsyncFocus: function doesAsyncFocus() {\n return c();\n }, hasProblemsSettingCaretAfterImg: function hasProblemsSettingCaretAfterImg() {\n return c();\n }, hasUndoInContextMenu: function hasUndoInContextMenu() {\n return f || h || i;\n }, hasInsertNodeIssue: function hasInsertNodeIssue() {\n return i;\n }, hasIframeFocusIssue: function hasIframeFocusIssue() {\n return c();\n }, createsNestedInvalidMarkupAfterPaste: function createsNestedInvalidMarkupAfterPaste() {\n return g;\n }, supportsMutationEvents: function supportsMutationEvents() {\n return \"MutationEvent\" in window;\n }, supportsModenPaste: function supportsModenPaste() {\n return !(\"clipboardData\" in window);\n } };\n}(), wysihtml5.lang.array = function (a) {\n return { contains: function contains(b) {\n if (Array.isArray(b)) {\n for (var c = b.length; c--;) {\n if (-1 !== wysihtml5.lang.array(a).indexOf(b[c])) return !0;\n }return !1;\n }return -1 !== wysihtml5.lang.array(a).indexOf(b);\n }, indexOf: function indexOf(b) {\n if (a.indexOf) return a.indexOf(b);for (var c = 0, d = a.length; d > c; c++) {\n if (a[c] === b) return c;\n }return -1;\n }, without: function without(b) {\n b = wysihtml5.lang.array(b);for (var c = [], d = 0, e = a.length; e > d; d++) {\n b.contains(a[d]) || c.push(a[d]);\n }return c;\n }, get: function get() {\n for (var b = 0, c = a.length, d = []; c > b; b++) {\n d.push(a[b]);\n }return d;\n }, map: function map(b, c) {\n if (Array.prototype.map) return a.map(b, c);for (var d = a.length >>> 0, e = Array(d), f = 0; d > f; f++) {\n e[f] = b.call(c, a[f], f, a);\n }return e;\n }, unique: function unique() {\n for (var b = [], c = a.length, d = 0; c > d;) {\n wysihtml5.lang.array(b).contains(a[d]) || b.push(a[d]), d++;\n }return b;\n } };\n}, wysihtml5.lang.Dispatcher = Base.extend({ on: function on(a, b) {\n return this.events = this.events || {}, this.events[a] = this.events[a] || [], this.events[a].push(b), this;\n }, off: function off(a, b) {\n this.events = this.events || {};var c,\n d,\n e = 0;if (a) {\n for (c = this.events[a] || [], d = []; e < c.length; e++) {\n c[e] !== b && b && d.push(c[e]);\n }this.events[a] = d;\n } else this.events = {};return this;\n }, fire: function fire(a, b) {\n this.events = this.events || {};for (var c = this.events[a] || [], d = 0; d < c.length; d++) {\n c[d].call(this, b);\n }return this;\n }, observe: function observe() {\n return this.on.apply(this, arguments);\n }, stopObserving: function stopObserving() {\n return this.off.apply(this, arguments);\n } }), wysihtml5.lang.object = function (a) {\n return { merge: function merge(b) {\n for (var c in b) {\n a[c] = b[c];\n }return this;\n }, get: function get() {\n return a;\n }, clone: function clone(b) {\n var c,\n d = {};if (null === a || !wysihtml5.lang.object(a).isPlainObject()) return a;for (c in a) {\n a.hasOwnProperty(c) && (d[c] = b ? wysihtml5.lang.object(a[c]).clone(b) : a[c]);\n }return d;\n }, isArray: function isArray() {\n return \"[object Array]\" === Object.prototype.toString.call(a);\n }, isFunction: function isFunction() {\n return \"[object Function]\" === Object.prototype.toString.call(a);\n }, isPlainObject: function isPlainObject() {\n return \"[object Object]\" === Object.prototype.toString.call(a);\n } };\n}, function () {\n var a = /^\\s+/,\n b = /\\s+$/,\n c = /[&<>\\t\"]/g,\n d = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"\t\": \" \" };wysihtml5.lang.string = function (e) {\n return e += \"\", { trim: function trim() {\n return e.replace(a, \"\").replace(b, \"\");\n }, interpolate: function interpolate(a) {\n for (var b in a) {\n e = this.replace(\"#{\" + b + \"}\").by(a[b]);\n }return e;\n }, replace: function replace(a) {\n return { by: function by(b) {\n return e.split(a).join(b);\n } };\n }, escapeHTML: function escapeHTML(a, b) {\n var f = e.replace(c, function (a) {\n return d[a];\n });return a && (f = f.replace(/(?:\\r\\n|\\r|\\n)/g, \"<br />\")), b && (f = f.replace(/ /gi, \" \")), f;\n } };\n };\n}(), function (a) {\n function b(a, b) {\n return f(a, b) ? a : (a === a.ownerDocument.documentElement && (a = a.ownerDocument.body), g(a, b));\n }function c(a) {\n return a.replace(i, function (a, b) {\n var c,\n d,\n e = (b.match(j) || [])[1] || \"\",\n f = l[e];return b = b.replace(j, \"\"), b.split(f).length > b.split(e).length && (b += e, e = \"\"), c = b, d = b, b.length > k && (d = d.substr(0, k) + \"...\"), \"www.\" === c.substr(0, 4) && (c = \"http://\" + c), '<a href=\"' + c + '\">' + d + \"</a>\" + e;\n });\n }function d(a) {\n var b = a._wysihtml5_tempElement;return b || (b = a._wysihtml5_tempElement = a.createElement(\"div\")), b;\n }function e(b) {\n var e = b.parentNode,\n f = a.lang.string(b.data).escapeHTML(),\n g = d(e.ownerDocument);for (g.innerHTML = \"<span></span>\" + c(f), g.removeChild(g.firstChild); g.firstChild;) {\n e.insertBefore(g.firstChild, b);\n }e.removeChild(b);\n }function f(b, c) {\n for (var d; b.parentNode;) {\n if (b = b.parentNode, d = b.nodeName, b.className && a.lang.array(b.className.split(\" \")).contains(c)) return !0;if (h.contains(d)) return !0;if (\"body\" === d) return !1;\n }return !1;\n }function g(b, c) {\n if (!(h.contains(b.nodeName) || b.className && a.lang.array(b.className.split(\" \")).contains(c))) {\n if (b.nodeType === a.TEXT_NODE && b.data.match(i)) return e(b), void 0;for (var d = a.lang.array(b.childNodes).get(), f = d.length, j = 0; f > j; j++) {\n g(d[j], c);\n }return b;\n }\n }var h = a.lang.array([\"CODE\", \"PRE\", \"A\", \"SCRIPT\", \"HEAD\", \"TITLE\", \"STYLE\"]),\n i = /((https?:\\/\\/|www\\.)[^\\s<]{3,})/gi,\n j = /([^\\w\\/\\-](,?))$/i,\n k = 100,\n l = { \")\": \"(\", \"]\": \"[\", \"}\": \"{\" };a.dom.autoLink = b, a.dom.autoLink.URL_REG_EXP = i;\n}(wysihtml5), function (a) {\n var b = a.dom;b.addClass = function (a, c) {\n var d = a.classList;return d ? d.add(c) : (b.hasClass(a, c) || (a.className += \" \" + c), void 0);\n }, b.removeClass = function (a, b) {\n var c = a.classList;return c ? c.remove(b) : (a.className = a.className.replace(RegExp(\"(^|\\\\s+)\" + b + \"(\\\\s+|$)\"), \" \"), void 0);\n }, b.hasClass = function (a, b) {\n var c,\n d = a.classList;return d ? d.contains(b) : (c = a.className, c.length > 0 && (c == b || RegExp(\"(^|\\\\s)\" + b + \"(\\\\s|$)\").test(c)));\n };\n}(wysihtml5), wysihtml5.dom.contains = function () {\n var a = document.documentElement;return a.contains ? function (a, b) {\n return b.nodeType !== wysihtml5.ELEMENT_NODE && (b = b.parentNode), a !== b && a.contains(b);\n } : a.compareDocumentPosition ? function (a, b) {\n return !!(16 & a.compareDocumentPosition(b));\n } : void 0;\n}(), wysihtml5.dom.convertToList = function () {\n function a(a, b) {\n var c = a.createElement(\"li\");return b.appendChild(c), c;\n }function b(a, b) {\n return a.createElement(b);\n }function c(c, d, e) {\n if (\"UL\" === c.nodeName || \"OL\" === c.nodeName || \"MENU\" === c.nodeName) return c;var f,\n g,\n h,\n i,\n j,\n k,\n l,\n m,\n n,\n o = c.ownerDocument,\n p = b(o, d),\n q = c.querySelectorAll(\"br\"),\n r = q.length;for (n = 0; r > n; n++) {\n for (i = q[n]; (j = i.parentNode) && j !== c && j.lastChild === i;) {\n if (\"block\" === wysihtml5.dom.getStyle(\"display\").from(j)) {\n j.removeChild(i);break;\n }wysihtml5.dom.insert(i).after(i.parentNode);\n }\n }for (f = wysihtml5.lang.array(c.childNodes).get(), g = f.length, n = 0; g > n; n++) {\n m = m || a(o, p), h = f[n], k = \"block\" === wysihtml5.dom.getStyle(\"display\").from(h), l = \"BR\" === h.nodeName, !k || e && wysihtml5.dom.hasClass(h, e) ? l ? m = m.firstChild ? null : m : m.appendChild(h) : (m = m.firstChild ? a(o, p) : m, m.appendChild(h), m = null);\n }return 0 === f.length && a(o, p), c.parentNode.replaceChild(p, c), p;\n }return c;\n}(), wysihtml5.dom.copyAttributes = function (a) {\n return { from: function from(b) {\n return { to: function to(c) {\n for (var d, e = 0, f = a.length; f > e; e++) {\n d = a[e], void 0 !== b[d] && \"\" !== b[d] && (c[d] = b[d]);\n }return { andTo: arguments.callee };\n } };\n } };\n}, function (a) {\n var b = [\"-webkit-box-sizing\", \"-moz-box-sizing\", \"-ms-box-sizing\", \"box-sizing\"],\n c = function c(b) {\n return d(b) ? parseInt(a.getStyle(\"width\").from(b), 10) < b.offsetWidth : !1;\n },\n d = function d(c) {\n for (var d = 0, e = b.length; e > d; d++) {\n if (\"border-box\" === a.getStyle(b[d]).from(c)) return b[d];\n }\n };a.copyStyles = function (d) {\n return { from: function from(e) {\n c(e) && (d = wysihtml5.lang.array(d).without(b));for (var f, g = \"\", h = d.length, i = 0; h > i; i++) {\n f = d[i], g += f + \":\" + a.getStyle(f).from(e) + \";\";\n }return { to: function to(b) {\n return a.setStyles(g).on(b), { andTo: arguments.callee };\n } };\n } };\n };\n}(wysihtml5.dom), function (a) {\n a.dom.delegate = function (b, c, d, e) {\n return a.dom.observe(b, d, function (d) {\n for (var f = d.target, g = a.lang.array(b.querySelectorAll(c)); f && f !== b;) {\n if (g.contains(f)) {\n e.call(f, d);break;\n }f = f.parentNode;\n }\n });\n };\n}(wysihtml5), function (a) {\n a.dom.domNode = function (b) {\n var c = [a.ELEMENT_NODE, a.TEXT_NODE],\n d = function d(b) {\n return b.nodeType === a.TEXT_NODE && /^\\s*$/g.test(b.data);\n };return { prev: function prev(e) {\n var f = b.previousSibling,\n g = e && e.nodeTypes ? e.nodeTypes : c;return f ? !a.lang.array(g).contains(f.nodeType) || e && e.ignoreBlankTexts && d(f) ? a.dom.domNode(f).prev(e) : f : null;\n }, next: function next(e) {\n var f = b.nextSibling,\n g = e && e.nodeTypes ? e.nodeTypes : c;return f ? !a.lang.array(g).contains(f.nodeType) || e && e.ignoreBlankTexts && d(f) ? a.dom.domNode(f).next(e) : f : null;\n } };\n };\n}(wysihtml5), wysihtml5.dom.getAsDom = function () {\n var a = function a(_a, b) {\n var c = b.createElement(\"div\");c.style.display = \"none\", b.body.appendChild(c);try {\n c.innerHTML = _a;\n } catch (d) {}return b.body.removeChild(c), c;\n },\n b = function b(a) {\n if (!a._wysihtml5_supportsHTML5Tags) {\n for (var b = 0, d = c.length; d > b; b++) {\n a.createElement(c[b]);\n }a._wysihtml5_supportsHTML5Tags = !0;\n }\n },\n c = [\"abbr\", \"article\", \"aside\", \"audio\", \"bdi\", \"canvas\", \"command\", \"datalist\", \"details\", \"figcaption\", \"figure\", \"footer\", \"header\", \"hgroup\", \"keygen\", \"mark\", \"meter\", \"nav\", \"output\", \"progress\", \"rp\", \"rt\", \"ruby\", \"svg\", \"section\", \"source\", \"summary\", \"time\", \"track\", \"video\", \"wbr\"];return function (c, d) {\n d = d || document;var e;return \"object\" == (typeof c === \"undefined\" ? \"undefined\" : _typeof(c)) && c.nodeType ? (e = d.createElement(\"div\"), e.appendChild(c)) : wysihtml5.browser.supportsHTML5Tags(d) ? (e = d.createElement(\"div\"), e.innerHTML = c) : (b(d), e = a(c, d)), e;\n };\n}(), wysihtml5.dom.getParentElement = function () {\n function a(a, b) {\n return b && b.length ? \"string\" == typeof b ? a === b : wysihtml5.lang.array(b).contains(a) : !0;\n }function b(a) {\n return a.nodeType === wysihtml5.ELEMENT_NODE;\n }function c(a, b, c) {\n var d = (a.className || \"\").match(c) || [];return b ? d[d.length - 1] === b : !!d.length;\n }function d(a, b, c) {\n var d = (a.getAttribute(\"style\") || \"\").match(c) || [];return b ? d[d.length - 1] === b : !!d.length;\n }return function (e, f, g, h) {\n var i = f.cssStyle || f.styleRegExp,\n j = f.className || f.classRegExp;for (g = g || 50; g-- && e && \"BODY\" !== e.nodeName && (!h || e !== h);) {\n if (b(e) && a(e.nodeName, f.nodeName) && (!i || d(e, f.cssStyle, f.styleRegExp)) && (!j || c(e, f.className, f.classRegExp))) return e;e = e.parentNode;\n }return null;\n };\n}(), wysihtml5.dom.getStyle = function () {\n function a(a) {\n return a.replace(c, function (a) {\n return a.charAt(1).toUpperCase();\n });\n }var b = { \"float\": \"styleFloat\" in document.createElement(\"div\").style ? \"styleFloat\" : \"cssFloat\" },\n c = /\\-[a-z]/g;return function (c) {\n return { from: function from(d) {\n var e, f, g, h, i, j, k, l, m;if (d.nodeType === wysihtml5.ELEMENT_NODE) {\n if (e = d.ownerDocument, f = b[c] || a(c), g = d.style, h = d.currentStyle, i = g[f], i) return i;if (h) try {\n return h[f];\n } catch (n) {}return j = e.defaultView || e.parentWindow, k = (\"height\" === c || \"width\" === c) && \"TEXTAREA\" === d.nodeName, j.getComputedStyle ? (k && (l = g.overflow, g.overflow = \"hidden\"), m = j.getComputedStyle(d, null).getPropertyValue(c), k && (g.overflow = l || \"\"), m) : void 0;\n }\n } };\n };\n}(), wysihtml5.dom.getTextNodes = function (a, b) {\n var c = [];for (a = a.firstChild; a; a = a.nextSibling) {\n 3 == a.nodeType ? b && /^\\s*$/.test(a.innerText || a.textContent) || c.push(a) : c = c.concat(wysihtml5.dom.getTextNodes(a, b));\n }return c;\n}, wysihtml5.dom.hasElementWithTagName = function () {\n function a(a) {\n return a._wysihtml5_identifier || (a._wysihtml5_identifier = c++);\n }var b = {},\n c = 1;return function (c, d) {\n var e = a(c) + \":\" + d,\n f = b[e];return f || (f = b[e] = c.getElementsByTagName(d)), f.length > 0;\n };\n}(), function (a) {\n function b(a) {\n return a._wysihtml5_identifier || (a._wysihtml5_identifier = d++);\n }var c = {},\n d = 1;a.dom.hasElementWithClassName = function (d, e) {\n if (!a.browser.supportsNativeGetElementsByClassName()) return !!d.querySelector(\".\" + e);var f = b(d) + \":\" + e,\n g = c[f];return g || (g = c[f] = d.getElementsByClassName(e)), g.length > 0;\n };\n}(wysihtml5), wysihtml5.dom.insert = function (a) {\n return { after: function after(b) {\n b.parentNode.insertBefore(a, b.nextSibling);\n }, before: function before(b) {\n b.parentNode.insertBefore(a, b);\n }, into: function into(b) {\n b.appendChild(a);\n } };\n}, wysihtml5.dom.insertCSS = function (a) {\n return a = a.join(\"\\n\"), { into: function into(b) {\n var c,\n d,\n e = b.createElement(\"style\");return e.type = \"text/css\", e.styleSheet ? e.styleSheet.cssText = a : e.appendChild(b.createTextNode(a)), c = b.querySelector(\"head link\"), c ? (c.parentNode.insertBefore(e, c), void 0) : (d = b.querySelector(\"head\"), d && d.appendChild(e), void 0);\n } };\n}, function (a) {\n a.dom.lineBreaks = function (b) {\n function c(a) {\n return \"BR\" === a.nodeName;\n }function d(b) {\n return c(b) ? !0 : \"block\" === a.dom.getStyle(\"display\").from(b) ? !0 : !1;\n }return { add: function add() {\n var c = b.ownerDocument,\n e = a.dom.domNode(b).next({ ignoreBlankTexts: !0 }),\n f = a.dom.domNode(b).prev({ ignoreBlankTexts: !0 });e && !d(e) && a.dom.insert(c.createElement(\"br\")).after(b), f && !d(f) && a.dom.insert(c.createElement(\"br\")).before(b);\n }, remove: function remove() {\n var d = a.dom.domNode(b).next({ ignoreBlankTexts: !0 }),\n e = a.dom.domNode(b).prev({ ignoreBlankTexts: !0 });d && c(d) && d.parentNode.removeChild(d), e && c(e) && e.parentNode.removeChild(e);\n } };\n };\n}(wysihtml5), wysihtml5.dom.observe = function (a, b, c) {\n b = \"string\" == typeof b ? [b] : b;for (var d, e, f = 0, g = b.length; g > f; f++) {\n e = b[f], a.addEventListener ? a.addEventListener(e, c, !1) : (d = function d(b) {\n \"target\" in b || (b.target = b.srcElement), b.preventDefault = b.preventDefault || function () {\n this.returnValue = !1;\n }, b.stopPropagation = b.stopPropagation || function () {\n this.cancelBubble = !0;\n }, c.call(a, b);\n }, a.attachEvent(\"on\" + e, d));\n }return { stop: function stop() {\n for (var e, f = 0, g = b.length; g > f; f++) {\n e = b[f], a.removeEventListener ? a.removeEventListener(e, c, !1) : a.detachEvent(\"on\" + e, d);\n }\n } };\n}, wysihtml5.dom.parse = function (a, b) {\n function c(a, b) {\n var c, f, g, h, i, j, k, l, m;for (wysihtml5.lang.object(t).merge(s).merge(b.rules).get(), c = b.context || a.ownerDocument || document, f = c.createDocumentFragment(), g = \"string\" == typeof a, h = !1, b.clearInternals === !0 && (h = !0), i = g ? wysihtml5.dom.getAsDom(a, c) : a, t.selectors && e(i, t.selectors); i.firstChild;) {\n k = i.firstChild, j = d(k, b.cleanUp, h, b.uneditableClass), j && f.appendChild(j), k !== j && i.removeChild(k);\n }if (b.unjoinNbsps) for (l = wysihtml5.dom.getTextNodes(f), m = l.length; m--;) {\n l[m].nodeValue = l[m].nodeValue.replace(/([\\S\\u00A0])\\u00A0/gi, \"$1 \");\n }return i.innerHTML = \"\", i.appendChild(f), g ? wysihtml5.quirks.getCorrectInnerHTML(i) : i;\n }function d(a, b, c, e) {\n var f,\n g,\n h,\n i = a.nodeType,\n j = a.childNodes,\n k = j.length,\n l = p[i],\n m = 0;if (e && 1 === i && wysihtml5.dom.hasClass(a, e)) return a;if (g = l && l(a, c), !g) {\n if (g === !1) {\n for (f = a.ownerDocument.createDocumentFragment(), m = k; m--;) {\n j[m] && (h = d(j[m], b, c, e), h && (j[m] === h && m--, f.insertBefore(h, f.firstChild)));\n }return \"block\" === wysihtml5.dom.getStyle(\"display\").from(a) && f.appendChild(a.ownerDocument.createElement(\"br\")), wysihtml5.lang.array([\"div\", \"pre\", \"p\", \"table\", \"td\", \"th\", \"ul\", \"ol\", \"li\", \"dd\", \"dl\", \"footer\", \"header\", \"section\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).contains(a.nodeName.toLowerCase()) && a.parentNode.lastChild !== a && (a.nextSibling && 3 === a.nextSibling.nodeType && /^\\s/.test(a.nextSibling.nodeValue) || f.appendChild(a.ownerDocument.createTextNode(\" \"))), f.normalize && f.normalize(), f;\n }return null;\n }for (m = 0; k > m; m++) {\n j[m] && (h = d(j[m], b, c, e), h && (j[m] === h && m--, g.appendChild(h)));\n }if (b && g.nodeName.toLowerCase() === q && (!g.childNodes.length || /^\\s*$/gi.test(g.innerHTML) && (c || \"_wysihtml5-temp-placeholder\" !== a.className && \"rangySelectionBoundary\" !== a.className) || !g.attributes.length)) {\n for (f = g.ownerDocument.createDocumentFragment(); g.firstChild;) {\n f.appendChild(g.firstChild);\n }return f.normalize && f.normalize(), f;\n }return g.normalize && g.normalize(), g;\n }function e(a, b) {\n var c, d, e, f;for (c in b) {\n if (b.hasOwnProperty(c)) for (wysihtml5.lang.object(b[c]).isFunction() ? d = b[c] : \"string\" == typeof b[c] && z[b[c]] && (d = z[b[c]]), e = a.querySelectorAll(c), f = e.length; f--;) {\n d(e[f]);\n }\n }\n }function f(a, b) {\n var c,\n d,\n e,\n f = t.tags,\n h = a.nodeName.toLowerCase(),\n j = a.scopeName;if (a._wysihtml5) return null;if (a._wysihtml5 = 1, \"wysihtml5-temp\" === a.className) return null;if (j && \"HTML\" != j && (h = j + \":\" + h), \"outerHTML\" in a && (wysihtml5.browser.autoClosesUnclosedTags() || \"P\" !== a.nodeName || \"</p>\" === a.outerHTML.slice(-4).toLowerCase() || (h = \"div\")), h in f) {\n if (c = f[h], !c || c.remove) return null;if (c.unwrap) return !1;c = \"string\" == typeof c ? { rename_tag: c } : c;\n } else {\n if (!a.firstChild) return null;c = { rename_tag: q };\n }if (c.one_of_type && !g(a, t, c.one_of_type, b)) {\n if (!c.remove_action) return null;if (\"unwrap\" === c.remove_action) return !1;if (\"rename\" !== c.remove_action) return null;e = c.remove_action_rename_to || q;\n }return d = a.ownerDocument.createElement(e || c.rename_tag || h), m(a, d, c, b), i(a, d, c), a = null, d.normalize && d.normalize(), d;\n }function g(a, b, c, d) {\n var e, f;if (\"SPAN\" === a.nodeName && !d && (\"_wysihtml5-temp-placeholder\" === a.className || \"rangySelectionBoundary\" === a.className)) return !0;for (f in c) {\n if (c.hasOwnProperty(f) && b.type_definitions && b.type_definitions[f] && (e = b.type_definitions[f], h(a, e))) return !0;\n }return !1;\n }function h(a, b) {\n var c,\n d,\n e,\n f,\n g,\n h,\n i,\n j,\n k = a.getAttribute(\"class\"),\n l = a.getAttribute(\"style\");if (b.methods) for (h in b.methods) {\n if (b.methods.hasOwnProperty(h) && y[h] && y[h](a)) return !0;\n }if (k && b.classes) for (k = k.replace(/^\\s+/g, \"\").replace(/\\s+$/g, \"\").split(r), c = k.length, i = 0; c > i; i++) {\n if (b.classes[k[i]]) return !0;\n }if (l && b.styles) {\n l = l.split(\";\");for (d in b.styles) {\n if (b.styles.hasOwnProperty(d)) for (j = l.length; j--;) {\n if (g = l[j].split(\":\"), g[0].replace(/\\s/g, \"\").toLowerCase() === d && (b.styles[d] === !0 || 1 === b.styles[d] || wysihtml5.lang.array(b.styles[d]).contains(g[1].replace(/\\s/g, \"\").toLowerCase()))) return !0;\n }\n }\n }if (b.attrs) for (e in b.attrs) {\n if (b.attrs.hasOwnProperty(e) && (f = wysihtml5.dom.getAttribute(a, e), \"string\" == typeof f && f.search(b.attrs[e]) > -1)) return !0;\n }return !1;\n }function i(a, b, c) {\n var d, e;if (c && c.keep_styles) for (d in c.keep_styles) {\n if (c.keep_styles.hasOwnProperty(d)) {\n if (e = \"float\" === d ? a.style.styleFloat || a.style.cssFloat : a.style[d], c.keep_styles[d] instanceof RegExp && !c.keep_styles[d].test(e)) continue;\"float\" === d ? b.style[a.style.styleFloat ? \"styleFloat\" : \"cssFloat\"] = e : a.style[d] && (b.style[d] = e);\n }\n }\n }function j(a, b) {\n var c,\n d = [];for (c in b) {\n b.hasOwnProperty(c) && 0 === c.indexOf(a) && d.push(c);\n }return d;\n }function k(a, b, c, d) {\n var e,\n f = v[c];return f && (b || \"alt\" === a && \"IMG\" == d) && (e = f(b), \"string\" == typeof e) ? e : !1;\n }function l(a, b) {\n var c,\n d,\n e,\n f,\n g,\n h = wysihtml5.lang.object(t.attributes || {}).clone(),\n i = wysihtml5.lang.object(h).merge(wysihtml5.lang.object(b || {}).clone()).get(),\n l = {},\n m = wysihtml5.dom.getAttributes(a);for (c in i) {\n if (/\\*$/.test(c)) for (e = j(c.slice(0, -1), m), f = 0, g = e.length; g > f; f++) {\n d = k(e[f], m[e[f]], i[c], a.nodeName), d !== !1 && (l[e[f]] = d);\n } else d = k(c, m[c], i[c], a.nodeName), d !== !1 && (l[c] = d);\n }return l;\n }function m(a, b, c, d) {\n var e,\n f,\n g,\n h,\n i,\n j = {},\n k = c.set_class,\n m = c.add_class,\n n = c.add_style,\n o = c.set_attributes,\n p = t.classes,\n q = 0,\n s = [],\n u = [],\n v = [],\n y = [];if (o && (j = wysihtml5.lang.object(o).clone()), j = wysihtml5.lang.object(j).merge(l(a, c.check_attributes)).get(), k && s.push(k), m) for (h in m) {\n i = x[m[h]], i && (g = i(wysihtml5.dom.getAttribute(a, h)), \"string\" == typeof g && s.push(g));\n }if (n) for (h in n) {\n i = w[n[h]], i && (newStyle = i(wysihtml5.dom.getAttribute(a, h)), \"string\" == typeof newStyle && u.push(newStyle));\n }if (\"string\" == typeof p && \"any\" === p && a.getAttribute(\"class\")) {\n if (t.classes_blacklist) {\n for (y = a.getAttribute(\"class\"), y && (s = s.concat(y.split(r))), e = s.length; e > q; q++) {\n f = s[q], t.classes_blacklist[f] || v.push(f);\n }v.length && (j[\"class\"] = wysihtml5.lang.array(v).unique().join(\" \"));\n } else j[\"class\"] = a.getAttribute(\"class\");\n } else {\n for (d || (p[\"_wysihtml5-temp-placeholder\"] = 1, p._rangySelectionBoundary = 1, p[\"wysiwyg-tmp-selected-cell\"] = 1), y = a.getAttribute(\"class\"), y && (s = s.concat(y.split(r))), e = s.length; e > q; q++) {\n f = s[q], p[f] && v.push(f);\n }v.length && (j[\"class\"] = wysihtml5.lang.array(v).unique().join(\" \"));\n }j[\"class\"] && d && (j[\"class\"] = j[\"class\"].replace(\"wysiwyg-tmp-selected-cell\", \"\"), /^\\s*$/g.test(j[\"class\"]) && delete j[\"class\"]), u.length && (j.style = wysihtml5.lang.array(u).unique().join(\" \"));for (h in j) {\n try {\n b.setAttribute(h, j[h]);\n } catch (z) {}\n }j.src && (void 0 !== j.width && b.setAttribute(\"width\", j.width), void 0 !== j.height && b.setAttribute(\"height\", j.height));\n }function n(a) {\n var b,\n c = a.nextSibling;return c && c.nodeType === wysihtml5.TEXT_NODE ? (c.data = a.data.replace(u, \"\") + c.data.replace(u, \"\"), void 0) : (b = a.data.replace(u, \"\"), a.ownerDocument.createTextNode(b));\n }function o(a) {\n return t.comments ? a.ownerDocument.createComment(a.nodeValue) : void 0;\n }var p = { 1: f, 3: n, 8: o },\n q = \"span\",\n r = /\\s+/,\n s = { tags: {}, classes: {} },\n t = {},\n u = /\\uFEFF/g,\n v = { url: function () {\n var a = /^https?:\\/\\//i;return function (b) {\n return b && b.match(a) ? b.replace(a, function (a) {\n return a.toLowerCase();\n }) : null;\n };\n }(), src: function () {\n var a = /^(\\/|https?:\\/\\/)/i;return function (b) {\n return b && b.match(a) ? b.replace(a, function (a) {\n return a.toLowerCase();\n }) : null;\n };\n }(), href: function () {\n var a = /^(#|\\/|https?:\\/\\/|mailto:)/i;return function (b) {\n return b && b.match(a) ? b.replace(a, function (a) {\n return a.toLowerCase();\n }) : null;\n };\n }(), alt: function () {\n var a = /[^ a-z0-9_\\-]/gi;return function (b) {\n return b ? b.replace(a, \"\") : \"\";\n };\n }(), numbers: function () {\n var a = /\\D/g;return function (b) {\n return b = (b || \"\").replace(a, \"\"), b || null;\n };\n }(), any: function () {\n return function (a) {\n return a;\n };\n }() },\n w = { align_text: function () {\n var a = { left: \"text-align: left;\", right: \"text-align: right;\", center: \"text-align: center;\" };return function (b) {\n return a[(b + \"\").toLowerCase()];\n };\n }() },\n x = { align_img: function () {\n var a = { left: \"wysiwyg-float-left\", right: \"wysiwyg-float-right\" };return function (b) {\n return a[(b + \"\").toLowerCase()];\n };\n }(), align_text: function () {\n var a = { left: \"wysiwyg-text-align-left\", right: \"wysiwyg-text-align-right\", center: \"wysiwyg-text-align-center\", justify: \"wysiwyg-text-align-justify\" };return function (b) {\n return a[(b + \"\").toLowerCase()];\n };\n }(), clear_br: function () {\n var a = { left: \"wysiwyg-clear-left\", right: \"wysiwyg-clear-right\", both: \"wysiwyg-clear-both\", all: \"wysiwyg-clear-both\" };return function (b) {\n return a[(b + \"\").toLowerCase()];\n };\n }(), size_font: function () {\n var a = { 1: \"wysiwyg-font-size-xx-small\", 2: \"wysiwyg-font-size-small\", 3: \"wysiwyg-font-size-medium\", 4: \"wysiwyg-font-size-large\", 5: \"wysiwyg-font-size-x-large\", 6: \"wysiwyg-font-size-xx-large\", 7: \"wysiwyg-font-size-xx-large\", \"-\": \"wysiwyg-font-size-smaller\", \"+\": \"wysiwyg-font-size-larger\" };return function (b) {\n return a[(b + \"\").charAt(0)];\n };\n }() },\n y = { has_visible_contet: function () {\n var a,\n b = [\"img\", \"video\", \"picture\", \"br\", \"script\", \"noscript\", \"style\", \"table\", \"iframe\", \"object\", \"embed\", \"audio\", \"svg\", \"input\", \"button\", \"select\", \"textarea\", \"canvas\"];return function (c) {\n if (a = (c.innerText || c.textContent).replace(/\\s/g, \"\"), a && a.length > 0) return !0;for (var d = b.length; d--;) {\n if (c.querySelector(b[d])) return !0;\n }return c.offsetWidth && c.offsetWidth > 0 && c.offsetHeight && c.offsetHeight > 0 ? !0 : !1;\n };\n }() },\n z = { unwrap: function unwrap(a) {\n wysihtml5.dom.unwrap(a);\n }, remove: function remove(a) {\n a.parentNode.removeChild(a);\n } };return c(a, b);\n}, wysihtml5.dom.removeEmptyTextNodes = function (a) {\n for (var b, c = wysihtml5.lang.array(a.childNodes).get(), d = c.length, e = 0; d > e; e++) {\n b = c[e], b.nodeType === wysihtml5.TEXT_NODE && \"\" === b.data && b.parentNode.removeChild(b);\n }\n}, wysihtml5.dom.renameElement = function (a, b) {\n for (var c, d = a.ownerDocument.createElement(b); c = a.firstChild;) {\n d.appendChild(c);\n }return wysihtml5.dom.copyAttributes([\"align\", \"className\"]).from(a).to(d), a.parentNode.replaceChild(d, a), d;\n}, wysihtml5.dom.replaceWithChildNodes = function (a) {\n if (a.parentNode) {\n if (!a.firstChild) return a.parentNode.removeChild(a), void 0;for (var b = a.ownerDocument.createDocumentFragment(); a.firstChild;) {\n b.appendChild(a.firstChild);\n }a.parentNode.replaceChild(b, a), a = b = null;\n }\n}, function (a) {\n function b(b) {\n return \"block\" === a.getStyle(\"display\").from(b);\n }function c(a) {\n return \"BR\" === a.nodeName;\n }function d(a) {\n var b = a.ownerDocument.createElement(\"br\");a.appendChild(b);\n }function e(a, e) {\n if (a.nodeName.match(/^(MENU|UL|OL)$/)) {\n var f,\n g,\n h,\n i,\n j,\n k,\n l = a.ownerDocument,\n m = l.createDocumentFragment(),\n n = wysihtml5.dom.domNode(a).prev({ ignoreBlankTexts: !0 });if (e) for (!n || b(n) || c(n) || d(m); k = a.firstElementChild || a.firstChild;) {\n for (g = k.lastChild; f = k.firstChild;) {\n h = f === g, i = h && !b(f) && !c(f), m.appendChild(f), i && d(m);\n }k.parentNode.removeChild(k);\n } else for (; k = a.firstElementChild || a.firstChild;) {\n if (k.querySelector && k.querySelector(\"div, p, ul, ol, menu, blockquote, h1, h2, h3, h4, h5, h6\")) for (; f = k.firstChild;) {\n m.appendChild(f);\n } else {\n for (j = l.createElement(\"p\"); f = k.firstChild;) {\n j.appendChild(f);\n }m.appendChild(j);\n }k.parentNode.removeChild(k);\n }a.parentNode.replaceChild(m, a);\n }\n }a.resolveList = e;\n}(wysihtml5.dom), function (a) {\n var b = document,\n c = [\"parent\", \"top\", \"opener\", \"frameElement\", \"frames\", \"localStorage\", \"globalStorage\", \"sessionStorage\", \"indexedDB\"],\n d = [\"open\", \"close\", \"openDialog\", \"showModalDialog\", \"alert\", \"confirm\", \"prompt\", \"openDatabase\", \"postMessage\", \"XMLHttpRequest\", \"XDomainRequest\"],\n e = [\"referrer\", \"write\", \"open\", \"close\"];a.dom.Sandbox = Base.extend({ constructor: function constructor(b, c) {\n this.callback = b || a.EMPTY_FUNCTION, this.config = a.lang.object({}).merge(c).get(), this.editableArea = this._createIframe();\n }, insertInto: function insertInto(a) {\n \"string\" == typeof a && (a = b.getElementById(a)), a.appendChild(this.editableArea);\n }, getIframe: function getIframe() {\n return this.editableArea;\n }, getWindow: function getWindow() {\n this._readyError();\n }, getDocument: function getDocument() {\n this._readyError();\n }, destroy: function destroy() {\n var a = this.getIframe();a.parentNode.removeChild(a);\n }, _readyError: function _readyError() {\n throw Error(\"wysihtml5.Sandbox: Sandbox iframe isn't loaded yet\");\n }, _createIframe: function _createIframe() {\n var c = this,\n d = b.createElement(\"iframe\");return d.className = \"wysihtml5-sandbox\", a.dom.setAttributes({ security: \"restricted\", allowtransparency: \"true\", frameborder: 0, width: 0, height: 0, marginwidth: 0, marginheight: 0 }).on(d), a.browser.throwsMixedContentWarningWhenIframeSrcIsEmpty() && (d.src = \"javascript:'<html></html>'\"), d.onload = function () {\n d.onreadystatechange = d.onload = null, c._onLoadIframe(d);\n }, d.onreadystatechange = function () {\n /loaded|complete/.test(d.readyState) && (d.onreadystatechange = d.onload = null, c._onLoadIframe(d));\n }, d;\n }, _onLoadIframe: function _onLoadIframe(f) {\n var g, h, i, j, k, l, m;if (a.dom.contains(b.documentElement, f)) {\n if (g = this, h = f.contentWindow, i = f.contentWindow.document, j = b.characterSet || b.charset || \"utf-8\", k = this._getHtml({ charset: j, stylesheets: this.config.stylesheets }), i.open(\"text/html\", \"replace\"), i.write(k), i.close(), this.getWindow = function () {\n return f.contentWindow;\n }, this.getDocument = function () {\n return f.contentWindow.document;\n }, h.onerror = function (a, b, c) {\n throw Error(\"wysihtml5.Sandbox: \" + a, b, c);\n }, !a.browser.supportsSandboxedIframes()) {\n for (l = 0, m = c.length; m > l; l++) {\n this._unset(h, c[l]);\n }for (l = 0, m = d.length; m > l; l++) {\n this._unset(h, d[l], a.EMPTY_FUNCTION);\n }for (l = 0, m = e.length; m > l; l++) {\n this._unset(i, e[l]);\n }this._unset(i, \"cookie\", \"\", !0);\n }this.loaded = !0, setTimeout(function () {\n g.callback(g);\n }, 0);\n }\n }, _getHtml: function _getHtml(b) {\n var c,\n d = b.stylesheets,\n e = \"\",\n f = 0;if (d = \"string\" == typeof d ? [d] : d, d) for (c = d.length; c > f; f++) {\n e += '<link rel=\"stylesheet\" href=\"' + d[f] + '\">';\n }return b.stylesheets = e, a.lang.string('<!DOCTYPE html><html><head><meta charset=\"#{charset}\">#{stylesheets}</head><body></body></html>').interpolate(b);\n }, _unset: function _unset(b, c, d, e) {\n try {\n b[c] = d;\n } catch (f) {}try {\n b.__defineGetter__(c, function () {\n return d;\n });\n } catch (f) {}if (e) try {\n b.__defineSetter__(c, function () {});\n } catch (f) {}if (!a.browser.crashesWhenDefineProperty(c)) try {\n var g = { get: function get() {\n return d;\n } };e && (g.set = function () {}), Object.defineProperty(b, c, g);\n } catch (f) {}\n } });\n}(wysihtml5), function (a) {\n var b = document;a.dom.ContentEditableArea = Base.extend({ getContentEditable: function getContentEditable() {\n return this.element;\n }, getWindow: function getWindow() {\n return this.element.ownerDocument.defaultView;\n }, getDocument: function getDocument() {\n return this.element.ownerDocument;\n }, constructor: function constructor(b, c, d) {\n this.callback = b || a.EMPTY_FUNCTION, this.config = a.lang.object({}).merge(c).get(), this.element = d ? this._bindElement(d) : this._createElement();\n }, _createElement: function _createElement() {\n var a = b.createElement(\"div\");return a.className = \"wysihtml5-sandbox\", this._loadElement(a), a;\n }, _bindElement: function _bindElement(a) {\n return a.className = a.className && \"\" != a.className ? a.className + \" wysihtml5-sandbox\" : \"wysihtml5-sandbox\", this._loadElement(a, !0), a;\n }, _loadElement: function _loadElement(a, b) {\n var c,\n d = this;b || (c = this._getHtml(), a.innerHTML = c), this.getWindow = function () {\n return a.ownerDocument.defaultView;\n }, this.getDocument = function () {\n return a.ownerDocument;\n }, this.loaded = !0, setTimeout(function () {\n d.callback(d);\n }, 0);\n }, _getHtml: function _getHtml() {\n return \"\";\n } });\n}(wysihtml5), function () {\n var a = { className: \"class\" };wysihtml5.dom.setAttributes = function (b) {\n return { on: function on(c) {\n for (var d in b) {\n c.setAttribute(a[d] || d, b[d]);\n }\n } };\n };\n}(), wysihtml5.dom.setStyles = function (a) {\n return { on: function on(b) {\n var c,\n d = b.style;if (\"string\" == typeof a) return d.cssText += \";\" + a, void 0;for (c in a) {\n \"float\" === c ? (d.cssFloat = a[c], d.styleFloat = a[c]) : d[c] = a[c];\n }\n } };\n}, function (a) {\n a.simulatePlaceholder = function (b, c, d) {\n var e = \"placeholder\",\n f = function f() {\n var b = c.element.offsetWidth > 0 && c.element.offsetHeight > 0;c.hasPlaceholderSet() && (c.clear(), c.element.focus(), b && setTimeout(function () {\n var a = c.selection.getSelection();a.focusNode && a.anchorNode || c.selection.selectNode(c.element.firstChild || c.element);\n }, 0)), c.placeholderSet = !1, a.removeClass(c.element, e);\n },\n g = function g() {\n c.isEmpty() && (c.placeholderSet = !0, c.setValue(d), a.addClass(c.element, e));\n };b.on(\"set_placeholder\", g).on(\"unset_placeholder\", f).on(\"focus:composer\", f).on(\"paste:composer\", f).on(\"blur:composer\", g), g();\n };\n}(wysihtml5.dom), function (a) {\n var b = document.documentElement;\"textContent\" in b ? (a.setTextContent = function (a, b) {\n a.textContent = b;\n }, a.getTextContent = function (a) {\n return a.textContent;\n }) : \"innerText\" in b ? (a.setTextContent = function (a, b) {\n a.innerText = b;\n }, a.getTextContent = function (a) {\n return a.innerText;\n }) : (a.setTextContent = function (a, b) {\n a.nodeValue = b;\n }, a.getTextContent = function (a) {\n return a.nodeValue;\n });\n}(wysihtml5.dom), wysihtml5.dom.getAttribute = function (a, b) {\n var c,\n d,\n e,\n f = !wysihtml5.browser.supportsGetAttributeCorrectly();return b = b.toLowerCase(), c = a.nodeName, \"IMG\" == c && \"src\" == b && wysihtml5.dom.isLoadedImage(a) === !0 ? a.src : f && \"outerHTML\" in a ? (d = a.outerHTML.toLowerCase(), e = -1 != d.indexOf(\" \" + b + \"=\"), e ? a.getAttribute(b) : null) : a.getAttribute(b);\n}, wysihtml5.dom.getAttributes = function (a) {\n var b,\n c = !wysihtml5.browser.supportsGetAttributeCorrectly(),\n d = a.nodeName,\n e = [];for (b in a.attributes) {\n (a.attributes.hasOwnProperty && a.attributes.hasOwnProperty(b) || !a.attributes.hasOwnProperty && Object.prototype.hasOwnProperty.call(a.attributes, b)) && a.attributes[b].specified && (\"IMG\" == d && \"src\" == a.attributes[b].name.toLowerCase() && wysihtml5.dom.isLoadedImage(a) === !0 ? e.src = a.src : wysihtml5.lang.array([\"rowspan\", \"colspan\"]).contains(a.attributes[b].name.toLowerCase()) && c ? 1 !== a.attributes[b].value && (e[a.attributes[b].name] = a.attributes[b].value) : e[a.attributes[b].name] = a.attributes[b].value);\n }return e;\n}, wysihtml5.dom.isLoadedImage = function (a) {\n try {\n return a.complete && !a.mozMatchesSelector(\":-moz-broken\");\n } catch (b) {\n if (a.complete && \"complete\" === a.readyState) return !0;\n }\n}, function (a) {\n function b(a, b) {\n var c,\n d,\n e,\n f,\n g = [];for (d = 0, e = a.length; e > d; d++) {\n if (c = a[d].querySelectorAll(b), c) for (f = c.length; f--; g.unshift(c[f])) {}\n }return g;\n }function d(a) {\n a.parentNode.removeChild(a);\n }function e(a, b) {\n a.parentNode.insertBefore(b, a.nextSibling);\n }function f(a, b) {\n for (var c = a.nextSibling; 1 != c.nodeType;) {\n if (c = c.nextSibling, !b || b == c.tagName.toLowerCase()) return c;\n }return null;\n }var g = a.dom,\n h = function h(a) {\n this.el = a, this.isColspan = !1, this.isRowspan = !1, this.firstCol = !0, this.lastCol = !0, this.firstRow = !0, this.lastRow = !0, this.isReal = !0, this.spanCollection = [], this.modified = !1;\n },\n i = function i(a, b) {\n a ? (this.cell = a, this.table = g.getParentElement(a, { nodeName: [\"TABLE\"] })) : b && (this.table = b, this.cell = this.table.querySelectorAll(\"th, td\")[0]);\n };i.prototype = { addSpannedCellToMap: function addSpannedCellToMap(a, b, c, d, e, f) {\n var g,\n i,\n j = [],\n k = c + (f ? parseInt(f, 10) - 1 : 0),\n l = d + (e ? parseInt(e, 10) - 1 : 0);for (g = c; k >= g; g++) {\n for (void 0 === b[g] && (b[g] = []), i = d; l >= i; i++) {\n b[g][i] = new h(a), b[g][i].isColspan = e && parseInt(e, 10) > 1, b[g][i].isRowspan = f && parseInt(f, 10) > 1, b[g][i].firstCol = i == d, b[g][i].lastCol = i == l, b[g][i].firstRow = g == c, b[g][i].lastRow = g == k, b[g][i].isReal = i == d && g == c, b[g][i].spanCollection = j, j.push(b[g][i]);\n }\n }\n }, setCellAsModified: function setCellAsModified(a) {\n if (a.modified = !0, a.spanCollection.length > 0) for (var b = 0, c = a.spanCollection.length; c > b; b++) {\n a.spanCollection[b].modified = !0;\n }\n }, setTableMap: function setTableMap() {\n var a,\n b,\n c,\n d,\n e,\n f,\n i,\n j,\n k = [],\n l = this.getTableRows();for (a = 0; a < l.length; a++) {\n for (b = l[a], c = this.getRowCells(b), f = 0, void 0 === k[a] && (k[a] = []), d = 0; d < c.length; d++) {\n for (e = c[d]; void 0 !== k[a][f];) {\n f++;\n }i = g.getAttribute(e, \"colspan\"), j = g.getAttribute(e, \"rowspan\"), i || j ? (this.addSpannedCellToMap(e, k, a, f, i, j), f += i ? parseInt(i, 10) : 1) : (k[a][f] = new h(e), f++);\n }\n }return this.map = k, k;\n }, getRowCells: function getRowCells(c) {\n var d = this.table.querySelectorAll(\"table\"),\n e = d ? b(d, \"th, td\") : [],\n f = c.querySelectorAll(\"th, td\"),\n g = e.length > 0 ? a.lang.array(f).without(e) : f;return g;\n }, getTableRows: function getTableRows() {\n var c = this.table.querySelectorAll(\"table\"),\n d = c ? b(c, \"tr\") : [],\n e = this.table.querySelectorAll(\"tr\"),\n f = d.length > 0 ? a.lang.array(e).without(d) : e;return f;\n }, getMapIndex: function getMapIndex(a) {\n var b,\n c,\n d = this.map.length,\n e = this.map && this.map[0] ? this.map[0].length : 0;for (b = 0; d > b; b++) {\n for (c = 0; e > c; c++) {\n if (this.map[b][c].el === a) return { row: b, col: c };\n }\n }return !1;\n }, getElementAtIndex: function getElementAtIndex(a) {\n return this.setTableMap(), this.map[a.row] && this.map[a.row][a.col] && this.map[a.row][a.col].el ? this.map[a.row][a.col].el : null;\n }, getMapElsTo: function getMapElsTo(a) {\n var b,\n c,\n d,\n e,\n f,\n g,\n h = [];if (this.setTableMap(), this.idx_start = this.getMapIndex(this.cell), this.idx_end = this.getMapIndex(a), (this.idx_start.row > this.idx_end.row || this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col) && (b = this.idx_start, this.idx_start = this.idx_end, this.idx_end = b), this.idx_start.col > this.idx_end.col && (c = this.idx_start.col, this.idx_start.col = this.idx_end.col, this.idx_end.col = c), null != this.idx_start && null != this.idx_end) for (d = this.idx_start.row, e = this.idx_end.row; e >= d; d++) {\n for (f = this.idx_start.col, g = this.idx_end.col; g >= f; f++) {\n h.push(this.map[d][f].el);\n }\n }return h;\n }, orderSelectionEnds: function orderSelectionEnds(a) {\n var b, c;return this.setTableMap(), this.idx_start = this.getMapIndex(this.cell), this.idx_end = this.getMapIndex(a), (this.idx_start.row > this.idx_end.row || this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col) && (b = this.idx_start, this.idx_start = this.idx_end, this.idx_end = b), this.idx_start.col > this.idx_end.col && (c = this.idx_start.col, this.idx_start.col = this.idx_end.col, this.idx_end.col = c), { start: this.map[this.idx_start.row][this.idx_start.col].el, end: this.map[this.idx_end.row][this.idx_end.col].el };\n }, createCells: function createCells(a, b, c) {\n var d,\n e,\n f,\n g = this.table.ownerDocument,\n h = g.createDocumentFragment();for (e = 0; b > e; e++) {\n if (d = g.createElement(a), c) for (f in c) {\n c.hasOwnProperty(f) && d.setAttribute(f, c[f]);\n }d.appendChild(document.createTextNode(\" \")), h.appendChild(d);\n }return h;\n }, correctColIndexForUnreals: function correctColIndexForUnreals(a, b) {\n var c,\n d,\n e = this.map[b],\n f = -1;for (c = 0, d = a; a > c; c++) {\n e[c].isReal && f++;\n }return f;\n }, getLastNewCellOnRow: function getLastNewCellOnRow(a, b) {\n var c,\n d,\n e,\n f,\n g = this.getRowCells(a);for (e = 0, f = g.length; f > e; e++) {\n if (c = g[e], d = this.getMapIndex(c), d === !1 || void 0 !== b && d.row != b) return c;\n }return null;\n }, removeEmptyTable: function removeEmptyTable() {\n var a = this.table.querySelectorAll(\"td, th\");return a && 0 != a.length ? !1 : (d(this.table), !0);\n }, splitRowToCells: function splitRowToCells(a) {\n var b, c, d;a.isColspan && (b = parseInt(g.getAttribute(a.el, \"colspan\") || 1, 10), c = a.el.tagName.toLowerCase(), b > 1 && (d = this.createCells(c, b - 1), e(a.el, d)), a.el.removeAttribute(\"colspan\"));\n }, getRealRowEl: function getRealRowEl(a, b) {\n var c,\n d,\n e = null,\n f = null;for (b = b || this.idx, c = 0, d = this.map[b.row].length; d > c; c++) {\n if (f = this.map[b.row][c], f.isReal && (e = g.getParentElement(f.el, { nodeName: [\"TR\"] }), e)) return e;\n }return null === e && a && (e = g.getParentElement(this.map[b.row][b.col].el, { nodeName: [\"TR\"] }) || null), e;\n }, injectRowAt: function injectRowAt(a, b, c, d, f) {\n var h,\n i,\n j = this.getRealRowEl(!1, { row: a, col: b }),\n k = this.createCells(d, c);j ? (h = this.correctColIndexForUnreals(b, a), h >= 0 ? e(this.getRowCells(j)[h], k) : j.insertBefore(k, j.firstChild)) : (i = this.table.ownerDocument.createElement(\"tr\"), i.appendChild(k), e(g.getParentElement(f.el, { nodeName: [\"TR\"] }), i));\n }, canMerge: function canMerge(a) {\n var b, c, d, e, f, g;for (this.to = a, this.setTableMap(), this.idx_start = this.getMapIndex(this.cell), this.idx_end = this.getMapIndex(this.to), (this.idx_start.row > this.idx_end.row || this.idx_start.row == this.idx_end.row && this.idx_start.col > this.idx_end.col) && (b = this.idx_start, this.idx_start = this.idx_end, this.idx_end = b), this.idx_start.col > this.idx_end.col && (c = this.idx_start.col, this.idx_start.col = this.idx_end.col, this.idx_end.col = c), d = this.idx_start.row, e = this.idx_end.row; e >= d; d++) {\n for (f = this.idx_start.col, g = this.idx_end.col; g >= f; f++) {\n if (this.map[d][f].isColspan || this.map[d][f].isRowspan) return !1;\n }\n }return !0;\n }, decreaseCellSpan: function decreaseCellSpan(a, b) {\n var c = parseInt(g.getAttribute(a.el, b), 10) - 1;c >= 1 ? a.el.setAttribute(b, c) : (a.el.removeAttribute(b), \"colspan\" == b && (a.isColspan = !1), \"rowspan\" == b && (a.isRowspan = !1), a.firstCol = !0, a.lastCol = !0, a.firstRow = !0, a.lastRow = !0, a.isReal = !0);\n }, removeSurplusLines: function removeSurplusLines() {\n var a, b, c, e, f, h, i, j;if (this.setTableMap(), this.map) {\n for (c = 0, e = this.map.length; e > c; c++) {\n for (a = this.map[c], i = !0, f = 0, h = a.length; h > f; f++) {\n if (b = a[f], !(g.getAttribute(b.el, \"rowspan\") && parseInt(g.getAttribute(b.el, \"rowspan\"), 10) > 1 && b.firstRow !== !0)) {\n i = !1;break;\n }\n }if (i) for (f = 0; h > f; f++) {\n this.decreaseCellSpan(a[f], \"rowspan\");\n }\n }for (j = this.getTableRows(), c = 0, e = j.length; e > c; c++) {\n a = j[c], 0 == a.childNodes.length && /^\\s*$/.test(a.textContent || a.innerText) && d(a);\n }\n }\n }, fillMissingCells: function fillMissingCells() {\n var a,\n b,\n c,\n d = 0,\n f = 0,\n g = null;if (this.setTableMap(), this.map) {\n for (d = this.map.length, a = 0; d > a; a++) {\n this.map[a].length > f && (f = this.map[a].length);\n }for (b = 0; d > b; b++) {\n for (c = 0; f > c; c++) {\n this.map[b] && !this.map[b][c] && c > 0 && (this.map[b][c] = new h(this.createCells(\"td\", 1)), g = this.map[b][c - 1], g && g.el && g.el.parent && e(this.map[b][c - 1].el, this.map[b][c].el));\n }\n }\n }\n }, rectify: function rectify() {\n return this.removeEmptyTable() ? !1 : (this.removeSurplusLines(), this.fillMissingCells(), !0);\n }, unmerge: function unmerge() {\n var a, b, c, d, e, f;if (this.rectify() && (this.setTableMap(), this.idx = this.getMapIndex(this.cell), this.idx)) {\n if (a = this.map[this.idx.row][this.idx.col], b = g.getAttribute(a.el, \"colspan\") ? parseInt(g.getAttribute(a.el, \"colspan\"), 10) : 1, c = a.el.tagName.toLowerCase(), a.isRowspan) {\n if (d = parseInt(g.getAttribute(a.el, \"rowspan\"), 10), d > 1) for (e = 1, f = d - 1; f >= e; e++) {\n this.injectRowAt(this.idx.row + e, this.idx.col, b, c, a);\n }a.el.removeAttribute(\"rowspan\");\n }this.splitRowToCells(a);\n }\n }, merge: function merge(a) {\n var b, c, e, f, g, h;if (this.rectify()) if (this.canMerge(a)) {\n for (b = this.idx_end.row - this.idx_start.row + 1, c = this.idx_end.col - this.idx_start.col + 1, e = this.idx_start.row, f = this.idx_end.row; f >= e; e++) {\n for (g = this.idx_start.col, h = this.idx_end.col; h >= g; g++) {\n e == this.idx_start.row && g == this.idx_start.col ? (b > 1 && this.map[e][g].el.setAttribute(\"rowspan\", b), c > 1 && this.map[e][g].el.setAttribute(\"colspan\", c)) : (/^\\s*<br\\/?>\\s*$/.test(this.map[e][g].el.innerHTML.toLowerCase()) || (this.map[this.idx_start.row][this.idx_start.col].el.innerHTML += \" \" + this.map[e][g].el.innerHTML), d(this.map[e][g].el));\n }\n }this.rectify();\n } else window.console && void 0;\n }, collapseCellToNextRow: function collapseCellToNextRow(a) {\n var b,\n c,\n d,\n f = this.getMapIndex(a.el),\n h = f.row + 1,\n i = { row: h, col: f.col };h < this.map.length && (b = this.getRealRowEl(!1, i), null !== b && (c = this.correctColIndexForUnreals(i.col, i.row), c >= 0 ? e(this.getRowCells(b)[c], a.el) : (d = this.getLastNewCellOnRow(b, h), null !== d ? e(d, a.el) : b.insertBefore(a.el, b.firstChild)), parseInt(g.getAttribute(a.el, \"rowspan\"), 10) > 2 ? a.el.setAttribute(\"rowspan\", parseInt(g.getAttribute(a.el, \"rowspan\"), 10) - 1) : a.el.removeAttribute(\"rowspan\")));\n }, removeRowCell: function removeRowCell(a) {\n a.isReal ? a.isRowspan ? this.collapseCellToNextRow(a) : d(a.el) : parseInt(g.getAttribute(a.el, \"rowspan\"), 10) > 2 ? a.el.setAttribute(\"rowspan\", parseInt(g.getAttribute(a.el, \"rowspan\"), 10) - 1) : a.el.removeAttribute(\"rowspan\");\n }, getRowElementsByCell: function getRowElementsByCell() {\n var a,\n b,\n c,\n d = [];if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), this.idx !== !1) for (a = this.map[this.idx.row], b = 0, c = a.length; c > b; b++) {\n a[b].isReal && d.push(a[b].el);\n }return d;\n }, getColumnElementsByCell: function getColumnElementsByCell() {\n var a,\n b,\n c = [];if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), this.idx !== !1) for (a = 0, b = this.map.length; b > a; a++) {\n this.map[a][this.idx.col] && this.map[a][this.idx.col].isReal && c.push(this.map[a][this.idx.col].el);\n }return c;\n }, removeRow: function removeRow() {\n var a,\n b,\n c,\n e = g.getParentElement(this.cell, { nodeName: [\"TR\"] });if (e) {\n if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), this.idx !== !1) for (a = this.map[this.idx.row], b = 0, c = a.length; c > b; b++) {\n a[b].modified || (this.setCellAsModified(a[b]), this.removeRowCell(a[b]));\n }d(e);\n }\n }, removeColCell: function removeColCell(a) {\n a.isColspan ? parseInt(g.getAttribute(a.el, \"colspan\"), 10) > 2 ? a.el.setAttribute(\"colspan\", parseInt(g.getAttribute(a.el, \"colspan\"), 10) - 1) : a.el.removeAttribute(\"colspan\") : a.isReal && d(a.el);\n }, removeColumn: function removeColumn() {\n if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), this.idx !== !1) for (var a = 0, b = this.map.length; b > a; a++) {\n this.map[a][this.idx.col].modified || (this.setCellAsModified(this.map[a][this.idx.col]), this.removeColCell(this.map[a][this.idx.col]));\n }\n }, remove: function remove(a) {\n if (this.rectify()) {\n switch (a) {case \"row\":\n this.removeRow();break;case \"column\":\n this.removeColumn();}this.rectify();\n }\n }, addRow: function addRow(a) {\n var b,\n c,\n d,\n f,\n h,\n i = this.table.ownerDocument;if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), \"below\" == a && g.getAttribute(this.cell, \"rowspan\") && (this.idx.row = this.idx.row + parseInt(g.getAttribute(this.cell, \"rowspan\"), 10) - 1), this.idx !== !1) {\n for (b = this.map[this.idx.row], c = i.createElement(\"tr\"), d = 0, f = b.length; f > d; d++) {\n b[d].modified || (this.setCellAsModified(b[d]), this.addRowCell(b[d], c, a));\n }switch (a) {case \"below\":\n e(this.getRealRowEl(!0), c);break;case \"above\":\n h = g.getParentElement(this.map[this.idx.row][this.idx.col].el, { nodeName: [\"TR\"] }), h && h.parentNode.insertBefore(c, h);}\n }\n }, addRowCell: function addRowCell(a, b, d) {\n var e = a.isColspan ? { colspan: g.getAttribute(a.el, \"colspan\") } : null;a.isReal ? \"above\" != d && a.isRowspan ? a.el.setAttribute(\"rowspan\", parseInt(g.getAttribute(a.el, \"rowspan\"), 10) + 1) : b.appendChild(this.createCells(\"td\", 1, e)) : \"above\" != d && a.isRowspan && a.lastRow ? b.appendChild(this.createCells(\"td\", 1, e)) : c.isRowspan && a.el.attr(\"rowspan\", parseInt(g.getAttribute(a.el, \"rowspan\"), 10) + 1);\n }, add: function add(a) {\n this.rectify() && ((\"below\" == a || \"above\" == a) && this.addRow(a), (\"before\" == a || \"after\" == a) && this.addColumn(a));\n }, addColCell: function addColCell(a, b, d) {\n var f,\n h = a.el.tagName.toLowerCase();switch (d) {case \"before\":\n f = !a.isColspan || a.firstCol;break;case \"after\":\n f = !a.isColspan || a.lastCol || a.isColspan && c.el == this.cell;}if (f) {\n switch (d) {case \"before\":\n a.el.parentNode.insertBefore(this.createCells(h, 1), a.el);break;case \"after\":\n e(a.el, this.createCells(h, 1));}a.isRowspan && this.handleCellAddWithRowspan(a, b + 1, d);\n } else a.el.setAttribute(\"colspan\", parseInt(g.getAttribute(a.el, \"colspan\"), 10) + 1);\n }, addColumn: function addColumn(a) {\n var b, c, d, e;if (this.setTableMap(), this.idx = this.getMapIndex(this.cell), \"after\" == a && g.getAttribute(this.cell, \"colspan\") && (this.idx.col = this.idx.col + parseInt(g.getAttribute(this.cell, \"colspan\"), 10) - 1), this.idx !== !1) for (d = 0, e = this.map.length; e > d; d++) {\n b = this.map[d], b[this.idx.col] && (c = b[this.idx.col], c.modified || (this.setCellAsModified(c), this.addColCell(c, d, a)));\n }\n }, handleCellAddWithRowspan: function handleCellAddWithRowspan(a, b, c) {\n var d,\n h,\n i,\n j,\n k = parseInt(g.getAttribute(this.cell, \"rowspan\"), 10) - 1,\n l = g.getParentElement(a.el, { nodeName: [\"TR\"] }),\n m = a.el.tagName.toLowerCase(),\n n = this.table.ownerDocument;for (j = 0; k > j; j++) {\n if (d = this.correctColIndexForUnreals(this.idx.col, b + j), l = f(l, \"tr\"), l) {\n if (d > 0) switch (c) {case \"before\":\n h = this.getRowCells(l), d > 0 && this.map[b + j][this.idx.col].el != h[d] && d == h.length - 1 ? e(h[d], this.createCells(m, 1)) : h[d].parentNode.insertBefore(this.createCells(m, 1), h[d]);\n break;case \"after\":\n e(this.getRowCells(l)[d], this.createCells(m, 1));} else l.insertBefore(this.createCells(m, 1), l.firstChild);\n } else i = n.createElement(\"tr\"), i.appendChild(this.createCells(m, 1)), this.table.appendChild(i);\n }\n } }, g.table = { getCellsBetween: function getCellsBetween(a, b) {\n var c = new i(a);return c.getMapElsTo(b);\n }, addCells: function addCells(a, b) {\n var c = new i(a);c.add(b);\n }, removeCells: function removeCells(a, b) {\n var c = new i(a);c.remove(b);\n }, mergeCellsBetween: function mergeCellsBetween(a, b) {\n var c = new i(a);c.merge(b);\n }, unmergeCell: function unmergeCell(a) {\n var b = new i(a);b.unmerge();\n }, orderSelectionEnds: function orderSelectionEnds(a, b) {\n var c = new i(a);return c.orderSelectionEnds(b);\n }, indexOf: function indexOf(a) {\n var b = new i(a);return b.setTableMap(), b.getMapIndex(a);\n }, findCell: function findCell(a, b) {\n var c = new i(null, a);return c.getElementAtIndex(b);\n }, findRowByCell: function findRowByCell(a) {\n var b = new i(a);return b.getRowElementsByCell();\n }, findColumnByCell: function findColumnByCell(a) {\n var b = new i(a);return b.getColumnElementsByCell();\n }, canMerge: function canMerge(a, b) {\n var c = new i(a);return c.canMerge(b);\n } };\n}(wysihtml5), wysihtml5.dom.query = function (a, b) {\n var c,\n d,\n e,\n f,\n g = [];for (a.nodeType && (a = [a]), d = 0, e = a.length; e > d; d++) {\n if (c = a[d].querySelectorAll(b), c) for (f = c.length; f--; g.unshift(c[f])) {}\n }return g;\n}, wysihtml5.dom.compareDocumentPosition = function () {\n var a = document.documentElement;return a.compareDocumentPosition ? function (a, b) {\n return a.compareDocumentPosition(b);\n } : function (a, b) {\n var c, d, e, f, g, h, i, j, k;if (c = 9 === a.nodeType ? a : a.ownerDocument, d = 9 === b.nodeType ? b : b.ownerDocument, a === b) return 0;if (a === b.ownerDocument) return 20;if (a.ownerDocument === b) return 10;if (c !== d) return 1;if (2 === a.nodeType && a.childNodes && -1 !== wysihtml5.lang.array(a.childNodes).indexOf(b)) return 20;if (2 === b.nodeType && b.childNodes && -1 !== wysihtml5.lang.array(b.childNodes).indexOf(a)) return 10;for (e = a, f = [], g = null; e;) {\n if (e == b) return 10;f.push(e), e = e.parentNode;\n }for (e = b, g = null; e;) {\n if (e == a) return 20;if (h = wysihtml5.lang.array(f).indexOf(e), -1 !== h) return i = f[h], j = wysihtml5.lang.array(i.childNodes).indexOf(f[h - 1]), k = wysihtml5.lang.array(i.childNodes).indexOf(g), j > k ? 2 : 4;g = e, e = e.parentNode;\n }return 1;\n };\n}(), wysihtml5.dom.unwrap = function (a) {\n if (a.parentNode) {\n for (; a.lastChild;) {\n wysihtml5.dom.insert(a.lastChild).after(a);\n }a.parentNode.removeChild(a);\n }\n}, wysihtml5.dom.getPastedHtml = function (a) {\n var b;return a.clipboardData && (wysihtml5.lang.array(a.clipboardData.types).contains(\"text/html\") ? b = a.clipboardData.getData(\"text/html\") : wysihtml5.lang.array(a.clipboardData.types).contains(\"text/plain\") && (b = wysihtml5.lang.string(a.clipboardData.getData(\"text/plain\")).escapeHTML(!0, !0))), b;\n}, wysihtml5.dom.getPastedHtmlWithDiv = function (a, b) {\n var c = a.selection.getBookmark(),\n d = a.element.ownerDocument,\n e = d.createElement(\"DIV\");d.body.appendChild(e), e.style.width = \"1px\", e.style.height = \"1px\", e.style.overflow = \"hidden\", e.setAttribute(\"contenteditable\", \"true\"), e.focus(), setTimeout(function () {\n a.selection.setBookmark(c), b(e.innerHTML), e.parentNode.removeChild(e);\n }, 0);\n}, wysihtml5.quirks.cleanPastedHTML = function () {\n var a = function a(_a2) {\n var b = wysihtml5.lang.string(_a2).trim(),\n c = b.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");return RegExp(\"^((?!^\" + c + \"$).)*$\", \"i\");\n },\n b = function b(_b2, c) {\n var d,\n e,\n f = wysihtml5.lang.object(_b2).clone(!0);for (d in f.tags) {\n if (f.tags.hasOwnProperty(d) && f.tags[d].keep_styles) for (e in f.tags[d].keep_styles) {\n f.tags[d].keep_styles.hasOwnProperty(e) && c[e] && (f.tags[d].keep_styles[e] = a(c[e]));\n }\n }return f;\n },\n c = function c(a, b) {\n var c, d, e;if (!a) return null;for (d = 0, e = a.length; e > d; d++) {\n if (a[d].condition || (c = a[d].set), a[d].condition && a[d].condition.test(b)) return a[d].set;\n }return c;\n };return function (a, d) {\n var e,\n f = { color: wysihtml5.dom.getStyle(\"color\").from(d.referenceNode), fontSize: wysihtml5.dom.getStyle(\"font-size\").from(d.referenceNode) },\n g = b(c(d.rules, a) || {}, f);return e = wysihtml5.dom.parse(a, { rules: g, cleanUp: !0, context: d.referenceNode.ownerDocument, uneditableClass: d.uneditableClass, clearInternals: !0, unjoinNbsps: !0 }), e;\n };\n}(), wysihtml5.quirks.ensureProperClearing = function () {\n var a = function a() {\n var a = this;setTimeout(function () {\n var b = a.innerHTML.toLowerCase();(\"<p> </p>\" == b || \"<p> </p><p> </p>\" == b) && (a.innerHTML = \"\");\n }, 0);\n };return function (b) {\n wysihtml5.dom.observe(b.element, [\"cut\", \"keydown\"], a);\n };\n}(), function (a) {\n var b = \"%7E\";a.quirks.getCorrectInnerHTML = function (c) {\n var d,\n e,\n f,\n g,\n h,\n i = c.innerHTML;if (-1 === i.indexOf(b)) return i;for (d = c.querySelectorAll(\"[href*='~'], [src*='~']\"), h = 0, g = d.length; g > h; h++) {\n e = d[h].href || d[h].src, f = a.lang.string(e).replace(\"~\").by(b), i = a.lang.string(i).replace(f).by(e);\n }return i;\n };\n}(wysihtml5), function (a) {\n var b = \"wysihtml5-quirks-redraw\";a.quirks.redraw = function (c) {\n a.dom.addClass(c, b), a.dom.removeClass(c, b);try {\n var d = c.ownerDocument;d.execCommand(\"italic\", !1, null), d.execCommand(\"italic\", !1, null);\n } catch (e) {}\n };\n}(wysihtml5), wysihtml5.quirks.tableCellsSelection = function (a, b) {\n function c() {\n return k.observe(a, \"mousedown\", function (a) {\n var b = wysihtml5.dom.getParentElement(a.target, { nodeName: [\"TD\", \"TH\"] });b && d(b);\n }), l;\n }function d(c) {\n l.start = c, l.end = c, l.cells = [c], l.table = k.getParentElement(l.start, { nodeName: [\"TABLE\"] }), l.table && (e(), k.addClass(c, m), n = k.observe(a, \"mousemove\", g), o = k.observe(a, \"mouseup\", h), b.fire(\"tableselectstart\").fire(\"tableselectstart:composer\"));\n }function e() {\n var b, c;if (a && (b = a.querySelectorAll(\".\" + m), b.length > 0)) for (c = 0; c < b.length; c++) {\n k.removeClass(b[c], m);\n }\n }function f(a) {\n for (var b = 0; b < a.length; b++) {\n k.addClass(a[b], m);\n }\n }function g(a) {\n var c,\n d = null,\n g = k.getParentElement(a.target, { nodeName: [\"TD\", \"TH\"] });g && l.table && l.start && (d = k.getParentElement(g, { nodeName: [\"TABLE\"] }), d && d === l.table && (e(), c = l.end, l.end = g, l.cells = k.table.getCellsBetween(l.start, g), l.cells.length > 1 && b.composer.selection.deselect(), f(l.cells), l.end !== c && b.fire(\"tableselectchange\").fire(\"tableselectchange:composer\")));\n }function h() {\n n.stop(), o.stop(), b.fire(\"tableselect\").fire(\"tableselect:composer\"), setTimeout(function () {\n i();\n }, 0);\n }function i() {\n var c = k.observe(a.ownerDocument, \"click\", function (a) {\n c.stop(), k.getParentElement(a.target, { nodeName: [\"TABLE\"] }) != l.table && (e(), l.table = null, l.start = null, l.end = null, b.fire(\"tableunselect\").fire(\"tableunselect:composer\"));\n });\n }function j(a, c) {\n l.start = a, l.end = c, l.table = k.getParentElement(l.start, { nodeName: [\"TABLE\"] }), selectedCells = k.table.getCellsBetween(l.start, l.end), f(selectedCells), i(), b.fire(\"tableselect\").fire(\"tableselect:composer\");\n }var k = wysihtml5.dom,\n l = { table: null, start: null, end: null, cells: null, select: j },\n m = \"wysiwyg-tmp-selected-cell\",\n n = null,\n o = null;return c();\n}, function (a) {\n var b = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([\\d\\.]+)\\s*\\)/i,\n c = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/i,\n d = /^#([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])/i,\n e = /^#([0-9a-f])([0-9a-f])([0-9a-f])/i,\n f = function f(a) {\n return RegExp(\"(^|\\\\s|;)\" + a + \"\\\\s*:\\\\s*[^;$]+\", \"gi\");\n };a.quirks.styleParser = { parseColor: function parseColor(g, h) {\n var i,\n j,\n k,\n l = f(h),\n m = g.match(l),\n n = 10;if (m) {\n for (k = m.length; k--;) {\n m[k] = a.lang.string(m[k].split(\":\")[1]).trim();\n }if (i = m[m.length - 1], b.test(i)) j = i.match(b);else if (c.test(i)) j = i.match(c);else if (d.test(i)) j = i.match(d), n = 16;else if (e.test(i)) return j = i.match(e), j.shift(), j.push(1), a.lang.array(j).map(function (a, b) {\n return 3 > b ? 16 * parseInt(a, 16) + parseInt(a, 16) : parseFloat(a);\n });if (j) return j.shift(), j[3] || j.push(1), a.lang.array(j).map(function (a, b) {\n return 3 > b ? parseInt(a, n) : parseFloat(a);\n });\n }return !1;\n }, unparseColor: function unparseColor(a, b) {\n if (b) {\n if (\"hex\" == b) return a[0].toString(16).toUpperCase() + a[1].toString(16).toUpperCase() + a[2].toString(16).toUpperCase();if (\"hash\" == b) return \"#\" + a[0].toString(16).toUpperCase() + a[1].toString(16).toUpperCase() + a[2].toString(16).toUpperCase();if (\"rgb\" == b) return \"rgb(\" + a[0] + \",\" + a[1] + \",\" + a[2] + \")\";if (\"rgba\" == b) return \"rgba(\" + a[0] + \",\" + a[1] + \",\" + a[2] + \",\" + a[3] + \")\";if (\"csv\" == b) return a[0] + \",\" + a[1] + \",\" + a[2] + \",\" + a[3];\n }return a[3] && 1 !== a[3] ? \"rgba(\" + a[0] + \",\" + a[1] + \",\" + a[2] + \",\" + a[3] + \")\" : \"rgb(\" + a[0] + \",\" + a[1] + \",\" + a[2] + \")\";\n }, parseFontSize: function parseFontSize(b) {\n var c = b.match(f(\"font-size\"));return c ? a.lang.string(c[c.length - 1].split(\":\")[1]).trim() : !1;\n } };\n}(wysihtml5), function (a) {\n function b(a) {\n var b = 0;if (a.parentNode) do {\n b += a.offsetTop || 0, a = a.offsetParent;\n } while (a);return b;\n }function c(a, b) {\n for (var c = 0; b !== a;) {\n if (c++, b = b.parentNode, !b) throw Error(\"not a descendant of ancestor!\");\n }return c;\n }function d(a) {\n if (!a.canSurroundContents()) for (var b = a.commonAncestorContainer, d = c(b, a.startContainer), e = c(b, a.endContainer); !a.canSurroundContents();) {\n d > e ? (a.setStartBefore(a.startContainer), d = c(b, a.startContainer)) : (a.setEndAfter(a.endContainer), e = c(b, a.endContainer));\n }\n }var e = a.dom;a.Selection = Base.extend({ constructor: function constructor(a, b, c) {\n window.rangy.init(), this.editor = a, this.composer = a.composer, this.doc = this.composer.doc, this.contain = b, this.unselectableClass = c || !1;\n }, getBookmark: function getBookmark() {\n var a = this.getRange();return a && d(a), a && a.cloneRange();\n }, setBookmark: function setBookmark(a) {\n a && this.setSelection(a);\n }, setBefore: function setBefore(a) {\n var b = rangy.createRange(this.doc);return b.setStartBefore(a), b.setEndBefore(a), this.setSelection(b);\n }, setAfter: function setAfter(a) {\n var b = rangy.createRange(this.doc);return b.setStartAfter(a), b.setEndAfter(a), this.setSelection(b);\n }, selectNode: function selectNode(b, c) {\n var d = rangy.createRange(this.doc),\n f = b.nodeType === a.ELEMENT_NODE,\n g = \"canHaveHTML\" in b ? b.canHaveHTML : \"IMG\" !== b.nodeName,\n h = f ? b.innerHTML : b.data,\n i = \"\" === h || h === a.INVISIBLE_SPACE,\n j = e.getStyle(\"display\").from(b),\n k = \"block\" === j || \"list-item\" === j;if (i && f && g && !c) try {\n b.innerHTML = a.INVISIBLE_SPACE;\n } catch (l) {}g ? d.selectNodeContents(b) : d.selectNode(b), g && i && f ? d.collapse(k) : g && i && (d.setStartAfter(b), d.setEndAfter(b)), this.setSelection(d);\n }, getSelectedNode: function getSelectedNode(a) {\n var b, c;return a && this.doc.selection && \"Control\" === this.doc.selection.type && (c = this.doc.selection.createRange(), c && c.length) ? c.item(0) : (b = this.getSelection(this.doc), b.focusNode === b.anchorNode ? b.focusNode : (c = this.getRange(this.doc), c ? c.commonAncestorContainer : this.doc.body));\n }, fixSelBorders: function fixSelBorders() {\n var a = this.getRange();d(a), this.setSelection(a);\n }, getSelectedOwnNodes: function getSelectedOwnNodes() {\n var a,\n b,\n c = this.getOwnRanges(),\n d = [];for (a = 0, b = c.length; b > a; a++) {\n d.push(c[a].commonAncestorContainer || this.doc.body);\n }return d;\n }, findNodesInSelection: function findNodesInSelection(b) {\n var c,\n d,\n e,\n f = this.getOwnRanges(),\n g = [];for (d = 0, e = f.length; e > d; d++) {\n c = f[d].getNodes([1], function (c) {\n return a.lang.array(b).contains(c.nodeName);\n }), g = g.concat(c);\n }return g;\n }, containsUneditable: function containsUneditable() {\n var a,\n b,\n c = this.getOwnUneditables(),\n d = this.getSelection();for (a = 0, b = c.length; b > a; a++) {\n if (d.containsNode(c[a])) return !0;\n }return !1;\n }, deleteContents: function deleteContents() {\n var a,\n b = this.getOwnRanges();for (a = b.length; a--;) {\n b[a].deleteContents();\n }this.setSelection(b[0]);\n }, getPreviousNode: function getPreviousNode(b, c) {\n var d, e, f;return b || (d = this.getSelection(), b = d.anchorNode), b === this.contain ? !1 : (e = b.previousSibling, e === this.contain ? !1 : (e && 3 !== e.nodeType && 1 !== e.nodeType ? e = this.getPreviousNode(e, c) : e && 3 === e.nodeType && /^\\s*$/.test(e.textContent) ? e = this.getPreviousNode(e, c) : c && e && 1 === e.nodeType && !a.lang.array([\"BR\", \"HR\", \"IMG\"]).contains(e.nodeName) && /^[\\s]*$/.test(e.innerHTML) ? e = this.getPreviousNode(e, c) : e || b === this.contain || (f = b.parentNode, f !== this.contain && (e = this.getPreviousNode(f, c))), e !== this.contain ? e : !1));\n }, getSelectionParentsByTag: function getSelectionParentsByTag() {\n var b,\n c,\n d,\n e = this.getSelectedOwnNodes(),\n f = [];for (c = 0, d = e.length; d > c; c++) {\n b = e[c].nodeName && \"LI\" === e[c].nodeName ? e[c] : a.dom.getParentElement(e[c], { nodeName: [\"LI\"] }, !1, this.contain), b && f.push(b);\n }return f.length ? f : null;\n }, getRangeToNodeEnd: function getRangeToNodeEnd() {\n if (this.isCollapsed()) {\n var a = this.getRange(),\n b = a.startContainer,\n c = a.startOffset,\n d = rangy.createRange(this.doc);return d.selectNodeContents(b), d.setStart(b, c), d;\n }\n }, caretIsLastInSelection: function caretIsLastInSelection() {\n var a = (rangy.createRange(this.doc), this.getSelection(), this.getRangeToNodeEnd().cloneContents()),\n b = a.textContent;return (/^\\s*$/.test(b)\n );\n }, caretIsFirstInSelection: function caretIsFirstInSelection() {\n var b = rangy.createRange(this.doc),\n c = this.getSelection(),\n d = this.getRange(),\n e = d.startContainer;return e.nodeType === a.TEXT_NODE ? this.isCollapsed() && e.nodeType === a.TEXT_NODE && /^\\s*$/.test(e.data.substr(0, d.startOffset)) : (b.selectNodeContents(this.getRange().commonAncestorContainer), b.collapse(!0), this.isCollapsed() && (b.startContainer === c.anchorNode || b.endContainer === c.anchorNode) && b.startOffset === c.anchorOffset);\n }, caretIsInTheBeginnig: function caretIsInTheBeginnig(b) {\n var c = this.getSelection(),\n d = c.anchorNode,\n e = c.anchorOffset;return b ? 0 === e && (d.nodeName && d.nodeName === b.toUpperCase() || a.dom.getParentElement(d.parentNode, { nodeName: b }, 1)) : 0 === e && !this.getPreviousNode(d, !0);\n }, caretIsBeforeUneditable: function caretIsBeforeUneditable() {\n var a,\n b,\n c,\n d,\n e = this.getSelection(),\n f = e.anchorNode,\n g = e.anchorOffset;if (0 === g && (a = this.getPreviousNode(f, !0), a)) for (b = this.getOwnUneditables(), c = 0, d = b.length; d > c; c++) {\n if (a === b[c]) return b[c];\n }return !1;\n }, executeAndRestoreRangy: function executeAndRestoreRangy(a) {\n var b = this.doc.defaultView || this.doc.parentWindow,\n c = rangy.saveSelection(b);if (c) try {\n a();\n } catch (d) {\n setTimeout(function () {\n throw d;\n }, 0);\n } else a();rangy.restoreSelection(c);\n }, executeAndRestore: function executeAndRestore(b, c) {\n var d,\n f,\n g,\n h,\n i,\n j,\n k,\n l,\n m,\n n = this.doc.body,\n o = c && n.scrollTop,\n p = c && n.scrollLeft,\n q = \"_wysihtml5-temp-placeholder\",\n r = '<span class=\"' + q + '\">' + a.INVISIBLE_SPACE + \"</span>\",\n s = this.getRange(!0);if (!s) return b(n, n), void 0;s.collapsed || (k = s.cloneRange(), j = k.createContextualFragment(r), k.collapse(!1), k.insertNode(j), k.detach()), i = s.createContextualFragment(r), s.insertNode(i), j && (d = this.contain.querySelectorAll(\".\" + q), s.setStartBefore(d[0]), s.setEndAfter(d[d.length - 1])), this.setSelection(s);try {\n b(s.startContainer, s.endContainer);\n } catch (t) {\n setTimeout(function () {\n throw t;\n }, 0);\n }if (d = this.contain.querySelectorAll(\".\" + q), d && d.length) for (l = rangy.createRange(this.doc), g = d[0].nextSibling, d.length > 1 && (h = d[d.length - 1].previousSibling), h && g ? (l.setStartBefore(g), l.setEndAfter(h)) : (f = this.doc.createTextNode(a.INVISIBLE_SPACE), e.insert(f).after(d[0]), l.setStartBefore(f), l.setEndAfter(f)), this.setSelection(l), m = d.length; m--;) {\n d[m].parentNode.removeChild(d[m]);\n } else this.contain.focus();c && (n.scrollTop = o, n.scrollLeft = p);try {\n d.parentNode.removeChild(d);\n } catch (u) {}\n }, set: function set(a, b) {\n var c = rangy.createRange(this.doc);c.setStart(a, b || 0), this.setSelection(c);\n }, insertHTML: function insertHTML(a) {\n var b,\n c = (rangy.createRange(this.doc), this.doc.createElement(\"DIV\")),\n d = this.doc.createDocumentFragment();for (c.innerHTML = a, b = c.lastChild; c.firstChild;) {\n d.appendChild(c.firstChild);\n }this.insertNode(d), b && this.setAfter(b);\n }, insertNode: function insertNode(a) {\n var b = this.getRange();b && b.insertNode(a);\n }, surround: function surround(a) {\n var b,\n c,\n d = this.getOwnRanges(),\n e = [];if (0 == d.length) return e;for (c = d.length; c--;) {\n b = this.doc.createElement(a.nodeName), e.push(b), a.className && (b.className = a.className), a.cssStyle && b.setAttribute(\"style\", a.cssStyle);try {\n d[c].surroundContents(b), this.selectNode(b);\n } catch (f) {\n b.appendChild(d[c].extractContents()), d[c].insertNode(b);\n }\n }return e;\n }, deblockAndSurround: function deblockAndSurround(b) {\n var c,\n d,\n e,\n f = this.doc.createElement(\"div\"),\n g = rangy.createRange(this.doc);if (f.className = b.className, this.composer.commands.exec(\"formatBlock\", b.nodeName, b.className), c = this.contain.querySelectorAll(\".\" + b.className), c[0]) for (c[0].parentNode.insertBefore(f, c[0]), g.setStartBefore(c[0]), g.setEndAfter(c[c.length - 1]), d = g.extractContents(); d.firstChild;) {\n if (e = d.firstChild, 1 == e.nodeType && a.dom.hasClass(e, b.className)) {\n for (; e.firstChild;) {\n f.appendChild(e.firstChild);\n }\"BR\" !== e.nodeName && f.appendChild(this.doc.createElement(\"br\")), d.removeChild(e);\n } else f.appendChild(e);\n } else f = null;return f;\n }, scrollIntoView: function scrollIntoView() {\n var c,\n d = this.doc,\n e = 5,\n f = d.documentElement.scrollHeight > d.documentElement.offsetHeight,\n g = d._wysihtml5ScrollIntoViewElement = d._wysihtml5ScrollIntoViewElement || function () {\n var b = d.createElement(\"span\");return b.innerHTML = a.INVISIBLE_SPACE, b;\n }();f && (this.insertNode(g), c = b(g), g.parentNode.removeChild(g), c >= d.body.scrollTop + d.documentElement.offsetHeight - e && (d.body.scrollTop = c));\n }, selectLine: function selectLine() {\n a.browser.supportsSelectionModify() ? this._selectLine_W3C() : this.doc.selection && this._selectLine_MSIE();\n }, _selectLine_W3C: function _selectLine_W3C() {\n var a = this.doc.defaultView,\n b = a.getSelection();b.modify(\"move\", \"left\", \"lineboundary\"), b.modify(\"extend\", \"right\", \"lineboundary\");\n }, _selectLine_MSIE: function _selectLine_MSIE() {\n var a,\n b,\n c,\n d,\n e,\n f = this.doc.selection.createRange(),\n g = f.boundingTop,\n h = this.doc.body.scrollWidth;if (f.moveToPoint) {\n for (0 === g && (c = this.doc.createElement(\"span\"), this.insertNode(c), g = c.offsetTop, c.parentNode.removeChild(c)), g += 1, d = -10; h > d; d += 2) {\n try {\n f.moveToPoint(d, g);break;\n } catch (i) {}\n }for (a = g, b = this.doc.selection.createRange(), e = h; e >= 0; e--) {\n try {\n b.moveToPoint(e, a);break;\n } catch (j) {}\n }f.setEndPoint(\"EndToEnd\", b), f.select();\n }\n }, getText: function getText() {\n var a = this.getSelection();return a ? \"\" + a : \"\";\n }, getNodes: function getNodes(a, b) {\n var c = this.getRange();return c ? c.getNodes([a], b) : [];\n }, fixRangeOverflow: function fixRangeOverflow(a) {\n var b, c;this.contain && this.contain.firstChild && a && (b = a.compareNode(this.contain), 2 !== b ? (1 === b && a.setStartBefore(this.contain.firstChild), 0 === b && a.setEndAfter(this.contain.lastChild), 3 === b && (a.setStartBefore(this.contain.firstChild), a.setEndAfter(this.contain.lastChild))) : this._detectInlineRangeProblems(a) && (c = a.endContainer.previousElementSibling, c && a.setEnd(c, this._endOffsetForNode(c))));\n }, _endOffsetForNode: function _endOffsetForNode(a) {\n var b = document.createRange();return b.selectNodeContents(a), b.endOffset;\n }, _detectInlineRangeProblems: function _detectInlineRangeProblems(a) {\n var b = e.compareDocumentPosition(a.startContainer, a.endContainer);return 0 == a.endOffset && 4 & b;\n }, getRange: function getRange(a) {\n var b = this.getSelection(),\n c = b && b.rangeCount && b.getRangeAt(0);return a !== !0 && this.fixRangeOverflow(c), c;\n }, getOwnUneditables: function getOwnUneditables() {\n var b = e.query(this.contain, \".\" + this.unselectableClass),\n c = e.query(b, \".\" + this.unselectableClass);return a.lang.array(b).without(c);\n }, getOwnRanges: function getOwnRanges() {\n var a,\n b,\n c,\n d,\n e,\n f,\n g,\n h = [],\n i = this.getRange();if (i && h.push(i), this.unselectableClass && this.contain && i && (b = this.getOwnUneditables(), b.length > 0)) for (d = 0, e = b.length; e > d; d++) {\n for (a = [], f = 0, g = h.length; g > f; f++) {\n if (h[f]) switch (h[f].compareNode(b[d])) {case 2:\n break;case 3:\n c = h[f].cloneRange(), c.setEndBefore(b[d]), a.push(c), c = h[f].cloneRange(), c.setStartAfter(b[d]), a.push(c);break;default:\n a.push(h[f]);}h = a;\n }\n }return h;\n }, getSelection: function getSelection() {\n return rangy.getSelection(this.doc.defaultView || this.doc.parentWindow);\n }, setSelection: function setSelection(a) {\n var b = this.doc.defaultView || this.doc.parentWindow,\n c = rangy.getSelection(b);return c.setSingleRange(a);\n }, createRange: function createRange() {\n return rangy.createRange(this.doc);\n }, isCollapsed: function isCollapsed() {\n return this.getSelection().isCollapsed;\n }, getHtml: function getHtml() {\n return this.getSelection().toHtml();\n }, isEndToEndInNode: function isEndToEndInNode(b) {\n var c = this.getRange(),\n d = c.commonAncestorContainer,\n e = c.startContainer,\n f = c.endContainer;if (d.nodeType === a.TEXT_NODE && (d = d.parentNode), e.nodeType === a.TEXT_NODE && !/^\\s*$/.test(e.data.substr(c.startOffset))) return !1;if (f.nodeType === a.TEXT_NODE && !/^\\s*$/.test(f.data.substr(c.endOffset))) return !1;for (; e && e !== d;) {\n if (e.nodeType !== a.TEXT_NODE && !a.dom.contains(d, e)) return !1;if (a.dom.domNode(e).prev({ ignoreBlankTexts: !0 })) return !1;e = e.parentNode;\n }for (; f && f !== d;) {\n if (f.nodeType !== a.TEXT_NODE && !a.dom.contains(d, f)) return !1;if (a.dom.domNode(f).next({ ignoreBlankTexts: !0 })) return !1;f = f.parentNode;\n }return a.lang.array(b).contains(d.nodeName) ? d : !1;\n }, deselect: function deselect() {\n var a = this.getSelection();a && a.removeAllRanges();\n } });\n}(wysihtml5), function (a, b) {\n function c(a, b, c) {\n if (!a.className) return !1;var d = a.className.match(c) || [];return d[d.length - 1] === b;\n }function d(a, b) {\n if (!a.getAttribute || !a.getAttribute(\"style\")) return !1;a.getAttribute(\"style\").match(b);return a.getAttribute(\"style\").match(b) ? !0 : !1;\n }function e(a, b, c) {\n a.getAttribute(\"style\") ? (h(a, c), a.getAttribute(\"style\") && !/^\\s*$/.test(a.getAttribute(\"style\")) ? a.setAttribute(\"style\", b + \";\" + a.getAttribute(\"style\")) : a.setAttribute(\"style\", b)) : a.setAttribute(\"style\", b);\n }function f(a, b, c) {\n a.className ? (g(a, c), a.className += \" \" + b) : a.className = b;\n }function g(a, b) {\n a.className && (a.className = a.className.replace(b, \"\"));\n }function h(a, b) {\n var c,\n d,\n e = [];if (a.getAttribute(\"style\")) {\n for (c = a.getAttribute(\"style\").split(\";\"), d = c.length; d--;) {\n c[d].match(b) || /^\\s*$/.test(c[d]) || e.push(c[d]);\n }e.length ? a.setAttribute(\"style\", e.join(\";\")) : a.removeAttribute(\"style\");\n }\n }function i(a, b) {\n var c,\n d,\n e,\n f = [],\n g = b.split(\";\"),\n h = a.getAttribute(\"style\");if (h) {\n for (h = h.replace(/\\s/gi, \"\").toLowerCase(), f.push(RegExp(\"(^|\\\\s|;)\" + b.replace(/\\s/gi, \"\").replace(/([\\(\\)])/gi, \"\\\\$1\").toLowerCase().replace(\";\", \";?\").replace(/rgb\\\\\\((\\d+),(\\d+),(\\d+)\\\\\\)/gi, \"\\\\s?rgb\\\\($1,\\\\s?$2,\\\\s?$3\\\\)\"), \"gi\")), c = g.length; c-- > 0;) {\n /^\\s*$/.test(g[c]) || f.push(RegExp(\"(^|\\\\s|;)\" + g[c].replace(/\\s/gi, \"\").replace(/([\\(\\)])/gi, \"\\\\$1\").toLowerCase().replace(\";\", \";?\").replace(/rgb\\\\\\((\\d+),(\\d+),(\\d+)\\\\\\)/gi, \"\\\\s?rgb\\\\($1,\\\\s?$2,\\\\s?$3\\\\)\"), \"gi\"));\n }for (d = 0, e = f.length; e > d; d++) {\n if (h.match(f[d])) return f[d];\n }\n }return !1;\n }function j(c, d, e, f) {\n return e ? i(c, e) : f ? a.dom.hasClass(c, f) : b.dom.arrayContains(d, c.tagName.toLowerCase());\n }function k(a, b, c, d) {\n for (var e = a.length; e--;) {\n if (!j(a[e], b, c, d)) return !1;\n }return a.length ? !0 : !1;\n }function l(a, b, c) {\n var d = i(a, b);return d ? (h(a, d), \"remove\") : (e(a, b, c), \"change\");\n }function m(a, b) {\n return a.className.replace(u, \" \") == b.className.replace(u, \" \");\n }function n(a) {\n for (var b = a.parentNode; a.firstChild;) {\n b.insertBefore(a.firstChild, a);\n }b.removeChild(a);\n }function o(a, b) {\n if (a.attributes.length != b.attributes.length) return !1;for (var c, d, e, f = 0, g = a.attributes.length; g > f; ++f) {\n if (c = a.attributes[f], e = c.name, \"class\" != e) {\n if (d = b.attributes.getNamedItem(e), c.specified != d.specified) return !1;if (c.specified && c.nodeValue !== d.nodeValue) return !1;\n }\n }return !0;\n }function p(a, c) {\n return b.dom.isCharacterDataNode(a) ? 0 == c ? !!a.previousSibling : c == a.length ? !!a.nextSibling : !0 : c > 0 && c < a.childNodes.length;\n }function q(a, c, d, e) {\n var f, g;if (b.dom.isCharacterDataNode(c) && (0 == d ? (d = b.dom.getNodeIndex(c), c = c.parentNode) : d == c.length ? (d = b.dom.getNodeIndex(c) + 1, c = c.parentNode) : f = b.dom.splitDataNode(c, d)), !(f || e && c === e)) {\n for (f = c.cloneNode(!1), f.id && f.removeAttribute(\"id\"); g = c.childNodes[d];) {\n f.appendChild(g);\n }b.dom.insertAfter(f, c);\n }return c == a ? f : q(a, f.parentNode, b.dom.getNodeIndex(f), e);\n }function r(b) {\n this.isElementMerge = b.nodeType == a.ELEMENT_NODE, this.firstTextNode = this.isElementMerge ? b.lastChild : b, this.textNodes = [this.firstTextNode];\n }function s(a, b, c, d, e, f, g) {\n this.tagNames = a || [t], this.cssClass = b || (b === !1 ? !1 : \"\"), this.similarClassRegExp = c, this.cssStyle = e || \"\", this.similarStyleRegExp = f, this.normalize = d, this.applyToAnyTagName = !1, this.container = g;\n }var t = \"span\",\n u = /\\s+/g;r.prototype = { doMerge: function doMerge() {\n var a,\n b,\n c,\n d,\n e,\n f = [];for (d = 0, e = this.textNodes.length; e > d; ++d) {\n a = this.textNodes[d], b = a.parentNode, f[d] = a.data, d && (b.removeChild(a), b.hasChildNodes() || b.parentNode.removeChild(b));\n }return this.firstTextNode.data = c = f.join(\"\"), c;\n }, getLength: function getLength() {\n for (var a = this.textNodes.length, b = 0; a--;) {\n b += this.textNodes[a].length;\n }return b;\n }, toString: function toString() {\n var a,\n b,\n c = [];for (a = 0, b = this.textNodes.length; b > a; ++a) {\n c[a] = \"'\" + this.textNodes[a].data + \"'\";\n }return \"[Merge(\" + c.join(\",\") + \")]\";\n } }, s.prototype = { getAncestorWithClass: function getAncestorWithClass(d) {\n for (var e; d;) {\n if (e = this.cssClass ? c(d, this.cssClass, this.similarClassRegExp) : \"\" !== this.cssStyle ? !1 : !0, d.nodeType == a.ELEMENT_NODE && \"false\" != d.getAttribute(\"contenteditable\") && b.dom.arrayContains(this.tagNames, d.tagName.toLowerCase()) && e) return d;d = d.parentNode;\n }return !1;\n }, getAncestorWithStyle: function getAncestorWithStyle(c) {\n for (var e; c;) {\n if (e = this.cssStyle ? d(c, this.similarStyleRegExp) : !1, c.nodeType == a.ELEMENT_NODE && \"false\" != c.getAttribute(\"contenteditable\") && b.dom.arrayContains(this.tagNames, c.tagName.toLowerCase()) && e) return c;c = c.parentNode;\n }return !1;\n }, getMatchingAncestor: function getMatchingAncestor(a) {\n var b = this.getAncestorWithClass(a),\n c = !1;return b ? this.cssStyle && (c = \"class\") : (b = this.getAncestorWithStyle(a), b && (c = \"style\")), { element: b, type: c };\n }, postApply: function postApply(a, b) {\n var c,\n d,\n e,\n f,\n g,\n h,\n i = a[0],\n j = a[a.length - 1],\n k = [],\n l = i,\n m = j,\n n = 0,\n o = j.length;for (f = 0, g = a.length; g > f; ++f) {\n d = a[f], e = null, d && d.parentNode && (e = this.getAdjacentMergeableTextNode(d.parentNode, !1)), e ? (c || (c = new r(e), k.push(c)), c.textNodes.push(d), d === i && (l = c.firstTextNode, n = l.length), d === j && (m = c.firstTextNode, o = c.getLength())) : c = null;\n }if (j && j.parentNode && (h = this.getAdjacentMergeableTextNode(j.parentNode, !0), h && (c || (c = new r(j), k.push(c)), c.textNodes.push(h))), k.length) {\n for (f = 0, g = k.length; g > f; ++f) {\n k[f].doMerge();\n }b.setStart(l, n), b.setEnd(m, o);\n }\n }, getAdjacentMergeableTextNode: function getAdjacentMergeableTextNode(b, c) {\n var d,\n e = b.nodeType == a.TEXT_NODE,\n f = e ? b.parentNode : b,\n g = c ? \"nextSibling\" : \"previousSibling\";if (e) {\n if (d = b[g], d && d.nodeType == a.TEXT_NODE) return d;\n } else if (d = f[g], d && this.areElementsMergeable(b, d)) return d[c ? \"firstChild\" : \"lastChild\"];return null;\n }, areElementsMergeable: function areElementsMergeable(a, c) {\n return b.dom.arrayContains(this.tagNames, (a.tagName || \"\").toLowerCase()) && b.dom.arrayContains(this.tagNames, (c.tagName || \"\").toLowerCase()) && m(a, c) && o(a, c);\n }, createContainer: function createContainer(a) {\n var b = a.createElement(this.tagNames[0]);return this.cssClass && (b.className = this.cssClass), this.cssStyle && b.setAttribute(\"style\", this.cssStyle), b;\n }, applyToTextNode: function applyToTextNode(a) {\n var c,\n d = a.parentNode;1 == d.childNodes.length && b.dom.arrayContains(this.tagNames, d.tagName.toLowerCase()) ? (this.cssClass && f(d, this.cssClass, this.similarClassRegExp), this.cssStyle && e(d, this.cssStyle, this.similarStyleRegExp)) : (c = this.createContainer(b.dom.getDocument(a)), a.parentNode.insertBefore(c, a), c.appendChild(a));\n }, isRemovable: function isRemovable(c) {\n return b.dom.arrayContains(this.tagNames, c.tagName.toLowerCase()) && \"\" === a.lang.string(c.className).trim() && (!c.getAttribute(\"style\") || \"\" === a.lang.string(c.getAttribute(\"style\")).trim());\n }, undoToTextNode: function undoToTextNode(a, b, c, d) {\n var e,\n f = c ? !1 : !0,\n h = c || d,\n i = !1;b.containsNode(h) || (e = b.cloneRange(), e.selectNode(h), e.isPointInRange(b.endContainer, b.endOffset) && p(b.endContainer, b.endOffset) && (q(h, b.endContainer, b.endOffset, this.container), b.setEndAfter(h)), e.isPointInRange(b.startContainer, b.startOffset) && p(b.startContainer, b.startOffset) && (h = q(h, b.startContainer, b.startOffset, this.container))), !f && this.similarClassRegExp && g(h, this.similarClassRegExp), f && this.similarStyleRegExp && (i = \"change\" === l(h, this.cssStyle, this.similarStyleRegExp)), this.isRemovable(h) && !i && n(h);\n }, applyToRange: function applyToRange(b) {\n var c, d, e, f, g, h;for (d = b.length; d--;) {\n if (c = b[d].getNodes([a.TEXT_NODE]), !c.length) try {\n return e = this.createContainer(b[d].endContainer.ownerDocument), b[d].surroundContents(e), this.selectNode(b[d], e), void 0;\n } catch (i) {}if (b[d].splitBoundaries(), c = b[d].getNodes([a.TEXT_NODE]), c.length) {\n for (g = 0, h = c.length; h > g; ++g) {\n f = c[g], this.getMatchingAncestor(f).element || this.applyToTextNode(f);\n }b[d].setStart(c[0], 0), f = c[c.length - 1], b[d].setEnd(f, f.length), this.normalize && this.postApply(c, b[d]);\n }\n }\n }, undoToRange: function undoToRange(b) {\n var c, d, e, f, g, h, i, j;for (f = b.length; f--;) {\n for (c = b[f].getNodes([a.TEXT_NODE]), c.length ? (b[f].splitBoundaries(), c = b[f].getNodes([a.TEXT_NODE])) : (g = b[f].endContainer.ownerDocument, h = g.createTextNode(a.INVISIBLE_SPACE), b[f].insertNode(h), b[f].selectNode(h), c = [h]), i = 0, j = c.length; j > i; ++i) {\n b[f].isValid() && (d = c[i], e = this.getMatchingAncestor(d), \"style\" === e.type ? this.undoToTextNode(d, b[f], !1, e.element) : e.element && this.undoToTextNode(d, b[f], e.element));\n }1 == j ? this.selectNode(b[f], c[0]) : (b[f].setStart(c[0], 0), d = c[c.length - 1], b[f].setEnd(d, d.length), this.normalize && this.postApply(c, b[f]));\n }\n }, selectNode: function selectNode(b, c) {\n var d = c.nodeType === a.ELEMENT_NODE,\n e = \"canHaveHTML\" in c ? c.canHaveHTML : !0,\n f = d ? c.innerHTML : c.data,\n g = \"\" === f || f === a.INVISIBLE_SPACE;if (g && d && e) try {\n c.innerHTML = a.INVISIBLE_SPACE;\n } catch (h) {}b.selectNodeContents(c), g && d ? b.collapse(!1) : g && (b.setStartAfter(c), b.setEndAfter(c));\n }, getTextSelectedByRange: function getTextSelectedByRange(a, b) {\n var c,\n d,\n e = b.cloneRange();return e.selectNodeContents(a), c = e.intersection(b), d = c ? \"\" + c : \"\", e.detach(), d;\n }, isAppliedToRange: function isAppliedToRange(b) {\n var c,\n d,\n e,\n f,\n g,\n h,\n i = [],\n j = \"full\";for (e = b.length; e--;) {\n if (d = b[e].getNodes([a.TEXT_NODE]), !d.length) return c = this.getMatchingAncestor(b[e].startContainer).element, c ? { elements: [c], coverage: j } : !1;for (f = 0, g = d.length; g > f; ++f) {\n h = this.getTextSelectedByRange(d[f], b[e]), c = this.getMatchingAncestor(d[f]).element, c && \"\" != h ? (i.push(c), 1 === a.dom.getTextNodes(c, !0).length ? j = \"full\" : \"full\" === j && (j = \"inline\")) : c || (j = \"partial\");\n }\n }return i.length ? { elements: i, coverage: j } : !1;\n }, toggleRange: function toggleRange(a) {\n var b,\n c = this.isAppliedToRange(a);c ? \"full\" === c.coverage ? this.undoToRange(a) : \"inline\" === c.coverage ? (b = k(c.elements, this.tagNames, this.cssStyle, this.cssClass), this.undoToRange(a), b || this.applyToRange(a)) : (k(c.elements, this.tagNames, this.cssStyle, this.cssClass) || this.undoToRange(a), this.applyToRange(a)) : this.applyToRange(a);\n } }, a.selection.HTMLApplier = s;\n}(wysihtml5, rangy), wysihtml5.Commands = Base.extend({ constructor: function constructor(a) {\n this.editor = a, this.composer = a.composer, this.doc = this.composer.doc;\n }, support: function support(a) {\n return wysihtml5.browser.supportsCommand(this.doc, a);\n }, exec: function exec(a, b) {\n var c = wysihtml5.commands[a],\n d = wysihtml5.lang.array(arguments).get(),\n e = c && c.exec,\n f = null;if (this.editor.fire(\"beforecommand:composer\"), e) d.unshift(this.composer), f = e.apply(c, d);else try {\n f = this.doc.execCommand(a, !1, b);\n } catch (g) {}return this.editor.fire(\"aftercommand:composer\"), f;\n }, state: function state(a) {\n var b = wysihtml5.commands[a],\n c = wysihtml5.lang.array(arguments).get(),\n d = b && b.state;if (d) return c.unshift(this.composer), d.apply(b, c);try {\n return this.doc.queryCommandState(a);\n } catch (e) {\n return !1;\n }\n }, stateValue: function stateValue(a) {\n var b = wysihtml5.commands[a],\n c = wysihtml5.lang.array(arguments).get(),\n d = b && b.stateValue;return d ? (c.unshift(this.composer), d.apply(b, c)) : !1;\n } }), wysihtml5.commands.bold = { exec: function exec(a, b) {\n wysihtml5.commands.formatInline.execWithToggle(a, b, \"b\");\n }, state: function state(a, b) {\n return wysihtml5.commands.formatInline.state(a, b, \"b\");\n } }, function (a) {\n function b(b, c) {\n var g,\n h,\n i,\n j,\n k,\n l,\n m,\n n,\n o,\n p = b.doc,\n q = \"_wysihtml5-temp-\" + +new Date(),\n r = /non-matching-class/g,\n s = 0;for (a.commands.formatInline.exec(b, d, e, q, r, d, d, !0, !0), h = p.querySelectorAll(e + \".\" + q), g = h.length; g > s; s++) {\n i = h[s], i.removeAttribute(\"class\");for (o in c) {\n \"text\" !== o && i.setAttribute(o, c[o]);\n }\n }l = i, 1 === g && (m = f.getTextContent(i), j = !!i.querySelector(\"*\"), k = \"\" === m || m === a.INVISIBLE_SPACE, !j && k && (f.setTextContent(i, c.text || i.href), n = p.createTextNode(\" \"), b.selection.setAfter(i), f.insert(n).after(i), l = n)), b.selection.setAfter(l);\n }function c(a, b, c) {\n var d, e, f, g;for (e = b.length; e--;) {\n for (d = b[e].attributes, f = d.length; f--;) {\n b[e].removeAttribute(d.item(f).name);\n }for (g in c) {\n c.hasOwnProperty(g) && b[e].setAttribute(g, c[g]);\n }\n }\n }var d,\n e = \"A\",\n f = a.dom;a.commands.createLink = { exec: function exec(a, d, e) {\n var f = this.state(a, d);f ? a.selection.executeAndRestore(function () {\n c(a, f, e);\n }) : (e = \"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) ? e : { href: e }, b(a, e));\n }, state: function state(b, c) {\n return a.commands.formatInline.state(b, c, \"A\");\n } };\n}(wysihtml5), function (a) {\n function b(a, b) {\n for (var d, e, f, g = b.length, h = 0; g > h; h++) {\n d = b[h], e = c.getParentElement(d, { nodeName: \"code\" }), f = c.getTextContent(d), f.match(c.autoLink.URL_REG_EXP) && !e ? e = c.renameElement(d, \"code\") : c.replaceWithChildNodes(d);\n }\n }var c = a.dom;a.commands.removeLink = { exec: function exec(a, c) {\n var d = this.state(a, c);d && a.selection.executeAndRestore(function () {\n b(a, d);\n });\n }, state: function state(b, c) {\n return a.commands.formatInline.state(b, c, \"A\");\n } };\n}(wysihtml5), function (a) {\n var b = /wysiwyg-font-size-[0-9a-z\\-]+/g;a.commands.fontSize = { exec: function exec(c, d, e) {\n a.commands.formatInline.execWithToggle(c, d, \"span\", \"wysiwyg-font-size-\" + e, b);\n }, state: function state(c, d, e) {\n return a.commands.formatInline.state(c, d, \"span\", \"wysiwyg-font-size-\" + e, b);\n } };\n}(wysihtml5), function (a) {\n var b = /(\\s|^)font-size\\s*:\\s*[^;\\s]+;?/gi;a.commands.fontSizeStyle = { exec: function exec(c, d, e) {\n e = \"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) ? e.size : e, /^\\s*$/.test(e) || a.commands.formatInline.execWithToggle(c, d, \"span\", !1, !1, \"font-size:\" + e, b);\n }, state: function state(c, d) {\n return a.commands.formatInline.state(c, d, \"span\", !1, !1, \"font-size\", b);\n }, stateValue: function stateValue(b, c) {\n var d,\n e = this.state(b, c);return e && a.lang.object(e).isArray() && (e = e[0]), e && (d = e.getAttribute(\"style\"), d) ? a.quirks.styleParser.parseFontSize(d) : !1;\n } };\n}(wysihtml5), function (a) {\n var b = /wysiwyg-color-[0-9a-z]+/g;a.commands.foreColor = { exec: function exec(c, d, e) {\n a.commands.formatInline.execWithToggle(c, d, \"span\", \"wysiwyg-color-\" + e, b);\n }, state: function state(c, d, e) {\n return a.commands.formatInline.state(c, d, \"span\", \"wysiwyg-color-\" + e, b);\n } };\n}(wysihtml5), function (a) {\n var b = /(\\s|^)color\\s*:\\s*[^;\\s]+;?/gi;a.commands.foreColorStyle = { exec: function exec(c, d, e) {\n var f,\n g = a.quirks.styleParser.parseColor(\"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) ? \"color:\" + e.color : \"color:\" + e, \"color\");g && (f = \"color: rgb(\" + g[0] + \",\" + g[1] + \",\" + g[2] + \");\", 1 !== g[3] && (f += \"color: rgba(\" + g[0] + \",\" + g[1] + \",\" + g[2] + \",\" + g[3] + \");\"), a.commands.formatInline.execWithToggle(c, d, \"span\", !1, !1, f, b));\n }, state: function state(c, d) {\n return a.commands.formatInline.state(c, d, \"span\", !1, !1, \"color\", b);\n }, stateValue: function stateValue(b, c, d) {\n var e,\n f = this.state(b, c);return f && a.lang.object(f).isArray() && (f = f[0]), f && (e = f.getAttribute(\"style\"), e && e) ? (val = a.quirks.styleParser.parseColor(e, \"color\"), a.quirks.styleParser.unparseColor(val, d)) : !1;\n } };\n}(wysihtml5), function (a) {\n var b = /(\\s|^)background-color\\s*:\\s*[^;\\s]+;?/gi;a.commands.bgColorStyle = { exec: function exec(c, d, e) {\n var f,\n g = a.quirks.styleParser.parseColor(\"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) ? \"background-color:\" + e.color : \"background-color:\" + e, \"background-color\");g && (f = \"background-color: rgb(\" + g[0] + \",\" + g[1] + \",\" + g[2] + \");\", 1 !== g[3] && (f += \"background-color: rgba(\" + g[0] + \",\" + g[1] + \",\" + g[2] + \",\" + g[3] + \");\"), a.commands.formatInline.execWithToggle(c, d, \"span\", !1, !1, f, b));\n }, state: function state(c, d) {\n return a.commands.formatInline.state(c, d, \"span\", !1, !1, \"background-color\", b);\n }, stateValue: function stateValue(b, c, d) {\n var e,\n f = this.state(b, c),\n g = !1;return f && a.lang.object(f).isArray() && (f = f[0]), f && (e = f.getAttribute(\"style\"), e) ? (g = a.quirks.styleParser.parseColor(e, \"background-color\"), a.quirks.styleParser.unparseColor(g, d)) : !1;\n } };\n}(wysihtml5), function (a) {\n function b(b, c, e) {\n b.className ? (d(b, e), b.className = a.lang.string(b.className + \" \" + c).trim()) : b.className = c;\n }function c(b, c, d) {\n e(b, d), b.getAttribute(\"style\") ? b.setAttribute(\"style\", a.lang.string(b.getAttribute(\"style\") + \" \" + c).trim()) : b.setAttribute(\"style\", c);\n }function d(b, c) {\n var d = c.test(b.className);return b.className = b.className.replace(c, \"\"), \"\" == a.lang.string(b.className).trim() && b.removeAttribute(\"class\"), d;\n }function e(b, c) {\n var d = c.test(b.getAttribute(\"style\"));return b.setAttribute(\"style\", (b.getAttribute(\"style\") || \"\").replace(c, \"\")), \"\" == a.lang.string(b.getAttribute(\"style\") || \"\").trim() && b.removeAttribute(\"style\"), d;\n }function f(a) {\n var b = a.lastChild;b && g(b) && b.parentNode.removeChild(b);\n }function g(a) {\n return \"BR\" === a.nodeName;\n }function h(b, c) {\n var d, e, g;for (b.selection.isCollapsed() && b.selection.selectLine(), d = b.selection.surround(c), e = 0, g = d.length; g > e; e++) {\n a.dom.lineBreaks(d[e]).remove(), f(d[e]);\n }\n }function i(b) {\n return !!a.lang.string(b.className).trim();\n }function j(b) {\n return !!a.lang.string(b.getAttribute(\"style\") || \"\").trim();\n }var k = a.dom,\n l = [\"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\", \"P\", \"PRE\", \"DIV\"];a.commands.formatBlock = { exec: function exec(f, g, m, n, o, p, q) {\n var r,\n s,\n t,\n u,\n v,\n w = (f.doc, this.state(f, g, m, n, o, p, q)),\n x = f.config.useLineBreaks,\n y = x ? \"DIV\" : \"P\";return m = \"string\" == typeof m ? m.toUpperCase() : m, w.length ? (f.selection.executeAndRestoreRangy(function () {\n var b, c, f;for (b = w.length; b--;) {\n if (o && (s = d(w[b], o)), q && (u = e(w[b], q)), (u || s) && null === m && w[b].nodeName != y) return;c = i(w[b]), f = j(w[b]), c || f || !x && \"P\" !== m ? k.renameElement(w[b], \"P\" === m ? \"DIV\" : y) : (a.dom.lineBreaks(w[b]).add(), k.replaceWithChildNodes(w[b]));\n }\n }), void 0) : ((null !== m && !a.lang.array(l).contains(m) || (r = f.selection.findNodesInSelection(l).concat(f.selection.getSelectedOwnNodes()), f.selection.executeAndRestoreRangy(function () {\n for (var a = r.length; a--;) {\n v = k.getParentElement(r[a], { nodeName: l }), v == f.element && (v = null), v && (m && (v = k.renameElement(v, m)), n && b(v, n, o), p && c(v, p, q), t = !0);\n }\n }), !t)) && h(f, { nodeName: m || y, className: n || null, cssStyle: p || null }), void 0);\n }, state: function state(b, c, d, e, f, g, h) {\n var i,\n j,\n l,\n m = b.selection.getSelectedOwnNodes(),\n n = [];for (d = \"string\" == typeof d ? d.toUpperCase() : d, j = 0, l = m.length; l > j; j++) {\n i = k.getParentElement(m[j], { nodeName: d, className: e, classRegExp: f, cssStyle: g, styleRegExp: h }), i && -1 == a.lang.array(n).indexOf(i) && n.push(i);\n }return 0 == n.length ? !1 : n;\n } };\n}(wysihtml5), wysihtml5.commands.formatCode = { exec: function exec(a, b, c) {\n var d,\n e,\n f,\n g = this.state(a);g ? a.selection.executeAndRestore(function () {\n d = g.querySelector(\"code\"), wysihtml5.dom.replaceWithChildNodes(g), d && wysihtml5.dom.replaceWithChildNodes(d);\n }) : (e = a.selection.getRange(), f = e.extractContents(), g = a.doc.createElement(\"pre\"), d = a.doc.createElement(\"code\"), c && (d.className = c), g.appendChild(d), d.appendChild(f), e.insertNode(g), a.selection.selectNode(g));\n }, state: function state(a) {\n var b = a.selection.getSelectedNode();return b && b.nodeName && \"PRE\" == b.nodeName && b.firstChild && b.firstChild.nodeName && \"CODE\" == b.firstChild.nodeName ? b : wysihtml5.dom.getParentElement(b, { nodeName: \"CODE\" }) && wysihtml5.dom.getParentElement(b, { nodeName: \"PRE\" });\n } }, function (a) {\n function b(a) {\n var b = d[a];return b ? [a.toLowerCase(), b.toLowerCase()] : [a.toLowerCase()];\n }function c(c, d, f, g, h, i) {\n var j = c;return d && (j += \":\" + d), g && (j += \":\" + g), e[j] || (e[j] = new a.selection.HTMLApplier(b(c), d, f, !0, g, h, i)), e[j];\n }var d = { strong: \"b\", em: \"i\", b: \"strong\", i: \"em\" },\n e = {};a.commands.formatInline = { exec: function exec(a, b, d, e, f, g, h, i, j) {\n var k = a.selection.createRange(),\n l = a.selection.getOwnRanges();return l && 0 != l.length ? (a.selection.getSelection().removeAllRanges(), c(d, e, f, g, h, a.element).toggleRange(l), i ? j || a.cleanUp() : (k.setStart(l[0].startContainer, l[0].startOffset), k.setEnd(l[l.length - 1].endContainer, l[l.length - 1].endOffset), a.selection.setSelection(k), a.selection.executeAndRestore(function () {\n j || a.cleanUp();\n }, !0, !0)), void 0) : !1;\n }, execWithToggle: function execWithToggle(b, c, d, e, f, g, h) {\n var i,\n j = this;this.state(b, c, d, e, f, g, h) && b.selection.isCollapsed() && !b.selection.caretIsLastInSelection() && !b.selection.caretIsFirstInSelection() ? (i = j.state(b, c, d, e, f)[0], b.selection.executeAndRestoreRangy(function () {\n i.parentNode;b.selection.selectNode(i, !0), a.commands.formatInline.exec(b, c, d, e, f, g, h, !0, !0);\n })) : this.state(b, c, d, e, f, g, h) && !b.selection.isCollapsed() ? b.selection.executeAndRestoreRangy(function () {\n a.commands.formatInline.exec(b, c, d, e, f, g, h, !0, !0);\n }) : a.commands.formatInline.exec(b, c, d, e, f, g, h);\n }, state: function state(b, e, f, g, h, i, j) {\n var k,\n l,\n m = b.doc,\n n = d[f] || f;return a.dom.hasElementWithTagName(m, f) || a.dom.hasElementWithTagName(m, n) ? g && !a.dom.hasElementWithClassName(m, g) ? !1 : (k = b.selection.getOwnRanges(), k && 0 !== k.length ? (l = c(f, g, h, i, j, b.element).isAppliedToRange(k), l && l.elements ? l.elements : !1) : !1) : !1;\n } };\n}(wysihtml5), function (a) {\n a.commands.insertBlockQuote = { exec: function exec(b, c) {\n var d = this.state(b, c),\n e = b.selection.isEndToEndInNode([\"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\", \"P\"]);b.selection.executeAndRestore(function () {\n if (d) b.config.useLineBreaks && a.dom.lineBreaks(d).add(), a.dom.unwrap(d);else if (b.selection.isCollapsed() && b.selection.selectLine(), e) {\n var c = e.ownerDocument.createElement(\"blockquote\");a.dom.insert(c).after(e), c.appendChild(e);\n } else b.selection.surround({ nodeName: \"blockquote\" });\n });\n }, state: function state(b) {\n var c = b.selection.getSelectedNode(),\n d = a.dom.getParentElement(c, { nodeName: \"BLOCKQUOTE\" }, !1, b.element);return d ? d : !1;\n } };\n}(wysihtml5), wysihtml5.commands.insertHTML = { exec: function exec(a, b, c) {\n a.commands.support(b) ? a.doc.execCommand(b, !1, c) : a.selection.insertHTML(c);\n }, state: function state() {\n return !1;\n } }, function (a) {\n var b = \"IMG\";a.commands.insertImage = { exec: function exec(c, d, e) {\n var f, g, h, i, j;if (e = \"object\" == (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) ? e : { src: e }, f = c.doc, g = this.state(c), g) return c.selection.setBefore(g), i = g.parentNode, i.removeChild(g), a.dom.removeEmptyTextNodes(i), \"A\" !== i.nodeName || i.firstChild || (c.selection.setAfter(i), i.parentNode.removeChild(i)), a.quirks.redraw(c.element), void 0;g = f.createElement(b);for (j in e) {\n g.setAttribute(\"className\" === j ? \"class\" : j, e[j]);\n }c.selection.insertNode(g), a.browser.hasProblemsSettingCaretAfterImg() ? (h = f.createTextNode(a.INVISIBLE_SPACE), c.selection.insertNode(h), c.selection.setAfter(h)) : c.selection.setAfter(g);\n }, state: function state(c) {\n var d,\n e,\n f,\n g = c.doc;return a.dom.hasElementWithTagName(g, b) ? (d = c.selection.getSelectedNode(), d ? d.nodeName === b ? d : d.nodeType !== a.ELEMENT_NODE ? !1 : (e = c.selection.getText(), e = a.lang.string(e).trim(), e ? !1 : (f = c.selection.getNodes(a.ELEMENT_NODE, function (a) {\n return \"IMG\" === a.nodeName;\n }), 1 !== f.length ? !1 : f[0])) : !1) : !1;\n } };\n}(wysihtml5), function (a) {\n var b = \"<br>\" + (a.browser.needsSpaceAfterLineBreak() ? \" \" : \"\");a.commands.insertLineBreak = { exec: function exec(c, d) {\n c.commands.support(d) ? (c.doc.execCommand(d, !1, null), a.browser.autoScrollsToCaret() || c.selection.scrollIntoView()) : c.commands.exec(\"insertHTML\", b);\n }, state: function state() {\n return !1;\n } };\n}(wysihtml5), wysihtml5.commands.insertOrderedList = { exec: function exec(a, b) {\n wysihtml5.commands.insertList.exec(a, b, \"OL\");\n }, state: function state(a, b) {\n return wysihtml5.commands.insertList.state(a, b, \"OL\");\n } }, wysihtml5.commands.insertUnorderedList = { exec: function exec(a, b) {\n wysihtml5.commands.insertList.exec(a, b, \"UL\");\n }, state: function state(a, b) {\n return wysihtml5.commands.insertList.state(a, b, \"UL\");\n } }, wysihtml5.commands.insertList = function (a) {\n var b = function b(a, _b3) {\n if (a && a.nodeName) {\n \"string\" == typeof _b3 && (_b3 = [_b3]);for (var c = _b3.length; c--;) {\n if (a.nodeName === _b3[c]) return !0;\n }\n }return !1;\n },\n c = function (_c) {\n function c(_x, _x2, _x3) {\n return _c.apply(this, arguments);\n }\n\n c.toString = function () {\n return _c.toString();\n };\n\n return c;\n }(function (c, d, e) {\n var f,\n g,\n h = { el: null, other: !1 };return c && (f = a.dom.getParentElement(c, { nodeName: \"LI\" }), g = \"UL\" === d ? \"OL\" : \"UL\", b(c, d) ? h.el = c : b(c, g) ? h = { el: c, other: !0 } : f && (b(f.parentNode, d) ? h.el = f.parentNode : b(f.parentNode, g) && (h = { el: f.parentNode, other: !0 }))), h.el && !e.element.contains(h.el) && (h.el = null), h;\n }),\n d = function d(b, c, _d) {\n var e,\n g = \"UL\" === c ? \"OL\" : \"UL\";_d.selection.executeAndRestore(function () {\n var h,\n i,\n j = f(g, _d);if (j.length) for (h = j.length; h--;) {\n a.dom.renameElement(j[h], c.toLowerCase());\n } else {\n for (e = f([\"OL\", \"UL\"], _d), i = e.length; i--;) {\n a.dom.resolveList(e[i], _d.config.useLineBreaks);\n }a.dom.resolveList(b, _d.config.useLineBreaks);\n }\n });\n },\n e = function e(b, c, d) {\n var e = \"UL\" === c ? \"OL\" : \"UL\";d.selection.executeAndRestore(function () {\n var g,\n h = [b].concat(f(e, d));for (g = h.length; g--;) {\n a.dom.renameElement(h[g], c.toLowerCase());\n }\n });\n },\n f = function f(a, c) {\n var d,\n e = c.selection.getOwnRanges(),\n f = [];for (d = e.length; d--;) {\n f = f.concat(e[d].getNodes([1], function (c) {\n return b(c, a);\n }));\n }return f;\n },\n g = function g(b, c) {\n c.selection.executeAndRestoreRangy(function () {\n var d,\n e,\n f = \"_wysihtml5-temp-\" + new Date().getTime(),\n g = c.selection.deblockAndSurround({ nodeName: \"div\", className: f }),\n h = /\\uFEFF/g;g.innerHTML = g.innerHTML.replace(h, \"\"), g && (d = a.lang.array([\"\", \"<br>\", a.INVISIBLE_SPACE]).contains(g.innerHTML), e = a.dom.convertToList(g, b.toLowerCase(), c.parent.config.uneditableContainerClassname), d && c.selection.selectNode(e.querySelector(\"li\"), !0));\n });\n };return { exec: function exec(a, b, f) {\n var h = a.doc,\n i = \"OL\" === f ? \"insertOrderedList\" : \"insertUnorderedList\",\n j = a.selection.getSelectedNode(),\n k = c(j, f, a);k.el ? k.other ? e(k.el, f, a) : d(k.el, f, a) : a.commands.support(i) ? h.execCommand(i, !1, null) : g(f, a);\n }, state: function state(a, b, d) {\n var e = a.selection.getSelectedNode(),\n f = c(e, d, a);return f.el && !f.other ? f.el : !1;\n } };\n}(wysihtml5), wysihtml5.commands.italic = { exec: function exec(a, b) {\n wysihtml5.commands.formatInline.execWithToggle(a, b, \"i\");\n }, state: function state(a, b) {\n return wysihtml5.commands.formatInline.state(a, b, \"i\");\n } }, function (a) {\n var b = \"wysiwyg-text-align-center\",\n c = /wysiwyg-text-align-[0-9a-z]+/g;a.commands.justifyCenter = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"wysiwyg-text-align-left\",\n c = /wysiwyg-text-align-[0-9a-z]+/g;a.commands.justifyLeft = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"wysiwyg-text-align-right\",\n c = /wysiwyg-text-align-[0-9a-z]+/g;a.commands.justifyRight = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"wysiwyg-text-align-justify\",\n c = /wysiwyg-text-align-[0-9a-z]+/g;a.commands.justifyFull = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"text-align: right;\",\n c = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;a.commands.alignRightStyle = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, null, null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, null, null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"text-align: left;\",\n c = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;a.commands.alignLeftStyle = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, null, null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, null, null, b, c);\n } };\n}(wysihtml5), function (a) {\n var b = \"text-align: center;\",\n c = /(\\s|^)text-align\\s*:\\s*[^;\\s]+;?/gi;a.commands.alignCenterStyle = { exec: function exec(d) {\n return a.commands.formatBlock.exec(d, \"formatBlock\", null, null, null, b, c);\n }, state: function state(d) {\n return a.commands.formatBlock.state(d, \"formatBlock\", null, null, null, b, c);\n } };\n}(wysihtml5), wysihtml5.commands.redo = { exec: function exec(a) {\n return a.undoManager.redo();\n }, state: function state() {\n return !1;\n } }, wysihtml5.commands.underline = { exec: function exec(a, b) {\n wysihtml5.commands.formatInline.execWithToggle(a, b, \"u\");\n }, state: function state(a, b) {\n return wysihtml5.commands.formatInline.state(a, b, \"u\");\n } }, wysihtml5.commands.undo = { exec: function exec(a) {\n return a.undoManager.undo();\n }, state: function state() {\n return !1;\n } }, wysihtml5.commands.createTable = { exec: function exec(a, b, c) {\n var d, e, f;if (c && c.cols && c.rows && parseInt(c.cols, 10) > 0 && parseInt(c.rows, 10) > 0) {\n for (f = c.tableStyle ? '<table style=\"' + c.tableStyle + '\">' : \"<table>\", f += \"<tbody>\", e = 0; e < c.rows; e++) {\n for (f += \"<tr>\", d = 0; d < c.cols; d++) {\n f += \"<td> </td>\";\n }f += \"</tr>\";\n }f += \"</tbody></table>\", a.commands.exec(\"insertHTML\", f);\n }\n }, state: function state() {\n return !1;\n } }, wysihtml5.commands.mergeTableCells = { exec: function exec(a, b) {\n a.tableSelection && a.tableSelection.start && a.tableSelection.end && (this.state(a, b) ? wysihtml5.dom.table.unmergeCell(a.tableSelection.start) : wysihtml5.dom.table.mergeCellsBetween(a.tableSelection.start, a.tableSelection.end));\n }, state: function state(a) {\n if (a.tableSelection) {\n var b = a.tableSelection.start,\n c = a.tableSelection.end;if (b && c && b == c && (wysihtml5.dom.getAttribute(b, \"colspan\") && parseInt(wysihtml5.dom.getAttribute(b, \"colspan\"), 10) > 1 || wysihtml5.dom.getAttribute(b, \"rowspan\") && parseInt(wysihtml5.dom.getAttribute(b, \"rowspan\"), 10) > 1)) return [b];\n }return !1;\n } }, wysihtml5.commands.addTableCells = { exec: function exec(a, b, c) {\n if (a.tableSelection && a.tableSelection.start && a.tableSelection.end) {\n var d = wysihtml5.dom.table.orderSelectionEnds(a.tableSelection.start, a.tableSelection.end);\"before\" == c || \"above\" == c ? wysihtml5.dom.table.addCells(d.start, c) : (\"after\" == c || \"below\" == c) && wysihtml5.dom.table.addCells(d.end, c), setTimeout(function () {\n a.tableSelection.select(d.start, d.end);\n }, 0);\n }\n }, state: function state() {\n return !1;\n } }, wysihtml5.commands.deleteTableCells = { exec: function exec(a, b, c) {\n if (a.tableSelection && a.tableSelection.start && a.tableSelection.end) {\n var d,\n e = wysihtml5.dom.table.orderSelectionEnds(a.tableSelection.start, a.tableSelection.end),\n f = wysihtml5.dom.table.indexOf(e.start),\n g = a.tableSelection.table;wysihtml5.dom.table.removeCells(e.start, c), setTimeout(function () {\n d = wysihtml5.dom.table.findCell(g, f), d || (\"row\" == c && (d = wysihtml5.dom.table.findCell(g, { row: f.row - 1, col: f.col })), \"column\" == c && (d = wysihtml5.dom.table.findCell(g, { row: f.row, col: f.col - 1 }))), d && a.tableSelection.select(d, d);\n }, 0);\n }\n }, state: function state() {\n return !1;\n } }, wysihtml5.commands.indentList = { exec: function exec(a) {\n var b = a.selection.getSelectionParentsByTag(\"LI\");return b ? this.tryToPushLiLevel(b, a.selection) : !1;\n }, state: function state() {\n return !1;\n }, tryToPushLiLevel: function tryToPushLiLevel(a, b) {\n var c,\n d,\n e,\n f,\n g,\n h = !1;return b.executeAndRestoreRangy(function () {\n for (var b = a.length; b--;) {\n f = a[b], c = \"OL\" === f.parentNode.nodeName ? \"OL\" : \"UL\", d = f.ownerDocument.createElement(c), e = wysihtml5.dom.domNode(f).prev({ nodeTypes: [wysihtml5.ELEMENT_NODE] }), g = e ? e.querySelector(\"ul, ol\") : null, e && (g ? g.appendChild(f) : (d.appendChild(f), e.appendChild(d)), h = !0);\n }\n }), h;\n } }, wysihtml5.commands.outdentList = { exec: function exec(a) {\n var b = a.selection.getSelectionParentsByTag(\"LI\");return b ? this.tryToPullLiLevel(b, a) : !1;\n }, state: function state() {\n return !1;\n }, tryToPullLiLevel: function tryToPullLiLevel(a, b) {\n var c,\n d,\n e,\n f,\n g,\n h = !1,\n i = this;return b.selection.executeAndRestoreRangy(function () {\n var j, k;for (j = a.length; j--;) {\n if (f = a[j], f.parentNode && (c = f.parentNode, \"OL\" === c.tagName || \"UL\" === c.tagName)) {\n if (h = !0, d = wysihtml5.dom.getParentElement(c.parentNode, { nodeName: [\"OL\", \"UL\"] }, !1, b.element), e = wysihtml5.dom.getParentElement(c.parentNode, { nodeName: [\"LI\"] }, !1, b.element), d && e) f.nextSibling && (g = i.getAfterList(c, f), f.appendChild(g)), d.insertBefore(f, e.nextSibling);else {\n for (f.nextSibling && (g = i.getAfterList(c, f), f.appendChild(g)), k = f.childNodes.length; k--;) {\n c.parentNode.insertBefore(f.childNodes[k], c.nextSibling);\n }c.parentNode.insertBefore(document.createElement(\"br\"), c.nextSibling), f.parentNode.removeChild(f);\n }0 === c.childNodes.length && c.parentNode.removeChild(c);\n }\n }\n }), h;\n }, getAfterList: function getAfterList(a, b) {\n for (var c = a.nodeName, d = document.createElement(c); b.nextSibling;) {\n d.appendChild(b.nextSibling);\n }return d;\n } }, function (a) {\n var b = 90,\n c = 89,\n d = 8,\n e = 46,\n f = 25,\n g = \"data-wysihtml5-selection-node\",\n h = \"data-wysihtml5-selection-offset\",\n i = ('<span id=\"_wysihtml5-undo\" class=\"_wysihtml5-temp\">' + a.INVISIBLE_SPACE + \"</span>\", '<span id=\"_wysihtml5-redo\" class=\"_wysihtml5-temp\">' + a.INVISIBLE_SPACE + \"</span>\", a.dom);a.UndoManager = a.lang.Dispatcher.extend({ constructor: function constructor(a) {\n this.editor = a, this.composer = a.composer, this.element = this.composer.element, this.position = 0, this.historyStr = [], this.historyDom = [], this.transact(), this._observe();\n }, _observe: function _observe() {\n {\n var a,\n f = this;this.composer.sandbox.getDocument();\n }i.observe(this.element, \"keydown\", function (a) {\n if (!a.altKey && (a.ctrlKey || a.metaKey)) {\n var d = a.keyCode,\n e = d === b && !a.shiftKey,\n g = d === b && a.shiftKey || d === c;e ? (f.undo(), a.preventDefault()) : g && (f.redo(), a.preventDefault());\n }\n }), i.observe(this.element, \"keydown\", function (b) {\n var c = b.keyCode;c !== a && (a = c, (c === d || c === e) && f.transact());\n }), this.editor.on(\"newword:composer\", function () {\n f.transact();\n }).on(\"beforecommand:composer\", function () {\n f.transact();\n });\n }, transact: function transact() {\n var b,\n c,\n d,\n e,\n i,\n j,\n k,\n l = this.historyStr[this.position - 1],\n m = this.composer.getValue(!1, !1),\n n = this.element.offsetWidth > 0 && this.element.offsetHeight > 0;m !== l && (j = this.historyStr.length = this.historyDom.length = this.position, j > f && (this.historyStr.shift(), this.historyDom.shift(), this.position--), this.position++, n && (b = this.composer.selection.getRange(), c = b && b.startContainer ? b.startContainer : this.element, d = b && b.startOffset ? b.startOffset : 0, c.nodeType === a.ELEMENT_NODE ? e = c : (e = c.parentNode, i = this.getChildNodeIndex(e, c)), e.setAttribute(h, d), void 0 !== i && e.setAttribute(g, i)), k = this.element.cloneNode(!!m), this.historyDom.push(k), this.historyStr.push(m), e && (e.removeAttribute(h), e.removeAttribute(g)));\n }, undo: function undo() {\n this.transact(), this.undoPossible() && (this.set(this.historyDom[--this.position - 1]), this.editor.fire(\"undo:composer\"));\n }, redo: function redo() {\n this.redoPossible() && (this.set(this.historyDom[++this.position - 1]), this.editor.fire(\"redo:composer\"));\n }, undoPossible: function undoPossible() {\n return this.position > 1;\n }, redoPossible: function redoPossible() {\n return this.position < this.historyStr.length;\n }, set: function set(a) {\n var b, c, d, e, f, i;for (this.element.innerHTML = \"\", b = 0, c = a.childNodes, d = a.childNodes.length; d > b; b++) {\n this.element.appendChild(c[b].cloneNode(!0));\n }a.hasAttribute(h) ? (e = a.getAttribute(h), i = a.getAttribute(g), f = this.element) : (f = this.element.querySelector(\"[\" + h + \"]\") || this.element, e = f.getAttribute(h), i = f.getAttribute(g), f.removeAttribute(h), f.removeAttribute(g)), null !== i && (f = this.getChildNodeByIndex(f, +i)), this.composer.selection.set(f, e);\n }, getChildNodeIndex: function getChildNodeIndex(a, b) {\n for (var c = 0, d = a.childNodes, e = d.length; e > c; c++) {\n if (d[c] === b) return c;\n }\n }, getChildNodeByIndex: function getChildNodeByIndex(a, b) {\n return a.childNodes[b];\n } });\n}(wysihtml5), wysihtml5.views.View = Base.extend({ constructor: function constructor(a, b, c) {\n this.parent = a, this.element = b, this.config = c, this.config.noTextarea || this._observeViewChange();\n }, _observeViewChange: function _observeViewChange() {\n var a = this;this.parent.on(\"beforeload\", function () {\n a.parent.on(\"change_view\", function (b) {\n b === a.name ? (a.parent.currentView = a, a.show(), setTimeout(function () {\n a.focus();\n }, 0)) : a.hide();\n });\n });\n }, focus: function focus() {\n if (this.element.ownerDocument.querySelector(\":focus\") !== this.element) try {\n this.element.focus();\n } catch (a) {}\n }, hide: function hide() {\n this.element.style.display = \"none\";\n }, show: function show() {\n this.element.style.display = \"\";\n }, disable: function disable() {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }, enable: function enable() {\n this.element.removeAttribute(\"disabled\");\n } }), function (a) {\n var b = a.dom,\n c = a.browser;a.views.Composer = a.views.View.extend({ name: \"composer\", CARET_HACK: \"<br>\", constructor: function constructor(a, b, c) {\n this.base(a, b, c), this.config.noTextarea ? this.editableArea = b : this.textarea = this.parent.textarea, this.config.contentEditableMode ? this._initContentEditableArea() : this._initSandbox();\n }, clear: function clear() {\n this.element.innerHTML = c.displaysCaretInEmptyContentEditableCorrectly() ? \"\" : this.CARET_HACK;\n }, getValue: function getValue(b, c) {\n var d = this.isEmpty() ? \"\" : a.quirks.getCorrectInnerHTML(this.element);return b !== !1 && (d = this.parent.parse(d, c === !1 ? !1 : !0)), d;\n }, setValue: function setValue(a, b) {\n b && (a = this.parent.parse(a));try {\n this.element.innerHTML = a;\n } catch (c) {\n this.element.innerText = a;\n }\n }, cleanUp: function cleanUp() {\n this.parent.parse(this.element);\n }, show: function show() {\n this.editableArea.style.display = this._displayStyle || \"\", this.config.noTextarea || this.textarea.element.disabled || (this.disable(), this.enable());\n }, hide: function hide() {\n this._displayStyle = b.getStyle(\"display\").from(this.editableArea), \"none\" === this._displayStyle && (this._displayStyle = null), this.editableArea.style.display = \"none\";\n }, disable: function disable() {\n this.parent.fire(\"disable:composer\"), this.element.removeAttribute(\"contentEditable\");\n }, enable: function enable() {\n this.parent.fire(\"enable:composer\"), this.element.setAttribute(\"contentEditable\", \"true\");\n }, focus: function focus(b) {\n a.browser.doesAsyncFocus() && this.hasPlaceholderSet() && this.clear(), this.base();var c = this.element.lastChild;b && c && this.selection && (\"BR\" === c.nodeName ? this.selection.setBefore(this.element.lastChild) : this.selection.setAfter(this.element.lastChild));\n }, getTextContent: function getTextContent() {\n return b.getTextContent(this.element);\n }, hasPlaceholderSet: function hasPlaceholderSet() {\n return this.getTextContent() == (this.config.noTextarea ? this.editableArea.getAttribute(\"data-placeholder\") : this.textarea.element.getAttribute(\"placeholder\")) && this.placeholderSet;\n }, isEmpty: function isEmpty() {\n var a = this.element.innerHTML.toLowerCase();return (/^(\\s|<br>|<\\/br>|<p>|<\\/p>)*$/i.test(a) || \"\" === a || \"<br>\" === a || \"<p></p>\" === a || \"<p><br></p>\" === a || this.hasPlaceholderSet()\n );\n }, _initContentEditableArea: function _initContentEditableArea() {\n var a = this;this.config.noTextarea ? this.sandbox = new b.ContentEditableArea(function () {\n a._create();\n }, {}, this.editableArea) : (this.sandbox = new b.ContentEditableArea(function () {\n a._create();\n }), this.editableArea = this.sandbox.getContentEditable(), b.insert(this.editableArea).after(this.textarea.element), this._createWysiwygFormField());\n }, _initSandbox: function _initSandbox() {\n var a,\n c = this;this.sandbox = new b.Sandbox(function () {\n c._create();\n }, { stylesheets: this.config.stylesheets }), this.editableArea = this.sandbox.getIframe(), a = this.textarea.element, b.insert(this.editableArea).after(a), this._createWysiwygFormField();\n }, _createWysiwygFormField: function _createWysiwygFormField() {\n if (this.textarea.element.form) {\n var a = document.createElement(\"input\");a.type = \"hidden\", a.name = \"_wysihtml5_mode\", a.value = 1, b.insert(a).after(this.textarea.element);\n }\n }, _create: function _create() {\n var d,\n e,\n f = this;this.doc = this.sandbox.getDocument(), this.element = this.config.contentEditableMode ? this.sandbox.getContentEditable() : this.doc.body, this.config.noTextarea ? this.cleanUp() : (this.textarea = this.parent.textarea, this.element.innerHTML = this.textarea.getValue(!0, !1)), this.selection = new a.Selection(this.parent, this.element, this.config.uneditableContainerClassname), this.commands = new a.Commands(this.parent), this.config.noTextarea || b.copyAttributes([\"className\", \"spellcheck\", \"title\", \"lang\", \"dir\", \"accessKey\"]).from(this.textarea.element).to(this.element), b.addClass(this.element, this.config.composerClassName), this.config.style && !this.config.contentEditableMode && this.style(), this.observe(), d = this.config.name, d && (b.addClass(this.element, d), this.config.contentEditableMode || b.addClass(this.editableArea, d)), this.enable(), !this.config.noTextarea && this.textarea.element.disabled && this.disable(), e = \"string\" == typeof this.config.placeholder ? this.config.placeholder : this.config.noTextarea ? this.editableArea.getAttribute(\"data-placeholder\") : this.textarea.element.getAttribute(\"placeholder\"), e && b.simulatePlaceholder(this.parent, this, e), this.commands.exec(\"styleWithCSS\", !1), this._initAutoLinking(), this._initObjectResizing(), this._initUndoManager(), this._initLineBreaking(), this.config.noTextarea || !this.textarea.element.hasAttribute(\"autofocus\") && document.querySelector(\":focus\") != this.textarea.element || c.isIos() || setTimeout(function () {\n f.focus(!0);\n }, 100), c.clearsContentEditableCorrectly() || a.quirks.ensureProperClearing(this), this.initSync && this.config.sync && this.initSync(), this.config.noTextarea || this.textarea.hide(), this.parent.fire(\"beforeload\").fire(\"load\");\n }, _initAutoLinking: function _initAutoLinking() {\n var d,\n e,\n f,\n g = this,\n h = c.canDisableAutoLinking(),\n i = c.doesAutoLinkingInContentEditable();h && this.commands.exec(\"autoUrlDetect\", !1), this.config.autoLink && ((!i || i && h) && (this.parent.on(\"newword:composer\", function () {\n b.getTextContent(g.element).match(b.autoLink.URL_REG_EXP) && g.selection.executeAndRestore(function (c, d) {\n var e,\n f = g.element.querySelectorAll(\".\" + g.config.uneditableContainerClassname),\n h = !1;for (e = f.length; e--;) {\n a.dom.contains(f[e], d) && (h = !0);\n }h || b.autoLink(d.parentNode, [g.config.uneditableContainerClassname]);\n });\n }), b.observe(this.element, \"blur\", function () {\n b.autoLink(g.element, [g.config.uneditableContainerClassname]);\n })), d = this.sandbox.getDocument().getElementsByTagName(\"a\"), e = b.autoLink.URL_REG_EXP, f = function f(c) {\n var d = a.lang.string(b.getTextContent(c)).trim();return \"www.\" === d.substr(0, 4) && (d = \"http://\" + d), d;\n }, b.observe(this.element, \"keydown\", function (a) {\n if (d.length) {\n var c,\n h = g.selection.getSelectedNode(a.target.ownerDocument),\n i = b.getParentElement(h, { nodeName: \"A\" }, 4);i && (c = f(i), setTimeout(function () {\n var a = f(i);a !== c && a.match(e) && i.setAttribute(\"href\", a);\n }, 0));\n }\n }));\n }, _initObjectResizing: function _initObjectResizing() {\n if (this.commands.exec(\"enableObjectResizing\", !0), c.supportsEvent(\"resizeend\")) {\n var d = [\"width\", \"height\"],\n e = d.length,\n f = this.element;b.observe(f, \"resizeend\", function (b) {\n var c,\n g = b.target || b.srcElement,\n h = g.style,\n i = 0;if (\"IMG\" === g.nodeName) {\n for (; e > i; i++) {\n c = d[i], h[c] && (g.setAttribute(c, parseInt(h[c], 10)), h[c] = \"\");\n }a.quirks.redraw(f);\n }\n });\n }\n }, _initUndoManager: function _initUndoManager() {\n this.undoManager = new a.UndoManager(this.parent);\n }, _initLineBreaking: function _initLineBreaking() {\n function d(a) {\n var c = b.getParentElement(a, { nodeName: [\"P\", \"DIV\"] }, 2);c && b.contains(e.element, c) && e.selection.executeAndRestore(function () {\n e.config.useLineBreaks ? b.replaceWithChildNodes(c) : \"P\" !== c.nodeName && b.renameElement(c, \"p\");\n });\n }var e = this,\n f = [\"LI\", \"P\", \"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\"],\n g = [\"UL\", \"OL\", \"MENU\"];this.config.useLineBreaks || b.observe(this.element, [\"focus\", \"keydown\"], function () {\n if (e.isEmpty()) {\n var a = e.doc.createElement(\"P\");e.element.innerHTML = \"\", e.element.appendChild(a), c.displaysCaretInEmptyContentEditableCorrectly() ? e.selection.selectNode(a, !0) : (a.innerHTML = \"<br>\", e.selection.setBefore(a.firstChild));\n }\n }), b.observe(this.element, \"keydown\", function (c) {\n var h,\n i = c.keyCode;if (!c.shiftKey && (i === a.ENTER_KEY || i === a.BACKSPACE_KEY)) return h = b.getParentElement(e.selection.getSelectedNode(), { nodeName: f }, 4), h ? (setTimeout(function () {\n var c,\n f = e.selection.getSelectedNode();if (\"LI\" === h.nodeName) {\n if (!f) return;c = b.getParentElement(f, { nodeName: g }, 2), c || d(f);\n }i === a.ENTER_KEY && h.nodeName.match(/^H[1-6]$/) && d(f);\n }, 0), void 0) : (e.config.useLineBreaks && i === a.ENTER_KEY && !a.browser.insertsLineBreaksOnReturn() && (c.preventDefault(), e.commands.exec(\"insertLineBreak\")), void 0);\n });\n } });\n}(wysihtml5), function (a) {\n var b = a.dom,\n c = document,\n d = window,\n e = c.createElement(\"div\"),\n f = [\"background-color\", \"color\", \"cursor\", \"font-family\", \"font-size\", \"font-style\", \"font-variant\", \"font-weight\", \"line-height\", \"letter-spacing\", \"text-align\", \"text-decoration\", \"text-indent\", \"text-rendering\", \"word-break\", \"word-wrap\", \"word-spacing\"],\n g = [\"background-color\", \"border-collapse\", \"border-bottom-color\", \"border-bottom-style\", \"border-bottom-width\", \"border-left-color\", \"border-left-style\", \"border-left-width\", \"border-right-color\", \"border-right-style\", \"border-right-width\", \"border-top-color\", \"border-top-style\", \"border-top-width\", \"clear\", \"display\", \"float\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"outline-color\", \"outline-offset\", \"outline-width\", \"outline-style\", \"padding-left\", \"padding-right\", \"padding-top\", \"padding-bottom\", \"position\", \"top\", \"left\", \"right\", \"bottom\", \"z-index\", \"vertical-align\", \"text-align\", \"-webkit-box-sizing\", \"-moz-box-sizing\", \"-ms-box-sizing\", \"box-sizing\", \"-webkit-box-shadow\", \"-moz-box-shadow\", \"-ms-box-shadow\", \"box-shadow\", \"-webkit-border-top-right-radius\", \"-moz-border-radius-topright\", \"border-top-right-radius\", \"-webkit-border-bottom-right-radius\", \"-moz-border-radius-bottomright\", \"border-bottom-right-radius\", \"-webkit-border-bottom-left-radius\", \"-moz-border-radius-bottomleft\", \"border-bottom-left-radius\", \"-webkit-border-top-left-radius\", \"-moz-border-radius-topleft\", \"border-top-left-radius\", \"width\", \"height\"],\n h = [\"html { height: 100%; }\", \"body { height: 100%; padding: 1px 0 0 0; margin: -1px 0 0 0; }\", \"body > p:first-child { margin-top: 0; }\", \"._wysihtml5-temp { display: none; }\", a.browser.isGecko ? \"body.placeholder { color: graytext !important; }\" : \"body.placeholder { color: #a9a9a9 !important; }\", \"img:-moz-broken { -moz-force-broken-image-icon: 1; height: 24px; width: 24px; }\"],\n i = function i(a) {\n if (a.setActive) try {\n a.setActive();\n } catch (e) {} else {\n var f = a.style,\n g = c.documentElement.scrollTop || c.body.scrollTop,\n h = c.documentElement.scrollLeft || c.body.scrollLeft,\n i = { position: f.position, top: f.top, left: f.left, WebkitUserSelect: f.WebkitUserSelect };b.setStyles({ position: \"absolute\", top: \"-99999px\", left: \"-99999px\", WebkitUserSelect: \"none\" }).on(a), a.focus(), b.setStyles(i).on(a), d.scrollTo && d.scrollTo(h, g);\n }\n };a.views.Composer.prototype.style = function () {\n var d,\n j,\n k = this,\n l = c.querySelector(\":focus\"),\n m = this.textarea.element,\n n = m.hasAttribute(\"placeholder\"),\n o = n && m.getAttribute(\"placeholder\"),\n p = m.style.display,\n q = m.disabled;return this.focusStylesHost = e.cloneNode(!1), this.blurStylesHost = e.cloneNode(!1), this.disabledStylesHost = e.cloneNode(!1), n && m.removeAttribute(\"placeholder\"), m === l && m.blur(), m.disabled = !1, m.style.display = d = \"none\", (m.getAttribute(\"rows\") && \"auto\" === b.getStyle(\"height\").from(m) || m.getAttribute(\"cols\") && \"auto\" === b.getStyle(\"width\").from(m)) && (m.style.display = d = p), b.copyStyles(g).from(m).to(this.editableArea).andTo(this.blurStylesHost), b.copyStyles(f).from(m).to(this.element).andTo(this.blurStylesHost), b.insertCSS(h).into(this.element.ownerDocument), m.disabled = !0, b.copyStyles(g).from(m).to(this.disabledStylesHost), b.copyStyles(f).from(m).to(this.disabledStylesHost), m.disabled = q, m.style.display = p, i(m), m.style.display = d, b.copyStyles(g).from(m).to(this.focusStylesHost), b.copyStyles(f).from(m).to(this.focusStylesHost), m.style.display = p, b.copyStyles([\"display\"]).from(m).to(this.editableArea), j = a.lang.array(g).without([\"display\"]), l ? l.focus() : m.blur(), n && m.setAttribute(\"placeholder\", o), this.parent.on(\"focus:composer\", function () {\n b.copyStyles(j).from(k.focusStylesHost).to(k.editableArea), b.copyStyles(f).from(k.focusStylesHost).to(k.element);\n }), this.parent.on(\"blur:composer\", function () {\n b.copyStyles(j).from(k.blurStylesHost).to(k.editableArea), b.copyStyles(f).from(k.blurStylesHost).to(k.element);\n }), this.parent.observe(\"disable:composer\", function () {\n b.copyStyles(j).from(k.disabledStylesHost).to(k.editableArea), b.copyStyles(f).from(k.disabledStylesHost).to(k.element);\n }), this.parent.observe(\"enable:composer\", function () {\n b.copyStyles(j).from(k.blurStylesHost).to(k.editableArea), b.copyStyles(f).from(k.blurStylesHost).to(k.element);\n }), this;\n };\n}(wysihtml5), function (a) {\n var b = a.dom,\n c = a.browser,\n d = { 66: \"bold\", 73: \"italic\", 85: \"underline\" },\n e = function e(a, b, c) {\n var d,\n e = a.getPreviousNode(b, !0),\n f = a.getSelectedNode();if (1 !== f.nodeType && f.parentNode !== c && (f = f.parentNode), e) if (1 == f.nodeType) {\n if (d = f.firstChild, 1 == e.nodeType) for (; f.firstChild;) {\n e.appendChild(f.firstChild);\n } else for (; f.firstChild;) {\n b.parentNode.insertBefore(f.firstChild, b);\n }f.parentNode && f.parentNode.removeChild(f), a.setBefore(d);\n } else 1 == e.nodeType ? e.appendChild(f) : b.parentNode.insertBefore(f, b), a.setBefore(f);\n },\n f = function f(a, b, c, d) {\n var f, g, h;b.isCollapsed() ? b.caretIsInTheBeginnig(\"LI\") ? (a.preventDefault(), d.commands.exec(\"outdentList\")) : b.caretIsInTheBeginnig() ? a.preventDefault() : (b.caretIsFirstInSelection() && b.getPreviousNode() && b.getPreviousNode().nodeName && /^H\\d$/gi.test(b.getPreviousNode().nodeName) && (f = b.getPreviousNode(), a.preventDefault(), /^\\s*$/.test(f.textContent || f.innerText) ? f.parentNode.removeChild(f) : (g = f.ownerDocument.createRange(), g.selectNodeContents(f), g.collapse(!1), b.setSelection(g))), h = b.caretIsBeforeUneditable(), h && (a.preventDefault(), e(b, h, c))) : b.containsUneditable() && (a.preventDefault(), b.deleteContents());\n },\n g = function g(a) {\n if (a.selection.isCollapsed()) {\n if (a.selection.caretIsInTheBeginnig(\"LI\") && a.commands.exec(\"indentList\")) return;\n } else a.selection.deleteContents();\n a.commands.exec(\"insertHTML\", \" \");\n };a.views.Composer.prototype.observe = function () {\n var e,\n h,\n i = this,\n j = this.getValue(!1, !1),\n k = this.sandbox.getIframe ? this.sandbox.getIframe() : this.sandbox.getContentEditable(),\n l = this.element,\n m = c.supportsEventsInIframeCorrectly() || this.sandbox.getContentEditable ? l : this.sandbox.getWindow(),\n n = [\"drop\", \"paste\", \"beforepaste\"],\n o = [\"drop\", \"paste\", \"mouseup\", \"focus\", \"keyup\"];b.observe(k, \"DOMNodeRemoved\", function () {\n clearInterval(e), i.parent.fire(\"destroy:composer\");\n }), c.supportsMutationEvents() || (e = setInterval(function () {\n b.contains(document.documentElement, k) || (clearInterval(e), i.parent.fire(\"destroy:composer\"));\n }, 250)), b.observe(m, o, function () {\n setTimeout(function () {\n i.parent.fire(\"interaction\").fire(\"interaction:composer\");\n }, 0);\n }), this.config.handleTables && (!this.tableClickHandle && this.doc.execCommand && a.browser.supportsCommand(this.doc, \"enableObjectResizing\") && a.browser.supportsCommand(this.doc, \"enableInlineTableEditing\") && (this.sandbox.getIframe ? this.tableClickHandle = b.observe(k, [\"focus\", \"mouseup\", \"mouseover\"], function () {\n i.doc.execCommand(\"enableObjectResizing\", !1, \"false\"), i.doc.execCommand(\"enableInlineTableEditing\", !1, \"false\"), i.tableClickHandle.stop();\n }) : setTimeout(function () {\n i.doc.execCommand(\"enableObjectResizing\", !1, \"false\"), i.doc.execCommand(\"enableInlineTableEditing\", !1, \"false\");\n }, 0)), this.tableSelection = a.quirks.tableCellsSelection(l, i.parent)), b.observe(m, \"focus\", function (a) {\n i.parent.fire(\"focus\", a).fire(\"focus:composer\", a), setTimeout(function () {\n j = i.getValue(!1, !1);\n }, 0);\n }), b.observe(m, \"blur\", function (a) {\n if (j !== i.getValue(!1, !1)) {\n var b = a;\"function\" == typeof Object.create && (b = Object.create(a, { type: { value: \"change\" } })), i.parent.fire(\"change\", b).fire(\"change:composer\", b);\n }i.parent.fire(\"blur\", a).fire(\"blur:composer\", a);\n }), b.observe(l, \"dragenter\", function () {\n i.parent.fire(\"unset_placeholder\");\n }), b.observe(l, n, function (a) {\n i.parent.fire(a.type, a).fire(a.type + \":composer\", a);\n }), this.config.copyedFromMarking && b.observe(l, \"copy\", function (a) {\n a.clipboardData && (a.clipboardData.setData(\"text/html\", i.config.copyedFromMarking + i.selection.getHtml()), a.preventDefault()), i.parent.fire(a.type, a).fire(a.type + \":composer\", a);\n }), b.observe(l, \"keyup\", function (b) {\n var c = b.keyCode;(c === a.SPACE_KEY || c === a.ENTER_KEY) && i.parent.fire(\"newword:composer\");\n }), this.parent.on(\"paste:composer\", function () {\n setTimeout(function () {\n i.parent.fire(\"newword:composer\");\n }, 0);\n }), c.canSelectImagesInContentEditable() || b.observe(l, \"mousedown\", function (b) {\n var c = b.target,\n d = l.querySelectorAll(\"img\"),\n e = l.querySelectorAll(\".\" + i.config.uneditableContainerClassname + \" img\"),\n f = a.lang.array(d).without(e);\"IMG\" === c.nodeName && a.lang.array(f).contains(c) && i.selection.selectNode(c);\n }), c.canSelectImagesInContentEditable() || b.observe(l, \"drop\", function () {\n setTimeout(function () {\n i.selection.getSelection().removeAllRanges();\n }, 0);\n }), c.hasHistoryIssue() && c.supportsSelectionModify() && b.observe(l, \"keydown\", function (a) {\n if (a.metaKey || a.ctrlKey) {\n var b = a.keyCode,\n c = l.ownerDocument.defaultView,\n d = c.getSelection();(37 === b || 39 === b) && (37 === b && (d.modify(\"extend\", \"left\", \"lineboundary\"), a.shiftKey || d.collapseToStart()), 39 === b && (d.modify(\"extend\", \"right\", \"lineboundary\"), a.shiftKey || d.collapseToEnd()), a.preventDefault());\n }\n }), b.observe(l, \"keydown\", function (a) {\n var b = a.keyCode,\n c = d[b];(a.ctrlKey || a.metaKey) && !a.altKey && c && (i.commands.exec(c), a.preventDefault()), 8 === b ? f(a, i.selection, l, i) : i.config.handleTabKey && 9 === b && (a.preventDefault(), g(i, l));\n }), b.observe(l, \"keydown\", function (b) {\n var c,\n d = i.selection.getSelectedNode(!0),\n e = b.keyCode;!d || \"IMG\" !== d.nodeName || e !== a.BACKSPACE_KEY && e !== a.DELETE_KEY || (c = d.parentNode, c.removeChild(d), \"A\" !== c.nodeName || c.firstChild || c.parentNode.removeChild(c), setTimeout(function () {\n a.quirks.redraw(l);\n }, 0), b.preventDefault());\n }), !this.config.contentEditableMode && c.hasIframeFocusIssue() && (b.observe(k, \"focus\", function () {\n setTimeout(function () {\n i.doc.querySelector(\":focus\") !== i.element && i.focus();\n }, 0);\n }), b.observe(this.element, \"blur\", function () {\n setTimeout(function () {\n i.selection.getSelection().removeAllRanges();\n }, 0);\n })), h = { IMG: \"Image: \", A: \"Link: \" }, b.observe(l, \"mouseover\", function (a) {\n var b,\n c,\n d = a.target,\n e = d.nodeName;(\"A\" === e || \"IMG\" === e) && (c = d.hasAttribute(\"title\"), c || (b = h[e] + (d.getAttribute(\"href\") || d.getAttribute(\"src\")), d.setAttribute(\"title\", b)));\n });\n };\n}(wysihtml5), function (a) {\n var b = 400;a.views.Synchronizer = Base.extend({ constructor: function constructor(a, b, c) {\n this.editor = a, this.textarea = b, this.composer = c, this._observe();\n }, fromComposerToTextarea: function fromComposerToTextarea(b) {\n this.textarea.setValue(a.lang.string(this.composer.getValue(!1, !1)).trim(), b);\n }, fromTextareaToComposer: function fromTextareaToComposer(a) {\n var b = this.textarea.getValue(!1, !1);b ? this.composer.setValue(b, a) : (this.composer.clear(), this.editor.fire(\"set_placeholder\"));\n }, sync: function sync(a) {\n \"textarea\" === this.editor.currentView.name ? this.fromTextareaToComposer(a) : this.fromComposerToTextarea(a);\n }, _observe: function _observe() {\n var c,\n d = this,\n e = this.textarea.element.form,\n f = function f() {\n c = setInterval(function () {\n d.fromComposerToTextarea();\n }, b);\n },\n g = function g() {\n clearInterval(c), c = null;\n };f(), e && (a.dom.observe(e, \"submit\", function () {\n d.sync(!0);\n }), a.dom.observe(e, \"reset\", function () {\n setTimeout(function () {\n d.fromTextareaToComposer();\n }, 0);\n })), this.editor.on(\"change_view\", function (a) {\n \"composer\" !== a || c ? \"textarea\" === a && (d.fromComposerToTextarea(!0), g()) : (d.fromTextareaToComposer(!0), f());\n }), this.editor.on(\"destroy:composer\", g);\n } });\n}(wysihtml5), wysihtml5.views.Textarea = wysihtml5.views.View.extend({ name: \"textarea\", constructor: function constructor(a, b, c) {\n this.base(a, b, c), this._observe();\n }, clear: function clear() {\n this.element.value = \"\";\n }, getValue: function getValue(a) {\n var b = this.isEmpty() ? \"\" : this.element.value;return a !== !1 && (b = this.parent.parse(b)), b;\n }, setValue: function setValue(a, b) {\n b && (a = this.parent.parse(a)), this.element.value = a;\n }, cleanUp: function cleanUp() {\n var a = this.parent.parse(this.element.value);this.element.value = a;\n }, hasPlaceholderSet: function hasPlaceholderSet() {\n var a = wysihtml5.browser.supportsPlaceholderAttributeOn(this.element),\n b = this.element.getAttribute(\"placeholder\") || null,\n c = this.element.value,\n d = !c;return a && d || c === b;\n }, isEmpty: function isEmpty() {\n return !wysihtml5.lang.string(this.element.value).trim() || this.hasPlaceholderSet();\n }, _observe: function _observe() {\n var a = this.element,\n b = this.parent,\n c = { focusin: \"focus\", focusout: \"blur\" },\n d = wysihtml5.browser.supportsEvent(\"focusin\") ? [\"focusin\", \"focusout\", \"change\"] : [\"focus\", \"blur\", \"change\"];b.on(\"beforeload\", function () {\n wysihtml5.dom.observe(a, d, function (a) {\n var d = c[a.type] || a.type;b.fire(d).fire(d + \":textarea\");\n }), wysihtml5.dom.observe(a, [\"paste\", \"drop\"], function () {\n setTimeout(function () {\n b.fire(\"paste\").fire(\"paste:textarea\");\n }, 0);\n });\n });\n } }), function (a) {\n var b,\n c = { name: b, style: !0, toolbar: b, showToolbarAfterInit: !0, autoLink: !0, handleTables: !0, handleTabKey: !0, parserRules: { tags: { br: {}, span: {}, div: {}, p: {} }, classes: {} }, pasteParserRulesets: null, parser: a.dom.parse, composerClassName: \"wysihtml5-editor\", bodyClassName: \"wysihtml5-supported\", useLineBreaks: !0, stylesheets: [], placeholderText: b, supportTouchDevices: !0, cleanUp: !0, contentEditableMode: !1, uneditableContainerClassname: \"wysihtml5-uneditable-container\", copyedFromMarking: '<meta name=\"copied-from\" content=\"wysihtml5\">' };a.Editor = a.lang.Dispatcher.extend({ constructor: function constructor(b, d) {\n if (this.editableElement = \"string\" == typeof b ? document.getElementById(b) : b, this.config = a.lang.object({}).merge(c).merge(d).get(), this._isCompatible = a.browser.supported(), \"textarea\" != this.editableElement.nodeName.toLowerCase() && (this.config.contentEditableMode = !0, this.config.noTextarea = !0), this.config.noTextarea || (this.textarea = new a.views.Textarea(this, this.editableElement, this.config), this.currentView = this.textarea), !this._isCompatible || !this.config.supportTouchDevices && a.browser.isTouchDevice()) {\n var e = this;return setTimeout(function () {\n e.fire(\"beforeload\").fire(\"load\");\n }, 0), void 0;\n }a.dom.addClass(document.body, this.config.bodyClassName), this.composer = new a.views.Composer(this, this.editableElement, this.config), this.currentView = this.composer, \"function\" == typeof this.config.parser && this._initParser(), this.on(\"beforeload\", this.handleBeforeLoad);\n }, handleBeforeLoad: function handleBeforeLoad() {\n this.config.noTextarea || (this.synchronizer = new a.views.Synchronizer(this, this.textarea, this.composer)), this.config.toolbar && (this.toolbar = new a.toolbar.Toolbar(this, this.config.toolbar, this.config.showToolbarAfterInit));\n }, isCompatible: function isCompatible() {\n return this._isCompatible;\n }, clear: function clear() {\n return this.currentView.clear(), this;\n }, getValue: function getValue(a, b) {\n return this.currentView.getValue(a, b);\n }, setValue: function setValue(a, b) {\n return this.fire(\"unset_placeholder\"), a ? (this.currentView.setValue(a, b), this) : this.clear();\n }, cleanUp: function cleanUp() {\n this.currentView.cleanUp();\n }, focus: function focus(a) {\n return this.currentView.focus(a), this;\n }, disable: function disable() {\n return this.currentView.disable(), this;\n }, enable: function enable() {\n return this.currentView.enable(), this;\n }, isEmpty: function isEmpty() {\n return this.currentView.isEmpty();\n }, hasPlaceholderSet: function hasPlaceholderSet() {\n return this.currentView.hasPlaceholderSet();\n }, parse: function parse(b, c) {\n var d = this.config.contentEditableMode ? document : this.composer ? this.composer.sandbox.getDocument() : null,\n e = this.config.parser(b, { rules: this.config.parserRules, cleanUp: this.config.cleanUp, context: d, uneditableClass: this.config.uneditableContainerClassname, clearInternals: c });return \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && a.quirks.redraw(b), e;\n }, _initParser: function _initParser() {\n var b,\n c = this;a.browser.supportsModenPaste() ? this.on(\"paste:composer\", function (d) {\n d.preventDefault(), b = a.dom.getPastedHtml(d), b && c._cleanAndPaste(b);\n }) : this.on(\"beforepaste:composer\", function (b) {\n b.preventDefault(), a.dom.getPastedHtmlWithDiv(c.composer, function (a) {\n a && c._cleanAndPaste(a);\n });\n });\n }, _cleanAndPaste: function _cleanAndPaste(b) {\n var c = a.quirks.cleanPastedHTML(b, { referenceNode: this.composer.element, rules: this.config.pasteParserRulesets || [{ set: this.config.parserRules }], uneditableClass: this.config.uneditableContainerClassname });this.composer.selection.deleteContents(), this.composer.selection.insertHTML(c);\n } });\n}(wysihtml5), function (a) {\n var b = a.dom,\n c = \"wysihtml5-command-dialog-opened\",\n d = \"input, select, textarea\",\n e = \"[data-wysihtml5-dialog-field]\",\n f = \"data-wysihtml5-dialog-field\";a.toolbar.Dialog = a.lang.Dispatcher.extend({ constructor: function constructor(a, b) {\n this.link = a, this.container = b;\n }, _observe: function _observe() {\n var e, f, g, h, i, j;if (!this._observed) {\n for (e = this, f = function f(a) {\n var b = e._serialize();b == e.elementToChange ? e.fire(\"edit\", b) : e.fire(\"save\", b), e.hide(), a.preventDefault(), a.stopPropagation();\n }, b.observe(e.link, \"click\", function () {\n b.hasClass(e.link, c) && setTimeout(function () {\n e.hide();\n }, 0);\n }), b.observe(this.container, \"keydown\", function (b) {\n var c = b.keyCode;c === a.ENTER_KEY && f(b), c === a.ESCAPE_KEY && (e.fire(\"cancel\"), e.hide());\n }), b.delegate(this.container, \"[data-wysihtml5-dialog-action=save]\", \"click\", f), b.delegate(this.container, \"[data-wysihtml5-dialog-action=cancel]\", \"click\", function (a) {\n e.fire(\"cancel\"), e.hide(), a.preventDefault(), a.stopPropagation();\n }), g = this.container.querySelectorAll(d), h = 0, i = g.length, j = function j() {\n clearInterval(e.interval);\n }; i > h; h++) {\n b.observe(g[h], \"change\", j);\n }this._observed = !0;\n }\n }, _serialize: function _serialize() {\n for (var a = this.elementToChange || {}, b = this.container.querySelectorAll(e), c = b.length, d = 0; c > d; d++) {\n a[b[d].getAttribute(f)] = b[d].value;\n }return a;\n }, _interpolate: function _interpolate(a) {\n for (var b, c, d, g = document.querySelector(\":focus\"), h = this.container.querySelectorAll(e), i = h.length, j = 0; i > j; j++) {\n b = h[j], b !== g && (a && \"hidden\" === b.type || (c = b.getAttribute(f), d = this.elementToChange && \"boolean\" != typeof this.elementToChange ? this.elementToChange.getAttribute(c) || \"\" : b.defaultValue, b.value = d));\n }\n }, show: function show(a) {\n if (!b.hasClass(this.link, c)) {\n var e = this,\n f = this.container.querySelector(d);if (this.elementToChange = a, this._observe(), this._interpolate(), a && (this.interval = setInterval(function () {\n e._interpolate(!0);\n }, 500)), b.addClass(this.link, c), this.container.style.display = \"\", this.fire(\"show\"), f && !a) try {\n f.focus();\n } catch (g) {}\n }\n }, hide: function hide() {\n clearInterval(this.interval), this.elementToChange = null, b.removeClass(this.link, c), this.container.style.display = \"none\", this.fire(\"hide\");\n } });\n}(wysihtml5), function (a) {\n var b = a.dom,\n c = { position: \"relative\" },\n d = { left: 0, margin: 0, opacity: 0, overflow: \"hidden\", padding: 0, position: \"absolute\", top: 0, zIndex: 1 },\n e = { cursor: \"inherit\", fontSize: \"50px\", height: \"50px\", marginTop: \"-25px\", outline: 0, padding: 0, position: \"absolute\", right: \"-4px\", top: \"50%\" },\n f = { \"x-webkit-speech\": \"\", speech: \"\" };a.toolbar.Speech = function (g, h) {\n var i,\n j,\n k,\n l = document.createElement(\"input\");return a.browser.supportsSpeechApiOn(l) ? (i = g.editor.textarea.element.getAttribute(\"lang\"), i && (f.lang = i), j = document.createElement(\"div\"), a.lang.object(d).merge({ width: h.offsetWidth + \"px\", height: h.offsetHeight + \"px\" }), b.insert(l).into(j), b.insert(j).into(h), b.setStyles(e).on(l), b.setAttributes(f).on(l), b.setStyles(d).on(j), b.setStyles(c).on(h), k = \"onwebkitspeechchange\" in l ? \"webkitspeechchange\" : \"speechchange\", b.observe(l, k, function () {\n g.execCommand(\"insertText\", l.value), l.value = \"\";\n }), b.observe(l, \"click\", function (a) {\n b.hasClass(h, \"wysihtml5-command-disabled\") && a.preventDefault(), a.stopPropagation();\n }), void 0) : (h.style.display = \"none\", void 0);\n };\n}(wysihtml5), function (a) {\n var b = \"wysihtml5-command-disabled\",\n c = \"wysihtml5-commands-disabled\",\n d = \"wysihtml5-command-active\",\n e = \"wysihtml5-action-active\",\n f = a.dom;a.toolbar.Toolbar = Base.extend({ constructor: function constructor(f, g, h) {\n this.editor = f, this.container = \"string\" == typeof g ? document.getElementById(g) : g, this.composer = f.composer, this._getLinks(\"command\"), this._getLinks(\"action\"), this._observe(), h && this.show(), null != f.config.classNameCommandDisabled && (b = f.config.classNameCommandDisabled), null != f.config.classNameCommandsDisabled && (c = f.config.classNameCommandsDisabled), null != f.config.classNameCommandActive && (d = f.config.classNameCommandActive), null != f.config.classNameActionActive && (e = f.config.classNameActionActive);for (var i = this.container.querySelectorAll(\"[data-wysihtml5-command=insertSpeech]\"), j = i.length, k = 0; j > k; k++) {\n new a.toolbar.Speech(this, i[k]);\n }\n }, _getLinks: function _getLinks(b) {\n for (var c, d, e, f, g, h = this[b + \"Links\"] = a.lang.array(this.container.querySelectorAll(\"[data-wysihtml5-\" + b + \"]\")).get(), i = h.length, j = 0, k = this[b + \"Mapping\"] = {}; i > j; j++) {\n c = h[j], e = c.getAttribute(\"data-wysihtml5-\" + b), f = c.getAttribute(\"data-wysihtml5-\" + b + \"-value\"), d = this.container.querySelector(\"[data-wysihtml5-\" + b + \"-group='\" + e + \"']\"), g = this._getDialog(c, e), k[e + \":\" + f] = { link: c, group: d, name: e, value: f, dialog: g, state: !1 };\n }\n }, _getDialog: function _getDialog(b, c) {\n var d,\n e,\n f = this,\n g = this.container.querySelector(\"[data-wysihtml5-dialog='\" + c + \"']\");return g && (d = a.toolbar[\"Dialog_\" + c] ? new a.toolbar[\"Dialog_\" + c](b, g) : new a.toolbar.Dialog(b, g), d.on(\"show\", function () {\n e = f.composer.selection.getBookmark(), f.editor.fire(\"show:dialog\", { command: c, dialogContainer: g, commandLink: b });\n }), d.on(\"save\", function (a) {\n e && f.composer.selection.setBookmark(e), f._execCommand(c, a), f.editor.fire(\"save:dialog\", { command: c, dialogContainer: g, commandLink: b });\n }), d.on(\"cancel\", function () {\n f.editor.focus(!1), f.editor.fire(\"cancel:dialog\", { command: c, dialogContainer: g, commandLink: b });\n })), d;\n }, execCommand: function execCommand(a, b) {\n if (!this.commandsDisabled) {\n var c = this.commandMapping[a + \":\" + b];c && c.dialog && !c.state ? c.dialog.show() : this._execCommand(a, b);\n }\n }, _execCommand: function _execCommand(a, b) {\n this.editor.focus(!1), this.composer.commands.exec(a, b), this._updateLinkStates();\n }, execAction: function execAction(a) {\n var b = this.editor;\"change_view\" === a && b.textarea && (b.currentView === b.textarea ? b.fire(\"change_view\", \"composer\") : b.fire(\"change_view\", \"textarea\")), \"showSource\" == a && b.fire(\"showSource\");\n }, _observe: function _observe() {\n for (var a = this, b = this.editor, d = this.container, e = this.commandLinks.concat(this.actionLinks), g = e.length, h = 0; g > h; h++) {\n \"A\" === e[h].nodeName ? f.setAttributes({ href: \"javascript:;\", unselectable: \"on\" }).on(e[h]) : f.setAttributes({ unselectable: \"on\" }).on(e[h]);\n }f.delegate(d, \"[data-wysihtml5-command], [data-wysihtml5-action]\", \"mousedown\", function (a) {\n a.preventDefault();\n }), f.delegate(d, \"[data-wysihtml5-command]\", \"click\", function (b) {\n var c = this,\n d = c.getAttribute(\"data-wysihtml5-command\"),\n e = c.getAttribute(\"data-wysihtml5-command-value\");a.execCommand(d, e), b.preventDefault();\n }), f.delegate(d, \"[data-wysihtml5-action]\", \"click\", function (b) {\n var c = this.getAttribute(\"data-wysihtml5-action\");a.execAction(c), b.preventDefault();\n }), b.on(\"interaction:composer\", function () {\n a._updateLinkStates();\n }), b.on(\"focus:composer\", function () {\n a.bookmark = null;\n }), this.editor.config.handleTables && (b.on(\"tableselect:composer\", function () {\n a.container.querySelectorAll('[data-wysihtml5-hiddentools=\"table\"]')[0].style.display = \"\";\n }), b.on(\"tableunselect:composer\", function () {\n a.container.querySelectorAll('[data-wysihtml5-hiddentools=\"table\"]')[0].style.display = \"none\";\n })), b.on(\"change_view\", function (e) {\n b.textarea && setTimeout(function () {\n a.commandsDisabled = \"composer\" !== e, a._updateLinkStates(), a.commandsDisabled ? f.addClass(d, c) : f.removeClass(d, c);\n }, 0);\n });\n }, _updateLinkStates: function _updateLinkStates() {\n var c,\n g,\n h,\n i,\n j = this.commandMapping,\n k = this.actionMapping;for (c in j) {\n i = j[c], this.commandsDisabled ? (g = !1, f.removeClass(i.link, d), i.group && f.removeClass(i.group, d), i.dialog && i.dialog.hide()) : (g = this.composer.commands.state(i.name, i.value), f.removeClass(i.link, b), i.group && f.removeClass(i.group, b)), i.state !== g && (i.state = g, g ? (f.addClass(i.link, d), i.group && f.addClass(i.group, d), i.dialog && (\"object\" == (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) || a.lang.object(g).isArray() ? (!i.dialog.multiselect && a.lang.object(g).isArray() && (g = 1 === g.length ? g[0] : !0, i.state = g), i.dialog.show(g)) : i.dialog.hide())) : (f.removeClass(i.link, d), i.group && f.removeClass(i.group, d), i.dialog && i.dialog.hide()));\n }for (c in k) {\n h = k[c], \"change_view\" === h.name && (h.state = this.editor.currentView === this.editor.textarea, h.state ? f.addClass(h.link, e) : f.removeClass(h.link, e));\n }\n }, show: function show() {\n this.container.style.display = \"\";\n }, hide: function hide() {\n this.container.style.display = \"none\";\n } });\n}(wysihtml5), function (a) {\n a.toolbar.Dialog_createTable = a.toolbar.Dialog.extend({ show: function show(a) {\n this.base(a);\n } });\n}(wysihtml5), function (a) {\n var b = (a.dom, \"[data-wysihtml5-dialog-field]\"),\n c = \"data-wysihtml5-dialog-field\";a.toolbar.Dialog_foreColorStyle = a.toolbar.Dialog.extend({ multiselect: !0, _serialize: function _serialize() {\n for (var a = {}, d = this.container.querySelectorAll(b), e = d.length, f = 0; e > f; f++) {\n a[d[f].getAttribute(c)] = d[f].value;\n }return a;\n }, _interpolate: function _interpolate(d) {\n for (var e, f = document.querySelector(\":focus\"), g = this.container.querySelectorAll(b), h = g.length, i = 0, j = this.elementToChange ? a.lang.object(this.elementToChange).isArray() ? this.elementToChange[0] : this.elementToChange : null, k = j ? j.getAttribute(\"style\") : null, l = k ? a.quirks.styleParser.parseColor(k, \"color\") : null; h > i; i++) {\n e = g[i], e !== f && (d && \"hidden\" === e.type || \"color\" === e.getAttribute(c) && (e.value = l ? l[3] && 1 != l[3] ? \"rgba(\" + l[0] + \",\" + l[1] + \",\" + l[2] + \",\" + l[3] + \");\" : \"rgb(\" + l[0] + \",\" + l[1] + \",\" + l[2] + \");\" : \"rgb(0,0,0);\"));\n }\n } });\n}(wysihtml5), function (a) {\n a.dom;a.toolbar.Dialog_fontSizeStyle = a.toolbar.Dialog.extend({ multiselect: !0, _serialize: function _serialize() {\n return { size: this.container.querySelector('[data-wysihtml5-dialog-field=\"size\"]').value };\n }, _interpolate: function _interpolate() {\n var b = document.querySelector(\":focus\"),\n c = this.container.querySelector(\"[data-wysihtml5-dialog-field='size']\"),\n d = this.elementToChange ? a.lang.object(this.elementToChange).isArray() ? this.elementToChange[0] : this.elementToChange : null,\n e = d ? d.getAttribute(\"style\") : null,\n f = e ? a.quirks.styleParser.parseFontSize(e) : null;c && c !== b && f && !/^\\s*$/.test(f) && (c.value = f);\n } });\n}(wysihtml5), Handlebars = function () {\n var a = function () {\n \"use strict\";\n function a(a) {\n this.string = a;\n }var b;return a.prototype.toString = function () {\n return \"\" + this.string;\n }, b = a;\n }(),\n b = function (a) {\n \"use strict\";\n function b(a) {\n return k[a] || \"&\";\n }function c(a, b) {\n for (var c in b) {\n Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);\n }\n }function d(a) {\n return a instanceof j ? \"\" + a : a || 0 === a ? (a = \"\" + a, m.test(a) ? a.replace(l, b) : a) : \"\";\n }function e(a) {\n return a || 0 === a ? h(a) && 0 === a.length ? !0 : !1 : !0;\n }var f,\n g,\n h,\n i = {},\n j = a,\n k = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"`\": \"`\" },\n l = /[&<>\"'`]/g,\n m = /[&<>\"'`]/;return i.extend = c, f = Object.prototype.toString, i.toString = f, g = function g(a) {\n return \"function\" == typeof a;\n }, g(/x/) && (g = function g(a) {\n return \"function\" == typeof a && \"[object Function]\" === f.call(a);\n }), i.isFunction = g, h = Array.isArray || function (a) {\n return a && \"object\" == (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) ? \"[object Array]\" === f.call(a) : !1;\n }, i.isArray = h, i.escapeExpression = d, i.isEmpty = e, i;\n }(a),\n c = function () {\n \"use strict\";\n function a(a, b) {\n var d, e, f;for (b && b.firstLine && (d = b.firstLine, a += \" - \" + d + \":\" + b.firstColumn), e = Error.prototype.constructor.call(this, a), f = 0; f < c.length; f++) {\n this[c[f]] = e[c[f]];\n }d && (this.lineNumber = d, this.column = b.firstColumn);\n }var b,\n c = [\"description\", \"fileName\", \"lineNumber\", \"message\", \"name\", \"number\", \"stack\"];return a.prototype = Error(), b = a;\n }(),\n d = function (a, b) {\n \"use strict\";\n function c(a, b) {\n this.helpers = a || {}, this.partials = b || {}, d(this);\n }function d(a) {\n a.registerHelper(\"helperMissing\", function (a) {\n if (2 === arguments.length) return void 0;throw new p(\"Missing helper: '\" + a + \"'\");\n }), a.registerHelper(\"blockHelperMissing\", function (b, c) {\n var d = c.inverse || function () {},\n e = c.fn;return i(b) && (b = b.call(this)), b === !0 ? e(this) : b === !1 || null == b ? d(this) : h(b) ? b.length > 0 ? a.helpers.each(b, c) : d(this) : e(b);\n }), a.registerHelper(\"each\", function (a, b) {\n var c,\n d,\n e,\n f = b.fn,\n g = b.inverse,\n j = 0,\n k = \"\";if (i(a) && (a = a.call(this)), b.data && (c = m(b.data)), a && \"object\" == (typeof a === \"undefined\" ? \"undefined\" : _typeof(a))) if (h(a)) for (d = a.length; d > j; j++) {\n c && (c.index = j, c.first = 0 === j, c.last = j === a.length - 1), k += f(a[j], { data: c });\n } else for (e in a) {\n a.hasOwnProperty(e) && (c && (c.key = e, c.index = j, c.first = 0 === j), k += f(a[e], { data: c }), j++);\n }return 0 === j && (k = g(this)), k;\n }), a.registerHelper(\"if\", function (a, b) {\n return i(a) && (a = a.call(this)), !b.hash.includeZero && !a || o.isEmpty(a) ? b.inverse(this) : b.fn(this);\n }), a.registerHelper(\"unless\", function (b, c) {\n return a.helpers[\"if\"].call(this, b, { fn: c.inverse, inverse: c.fn, hash: c.hash });\n }), a.registerHelper(\"with\", function (a, b) {\n return i(a) && (a = a.call(this)), o.isEmpty(a) ? void 0 : b.fn(a);\n }), a.registerHelper(\"log\", function (b, c) {\n var d = c.data && null != c.data.level ? parseInt(c.data.level, 10) : 1;a.log(d, b);\n });\n }function e(a, b) {\n l.log(a, b);\n }var f,\n g,\n h,\n i,\n j,\n k,\n l,\n m,\n n = {},\n o = a,\n p = b,\n q = \"1.3.0\";return n.VERSION = q, f = 4, n.COMPILER_REVISION = f, g = { 1: \"<= 1.0.rc.2\", 2: \"== 1.0.0-rc.3\", 3: \"== 1.0.0-rc.4\", 4: \">= 1.0.0\" }, n.REVISION_CHANGES = g, h = o.isArray, i = o.isFunction, j = o.toString, k = \"[object Object]\", n.HandlebarsEnvironment = c, c.prototype = { constructor: c, logger: l, log: e, registerHelper: function registerHelper(a, b, c) {\n if (j.call(a) === k) {\n if (c || b) throw new p(\"Arg not supported with multiple helpers\");o.extend(this.helpers, a);\n } else c && (b.not = c), this.helpers[a] = b;\n }, registerPartial: function registerPartial(a, b) {\n j.call(a) === k ? o.extend(this.partials, a) : this.partials[a] = b;\n } }, l = { methodMap: { 0: \"debug\", 1: \"info\", 2: \"warn\", 3: \"error\" }, DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3, log: function log(a, b) {\n if (l.level <= a) {\n var c = l.methodMap[a];\"undefined\" != typeof console && console[c] && console[c].call(console, b);\n }\n } }, n.logger = l, n.log = e, m = function m(a) {\n var b = {};return o.extend(b, a), b;\n }, n.createFrame = m, n;\n }(b, c),\n e = function (a, b, c) {\n \"use strict\";\n function d(a) {\n var b,\n c,\n d = a && a[0] || 1,\n e = m;if (d !== e) {\n if (e > d) throw b = n[e], c = n[d], new l(\"Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (\" + b + \") or downgrade your runtime to an older version (\" + c + \").\");throw new l(\"Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (\" + a[1] + \").\");\n }\n }function e(a, b) {\n if (!b) throw new l(\"No environment passed to template\");var c = function (_c2) {\n function c(_x4, _x5, _x6, _x7, _x8, _x9) {\n return _c2.apply(this, arguments);\n }\n\n c.toString = function () {\n return _c2.toString();\n };\n\n return c;\n }(function (a, c, d, e, f, g) {\n var h,\n i = b.VM.invokePartial.apply(this, arguments);if (null != i) return i;if (b.compile) return h = { helpers: e, partials: f, data: g }, f[c] = b.compile(a, { data: void 0 !== g }, b), f[c](d, h);throw new l(\"The partial \" + c + \" could not be compiled when running in runtime-only mode\");\n }),\n d = { escapeExpression: k.escapeExpression, invokePartial: c, programs: [], program: function program(a, b, c) {\n var d = this.programs[a];return c ? d = g(a, b, c) : d || (d = this.programs[a] = g(a, b)), d;\n }, merge: function merge(a, b) {\n var c = a || b;return a && b && a !== b && (c = {}, k.extend(c, b), k.extend(c, a)), c;\n }, programWithDepth: b.VM.programWithDepth, noop: b.VM.noop, compilerInfo: null };return function (c, e) {\n var f, g, h, i;return e = e || {}, h = e.partial ? e : b, e.partial || (f = e.helpers, g = e.partials), i = a.call(d, h, c, f, g, e.data), e.partial || b.VM.checkRevision(d.compilerInfo), i;\n };\n }function f(a, b, c) {\n var d = Array.prototype.slice.call(arguments, 3),\n e = function e(a, _e) {\n return _e = _e || {}, b.apply(this, [a, _e.data || c].concat(d));\n };return e.program = a, e.depth = d.length, e;\n }function g(a, b, c) {\n var d = function d(a, _d2) {\n return _d2 = _d2 || {}, b(a, _d2.data || c);\n };return d.program = a, d.depth = 0, d;\n }function h(a, b, c, d, e, f) {\n var g = { partial: !0, helpers: d, partials: e, data: f };if (void 0 === a) throw new l(\"The partial \" + b + \" could not be found\");return a instanceof Function ? a(c, g) : void 0;\n }function i() {\n return \"\";\n }var j = {},\n k = a,\n l = b,\n m = c.COMPILER_REVISION,\n n = c.REVISION_CHANGES;return j.checkRevision = d, j.template = e, j.programWithDepth = f, j.program = g, j.invokePartial = h, j.noop = i, j;\n }(b, c, d),\n f = function (a, b, c, d, e) {\n \"use strict\";\n var f,\n g = a,\n h = b,\n i = c,\n j = d,\n k = e,\n l = function l() {\n var a = new g.HandlebarsEnvironment();return j.extend(a, g), a.SafeString = h, a.Exception = i, a.Utils = j, a.VM = k, a.template = function (b) {\n return k.template(b, a);\n }, a;\n },\n m = l();return m.create = l, f = m;\n }(d, a, c, b, e);return f;\n}(), this.wysihtml5 = this.wysihtml5 || {}, this.wysihtml5.tpl = this.wysihtml5.tpl || {}, this.wysihtml5.tpl.blockquote = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + l((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === k ? b.apply(a) : b)), c;\n }function g() {\n return ' \\n <span class=\"fa fa-quote-left\"></span>\\n ';\n }function h() {\n return '\\n <span class=\"glyphicon glyphicon-quote\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var i,\n j = \"\",\n k = \"function\",\n l = this.escapeExpression,\n m = this;return j += '<li>\\n <a class=\"btn ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.size), { hash: {}, inverse: m.noop, fn: m.program(1, f, e), data: e }), (i || 0 === i) && (j += i), j += ' btn-default\" data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"blockquote\" data-wysihtml5-display-format-name=\"false\" tabindex=\"-1\">\\n ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.fa), { hash: {}, inverse: m.program(5, h, e), fn: m.program(3, g, e), data: e }), (i || 0 === i) && (j += i), j += \"\\n </a>\\n</li>\\n\", j;\n}), this.wysihtml5.tpl.color = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + j((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === i ? b.apply(a) : b)), c;\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var g,\n h = \"\",\n i = \"function\",\n j = this.escapeExpression,\n k = this;return h += '<li class=\"dropdown\">\\n <a class=\"btn btn-default dropdown-toggle ', g = c[\"if\"].call(b, (g = b && b.options, g = null == g || g === !1 ? g : g.toolbar, null == g || g === !1 ? g : g.size), { hash: {}, inverse: k.noop, fn: k.program(1, f, e), data: e }), (g || 0 === g) && (h += g), h += '\" data-toggle=\"dropdown\" tabindex=\"-1\">\\n <span class=\"current-color\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.black, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</span>\\n <b class=\"caret\"></b>\\n </a>\\n <ul class=\"dropdown-menu\">\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"black\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"black\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.black, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"silver\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"silver\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.silver, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"gray\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"gray\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.gray, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"maroon\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"maroon\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.maroon, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"red\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"red\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.red, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"purple\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"purple\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.purple, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"green\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"green\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.green, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"olive\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"olive\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.olive, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"navy\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"navy\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.navy, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"blue\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"blue\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.blue, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + '</a></li>\\n <li><div class=\"wysihtml5-colors\" data-wysihtml5-command-value=\"orange\"></div><a class=\"wysihtml5-colors-title\" data-wysihtml5-command=\"foreColor\" data-wysihtml5-command-value=\"orange\">' + j((g = b && b.locale, g = null == g || g === !1 ? g : g.colours, g = null == g || g === !1 ? g : g.orange, (typeof g === \"undefined\" ? \"undefined\" : _typeof(g)) === i ? g.apply(b) : g)) + \"</a></li>\\n </ul>\\n</li>\\n\", h;\n}), this.wysihtml5.tpl.emphasis = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + k((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === j ? b.apply(a) : b)), c;\n }function g(a, b) {\n var d,\n e = \"\";return e += '\\n <a class=\"btn ', d = c[\"if\"].call(a, (d = a && a.options, d = null == d || d === !1 ? d : d.toolbar, null == d || d === !1 ? d : d.size), { hash: {}, inverse: l.noop, fn: l.program(1, f, b), data: b }), (d || 0 === d) && (e += d), e += ' btn-default\" data-wysihtml5-command=\"small\" title=\"CTRL+S\" tabindex=\"-1\">' + k((d = a && a.locale, d = null == d || d === !1 ? d : d.emphasis, d = null == d || d === !1 ? d : d.small, (typeof d === \"undefined\" ? \"undefined\" : _typeof(d)) === j ? d.apply(a) : d)) + \"</a>\\n \", e;\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var h,\n i = \"\",\n j = \"function\",\n k = this.escapeExpression,\n l = this;return i += '<li>\\n <div class=\"btn-group\">\\n <a class=\"btn ', h = c[\"if\"].call(b, (h = b && b.options, h = null == h || h === !1 ? h : h.toolbar, null == h || h === !1 ? h : h.size), { hash: {}, inverse: l.noop, fn: l.program(1, f, e), data: e }), (h || 0 === h) && (i += h), i += ' btn-default\" data-wysihtml5-command=\"bold\" title=\"CTRL+B\" tabindex=\"-1\">' + k((h = b && b.locale, h = null == h || h === !1 ? h : h.emphasis, h = null == h || h === !1 ? h : h.bold, (typeof h === \"undefined\" ? \"undefined\" : _typeof(h)) === j ? h.apply(b) : h)) + '</a>\\n <a class=\"btn ', h = c[\"if\"].call(b, (h = b && b.options, h = null == h || h === !1 ? h : h.toolbar, null == h || h === !1 ? h : h.size), { hash: {}, inverse: l.noop, fn: l.program(1, f, e), data: e }), (h || 0 === h) && (i += h), i += ' btn-default\" data-wysihtml5-command=\"italic\" title=\"CTRL+I\" tabindex=\"-1\">' + k((h = b && b.locale, h = null == h || h === !1 ? h : h.emphasis, h = null == h || h === !1 ? h : h.italic, (typeof h === \"undefined\" ? \"undefined\" : _typeof(h)) === j ? h.apply(b) : h)) + '</a>\\n <a class=\"btn ', h = c[\"if\"].call(b, (h = b && b.options, h = null == h || h === !1 ? h : h.toolbar, null == h || h === !1 ? h : h.size), { hash: {}, inverse: l.noop, fn: l.program(1, f, e), data: e }), (h || 0 === h) && (i += h), i += ' btn-default\" data-wysihtml5-command=\"underline\" title=\"CTRL+U\" tabindex=\"-1\">' + k((h = b && b.locale, h = null == h || h === !1 ? h : h.emphasis, h = null == h || h === !1 ? h : h.underline, (typeof h === \"undefined\" ? \"undefined\" : _typeof(h)) === j ? h.apply(b) : h)) + \"</a>\\n \", h = c[\"if\"].call(b, (h = b && b.options, h = null == h || h === !1 ? h : h.toolbar, h = null == h || h === !1 ? h : h.emphasis, null == h || h === !1 ? h : h.small), { hash: {}, inverse: l.noop, fn: l.program(3, g, e), data: e }), (h || 0 === h) && (i += h), i += \"\\n </div>\\n</li>\\n\", i;\n}), this.wysihtml5.tpl[\"font-styles\"] = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + l((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === k ? b.apply(a) : b)), c;\n }function g() {\n return '\\n <span class=\"fa fa-font\"></span>\\n ';\n }function h() {\n return '\\n <span class=\"glyphicon glyphicon-font\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var i,\n j = \"\",\n k = \"function\",\n l = this.escapeExpression,\n m = this;return j += '<li class=\"dropdown\">\\n <a class=\"btn btn-default dropdown-toggle ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.size), { hash: {}, inverse: m.noop, fn: m.program(1, f, e), data: e }), (i || 0 === i) && (j += i), j += '\" data-toggle=\"dropdown\">\\n ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.fa), { hash: {}, inverse: m.program(5, h, e), fn: m.program(3, g, e), data: e }), (i || 0 === i) && (j += i), j += '\\n <span class=\"current-font\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.normal, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</span>\\n <b class=\"caret\"></b>\\n </a>\\n <ul class=\"dropdown-menu\">\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"p\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.normal, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h1\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h1, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h2\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h2, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h3\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h3, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h4\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h4, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h5\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h5, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '</a></li>\\n <li><a data-wysihtml5-command=\"formatBlock\" data-wysihtml5-command-value=\"h6\" tabindex=\"-1\">' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.font_styles, i = null == i || i === !1 ? i : i.h6, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + \"</a></li>\\n </ul>\\n</li>\\n\", j;\n}), this.wysihtml5.tpl.html = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + l((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === k ? b.apply(a) : b)), c;\n }function g() {\n return '\\n <span class=\"fa fa-pencil\"></span>\\n ';\n }function h() {\n return '\\n <span class=\"glyphicon glyphicon-pencil\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var i,\n j = \"\",\n k = \"function\",\n l = this.escapeExpression,\n m = this;return j += '<li>\\n <div class=\"btn-group\">\\n <a class=\"btn ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.size), { hash: {}, inverse: m.noop, fn: m.program(1, f, e), data: e }), (i || 0 === i) && (j += i), j += ' btn-default\" data-wysihtml5-action=\"change_view\" title=\"' + l((i = b && b.locale, i = null == i || i === !1 ? i : i.html, i = null == i || i === !1 ? i : i.edit, (typeof i === \"undefined\" ? \"undefined\" : _typeof(i)) === k ? i.apply(b) : i)) + '\" tabindex=\"-1\">\\n ', i = c[\"if\"].call(b, (i = b && b.options, i = null == i || i === !1 ? i : i.toolbar, null == i || i === !1 ? i : i.fa), { hash: {}, inverse: m.program(5, h, e), fn: m.program(3, g, e), data: e }), (i || 0 === i) && (j += i), j += \"\\n </a>\\n </div>\\n</li>\\n\", j;\n}), this.wysihtml5.tpl.image = Handlebars.template(function (a, b, c, d, e) {\n function f() {\n return \"modal-sm\";\n }function g(a) {\n var b,\n c = \"\";return c += \"btn-\" + m((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === l ? b.apply(a) : b)), c;\n }function h() {\n return '\\n <span class=\"fa fa-file-image-o\"></span>\\n ';\n }function i() {\n return '\\n <span class=\"glyphicon glyphicon-picture\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var j,\n k = \"\",\n l = \"function\",\n m = this.escapeExpression,\n n = this;return k += '<li>\\n <div class=\"bootstrap-wysihtml5-insert-image-modal modal fade\" data-wysihtml5-dialog=\"insertImage\">\\n <div class=\"modal-dialog ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.smallmodals), { hash: {}, inverse: n.noop, fn: n.program(1, f, e), data: e }), (j || 0 === j) && (k += j), k += '\">\\n <div class=\"modal-content\">\\n <div class=\"modal-header\">\\n <a class=\"close\" data-dismiss=\"modal\">×</a>\\n <h3>' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.image, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</h3>\\n </div>\\n <div class=\"modal-body\">\\n <div class=\"form-group\">\\n <input value=\"http://\" class=\"bootstrap-wysihtml5-insert-image-url form-control\" data-wysihtml5-dialog-field=\"src\">\\n </div> \\n </div>\\n <div class=\"modal-footer\">\\n <a class=\"btn btn-default\" data-dismiss=\"modal\" data-wysihtml5-dialog-action=\"cancel\" href=\"#\">' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.image, j = null == j || j === !1 ? j : j.cancel, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</a>\\n <a class=\"btn btn-primary\" data-dismiss=\"modal\" data-wysihtml5-dialog-action=\"save\" href=\"#\">' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.image, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</a>\\n </div>\\n </div>\\n </div>\\n </div>\\n <a class=\"btn ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.size), { hash: {}, inverse: n.noop, fn: n.program(3, g, e), data: e }), (j || 0 === j) && (k += j), k += ' btn-default\" data-wysihtml5-command=\"insertImage\" title=\"' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.image, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '\" tabindex=\"-1\">\\n ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.fa), { hash: {}, inverse: n.program(7, i, e), fn: n.program(5, h, e), data: e }), (j || 0 === j) && (k += j), k += \"\\n </a>\\n</li>\\n\", k;\n}), this.wysihtml5.tpl.link = Handlebars.template(function (a, b, c, d, e) {\n function f() {\n return \"modal-sm\";\n }function g(a) {\n var b,\n c = \"\";return c += \"btn-\" + m((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === l ? b.apply(a) : b)), c;\n }function h() {\n return '\\n <span class=\"fa fa-share-square-o\"></span>\\n ';\n }function i() {\n return '\\n <span class=\"glyphicon glyphicon-share\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var j,\n k = \"\",\n l = \"function\",\n m = this.escapeExpression,\n n = this;return k += '<li>\\n <div class=\"bootstrap-wysihtml5-insert-link-modal modal fade\" data-wysihtml5-dialog=\"createLink\">\\n <div class=\"modal-dialog ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.smallmodals), { hash: {}, inverse: n.noop, fn: n.program(1, f, e), data: e }), (j || 0 === j) && (k += j), k += '\">\\n <div class=\"modal-content\">\\n <div class=\"modal-header\">\\n <a class=\"close\" data-dismiss=\"modal\">×</a>\\n <h3>' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.link, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</h3>\\n </div>\\n <div class=\"modal-body\">\\n <div class=\"form-group\">\\n <input value=\"http://\" class=\"bootstrap-wysihtml5-insert-link-url form-control\" data-wysihtml5-dialog-field=\"href\">\\n </div> \\n <div class=\"checkbox\">\\n <label> \\n <input type=\"checkbox\" class=\"bootstrap-wysihtml5-insert-link-target\" checked>' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.link, j = null == j || j === !1 ? j : j.target, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '\\n </label>\\n </div>\\n </div>\\n <div class=\"modal-footer\">\\n <a class=\"btn btn-default\" data-dismiss=\"modal\" data-wysihtml5-dialog-action=\"cancel\" href=\"#\">' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.link, j = null == j || j === !1 ? j : j.cancel, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</a>\\n <a href=\"#\" class=\"btn btn-primary\" data-dismiss=\"modal\" data-wysihtml5-dialog-action=\"save\">' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.link, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '</a>\\n </div>\\n </div>\\n </div>\\n </div>\\n <a class=\"btn ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.size), { hash: {}, inverse: n.noop, fn: n.program(3, g, e), data: e }), (j || 0 === j) && (k += j), k += ' btn-default\" data-wysihtml5-command=\"createLink\" title=\"' + m((j = b && b.locale, j = null == j || j === !1 ? j : j.link, j = null == j || j === !1 ? j : j.insert, (typeof j === \"undefined\" ? \"undefined\" : _typeof(j)) === l ? j.apply(b) : j)) + '\" tabindex=\"-1\">\\n ', j = c[\"if\"].call(b, (j = b && b.options, j = null == j || j === !1 ? j : j.toolbar, null == j || j === !1 ? j : j.fa), { hash: {}, inverse: n.program(7, i, e), fn: n.program(5, h, e), data: e }), (j || 0 === j) && (k += j), k += \"\\n </a>\\n</li>\\n\", k;\n}), this.wysihtml5.tpl.lists = Handlebars.template(function (a, b, c, d, e) {\n function f(a) {\n var b,\n c = \"\";return c += \"btn-\" + r((b = a && a.options, b = null == b || b === !1 ? b : b.toolbar, b = null == b || b === !1 ? b : b.size, (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === q ? b.apply(a) : b)), c;\n }function g() {\n return '\\n <span class=\"fa fa-list-ul\"></span>\\n ';\n }function h() {\n return '\\n <span class=\"glyphicon glyphicon-list\"></span>\\n ';\n }function i() {\n return '\\n <span class=\"fa fa-list-ol\"></span>\\n ';\n }function j() {\n return '\\n <span class=\"glyphicon glyphicon-th-list\"></span>\\n ';\n }function k() {\n return '\\n <span class=\"fa fa-outdent\"></span>\\n ';\n }function l() {\n return '\\n <span class=\"glyphicon glyphicon-indent-right\"></span>\\n ';\n }function m() {\n return '\\n <span class=\"fa fa-indent\"></span>\\n ';\n }function n() {\n return '\\n <span class=\"glyphicon glyphicon-indent-left\"></span>\\n ';\n }this.compilerInfo = [4, \">= 1.0.0\"], c = this.merge(c, a.helpers), e = e || {};var o,\n p = \"\",\n q = \"function\",\n r = this.escapeExpression,\n s = this;return p += '<li>\\n <div class=\"btn-group\">\\n <a class=\"btn ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.size), { hash: {}, inverse: s.noop, fn: s.program(1, f, e), data: e }), (o || 0 === o) && (p += o), p += ' btn-default\" data-wysihtml5-command=\"insertUnorderedList\" title=\"' + r((o = b && b.locale, o = null == o || o === !1 ? o : o.lists, o = null == o || o === !1 ? o : o.unordered, (typeof o === \"undefined\" ? \"undefined\" : _typeof(o)) === q ? o.apply(b) : o)) + '\" tabindex=\"-1\">\\n ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.fa), { hash: {}, inverse: s.program(5, h, e), fn: s.program(3, g, e), data: e }), (o || 0 === o) && (p += o), p += '\\n </a>\\n <a class=\"btn ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.size), { hash: {}, inverse: s.noop, fn: s.program(1, f, e), data: e }), (o || 0 === o) && (p += o), p += ' btn-default\" data-wysihtml5-command=\"insertOrderedList\" title=\"' + r((o = b && b.locale, o = null == o || o === !1 ? o : o.lists, o = null == o || o === !1 ? o : o.ordered, (typeof o === \"undefined\" ? \"undefined\" : _typeof(o)) === q ? o.apply(b) : o)) + '\" tabindex=\"-1\">\\n ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.fa), { hash: {}, inverse: s.program(9, j, e), fn: s.program(7, i, e), data: e }), (o || 0 === o) && (p += o), p += '\\n </a>\\n <a class=\"btn ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.size), { hash: {}, inverse: s.noop, fn: s.program(1, f, e), data: e }), (o || 0 === o) && (p += o), p += ' btn-default\" data-wysihtml5-command=\"Outdent\" title=\"' + r((o = b && b.locale, o = null == o || o === !1 ? o : o.lists, o = null == o || o === !1 ? o : o.outdent, (typeof o === \"undefined\" ? \"undefined\" : _typeof(o)) === q ? o.apply(b) : o)) + '\" tabindex=\"-1\">\\n ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.fa), { hash: {}, inverse: s.program(13, l, e), fn: s.program(11, k, e), data: e }), (o || 0 === o) && (p += o), p += '\\n </a>\\n <a class=\"btn ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.size), { hash: {}, inverse: s.noop, fn: s.program(1, f, e), data: e }), (o || 0 === o) && (p += o), p += ' btn-default\" data-wysihtml5-command=\"Indent\" title=\"' + r((o = b && b.locale, o = null == o || o === !1 ? o : o.lists, o = null == o || o === !1 ? o : o.indent, (typeof o === \"undefined\" ? \"undefined\" : _typeof(o)) === q ? o.apply(b) : o)) + '\" tabindex=\"-1\">\\n ', o = c[\"if\"].call(b, (o = b && b.options, o = null == o || o === !1 ? o : o.toolbar, null == o || o === !1 ? o : o.fa), { hash: {}, inverse: s.program(17, n, e), fn: s.program(15, m, e), data: e }), (o || 0 === o) && (p += o), p += \"\\n </a>\\n </div>\\n</li>\\n\", p;\n}), function (a) {\n \"use strict\";\n true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), !(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"wysihtml5\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()), __webpack_require__(5), !(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"bootstrap.wysihtml5.templates\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()), !(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"bootstrap.wysihtml5.commands\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())], __WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_LOCAL_MODULE_0__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__)) : a(jQuery, wysihtml5);\n}(function (a, b) {\n \"use strict\";\n var c = function c(a, b) {\n var c,\n d,\n e,\n f = function f(a, c, d) {\n return b.tpl[a] ? b.tpl[a]({ locale: c, options: d }) : void 0;\n },\n g = function g(c, e) {\n var f, g;this.el = c, f = a.extend(!0, {}, d, e);for (g in f.customTemplates) {\n f.customTemplates.hasOwnProperty(g) && (b.tpl[g] = f.customTemplates[g]);\n }this.toolbar = this.createToolbar(c, f), this.editor = this.createEditor(f);\n };g.prototype = { constructor: g, createEditor: function createEditor(b) {\n b = b || {}, b = a.extend(!0, {}, b), b.toolbar = this.toolbar[0], this.initializeEditor(this.el[0], b);\n }, initializeEditor: function initializeEditor(a, c) {\n var d,\n e = new b.Editor(this.el[0], c);if (e.on(\"beforeload\", this.syncBootstrapDialogEvents), e.on(\"beforeload\", this.loadParserRules), e.composer.editableArea.contentDocument ? this.addMoreShortcuts(e, e.composer.editableArea.contentDocument.body || e.composer.editableArea.contentDocument, c.shortcuts) : this.addMoreShortcuts(e, e.composer.editableArea, c.shortcuts), c && c.events) for (d in c.events) {\n c.events.hasOwnProperty(d) && e.on(d, c.events[d]);\n }return e;\n }, loadParserRules: function loadParserRules() {\n \"string\" === a.type(this.config.parserRules) && a.ajax({ dataType: \"json\", url: this.config.parserRules, context: this, error: function error(a, b, c) {\n void 0;\n }, success: function success(a) {\n this.config.parserRules = a, void 0;\n } }), this.config.pasteParserRulesets && \"string\" === a.type(this.config.pasteParserRulesets) && a.ajax({ dataType: \"json\", url: this.config.pasteParserRulesets, context: this, error: function error(a, b, c) {\n void 0;\n }, success: function success(a) {\n this.config.pasteParserRulesets = a;\n } });\n }, syncBootstrapDialogEvents: function syncBootstrapDialogEvents() {\n var b = this;a.map(this.toolbar.commandMapping, function (a) {\n return [a];\n }).filter(function (a) {\n return a.dialog;\n }).map(function (a) {\n return a.dialog;\n }).forEach(function (c) {\n c.on(\"show\", function () {\n a(this.container).modal(\"show\");\n }), c.on(\"hide\", function () {\n a(this.container).modal(\"hide\"), setTimeout(b.composer.focus, 0);\n }), a(c.container).on(\"shown.bs.modal\", function () {\n a(this).find(\"input, select, textarea\").first().focus();\n });\n }), this.on(\"change_view\", function () {\n a(this.toolbar.container.children).find(\"a.btn\").not('[data-wysihtml5-action=\"change_view\"]').toggleClass(\"disabled\");\n });\n }, createToolbar: function createToolbar(b, c) {\n var g,\n h,\n i = this,\n j = a(\"<ul/>\", { \"class\": \"wysihtml5-toolbar\", style: \"display:none\" }),\n k = c.locale || d.locale || \"en\";e.hasOwnProperty(k) || (void 0, k = \"en\"), g = a.extend(!0, {}, e.en, e[k]);for (h in c.toolbar) {\n c.toolbar[h] && j.append(f(h, g, c));\n }return j.find('a[data-wysihtml5-command=\"formatBlock\"]').click(function (b) {\n var c = b.delegateTarget || b.target || b.srcElement,\n d = a(c),\n e = d.data(\"wysihtml5-display-format-name\"),\n f = d.data(\"wysihtml5-format-name\") || d.html();(void 0 === e || \"true\" === e) && i.toolbar.find(\".current-font\").text(f);\n }), j.find('a[data-wysihtml5-command=\"foreColor\"]').click(function (b) {\n var c = b.target || b.srcElement,\n d = a(c);i.toolbar.find(\".current-color\").text(d.html());\n }), this.el.before(j), j;\n }, addMoreShortcuts: function addMoreShortcuts(a, c, d) {\n b.dom.observe(c, \"keydown\", function (c) {\n var e,\n f = c.keyCode,\n g = d[f];(c.ctrlKey || c.metaKey || c.altKey) && g && b.commands[g] && (e = a.toolbar.commandMapping[g + \":null\"], e && e.dialog && !e.state ? e.dialog.show() : b.commands[g].exec(a.composer, g), c.preventDefault());\n });\n } }, c = { resetDefaults: function resetDefaults() {\n a.fn.wysihtml5.defaultOptions = a.extend(!0, {}, a.fn.wysihtml5.defaultOptionsCache);\n }, bypassDefaults: function bypassDefaults(b) {\n return this.each(function () {\n var c = a(this);c.data(\"wysihtml5\", new g(c, b));\n });\n }, shallowExtend: function shallowExtend(b) {\n var d = a.extend({}, a.fn.wysihtml5.defaultOptions, b || {}, a(this).data()),\n e = this;return c.bypassDefaults.apply(e, [d]);\n }, deepExtend: function deepExtend(b) {\n var d = a.extend(!0, {}, a.fn.wysihtml5.defaultOptions, b || {}),\n e = this;return c.bypassDefaults.apply(e, [d]);\n }, init: function init(a) {\n var b = this;return c.shallowExtend.apply(b, [a]);\n } }, a.fn.wysihtml5 = function (b) {\n return c[b] ? c[b].apply(this, Array.prototype.slice.call(arguments, 1)) : \"object\" != (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b ? (a.error(\"Method \" + b + \" does not exist on jQuery.wysihtml5\"), void 0) : c.init.apply(this, arguments);\n }, a.fn.wysihtml5.Constructor = g, d = a.fn.wysihtml5.defaultOptions = { toolbar: { \"font-styles\": !0, color: !1, emphasis: { small: !0 }, blockquote: !0, lists: !0, html: !1, link: !0, image: !0, smallmodals: !1 }, useLineBreaks: !1, parserRules: { classes: { \"wysiwyg-color-silver\": 1, \"wysiwyg-color-gray\": 1, \"wysiwyg-color-white\": 1, \"wysiwyg-color-maroon\": 1, \"wysiwyg-color-red\": 1, \"wysiwyg-color-purple\": 1, \"wysiwyg-color-fuchsia\": 1, \"wysiwyg-color-green\": 1, \"wysiwyg-color-lime\": 1, \"wysiwyg-color-olive\": 1, \"wysiwyg-color-yellow\": 1, \"wysiwyg-color-navy\": 1, \"wysiwyg-color-blue\": 1, \"wysiwyg-color-teal\": 1, \"wysiwyg-color-aqua\": 1, \"wysiwyg-color-orange\": 1 }, tags: { b: {}, i: {}, strong: {}, em: {}, p: {}, br: {}, ol: {}, ul: {}, li: {}, h1: {}, h2: {}, h3: {}, h4: {}, h5: {}, h6: {}, blockquote: {}, u: 1, img: { check_attributes: { width: \"numbers\", alt: \"alt\", src: \"url\", height: \"numbers\" } }, a: { check_attributes: { href: \"url\" }, set_attributes: { target: \"_blank\", rel: \"nofollow\" } }, span: 1, div: 1, small: 1, code: 1, pre: 1 } }, locale: \"en\", shortcuts: { 83: \"small\", 75: \"createLink\" } }, void 0 === a.fn.wysihtml5.defaultOptionsCache && (a.fn.wysihtml5.defaultOptionsCache = a.extend(!0, {}, a.fn.wysihtml5.defaultOptions)), e = a.fn.wysihtml5.locale = {};\n };c(a, b);\n}), function (a) {\n a.commands.small = { exec: function exec(b, c) {\n return a.commands.formatInline.exec(b, c, \"small\");\n }, state: function state(b, c) {\n return a.commands.formatInline.state(b, c, \"small\");\n } };\n}(wysihtml5), function (a) {\n true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __WEBPACK_LOCAL_MODULE_0__], __WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : a(jQuery);\n}(function (a) {\n a.fn.wysihtml5.locale.en = a.fn.wysihtml5.locale[\"en-US\"] = { font_styles: { normal: \"Normal text\", h1: \"Heading 1\", h2: \"Heading 2\", h3: \"Heading 3\", h4: \"Heading 4\", h5: \"Heading 5\", h6: \"Heading 6\" }, emphasis: { bold: \"Bold\", italic: \"Italic\", underline: \"Underline\", small: \"Small\" }, lists: { unordered: \"Unordered list\", ordered: \"Ordered list\", outdent: \"Outdent\", indent: \"Indent\" }, link: { insert: \"Insert link\", cancel: \"Cancel\", target: \"Open link in new window\" }, image: { insert: \"Insert image\", cancel: \"Cancel\" }, html: { edit: \"Edit HTML\" }, colours: { black: \"Black\", silver: \"Silver\", gray: \"Grey\", maroon: \"Maroon\", red: \"Red\", purple: \"Purple\", green: \"Green\", olive: \"Olive\", navy: \"Navy\", blue: \"Blue\", orange: \"Orange\" } };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2Jvb3RzdHJhcC13eXNpaHRtbDUvYm9vdHN0cmFwMy13eXNpaHRtbDUuYWxsLm1pbi5qcz80NzRhIl0sIm5hbWVzIjpbInd5c2lodG1sNSIsIkJhc2UiLCJIYW5kbGViYXJzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiZ2V0IiwiYSIsImNhbGwiLCJzZXQiLCJiIiwiQXJyYXkiLCJpc0FycmF5IiwidG9TdHJpbmciLCJ2ZXJzaW9uIiwiY29tbWFuZHMiLCJkb20iLCJxdWlya3MiLCJ0b29sYmFyIiwibGFuZyIsInNlbGVjdGlvbiIsInZpZXdzIiwiSU5WSVNJQkxFX1NQQUNFIiwiRU1QVFlfRlVOQ1RJT04iLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJCQUNLU1BBQ0VfS0VZIiwiRU5URVJfS0VZIiwiRVNDQVBFX0tFWSIsIlNQQUNFX0tFWSIsIkRFTEVURV9LRVkiLCJyYW5neSIsImMiLCJ4IiwidyIsInkiLCJkIiwibGVuZ3RoIiwiZSIsIkQiLCJDIiwiRiIsIkIiLCJmIiwiYm9keSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZyIsIndpbmRvdyIsImNvbnNvbGUiLCJsb2ciLCJoIiwiYWxlcnQiLCJpIiwiSCIsImluaXRpYWxpemVkIiwic3VwcG9ydGVkIiwiY29uZmlnIiwiYWxlcnRPbkZhaWwiLCJqIiwiYWxlcnRPbldhcm4iLCJrIiwibWVzc2FnZSIsImRlc2NyaXB0aW9uIiwibCIsIm0iLCJvIiwicCIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJBIiwieiIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJjcmVhdGVUZXh0UmFuZ2UiLCJmZWF0dXJlcyIsImltcGxlbWVudHNEb21SYW5nZSIsImltcGxlbWVudHNUZXh0UmFuZ2UiLCJHIiwibiIsImluaXQiLCJzIiwicSIsInQiLCJuYW1lIiwiZGVwZW5kZW5jaWVzIiwiaW5pdGlhbGl6ZXIiLCJyIiwidSIsInYiLCJFIiwidXRpbCIsImlzSG9zdE1ldGhvZCIsImlzSG9zdE9iamVjdCIsImlzSG9zdFByb3BlcnR5IiwiYXJlSG9zdE1ldGhvZHMiLCJhcmVIb3N0T2JqZWN0cyIsImFyZUhvc3RQcm9wZXJ0aWVzIiwiaXNUZXh0UmFuZ2UiLCJnZXRCb2R5IiwibW9kdWxlcyIsInByZWZlclRleHRSYW5nZSIsImF1dG9Jbml0aWFsaXplIiwicmFuZ3lBdXRvSW5pdGlhbGl6ZSIsImZhaWwiLCJ3YXJuIiwiaGFzT3duUHJvcGVydHkiLCJleHRlbmQiLCJjcmVhdGVFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJzbGljZSIsImNoaWxkTm9kZXMiLCJub2RlVHlwZSIsInRvQXJyYXkiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJhZGRMaXN0ZW5lciIsImFkZEluaXRMaXN0ZW5lciIsInB1c2giLCJhZGRTaGltTGlzdGVuZXIiLCJzaGltIiwiY3JlYXRlTWlzc2luZ05hdGl2ZUFwaSIsIkVycm9yIiwiZGVwcmVjYXRpb25Ob3RpY2UiLCJjcmVhdGVFcnJvciIsImNyZWF0ZU1vZHVsZSIsImFyZ3VtZW50cyIsImNyZWF0ZUNvcmVNb2R1bGUiLCJSYW5nZVByb3RvdHlwZSIsInJhbmdlUHJvdG90eXBlIiwic2VsZWN0aW9uUHJvdG90eXBlIiwibmFtZXNwYWNlVVJJIiwiSSIsInBhcmVudE5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImNsb25lTm9kZSIsImRlbGV0ZURhdGEiLCJub2RlIiwib2Zmc2V0Iiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiY29udGVudERvY3VtZW50IiwiY29udGVudFdpbmRvdyIsIkoiLCJ0YWdOYW1lIiwiZmlyc3RDaGlsZCIsImRhdGEiLCJpZCIsImlubmVySFRNTCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJyb290IiwiX25leHQiLCJjb2RlIiwiY29kZU5hbWUiLCJjcmVhdGVUZXh0Tm9kZSIsImNyYXNoeVRleHROb2RlcyIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJjdXJyZW50U3R5bGUiLCJfY3VycmVudCIsImhhc05leHQiLCJuZXh0IiwiZGV0YWNoIiwiZXF1YWxzIiwiaW5zcGVjdCIsIklOREVYX1NJWkVfRVJSIiwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIiwiV1JPTkdfRE9DVU1FTlRfRVJSIiwiTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIiwiTk9UX0ZPVU5EX0VSUiIsIk5PVF9TVVBQT1JURURfRVJSIiwiSU5WQUxJRF9TVEFURV9FUlIiLCJJTlZBTElEX05PREVfVFlQRV9FUlIiLCJhcnJheUNvbnRhaW5zIiwiaXNIdG1sTmFtZXNwYWNlIiwicGFyZW50RWxlbWVudCIsImdldE5vZGVJbmRleCIsImdldE5vZGVMZW5ndGgiLCJnZXRDb21tb25BbmNlc3RvciIsImlzQW5jZXN0b3JPZiIsImlzT3JJc0FuY2VzdG9yT2YiLCJnZXRDbG9zZXN0QW5jZXN0b3JJbiIsImlzQ2hhcmFjdGVyRGF0YU5vZGUiLCJpc1RleHRPckNvbW1lbnROb2RlIiwiaW5zZXJ0QWZ0ZXIiLCJzcGxpdERhdGFOb2RlIiwiZ2V0RG9jdW1lbnQiLCJnZXRXaW5kb3ciLCJnZXRJZnJhbWVXaW5kb3ciLCJnZXRJZnJhbWVEb2N1bWVudCIsImlzV2luZG93IiwiZ2V0Q29udGVudERvY3VtZW50IiwiZ2V0Um9vdENvbnRhaW5lciIsImNvbXBhcmVQb2ludHMiLCJpc0Jyb2tlbk5vZGUiLCJpbnNwZWN0Tm9kZSIsImdldENvbXB1dGVkU3R5bGVQcm9wZXJ0eSIsImZyYWdtZW50RnJvbU5vZGVDaGlsZHJlbiIsImNyZWF0ZUl0ZXJhdG9yIiwiRG9tUG9zaXRpb24iLCJET01FeGNlcHRpb24iLCJnYiIsInN0YXJ0Q29udGFpbmVyIiwiZW5kQ29udGFpbmVyIiwiaGIiLCJjYiIsImZiIiwiZWIiLCJhYiIsImpiIiwiZGIiLCJpYiIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0IiwicmFuZ2UiLCJpc1BhcnRpYWxseVNlbGVjdGVkU3VidHJlZSIsImdldFN1YnRyZWVJdGVyYXRvciIsInN0b3AiLCJyZW1vdmUiLCJSZWdFeHAiLCJqb2luIiwidGVzdCIsImdldE5hbWUiLCJjbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzIiwiY29sbGFwc2VkIiwic2MiLCJzbyIsImVjIiwiZW8iLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsImlzU2luZ2xlQ2hhcmFjdGVyRGF0YU5vZGUiLCJfZmlyc3QiLCJfbGFzdCIsImtiIiwibWIiLCJQIiwiTiIsIk8iLCJvYiIsInNldFN0YXJ0QW5kRW5kIiwiY2xvbmVDb250ZW50cyIsIlNUQVJUX1RPX1NUQVJUIiwiVSIsIlNUQVJUX1RPX0VORCIsIlYiLCJFTkRfVE9fRU5EIiwiVyIsIkVORF9UT19TVEFSVCIsIlgiLCJOT0RFX0JFRk9SRSIsIlkiLCJOT0RFX0FGVEVSIiwiWiIsIk5PREVfQkVGT1JFX0FORF9BRlRFUiIsIiQiLCJOT0RFX0lOU0lERSIsIl8iLCJyZXNldCIsIm5iIiwiYmIiLCJzZXRTdGFydCIsInNldEVuZCIsInNldEJvdW5kYXJ5Iiwic2V0U3RhcnRCZWZvcmUiLCJzZXRTdGFydEFmdGVyIiwic2V0RW5kQmVmb3JlIiwic2V0RW5kQWZ0ZXIiLCJjb2xsYXBzZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImxiIiwic2VsZWN0Tm9kZSIsImV4dHJhY3RDb250ZW50cyIsImRlbGV0ZUNvbnRlbnRzIiwiY2FuU3Vycm91bmRDb250ZW50cyIsInNwbGl0Qm91bmRhcmllcyIsInNwbGl0Qm91bmRhcmllc1ByZXNlcnZpbmdQb3NpdGlvbnMiLCJub3JtYWxpemVCb3VuZGFyaWVzIiwiYXBwZW5kRGF0YSIsInJlbW92ZUNoaWxkIiwiaW5zZXJ0RGF0YSIsImNvbGxhcHNlVG9Qb2ludCIsIksiLCJMIiwiTSIsIlEiLCJSIiwiUyIsIlQiLCJjbG9uZVJhbmdlIiwicGIiLCJodG1sUGFyc2luZ0NvbmZvcm1zIiwiY29tcGFyZUJvdW5kYXJ5UG9pbnRzIiwiaW5zZXJ0Tm9kZSIsInN1cnJvdW5kQ29udGVudHMiLCJoYXNDaGlsZE5vZGVzIiwibGFzdENoaWxkIiwiY29tcGFyZU5vZGUiLCJjb21wYXJlUG9pbnQiLCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiLCJ0b0h0bWwiLCJpbnRlcnNlY3RzTm9kZSIsImlzUG9pbnRJblJhbmdlIiwiaW50ZXJzZWN0c1JhbmdlIiwiaW50ZXJzZWN0c09yVG91Y2hlc1JhbmdlIiwiaW50ZXJzZWN0aW9uIiwidW5pb24iLCJjb250YWluc05vZGUiLCJjb250YWluc05vZGVDb250ZW50cyIsImNvbnRhaW5zUmFuZ2UiLCJjb250YWluc05vZGVUZXh0IiwiZ2V0Tm9kZXMiLCJwb3AiLCJjb2xsYXBzZUJlZm9yZSIsImNvbGxhcHNlQWZ0ZXIiLCJnZXRCb29rbWFyayIsInN0YXJ0IiwiZW5kIiwiY29udGFpbmVyTm9kZSIsIm1vdmVUb0Jvb2ttYXJrIiwicmFuZ2VzRXF1YWwiLCJpc1ZhbGlkIiwicmFuZ2VQcm9wZXJ0aWVzIiwiUmFuZ2VJdGVyYXRvciIsImNvcHlDb21wYXJpc29uQ29uc3RhbnRzIiwiY3JlYXRlUHJvdG90eXBlUmFuZ2UiLCJnZXRSYW5nZURvY3VtZW50IiwiRG9tUmFuZ2UiLCJuYXRpdmVSYW5nZSIsInJlZnJlc2giLCJXcmFwcGVkUmFuZ2UiLCJjcmVhdGVOYXRpdmVSYW5nZSIsImR1cGxpY2F0ZSIsImNvbXBhcmVFbmRQb2ludHMiLCJjYW5IYXZlSFRNTCIsImJvdW5kYXJ5UG9zaXRpb24iLCJub2RlSW5mbyIsIm5vZGVJbmRleCIsImNvbnRhaW5lckVsZW1lbnQiLCJtb3ZlVG9FbGVtZW50VGV4dCIsIk1hdGgiLCJmbG9vciIsInNldEVuZFBvaW50IiwidGV4dCIsInJlcGxhY2UiLCJtb3ZlU3RhcnQiLCJ0ZXh0UmFuZ2UiLCJyYW5nZVRvVGV4dFJhbmdlIiwidG9UZXh0UmFuZ2UiLCJXcmFwcGVkVGV4dFJhbmdlIiwiUmFuZ2UiLCJjcmVhdGVSYW5neVJhbmdlIiwiY3JlYXRlSWZyYW1lUmFuZ2UiLCJjcmVhdGVJZnJhbWVSYW5neVJhbmdlIiwid2luIiwiZ2V0U2VsZWN0aW9uIiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0IiwibmF0aXZlU2VsZWN0aW9uIiwicmFuZ2VDb3VudCIsImlzQ29sbGFwc2VkIiwiX3JhbmdlcyIsImRvY1NlbGVjdGlvbiIsInR5cGUiLCJpdGVtIiwiY3JlYXRlQ29udHJvbFJhbmdlIiwiYWRkIiwic2VsZWN0IiwiZGV0YWNoZWQiLCJzcGxpY2UiLCJnZXRSYW5nZUF0Iiwic2V0U2luZ2xlUmFuZ2UiLCJpc0JhY2t3YXJkIiwiY2hlY2tTZWxlY3Rpb25SYW5nZXMiLCJpbXBsZW1lbnRzV2luR2V0U2VsZWN0aW9uIiwiaW1wbGVtZW50c0RvY1NlbGVjdGlvbiIsImlzU2VsZWN0aW9uVmFsaWQiLCJnZXROYXRpdmVTZWxlY3Rpb24iLCJzZWxlY3Rpb25IYXNBbmNob3JBbmRGb2N1cyIsInNlbGVjdGlvbkhhc0V4dGVuZCIsInNlbGVjdGlvbkhhc1JhbmdlQ291bnQiLCJhZGRSYW5nZSIsImNvbnRlbnRFZGl0YWJsZSIsInJlbW92ZUFsbFJhbmdlcyIsIm5hdmlnYXRvciIsImFwcFZlcnNpb24iLCJtYXRjaCIsInBhcnNlSW50Iiwic2VsZWN0aW9uU3VwcG9ydHNNdWx0aXBsZVJhbmdlcyIsImNvbGxhcHNlZE5vbkVkaXRhYmxlU2VsZWN0aW9uc1N1cHBvcnRlZCIsImltcGxlbWVudHNDb250cm9sUmFuZ2UiLCJnZXRJZnJhbWVTZWxlY3Rpb24iLCJzZXRSYW5nZXMiLCJlbXB0eSIsImdldEFsbFJhbmdlcyIsInJlbW92ZVJhbmdlIiwiaXNCYWNrd2FyZHMiLCJjb2xsYXBzZVRvU3RhcnQiLCJjb2xsYXBzZVRvRW5kIiwic2VsZWN0QWxsQ2hpbGRyZW4iLCJkZWxldGVGcm9tRG9jdW1lbnQiLCJlYWNoUmFuZ2UiLCJjYWxsTWV0aG9kT25FYWNoUmFuZ2UiLCJhcHBseSIsImNoYW5nZUVhY2hSYW5nZSIsImJhY2t3YXJkIiwicmFuZ2VCb29rbWFya3MiLCJnZXROYXRpdmVUZXh0UmFuZ2UiLCJkZXRhY2hBbGwiLCJpc0RpcmVjdGlvbkJhY2t3YXJkIiwiU2VsZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJEYXRlIiwicmFuZG9tIiwic3R5bGUiLCJsaW5lSGVpZ2h0IiwiZGlzcGxheSIsImNsYXNzTmFtZSIsIm1hcmtlcklkIiwic3RhcnRNYXJrZXJJZCIsImVuZE1hcmtlcklkIiwic29ydCIsInJhbmdlSW5mb3MiLCJyZXN0b3JlZCIsImRvYyIsInNhdmVSYW5nZSIsInJlc3RvcmVSYW5nZSIsInNhdmVSYW5nZXMiLCJyZXN0b3JlUmFuZ2VzIiwic2F2ZVNlbGVjdGlvbiIsInJlc3RvcmVTZWxlY3Rpb24iLCJyZW1vdmVNYXJrZXJFbGVtZW50IiwicmVtb3ZlTWFya2VycyIsIl9wcm90b3R5cGluZyIsImJhc2UiLCJjb25zdHJ1Y3RvciIsIl9jb25zdHJ1Y3RpbmciLCJhbmNlc3RvciIsImZvckVhY2giLCJpbXBsZW1lbnQiLCJ2YWx1ZU9mIiwidG9Tb3VyY2UiLCJicm93c2VyIiwiYXBwTmFtZSIsImV4ZWMiLCJ1c2VyQWdlbnQiLCJwYXJzZUZsb2F0IiwiJDEiLCJpbmRleE9mIiwiVVNFUl9BR0VOVCIsImV4ZWNDb21tYW5kIiwicXVlcnlDb21tYW5kU3VwcG9ydGVkIiwicXVlcnlDb21tYW5kU3RhdGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImlzSW9zIiwiaXNBbmRyb2lkIiwiaXNUb3VjaERldmljZSIsInN1cHBvcnRzRXZlbnQiLCJzdXBwb3J0c1NhbmRib3hlZElmcmFtZXMiLCJ0aHJvd3NNaXhlZENvbnRlbnRXYXJuaW5nV2hlbklmcmFtZVNyY0lzRW1wdHkiLCJkaXNwbGF5c0NhcmV0SW5FbXB0eUNvbnRlbnRFZGl0YWJsZUNvcnJlY3RseSIsImhhc0N1cnJlbnRTdHlsZVByb3BlcnR5IiwiaGFzSGlzdG9yeUlzc3VlIiwicGxhdGZvcm0iLCJzdWJzdHIiLCJpbnNlcnRzTGluZUJyZWFrc09uUmV0dXJuIiwic3VwcG9ydHNQbGFjZWhvbGRlckF0dHJpYnV0ZU9uIiwic2V0QXR0cmlidXRlIiwic3VwcG9ydHNFdmVudHNJbklmcmFtZUNvcnJlY3RseSIsInN1cHBvcnRzSFRNTDVUYWdzIiwic3VwcG9ydHNDb21tYW5kIiwiZm9ybWF0QmxvY2siLCJpbnNlcnRVbm9yZGVyZWRMaXN0IiwiaW5zZXJ0T3JkZXJlZExpc3QiLCJpbnNlcnRIVE1MIiwicXVlcnlDb21tYW5kRW5hYmxlZCIsImRvZXNBdXRvTGlua2luZ0luQ29udGVudEVkaXRhYmxlIiwiY2FuRGlzYWJsZUF1dG9MaW5raW5nIiwiY2xlYXJzQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5Iiwic3VwcG9ydHNHZXRBdHRyaWJ1dGVDb3JyZWN0bHkiLCJnZXRBdHRyaWJ1dGUiLCJjYW5TZWxlY3RJbWFnZXNJbkNvbnRlbnRFZGl0YWJsZSIsImF1dG9TY3JvbGxzVG9DYXJldCIsImF1dG9DbG9zZXNVbmNsb3NlZFRhZ3MiLCJzdXBwb3J0c05hdGl2ZUdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwic3VwcG9ydHNTZWxlY3Rpb25Nb2RpZnkiLCJuZWVkc1NwYWNlQWZ0ZXJMaW5lQnJlYWsiLCJzdXBwb3J0c1NwZWVjaEFwaU9uIiwiY3Jhc2hlc1doZW5EZWZpbmVQcm9wZXJ0eSIsImRvZXNBc3luY0ZvY3VzIiwiaGFzUHJvYmxlbXNTZXR0aW5nQ2FyZXRBZnRlckltZyIsImhhc1VuZG9JbkNvbnRleHRNZW51IiwiaGFzSW5zZXJ0Tm9kZUlzc3VlIiwiaGFzSWZyYW1lRm9jdXNJc3N1ZSIsImNyZWF0ZXNOZXN0ZWRJbnZhbGlkTWFya3VwQWZ0ZXJQYXN0ZSIsInN1cHBvcnRzTXV0YXRpb25FdmVudHMiLCJzdXBwb3J0c01vZGVuUGFzdGUiLCJhcnJheSIsImNvbnRhaW5zIiwid2l0aG91dCIsIm1hcCIsInVuaXF1ZSIsIkRpc3BhdGNoZXIiLCJvbiIsImV2ZW50cyIsIm9mZiIsImZpcmUiLCJvYnNlcnZlIiwic3RvcE9ic2VydmluZyIsIm9iamVjdCIsIm1lcmdlIiwiY2xvbmUiLCJpc1BsYWluT2JqZWN0IiwiaXNGdW5jdGlvbiIsInN0cmluZyIsInRyaW0iLCJpbnRlcnBvbGF0ZSIsImJ5Iiwic3BsaXQiLCJlc2NhcGVIVE1MIiwiX3d5c2lodG1sNV90ZW1wRWxlbWVudCIsImF1dG9MaW5rIiwiVVJMX1JFR19FWFAiLCJhZGRDbGFzcyIsImNsYXNzTGlzdCIsImhhc0NsYXNzIiwicmVtb3ZlQ2xhc3MiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImNvbnZlcnRUb0xpc3QiLCJnZXRTdHlsZSIsImZyb20iLCJpbnNlcnQiLCJhZnRlciIsInJlcGxhY2VDaGlsZCIsImNvcHlBdHRyaWJ1dGVzIiwidG8iLCJhbmRUbyIsImNhbGxlZSIsIm9mZnNldFdpZHRoIiwiY29weVN0eWxlcyIsInNldFN0eWxlcyIsImRlbGVnYXRlIiwidGFyZ2V0IiwiZG9tTm9kZSIsInByZXYiLCJub2RlVHlwZXMiLCJpZ25vcmVCbGFua1RleHRzIiwiZ2V0QXNEb20iLCJfd3lzaWh0bWw1X3N1cHBvcnRzSFRNTDVUYWdzIiwiZ2V0UGFyZW50RWxlbWVudCIsImNzc1N0eWxlIiwic3R5bGVSZWdFeHAiLCJjbGFzc1JlZ0V4cCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwib3ZlcmZsb3ciLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0VGV4dE5vZGVzIiwiaW5uZXJUZXh0IiwidGV4dENvbnRlbnQiLCJjb25jYXQiLCJoYXNFbGVtZW50V2l0aFRhZ05hbWUiLCJfd3lzaWh0bWw1X2lkZW50aWZpZXIiLCJoYXNFbGVtZW50V2l0aENsYXNzTmFtZSIsImJlZm9yZSIsImludG8iLCJpbnNlcnRDU1MiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImxpbmVCcmVha3MiLCJzcmNFbGVtZW50IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInBhcnNlIiwicnVsZXMiLCJjb250ZXh0IiwiY2xlYXJJbnRlcm5hbHMiLCJzZWxlY3RvcnMiLCJjbGVhblVwIiwidW5lZGl0YWJsZUNsYXNzIiwidW5qb2luTmJzcHMiLCJub2RlVmFsdWUiLCJnZXRDb3JyZWN0SW5uZXJIVE1MIiwibm9ybWFsaXplIiwiYXR0cmlidXRlcyIsInRhZ3MiLCJzY29wZU5hbWUiLCJfd3lzaWh0bWw1Iiwib3V0ZXJIVE1MIiwidW53cmFwIiwicmVuYW1lX3RhZyIsIm9uZV9vZl90eXBlIiwicmVtb3ZlX2FjdGlvbiIsInJlbW92ZV9hY3Rpb25fcmVuYW1lX3RvIiwidHlwZV9kZWZpbml0aW9ucyIsIm1ldGhvZHMiLCJjbGFzc2VzIiwic3R5bGVzIiwiYXR0cnMiLCJzZWFyY2giLCJrZWVwX3N0eWxlcyIsInN0eWxlRmxvYXQiLCJjc3NGbG9hdCIsImdldEF0dHJpYnV0ZXMiLCJzZXRfY2xhc3MiLCJhZGRfY2xhc3MiLCJhZGRfc3R5bGUiLCJzZXRfYXR0cmlidXRlcyIsImNoZWNrX2F0dHJpYnV0ZXMiLCJuZXdTdHlsZSIsImNsYXNzZXNfYmxhY2tsaXN0IiwiX3Jhbmd5U2VsZWN0aW9uQm91bmRhcnkiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCIsImNvbW1lbnRzIiwiY3JlYXRlQ29tbWVudCIsInVybCIsImhyZWYiLCJhbHQiLCJudW1iZXJzIiwiYW55IiwiYWxpZ25fdGV4dCIsImxlZnQiLCJyaWdodCIsImNlbnRlciIsImFsaWduX2ltZyIsImp1c3RpZnkiLCJjbGVhcl9iciIsImJvdGgiLCJhbGwiLCJzaXplX2ZvbnQiLCJoYXNfdmlzaWJsZV9jb250ZXQiLCJvZmZzZXRIZWlnaHQiLCJyZW1vdmVFbXB0eVRleHROb2RlcyIsInJlbmFtZUVsZW1lbnQiLCJyZXBsYWNlV2l0aENoaWxkTm9kZXMiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc29sdmVMaXN0IiwiU2FuZGJveCIsImNhbGxiYWNrIiwiZWRpdGFibGVBcmVhIiwiX2NyZWF0ZUlmcmFtZSIsImluc2VydEludG8iLCJnZXRJZnJhbWUiLCJfcmVhZHlFcnJvciIsImRlc3Ryb3kiLCJzZXRBdHRyaWJ1dGVzIiwic2VjdXJpdHkiLCJhbGxvd3RyYW5zcGFyZW5jeSIsImZyYW1lYm9yZGVyIiwibWFyZ2lud2lkdGgiLCJtYXJnaW5oZWlnaHQiLCJvbmxvYWQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJfb25Mb2FkSWZyYW1lIiwicmVhZHlTdGF0ZSIsImNoYXJhY3RlclNldCIsImNoYXJzZXQiLCJfZ2V0SHRtbCIsInN0eWxlc2hlZXRzIiwib3BlbiIsIndyaXRlIiwiY2xvc2UiLCJvbmVycm9yIiwiX3Vuc2V0IiwibG9hZGVkIiwic2V0VGltZW91dCIsIl9fZGVmaW5lR2V0dGVyX18iLCJfX2RlZmluZVNldHRlcl9fIiwiQ29udGVudEVkaXRhYmxlQXJlYSIsImdldENvbnRlbnRFZGl0YWJsZSIsImVsZW1lbnQiLCJfYmluZEVsZW1lbnQiLCJfY3JlYXRlRWxlbWVudCIsIl9sb2FkRWxlbWVudCIsInNpbXVsYXRlUGxhY2Vob2xkZXIiLCJoYXNQbGFjZWhvbGRlclNldCIsImNsZWFyIiwiZm9jdXMiLCJwbGFjZWhvbGRlclNldCIsImlzRW1wdHkiLCJzZXRWYWx1ZSIsInNldFRleHRDb250ZW50IiwiZ2V0VGV4dENvbnRlbnQiLCJpc0xvYWRlZEltYWdlIiwic3BlY2lmaWVkIiwidmFsdWUiLCJjb21wbGV0ZSIsIm1vek1hdGNoZXNTZWxlY3RvciIsInVuc2hpZnQiLCJlbCIsImlzQ29sc3BhbiIsImlzUm93c3BhbiIsImZpcnN0Q29sIiwibGFzdENvbCIsImZpcnN0Um93IiwibGFzdFJvdyIsImlzUmVhbCIsInNwYW5Db2xsZWN0aW9uIiwibW9kaWZpZWQiLCJjZWxsIiwidGFibGUiLCJhZGRTcGFubmVkQ2VsbFRvTWFwIiwic2V0Q2VsbEFzTW9kaWZpZWQiLCJzZXRUYWJsZU1hcCIsImdldFRhYmxlUm93cyIsImdldFJvd0NlbGxzIiwiZ2V0TWFwSW5kZXgiLCJyb3ciLCJjb2wiLCJnZXRFbGVtZW50QXRJbmRleCIsImdldE1hcEVsc1RvIiwiaWR4X3N0YXJ0IiwiaWR4X2VuZCIsIm9yZGVyU2VsZWN0aW9uRW5kcyIsImNyZWF0ZUNlbGxzIiwiY29ycmVjdENvbEluZGV4Rm9yVW5yZWFscyIsImdldExhc3ROZXdDZWxsT25Sb3ciLCJyZW1vdmVFbXB0eVRhYmxlIiwic3BsaXRSb3dUb0NlbGxzIiwicmVtb3ZlQXR0cmlidXRlIiwiZ2V0UmVhbFJvd0VsIiwiaWR4IiwiaW5qZWN0Um93QXQiLCJjYW5NZXJnZSIsImRlY3JlYXNlQ2VsbFNwYW4iLCJyZW1vdmVTdXJwbHVzTGluZXMiLCJmaWxsTWlzc2luZ0NlbGxzIiwicGFyZW50IiwicmVjdGlmeSIsInVubWVyZ2UiLCJjb2xsYXBzZUNlbGxUb05leHRSb3ciLCJyZW1vdmVSb3dDZWxsIiwiZ2V0Um93RWxlbWVudHNCeUNlbGwiLCJnZXRDb2x1bW5FbGVtZW50c0J5Q2VsbCIsInJlbW92ZVJvdyIsInJlbW92ZUNvbENlbGwiLCJyZW1vdmVDb2x1bW4iLCJhZGRSb3ciLCJhZGRSb3dDZWxsIiwiY29sc3BhbiIsImF0dHIiLCJhZGRDb2x1bW4iLCJhZGRDb2xDZWxsIiwiaGFuZGxlQ2VsbEFkZFdpdGhSb3dzcGFuIiwiZ2V0Q2VsbHNCZXR3ZWVuIiwiYWRkQ2VsbHMiLCJyZW1vdmVDZWxscyIsIm1lcmdlQ2VsbHNCZXR3ZWVuIiwidW5tZXJnZUNlbGwiLCJmaW5kQ2VsbCIsImZpbmRSb3dCeUNlbGwiLCJmaW5kQ29sdW1uQnlDZWxsIiwicXVlcnkiLCJnZXRQYXN0ZWRIdG1sIiwiY2xpcGJvYXJkRGF0YSIsInR5cGVzIiwiZ2V0RGF0YSIsImdldFBhc3RlZEh0bWxXaXRoRGl2Iiwic2V0Qm9va21hcmsiLCJjbGVhblBhc3RlZEhUTUwiLCJjb25kaXRpb24iLCJjb2xvciIsInJlZmVyZW5jZU5vZGUiLCJmb250U2l6ZSIsImVuc3VyZVByb3BlckNsZWFyaW5nIiwicmVkcmF3IiwidGFibGVDZWxsc1NlbGVjdGlvbiIsImNlbGxzIiwiY29tcG9zZXIiLCJkZXNlbGVjdCIsInNlbGVjdGVkQ2VsbHMiLCJzdHlsZVBhcnNlciIsInBhcnNlQ29sb3IiLCJzaGlmdCIsInVucGFyc2VDb2xvciIsInBhcnNlRm9udFNpemUiLCJvZmZzZXRUb3AiLCJvZmZzZXRQYXJlbnQiLCJlZGl0b3IiLCJjb250YWluIiwidW5zZWxlY3RhYmxlQ2xhc3MiLCJnZXRSYW5nZSIsInNldFNlbGVjdGlvbiIsInNldEJlZm9yZSIsInNldEFmdGVyIiwiZ2V0U2VsZWN0ZWROb2RlIiwiZml4U2VsQm9yZGVycyIsImdldFNlbGVjdGVkT3duTm9kZXMiLCJnZXRPd25SYW5nZXMiLCJmaW5kTm9kZXNJblNlbGVjdGlvbiIsImNvbnRhaW5zVW5lZGl0YWJsZSIsImdldE93blVuZWRpdGFibGVzIiwiZ2V0UHJldmlvdXNOb2RlIiwiZ2V0U2VsZWN0aW9uUGFyZW50c0J5VGFnIiwiZ2V0UmFuZ2VUb05vZGVFbmQiLCJjYXJldElzTGFzdEluU2VsZWN0aW9uIiwiY2FyZXRJc0ZpcnN0SW5TZWxlY3Rpb24iLCJjYXJldElzSW5UaGVCZWdpbm5pZyIsImNhcmV0SXNCZWZvcmVVbmVkaXRhYmxlIiwiZXhlY3V0ZUFuZFJlc3RvcmVSYW5neSIsImV4ZWN1dGVBbmRSZXN0b3JlIiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsInN1cnJvdW5kIiwiZGVibG9ja0FuZFN1cnJvdW5kIiwic2Nyb2xsSW50b1ZpZXciLCJzY3JvbGxIZWlnaHQiLCJfd3lzaWh0bWw1U2Nyb2xsSW50b1ZpZXdFbGVtZW50Iiwic2VsZWN0TGluZSIsIl9zZWxlY3RMaW5lX1czQyIsIl9zZWxlY3RMaW5lX01TSUUiLCJtb2RpZnkiLCJib3VuZGluZ1RvcCIsInNjcm9sbFdpZHRoIiwibW92ZVRvUG9pbnQiLCJnZXRUZXh0IiwiZml4UmFuZ2VPdmVyZmxvdyIsIl9kZXRlY3RJbmxpbmVSYW5nZVByb2JsZW1zIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIl9lbmRPZmZzZXRGb3JOb2RlIiwiZ2V0SHRtbCIsImlzRW5kVG9FbmRJbk5vZGUiLCJnZXROYW1lZEl0ZW0iLCJpc0VsZW1lbnRNZXJnZSIsImZpcnN0VGV4dE5vZGUiLCJ0ZXh0Tm9kZXMiLCJ0YWdOYW1lcyIsImNzc0NsYXNzIiwic2ltaWxhckNsYXNzUmVnRXhwIiwic2ltaWxhclN0eWxlUmVnRXhwIiwiYXBwbHlUb0FueVRhZ05hbWUiLCJjb250YWluZXIiLCJkb01lcmdlIiwiZ2V0TGVuZ3RoIiwiZ2V0QW5jZXN0b3JXaXRoQ2xhc3MiLCJnZXRBbmNlc3RvcldpdGhTdHlsZSIsImdldE1hdGNoaW5nQW5jZXN0b3IiLCJwb3N0QXBwbHkiLCJnZXRBZGphY2VudE1lcmdlYWJsZVRleHROb2RlIiwiYXJlRWxlbWVudHNNZXJnZWFibGUiLCJjcmVhdGVDb250YWluZXIiLCJhcHBseVRvVGV4dE5vZGUiLCJpc1JlbW92YWJsZSIsInVuZG9Ub1RleHROb2RlIiwiYXBwbHlUb1JhbmdlIiwidW5kb1RvUmFuZ2UiLCJnZXRUZXh0U2VsZWN0ZWRCeVJhbmdlIiwiaXNBcHBsaWVkVG9SYW5nZSIsImVsZW1lbnRzIiwiY292ZXJhZ2UiLCJ0b2dnbGVSYW5nZSIsIkhUTUxBcHBsaWVyIiwiQ29tbWFuZHMiLCJzdXBwb3J0Iiwic3RhdGUiLCJzdGF0ZVZhbHVlIiwiYm9sZCIsImZvcm1hdElubGluZSIsImV4ZWNXaXRoVG9nZ2xlIiwiY3JlYXRlTGluayIsInJlbW92ZUxpbmsiLCJmb250U2l6ZVN0eWxlIiwic2l6ZSIsImZvcmVDb2xvciIsImZvcmVDb2xvclN0eWxlIiwidmFsIiwiYmdDb2xvclN0eWxlIiwidXNlTGluZUJyZWFrcyIsImZvcm1hdENvZGUiLCJzdHJvbmciLCJlbSIsImluc2VydEJsb2NrUXVvdGUiLCJpbnNlcnRJbWFnZSIsImluc2VydExpbmVCcmVhayIsImluc2VydExpc3QiLCJvdGhlciIsImdldFRpbWUiLCJ1bmVkaXRhYmxlQ29udGFpbmVyQ2xhc3NuYW1lIiwiaXRhbGljIiwianVzdGlmeUNlbnRlciIsImp1c3RpZnlMZWZ0IiwianVzdGlmeVJpZ2h0IiwianVzdGlmeUZ1bGwiLCJhbGlnblJpZ2h0U3R5bGUiLCJhbGlnbkxlZnRTdHlsZSIsImFsaWduQ2VudGVyU3R5bGUiLCJyZWRvIiwidW5kb01hbmFnZXIiLCJ1bmRlcmxpbmUiLCJ1bmRvIiwiY3JlYXRlVGFibGUiLCJjb2xzIiwicm93cyIsInRhYmxlU3R5bGUiLCJtZXJnZVRhYmxlQ2VsbHMiLCJ0YWJsZVNlbGVjdGlvbiIsImFkZFRhYmxlQ2VsbHMiLCJkZWxldGVUYWJsZUNlbGxzIiwiaW5kZW50TGlzdCIsInRyeVRvUHVzaExpTGV2ZWwiLCJvdXRkZW50TGlzdCIsInRyeVRvUHVsbExpTGV2ZWwiLCJnZXRBZnRlckxpc3QiLCJVbmRvTWFuYWdlciIsInBvc2l0aW9uIiwiaGlzdG9yeVN0ciIsImhpc3RvcnlEb20iLCJ0cmFuc2FjdCIsIl9vYnNlcnZlIiwic2FuZGJveCIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwia2V5Q29kZSIsInNoaWZ0S2V5IiwiZ2V0VmFsdWUiLCJnZXRDaGlsZE5vZGVJbmRleCIsInVuZG9Qb3NzaWJsZSIsInJlZG9Qb3NzaWJsZSIsImhhc0F0dHJpYnV0ZSIsImdldENoaWxkTm9kZUJ5SW5kZXgiLCJWaWV3Iiwibm9UZXh0YXJlYSIsIl9vYnNlcnZlVmlld0NoYW5nZSIsImN1cnJlbnRWaWV3Iiwic2hvdyIsImhpZGUiLCJkaXNhYmxlIiwiZW5hYmxlIiwiQ29tcG9zZXIiLCJDQVJFVF9IQUNLIiwidGV4dGFyZWEiLCJjb250ZW50RWRpdGFibGVNb2RlIiwiX2luaXRDb250ZW50RWRpdGFibGVBcmVhIiwiX2luaXRTYW5kYm94IiwiX2Rpc3BsYXlTdHlsZSIsImRpc2FibGVkIiwiX2NyZWF0ZSIsIl9jcmVhdGVXeXNpd3lnRm9ybUZpZWxkIiwiZm9ybSIsImNvbXBvc2VyQ2xhc3NOYW1lIiwicGxhY2Vob2xkZXIiLCJfaW5pdEF1dG9MaW5raW5nIiwiX2luaXRPYmplY3RSZXNpemluZyIsIl9pbml0VW5kb01hbmFnZXIiLCJfaW5pdExpbmVCcmVha2luZyIsImluaXRTeW5jIiwic3luYyIsImlzR2Vja28iLCJzZXRBY3RpdmUiLCJ0b3AiLCJXZWJraXRVc2VyU2VsZWN0Iiwic2Nyb2xsVG8iLCJmb2N1c1N0eWxlc0hvc3QiLCJibHVyU3R5bGVzSG9zdCIsImRpc2FibGVkU3R5bGVzSG9zdCIsImJsdXIiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJoYW5kbGVUYWJsZXMiLCJ0YWJsZUNsaWNrSGFuZGxlIiwiY3JlYXRlIiwiY29weWVkRnJvbU1hcmtpbmciLCJzZXREYXRhIiwiaGFuZGxlVGFiS2V5IiwiSU1HIiwiU3luY2hyb25pemVyIiwiZnJvbUNvbXBvc2VyVG9UZXh0YXJlYSIsImZyb21UZXh0YXJlYVRvQ29tcG9zZXIiLCJUZXh0YXJlYSIsImZvY3VzaW4iLCJmb2N1c291dCIsInNob3dUb29sYmFyQWZ0ZXJJbml0IiwicGFyc2VyUnVsZXMiLCJiciIsInNwYW4iLCJkaXYiLCJwYXN0ZVBhcnNlclJ1bGVzZXRzIiwicGFyc2VyIiwiYm9keUNsYXNzTmFtZSIsInBsYWNlaG9sZGVyVGV4dCIsInN1cHBvcnRUb3VjaERldmljZXMiLCJFZGl0b3IiLCJlZGl0YWJsZUVsZW1lbnQiLCJfaXNDb21wYXRpYmxlIiwiX2luaXRQYXJzZXIiLCJoYW5kbGVCZWZvcmVMb2FkIiwic3luY2hyb25pemVyIiwiVG9vbGJhciIsImlzQ29tcGF0aWJsZSIsIl9jbGVhbkFuZFBhc3RlIiwiRGlhbG9nIiwibGluayIsIl9vYnNlcnZlZCIsIl9zZXJpYWxpemUiLCJlbGVtZW50VG9DaGFuZ2UiLCJpbnRlcnZhbCIsIl9pbnRlcnBvbGF0ZSIsImRlZmF1bHRWYWx1ZSIsIm1hcmdpbiIsIm9wYWNpdHkiLCJwYWRkaW5nIiwiekluZGV4IiwiY3Vyc29yIiwibWFyZ2luVG9wIiwib3V0bGluZSIsInNwZWVjaCIsIlNwZWVjaCIsIl9nZXRMaW5rcyIsImNsYXNzTmFtZUNvbW1hbmREaXNhYmxlZCIsImNsYXNzTmFtZUNvbW1hbmRzRGlzYWJsZWQiLCJjbGFzc05hbWVDb21tYW5kQWN0aXZlIiwiY2xhc3NOYW1lQWN0aW9uQWN0aXZlIiwiX2dldERpYWxvZyIsImdyb3VwIiwiZGlhbG9nIiwiY29tbWFuZCIsImRpYWxvZ0NvbnRhaW5lciIsImNvbW1hbmRMaW5rIiwiX2V4ZWNDb21tYW5kIiwiY29tbWFuZHNEaXNhYmxlZCIsImNvbW1hbmRNYXBwaW5nIiwiX3VwZGF0ZUxpbmtTdGF0ZXMiLCJleGVjQWN0aW9uIiwiY29tbWFuZExpbmtzIiwiYWN0aW9uTGlua3MiLCJ1bnNlbGVjdGFibGUiLCJib29rbWFyayIsImFjdGlvbk1hcHBpbmciLCJtdWx0aXNlbGVjdCIsIkRpYWxvZ19jcmVhdGVUYWJsZSIsIkRpYWxvZ19mb3JlQ29sb3JTdHlsZSIsIkRpYWxvZ19mb250U2l6ZVN0eWxlIiwiZXNjYXBlRXhwcmVzc2lvbiIsImZpcnN0TGluZSIsImZpcnN0Q29sdW1uIiwibGluZU51bWJlciIsImNvbHVtbiIsImhlbHBlcnMiLCJwYXJ0aWFscyIsInJlZ2lzdGVySGVscGVyIiwiaW52ZXJzZSIsImZuIiwiZWFjaCIsImluZGV4IiwiZmlyc3QiLCJsYXN0Iiwia2V5IiwiaGFzaCIsImluY2x1ZGVaZXJvIiwibGV2ZWwiLCJWRVJTSU9OIiwiQ09NUElMRVJfUkVWSVNJT04iLCJSRVZJU0lPTl9DSEFOR0VTIiwiSGFuZGxlYmFyc0Vudmlyb25tZW50IiwibG9nZ2VyIiwibm90IiwicmVnaXN0ZXJQYXJ0aWFsIiwibWV0aG9kTWFwIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiY3JlYXRlRnJhbWUiLCJWTSIsImludm9rZVBhcnRpYWwiLCJjb21waWxlIiwicHJvZ3JhbXMiLCJwcm9ncmFtIiwicHJvZ3JhbVdpdGhEZXB0aCIsIm5vb3AiLCJjb21waWxlckluZm8iLCJwYXJ0aWFsIiwiY2hlY2tSZXZpc2lvbiIsImRlcHRoIiwiRnVuY3Rpb24iLCJ0ZW1wbGF0ZSIsIlNhZmVTdHJpbmciLCJFeGNlcHRpb24iLCJVdGlscyIsInRwbCIsImJsb2NrcXVvdGUiLCJvcHRpb25zIiwiZmEiLCJsb2NhbGUiLCJjb2xvdXJzIiwiYmxhY2siLCJzaWx2ZXIiLCJncmF5IiwibWFyb29uIiwicmVkIiwicHVycGxlIiwiZ3JlZW4iLCJvbGl2ZSIsIm5hdnkiLCJibHVlIiwib3JhbmdlIiwiZW1waGFzaXMiLCJzbWFsbCIsImZvbnRfc3R5bGVzIiwibm9ybWFsIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaHRtbCIsImVkaXQiLCJpbWFnZSIsInNtYWxsbW9kYWxzIiwiY2FuY2VsIiwibGlzdHMiLCJ1bm9yZGVyZWQiLCJvcmRlcmVkIiwib3V0ZGVudCIsImluZGVudCIsImpRdWVyeSIsImN1c3RvbVRlbXBsYXRlcyIsImNyZWF0ZVRvb2xiYXIiLCJjcmVhdGVFZGl0b3IiLCJpbml0aWFsaXplRWRpdG9yIiwic3luY0Jvb3RzdHJhcERpYWxvZ0V2ZW50cyIsImxvYWRQYXJzZXJSdWxlcyIsImFkZE1vcmVTaG9ydGN1dHMiLCJzaG9ydGN1dHMiLCJhamF4IiwiZGF0YVR5cGUiLCJlcnJvciIsInN1Y2Nlc3MiLCJmaWx0ZXIiLCJtb2RhbCIsImZpbmQiLCJjaGlsZHJlbiIsInRvZ2dsZUNsYXNzIiwiZW4iLCJhcHBlbmQiLCJjbGljayIsImRlbGVnYXRlVGFyZ2V0IiwicmVzZXREZWZhdWx0cyIsImRlZmF1bHRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnNDYWNoZSIsImJ5cGFzc0RlZmF1bHRzIiwic2hhbGxvd0V4dGVuZCIsImRlZXBFeHRlbmQiLCJDb25zdHJ1Y3RvciIsIm9sIiwidWwiLCJsaSIsImltZyIsInJlbCIsInByZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLFNBQUosRUFBY0MsSUFBZCxFQUFtQkMsVUFBbkIsQ0FBOEJDLE9BQU9DLGNBQVAsSUFBdUJELE9BQU9FLHdCQUE5QixJQUF3REYs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dXJjZXNDb250ZW50IjpbIi8qISBib290c3RyYXAzLXd5c2lodG1sNS1ib3dlciAyMDE0LTA5LTI2ICovXG52YXIgd3lzaWh0bWw1LEJhc2UsSGFuZGxlYmFycztPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsXCJ0ZXh0Q29udGVudFwiKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsXCJ0ZXh0Q29udGVudFwiKS5nZXQmJiFmdW5jdGlvbigpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lclRleHRcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLFwidGV4dENvbnRlbnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihiKXtyZXR1cm4gYS5zZXQuY2FsbCh0aGlzLGIpfX0pfSgpLEFycmF5LmlzQXJyYXl8fChBcnJheS5pc0FycmF5PWZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0pLHd5c2lodG1sNT17dmVyc2lvbjpcIjAuNC4xNVwiLGNvbW1hbmRzOnt9LGRvbTp7fSxxdWlya3M6e30sdG9vbGJhcjp7fSxsYW5nOnt9LHNlbGVjdGlvbjp7fSx2aWV3czp7fSxJTlZJU0lCTEVfU1BBQ0U6XCLvu79cIixFTVBUWV9GVU5DVElPTjpmdW5jdGlvbigpe30sRUxFTUVOVF9OT0RFOjEsVEVYVF9OT0RFOjMsQkFDS1NQQUNFX0tFWTo4LEVOVEVSX0tFWToxMyxFU0NBUEVfS0VZOjI3LFNQQUNFX0tFWTozMixERUxFVEVfS0VZOjQ2fSxmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoYSk6Yi5yYW5neT1hKCl9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPXR5cGVvZiBhW2JdO3JldHVybiBjPT14fHwhKGMhPXd8fCFhW2JdKXx8XCJ1bmtub3duXCI9PWN9ZnVuY3Rpb24gYihhLGIpe3JldHVybiEodHlwZW9mIGFbYl0hPXd8fCFhW2JdKX1mdW5jdGlvbiBjKGEsYil7cmV0dXJuIHR5cGVvZiBhW2JdIT15fWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPWMubGVuZ3RoO2QtLTspaWYoIWEoYixjW2RdKSlyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmRChhLEMpJiZGKGEsQil9ZnVuY3Rpb24gZihhKXtyZXR1cm4gYihhLFwiYm9keVwiKT9hLmJvZHk6YS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF19ZnVuY3Rpb24gZyhjKXtiKHdpbmRvdyxcImNvbnNvbGVcIikmJmEod2luZG93LmNvbnNvbGUsXCJsb2dcIikmJndpbmRvdy5jb25zb2xlLmxvZyhjKX1mdW5jdGlvbiBoKGEsYil7Yj93aW5kb3cuYWxlcnQoYSk6ZyhhKX1mdW5jdGlvbiBpKGEpe0guaW5pdGlhbGl6ZWQ9ITAsSC5zdXBwb3J0ZWQ9ITEsaChcIlJhbmd5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwYWdlIGluIHlvdXIgYnJvd3Nlci4gUmVhc29uOiBcIithLEguY29uZmlnLmFsZXJ0T25GYWlsKX1mdW5jdGlvbiBqKGEpe2goXCJSYW5neSB3YXJuaW5nOiBcIithLEguY29uZmlnLmFsZXJ0T25XYXJuKX1mdW5jdGlvbiBrKGEpe3JldHVybiBhLm1lc3NhZ2V8fGEuZGVzY3JpcHRpb258fGErXCJcIn1mdW5jdGlvbiBsKCl7dmFyIGIsYyxkLGgsaixsLG0sbyxwO2lmKCFILmluaXRpYWxpemVkKXtpZihjPSExLGQ9ITEsYShkb2N1bWVudCxcImNyZWF0ZVJhbmdlXCIpJiYoYj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLEQoYixBKSYmRihiLHopJiYoYz0hMCkpLGg9Zihkb2N1bWVudCksIWh8fFwiYm9keVwiIT1oLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGkoXCJObyBib2R5IGVsZW1lbnQgZm91bmRcIiksdm9pZCAwO2lmKGgmJmEoaCxcImNyZWF0ZVRleHRSYW5nZVwiKSYmKGI9aC5jcmVhdGVUZXh0UmFuZ2UoKSxlKGIpJiYoZD0hMCkpLCFjJiYhZClyZXR1cm4gaShcIk5laXRoZXIgUmFuZ2Ugbm9yIFRleHRSYW5nZSBhcmUgYXZhaWxhYmxlXCIpLHZvaWQgMDtILmluaXRpYWxpemVkPSEwLEguZmVhdHVyZXM9e2ltcGxlbWVudHNEb21SYW5nZTpjLGltcGxlbWVudHNUZXh0UmFuZ2U6ZH07Zm9yKG0gaW4gRykoaj1HW21dKWluc3RhbmNlb2YgbiYmai5pbml0KGosSCk7Zm9yKG89MCxwPXMubGVuZ3RoO3A+bzsrK28pdHJ5e3Nbb10oSCl9Y2F0Y2gocSl7bD1cIlJhbmd5IGluaXQgbGlzdGVuZXIgdGhyZXcgYW4gZXhjZXB0aW9uLiBDb250aW51aW5nLiBEZXRhaWw6IFwiK2socSksZyhsKX19fWZ1bmN0aW9uIG0oYSl7YT1hfHx3aW5kb3csbCgpO2Zvcih2YXIgYj0wLGM9dC5sZW5ndGg7Yz5iOysrYil0W2JdKGEpfWZ1bmN0aW9uIG4oYSxiLGMpe3RoaXMubmFtZT1hLHRoaXMuZGVwZW5kZW5jaWVzPWIsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnN1cHBvcnRlZD0hMSx0aGlzLmluaXRpYWxpemVyPWN9ZnVuY3Rpb24gbyhhLGIsYyxkKXt2YXIgZT1uZXcgbihiLGMsZnVuY3Rpb24oYSl7aWYoIWEuaW5pdGlhbGl6ZWQpe2EuaW5pdGlhbGl6ZWQ9ITA7dHJ5e2QoSCxhKSxhLnN1cHBvcnRlZD0hMH1jYXRjaChjKXt2YXIgZT1cIk1vZHVsZSAnXCIrYitcIicgZmFpbGVkIHRvIGxvYWQ6IFwiK2soYyk7ZyhlKX19fSk7R1tiXT1lfWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gcSgpe312YXIgcixzLHQsdSx2LHc9XCJvYmplY3RcIix4PVwiZnVuY3Rpb25cIix5PVwidW5kZWZpbmVkXCIsej1bXCJzdGFydENvbnRhaW5lclwiLFwic3RhcnRPZmZzZXRcIixcImVuZENvbnRhaW5lclwiLFwiZW5kT2Zmc2V0XCIsXCJjb2xsYXBzZWRcIixcImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXCJdLEE9W1wic2V0U3RhcnRcIixcInNldFN0YXJ0QmVmb3JlXCIsXCJzZXRTdGFydEFmdGVyXCIsXCJzZXRFbmRcIixcInNldEVuZEJlZm9yZVwiLFwic2V0RW5kQWZ0ZXJcIixcImNvbGxhcHNlXCIsXCJzZWxlY3ROb2RlXCIsXCJzZWxlY3ROb2RlQ29udGVudHNcIixcImNvbXBhcmVCb3VuZGFyeVBvaW50c1wiLFwiZGVsZXRlQ29udGVudHNcIixcImV4dHJhY3RDb250ZW50c1wiLFwiY2xvbmVDb250ZW50c1wiLFwiaW5zZXJ0Tm9kZVwiLFwic3Vycm91bmRDb250ZW50c1wiLFwiY2xvbmVSYW5nZVwiLFwidG9TdHJpbmdcIixcImRldGFjaFwiXSxCPVtcImJvdW5kaW5nSGVpZ2h0XCIsXCJib3VuZGluZ0xlZnRcIixcImJvdW5kaW5nVG9wXCIsXCJib3VuZGluZ1dpZHRoXCIsXCJodG1sVGV4dFwiLFwidGV4dFwiXSxDPVtcImNvbGxhcHNlXCIsXCJjb21wYXJlRW5kUG9pbnRzXCIsXCJkdXBsaWNhdGVcIixcIm1vdmVUb0VsZW1lbnRUZXh0XCIsXCJwYXJlbnRFbGVtZW50XCIsXCJzZWxlY3RcIixcInNldEVuZFBvaW50XCIsXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIl0sRD1kKGEpLEU9ZChiKSxGPWQoYyksRz17fSxIPXt2ZXJzaW9uOlwiMS4zYWxwaGEuMjAxNDA4MDRcIixpbml0aWFsaXplZDohMSxzdXBwb3J0ZWQ6ITAsdXRpbDp7aXNIb3N0TWV0aG9kOmEsaXNIb3N0T2JqZWN0OmIsaXNIb3N0UHJvcGVydHk6YyxhcmVIb3N0TWV0aG9kczpELGFyZUhvc3RPYmplY3RzOkUsYXJlSG9zdFByb3BlcnRpZXM6Rixpc1RleHRSYW5nZTplLGdldEJvZHk6Zn0sZmVhdHVyZXM6e30sbW9kdWxlczpHLGNvbmZpZzp7YWxlcnRPbkZhaWw6ITAsYWxlcnRPbldhcm46ITEscHJlZmVyVGV4dFJhbmdlOiExLGF1dG9Jbml0aWFsaXplOnR5cGVvZiByYW5neUF1dG9Jbml0aWFsaXplPT15PyEwOnJhbmd5QXV0b0luaXRpYWxpemV9fTtyZXR1cm4gSC5mYWlsPWksSC53YXJuPWose30uaGFzT3duUHJvcGVydHk/SC51dGlsLmV4dGVuZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmO2ZvcihmIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShmKSYmKGQ9YVtmXSxlPWJbZl0sYyYmbnVsbCE9PWQmJlwib2JqZWN0XCI9PXR5cGVvZiBkJiZudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJkgudXRpbC5leHRlbmQoZCxlLCEwKSxhW2ZdPWUpO3JldHVybiBiLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikmJihhLnRvU3RyaW5nPWIudG9TdHJpbmcpLGF9OmkoXCJoYXNPd25Qcm9wZXJ0eSBub3Qgc3VwcG9ydGVkXCIpLGZ1bmN0aW9uKCl7dmFyIGEsYixjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSksYT1bXS5zbGljZTt0cnl7MT09YS5jYWxsKGMuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZSYmKGI9ZnVuY3Rpb24oYil7cmV0dXJuIGEuY2FsbChiLDApfSl9Y2F0Y2goZCl7fWJ8fChiPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1bXTtmb3IoYj0wLGM9YS5sZW5ndGg7Yz5iOysrYilkW2JdPWFbYl07cmV0dXJuIGR9KSxILnV0aWwudG9BcnJheT1ifSgpLGEoZG9jdW1lbnQsXCJhZGRFdmVudExpc3RlbmVyXCIpP3I9ZnVuY3Rpb24oYSxiLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfTphKGRvY3VtZW50LFwiYXR0YWNoRXZlbnRcIik/cj1mdW5jdGlvbihhLGIsYyl7YS5hdHRhY2hFdmVudChcIm9uXCIrYixjKX06aShcIkRvY3VtZW50IGRvZXMgbm90IGhhdmUgcmVxdWlyZWQgYWRkRXZlbnRMaXN0ZW5lciBvciBhdHRhY2hFdmVudCBtZXRob2RcIiksSC51dGlsLmFkZExpc3RlbmVyPXIscz1bXSxILmluaXQ9bCxILmFkZEluaXRMaXN0ZW5lcj1mdW5jdGlvbihhKXtILmluaXRpYWxpemVkP2EoSCk6cy5wdXNoKGEpfSx0PVtdLEguYWRkU2hpbUxpc3RlbmVyPWZ1bmN0aW9uKGEpe3QucHVzaChhKX0sSC5zaGltPUguY3JlYXRlTWlzc2luZ05hdGl2ZUFwaT1tLG4ucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZT10aGlzLmRlcGVuZGVuY2llc3x8W107Zm9yKGE9MCxiPWUubGVuZ3RoO2I+YTsrK2Epe2lmKGQ9ZVthXSxjPUdbZF0sIShjJiZjIGluc3RhbmNlb2YgbikpdGhyb3cgRXJyb3IoXCJyZXF1aXJlZCBtb2R1bGUgJ1wiK2QrXCInIG5vdCBmb3VuZFwiKTtpZihjLmluaXQoKSwhYy5zdXBwb3J0ZWQpdGhyb3cgRXJyb3IoXCJyZXF1aXJlZCBtb2R1bGUgJ1wiK2QrXCInIG5vdCBzdXBwb3J0ZWRcIil9dGhpcy5pbml0aWFsaXplcih0aGlzKX0sZmFpbDpmdW5jdGlvbihhKXt0aHJvdyB0aGlzLmluaXRpYWxpemVkPSEwLHRoaXMuc3VwcG9ydGVkPSExLEVycm9yKFwiTW9kdWxlICdcIit0aGlzLm5hbWUrXCInIGZhaWxlZCB0byBsb2FkOiBcIithKX0sd2FybjpmdW5jdGlvbihhKXtILndhcm4oXCJNb2R1bGUgXCIrdGhpcy5uYW1lK1wiOiBcIithKX0sZGVwcmVjYXRpb25Ob3RpY2U6ZnVuY3Rpb24oYSxiKXtILndhcm4oXCJERVBSRUNBVEVEOiBcIithK1wiIGluIG1vZHVsZSBcIit0aGlzLm5hbWUrXCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFwiK2IrXCIgaW5zdGVhZFwiKX0sY3JlYXRlRXJyb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIEVycm9yKFwiRXJyb3IgaW4gUmFuZ3kgXCIrdGhpcy5uYW1lK1wiIG1vZHVsZTogXCIrYSl9fSxILmNyZWF0ZU1vZHVsZT1mdW5jdGlvbihhKXt2YXIgYixjLGQ7Mj09YXJndW1lbnRzLmxlbmd0aD8oYj1hcmd1bWVudHNbMV0sYz1bXSk6KGI9YXJndW1lbnRzWzJdLGM9YXJndW1lbnRzWzFdKSxkPW8oITEsYSxjLGIpLEguaW5pdGlhbGl6ZWQmJmQuaW5pdCgpfSxILmNyZWF0ZUNvcmVNb2R1bGU9ZnVuY3Rpb24oYSxiLGMpe28oITAsYSxiLGMpfSxILlJhbmdlUHJvdG90eXBlPXAsSC5yYW5nZVByb3RvdHlwZT1uZXcgcCxILnNlbGVjdGlvblByb3RvdHlwZT1uZXcgcSx1PSExLHY9ZnVuY3Rpb24oKXt1fHwodT0hMCwhSC5pbml0aWFsaXplZCYmSC5jb25maWcuYXV0b0luaXRpYWxpemUmJmwoKSl9LHR5cGVvZiB3aW5kb3c9PXk/KGkoXCJObyB3aW5kb3cgZm91bmRcIiksdm9pZCAwKTp0eXBlb2YgZG9jdW1lbnQ9PXk/KGkoXCJObyBkb2N1bWVudCBmb3VuZFwiKSx2b2lkIDApOihhKGRvY3VtZW50LFwiYWRkRXZlbnRMaXN0ZW5lclwiKSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIix2LCExKSxyKHdpbmRvdyxcImxvYWRcIix2KSxILmNyZWF0ZUNvcmVNb2R1bGUoXCJEb21VdGlsXCIsW10sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3ZhciBiO3JldHVybiB0eXBlb2YgYS5uYW1lc3BhY2VVUkk9PUl8fG51bGw9PT0oYj1hLm5hbWVzcGFjZVVSSSl8fFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT1ifWZ1bmN0aW9uIGQoYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiAxPT1iLm5vZGVUeXBlP2I6bnVsbH1mdW5jdGlvbiBlKGEpe2Zvcih2YXIgYj0wO2E9YS5wcmV2aW91c1NpYmxpbmc7KSsrYjtyZXR1cm4gYn1mdW5jdGlvbiBmKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDc6Y2FzZSAxMDpyZXR1cm4gMDtjYXNlIDM6Y2FzZSA4OnJldHVybiBhLmxlbmd0aDtkZWZhdWx0OnJldHVybiBhLmNoaWxkTm9kZXMubGVuZ3RofX1mdW5jdGlvbiBnKGEsYil7dmFyIGMsZD1bXTtmb3IoYz1hO2M7Yz1jLnBhcmVudE5vZGUpZC5wdXNoKGMpO2ZvcihjPWI7YztjPWMucGFyZW50Tm9kZSlpZihGKGQsYykpcmV0dXJuIGM7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaChhLGIsYyl7Zm9yKHZhciBkPWM/YjpiLnBhcmVudE5vZGU7ZDspe2lmKGQ9PT1hKXJldHVybiEwO2Q9ZC5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gaChhLGIsITApfWZ1bmN0aW9uIGooYSxiLGMpe2Zvcih2YXIgZCxlPWM/YTphLnBhcmVudE5vZGU7ZTspe2lmKGQ9ZS5wYXJlbnROb2RlLGQ9PT1iKXJldHVybiBlO2U9ZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBrKGEpe3ZhciBiPWEubm9kZVR5cGU7cmV0dXJuIDM9PWJ8fDQ9PWJ8fDg9PWJ9ZnVuY3Rpb24gbChhKXtpZighYSlyZXR1cm4hMTt2YXIgYj1hLm5vZGVUeXBlO3JldHVybiAzPT1ifHw4PT1ifWZ1bmN0aW9uIG0oYSxiKXt2YXIgYz1iLm5leHRTaWJsaW5nLGQ9Yi5wYXJlbnROb2RlO3JldHVybiBjP2QuaW5zZXJ0QmVmb3JlKGEsYyk6ZC5hcHBlbmRDaGlsZChhKSxhfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkLGYsZz1hLmNsb25lTm9kZSghMSk7aWYoZy5kZWxldGVEYXRhKDAsYiksYS5kZWxldGVEYXRhKGIsYS5sZW5ndGgtYiksbShnLGEpLGMpZm9yKGQ9MDtmPWNbZCsrXTspZi5ub2RlPT1hJiZmLm9mZnNldD5iPyhmLm5vZGU9ZyxmLm9mZnNldC09Yik6Zi5ub2RlPT1hLnBhcmVudE5vZGUmJmYub2Zmc2V0PmUoYSkmJisrZi5vZmZzZXQ7cmV0dXJuIGd9ZnVuY3Rpb24gbyhhKXtpZig5PT1hLm5vZGVUeXBlKXJldHVybiBhO2lmKHR5cGVvZiBhLm93bmVyRG9jdW1lbnQhPUkpcmV0dXJuIGEub3duZXJEb2N1bWVudDtpZih0eXBlb2YgYS5kb2N1bWVudCE9SSlyZXR1cm4gYS5kb2N1bWVudDtpZihhLnBhcmVudE5vZGUpcmV0dXJuIG8oYS5wYXJlbnROb2RlKTt0aHJvdyBiLmNyZWF0ZUVycm9yKFwiZ2V0RG9jdW1lbnQ6IG5vIGRvY3VtZW50IGZvdW5kIGZvciBub2RlXCIpfWZ1bmN0aW9uIHAoYSl7dmFyIGM9byhhKTtpZih0eXBlb2YgYy5kZWZhdWx0VmlldyE9SSlyZXR1cm4gYy5kZWZhdWx0VmlldztpZih0eXBlb2YgYy5wYXJlbnRXaW5kb3chPUkpcmV0dXJuIGMucGFyZW50V2luZG93O3Rocm93IGIuY3JlYXRlRXJyb3IoXCJDYW5ub3QgZ2V0IGEgd2luZG93IG9iamVjdCBmb3Igbm9kZVwiKX1mdW5jdGlvbiBxKGEpe2lmKHR5cGVvZiBhLmNvbnRlbnREb2N1bWVudCE9SSlyZXR1cm4gYS5jb250ZW50RG9jdW1lbnQ7aWYodHlwZW9mIGEuY29udGVudFdpbmRvdyE9SSlyZXR1cm4gYS5jb250ZW50V2luZG93LmRvY3VtZW50O3Rocm93IGIuY3JlYXRlRXJyb3IoXCJnZXRJZnJhbWVEb2N1bWVudDogTm8gRG9jdW1lbnQgb2JqZWN0IGZvdW5kIGZvciBpZnJhbWUgZWxlbWVudFwiKX1mdW5jdGlvbiByKGEpe2lmKHR5cGVvZiBhLmNvbnRlbnRXaW5kb3chPUkpcmV0dXJuIGEuY29udGVudFdpbmRvdztpZih0eXBlb2YgYS5jb250ZW50RG9jdW1lbnQhPUkpcmV0dXJuIGEuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O3Rocm93IGIuY3JlYXRlRXJyb3IoXCJnZXRJZnJhbWVXaW5kb3c6IE5vIFdpbmRvdyBvYmplY3QgZm91bmQgZm9yIGlmcmFtZSBlbGVtZW50XCIpfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIGEmJkouaXNIb3N0TWV0aG9kKGEsXCJzZXRUaW1lb3V0XCIpJiZKLmlzSG9zdE9iamVjdChhLFwiZG9jdW1lbnRcIil9ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGQ7aWYoYT9KLmlzSG9zdFByb3BlcnR5KGEsXCJub2RlVHlwZVwiKT9kPTE9PWEubm9kZVR5cGUmJlwiaWZyYW1lXCI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpP3EoYSk6byhhKTpzKGEpJiYoZD1hLmRvY3VtZW50KTpkPWRvY3VtZW50LCFkKXRocm93IGIuY3JlYXRlRXJyb3IoYytcIigpOiBQYXJhbWV0ZXIgbXVzdCBiZSBhIFdpbmRvdyBvYmplY3Qgb3IgRE9NIG5vZGVcIik7cmV0dXJuIGR9ZnVuY3Rpb24gdShhKXtmb3IodmFyIGI7Yj1hLnBhcmVudE5vZGU7KWE9YjtyZXR1cm4gYX1mdW5jdGlvbiB2KGEsYyxkLGYpe3ZhciBoLGksayxsLG07aWYoYT09ZClyZXR1cm4gYz09PWY/MDpmPmM/LTE6MTtpZihoPWooZCxhLCEwKSlyZXR1cm4gYzw9ZShoKT8tMToxO2lmKGg9aihhLGQsITApKXJldHVybiBlKGgpPGY/LTE6MTtpZihpPWcoYSxkKSwhaSl0aHJvdyBFcnJvcihcImNvbXBhcmVQb2ludHMgZXJyb3I6IG5vZGVzIGhhdmUgbm8gY29tbW9uIGFuY2VzdG9yXCIpO2lmKGs9YT09PWk/aTpqKGEsaSwhMCksbD1kPT09aT9pOmooZCxpLCEwKSxrPT09bCl0aHJvdyBiLmNyZWF0ZUVycm9yKFwiY29tcGFyZVBvaW50cyBnb3QgdG8gY2FzZSA0IGFuZCBjaGlsZEEgYW5kIGNoaWxkQiBhcmUgdGhlIHNhbWUhXCIpO2ZvcihtPWkuZmlyc3RDaGlsZDttOyl7aWYobT09PWspcmV0dXJuLTE7aWYobT09PWwpcmV0dXJuIDE7bT1tLm5leHRTaWJsaW5nfX1mdW5jdGlvbiB3KGEpe3ZhciBiO3RyeXtyZXR1cm4gYj1hLnBhcmVudE5vZGUsITF9Y2F0Y2goYyl7cmV0dXJuITB9fWZ1bmN0aW9uIHgoYSl7aWYoIWEpcmV0dXJuXCJbTm8gbm9kZV1cIjtpZihHJiZ3KGEpKXJldHVyblwiW0Jyb2tlbiBub2RlXVwiO2lmKGsoYSkpcmV0dXJuJ1wiJythLmRhdGErJ1wiJztpZigxPT1hLm5vZGVUeXBlKXt2YXIgYj1hLmlkPycgaWQ9XCInK2EuaWQrJ1wiJzpcIlwiO3JldHVyblwiPFwiK2Eubm9kZU5hbWUrYitcIj5baW5kZXg6XCIrZShhKStcIixsZW5ndGg6XCIrYS5jaGlsZE5vZGVzLmxlbmd0aCtcIl1bXCIrKGEuaW5uZXJIVE1MfHxcIltpbm5lckhUTUwgbm90IHN1cHBvcnRlZF1cIikuc2xpY2UoMCwyNSkrXCJdXCJ9cmV0dXJuIGEubm9kZU5hbWV9ZnVuY3Rpb24geShhKXtmb3IodmFyIGIsYz1vKGEpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtiPWEuZmlyc3RDaGlsZDspYy5hcHBlbmRDaGlsZChiKTtyZXR1cm4gY31mdW5jdGlvbiB6KGEpe3RoaXMucm9vdD1hLHRoaXMuX25leHQ9YX1mdW5jdGlvbiBBKGEpe3JldHVybiBuZXcgeihhKX1mdW5jdGlvbiBCKGEsYil7dGhpcy5ub2RlPWEsdGhpcy5vZmZzZXQ9Yn1mdW5jdGlvbiBDKGEpe3RoaXMuY29kZT10aGlzW2FdLHRoaXMuY29kZU5hbWU9YSx0aGlzLm1lc3NhZ2U9XCJET01FeGNlcHRpb246IFwiK3RoaXMuY29kZU5hbWV9dmFyIEQsRSxGLEcsSCxJPVwidW5kZWZpbmVkXCIsSj1hLnV0aWw7Si5hcmVIb3N0TWV0aG9kcyhkb2N1bWVudCxbXCJjcmVhdGVEb2N1bWVudEZyYWdtZW50XCIsXCJjcmVhdGVFbGVtZW50XCIsXCJjcmVhdGVUZXh0Tm9kZVwiXSl8fGIuZmFpbChcImRvY3VtZW50IG1pc3NpbmcgYSBOb2RlIGNyZWF0aW9uIG1ldGhvZFwiKSxKLmlzSG9zdE1ldGhvZChkb2N1bWVudCxcImdldEVsZW1lbnRzQnlUYWdOYW1lXCIpfHxiLmZhaWwoXCJkb2N1bWVudCBtaXNzaW5nIGdldEVsZW1lbnRzQnlUYWdOYW1lIG1ldGhvZFwiKSxEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksSi5hcmVIb3N0TWV0aG9kcyhELFtcImluc2VydEJlZm9yZVwiLFwiYXBwZW5kQ2hpbGRcIixcImNsb25lTm9kZVwiXXx8IUouYXJlSG9zdE9iamVjdHMoRCxbXCJwcmV2aW91c1NpYmxpbmdcIixcIm5leHRTaWJsaW5nXCIsXCJjaGlsZE5vZGVzXCIsXCJwYXJlbnROb2RlXCJdKSl8fGIuZmFpbChcIkluY29tcGxldGUgRWxlbWVudCBpbXBsZW1lbnRhdGlvblwiKSxKLmlzSG9zdFByb3BlcnR5KEQsXCJpbm5lckhUTUxcIil8fGIuZmFpbChcIkVsZW1lbnQgaXMgbWlzc2luZyBpbm5lckhUTUwgcHJvcGVydHlcIiksRT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInRlc3RcIiksSi5hcmVIb3N0TWV0aG9kcyhFLFtcInNwbGl0VGV4dFwiLFwiZGVsZXRlRGF0YVwiLFwiaW5zZXJ0RGF0YVwiLFwiYXBwZW5kRGF0YVwiLFwiY2xvbmVOb2RlXCJdfHwhSi5hcmVIb3N0T2JqZWN0cyhELFtcInByZXZpb3VzU2libGluZ1wiLFwibmV4dFNpYmxpbmdcIixcImNoaWxkTm9kZXNcIixcInBhcmVudE5vZGVcIl0pfHwhSi5hcmVIb3N0UHJvcGVydGllcyhFLFtcImRhdGFcIl0pKXx8Yi5mYWlsKFwiSW5jb21wbGV0ZSBUZXh0IE5vZGUgaW1wbGVtZW50YXRpb25cIiksRj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aDtjLS07KWlmKGFbY109PT1iKXJldHVybiEwO3JldHVybiExfSxHPSExLGZ1bmN0aW9uKCl7dmFyIGIsYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYlwiKTtjLmlubmVySFRNTD1cIjFcIixiPWMuZmlyc3RDaGlsZCxjLmlubmVySFRNTD1cIjxicj5cIixHPXcoYiksYS5mZWF0dXJlcy5jcmFzaHlUZXh0Tm9kZXM9R30oKSx0eXBlb2Ygd2luZG93LmdldENvbXB1dGVkU3R5bGUhPUk/SD1mdW5jdGlvbihhLGIpe3JldHVybiBwKGEpLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKVtiXX06dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUhPUk/SD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmN1cnJlbnRTdHlsZVtiXX06Yi5mYWlsKFwiTm8gbWVhbnMgb2Ygb2J0YWluaW5nIGNvbXB1dGVkIHN0eWxlIHByb3BlcnRpZXMgZm91bmRcIiksei5wcm90b3R5cGU9e19jdXJyZW50Om51bGwsaGFzTmV4dDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbmV4dH0sbmV4dDpmdW5jdGlvbigpe3ZhciBhLGIsYz10aGlzLl9jdXJyZW50PXRoaXMuX25leHQ7aWYodGhpcy5fY3VycmVudClpZihhPWMuZmlyc3RDaGlsZCxhKXRoaXMuX25leHQ9YTtlbHNle2ZvcihiPW51bGw7YyE9PXRoaXMucm9vdCYmIShiPWMubmV4dFNpYmxpbmcpOyljPWMucGFyZW50Tm9kZTt0aGlzLl9uZXh0PWJ9cmV0dXJuIHRoaXMuX2N1cnJlbnR9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuX2N1cnJlbnQ9dGhpcy5fbmV4dD10aGlzLnJvb3Q9bnVsbH19LEIucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiZ0aGlzLm5vZGU9PT1hLm5vZGUmJnRoaXMub2Zmc2V0PT1hLm9mZnNldH0saW5zcGVjdDpmdW5jdGlvbigpe3JldHVyblwiW0RvbVBvc2l0aW9uKFwiK3godGhpcy5ub2RlKStcIjpcIit0aGlzLm9mZnNldCtcIildXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zcGVjdCgpfX0sQy5wcm90b3R5cGU9e0lOREVYX1NJWkVfRVJSOjEsSElFUkFSQ0hZX1JFUVVFU1RfRVJSOjMsV1JPTkdfRE9DVU1FTlRfRVJSOjQsTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOjcsTk9UX0ZPVU5EX0VSUjo4LE5PVF9TVVBQT1JURURfRVJSOjksSU5WQUxJRF9TVEFURV9FUlI6MTEsSU5WQUxJRF9OT0RFX1RZUEVfRVJSOjI0fSxDLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9LGEuZG9tPXthcnJheUNvbnRhaW5zOkYsaXNIdG1sTmFtZXNwYWNlOmMscGFyZW50RWxlbWVudDpkLGdldE5vZGVJbmRleDplLGdldE5vZGVMZW5ndGg6ZixnZXRDb21tb25BbmNlc3RvcjpnLGlzQW5jZXN0b3JPZjpoLGlzT3JJc0FuY2VzdG9yT2Y6aSxnZXRDbG9zZXN0QW5jZXN0b3JJbjpqLGlzQ2hhcmFjdGVyRGF0YU5vZGU6ayxpc1RleHRPckNvbW1lbnROb2RlOmwsaW5zZXJ0QWZ0ZXI6bSxzcGxpdERhdGFOb2RlOm4sZ2V0RG9jdW1lbnQ6byxnZXRXaW5kb3c6cCxnZXRJZnJhbWVXaW5kb3c6cixnZXRJZnJhbWVEb2N1bWVudDpxLGdldEJvZHk6Si5nZXRCb2R5LGlzV2luZG93OnMsZ2V0Q29udGVudERvY3VtZW50OnQsZ2V0Um9vdENvbnRhaW5lcjp1LGNvbXBhcmVQb2ludHM6dixpc0Jyb2tlbk5vZGU6dyxpbnNwZWN0Tm9kZTp4LGdldENvbXB1dGVkU3R5bGVQcm9wZXJ0eTpILGZyYWdtZW50RnJvbU5vZGVDaGlsZHJlbjp5LGNyZWF0ZUl0ZXJhdG9yOkEsRG9tUG9zaXRpb246Qn0sYS5ET01FeGNlcHRpb249Q30pLEguY3JlYXRlQ29yZU1vZHVsZShcIkRvbVJhbmdlXCIsW1wiRG9tVXRpbFwiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7cmV0dXJuIDMhPWEubm9kZVR5cGUmJihnYihhLGIuc3RhcnRDb250YWluZXIpfHxnYihhLGIuZW5kQ29udGFpbmVyKSl9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYS5kb2N1bWVudHx8aGIoYS5zdGFydENvbnRhaW5lcil9ZnVuY3Rpb24gZChhKXtyZXR1cm4gbmV3IGNiKGEucGFyZW50Tm9kZSxmYihhKSl9ZnVuY3Rpb24gZShhKXtyZXR1cm4gbmV3IGNiKGEucGFyZW50Tm9kZSxmYihhKSsxKX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD0xMT09YS5ub2RlVHlwZT9hLmZpcnN0Q2hpbGQ6YTtyZXR1cm4gZWIoYik/Yz09Yi5sZW5ndGg/YWIuaW5zZXJ0QWZ0ZXIoYSxiKTpiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsMD09Yz9iOmpiKGIsYykpOmM+PWIuY2hpbGROb2Rlcy5sZW5ndGg/Yi5hcHBlbmRDaGlsZChhKTpiLmluc2VydEJlZm9yZShhLGIuY2hpbGROb2Rlc1tjXSksZH1mdW5jdGlvbiBnKGEsYixkKXtpZih5KGEpLHkoYiksYyhiKSE9YyhhKSl0aHJvdyBuZXcgZGIoXCJXUk9OR19ET0NVTUVOVF9FUlJcIik7dmFyIGU9aWIoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0LGIuZW5kQ29udGFpbmVyLGIuZW5kT2Zmc2V0KSxmPWliKGEuZW5kQ29udGFpbmVyLGEuZW5kT2Zmc2V0LGIuc3RhcnRDb250YWluZXIsYi5zdGFydE9mZnNldCk7cmV0dXJuIGQ/MD49ZSYmZj49MDowPmUmJmY+MH1mdW5jdGlvbiBoKGEpe3ZhciBiLGQsZSxmO2ZvcihlPWMoYS5yYW5nZSkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Q9YS5uZXh0KCk7KXtpZihiPWEuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKSxkPWQuY2xvbmVOb2RlKCFiKSxiJiYoZj1hLmdldFN1YnRyZWVJdGVyYXRvcigpLGQuYXBwZW5kQ2hpbGQoaChmKSksZi5kZXRhY2goKSksMTA9PWQubm9kZVR5cGUpdGhyb3cgbmV3IGRiKFwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSXCIpO2UuYXBwZW5kQ2hpbGQoZCl9cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQsZSxmLGc7Zm9yKGM9Y3x8e3N0b3A6ITF9O2Y9YS5uZXh0KCk7KWlmKGEuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKSl7aWYoYihmKT09PSExKXJldHVybiBjLnN0b3A9ITAsdm9pZCAwO2lmKGc9YS5nZXRTdWJ0cmVlSXRlcmF0b3IoKSxpKGcsYixjKSxnLmRldGFjaCgpLGMuc3RvcClyZXR1cm59ZWxzZSBmb3IoZD1hYi5jcmVhdGVJdGVyYXRvcihmKTtlPWQubmV4dCgpOylpZihiKGUpPT09ITEpcmV0dXJuIGMuc3RvcD0hMCx2b2lkIDB9ZnVuY3Rpb24gaihhKXtmb3IodmFyIGI7YS5uZXh0KCk7KWEuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKT8oYj1hLmdldFN1YnRyZWVJdGVyYXRvcigpLGooYiksYi5kZXRhY2goKSk6YS5yZW1vdmUoKX1mdW5jdGlvbiBrKGEpe2Zvcih2YXIgYixkLGU9YyhhLnJhbmdlKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yj1hLm5leHQoKTspe2lmKGEuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKT8oYj1iLmNsb25lTm9kZSghMSksZD1hLmdldFN1YnRyZWVJdGVyYXRvcigpLGIuYXBwZW5kQ2hpbGQoayhkKSksZC5kZXRhY2goKSk6YS5yZW1vdmUoKSwxMD09Yi5ub2RlVHlwZSl0aHJvdyBuZXcgZGIoXCJISUVSQVJDSFlfUkVRVUVTVF9FUlJcIik7ZS5hcHBlbmRDaGlsZChiKX1yZXR1cm4gZX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGY9ISghYnx8IWIubGVuZ3RoKSxnPSEhYztyZXR1cm4gZiYmKGQ9UmVnRXhwKFwiXihcIitiLmpvaW4oXCJ8XCIpK1wiKSRcIikpLGU9W10saShuZXcgbihhLCExKSxmdW5jdGlvbihiKXt2YXIgaCxpOyghZnx8ZC50ZXN0KGIubm9kZVR5cGUpKSYmKCFnfHxjKGIpKSYmKGg9YS5zdGFydENvbnRhaW5lcixiPT1oJiZlYihoKSYmYS5zdGFydE9mZnNldD09aC5sZW5ndGh8fChpPWEuZW5kQ29udGFpbmVyLGI9PWkmJmViKGkpJiYwPT1hLmVuZE9mZnNldHx8ZS5wdXNoKGIpKSl9KSxlfWZ1bmN0aW9uIG0oYSl7dmFyIGI9dm9pZCAwPT09YS5nZXROYW1lP1wiUmFuZ2VcIjphLmdldE5hbWUoKTtyZXR1cm5cIltcIitiK1wiKFwiK2FiLmluc3BlY3ROb2RlKGEuc3RhcnRDb250YWluZXIpK1wiOlwiK2Euc3RhcnRPZmZzZXQrXCIsIFwiK2FiLmluc3BlY3ROb2RlKGEuZW5kQ29udGFpbmVyKStcIjpcIithLmVuZE9mZnNldCtcIildXCJ9ZnVuY3Rpb24gbihhLGIpe2lmKHRoaXMucmFuZ2U9YSx0aGlzLmNsb25lUGFydGlhbGx5U2VsZWN0ZWRUZXh0Tm9kZXM9YiwhYS5jb2xsYXBzZWQpe3RoaXMuc2M9YS5zdGFydENvbnRhaW5lcix0aGlzLnNvPWEuc3RhcnRPZmZzZXQsdGhpcy5lYz1hLmVuZENvbnRhaW5lcix0aGlzLmVvPWEuZW5kT2Zmc2V0O3ZhciBjPWEuY29tbW9uQW5jZXN0b3JDb250YWluZXI7dGhpcy5zYz09PXRoaXMuZWMmJmViKHRoaXMuc2MpPyh0aGlzLmlzU2luZ2xlQ2hhcmFjdGVyRGF0YU5vZGU9ITAsdGhpcy5fZmlyc3Q9dGhpcy5fbGFzdD10aGlzLl9uZXh0PXRoaXMuc2MpOih0aGlzLl9maXJzdD10aGlzLl9uZXh0PXRoaXMuc2MhPT1jfHxlYih0aGlzLnNjKT9rYih0aGlzLnNjLGMsITApOnRoaXMuc2MuY2hpbGROb2Rlc1t0aGlzLnNvXSx0aGlzLl9sYXN0PXRoaXMuZWMhPT1jfHxlYih0aGlzLmVjKT9rYih0aGlzLmVjLGMsITApOnRoaXMuZWMuY2hpbGROb2Rlc1t0aGlzLmVvLTFdKX19ZnVuY3Rpb24gbyhhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtmb3IodmFyIGQsZT1jP2I6Yi5wYXJlbnROb2RlO2U7KXtpZihkPWUubm9kZVR5cGUsbWIoYSxkKSlyZXR1cm4gZTtlPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChhLGIpe2lmKFAoYSxiKSl0aHJvdyBuZXcgZGIoXCJJTlZBTElEX05PREVfVFlQRV9FUlJcIil9ZnVuY3Rpb24gcShhLGIpe2lmKCFtYihiLGEubm9kZVR5cGUpKXRocm93IG5ldyBkYihcIklOVkFMSURfTk9ERV9UWVBFX0VSUlwiKX1mdW5jdGlvbiByKGEsYil7aWYoMD5ifHxiPihlYihhKT9hLmxlbmd0aDphLmNoaWxkTm9kZXMubGVuZ3RoKSl0aHJvdyBuZXcgZGIoXCJJTkRFWF9TSVpFX0VSUlwiKX1mdW5jdGlvbiBzKGEsYil7aWYoTihhLCEwKSE9PU4oYiwhMCkpdGhyb3cgbmV3IGRiKFwiV1JPTkdfRE9DVU1FTlRfRVJSXCIpfWZ1bmN0aW9uIHQoYSl7aWYoTyhhLCEwKSl0aHJvdyBuZXcgZGIoXCJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlJcIil9ZnVuY3Rpb24gdShhLGIpe2lmKCFhKXRocm93IG5ldyBkYihiKX1mdW5jdGlvbiB2KGEpe3JldHVybiBvYiYmYWIuaXNCcm9rZW5Ob2RlKGEpfHwhbWIoSixhLm5vZGVUeXBlKSYmIU4oYSwhMCl9ZnVuY3Rpb24gdyhhLGIpe3JldHVybiBiPD0oZWIoYSk/YS5sZW5ndGg6YS5jaGlsZE5vZGVzLmxlbmd0aCl9ZnVuY3Rpb24geChhKXtyZXR1cm4hIWEuc3RhcnRDb250YWluZXImJiEhYS5lbmRDb250YWluZXImJiF2KGEuc3RhcnRDb250YWluZXIpJiYhdihhLmVuZENvbnRhaW5lcikmJncoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KSYmdyhhLmVuZENvbnRhaW5lcixhLmVuZE9mZnNldCl9ZnVuY3Rpb24geShhKXtpZigheChhKSl0aHJvdyBFcnJvcihcIlJhbmdlIGVycm9yOiBSYW5nZSBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgRE9NIG11dGF0aW9uIChcIithLmluc3BlY3QoKStcIilcIil9ZnVuY3Rpb24geihhLGIpe3ZhciBjLGQsZSxmLGc7eShhKSxjPWEuc3RhcnRDb250YWluZXIsZD1hLnN0YXJ0T2Zmc2V0LGU9YS5lbmRDb250YWluZXIsZj1hLmVuZE9mZnNldCxnPWM9PT1lLGViKGUpJiZmPjAmJmY8ZS5sZW5ndGgmJmpiKGUsZixiKSxlYihjKSYmZD4wJiZkPGMubGVuZ3RoJiYoYz1qYihjLGQsYiksZz8oZi09ZCxlPWMpOmU9PWMucGFyZW50Tm9kZSYmZj49ZmIoYykmJmYrKyxkPTApLGEuc2V0U3RhcnRBbmRFbmQoYyxkLGUsZil9ZnVuY3Rpb24gQShhKXt5KGEpO3ZhciBiPWEuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZS5jbG9uZU5vZGUoITEpO3JldHVybiBiLmFwcGVuZENoaWxkKGEuY2xvbmVDb250ZW50cygpKSxiLmlubmVySFRNTH1mdW5jdGlvbiBCKGEpe2EuU1RBUlRfVE9fU1RBUlQ9VSxhLlNUQVJUX1RPX0VORD1WLGEuRU5EX1RPX0VORD1XLGEuRU5EX1RPX1NUQVJUPVgsYS5OT0RFX0JFRk9SRT1ZLGEuTk9ERV9BRlRFUj1aLGEuTk9ERV9CRUZPUkVfQU5EX0FGVEVSPSQsYS5OT0RFX0lOU0lERT1ffWZ1bmN0aW9uIEMoYSl7QihhKSxCKGEucHJvdG90eXBlKX1mdW5jdGlvbiBEKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGMsZCxmLGcsaCxqLGs7cmV0dXJuIHkodGhpcyksYz10aGlzLnN0YXJ0Q29udGFpbmVyLGQ9dGhpcy5zdGFydE9mZnNldCxmPXRoaXMuY29tbW9uQW5jZXN0b3JDb250YWluZXIsZz1uZXcgbih0aGlzLCEwKSxjIT09ZiYmKGg9a2IoYyxmLCEwKSxqPWUoaCksYz1qLm5vZGUsZD1qLm9mZnNldCksaShnLHQpLGcucmVzZXQoKSxrPWEoZyksZy5kZXRhY2goKSxiKHRoaXMsYyxkLGMsZCksa319ZnVuY3Rpb24gRShjLGYpe2Z1bmN0aW9uIGcoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7cShjLEkpLHEobmIoYyksSik7dmFyIGY9KGE/ZDplKShjKTsoYj9oOmkpKHRoaXMsZi5ub2RlLGYub2Zmc2V0KX19ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGQ9YS5lbmRDb250YWluZXIsZT1hLmVuZE9mZnNldDsoYiE9PWEuc3RhcnRDb250YWluZXJ8fGMhPT1hLnN0YXJ0T2Zmc2V0KSYmKChuYihiKSE9bmIoZCl8fDE9PWliKGIsYyxkLGUpKSYmKGQ9YixlPWMpLGYoYSxiLGMsZCxlKSl9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQ9YS5zdGFydENvbnRhaW5lcixlPWEuc3RhcnRPZmZzZXQ7KGIhPT1hLmVuZENvbnRhaW5lcnx8YyE9PWEuZW5kT2Zmc2V0KSYmKChuYihiKSE9bmIoZCl8fC0xPT1pYihiLGMsZCxlKSkmJihkPWIsZT1jKSxmKGEsZCxlLGIsYykpfXZhciBsPWZ1bmN0aW9uKCl7fTtsLnByb3RvdHlwZT1hLnJhbmdlUHJvdG90eXBlLGMucHJvdG90eXBlPW5ldyBsLGJiLmV4dGVuZChjLnByb3RvdHlwZSx7c2V0U3RhcnQ6ZnVuY3Rpb24oYSxiKXtwKGEsITApLHIoYSxiKSxoKHRoaXMsYSxiKX0sc2V0RW5kOmZ1bmN0aW9uKGEsYil7cChhLCEwKSxyKGEsYiksaSh0aGlzLGEsYil9LHNldFN0YXJ0QW5kRW5kOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLGI9YVswXSxjPWFbMV0sZD1iLGU9Yztzd2l0Y2goYS5sZW5ndGgpe2Nhc2UgMzplPWFbMl07YnJlYWs7Y2FzZSA0OmQ9YVsyXSxlPWFbM119Zih0aGlzLGIsYyxkLGUpfSxzZXRCb3VuZGFyeTpmdW5jdGlvbihhLGIsYyl7dGhpc1tcInNldFwiKyhjP1wiU3RhcnRcIjpcIkVuZFwiKV0oYSxiKX0sc2V0U3RhcnRCZWZvcmU6ZyghMCwhMCksc2V0U3RhcnRBZnRlcjpnKCExLCEwKSxzZXRFbmRCZWZvcmU6ZyghMCwhMSksc2V0RW5kQWZ0ZXI6ZyghMSwhMSksY29sbGFwc2U6ZnVuY3Rpb24oYSl7eSh0aGlzKSxhP2YodGhpcyx0aGlzLnN0YXJ0Q29udGFpbmVyLHRoaXMuc3RhcnRPZmZzZXQsdGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0KTpmKHRoaXMsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQpfSxzZWxlY3ROb2RlQ29udGVudHM6ZnVuY3Rpb24oYSl7cChhLCEwKSxmKHRoaXMsYSwwLGEsbGIoYSkpfSxzZWxlY3ROb2RlOmZ1bmN0aW9uKGEpe3AoYSwhMSkscShhLEkpO3ZhciBiPWQoYSksYz1lKGEpO2YodGhpcyxiLm5vZGUsYi5vZmZzZXQsYy5ub2RlLGMub2Zmc2V0KX0sZXh0cmFjdENvbnRlbnRzOkQoayxmKSxkZWxldGVDb250ZW50czpEKGosZiksY2FuU3Vycm91bmRDb250ZW50czpmdW5jdGlvbigpe3ZhciBhLGM7cmV0dXJuIHkodGhpcyksdCh0aGlzLnN0YXJ0Q29udGFpbmVyKSx0KHRoaXMuZW5kQ29udGFpbmVyKSxhPW5ldyBuKHRoaXMsITApLGM9YS5fZmlyc3QmJmIoYS5fZmlyc3QsdGhpcyl8fGEuX2xhc3QmJmIoYS5fbGFzdCx0aGlzKSxhLmRldGFjaCgpLCFjfSxzcGxpdEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt6KHRoaXMpfSxzcGxpdEJvdW5kYXJpZXNQcmVzZXJ2aW5nUG9zaXRpb25zOmZ1bmN0aW9uKGEpe3oodGhpcyxhKX0sbm9ybWFsaXplQm91bmRhcmllczpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZyxoLGksajt5KHRoaXMpLGE9dGhpcy5zdGFydENvbnRhaW5lcixiPXRoaXMuc3RhcnRPZmZzZXQsYz10aGlzLmVuZENvbnRhaW5lcixkPXRoaXMuZW5kT2Zmc2V0LGU9ZnVuY3Rpb24oYSl7dmFyIGI9YS5uZXh0U2libGluZztiJiZiLm5vZGVUeXBlPT1hLm5vZGVUeXBlJiYoYz1hLGQ9YS5sZW5ndGgsYS5hcHBlbmREYXRhKGIuZGF0YSksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKX0sZz1mdW5jdGlvbihlKXt2YXIgZixnLGg9ZS5wcmV2aW91c1NpYmxpbmc7aCYmaC5ub2RlVHlwZT09ZS5ub2RlVHlwZSYmKGE9ZSxmPWUubGVuZ3RoLGI9aC5sZW5ndGgsZS5pbnNlcnREYXRhKDAsaC5kYXRhKSxoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksYT09Yz8oZCs9YixjPWEpOmM9PWUucGFyZW50Tm9kZSYmKGc9ZmIoZSksZD09Zz8oYz1lLGQ9Zik6ZD5nJiZkLS0pKX0saD0hMCxlYihjKT9jLmxlbmd0aD09ZCYmZShjKTooZD4wJiYoaT1jLmNoaWxkTm9kZXNbZC0xXSxpJiZlYihpKSYmZShpKSksaD0hdGhpcy5jb2xsYXBzZWQpLGg/ZWIoYSk/MD09YiYmZyhhKTpiPGEuY2hpbGROb2Rlcy5sZW5ndGgmJihqPWEuY2hpbGROb2Rlc1tiXSxqJiZlYihqKSYmZyhqKSk6KGE9YyxiPWQpLGYodGhpcyxhLGIsYyxkKX0sY29sbGFwc2VUb1BvaW50OmZ1bmN0aW9uKGEsYil7cChhLCEwKSxyKGEsYiksdGhpcy5zZXRTdGFydEFuZEVuZChhLGIpfX0pLEMoYyl9ZnVuY3Rpb24gRihhKXthLmNvbGxhcHNlZD1hLnN0YXJ0Q29udGFpbmVyPT09YS5lbmRDb250YWluZXImJmEuc3RhcnRPZmZzZXQ9PT1hLmVuZE9mZnNldCxhLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyPWEuY29sbGFwc2VkP2Euc3RhcnRDb250YWluZXI6YWIuZ2V0Q29tbW9uQW5jZXN0b3IoYS5zdGFydENvbnRhaW5lcixhLmVuZENvbnRhaW5lcil9ZnVuY3Rpb24gRyhhLGIsYyxkLGUpe2Euc3RhcnRDb250YWluZXI9YixhLnN0YXJ0T2Zmc2V0PWMsYS5lbmRDb250YWluZXI9ZCxhLmVuZE9mZnNldD1lLGEuZG9jdW1lbnQ9YWIuZ2V0RG9jdW1lbnQoYiksRihhKX1mdW5jdGlvbiBIKGEpe3RoaXMuc3RhcnRDb250YWluZXI9YSx0aGlzLnN0YXJ0T2Zmc2V0PTAsdGhpcy5lbmRDb250YWluZXI9YSx0aGlzLmVuZE9mZnNldD0wLHRoaXMuZG9jdW1lbnQ9YSxGKHRoaXMpfXZhciBJLEosSyxMLE0sTixPLFAsUSxSLFMsVCxVLFYsVyxYLFksWiwkLF8sYWI9YS5kb20sYmI9YS51dGlsLGNiPWFiLkRvbVBvc2l0aW9uLGRiPWEuRE9NRXhjZXB0aW9uLGViPWFiLmlzQ2hhcmFjdGVyRGF0YU5vZGUsZmI9YWIuZ2V0Tm9kZUluZGV4LGdiPWFiLmlzT3JJc0FuY2VzdG9yT2YsaGI9YWIuZ2V0RG9jdW1lbnQsaWI9YWIuY29tcGFyZVBvaW50cyxqYj1hYi5zcGxpdERhdGFOb2RlLGtiPWFiLmdldENsb3Nlc3RBbmNlc3RvckluLGxiPWFiLmdldE5vZGVMZW5ndGgsbWI9YWIuYXJyYXlDb250YWlucyxuYj1hYi5nZXRSb290Q29udGFpbmVyLG9iPWEuZmVhdHVyZXMuY3Jhc2h5VGV4dE5vZGVzO24ucHJvdG90eXBlPXtfY3VycmVudDpudWxsLF9uZXh0Om51bGwsX2ZpcnN0Om51bGwsX2xhc3Q6bnVsbCxpc1NpbmdsZUNoYXJhY3RlckRhdGFOb2RlOiExLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudD1udWxsLHRoaXMuX25leHQ9dGhpcy5fZmlyc3R9LGhhc05leHQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX25leHR9LG5leHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jdXJyZW50PXRoaXMuX25leHQ7cmV0dXJuIGEmJih0aGlzLl9uZXh0PWEhPT10aGlzLl9sYXN0P2EubmV4dFNpYmxpbmc6bnVsbCxlYihhKSYmdGhpcy5jbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzJiYoYT09PXRoaXMuZWMmJihhPWEuY2xvbmVOb2RlKCEwKSkuZGVsZXRlRGF0YSh0aGlzLmVvLGEubGVuZ3RoLXRoaXMuZW8pLHRoaXMuX2N1cnJlbnQ9PT10aGlzLnNjJiYoYT1hLmNsb25lTm9kZSghMCkpLmRlbGV0ZURhdGEoMCx0aGlzLnNvKSkpLGF9LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBhLGIsYz10aGlzLl9jdXJyZW50OyFlYihjKXx8YyE9PXRoaXMuc2MmJmMhPT10aGlzLmVjP2MucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpOihhPWM9PT10aGlzLnNjP3RoaXMuc286MCxiPWM9PT10aGlzLmVjP3RoaXMuZW86Yy5sZW5ndGgsYSE9YiYmYy5kZWxldGVEYXRhKGEsYi1hKSl9LGlzUGFydGlhbGx5U2VsZWN0ZWRTdWJ0cmVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY3VycmVudDtyZXR1cm4gYihhLHRoaXMucmFuZ2UpfSxnZXRTdWJ0cmVlSXRlcmF0b3I6ZnVuY3Rpb24oKXt2YXIgYSxiLGQsZSxmLGc7cmV0dXJuIHRoaXMuaXNTaW5nbGVDaGFyYWN0ZXJEYXRhTm9kZT8oYT10aGlzLnJhbmdlLmNsb25lUmFuZ2UoKSxhLmNvbGxhcHNlKCExKSk6KGE9bmV3IEgoYyh0aGlzLnJhbmdlKSksYj10aGlzLl9jdXJyZW50LGQ9YixlPTAsZj1iLGc9bGIoYiksZ2IoYix0aGlzLnNjKSYmKGQ9dGhpcy5zYyxlPXRoaXMuc28pLGdiKGIsdGhpcy5lYykmJihmPXRoaXMuZWMsZz10aGlzLmVvKSxHKGEsZCxlLGYsZykpLG5ldyBuKGEsdGhpcy5jbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzKX0sZGV0YWNoOmZ1bmN0aW9uKCl7dGhpcy5yYW5nZT10aGlzLl9jdXJyZW50PXRoaXMuX25leHQ9dGhpcy5fZmlyc3Q9dGhpcy5fbGFzdD10aGlzLnNjPXRoaXMuc289dGhpcy5lYz10aGlzLmVvPW51bGx9fSxJPVsxLDMsNCw1LDcsOCwxMF0sSj1bMiw5LDExXSxLPVs1LDYsMTAsMTJdLEw9WzEsMyw0LDUsNyw4LDEwLDExXSxNPVsxLDMsNCw1LDcsOF0sTj1vKFs5LDExXSksTz1vKEspLFA9byhbNiwxMCwxMl0pLFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLFI9ITE7dHJ5e1EuaW5uZXJIVE1MPVwiPGI+eDwvYj5cIixSPTM9PVEuZmlyc3RDaGlsZC5ub2RlVHlwZX1jYXRjaChwYil7fWEuZmVhdHVyZXMuaHRtbFBhcnNpbmdDb25mb3Jtcz1SLFM9Uj9mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMuc3RhcnRDb250YWluZXIsZD1oYihjKTtpZighYyl0aHJvdyBuZXcgZGIoXCJJTlZBTElEX1NUQVRFX0VSUlwiKTtyZXR1cm4gYj1udWxsLDE9PWMubm9kZVR5cGU/Yj1jOmViKGMpJiYoYj1hYi5wYXJlbnRFbGVtZW50KGMpKSxiPW51bGw9PT1ifHxcIkhUTUxcIj09Yi5ub2RlTmFtZSYmYWIuaXNIdG1sTmFtZXNwYWNlKGhiKGIpLmRvY3VtZW50RWxlbWVudCkmJmFiLmlzSHRtbE5hbWVzcGFjZShiKT9kLmNyZWF0ZUVsZW1lbnQoXCJib2R5XCIpOmIuY2xvbmVOb2RlKCExKSxiLmlubmVySFRNTD1hLGFiLmZyYWdtZW50RnJvbU5vZGVDaGlsZHJlbihiKX06ZnVuY3Rpb24oYSl7dmFyIGI9Yyh0aGlzKSxkPWIuY3JlYXRlRWxlbWVudChcImJvZHlcIik7cmV0dXJuIGQuaW5uZXJIVE1MPWEsYWIuZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuKGQpfSxUPVtcInN0YXJ0Q29udGFpbmVyXCIsXCJzdGFydE9mZnNldFwiLFwiZW5kQ29udGFpbmVyXCIsXCJlbmRPZmZzZXRcIixcImNvbGxhcHNlZFwiLFwiY29tbW9uQW5jZXN0b3JDb250YWluZXJcIl0sVT0wLFY9MSxXPTIsWD0zLFk9MCxaPTEsJD0yLF89MyxiYi5leHRlbmQoYS5yYW5nZVByb3RvdHlwZSx7Y29tcGFyZUJvdW5kYXJ5UG9pbnRzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoO3JldHVybiB5KHRoaXMpLHModGhpcy5zdGFydENvbnRhaW5lcixiLnN0YXJ0Q29udGFpbmVyKSxnPWE9PVh8fGE9PVU/XCJzdGFydFwiOlwiZW5kXCIsaD1hPT1WfHxhPT1VP1wic3RhcnRcIjpcImVuZFwiLGM9dGhpc1tnK1wiQ29udGFpbmVyXCJdLGQ9dGhpc1tnK1wiT2Zmc2V0XCJdLGU9YltoK1wiQ29udGFpbmVyXCJdLGY9YltoK1wiT2Zmc2V0XCJdLGliKGMsZCxlLGYpfSxpbnNlcnROb2RlOmZ1bmN0aW9uKGEpe2lmKHkodGhpcykscShhLEwpLHQodGhpcy5zdGFydENvbnRhaW5lciksZ2IoYSx0aGlzLnN0YXJ0Q29udGFpbmVyKSl0aHJvdyBuZXcgZGIoXCJISUVSQVJDSFlfUkVRVUVTVF9FUlJcIik7dmFyIGI9ZihhLHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCk7dGhpcy5zZXRTdGFydEJlZm9yZShiKX0sY2xvbmVDb250ZW50czpmdW5jdGlvbigpe3ZhciBhLGIsZDtyZXR1cm4geSh0aGlzKSx0aGlzLmNvbGxhcHNlZD9jKHRoaXMpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTp0aGlzLnN0YXJ0Q29udGFpbmVyPT09dGhpcy5lbmRDb250YWluZXImJmViKHRoaXMuc3RhcnRDb250YWluZXIpPyhhPXRoaXMuc3RhcnRDb250YWluZXIuY2xvbmVOb2RlKCEwKSxhLmRhdGE9YS5kYXRhLnNsaWNlKHRoaXMuc3RhcnRPZmZzZXQsdGhpcy5lbmRPZmZzZXQpLGI9Yyh0aGlzKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYi5hcHBlbmRDaGlsZChhKSxiKTooZD1uZXcgbih0aGlzLCEwKSxhPWgoZCksZC5kZXRhY2goKSxhKX0sY2FuU3Vycm91bmRDb250ZW50czpmdW5jdGlvbigpe3ZhciBhLGM7cmV0dXJuIHkodGhpcyksdCh0aGlzLnN0YXJ0Q29udGFpbmVyKSx0KHRoaXMuZW5kQ29udGFpbmVyKSxhPW5ldyBuKHRoaXMsITApLGM9YS5fZmlyc3QmJmIoYS5fZmlyc3QsdGhpcyl8fGEuX2xhc3QmJmIoYS5fbGFzdCx0aGlzKSxhLmRldGFjaCgpLCFjfSxzdXJyb3VuZENvbnRlbnRzOmZ1bmN0aW9uKGEpe2lmKHEoYSxNKSwhdGhpcy5jYW5TdXJyb3VuZENvbnRlbnRzKCkpdGhyb3cgbmV3IGRiKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7dmFyIGI9dGhpcy5leHRyYWN0Q29udGVudHMoKTtpZihhLmhhc0NoaWxkTm9kZXMoKSlmb3IoO2EubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEubGFzdENoaWxkKTtmKGEsdGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0KSxhLmFwcGVuZENoaWxkKGIpLHRoaXMuc2VsZWN0Tm9kZShhKX0sY2xvbmVSYW5nZTpmdW5jdGlvbigpe3ZhciBhLGIsZDtmb3IoeSh0aGlzKSxhPW5ldyBIKGModGhpcykpLGI9VC5sZW5ndGg7Yi0tOylkPVRbYl0sYVtkXT10aGlzW2RdO3JldHVybiBhfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBhLGIsYztyZXR1cm4geSh0aGlzKSxhPXRoaXMuc3RhcnRDb250YWluZXIsYT09PXRoaXMuZW5kQ29udGFpbmVyJiZlYihhKT8zPT1hLm5vZGVUeXBlfHw0PT1hLm5vZGVUeXBlP2EuZGF0YS5zbGljZSh0aGlzLnN0YXJ0T2Zmc2V0LHRoaXMuZW5kT2Zmc2V0KTpcIlwiOihiPVtdLGM9bmV3IG4odGhpcywhMCksaShjLGZ1bmN0aW9uKGEpeygzPT1hLm5vZGVUeXBlfHw0PT1hLm5vZGVUeXBlKSYmYi5wdXNoKGEuZGF0YSl9KSxjLmRldGFjaCgpLGIuam9pbihcIlwiKSl9LGNvbXBhcmVOb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlO2lmKHkodGhpcyksYj1hLnBhcmVudE5vZGUsYz1mYihhKSwhYil0aHJvdyBuZXcgZGIoXCJOT1RfRk9VTkRfRVJSXCIpO3JldHVybiBkPXRoaXMuY29tcGFyZVBvaW50KGIsYyksZT10aGlzLmNvbXBhcmVQb2ludChiLGMrMSksMD5kP2U+MD8kOlk6ZT4wP1o6X30sY29tcGFyZVBvaW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHkodGhpcyksdShhLFwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSXCIpLHMoYSx0aGlzLnN0YXJ0Q29udGFpbmVyKSxpYihhLGIsdGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0KTwwPy0xOmliKGEsYix0aGlzLmVuZENvbnRhaW5lcix0aGlzLmVuZE9mZnNldCk+MD8xOjB9LGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudDpTLHRvSHRtbDpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMpfSxpbnRlcnNlY3RzTm9kZTpmdW5jdGlvbihhLGIpe3ZhciBkLGUsZixnO3JldHVybiB5KHRoaXMpLHUoYSxcIk5PVF9GT1VORF9FUlJcIiksaGIoYSkhPT1jKHRoaXMpPyExOihkPWEucGFyZW50Tm9kZSxlPWZiKGEpLHUoZCxcIk5PVF9GT1VORF9FUlJcIiksZj1pYihkLGUsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQpLGc9aWIoZCxlKzEsdGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0KSxiPzA+PWYmJmc+PTA6MD5mJiZnPjApfSxpc1BvaW50SW5SYW5nZTpmdW5jdGlvbihhLGIpe3JldHVybiB5KHRoaXMpLHUoYSxcIkhJRVJBUkNIWV9SRVFVRVNUX0VSUlwiKSxzKGEsdGhpcy5zdGFydENvbnRhaW5lciksaWIoYSxiLHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCk+PTAmJmliKGEsYix0aGlzLmVuZENvbnRhaW5lcix0aGlzLmVuZE9mZnNldCk8PTB9LGludGVyc2VjdHNSYW5nZTpmdW5jdGlvbihhKXtyZXR1cm4gZyh0aGlzLGEsITEpfSxpbnRlcnNlY3RzT3JUb3VjaGVzUmFuZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGcodGhpcyxhLCEwKX0saW50ZXJzZWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzUmFuZ2UoYSk/KGI9aWIodGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0LGEuc3RhcnRDb250YWluZXIsYS5zdGFydE9mZnNldCksYz1pYih0aGlzLmVuZENvbnRhaW5lcix0aGlzLmVuZE9mZnNldCxhLmVuZENvbnRhaW5lcixhLmVuZE9mZnNldCksZD10aGlzLmNsb25lUmFuZ2UoKSwtMT09YiYmZC5zZXRTdGFydChhLnN0YXJ0Q29udGFpbmVyLGEuc3RhcnRPZmZzZXQpLDE9PWMmJmQuc2V0RW5kKGEuZW5kQ29udGFpbmVyLGEuZW5kT2Zmc2V0KSxkKTpudWxsfSx1bmlvbjpmdW5jdGlvbihhKXtpZih0aGlzLmludGVyc2VjdHNPclRvdWNoZXNSYW5nZShhKSl7dmFyIGI9dGhpcy5jbG9uZVJhbmdlKCk7cmV0dXJuLTE9PWliKGEuc3RhcnRDb250YWluZXIsYS5zdGFydE9mZnNldCx0aGlzLnN0YXJ0Q29udGFpbmVyLHRoaXMuc3RhcnRPZmZzZXQpJiZiLnNldFN0YXJ0KGEuc3RhcnRDb250YWluZXIsYS5zdGFydE9mZnNldCksMT09aWIoYS5lbmRDb250YWluZXIsYS5lbmRPZmZzZXQsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQpJiZiLnNldEVuZChhLmVuZENvbnRhaW5lcixhLmVuZE9mZnNldCksYn10aHJvdyBuZXcgZGIoXCJSYW5nZXMgZG8gbm90IGludGVyc2VjdFwiKX0sY29udGFpbnNOb2RlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/dGhpcy5pbnRlcnNlY3RzTm9kZShhLCExKTp0aGlzLmNvbXBhcmVOb2RlKGEpPT1ffSxjb250YWluc05vZGVDb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQoYSwwKT49MCYmdGhpcy5jb21wYXJlUG9pbnQoYSxsYihhKSk8PTB9LGNvbnRhaW5zUmFuZ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcnNlY3Rpb24oYSk7cmV0dXJuIG51bGwhPT1iJiZhLmVxdWFscyhiKX0sY29udGFpbnNOb2RlVGV4dDpmdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy5jbG9uZVJhbmdlKCk7cmV0dXJuIGQuc2VsZWN0Tm9kZShhKSxiPWQuZ2V0Tm9kZXMoWzNdKSxiLmxlbmd0aD4wPyhkLnNldFN0YXJ0KGJbMF0sMCksYz1iLnBvcCgpLGQuc2V0RW5kKGMsYy5sZW5ndGgpLHRoaXMuY29udGFpbnNSYW5nZShkKSk6dGhpcy5jb250YWluc05vZGVDb250ZW50cyhhKX0sZ2V0Tm9kZXM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4geSh0aGlzKSxsKHRoaXMsYSxiKX0sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKX0sY29sbGFwc2VCZWZvcmU6ZnVuY3Rpb24oYSl7dGhpcy5zZXRFbmRCZWZvcmUoYSksdGhpcy5jb2xsYXBzZSghMSl9LGNvbGxhcHNlQWZ0ZXI6ZnVuY3Rpb24oYSl7dGhpcy5zZXRTdGFydEFmdGVyKGEpLHRoaXMuY29sbGFwc2UoITApfSxnZXRCb29rbWFyazpmdW5jdGlvbihiKXt2YXIgZCxlLGYsZz1jKHRoaXMpLGg9YS5jcmVhdGVSYW5nZShnKTtyZXR1cm4gYj1ifHxhYi5nZXRCb2R5KGcpLGguc2VsZWN0Tm9kZUNvbnRlbnRzKGIpLGQ9dGhpcy5pbnRlcnNlY3Rpb24oaCksZT0wLGY9MCxkJiYoaC5zZXRFbmQoZC5zdGFydENvbnRhaW5lcixkLnN0YXJ0T2Zmc2V0KSxlPShcIlwiK2gpLmxlbmd0aCxmPWUrKFwiXCIrZCkubGVuZ3RoKSx7c3RhcnQ6ZSxlbmQ6Zixjb250YWluZXJOb2RlOmJ9fSxtb3ZlVG9Cb29rbWFyazpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPWEuY29udGFpbmVyTm9kZSxqPTA7Zm9yKHRoaXMuc2V0U3RhcnQoaSwwKSx0aGlzLmNvbGxhcHNlKCEwKSxiPVtpXSxkPSExLGU9ITE7IWUmJihjPWIucG9wKCkpOylpZigzPT1jLm5vZGVUeXBlKWY9aitjLmxlbmd0aCwhZCYmYS5zdGFydD49aiYmYS5zdGFydDw9ZiYmKHRoaXMuc2V0U3RhcnQoYyxhLnN0YXJ0LWopLGQ9ITApLGQmJmEuZW5kPj1qJiZhLmVuZDw9ZiYmKHRoaXMuc2V0RW5kKGMsYS5lbmQtaiksZT0hMCksaj1mO2Vsc2UgZm9yKGg9Yy5jaGlsZE5vZGVzLGc9aC5sZW5ndGg7Zy0tOyliLnB1c2goaFtnXSl9LGdldE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm5cIkRvbVJhbmdlXCJ9LGVxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gSC5yYW5nZXNFcXVhbCh0aGlzLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcyl9LGluc3BlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzKX0sZGV0YWNoOmZ1bmN0aW9uKCl7fX0pLEUoSCxHKSxiYi5leHRlbmQoSCx7cmFuZ2VQcm9wZXJ0aWVzOlQsUmFuZ2VJdGVyYXRvcjpuLGNvcHlDb21wYXJpc29uQ29uc3RhbnRzOkMsY3JlYXRlUHJvdG90eXBlUmFuZ2U6RSxpbnNwZWN0Om0sdG9IdG1sOkEsZ2V0UmFuZ2VEb2N1bWVudDpjLHJhbmdlc0VxdWFsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRDb250YWluZXI9PT1iLnN0YXJ0Q29udGFpbmVyJiZhLnN0YXJ0T2Zmc2V0PT09Yi5zdGFydE9mZnNldCYmYS5lbmRDb250YWluZXI9PT1iLmVuZENvbnRhaW5lciYmYS5lbmRPZmZzZXQ9PT1iLmVuZE9mZnNldH19KSxhLkRvbVJhbmdlPUh9KSxILmNyZWF0ZUNvcmVNb2R1bGUoXCJXcmFwcGVkUmFuZ2VcIixbXCJEb21SYW5nZVwiXSxmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaz1hLmRvbSxsPWEudXRpbCxtPWsuRG9tUG9zaXRpb24sbj1hLkRvbVJhbmdlLG89ay5nZXRCb2R5LHA9ay5nZXRDb250ZW50RG9jdW1lbnQscT1rLmlzQ2hhcmFjdGVyRGF0YU5vZGU7YS5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2UmJiFmdW5jdGlvbigpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiLGM9cy5sZW5ndGg7Yy0tOyliPXNbY10sYVtiXT1hLm5hdGl2ZVJhbmdlW2JdO2EuY29sbGFwc2VkPWEuc3RhcnRDb250YWluZXI9PT1hLmVuZENvbnRhaW5lciYmYS5zdGFydE9mZnNldD09PWEuZW5kT2Zmc2V0fWZ1bmN0aW9uIGUoYSxiLGMsZCxlKXt2YXIgZj1hLnN0YXJ0Q29udGFpbmVyIT09Ynx8YS5zdGFydE9mZnNldCE9YyxnPWEuZW5kQ29udGFpbmVyIT09ZHx8YS5lbmRPZmZzZXQhPWUsaD0hYS5lcXVhbHMoYS5uYXRpdmVSYW5nZSk7KGZ8fGd8fGgpJiYoYS5zZXRFbmQoZCxlKSxhLnNldFN0YXJ0KGIsYykpfXZhciBmLGcsaCxpLGosbSxxLHIscz1uLnJhbmdlUHJvcGVydGllcztjPWZ1bmN0aW9uKGEpe2lmKCFhKXRocm93IGIuY3JlYXRlRXJyb3IoXCJXcmFwcGVkUmFuZ2U6IFJhbmdlIG11c3QgYmUgc3BlY2lmaWVkXCIpO3RoaXMubmF0aXZlUmFuZ2U9YSxkKHRoaXMpfSxuLmNyZWF0ZVByb3RvdHlwZVJhbmdlKGMsZSksZj1jLnByb3RvdHlwZSxmLnNlbGVjdE5vZGU9ZnVuY3Rpb24oYSl7dGhpcy5uYXRpdmVSYW5nZS5zZWxlY3ROb2RlKGEpLGQodGhpcyl9LGYuY2xvbmVDb250ZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNsb25lQ29udGVudHMoKX0sZi5zdXJyb3VuZENvbnRlbnRzPWZ1bmN0aW9uKGEpe3RoaXMubmF0aXZlUmFuZ2Uuc3Vycm91bmRDb250ZW50cyhhKSxkKHRoaXMpfSxmLmNvbGxhcHNlPWZ1bmN0aW9uKGEpe3RoaXMubmF0aXZlUmFuZ2UuY29sbGFwc2UoYSksZCh0aGlzKX0sZi5jbG9uZVJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMubmF0aXZlUmFuZ2UuY2xvbmVSYW5nZSgpKX0sZi5yZWZyZXNoPWZ1bmN0aW9uKCl7ZCh0aGlzKX0sZi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiXCIrdGhpcy5uYXRpdmVSYW5nZX0saD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInRlc3RcIiksbyhkb2N1bWVudCkuYXBwZW5kQ2hpbGQoaCksaT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGkuc2V0U3RhcnQoaCwwKSxpLnNldEVuZChoLDApO3RyeXtpLnNldFN0YXJ0KGgsMSksZi5zZXRTdGFydD1mdW5jdGlvbihhLGIpe3RoaXMubmF0aXZlUmFuZ2Uuc2V0U3RhcnQoYSxiKSxkKHRoaXMpfSxmLnNldEVuZD1mdW5jdGlvbihhLGIpe3RoaXMubmF0aXZlUmFuZ2Uuc2V0RW5kKGEsYiksZCh0aGlzKX0sZz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5uYXRpdmVSYW5nZVthXShiKSxkKHRoaXMpfX19Y2F0Y2godCl7Zi5zZXRTdGFydD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLm5hdGl2ZVJhbmdlLnNldFN0YXJ0KGEsYil9Y2F0Y2goYyl7dGhpcy5uYXRpdmVSYW5nZS5zZXRFbmQoYSxiKSx0aGlzLm5hdGl2ZVJhbmdlLnNldFN0YXJ0KGEsYil9ZCh0aGlzKX0sZi5zZXRFbmQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy5uYXRpdmVSYW5nZS5zZXRFbmQoYSxiKX1jYXRjaChjKXt0aGlzLm5hdGl2ZVJhbmdlLnNldFN0YXJ0KGEsYiksdGhpcy5uYXRpdmVSYW5nZS5zZXRFbmQoYSxiKX1kKHRoaXMpfSxnPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMpe3RyeXt0aGlzLm5hdGl2ZVJhbmdlW2FdKGMpfWNhdGNoKGUpe3RoaXMubmF0aXZlUmFuZ2VbYl0oYyksdGhpcy5uYXRpdmVSYW5nZVthXShjKX1kKHRoaXMpfX19Zi5zZXRTdGFydEJlZm9yZT1nKFwic2V0U3RhcnRCZWZvcmVcIixcInNldEVuZEJlZm9yZVwiKSxmLnNldFN0YXJ0QWZ0ZXI9ZyhcInNldFN0YXJ0QWZ0ZXJcIixcInNldEVuZEFmdGVyXCIpLGYuc2V0RW5kQmVmb3JlPWcoXCJzZXRFbmRCZWZvcmVcIixcInNldFN0YXJ0QmVmb3JlXCIpLGYuc2V0RW5kQWZ0ZXI9ZyhcInNldEVuZEFmdGVyXCIsXCJzZXRTdGFydEFmdGVyXCIpLGYuc2VsZWN0Tm9kZUNvbnRlbnRzPWZ1bmN0aW9uKGEpe3RoaXMuc2V0U3RhcnRBbmRFbmQoYSwwLGsuZ2V0Tm9kZUxlbmd0aChhKSl9LGkuc2VsZWN0Tm9kZUNvbnRlbnRzKGgpLGkuc2V0RW5kKGgsMyksaj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGouc2VsZWN0Tm9kZUNvbnRlbnRzKGgpLGouc2V0RW5kKGgsNCksai5zZXRTdGFydChoLDIpLGYuY29tcGFyZUJvdW5kYXJ5UG9pbnRzPS0xPT1pLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhpLlNUQVJUX1RPX0VORCxqKSYmMT09aS5jb21wYXJlQm91bmRhcnlQb2ludHMoaS5FTkRfVE9fU1RBUlQsaik/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1iLm5hdGl2ZVJhbmdlfHxiLGE9PWIuU1RBUlRfVE9fRU5EP2E9Yi5FTkRfVE9fU1RBUlQ6YT09Yi5FTkRfVE9fU1RBUlQmJihhPWIuU1RBUlRfVE9fRU5EKSx0aGlzLm5hdGl2ZVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLGIpfTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLGIubmF0aXZlUmFuZ2V8fGIpfSxtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbS5pbm5lckhUTUw9XCIxMjNcIixxPW0uZmlyc3RDaGlsZCxyPW8oZG9jdW1lbnQpLHIuYXBwZW5kQ2hpbGQobSksaS5zZXRTdGFydChxLDEpLGkuc2V0RW5kKHEsMiksaS5kZWxldGVDb250ZW50cygpLFwiMTNcIj09cS5kYXRhJiYoZi5kZWxldGVDb250ZW50cz1mdW5jdGlvbigpe3RoaXMubmF0aXZlUmFuZ2UuZGVsZXRlQ29udGVudHMoKSxkKHRoaXMpfSxmLmV4dHJhY3RDb250ZW50cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmF0aXZlUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7cmV0dXJuIGQodGhpcyksYX0pLHIucmVtb3ZlQ2hpbGQobSkscj1udWxsLGwuaXNIb3N0TWV0aG9kKGksXCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnRcIikmJihmLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYXRpdmVSYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoYSl9KSxvKGRvY3VtZW50KS5yZW1vdmVDaGlsZChoKSxmLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm5cIldyYXBwZWRSYW5nZVwifSxhLldyYXBwZWRSYW5nZT1jLGEuY3JlYXRlTmF0aXZlUmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9cChhLGIsXCJjcmVhdGVOYXRpdmVSYW5nZVwiKSxhLmNyZWF0ZVJhbmdlKCl9fSgpLGEuZmVhdHVyZXMuaW1wbGVtZW50c1RleHRSYW5nZSYmKGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9YS5wYXJlbnRFbGVtZW50KCksZj1hLmR1cGxpY2F0ZSgpO3JldHVybiBmLmNvbGxhcHNlKCEwKSxiPWYucGFyZW50RWxlbWVudCgpLGY9YS5kdXBsaWNhdGUoKSxmLmNvbGxhcHNlKCExKSxjPWYucGFyZW50RWxlbWVudCgpLGQ9Yj09Yz9iOmsuZ2V0Q29tbW9uQW5jZXN0b3IoYixjKSxkPT1lP2Q6ay5nZXRDb21tb25BbmNlc3RvcihlLGQpfSxmPWZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmNvbXBhcmVFbmRQb2ludHMoXCJTdGFydFRvRW5kXCIsYSl9LGc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGwsbixvLHAscixzLHQsdSx2LHcseCx5PWEuZHVwbGljYXRlKCk7aWYoeS5jb2xsYXBzZShjKSxmPXkucGFyZW50RWxlbWVudCgpLGsuaXNPcklzQW5jZXN0b3JPZihiLGYpfHwoZj1iKSwhZi5jYW5IYXZlSFRNTClyZXR1cm4gZz1uZXcgbShmLnBhcmVudE5vZGUsay5nZXROb2RlSW5kZXgoZikpLHtib3VuZGFyeVBvc2l0aW9uOmcsbm9kZUluZm86e25vZGVJbmRleDpnLm9mZnNldCxjb250YWluZXJFbGVtZW50Omcubm9kZX19O2ZvcihoPWsuZ2V0RG9jdW1lbnQoZikuY3JlYXRlRWxlbWVudChcInNwYW5cIiksaC5wYXJlbnROb2RlJiZoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksaj1jP1wiU3RhcnRUb1N0YXJ0XCI6XCJTdGFydFRvRW5kXCIscj1lJiZlLmNvbnRhaW5lckVsZW1lbnQ9PWY/ZS5ub2RlSW5kZXg6MCxzPWYuY2hpbGROb2Rlcy5sZW5ndGgsdD1zLHU9dDs7KXtpZih1PT1zP2YuYXBwZW5kQ2hpbGQoaCk6Zi5pbnNlcnRCZWZvcmUoaCxmLmNoaWxkTm9kZXNbdV0pLHkubW92ZVRvRWxlbWVudFRleHQoaCksaT15LmNvbXBhcmVFbmRQb2ludHMoaixhKSwwPT1pfHxyPT10KWJyZWFrO2lmKC0xPT1pKXtpZih0PT1yKzEpYnJlYWs7cj11fWVsc2UgdD10PT1yKzE/cjp1O3U9TWF0aC5mbG9vcigocit0KS8yKSxmLnJlbW92ZUNoaWxkKGgpfWlmKHA9aC5uZXh0U2libGluZywtMT09aSYmcCYmcShwKSl7aWYoeS5zZXRFbmRQb2ludChjP1wiRW5kVG9TdGFydFwiOlwiRW5kVG9FbmRcIixhKSwvW1xcclxcbl0vLnRlc3QocC5kYXRhKSlmb3Iodz15LmR1cGxpY2F0ZSgpLHg9dy50ZXh0LnJlcGxhY2UoL1xcclxcbi9nLFwiXFxyXCIpLmxlbmd0aCx2PXcubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIseCk7LTE9PShpPXcuY29tcGFyZUVuZFBvaW50cyhcIlN0YXJ0VG9FbmRcIix3KSk7KXYrKyx3Lm1vdmVTdGFydChcImNoYXJhY3RlclwiLDEpO2Vsc2Ugdj15LnRleHQubGVuZ3RoO289bmV3IG0ocCx2KX1lbHNlIGw9KGR8fCFjKSYmaC5wcmV2aW91c1NpYmxpbmcsbj0oZHx8YykmJmgubmV4dFNpYmxpbmcsbz1uJiZxKG4pP25ldyBtKG4sMCk6bCYmcShsKT9uZXcgbShsLGwuZGF0YS5sZW5ndGgpOm5ldyBtKGYsay5nZXROb2RlSW5kZXgoaCkpO3JldHVybiBoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCkse2JvdW5kYXJ5UG9zaXRpb246byxub2RlSW5mbzp7bm9kZUluZGV4OnUsY29udGFpbmVyRWxlbWVudDpmfX19LGg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPWEub2Zmc2V0LGg9ay5nZXREb2N1bWVudChhLm5vZGUpLGk9byhoKS5jcmVhdGVUZXh0UmFuZ2UoKSxqPXEoYS5ub2RlKTtyZXR1cm4gaj8oYz1hLm5vZGUsZD1jLnBhcmVudE5vZGUpOihmPWEubm9kZS5jaGlsZE5vZGVzLGM9ZzxmLmxlbmd0aD9mW2ddOm51bGwsZD1hLm5vZGUpLGU9aC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxlLmlubmVySFRNTD1cIiYjZmVmZjtcIixjP2QuaW5zZXJ0QmVmb3JlKGUsYyk6ZC5hcHBlbmRDaGlsZChlKSxpLm1vdmVUb0VsZW1lbnRUZXh0KGUpLGkuY29sbGFwc2UoIWIpLGQucmVtb3ZlQ2hpbGQoZSksaiYmaVtiP1wibW92ZVN0YXJ0XCI6XCJtb3ZlRW5kXCJdKFwiY2hhcmFjdGVyXCIsZyksaX0sZD1mdW5jdGlvbihhKXt0aGlzLnRleHRSYW5nZT1hLHRoaXMucmVmcmVzaCgpfSxkLnByb3RvdHlwZT1uZXcgbihkb2N1bWVudCksZC5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkPWUodGhpcy50ZXh0UmFuZ2UpO1xuZih0aGlzLnRleHRSYW5nZSk/Yj1hPWcodGhpcy50ZXh0UmFuZ2UsZCwhMCwhMCkuYm91bmRhcnlQb3NpdGlvbjooYz1nKHRoaXMudGV4dFJhbmdlLGQsITAsITEpLGE9Yy5ib3VuZGFyeVBvc2l0aW9uLGI9Zyh0aGlzLnRleHRSYW5nZSxkLCExLCExLGMubm9kZUluZm8pLmJvdW5kYXJ5UG9zaXRpb24pLHRoaXMuc2V0U3RhcnQoYS5ub2RlLGEub2Zmc2V0KSx0aGlzLnNldEVuZChiLm5vZGUsYi5vZmZzZXQpfSxkLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuXCJXcmFwcGVkVGV4dFJhbmdlXCJ9LG4uY29weUNvbXBhcmlzb25Db25zdGFudHMoZCksaT1mdW5jdGlvbihhKXt2YXIgYixjLGQ7cmV0dXJuIGEuY29sbGFwc2VkP2gobmV3IG0oYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KSwhMCk6KGI9aChuZXcgbShhLnN0YXJ0Q29udGFpbmVyLGEuc3RhcnRPZmZzZXQpLCEwKSxjPWgobmV3IG0oYS5lbmRDb250YWluZXIsYS5lbmRPZmZzZXQpLCExKSxkPW8obi5nZXRSYW5nZURvY3VtZW50KGEpKS5jcmVhdGVUZXh0UmFuZ2UoKSxkLnNldEVuZFBvaW50KFwiU3RhcnRUb1N0YXJ0XCIsYiksZC5zZXRFbmRQb2ludChcIkVuZFRvRW5kXCIsYyksZCl9LGQucmFuZ2VUb1RleHRSYW5nZT1pLGQucHJvdG90eXBlLnRvVGV4dFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyl9LGEuV3JhcHBlZFRleHRSYW5nZT1kLCghYS5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2V8fGEuY29uZmlnLnByZWZlclRleHRSYW5nZSkmJihqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCksdm9pZCAwPT09ai5SYW5nZSYmKGouUmFuZ2U9ZCksYS5jcmVhdGVOYXRpdmVSYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYT1wKGEsYixcImNyZWF0ZU5hdGl2ZVJhbmdlXCIpLG8oYSkuY3JlYXRlVGV4dFJhbmdlKCl9LGEuV3JhcHBlZFJhbmdlPWQpKSxhLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKGMpe3JldHVybiBjPXAoYyxiLFwiY3JlYXRlUmFuZ2VcIiksbmV3IGEuV3JhcHBlZFJhbmdlKGEuY3JlYXRlTmF0aXZlUmFuZ2UoYykpfSxhLmNyZWF0ZVJhbmd5UmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9cChhLGIsXCJjcmVhdGVSYW5neVJhbmdlXCIpLG5ldyBuKGEpfSxhLmNyZWF0ZUlmcmFtZVJhbmdlPWZ1bmN0aW9uKGMpe3JldHVybiBiLmRlcHJlY2F0aW9uTm90aWNlKFwiY3JlYXRlSWZyYW1lUmFuZ2UoKVwiLFwiY3JlYXRlUmFuZ2UoaWZyYW1lRWwpXCIpLGEuY3JlYXRlUmFuZ2UoYyl9LGEuY3JlYXRlSWZyYW1lUmFuZ3lSYW5nZT1mdW5jdGlvbihjKXtyZXR1cm4gYi5kZXByZWNhdGlvbk5vdGljZShcImNyZWF0ZUlmcmFtZVJhbmd5UmFuZ2UoKVwiLFwiY3JlYXRlUmFuZ3lSYW5nZShpZnJhbWVFbClcIiksYS5jcmVhdGVSYW5neVJhbmdlKGMpfSxhLmFkZFNoaW1MaXN0ZW5lcihmdW5jdGlvbihiKXt2YXIgYz1iLmRvY3VtZW50O3ZvaWQgMD09PWMuY3JlYXRlUmFuZ2UmJihjLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlUmFuZ2UoYyl9KSxjPWI9bnVsbH0pfSksSC5jcmVhdGVDb3JlTW9kdWxlKFwiV3JhcHBlZFNlbGVjdGlvblwiLFtcIkRvbVJhbmdlXCIsXCJXcmFwcGVkUmFuZ2VcIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhPy9eYmFja3dhcmQocyk/JC9pLnRlc3QoYSk6ISFhfWZ1bmN0aW9uIGQoYSxjKXtpZihhKXtpZihBLmlzV2luZG93KGEpKXJldHVybiBhO2lmKGEgaW5zdGFuY2VvZiByKXJldHVybiBhLndpbjt2YXIgZD1BLmdldENvbnRlbnREb2N1bWVudChhLGIsYyk7cmV0dXJuIEEuZ2V0V2luZG93KGQpfXJldHVybiB3aW5kb3d9ZnVuY3Rpb24gZShhKXtyZXR1cm4gZChhLFwiZ2V0V2luU2VsZWN0aW9uXCIpLmdldFNlbGVjdGlvbigpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGQoYSxcImdldERvY1NlbGVjdGlvblwiKS5kb2N1bWVudC5zZWxlY3Rpb259ZnVuY3Rpb24gZyhhKXt2YXIgYj0hMTtyZXR1cm4gYS5hbmNob3JOb2RlJiYoYj0xPT1BLmNvbXBhcmVQb2ludHMoYS5hbmNob3JOb2RlLGEuYW5jaG9yT2Zmc2V0LGEuZm9jdXNOb2RlLGEuZm9jdXNPZmZzZXQpKSxifWZ1bmN0aW9uIGgoYSxiLGMpe3ZhciBkPWM/XCJlbmRcIjpcInN0YXJ0XCIsZT1jP1wic3RhcnRcIjpcImVuZFwiO2EuYW5jaG9yTm9kZT1iW2QrXCJDb250YWluZXJcIl0sYS5hbmNob3JPZmZzZXQ9YltkK1wiT2Zmc2V0XCJdLGEuZm9jdXNOb2RlPWJbZStcIkNvbnRhaW5lclwiXSxhLmZvY3VzT2Zmc2V0PWJbZStcIk9mZnNldFwiXX1mdW5jdGlvbiBpKGEpe3ZhciBiPWEubmF0aXZlU2VsZWN0aW9uO2EuYW5jaG9yTm9kZT1iLmFuY2hvck5vZGUsYS5hbmNob3JPZmZzZXQ9Yi5hbmNob3JPZmZzZXQsYS5mb2N1c05vZGU9Yi5mb2N1c05vZGUsYS5mb2N1c09mZnNldD1iLmZvY3VzT2Zmc2V0fWZ1bmN0aW9uIGooYSl7YS5hbmNob3JOb2RlPWEuZm9jdXNOb2RlPW51bGwsYS5hbmNob3JPZmZzZXQ9YS5mb2N1c09mZnNldD0wLGEucmFuZ2VDb3VudD0wLGEuaXNDb2xsYXBzZWQ9ITAsYS5fcmFuZ2VzLmxlbmd0aD0wfWZ1bmN0aW9uIGsoYil7dmFyIGM7cmV0dXJuIGIgaW5zdGFuY2VvZiBEPyhjPWEuY3JlYXRlTmF0aXZlUmFuZ2UoYi5nZXREb2N1bWVudCgpKSxjLnNldEVuZChiLmVuZENvbnRhaW5lcixiLmVuZE9mZnNldCksYy5zZXRTdGFydChiLnN0YXJ0Q29udGFpbmVyLGIuc3RhcnRPZmZzZXQpKTpiIGluc3RhbmNlb2YgRT9jPWIubmF0aXZlUmFuZ2U6Si5pbXBsZW1lbnRzRG9tUmFuZ2UmJmIgaW5zdGFuY2VvZiBBLmdldFdpbmRvdyhiLnN0YXJ0Q29udGFpbmVyKS5SYW5nZSYmKGM9YiksY31mdW5jdGlvbiBsKGEpe2lmKCFhLmxlbmd0aHx8MSE9YVswXS5ub2RlVHlwZSlyZXR1cm4hMTtmb3IodmFyIGI9MSxjPWEubGVuZ3RoO2M+YjsrK2IpaWYoIUEuaXNBbmNlc3Rvck9mKGFbMF0sYVtiXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbShhKXt2YXIgYz1hLmdldE5vZGVzKCk7aWYoIWwoYykpdGhyb3cgYi5jcmVhdGVFcnJvcihcImdldFNpbmdsZUVsZW1lbnRGcm9tUmFuZ2U6IHJhbmdlIFwiK2EuaW5zcGVjdCgpK1wiIGRpZCBub3QgY29uc2lzdCBvZiBhIHNpbmdsZSBlbGVtZW50XCIpO3JldHVybiBjWzBdfWZ1bmN0aW9uIG4oYSl7cmV0dXJuISFhJiZ2b2lkIDAhPT1hLnRleHR9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPW5ldyBFKGIpO2EuX3Jhbmdlcz1bY10saChhLGMsITEpLGEucmFuZ2VDb3VudD0xLGEuaXNDb2xsYXBzZWQ9Yy5jb2xsYXBzZWR9ZnVuY3Rpb24gcChiKXt2YXIgYyxkLGUsZjtpZihiLl9yYW5nZXMubGVuZ3RoPTAsXCJOb25lXCI9PWIuZG9jU2VsZWN0aW9uLnR5cGUpaihiKTtlbHNlIGlmKGM9Yi5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxuKGMpKW8oYixjKTtlbHNle2ZvcihiLnJhbmdlQ291bnQ9Yy5sZW5ndGgsZT1MKGMuaXRlbSgwKSksZj0wO2Y8Yi5yYW5nZUNvdW50OysrZilkPWEuY3JlYXRlUmFuZ2UoZSksZC5zZWxlY3ROb2RlKGMuaXRlbShmKSksYi5fcmFuZ2VzLnB1c2goZCk7Yi5pc0NvbGxhcHNlZD0xPT1iLnJhbmdlQ291bnQmJmIuX3Jhbmdlc1swXS5jb2xsYXBzZWQsaChiLGIuX3Jhbmdlc1tiLnJhbmdlQ291bnQtMV0sITEpfX1mdW5jdGlvbiBxKGEsYyl7dmFyIGQsZSxmPWEuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksZz1tKGMpLGg9TChmLml0ZW0oMCkpLGk9TShoKS5jcmVhdGVDb250cm9sUmFuZ2UoKTtmb3IoZD0wLGU9Zi5sZW5ndGg7ZT5kOysrZClpLmFkZChmLml0ZW0oZCkpO3RyeXtpLmFkZChnKX1jYXRjaChqKXt0aHJvdyBiLmNyZWF0ZUVycm9yKFwiYWRkUmFuZ2UoKTogRWxlbWVudCB3aXRoaW4gdGhlIHNwZWNpZmllZCBSYW5nZSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gY29udHJvbCBzZWxlY3Rpb24gKGRvZXMgaXQgaGF2ZSBsYXlvdXQ/KVwiKX1pLnNlbGVjdCgpLHAoYSl9ZnVuY3Rpb24gcihhLGIsYyl7dGhpcy5uYXRpdmVTZWxlY3Rpb249YSx0aGlzLmRvY1NlbGVjdGlvbj1iLHRoaXMuX3Jhbmdlcz1bXSx0aGlzLndpbj1jLHRoaXMucmVmcmVzaCgpfWZ1bmN0aW9uIHMoYSl7YS53aW49YS5hbmNob3JOb2RlPWEuZm9jdXNOb2RlPWEuX3Jhbmdlcz1udWxsLGEucmFuZ2VDb3VudD1hLmFuY2hvck9mZnNldD1hLmZvY3VzT2Zmc2V0PTAsYS5kZXRhY2hlZD0hMH1mdW5jdGlvbiB0KGEsYil7Zm9yKHZhciBjLGQsZT1iYi5sZW5ndGg7ZS0tOylpZihjPWJiW2VdLGQ9Yy5zZWxlY3Rpb24sXCJkZWxldGVBbGxcIj09YilzKGQpO2Vsc2UgaWYoYy53aW49PWEpcmV0dXJuXCJkZWxldGVcIj09Yj8oYmIuc3BsaWNlKGUsMSksITApOmQ7cmV0dXJuXCJkZWxldGVBbGxcIj09YiYmKGJiLmxlbmd0aD0wKSxudWxsfWZ1bmN0aW9uIHUoYSxjKXt2YXIgZCxlLGYsZz1MKGNbMF0uc3RhcnRDb250YWluZXIpLGg9TShnKS5jcmVhdGVDb250cm9sUmFuZ2UoKTtmb3IoZD0wLGY9Yy5sZW5ndGg7Zj5kOysrZCl7ZT1tKGNbZF0pO3RyeXtoLmFkZChlKX1jYXRjaChpKXt0aHJvdyBiLmNyZWF0ZUVycm9yKFwic2V0UmFuZ2VzKCk6IEVsZW1lbnQgd2l0aGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIFJhbmdlcyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gY29udHJvbCBzZWxlY3Rpb24gKGRvZXMgaXQgaGF2ZSBsYXlvdXQ/KVwiKX19aC5zZWxlY3QoKSxwKGEpfWZ1bmN0aW9uIHYoYSxiKXtpZihhLndpbi5kb2N1bWVudCE9TChiKSl0aHJvdyBuZXcgRihcIldST05HX0RPQ1VNRU5UX0VSUlwiKX1mdW5jdGlvbiB3KGIpe3JldHVybiBmdW5jdGlvbihjLGQpe3ZhciBlO3RoaXMucmFuZ2VDb3VudD8oZT10aGlzLmdldFJhbmdlQXQoMCksZVtcInNldFwiKyhiP1wiU3RhcnRcIjpcIkVuZFwiKV0oYyxkKSk6KGU9YS5jcmVhdGVSYW5nZSh0aGlzLndpbi5kb2N1bWVudCksZS5zZXRTdGFydEFuZEVuZChjLGQpKSx0aGlzLnNldFNpbmdsZVJhbmdlKGUsdGhpcy5pc0JhY2t3YXJkKCkpfX1mdW5jdGlvbiB4KGEpe3ZhciBiLGMsZD1bXSxlPW5ldyBHKGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCksZj1uZXcgRyhhLmZvY3VzTm9kZSxhLmZvY3VzT2Zmc2V0KSxnPVwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0TmFtZT9hLmdldE5hbWUoKTpcIlNlbGVjdGlvblwiO2lmKHZvaWQgMCE9PWEucmFuZ2VDb3VudClmb3IoYj0wLGM9YS5yYW5nZUNvdW50O2M+YjsrK2IpZFtiXT1ELmluc3BlY3QoYS5nZXRSYW5nZUF0KGIpKTtyZXR1cm5cIltcIitnK1wiKFJhbmdlczogXCIrZC5qb2luKFwiLCBcIikrXCIpKGFuY2hvcjogXCIrZS5pbnNwZWN0KCkrXCIsIGZvY3VzOiBcIitmLmluc3BlY3QoKStcIl1cIn12YXIgeSx6LEEsQixDLEQsRSxGLEcsSCxJLEosSyxMLE0sTixPLFAsUSxSLFMsVCxVLFYsVyxYLFksWiwkLF8sYWIsYmIsY2IsZGIsZWIsZmIsZ2IsaGI7aWYoYS5jb25maWcuY2hlY2tTZWxlY3Rpb25SYW5nZXM9ITAseT1cImJvb2xlYW5cIix6PVwibnVtYmVyXCIsQT1hLmRvbSxCPWEudXRpbCxDPUIuaXNIb3N0TWV0aG9kLEQ9YS5Eb21SYW5nZSxFPWEuV3JhcHBlZFJhbmdlLEY9YS5ET01FeGNlcHRpb24sRz1BLkRvbVBvc2l0aW9uLEo9YS5mZWF0dXJlcyxLPVwiQ29udHJvbFwiLEw9QS5nZXREb2N1bWVudCxNPUEuZ2V0Qm9keSxOPUQucmFuZ2VzRXF1YWwsTz1DKHdpbmRvdyxcImdldFNlbGVjdGlvblwiKSxQPUIuaXNIb3N0T2JqZWN0KGRvY3VtZW50LFwic2VsZWN0aW9uXCIpLEouaW1wbGVtZW50c1dpbkdldFNlbGVjdGlvbj1PLEouaW1wbGVtZW50c0RvY1NlbGVjdGlvbj1QLFE9UCYmKCFPfHxhLmNvbmZpZy5wcmVmZXJUZXh0UmFuZ2UpLFE/KEg9ZixhLmlzU2VsZWN0aW9uVmFsaWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZChhLFwiaXNTZWxlY3Rpb25WYWxpZFwiKS5kb2N1bWVudCxjPWIuc2VsZWN0aW9uO3JldHVyblwiTm9uZVwiIT1jLnR5cGV8fEwoYy5jcmVhdGVSYW5nZSgpLnBhcmVudEVsZW1lbnQoKSk9PWJ9KTpPPyhIPWUsYS5pc1NlbGVjdGlvblZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuITB9KTpiLmZhaWwoXCJOZWl0aGVyIGRvY3VtZW50LnNlbGVjdGlvbiBvciB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkgZGV0ZWN0ZWQuXCIpLGEuZ2V0TmF0aXZlU2VsZWN0aW9uPUgsUj1IKCksUz1hLmNyZWF0ZU5hdGl2ZVJhbmdlKGRvY3VtZW50KSxUPU0oZG9jdW1lbnQpLFU9Qi5hcmVIb3N0UHJvcGVydGllcyhSLFtcImFuY2hvck5vZGVcIixcImZvY3VzTm9kZVwiLFwiYW5jaG9yT2Zmc2V0XCIsXCJmb2N1c09mZnNldFwiXSksSi5zZWxlY3Rpb25IYXNBbmNob3JBbmRGb2N1cz1VLFY9QyhSLFwiZXh0ZW5kXCIpLEouc2VsZWN0aW9uSGFzRXh0ZW5kPVYsVz10eXBlb2YgUi5yYW5nZUNvdW50PT16LEouc2VsZWN0aW9uSGFzUmFuZ2VDb3VudD1XLFg9ITEsWT0hMCxaPVY/ZnVuY3Rpb24oYixjKXt2YXIgZD1ELmdldFJhbmdlRG9jdW1lbnQoYyksZT1hLmNyZWF0ZVJhbmdlKGQpO2UuY29sbGFwc2VUb1BvaW50KGMuZW5kQ29udGFpbmVyLGMuZW5kT2Zmc2V0KSxiLmFkZFJhbmdlKGsoZSkpLGIuZXh0ZW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCl9Om51bGwsQi5hcmVIb3N0TWV0aG9kcyhSLFtcImFkZFJhbmdlXCIsXCJnZXRSYW5nZUF0XCIsXCJyZW1vdmVBbGxSYW5nZXNcIl0pJiZ0eXBlb2YgUi5yYW5nZUNvdW50PT16JiZKLmltcGxlbWVudHNEb21SYW5nZSYmIWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixoLGksaixrLGwsbSxuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihuKXtmb3IoYj1uLnJhbmdlQ291bnQsYz1iPjEsZD1bXSxlPWcobiksZj0wO2I+ZjsrK2YpZFtmXT1uLmdldFJhbmdlQXQoZik7Zm9yKGg9TShkb2N1bWVudCksaT1oLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLGkuY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIixqPWkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCLCoMKgwqBcIikpLGs9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxrLnNldFN0YXJ0KGosMSksay5jb2xsYXBzZSghMCksbi5hZGRSYW5nZShrKSxZPTE9PW4ucmFuZ2VDb3VudCxuLnJlbW92ZUFsbFJhbmdlcygpLGN8fChsPXdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRjaCgvQ2hyb21lXFwvKC4qPykgLyksbCYmcGFyc2VJbnQobFsxXSk+PTM2P1g9ITE6KG09ay5jbG9uZVJhbmdlKCksay5zZXRTdGFydChqLDApLG0uc2V0RW5kKGosMyksbS5zZXRTdGFydChqLDIpLG4uYWRkUmFuZ2Uoayksbi5hZGRSYW5nZShtKSxYPTI9PW4ucmFuZ2VDb3VudCkpLGgucmVtb3ZlQ2hpbGQoaSksbi5yZW1vdmVBbGxSYW5nZXMoKSxmPTA7Yj5mOysrZikwPT1mJiZlP1o/WihuLGRbZl0pOihhLndhcm4oXCJSYW5neSBpbml0aWFsaXphdGlvbjogb3JpZ2luYWwgc2VsZWN0aW9uIHdhcyBiYWNrd2FyZHMgYnV0IHNlbGVjdGlvbiBoYXMgYmVlbiByZXN0b3JlZCBmb3J3YXJkcyBiZWNhdXNlIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgU2VsZWN0aW9uLmV4dGVuZFwiKSxuLmFkZFJhbmdlKGRbZl0pKTpuLmFkZFJhbmdlKGRbZl0pfX0oKSxKLnNlbGVjdGlvblN1cHBvcnRzTXVsdGlwbGVSYW5nZXM9WCxKLmNvbGxhcHNlZE5vbkVkaXRhYmxlU2VsZWN0aW9uc1N1cHBvcnRlZD1ZLCQ9ITEsVCYmQyhULFwiY3JlYXRlQ29udHJvbFJhbmdlXCIpJiYoXz1ULmNyZWF0ZUNvbnRyb2xSYW5nZSgpLEIuYXJlSG9zdFByb3BlcnRpZXMoXyxbXCJpdGVtXCIsXCJhZGRcIl0pJiYoJD0hMCkpLEouaW1wbGVtZW50c0NvbnRyb2xSYW5nZT0kLEk9VT9mdW5jdGlvbihhKXtyZXR1cm4gYS5hbmNob3JOb2RlPT09YS5mb2N1c05vZGUmJmEuYW5jaG9yT2Zmc2V0PT09YS5mb2N1c09mZnNldH06ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmFuZ2VDb3VudD9hLmdldFJhbmdlQXQoYS5yYW5nZUNvdW50LTEpLmNvbGxhcHNlZDohMX0sQyhSLFwiZ2V0UmFuZ2VBdFwiKT9hYj1mdW5jdGlvbihhLGIpe3RyeXtyZXR1cm4gYS5nZXRSYW5nZUF0KGIpfWNhdGNoKGMpe3JldHVybiBudWxsfX06VSYmKGFiPWZ1bmN0aW9uKGIpe3ZhciBjPUwoYi5hbmNob3JOb2RlKSxkPWEuY3JlYXRlUmFuZ2UoYyk7cmV0dXJuIGQuc2V0U3RhcnRBbmRFbmQoYi5hbmNob3JOb2RlLGIuYW5jaG9yT2Zmc2V0LGIuZm9jdXNOb2RlLGIuZm9jdXNPZmZzZXQpLGQuY29sbGFwc2VkIT09dGhpcy5pc0NvbGxhcHNlZCYmZC5zZXRTdGFydEFuZEVuZChiLmZvY3VzTm9kZSxiLmZvY3VzT2Zmc2V0LGIuYW5jaG9yTm9kZSxiLmFuY2hvck9mZnNldCksZH0pLHIucHJvdG90eXBlPWEuc2VsZWN0aW9uUHJvdG90eXBlLGJiPVtdLGNiPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZTtyZXR1cm4gYSYmYSBpbnN0YW5jZW9mIHI/KGEucmVmcmVzaCgpLGEpOihhPWQoYSxcImdldE5hdGl2ZVNlbGVjdGlvblwiKSxiPXQoYSksYz1IKGEpLGU9UD9mKGEpOm51bGwsYj8oYi5uYXRpdmVTZWxlY3Rpb249YyxiLmRvY1NlbGVjdGlvbj1lLGIucmVmcmVzaCgpKTooYj1uZXcgcihjLGUsYSksYmIucHVzaCh7d2luOmEsc2VsZWN0aW9uOmJ9KSksYil9LGEuZ2V0U2VsZWN0aW9uPWNiLGEuZ2V0SWZyYW1lU2VsZWN0aW9uPWZ1bmN0aW9uKGMpe3JldHVybiBiLmRlcHJlY2F0aW9uTm90aWNlKFwiZ2V0SWZyYW1lU2VsZWN0aW9uKClcIixcImdldFNlbGVjdGlvbihpZnJhbWVFbClcIiksYS5nZXRTZWxlY3Rpb24oQS5nZXRJZnJhbWVXaW5kb3coYykpfSxkYj1yLnByb3RvdHlwZSwhUSYmVSYmQi5hcmVIb3N0TWV0aG9kcyhSLFtcInJlbW92ZUFsbFJhbmdlc1wiLFwiYWRkUmFuZ2VcIl0pKWRiLnJlbW92ZUFsbFJhbmdlcz1mdW5jdGlvbigpe3RoaXMubmF0aXZlU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpLGoodGhpcyl9LGViPWZ1bmN0aW9uKGEsYil7WihhLm5hdGl2ZVNlbGVjdGlvbixiKSxhLnJlZnJlc2goKX0sZGIuYWRkUmFuZ2U9Vz9mdW5jdGlvbihiLGQpe3ZhciBlLGY7JCYmUCYmdGhpcy5kb2NTZWxlY3Rpb24udHlwZT09Sz9xKHRoaXMsYik6YyhkKSYmVj9lYih0aGlzLGIpOihYP2U9dGhpcy5yYW5nZUNvdW50Oih0aGlzLnJlbW92ZUFsbFJhbmdlcygpLGU9MCksdGhpcy5uYXRpdmVTZWxlY3Rpb24uYWRkUmFuZ2UoayhiKS5jbG9uZVJhbmdlKCkpLHRoaXMucmFuZ2VDb3VudD10aGlzLm5hdGl2ZVNlbGVjdGlvbi5yYW5nZUNvdW50LHRoaXMucmFuZ2VDb3VudD09ZSsxPyhhLmNvbmZpZy5jaGVja1NlbGVjdGlvblJhbmdlcyYmKGY9YWIodGhpcy5uYXRpdmVTZWxlY3Rpb24sdGhpcy5yYW5nZUNvdW50LTEpLGYmJiFOKGYsYikmJihiPW5ldyBFKGYpKSksdGhpcy5fcmFuZ2VzW3RoaXMucmFuZ2VDb3VudC0xXT1iLGgodGhpcyxiLGhiKHRoaXMubmF0aXZlU2VsZWN0aW9uKSksdGhpcy5pc0NvbGxhcHNlZD1JKHRoaXMpKTp0aGlzLnJlZnJlc2goKSl9OmZ1bmN0aW9uKGEsYil7YyhiKSYmVj9lYih0aGlzLGEpOih0aGlzLm5hdGl2ZVNlbGVjdGlvbi5hZGRSYW5nZShrKGEpKSx0aGlzLnJlZnJlc2goKSl9LGRiLnNldFJhbmdlcz1mdW5jdGlvbihhKXtpZigkJiZQJiZhLmxlbmd0aD4xKXUodGhpcyxhKTtlbHNle3RoaXMucmVtb3ZlQWxsUmFuZ2VzKCk7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtjPmI7KytiKXRoaXMuYWRkUmFuZ2UoYVtiXSl9fTtlbHNle2lmKCEoQyhSLFwiZW1wdHlcIikmJkMoUyxcInNlbGVjdFwiKSYmJCYmUSkpcmV0dXJuIGIuZmFpbChcIk5vIG1lYW5zIG9mIHNlbGVjdGluZyBhIFJhbmdlIG9yIFRleHRSYW5nZSB3YXMgZm91bmRcIiksITE7ZGIucmVtb3ZlQWxsUmFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGEsYixjO3RyeXt0aGlzLmRvY1NlbGVjdGlvbi5lbXB0eSgpLFwiTm9uZVwiIT10aGlzLmRvY1NlbGVjdGlvbi50eXBlJiYodGhpcy5hbmNob3JOb2RlP2E9TCh0aGlzLmFuY2hvck5vZGUpOnRoaXMuZG9jU2VsZWN0aW9uLnR5cGU9PUsmJihiPXRoaXMuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksYi5sZW5ndGgmJihhPUwoYi5pdGVtKDApKSkpLGEmJihjPU0oYSkuY3JlYXRlVGV4dFJhbmdlKCksYy5zZWxlY3QoKSx0aGlzLmRvY1NlbGVjdGlvbi5lbXB0eSgpKSl9Y2F0Y2goZCl7fWoodGhpcyl9LGRiLmFkZFJhbmdlPWZ1bmN0aW9uKGIpe3RoaXMuZG9jU2VsZWN0aW9uLnR5cGU9PUs/cSh0aGlzLGIpOihhLldyYXBwZWRUZXh0UmFuZ2UucmFuZ2VUb1RleHRSYW5nZShiKS5zZWxlY3QoKSx0aGlzLl9yYW5nZXNbMF09Yix0aGlzLnJhbmdlQ291bnQ9MSx0aGlzLmlzQ29sbGFwc2VkPXRoaXMuX3Jhbmdlc1swXS5jb2xsYXBzZWQsaCh0aGlzLGIsITEpKX0sZGIuc2V0UmFuZ2VzPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlQWxsUmFuZ2VzKCk7dmFyIGI9YS5sZW5ndGg7Yj4xP3UodGhpcyxhKTpiJiZ0aGlzLmFkZFJhbmdlKGFbMF0pfX1pZihkYi5nZXRSYW5nZUF0PWZ1bmN0aW9uKGEpe2lmKDA+YXx8YT49dGhpcy5yYW5nZUNvdW50KXRocm93IG5ldyBGKFwiSU5ERVhfU0laRV9FUlJcIik7cmV0dXJuIHRoaXMuX3Jhbmdlc1thXS5jbG9uZVJhbmdlKCl9LFEpZmI9ZnVuY3Rpb24oYil7dmFyIGM7YS5pc1NlbGVjdGlvblZhbGlkKGIud2luKT9jPWIuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk6KGM9TShiLndpbi5kb2N1bWVudCkuY3JlYXRlVGV4dFJhbmdlKCksYy5jb2xsYXBzZSghMCkpLGIuZG9jU2VsZWN0aW9uLnR5cGU9PUs/cChiKTpuKGMpP28oYixjKTpqKGIpfTtlbHNlIGlmKEMoUixcImdldFJhbmdlQXRcIikmJnR5cGVvZiBSLnJhbmdlQ291bnQ9PXopZmI9ZnVuY3Rpb24oYil7aWYoJCYmUCYmYi5kb2NTZWxlY3Rpb24udHlwZT09SylwKGIpO2Vsc2UgaWYoYi5fcmFuZ2VzLmxlbmd0aD1iLnJhbmdlQ291bnQ9Yi5uYXRpdmVTZWxlY3Rpb24ucmFuZ2VDb3VudCxiLnJhbmdlQ291bnQpe2Zvcih2YXIgYz0wLGQ9Yi5yYW5nZUNvdW50O2Q+YzsrK2MpYi5fcmFuZ2VzW2NdPW5ldyBhLldyYXBwZWRSYW5nZShiLm5hdGl2ZVNlbGVjdGlvbi5nZXRSYW5nZUF0KGMpKTtoKGIsYi5fcmFuZ2VzW2IucmFuZ2VDb3VudC0xXSxoYihiLm5hdGl2ZVNlbGVjdGlvbikpLGIuaXNDb2xsYXBzZWQ9SShiKX1lbHNlIGooYil9O2Vsc2V7aWYoIVV8fHR5cGVvZiBSLmlzQ29sbGFwc2VkIT15fHx0eXBlb2YgUy5jb2xsYXBzZWQhPXl8fCFKLmltcGxlbWVudHNEb21SYW5nZSlyZXR1cm4gYi5mYWlsKFwiTm8gbWVhbnMgb2Ygb2J0YWluaW5nIGEgUmFuZ2Ugb3IgVGV4dFJhbmdlIGZyb20gdGhlIHVzZXIncyBzZWxlY3Rpb24gd2FzIGZvdW5kXCIpLCExO2ZiPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5uYXRpdmVTZWxlY3Rpb247Yy5hbmNob3JOb2RlPyhiPWFiKGMsMCksYS5fcmFuZ2VzPVtiXSxhLnJhbmdlQ291bnQ9MSxpKGEpLGEuaXNDb2xsYXBzZWQ9SShhKSk6aihhKX19ZGIucmVmcmVzaD1mdW5jdGlvbihhKXt2YXIgYixjPWE/dGhpcy5fcmFuZ2VzLnNsaWNlKDApOm51bGwsZD10aGlzLmFuY2hvck5vZGUsZT10aGlzLmFuY2hvck9mZnNldDtpZihmYih0aGlzKSxhKXtpZihiPWMubGVuZ3RoLGIhPXRoaXMuX3Jhbmdlcy5sZW5ndGgpcmV0dXJuITA7aWYodGhpcy5hbmNob3JOb2RlIT1kfHx0aGlzLmFuY2hvck9mZnNldCE9ZSlyZXR1cm4hMDtmb3IoO2ItLTspaWYoIU4oY1tiXSx0aGlzLl9yYW5nZXNbYl0pKXJldHVybiEwO3JldHVybiExfX0sZ2I9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5nZXRBbGxSYW5nZXMoKTtmb3IoYS5yZW1vdmVBbGxSYW5nZXMoKSxjPTAsZD1lLmxlbmd0aDtkPmM7KytjKU4oYixlW2NdKXx8YS5hZGRSYW5nZShlW2NdKTthLnJhbmdlQ291bnR8fGooYSl9LGRiLnJlbW92ZVJhbmdlPSQmJlA/ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtpZih0aGlzLmRvY1NlbGVjdGlvbi50eXBlPT1LKXtmb3IoYj10aGlzLmRvY1NlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLGM9bShhKSxkPUwoYi5pdGVtKDApKSxlPU0oZCkuY3JlYXRlQ29udHJvbFJhbmdlKCksZz0hMSxoPTAsaT1iLmxlbmd0aDtpPmg7KytoKWY9Yi5pdGVtKGgpLGYhPT1jfHxnP2UuYWRkKGIuaXRlbShoKSk6Zz0hMDtlLnNlbGVjdCgpLHAodGhpcyl9ZWxzZSBnYih0aGlzLGEpfTpmdW5jdGlvbihhKXtnYih0aGlzLGEpfSwhUSYmVSYmSi5pbXBsZW1lbnRzRG9tUmFuZ2U/KGhiPWcsZGIuaXNCYWNrd2FyZD1mdW5jdGlvbigpe3JldHVybiBoYih0aGlzKX0pOmhiPWRiLmlzQmFja3dhcmQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZGIuaXNCYWNrd2FyZHM9ZGIuaXNCYWNrd2FyZCxkYi50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhLGIsYz1bXTtmb3IoYT0wLGI9dGhpcy5yYW5nZUNvdW50O2I+YTsrK2EpY1thXT1cIlwiK3RoaXMuX3Jhbmdlc1thXTtyZXR1cm4gYy5qb2luKFwiXCIpfSxkYi5jb2xsYXBzZT1mdW5jdGlvbihiLGMpe3YodGhpcyxiKTt2YXIgZD1hLmNyZWF0ZVJhbmdlKGIpO2QuY29sbGFwc2VUb1BvaW50KGIsYyksdGhpcy5zZXRTaW5nbGVSYW5nZShkKSx0aGlzLmlzQ29sbGFwc2VkPSEwfSxkYi5jb2xsYXBzZVRvU3RhcnQ9ZnVuY3Rpb24oKXtpZighdGhpcy5yYW5nZUNvdW50KXRocm93IG5ldyBGKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7dmFyIGE9dGhpcy5fcmFuZ2VzWzBdO3RoaXMuY29sbGFwc2UoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KX0sZGIuY29sbGFwc2VUb0VuZD1mdW5jdGlvbigpe2lmKCF0aGlzLnJhbmdlQ291bnQpdGhyb3cgbmV3IEYoXCJJTlZBTElEX1NUQVRFX0VSUlwiKTt2YXIgYT10aGlzLl9yYW5nZXNbdGhpcy5yYW5nZUNvdW50LTFdO3RoaXMuY29sbGFwc2UoYS5lbmRDb250YWluZXIsYS5lbmRPZmZzZXQpfSxkYi5zZWxlY3RBbGxDaGlsZHJlbj1mdW5jdGlvbihiKXt2KHRoaXMsYik7dmFyIGM9YS5jcmVhdGVSYW5nZShiKTtjLnNlbGVjdE5vZGVDb250ZW50cyhiKSx0aGlzLnNldFNpbmdsZVJhbmdlKGMpfSxkYi5kZWxldGVGcm9tRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlO2lmKCQmJlAmJnRoaXMuZG9jU2VsZWN0aW9uLnR5cGU9PUspe2ZvcihhPXRoaXMuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7YS5sZW5ndGg7KWI9YS5pdGVtKDApLGEucmVtb3ZlKGIpLGIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKTt0aGlzLnJlZnJlc2goKX1lbHNlIGlmKHRoaXMucmFuZ2VDb3VudCYmKGM9dGhpcy5nZXRBbGxSYW5nZXMoKSxjLmxlbmd0aCkpe2Zvcih0aGlzLnJlbW92ZUFsbFJhbmdlcygpLGQ9MCxlPWMubGVuZ3RoO2U+ZDsrK2QpY1tkXS5kZWxldGVDb250ZW50cygpO3RoaXMuYWRkUmFuZ2UoY1tlLTFdKX19LGRiLmVhY2hSYW5nZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9dGhpcy5fcmFuZ2VzLmxlbmd0aDtkPmM7KytjKWlmKGEodGhpcy5nZXRSYW5nZUF0KGMpKSlyZXR1cm4gYn0sZGIuZ2V0QWxsUmFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZWFjaFJhbmdlKGZ1bmN0aW9uKGIpe2EucHVzaChiKX0pLGF9LGRiLnNldFNpbmdsZVJhbmdlPWZ1bmN0aW9uKGEsYil7dGhpcy5yZW1vdmVBbGxSYW5nZXMoKSx0aGlzLmFkZFJhbmdlKGEsYil9LGRiLmNhbGxNZXRob2RPbkVhY2hSYW5nZT1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO3JldHVybiB0aGlzLmVhY2hSYW5nZShmdW5jdGlvbihkKXtjLnB1c2goZFthXS5hcHBseShkLGIpKX0pLGN9LGRiLnNldFN0YXJ0PXcoITApLGRiLnNldEVuZD13KCExKSxhLnJhbmdlUHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihhKXtjYih0aGlzLmdldERvY3VtZW50KCkpLnNldFNpbmdsZVJhbmdlKHRoaXMsYSl9LGRiLmNoYW5nZUVhY2hSYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1bXSxjPXRoaXMuaXNCYWNrd2FyZCgpO3RoaXMuZWFjaFJhbmdlKGZ1bmN0aW9uKGMpe2EoYyksYi5wdXNoKGMpfSksdGhpcy5yZW1vdmVBbGxSYW5nZXMoKSxjJiYxPT1iLmxlbmd0aD90aGlzLmFkZFJhbmdlKGJbMF0sXCJiYWNrd2FyZFwiKTp0aGlzLnNldFJhbmdlcyhiKX0sZGIuY29udGFpbnNOb2RlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaFJhbmdlKGZ1bmN0aW9uKGMpe3JldHVybiBjLmNvbnRhaW5zTm9kZShhLGIpfSwhMCl8fCExfSxkYi5nZXRCb29rbWFyaz1mdW5jdGlvbihhKXtyZXR1cm57YmFja3dhcmQ6dGhpcy5pc0JhY2t3YXJkKCkscmFuZ2VCb29rbWFya3M6dGhpcy5jYWxsTWV0aG9kT25FYWNoUmFuZ2UoXCJnZXRCb29rbWFya1wiLFthXSl9fSxkYi5tb3ZlVG9Cb29rbWFyaz1mdW5jdGlvbihiKXt2YXIgYyxkLGUsZj1bXTtmb3IoYz0wO2Q9Yi5yYW5nZUJvb2ttYXJrc1tjKytdOyllPWEuY3JlYXRlUmFuZ2UodGhpcy53aW4pLGUubW92ZVRvQm9va21hcmsoZCksZi5wdXNoKGUpO2IuYmFja3dhcmQ/dGhpcy5zZXRTaW5nbGVSYW5nZShmWzBdLFwiYmFja3dhcmRcIik6dGhpcy5zZXRSYW5nZXMoZil9LGRiLnRvSHRtbD1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmVhY2hSYW5nZShmdW5jdGlvbihiKXthLnB1c2goRC50b0h0bWwoYikpfSksYS5qb2luKFwiXCIpfSxKLmltcGxlbWVudHNUZXh0UmFuZ2UmJihkYi5nZXROYXRpdmVUZXh0UmFuZ2U9ZnVuY3Rpb24oKXt2YXIgYyxkO2lmKGM9dGhpcy5kb2NTZWxlY3Rpb24pe2lmKGQ9Yy5jcmVhdGVSYW5nZSgpLG4oZCkpcmV0dXJuIGQ7dGhyb3cgYi5jcmVhdGVFcnJvcihcImdldE5hdGl2ZVRleHRSYW5nZTogc2VsZWN0aW9uIGlzIGEgY29udHJvbCBzZWxlY3Rpb25cIil9aWYodGhpcy5yYW5nZUNvdW50PjApcmV0dXJuIGEuV3JhcHBlZFRleHRSYW5nZS5yYW5nZVRvVGV4dFJhbmdlKHRoaXMuZ2V0UmFuZ2VBdCgwKSk7dGhyb3cgYi5jcmVhdGVFcnJvcihcImdldE5hdGl2ZVRleHRSYW5nZTogc2VsZWN0aW9uIGNvbnRhaW5zIG5vIHJhbmdlXCIpfSksZGIuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVyblwiV3JhcHBlZFNlbGVjdGlvblwifSxkYi5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcyl9LGRiLmRldGFjaD1mdW5jdGlvbigpe3QodGhpcy53aW4sXCJkZWxldGVcIikscyh0aGlzKX0sci5kZXRhY2hBbGw9ZnVuY3Rpb24oKXt0KG51bGwsXCJkZWxldGVBbGxcIil9LHIuaW5zcGVjdD14LHIuaXNEaXJlY3Rpb25CYWNrd2FyZD1jLGEuU2VsZWN0aW9uPXIsYS5zZWxlY3Rpb25Qcm90b3R5cGU9ZGIsYS5hZGRTaGltTGlzdGVuZXIoZnVuY3Rpb24oYSl7dm9pZCAwPT09YS5nZXRTZWxlY3Rpb24mJihhLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBjYihhKX0pLGE9bnVsbH0pfSksSCl9LHRoaXMpLGZ1bmN0aW9uKGEsYil7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJyYW5neVwiXSxhKTphKGIucmFuZ3kpfShmdW5jdGlvbihhKXthLmNyZWF0ZU1vZHVsZShcIlNhdmVSZXN0b3JlXCIsW1wiV3JhcHBlZFJhbmdlXCJdLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe3JldHVybihifHxkb2N1bWVudCkuZ2V0RWxlbWVudEJ5SWQoYSl9ZnVuY3Rpb24gZChhLGIpe3ZhciBjLGQ9XCJzZWxlY3Rpb25Cb3VuZGFyeV9cIisgK25ldyBEYXRlK1wiX1wiKyhcIlwiK01hdGgucmFuZG9tKCkpLnNsaWNlKDIpLGU9by5nZXREb2N1bWVudChhLnN0YXJ0Q29udGFpbmVyKSxmPWEuY2xvbmVSYW5nZSgpO3JldHVybiBmLmNvbGxhcHNlKGIpLGM9ZS5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxjLmlkPWQsYy5zdHlsZS5saW5lSGVpZ2h0PVwiMFwiLGMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixjLmNsYXNzTmFtZT1cInJhbmd5U2VsZWN0aW9uQm91bmRhcnlcIixjLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUocCkpLGYuaW5zZXJ0Tm9kZShjKSxjfWZ1bmN0aW9uIGUoYSxkLGUsZil7dmFyIGc9YyhlLGEpO2c/KGRbZj9cInNldFN0YXJ0QmVmb3JlXCI6XCJzZXRFbmRCZWZvcmVcIl0oZyksZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGcpKTpiLndhcm4oXCJNYXJrZXIgZWxlbWVudCBoYXMgYmVlbiByZW1vdmVkLiBDYW5ub3QgcmVzdG9yZSBzZWxlY3Rpb24uXCIpfWZ1bmN0aW9uIGYoYSxiKXtyZXR1cm4gYi5jb21wYXJlQm91bmRhcnlQb2ludHMoYS5TVEFSVF9UT19TVEFSVCxhKX1mdW5jdGlvbiBnKGIsYyl7dmFyIGUsZixnPWEuRG9tUmFuZ2UuZ2V0UmFuZ2VEb2N1bWVudChiKSxoPVwiXCIrYjtyZXR1cm4gYi5jb2xsYXBzZWQ/KGY9ZChiLCExKSx7ZG9jdW1lbnQ6ZyxtYXJrZXJJZDpmLmlkLGNvbGxhcHNlZDohMH0pOihmPWQoYiwhMSksZT1kKGIsITApLHtkb2N1bWVudDpnLHN0YXJ0TWFya2VySWQ6ZS5pZCxlbmRNYXJrZXJJZDpmLmlkLGNvbGxhcHNlZDohMSxiYWNrd2FyZDpjLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJvcmlnaW5hbCB0ZXh0OiAnXCIraCtcIicsIG5ldyB0ZXh0OiAnXCIrYitcIidcIn19KX1mdW5jdGlvbiBoKGQsZil7dmFyIGcsaCxpLGo9ZC5kb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09ZiYmKGY9ITApLGc9YS5jcmVhdGVSYW5nZShqKSxkLmNvbGxhcHNlZD8oaD1jKGQubWFya2VySWQsaiksaD8oaC5zdHlsZS5kaXNwbGF5PVwiaW5saW5lXCIsaT1oLnByZXZpb3VzU2libGluZyxpJiYzPT1pLm5vZGVUeXBlPyhoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksZy5jb2xsYXBzZVRvUG9pbnQoaSxpLmxlbmd0aCkpOihnLmNvbGxhcHNlQmVmb3JlKGgpLGgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSkpOmIud2FybihcIk1hcmtlciBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQuIENhbm5vdCByZXN0b3JlIHNlbGVjdGlvbi5cIikpOihlKGosZyxkLnN0YXJ0TWFya2VySWQsITApLGUoaixnLGQuZW5kTWFya2VySWQsITEpKSxmJiZnLm5vcm1hbGl6ZUJvdW5kYXJpZXMoKSxnfWZ1bmN0aW9uIGkoYixkKXt2YXIgZSxoLGksaixrPVtdO2ZvcihiPWIuc2xpY2UoMCksYi5zb3J0KGYpLGk9MCxqPWIubGVuZ3RoO2o+aTsrK2kpa1tpXT1nKGJbaV0sZCk7Zm9yKGk9ai0xO2k+PTA7LS1pKWU9YltpXSxoPWEuRG9tUmFuZ2UuZ2V0UmFuZ2VEb2N1bWVudChlKSxlLmNvbGxhcHNlZD9lLmNvbGxhcHNlQWZ0ZXIoYyhrW2ldLm1hcmtlcklkLGgpKTooZS5zZXRFbmRCZWZvcmUoYyhrW2ldLmVuZE1hcmtlcklkLGgpKSxlLnNldFN0YXJ0QWZ0ZXIoYyhrW2ldLnN0YXJ0TWFya2VySWQsaCkpKTtyZXR1cm4ga31mdW5jdGlvbiBqKGMpe3ZhciBkLGUsZixnO3JldHVybiBhLmlzU2VsZWN0aW9uVmFsaWQoYyk/KGQ9YS5nZXRTZWxlY3Rpb24oYyksZT1kLmdldEFsbFJhbmdlcygpLGY9MT09ZS5sZW5ndGgmJmQuaXNCYWNrd2FyZCgpLGc9aShlLGYpLGY/ZC5zZXRTaW5nbGVSYW5nZShlWzBdLFwiYmFja3dhcmRcIik6ZC5zZXRSYW5nZXMoZSkse3dpbjpjLHJhbmdlSW5mb3M6ZyxyZXN0b3JlZDohMX0pOihiLndhcm4oXCJDYW5ub3Qgc2F2ZSBzZWxlY3Rpb24uIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQgYW5kIHRoZSBzZWxlY3Rpb24gZG9jdW1lbnQgaGFzIGxvc3QgZm9jdXMuXCIpLG51bGwpfWZ1bmN0aW9uIGsoYSl7dmFyIGIsYz1bXSxkPWEubGVuZ3RoO2ZvcihiPWQtMTtiPj0wO2ItLSljW2JdPWgoYVtiXSwhMCk7cmV0dXJuIGN9ZnVuY3Rpb24gbChiLGMpe3ZhciBkLGUsZixnO2IucmVzdG9yZWR8fChkPWIucmFuZ2VJbmZvcyxlPWEuZ2V0U2VsZWN0aW9uKGIud2luKSxmPWsoZCksZz1kLmxlbmd0aCwxPT1nJiZjJiZhLmZlYXR1cmVzLnNlbGVjdGlvbkhhc0V4dGVuZCYmZFswXS5iYWNrd2FyZD8oZS5yZW1vdmVBbGxSYW5nZXMoKSxlLmFkZFJhbmdlKGZbMF0sITApKTplLnNldFJhbmdlcyhmKSxiLnJlc3RvcmVkPSEwKX1mdW5jdGlvbiBtKGEsYil7dmFyIGQ9YyhiLGEpO2QmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKX1mdW5jdGlvbiBuKGEpe3ZhciBiLGMsZCxlPWEucmFuZ2VJbmZvcztmb3IoYj0wLGM9ZS5sZW5ndGg7Yz5iOysrYilkPWVbYl0sZC5jb2xsYXBzZWQ/bShhLmRvYyxkLm1hcmtlcklkKToobShhLmRvYyxkLnN0YXJ0TWFya2VySWQpLG0oYS5kb2MsZC5lbmRNYXJrZXJJZCkpfXZhciBvPWEuZG9tLHA9XCLvu79cIjthLnV0aWwuZXh0ZW5kKGEse3NhdmVSYW5nZTpnLHJlc3RvcmVSYW5nZTpoLHNhdmVSYW5nZXM6aSxyZXN0b3JlUmFuZ2VzOmssc2F2ZVNlbGVjdGlvbjpqLHJlc3RvcmVTZWxlY3Rpb246bCxyZW1vdmVNYXJrZXJFbGVtZW50Om0scmVtb3ZlTWFya2VyczpufSl9KX0sdGhpcyksQmFzZT1mdW5jdGlvbigpe30sQmFzZS5leHRlbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1CYXNlLnByb3RvdHlwZS5leHRlbmQ7cmV0dXJuIEJhc2UuX3Byb3RvdHlwaW5nPSEwLGM9bmV3IHRoaXMsZi5jYWxsKGMsYSksYy5iYXNlPWZ1bmN0aW9uKCl7fSxkZWxldGUgQmFzZS5fcHJvdG90eXBpbmcsZD1jLmNvbnN0cnVjdG9yLGU9Yy5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFCYXNlLl9wcm90b3R5cGluZylpZih0aGlzLl9jb25zdHJ1Y3Rpbmd8fHRoaXMuY29uc3RydWN0b3I9PWUpdGhpcy5fY29uc3RydWN0aW5nPSEwLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGRlbGV0ZSB0aGlzLl9jb25zdHJ1Y3Rpbmc7ZWxzZSBpZihudWxsIT1hcmd1bWVudHNbMF0pcmV0dXJuKGFyZ3VtZW50c1swXS5leHRlbmR8fGYpLmNhbGwoYXJndW1lbnRzWzBdLGMpfSxlLmFuY2VzdG9yPXRoaXMsZS5leHRlbmQ9dGhpcy5leHRlbmQsZS5mb3JFYWNoPXRoaXMuZm9yRWFjaCxlLmltcGxlbWVudD10aGlzLmltcGxlbWVudCxlLnByb3RvdHlwZT1jLGUudG9TdHJpbmc9dGhpcy50b1N0cmluZyxlLnZhbHVlT2Y9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09YT9lOmQudmFsdWVPZigpfSxmLmNhbGwoZSxiKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluaXQmJmUuaW5pdCgpLGV9LEJhc2UucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhcmd1bWVudHMubGVuZ3RoPjEpYz10aGlzW2FdLCFjfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBifHxjLnZhbHVlT2YmJmMudmFsdWVPZigpPT1iLnZhbHVlT2YoKXx8IS9cXGJiYXNlXFxiLy50ZXN0KGIpfHwoZD1iLnZhbHVlT2YoKSxiPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmJhc2V8fEJhc2UucHJvdG90eXBlLmJhc2U7cmV0dXJuIHRoaXMuYmFzZT1jLGE9ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5iYXNlPWIsYX0sYi52YWx1ZU9mPWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PWE/YjpkfSxiLnRvU3RyaW5nPUJhc2UudG9TdHJpbmcpLHRoaXNbYV09YjtlbHNlIGlmKGEpe2ZvcihlPUJhc2UucHJvdG90eXBlLmV4dGVuZCxCYXNlLl9wcm90b3R5cGluZ3x8XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpc3x8KGU9dGhpcy5leHRlbmR8fGUpLGY9e3RvU291cmNlOm51bGx9LGc9W1wiY29uc3RydWN0b3JcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLGg9QmFzZS5fcHJvdG90eXBpbmc/MDoxO2k9Z1toKytdOylhW2ldIT1mW2ldJiZlLmNhbGwodGhpcyxpLGFbaV0pO2ZvcihpIGluIGEpZltpXXx8ZS5jYWxsKHRoaXMsaSxhW2ldKX1yZXR1cm4gdGhpc319LEJhc2U9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5leHRlbmQoYXJndW1lbnRzWzBdKX19LHthbmNlc3RvcjpPYmplY3QsdmVyc2lvbjpcIjEuMVwiLGZvckVhY2g6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBhKXZvaWQgMD09PXRoaXMucHJvdG90eXBlW2RdJiZiLmNhbGwoYyxhW2RdLGQsYSl9LGltcGxlbWVudDpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2FdP2FyZ3VtZW50c1thXSh0aGlzLnByb3RvdHlwZSk6dGhpcy5wcm90b3R5cGUuZXh0ZW5kKGFyZ3VtZW50c1thXSk7cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVPZigpK1wiXCJ9fSksd3lzaWh0bWw1LmJyb3dzZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybisoL2lwYWR8aXBob25lfGlwb2QvLnRlc3QoYSkmJmEubWF0Y2goLyBvcyAoXFxkKykuKz8gbGlrZSBtYWMgb3MgeC8pfHxbdm9pZCAwLDBdKVsxXX1mdW5jdGlvbiBiKGEpe3JldHVybisoYS5tYXRjaCgvYW5kcm9pZCAoXFxkKykvKXx8W3ZvaWQgMCwwXSlbMV19ZnVuY3Rpb24gYyhhLGIpe3ZhciBjLGQ9LTE7cmV0dXJuXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIj09bmF2aWdhdG9yLmFwcE5hbWU/Yz1SZWdFeHAoXCJNU0lFIChbMC05XXsxLH1bLjAtOV17MCx9KVwiKTpcIk5ldHNjYXBlXCI9PW5hdmlnYXRvci5hcHBOYW1lJiYoYz1SZWdFeHAoXCJUcmlkZW50Ly4qcnY6KFswLTldezEsfVsuMC05XXswLH0pXCIpKSxjJiZudWxsIT1jLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPXBhcnNlRmxvYXQoUmVnRXhwLiQxKSksLTE9PT1kPyExOmE/Yj9cIjxcIj09PWI/ZD5hOlwiPlwiPT09Yj9hPmQ6XCI8PVwiPT09Yj9kPj1hOlwiPj1cIj09PWI/YT49ZDp2b2lkIDA6YT09PWQ6ITB9dmFyIGQ9bmF2aWdhdG9yLnVzZXJBZ2VudCxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZj0tMSE9PWQuaW5kZXhPZihcIkdlY2tvXCIpJiYtMT09PWQuaW5kZXhPZihcIktIVE1MXCIpLGc9LTEhPT1kLmluZGV4T2YoXCJBcHBsZVdlYktpdC9cIiksaD0tMSE9PWQuaW5kZXhPZihcIkNocm9tZS9cIiksaT0tMSE9PWQuaW5kZXhPZihcIk9wZXJhL1wiKTtyZXR1cm57VVNFUl9BR0VOVDpkLHN1cHBvcnRlZDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuVVNFUl9BR0VOVC50b0xvd2VyQ2FzZSgpLGQ9XCJjb250ZW50RWRpdGFibGVcImluIGUsZj1kb2N1bWVudC5leGVjQ29tbWFuZCYmZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkJiZkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSxnPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3ImJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwsaD10aGlzLmlzSW9zKCkmJmEoYyk8NXx8dGhpcy5pc0FuZHJvaWQoKSYmYihjKTw0fHwtMSE9PWMuaW5kZXhPZihcIm9wZXJhIG1vYmlcIil8fC0xIT09Yy5pbmRleE9mKFwiaHB3b3MvXCIpO3JldHVybiBkJiZmJiZnJiYhaH0saXNUb3VjaERldmljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRzRXZlbnQoXCJ0b3VjaG1vdmVcIil9LGlzSW9zOmZ1bmN0aW9uKCl7cmV0dXJuL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHRoaXMuVVNFUl9BR0VOVCl9LGlzQW5kcm9pZDpmdW5jdGlvbigpe3JldHVybi0xIT09dGhpcy5VU0VSX0FHRU5ULmluZGV4T2YoXCJBbmRyb2lkXCIpfSxzdXBwb3J0c1NhbmRib3hlZElmcmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYygpfSx0aHJvd3NNaXhlZENvbnRlbnRXYXJuaW5nV2hlbklmcmFtZVNyY0lzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hKFwicXVlcnlTZWxlY3RvclwiaW4gZG9jdW1lbnQpfSxkaXNwbGF5c0NhcmV0SW5FbXB0eUNvbnRlbnRFZGl0YWJsZUNvcnJlY3RseTpmdW5jdGlvbigpe3JldHVybiBjKCl9LGhhc0N1cnJlbnRTdHlsZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuXCJjdXJyZW50U3R5bGVcImluIGV9LGhhc0hpc3RvcnlJc3N1ZTpmdW5jdGlvbigpe3JldHVybiBmJiZcIk1hY1wiPT09bmF2aWdhdG9yLnBsYXRmb3JtLnN1YnN0cigwLDMpfSxpbnNlcnRzTGluZUJyZWFrc09uUmV0dXJuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHN1cHBvcnRzUGxhY2Vob2xkZXJBdHRyaWJ1dGVPbjpmdW5jdGlvbihhKXtyZXR1cm5cInBsYWNlaG9sZGVyXCJpbiBhfSxzdXBwb3J0c0V2ZW50OmZ1bmN0aW9uKGEpe3JldHVyblwib25cIithIGluIGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0QXR0cmlidXRlKFwib25cIithLFwicmV0dXJuO1wiKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW1wib25cIithXX0oKX0sc3VwcG9ydHNFdmVudHNJbklmcmFtZUNvcnJlY3RseTpmdW5jdGlvbigpe3JldHVybiFpfSxzdXBwb3J0c0hUTUw1VGFnczpmdW5jdGlvbihhKXt2YXIgYj1hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYz1cIjxhcnRpY2xlPmZvbzwvYXJ0aWNsZT5cIjtyZXR1cm4gYi5pbm5lckhUTUw9YyxiLmlubmVySFRNTC50b0xvd2VyQ2FzZSgpPT09Y30sc3VwcG9ydHNDb21tYW5kOmZ1bmN0aW9uKCl7dmFyIGE9e2Zvcm1hdEJsb2NrOmMoMTAsXCI8PVwiKSxpbnNlcnRVbm9yZGVyZWRMaXN0OmMoKSxpbnNlcnRPcmRlcmVkTGlzdDpjKCl9LGI9e2luc2VydEhUTUw6Zn07cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9YVtkXTtpZighZSl7dHJ5e3JldHVybiBjLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChkKX1jYXRjaChmKXt9dHJ5e3JldHVybiBjLnF1ZXJ5Q29tbWFuZEVuYWJsZWQoZCl9Y2F0Y2goZyl7cmV0dXJuISFiW2RdfX1yZXR1cm4hMX19KCksZG9lc0F1dG9MaW5raW5nSW5Db250ZW50RWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYygpfSxjYW5EaXNhYmxlQXV0b0xpbmtpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdXBwb3J0c0NvbW1hbmQoZG9jdW1lbnQsXCJBdXRvVXJsRGV0ZWN0XCIpfSxjbGVhcnNDb250ZW50RWRpdGFibGVDb3JyZWN0bHk6ZnVuY3Rpb24oKXtyZXR1cm4gZnx8aXx8Z30sc3VwcG9ydHNHZXRBdHRyaWJ1dGVDb3JyZWN0bHk6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGRcIik7cmV0dXJuXCIxXCIhPWEuZ2V0QXR0cmlidXRlKFwicm93c3BhblwiKX0sY2FuU2VsZWN0SW1hZ2VzSW5Db250ZW50RWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnx8YygpfHxpfSxhdXRvU2Nyb2xsc1RvQ2FyZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hZ30sYXV0b0Nsb3Nlc1VuY2xvc2VkVGFnczpmdW5jdGlvbigpe3ZhciBhLGIsYz1lLmNsb25lTm9kZSghMSk7cmV0dXJuIGMuaW5uZXJIVE1MPVwiPHA+PGRpdj48L2Rpdj5cIixiPWMuaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCksYT1cIjxwPjwvcD48ZGl2PjwvZGl2PlwiPT09Ynx8XCI8cD48ZGl2PjwvZGl2PjwvcD5cIj09PWIsdGhpcy5hdXRvQ2xvc2VzVW5jbG9zZWRUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGF9LHN1cHBvcnRzTmF0aXZlR2V0RWxlbWVudHNCeUNsYXNzTmFtZTpmdW5jdGlvbigpe3JldHVybi0xIT09KGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUrXCJcIikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIil9LHN1cHBvcnRzU2VsZWN0aW9uTW9kaWZ5OmZ1bmN0aW9uKCl7cmV0dXJuXCJnZXRTZWxlY3Rpb25cImluIHdpbmRvdyYmXCJtb2RpZnlcImluIHdpbmRvdy5nZXRTZWxlY3Rpb24oKX0sbmVlZHNTcGFjZUFmdGVyTGluZUJyZWFrOmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHN1cHBvcnRzU3BlZWNoQXBpT246ZnVuY3Rpb24oYSl7dmFyIGI9ZC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyl8fFt2b2lkIDAsMF07cmV0dXJuIGJbMV0+PTExJiYoXCJvbndlYmtpdHNwZWVjaGNoYW5nZVwiaW4gYXx8XCJzcGVlY2hcImluIGEpfSxjcmFzaGVzV2hlbkRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEpe3JldHVybiBjKDkpJiYoXCJYTUxIdHRwUmVxdWVzdFwiPT09YXx8XCJYRG9tYWluUmVxdWVzdFwiPT09YSl9LGRvZXNBc3luY0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIGMoKX0saGFzUHJvYmxlbXNTZXR0aW5nQ2FyZXRBZnRlckltZzpmdW5jdGlvbigpe3JldHVybiBjKCl9LGhhc1VuZG9JbkNvbnRleHRNZW51OmZ1bmN0aW9uKCl7cmV0dXJuIGZ8fGh8fGl9LGhhc0luc2VydE5vZGVJc3N1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxoYXNJZnJhbWVGb2N1c0lzc3VlOmZ1bmN0aW9uKCl7cmV0dXJuIGMoKX0sY3JlYXRlc05lc3RlZEludmFsaWRNYXJrdXBBZnRlclBhc3RlOmZ1bmN0aW9uKCl7cmV0dXJuIGd9LHN1cHBvcnRzTXV0YXRpb25FdmVudHM6ZnVuY3Rpb24oKXtyZXR1cm5cIk11dGF0aW9uRXZlbnRcImluIHdpbmRvd30sc3VwcG9ydHNNb2RlblBhc3RlOmZ1bmN0aW9uKCl7cmV0dXJuIShcImNsaXBib2FyZERhdGFcImluIHdpbmRvdyl9fX0oKSx3eXNpaHRtbDUubGFuZy5hcnJheT1mdW5jdGlvbihhKXtyZXR1cm57Y29udGFpbnM6ZnVuY3Rpb24oYil7aWYoQXJyYXkuaXNBcnJheShiKSl7Zm9yKHZhciBjPWIubGVuZ3RoO2MtLTspaWYoLTEhPT13eXNpaHRtbDUubGFuZy5hcnJheShhKS5pbmRleE9mKGJbY10pKXJldHVybiEwO3JldHVybiExfXJldHVybi0xIT09d3lzaWh0bWw1LmxhbmcuYXJyYXkoYSkuaW5kZXhPZihiKX0saW5kZXhPZjpmdW5jdGlvbihiKXtpZihhLmluZGV4T2YpcmV0dXJuIGEuaW5kZXhPZihiKTtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LHdpdGhvdXQ6ZnVuY3Rpb24oYil7Yj13eXNpaHRtbDUubGFuZy5hcnJheShiKTtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyliLmNvbnRhaW5zKGFbZF0pfHxjLnB1c2goYVtkXSk7cmV0dXJuIGN9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGgsZD1bXTtjPmI7YisrKWQucHVzaChhW2JdKTtyZXR1cm4gZH0sbWFwOmZ1bmN0aW9uKGIsYyl7aWYoQXJyYXkucHJvdG90eXBlLm1hcClyZXR1cm4gYS5tYXAoYixjKTtmb3IodmFyIGQ9YS5sZW5ndGg+Pj4wLGU9QXJyYXkoZCksZj0wO2Q+ZjtmKyspZVtmXT1iLmNhbGwoYyxhW2ZdLGYsYSk7cmV0dXJuIGV9LHVuaXF1ZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPWEubGVuZ3RoLGQ9MDtjPmQ7KXd5c2lodG1sNS5sYW5nLmFycmF5KGIpLmNvbnRhaW5zKGFbZF0pfHxiLnB1c2goYVtkXSksZCsrO3JldHVybiBifX19LHd5c2lodG1sNS5sYW5nLkRpc3BhdGNoZXI9QmFzZS5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZXZlbnRzPXRoaXMuZXZlbnRzfHx7fSx0aGlzLmV2ZW50c1thXT10aGlzLmV2ZW50c1thXXx8W10sdGhpcy5ldmVudHNbYV0ucHVzaChiKSx0aGlzfSxvZmY6ZnVuY3Rpb24oYSxiKXt0aGlzLmV2ZW50cz10aGlzLmV2ZW50c3x8e307dmFyIGMsZCxlPTA7aWYoYSl7Zm9yKGM9dGhpcy5ldmVudHNbYV18fFtdLGQ9W107ZTxjLmxlbmd0aDtlKyspY1tlXSE9PWImJmImJmQucHVzaChjW2VdKTt0aGlzLmV2ZW50c1thXT1kfWVsc2UgdGhpcy5ldmVudHM9e307cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oYSxiKXt0aGlzLmV2ZW50cz10aGlzLmV2ZW50c3x8e307Zm9yKHZhciBjPXRoaXMuZXZlbnRzW2FdfHxbXSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5jYWxsKHRoaXMsYik7cmV0dXJuIHRoaXN9LG9ic2VydmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHN0b3BPYnNlcnZpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLHd5c2lodG1sNS5sYW5nLm9iamVjdD1mdW5jdGlvbihhKXtyZXR1cm57bWVyZ2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpYVtjXT1iW2NdO3JldHVybiB0aGlzfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oYil7dmFyIGMsZD17fTtpZihudWxsPT09YXx8IXd5c2lodG1sNS5sYW5nLm9iamVjdChhKS5pc1BsYWluT2JqZWN0KCkpcmV0dXJuIGE7Zm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYoZFtjXT1iP3d5c2lodG1sNS5sYW5nLm9iamVjdChhW2NdKS5jbG9uZShiKTphW2NdKTtyZXR1cm4gZH0saXNBcnJheTpmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0saXNGdW5jdGlvbjpmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9fX0sZnVuY3Rpb24oKXt2YXIgYT0vXlxccysvLGI9L1xccyskLyxjPS9bJjw+XFx0XCJdL2csZD17XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIlx0XCI6XCImbmJzcDsgXCJ9O3d5c2lodG1sNS5sYW5nLnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZSs9XCJcIix7dHJpbTpmdW5jdGlvbigpe3JldHVybiBlLnJlcGxhY2UoYSxcIlwiKS5yZXBsYWNlKGIsXCJcIil9LGludGVycG9sYXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKWU9dGhpcy5yZXBsYWNlKFwiI3tcIitiK1wifVwiKS5ieShhW2JdKTtyZXR1cm4gZX0scmVwbGFjZTpmdW5jdGlvbihhKXtyZXR1cm57Ynk6ZnVuY3Rpb24oYil7cmV0dXJuIGUuc3BsaXQoYSkuam9pbihiKX19fSxlc2NhcGVIVE1MOmZ1bmN0aW9uKGEsYil7dmFyIGY9ZS5yZXBsYWNlKGMsZnVuY3Rpb24oYSl7cmV0dXJuIGRbYV19KTtyZXR1cm4gYSYmKGY9Zi5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZyxcIjxiciAvPlwiKSksYiYmKGY9Zi5yZXBsYWNlKC8gIC9naSxcIiZuYnNwOyBcIikpLGZ9fX19KCksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3JldHVybiBmKGEsYik/YTooYT09PWEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJihhPWEub3duZXJEb2N1bWVudC5ib2R5KSxnKGEsYikpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGEucmVwbGFjZShpLGZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPShiLm1hdGNoKGopfHxbXSlbMV18fFwiXCIsZj1sW2VdO3JldHVybiBiPWIucmVwbGFjZShqLFwiXCIpLGIuc3BsaXQoZikubGVuZ3RoPmIuc3BsaXQoZSkubGVuZ3RoJiYoYis9ZSxlPVwiXCIpLGM9YixkPWIsYi5sZW5ndGg+ayYmKGQ9ZC5zdWJzdHIoMCxrKStcIi4uLlwiKSxcInd3dy5cIj09PWMuc3Vic3RyKDAsNCkmJihjPVwiaHR0cDovL1wiK2MpLCc8YSBocmVmPVwiJytjKydcIj4nK2QrXCI8L2E+XCIrZX0pfWZ1bmN0aW9uIGQoYSl7dmFyIGI9YS5fd3lzaWh0bWw1X3RlbXBFbGVtZW50O3JldHVybiBifHwoYj1hLl93eXNpaHRtbDVfdGVtcEVsZW1lbnQ9YS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxifWZ1bmN0aW9uIGUoYil7dmFyIGU9Yi5wYXJlbnROb2RlLGY9YS5sYW5nLnN0cmluZyhiLmRhdGEpLmVzY2FwZUhUTUwoKSxnPWQoZS5vd25lckRvY3VtZW50KTtmb3IoZy5pbm5lckhUTUw9XCI8c3Bhbj48L3NwYW4+XCIrYyhmKSxnLnJlbW92ZUNoaWxkKGcuZmlyc3RDaGlsZCk7Zy5maXJzdENoaWxkOyllLmluc2VydEJlZm9yZShnLmZpcnN0Q2hpbGQsYik7ZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBmKGIsYyl7Zm9yKHZhciBkO2IucGFyZW50Tm9kZTspe2lmKGI9Yi5wYXJlbnROb2RlLGQ9Yi5ub2RlTmFtZSxiLmNsYXNzTmFtZSYmYS5sYW5nLmFycmF5KGIuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKSkuY29udGFpbnMoYykpcmV0dXJuITA7aWYoaC5jb250YWlucyhkKSlyZXR1cm4hMDtpZihcImJvZHlcIj09PWQpcmV0dXJuITF9cmV0dXJuITF9ZnVuY3Rpb24gZyhiLGMpe2lmKCEoaC5jb250YWlucyhiLm5vZGVOYW1lKXx8Yi5jbGFzc05hbWUmJmEubGFuZy5hcnJheShiLmNsYXNzTmFtZS5zcGxpdChcIiBcIikpLmNvbnRhaW5zKGMpKSl7aWYoYi5ub2RlVHlwZT09PWEuVEVYVF9OT0RFJiZiLmRhdGEubWF0Y2goaSkpcmV0dXJuIGUoYiksdm9pZCAwO2Zvcih2YXIgZD1hLmxhbmcuYXJyYXkoYi5jaGlsZE5vZGVzKS5nZXQoKSxmPWQubGVuZ3RoLGo9MDtmPmo7aisrKWcoZFtqXSxjKTtyZXR1cm4gYn19dmFyIGg9YS5sYW5nLmFycmF5KFtcIkNPREVcIixcIlBSRVwiLFwiQVwiLFwiU0NSSVBUXCIsXCJIRUFEXCIsXCJUSVRMRVwiLFwiU1RZTEVcIl0pLGk9LygoaHR0cHM/OlxcL1xcL3x3d3dcXC4pW15cXHM8XXszLH0pL2dpLGo9LyhbXlxcd1xcL1xcLV0oLD8pKSQvaSxrPTEwMCxsPXtcIilcIjpcIihcIixcIl1cIjpcIltcIixcIn1cIjpcIntcIn07YS5kb20uYXV0b0xpbms9YixhLmRvbS5hdXRvTGluay5VUkxfUkVHX0VYUD1pfSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPWEuZG9tO2IuYWRkQ2xhc3M9ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmNsYXNzTGlzdDtyZXR1cm4gZD9kLmFkZChjKTooYi5oYXNDbGFzcyhhLGMpfHwoYS5jbGFzc05hbWUrPVwiIFwiK2MpLHZvaWQgMCl9LGIucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmNsYXNzTGlzdDtyZXR1cm4gYz9jLnJlbW92ZShiKTooYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZShSZWdFeHAoXCIoXnxcXFxccyspXCIrYitcIihcXFxccyt8JClcIiksXCIgXCIpLHZvaWQgMCl9LGIuaGFzQ2xhc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWEuY2xhc3NMaXN0O3JldHVybiBkP2QuY29udGFpbnMoYik6KGM9YS5jbGFzc05hbWUsYy5sZW5ndGg+MCYmKGM9PWJ8fFJlZ0V4cChcIihefFxcXFxzKVwiK2IrXCIoXFxcXHN8JClcIikudGVzdChjKSkpfX0od3lzaWh0bWw1KSx3eXNpaHRtbDUuZG9tLmNvbnRhaW5zPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBhLmNvbnRhaW5zP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGIubm9kZVR5cGUhPT13eXNpaHRtbDUuRUxFTUVOVF9OT0RFJiYoYj1iLnBhcmVudE5vZGUpLGEhPT1iJiZhLmNvbnRhaW5zKGIpfTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGEsYil7cmV0dXJuISEoMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSl9OnZvaWQgMH0oKSx3eXNpaHRtbDUuZG9tLmNvbnZlcnRUb0xpc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KFwibGlcIik7cmV0dXJuIGIuYXBwZW5kQ2hpbGQoYyksY31mdW5jdGlvbiBiKGEsYil7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChiKX1mdW5jdGlvbiBjKGMsZCxlKXtpZihcIlVMXCI9PT1jLm5vZGVOYW1lfHxcIk9MXCI9PT1jLm5vZGVOYW1lfHxcIk1FTlVcIj09PWMubm9kZU5hbWUpcmV0dXJuIGM7dmFyIGYsZyxoLGksaixrLGwsbSxuLG89Yy5vd25lckRvY3VtZW50LHA9YihvLGQpLHE9Yy5xdWVyeVNlbGVjdG9yQWxsKFwiYnJcIikscj1xLmxlbmd0aDtmb3Iobj0wO3I+bjtuKyspZm9yKGk9cVtuXTsoaj1pLnBhcmVudE5vZGUpJiZqIT09YyYmai5sYXN0Q2hpbGQ9PT1pOyl7aWYoXCJibG9ja1wiPT09d3lzaWh0bWw1LmRvbS5nZXRTdHlsZShcImRpc3BsYXlcIikuZnJvbShqKSl7ai5yZW1vdmVDaGlsZChpKTticmVha313eXNpaHRtbDUuZG9tLmluc2VydChpKS5hZnRlcihpLnBhcmVudE5vZGUpfWZvcihmPXd5c2lodG1sNS5sYW5nLmFycmF5KGMuY2hpbGROb2RlcykuZ2V0KCksZz1mLmxlbmd0aCxuPTA7Zz5uO24rKyltPW18fGEobyxwKSxoPWZbbl0saz1cImJsb2NrXCI9PT13eXNpaHRtbDUuZG9tLmdldFN0eWxlKFwiZGlzcGxheVwiKS5mcm9tKGgpLGw9XCJCUlwiPT09aC5ub2RlTmFtZSwha3x8ZSYmd3lzaWh0bWw1LmRvbS5oYXNDbGFzcyhoLGUpP2w/bT1tLmZpcnN0Q2hpbGQ/bnVsbDptOm0uYXBwZW5kQ2hpbGQoaCk6KG09bS5maXJzdENoaWxkP2EobyxwKTptLG0uYXBwZW5kQ2hpbGQoaCksbT1udWxsKTtyZXR1cm4gMD09PWYubGVuZ3RoJiZhKG8scCksYy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGMpLHB9cmV0dXJuIGN9KCksd3lzaWh0bWw1LmRvbS5jb3B5QXR0cmlidXRlcz1mdW5jdGlvbihhKXtyZXR1cm57ZnJvbTpmdW5jdGlvbihiKXtyZXR1cm57dG86ZnVuY3Rpb24oYyl7Zm9yKHZhciBkLGU9MCxmPWEubGVuZ3RoO2Y+ZTtlKyspZD1hW2VdLHZvaWQgMCE9PWJbZF0mJlwiXCIhPT1iW2RdJiYoY1tkXT1iW2RdKTtyZXR1cm57YW5kVG86YXJndW1lbnRzLmNhbGxlZX19fX19fSxmdW5jdGlvbihhKXt2YXIgYj1bXCItd2Via2l0LWJveC1zaXppbmdcIixcIi1tb3otYm94LXNpemluZ1wiLFwiLW1zLWJveC1zaXppbmdcIixcImJveC1zaXppbmdcIl0sYz1mdW5jdGlvbihiKXtyZXR1cm4gZChiKT9wYXJzZUludChhLmdldFN0eWxlKFwid2lkdGhcIikuZnJvbShiKSwxMCk8Yi5vZmZzZXRXaWR0aDohMX0sZD1mdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspaWYoXCJib3JkZXItYm94XCI9PT1hLmdldFN0eWxlKGJbZF0pLmZyb20oYykpcmV0dXJuIGJbZF19O2EuY29weVN0eWxlcz1mdW5jdGlvbihkKXtyZXR1cm57ZnJvbTpmdW5jdGlvbihlKXtjKGUpJiYoZD13eXNpaHRtbDUubGFuZy5hcnJheShkKS53aXRob3V0KGIpKTtmb3IodmFyIGYsZz1cIlwiLGg9ZC5sZW5ndGgsaT0wO2g+aTtpKyspZj1kW2ldLGcrPWYrXCI6XCIrYS5nZXRTdHlsZShmKS5mcm9tKGUpK1wiO1wiO3JldHVybnt0bzpmdW5jdGlvbihiKXtyZXR1cm4gYS5zZXRTdHlsZXMoZykub24oYikse2FuZFRvOmFyZ3VtZW50cy5jYWxsZWV9fX19fX19KHd5c2lodG1sNS5kb20pLGZ1bmN0aW9uKGEpe2EuZG9tLmRlbGVnYXRlPWZ1bmN0aW9uKGIsYyxkLGUpe3JldHVybiBhLmRvbS5vYnNlcnZlKGIsZCxmdW5jdGlvbihkKXtmb3IodmFyIGY9ZC50YXJnZXQsZz1hLmxhbmcuYXJyYXkoYi5xdWVyeVNlbGVjdG9yQWxsKGMpKTtmJiZmIT09Yjspe2lmKGcuY29udGFpbnMoZikpe2UuY2FsbChmLGQpO2JyZWFrfWY9Zi5wYXJlbnROb2RlfX0pfX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXthLmRvbS5kb21Ob2RlPWZ1bmN0aW9uKGIpe3ZhciBjPVthLkVMRU1FTlRfTk9ERSxhLlRFWFRfTk9ERV0sZD1mdW5jdGlvbihiKXtyZXR1cm4gYi5ub2RlVHlwZT09PWEuVEVYVF9OT0RFJiYvXlxccyokL2cudGVzdChiLmRhdGEpfTtyZXR1cm57cHJldjpmdW5jdGlvbihlKXt2YXIgZj1iLnByZXZpb3VzU2libGluZyxnPWUmJmUubm9kZVR5cGVzP2Uubm9kZVR5cGVzOmM7cmV0dXJuIGY/IWEubGFuZy5hcnJheShnKS5jb250YWlucyhmLm5vZGVUeXBlKXx8ZSYmZS5pZ25vcmVCbGFua1RleHRzJiZkKGYpP2EuZG9tLmRvbU5vZGUoZikucHJldihlKTpmOm51bGx9LG5leHQ6ZnVuY3Rpb24oZSl7dmFyIGY9Yi5uZXh0U2libGluZyxnPWUmJmUubm9kZVR5cGVzP2Uubm9kZVR5cGVzOmM7cmV0dXJuIGY/IWEubGFuZy5hcnJheShnKS5jb250YWlucyhmLm5vZGVUeXBlKXx8ZSYmZS5pZ25vcmVCbGFua1RleHRzJiZkKGYpP2EuZG9tLmRvbU5vZGUoZikubmV4dChlKTpmOm51bGx9fX19KHd5c2lodG1sNSksd3lzaWh0bWw1LmRvbS5nZXRBc0RvbT1mdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Muc3R5bGUuZGlzcGxheT1cIm5vbmVcIixiLmJvZHkuYXBwZW5kQ2hpbGQoYyk7dHJ5e2MuaW5uZXJIVE1MPWF9Y2F0Y2goZCl7fXJldHVybiBiLmJvZHkucmVtb3ZlQ2hpbGQoYyksY30sYj1mdW5jdGlvbihhKXtpZighYS5fd3lzaWh0bWw1X3N1cHBvcnRzSFRNTDVUYWdzKXtmb3IodmFyIGI9MCxkPWMubGVuZ3RoO2Q+YjtiKyspYS5jcmVhdGVFbGVtZW50KGNbYl0pO2EuX3d5c2lodG1sNV9zdXBwb3J0c0hUTUw1VGFncz0hMH19LGM9W1wiYWJiclwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiZGlcIixcImNhbnZhc1wiLFwiY29tbWFuZFwiLFwiZGF0YWxpc3RcIixcImRldGFpbHNcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwia2V5Z2VuXCIsXCJtYXJrXCIsXCJtZXRlclwiLFwibmF2XCIsXCJvdXRwdXRcIixcInByb2dyZXNzXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInN2Z1wiLFwic2VjdGlvblwiLFwic291cmNlXCIsXCJzdW1tYXJ5XCIsXCJ0aW1lXCIsXCJ0cmFja1wiLFwidmlkZW9cIixcIndiclwiXTtyZXR1cm4gZnVuY3Rpb24oYyxkKXtkPWR8fGRvY3VtZW50O3ZhciBlO3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBjJiZjLm5vZGVUeXBlPyhlPWQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlLmFwcGVuZENoaWxkKGMpKTp3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0hUTUw1VGFncyhkKT8oZT1kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZS5pbm5lckhUTUw9Yyk6KGIoZCksZT1hKGMsZCkpLGV9fSgpLHd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtyZXR1cm4gYiYmYi5sZW5ndGg/XCJzdHJpbmdcIj09dHlwZW9mIGI/YT09PWI6d3lzaWh0bWw1LmxhbmcuYXJyYXkoYikuY29udGFpbnMoYSk6ITB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PXd5c2lodG1sNS5FTEVNRU5UX05PREV9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9KGEuY2xhc3NOYW1lfHxcIlwiKS5tYXRjaChjKXx8W107cmV0dXJuIGI/ZFtkLmxlbmd0aC0xXT09PWI6ISFkLmxlbmd0aH1mdW5jdGlvbiBkKGEsYixjKXt2YXIgZD0oYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKXx8XCJcIikubWF0Y2goYyl8fFtdO3JldHVybiBiP2RbZC5sZW5ndGgtMV09PT1iOiEhZC5sZW5ndGh9cmV0dXJuIGZ1bmN0aW9uKGUsZixnLGgpe3ZhciBpPWYuY3NzU3R5bGV8fGYuc3R5bGVSZWdFeHAsaj1mLmNsYXNzTmFtZXx8Zi5jbGFzc1JlZ0V4cDtmb3IoZz1nfHw1MDtnLS0mJmUmJlwiQk9EWVwiIT09ZS5ub2RlTmFtZSYmKCFofHxlIT09aCk7KXtpZihiKGUpJiZhKGUubm9kZU5hbWUsZi5ub2RlTmFtZSkmJighaXx8ZChlLGYuY3NzU3R5bGUsZi5zdHlsZVJlZ0V4cCkpJiYoIWp8fGMoZSxmLmNsYXNzTmFtZSxmLmNsYXNzUmVnRXhwKSkpcmV0dXJuIGU7ZT1lLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9fSgpLHd5c2lodG1sNS5kb20uZ2V0U3R5bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnJlcGxhY2UoYyxmdW5jdGlvbihhKXtyZXR1cm4gYS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKVxufSl9dmFyIGI9e1wiZmxvYXRcIjpcInN0eWxlRmxvYXRcImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGU/XCJzdHlsZUZsb2F0XCI6XCJjc3NGbG9hdFwifSxjPS9cXC1bYS16XS9nO3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm57ZnJvbTpmdW5jdGlvbihkKXt2YXIgZSxmLGcsaCxpLGosayxsLG07aWYoZC5ub2RlVHlwZT09PXd5c2lodG1sNS5FTEVNRU5UX05PREUpe2lmKGU9ZC5vd25lckRvY3VtZW50LGY9YltjXXx8YShjKSxnPWQuc3R5bGUsaD1kLmN1cnJlbnRTdHlsZSxpPWdbZl0saSlyZXR1cm4gaTtpZihoKXRyeXtyZXR1cm4gaFtmXX1jYXRjaChuKXt9cmV0dXJuIGo9ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3csaz0oXCJoZWlnaHRcIj09PWN8fFwid2lkdGhcIj09PWMpJiZcIlRFWFRBUkVBXCI9PT1kLm5vZGVOYW1lLGouZ2V0Q29tcHV0ZWRTdHlsZT8oayYmKGw9Zy5vdmVyZmxvdyxnLm92ZXJmbG93PVwiaGlkZGVuXCIpLG09ai5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjKSxrJiYoZy5vdmVyZmxvdz1sfHxcIlwiKSxtKTp2b2lkIDB9fX19fSgpLHd5c2lodG1sNS5kb20uZ2V0VGV4dE5vZGVzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKTM9PWEubm9kZVR5cGU/YiYmL15cXHMqJC8udGVzdChhLmlubmVyVGV4dHx8YS50ZXh0Q29udGVudCl8fGMucHVzaChhKTpjPWMuY29uY2F0KHd5c2lodG1sNS5kb20uZ2V0VGV4dE5vZGVzKGEsYikpO3JldHVybiBjfSx3eXNpaHRtbDUuZG9tLmhhc0VsZW1lbnRXaXRoVGFnTmFtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEuX3d5c2lodG1sNV9pZGVudGlmaWVyfHwoYS5fd3lzaWh0bWw1X2lkZW50aWZpZXI9YysrKX12YXIgYj17fSxjPTE7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShjKStcIjpcIitkLGY9YltlXTtyZXR1cm4gZnx8KGY9YltlXT1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKGQpKSxmLmxlbmd0aD4wfX0oKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3JldHVybiBhLl93eXNpaHRtbDVfaWRlbnRpZmllcnx8KGEuX3d5c2lodG1sNV9pZGVudGlmaWVyPWQrKyl9dmFyIGM9e30sZD0xO2EuZG9tLmhhc0VsZW1lbnRXaXRoQ2xhc3NOYW1lPWZ1bmN0aW9uKGQsZSl7aWYoIWEuYnJvd3Nlci5zdXBwb3J0c05hdGl2ZUdldEVsZW1lbnRzQnlDbGFzc05hbWUoKSlyZXR1cm4hIWQucXVlcnlTZWxlY3RvcihcIi5cIitlKTt2YXIgZj1iKGQpK1wiOlwiK2UsZz1jW2ZdO3JldHVybiBnfHwoZz1jW2ZdPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKSksZy5sZW5ndGg+MH19KHd5c2lodG1sNSksd3lzaWh0bWw1LmRvbS5pbnNlcnQ9ZnVuY3Rpb24oYSl7cmV0dXJue2FmdGVyOmZ1bmN0aW9uKGIpe2IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiLm5leHRTaWJsaW5nKX0sYmVmb3JlOmZ1bmN0aW9uKGIpe2IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiKX0saW50bzpmdW5jdGlvbihiKXtiLmFwcGVuZENoaWxkKGEpfX19LHd5c2lodG1sNS5kb20uaW5zZXJ0Q1NTPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEuam9pbihcIlxcblwiKSx7aW50bzpmdW5jdGlvbihiKXt2YXIgYyxkLGU9Yi5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIGUudHlwZT1cInRleHQvY3NzXCIsZS5zdHlsZVNoZWV0P2Uuc3R5bGVTaGVldC5jc3NUZXh0PWE6ZS5hcHBlbmRDaGlsZChiLmNyZWF0ZVRleHROb2RlKGEpKSxjPWIucXVlcnlTZWxlY3RvcihcImhlYWQgbGlua1wiKSxjPyhjLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsYyksdm9pZCAwKTooZD1iLnF1ZXJ5U2VsZWN0b3IoXCJoZWFkXCIpLGQmJmQuYXBwZW5kQ2hpbGQoZSksdm9pZCAwKX19fSxmdW5jdGlvbihhKXthLmRvbS5saW5lQnJlYWtzPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuXCJCUlwiPT09YS5ub2RlTmFtZX1mdW5jdGlvbiBkKGIpe3JldHVybiBjKGIpPyEwOlwiYmxvY2tcIj09PWEuZG9tLmdldFN0eWxlKFwiZGlzcGxheVwiKS5mcm9tKGIpPyEwOiExfXJldHVybnthZGQ6ZnVuY3Rpb24oKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQsZT1hLmRvbS5kb21Ob2RlKGIpLm5leHQoe2lnbm9yZUJsYW5rVGV4dHM6ITB9KSxmPWEuZG9tLmRvbU5vZGUoYikucHJldih7aWdub3JlQmxhbmtUZXh0czohMH0pO2UmJiFkKGUpJiZhLmRvbS5pbnNlcnQoYy5jcmVhdGVFbGVtZW50KFwiYnJcIikpLmFmdGVyKGIpLGYmJiFkKGYpJiZhLmRvbS5pbnNlcnQoYy5jcmVhdGVFbGVtZW50KFwiYnJcIikpLmJlZm9yZShiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dmFyIGQ9YS5kb20uZG9tTm9kZShiKS5uZXh0KHtpZ25vcmVCbGFua1RleHRzOiEwfSksZT1hLmRvbS5kb21Ob2RlKGIpLnByZXYoe2lnbm9yZUJsYW5rVGV4dHM6ITB9KTtkJiZjKGQpJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCksZSYmYyhlKSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX19fSh3eXNpaHRtbDUpLHd5c2lodG1sNS5kb20ub2JzZXJ2ZT1mdW5jdGlvbihhLGIsYyl7Yj1cInN0cmluZ1wiPT10eXBlb2YgYj9bYl06Yjtmb3IodmFyIGQsZSxmPTAsZz1iLmxlbmd0aDtnPmY7ZisrKWU9YltmXSxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGUsYywhMSk6KGQ9ZnVuY3Rpb24oYil7XCJ0YXJnZXRcImluIGJ8fChiLnRhcmdldD1iLnNyY0VsZW1lbnQpLGIucHJldmVudERlZmF1bHQ9Yi5wcmV2ZW50RGVmYXVsdHx8ZnVuY3Rpb24oKXt0aGlzLnJldHVyblZhbHVlPSExfSxiLnN0b3BQcm9wYWdhdGlvbj1iLnN0b3BQcm9wYWdhdGlvbnx8ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEJ1YmJsZT0hMH0sYy5jYWxsKGEsYil9LGEuYXR0YWNoRXZlbnQoXCJvblwiK2UsZCkpO3JldHVybntzdG9wOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLGY9MCxnPWIubGVuZ3RoO2c+ZjtmKyspZT1iW2ZdLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9hLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxjLCExKTphLmRldGFjaEV2ZW50KFwib25cIitlLGQpfX19LHd5c2lodG1sNS5kb20ucGFyc2U9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGMsZixnLGgsaSxqLGssbCxtO2Zvcih3eXNpaHRtbDUubGFuZy5vYmplY3QodCkubWVyZ2UocykubWVyZ2UoYi5ydWxlcykuZ2V0KCksYz1iLmNvbnRleHR8fGEub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQsZj1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxnPVwic3RyaW5nXCI9PXR5cGVvZiBhLGg9ITEsYi5jbGVhckludGVybmFscz09PSEwJiYoaD0hMCksaT1nP3d5c2lodG1sNS5kb20uZ2V0QXNEb20oYSxjKTphLHQuc2VsZWN0b3JzJiZlKGksdC5zZWxlY3RvcnMpO2kuZmlyc3RDaGlsZDspaz1pLmZpcnN0Q2hpbGQsaj1kKGssYi5jbGVhblVwLGgsYi51bmVkaXRhYmxlQ2xhc3MpLGomJmYuYXBwZW5kQ2hpbGQoaiksayE9PWomJmkucmVtb3ZlQ2hpbGQoayk7aWYoYi51bmpvaW5OYnNwcylmb3IobD13eXNpaHRtbDUuZG9tLmdldFRleHROb2RlcyhmKSxtPWwubGVuZ3RoO20tLTspbFttXS5ub2RlVmFsdWU9bFttXS5ub2RlVmFsdWUucmVwbGFjZSgvKFtcXFNcXHUwMEEwXSlcXHUwMEEwL2dpLFwiJDEgXCIpO3JldHVybiBpLmlubmVySFRNTD1cIlwiLGkuYXBwZW5kQ2hpbGQoZiksZz93eXNpaHRtbDUucXVpcmtzLmdldENvcnJlY3RJbm5lckhUTUwoaSk6aX1mdW5jdGlvbiBkKGEsYixjLGUpe3ZhciBmLGcsaCxpPWEubm9kZVR5cGUsaj1hLmNoaWxkTm9kZXMsaz1qLmxlbmd0aCxsPXBbaV0sbT0wO2lmKGUmJjE9PT1pJiZ3eXNpaHRtbDUuZG9tLmhhc0NsYXNzKGEsZSkpcmV0dXJuIGE7aWYoZz1sJiZsKGEsYyksIWcpe2lmKGc9PT0hMSl7Zm9yKGY9YS5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxtPWs7bS0tOylqW21dJiYoaD1kKGpbbV0sYixjLGUpLGgmJihqW21dPT09aCYmbS0tLGYuaW5zZXJ0QmVmb3JlKGgsZi5maXJzdENoaWxkKSkpO3JldHVyblwiYmxvY2tcIj09PXd5c2lodG1sNS5kb20uZ2V0U3R5bGUoXCJkaXNwbGF5XCIpLmZyb20oYSkmJmYuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSksd3lzaWh0bWw1LmxhbmcuYXJyYXkoW1wiZGl2XCIsXCJwcmVcIixcInBcIixcInRhYmxlXCIsXCJ0ZFwiLFwidGhcIixcInVsXCIsXCJvbFwiLFwibGlcIixcImRkXCIsXCJkbFwiLFwiZm9vdGVyXCIsXCJoZWFkZXJcIixcInNlY3Rpb25cIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIl0pLmNvbnRhaW5zKGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJmEucGFyZW50Tm9kZS5sYXN0Q2hpbGQhPT1hJiYoYS5uZXh0U2libGluZyYmMz09PWEubmV4dFNpYmxpbmcubm9kZVR5cGUmJi9eXFxzLy50ZXN0KGEubmV4dFNpYmxpbmcubm9kZVZhbHVlKXx8Zi5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCIgXCIpKSksZi5ub3JtYWxpemUmJmYubm9ybWFsaXplKCksZn1yZXR1cm4gbnVsbH1mb3IobT0wO2s+bTttKyspalttXSYmKGg9ZChqW21dLGIsYyxlKSxoJiYoalttXT09PWgmJm0tLSxnLmFwcGVuZENoaWxkKGgpKSk7aWYoYiYmZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cSYmKCFnLmNoaWxkTm9kZXMubGVuZ3RofHwvXlxccyokL2dpLnRlc3QoZy5pbm5lckhUTUwpJiYoY3x8XCJfd3lzaWh0bWw1LXRlbXAtcGxhY2Vob2xkZXJcIiE9PWEuY2xhc3NOYW1lJiZcInJhbmd5U2VsZWN0aW9uQm91bmRhcnlcIiE9PWEuY2xhc3NOYW1lKXx8IWcuYXR0cmlidXRlcy5sZW5ndGgpKXtmb3IoZj1nLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2cuZmlyc3RDaGlsZDspZi5hcHBlbmRDaGlsZChnLmZpcnN0Q2hpbGQpO3JldHVybiBmLm5vcm1hbGl6ZSYmZi5ub3JtYWxpemUoKSxmfXJldHVybiBnLm5vcm1hbGl6ZSYmZy5ub3JtYWxpemUoKSxnfWZ1bmN0aW9uIGUoYSxiKXt2YXIgYyxkLGUsZjtmb3IoYyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoYykpZm9yKHd5c2lodG1sNS5sYW5nLm9iamVjdChiW2NdKS5pc0Z1bmN0aW9uKCk/ZD1iW2NdOlwic3RyaW5nXCI9PXR5cGVvZiBiW2NdJiZ6W2JbY11dJiYoZD16W2JbY11dKSxlPWEucXVlcnlTZWxlY3RvckFsbChjKSxmPWUubGVuZ3RoO2YtLTspZChlW2ZdKX1mdW5jdGlvbiBmKGEsYil7dmFyIGMsZCxlLGY9dC50YWdzLGg9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGo9YS5zY29wZU5hbWU7aWYoYS5fd3lzaWh0bWw1KXJldHVybiBudWxsO2lmKGEuX3d5c2lodG1sNT0xLFwid3lzaWh0bWw1LXRlbXBcIj09PWEuY2xhc3NOYW1lKXJldHVybiBudWxsO2lmKGomJlwiSFRNTFwiIT1qJiYoaD1qK1wiOlwiK2gpLFwib3V0ZXJIVE1MXCJpbiBhJiYod3lzaWh0bWw1LmJyb3dzZXIuYXV0b0Nsb3Nlc1VuY2xvc2VkVGFncygpfHxcIlBcIiE9PWEubm9kZU5hbWV8fFwiPC9wPlwiPT09YS5vdXRlckhUTUwuc2xpY2UoLTQpLnRvTG93ZXJDYXNlKCl8fChoPVwiZGl2XCIpKSxoIGluIGYpe2lmKGM9ZltoXSwhY3x8Yy5yZW1vdmUpcmV0dXJuIG51bGw7aWYoYy51bndyYXApcmV0dXJuITE7Yz1cInN0cmluZ1wiPT10eXBlb2YgYz97cmVuYW1lX3RhZzpjfTpjfWVsc2V7aWYoIWEuZmlyc3RDaGlsZClyZXR1cm4gbnVsbDtjPXtyZW5hbWVfdGFnOnF9fWlmKGMub25lX29mX3R5cGUmJiFnKGEsdCxjLm9uZV9vZl90eXBlLGIpKXtpZighYy5yZW1vdmVfYWN0aW9uKXJldHVybiBudWxsO2lmKFwidW53cmFwXCI9PT1jLnJlbW92ZV9hY3Rpb24pcmV0dXJuITE7aWYoXCJyZW5hbWVcIiE9PWMucmVtb3ZlX2FjdGlvbilyZXR1cm4gbnVsbDtlPWMucmVtb3ZlX2FjdGlvbl9yZW5hbWVfdG98fHF9cmV0dXJuIGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZXx8Yy5yZW5hbWVfdGFnfHxoKSxtKGEsZCxjLGIpLGkoYSxkLGMpLGE9bnVsbCxkLm5vcm1hbGl6ZSYmZC5ub3JtYWxpemUoKSxkfWZ1bmN0aW9uIGcoYSxiLGMsZCl7dmFyIGUsZjtpZihcIlNQQU5cIj09PWEubm9kZU5hbWUmJiFkJiYoXCJfd3lzaWh0bWw1LXRlbXAtcGxhY2Vob2xkZXJcIj09PWEuY2xhc3NOYW1lfHxcInJhbmd5U2VsZWN0aW9uQm91bmRhcnlcIj09PWEuY2xhc3NOYW1lKSlyZXR1cm4hMDtmb3IoZiBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZikmJmIudHlwZV9kZWZpbml0aW9ucyYmYi50eXBlX2RlZmluaXRpb25zW2ZdJiYoZT1iLnR5cGVfZGVmaW5pdGlvbnNbZl0saChhLGUpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBoKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrPWEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIiksbD1hLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO2lmKGIubWV0aG9kcylmb3IoaCBpbiBiLm1ldGhvZHMpaWYoYi5tZXRob2RzLmhhc093blByb3BlcnR5KGgpJiZ5W2hdJiZ5W2hdKGEpKXJldHVybiEwO2lmKGsmJmIuY2xhc3Nlcylmb3Ioaz1rLnJlcGxhY2UoL15cXHMrL2csXCJcIikucmVwbGFjZSgvXFxzKyQvZyxcIlwiKS5zcGxpdChyKSxjPWsubGVuZ3RoLGk9MDtjPmk7aSsrKWlmKGIuY2xhc3Nlc1trW2ldXSlyZXR1cm4hMDtpZihsJiZiLnN0eWxlcyl7bD1sLnNwbGl0KFwiO1wiKTtmb3IoZCBpbiBiLnN0eWxlcylpZihiLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShkKSlmb3Ioaj1sLmxlbmd0aDtqLS07KWlmKGc9bFtqXS5zcGxpdChcIjpcIiksZ1swXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS50b0xvd2VyQ2FzZSgpPT09ZCYmKGIuc3R5bGVzW2RdPT09ITB8fDE9PT1iLnN0eWxlc1tkXXx8d3lzaWh0bWw1LmxhbmcuYXJyYXkoYi5zdHlsZXNbZF0pLmNvbnRhaW5zKGdbMV0ucmVwbGFjZSgvXFxzL2csXCJcIikudG9Mb3dlckNhc2UoKSkpKXJldHVybiEwfWlmKGIuYXR0cnMpZm9yKGUgaW4gYi5hdHRycylpZihiLmF0dHJzLmhhc093blByb3BlcnR5KGUpJiYoZj13eXNpaHRtbDUuZG9tLmdldEF0dHJpYnV0ZShhLGUpLFwic3RyaW5nXCI9PXR5cGVvZiBmJiZmLnNlYXJjaChiLmF0dHJzW2VdKT4tMSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQsZTtpZihjJiZjLmtlZXBfc3R5bGVzKWZvcihkIGluIGMua2VlcF9zdHlsZXMpaWYoYy5rZWVwX3N0eWxlcy5oYXNPd25Qcm9wZXJ0eShkKSl7aWYoZT1cImZsb2F0XCI9PT1kP2Euc3R5bGUuc3R5bGVGbG9hdHx8YS5zdHlsZS5jc3NGbG9hdDphLnN0eWxlW2RdLGMua2VlcF9zdHlsZXNbZF1pbnN0YW5jZW9mIFJlZ0V4cCYmIWMua2VlcF9zdHlsZXNbZF0udGVzdChlKSljb250aW51ZTtcImZsb2F0XCI9PT1kP2Iuc3R5bGVbYS5zdHlsZS5zdHlsZUZsb2F0P1wic3R5bGVGbG9hdFwiOlwiY3NzRmxvYXRcIl09ZTphLnN0eWxlW2RdJiYoYi5zdHlsZVtkXT1lKX19ZnVuY3Rpb24gaihhLGIpe3ZhciBjLGQ9W107Zm9yKGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYwPT09Yy5pbmRleE9mKGEpJiZkLnB1c2goYyk7cmV0dXJuIGR9ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZSxmPXZbY107cmV0dXJuIGYmJihifHxcImFsdFwiPT09YSYmXCJJTUdcIj09ZCkmJihlPWYoYiksXCJzdHJpbmdcIj09dHlwZW9mIGUpP2U6ITF9ZnVuY3Rpb24gbChhLGIpe3ZhciBjLGQsZSxmLGcsaD13eXNpaHRtbDUubGFuZy5vYmplY3QodC5hdHRyaWJ1dGVzfHx7fSkuY2xvbmUoKSxpPXd5c2lodG1sNS5sYW5nLm9iamVjdChoKS5tZXJnZSh3eXNpaHRtbDUubGFuZy5vYmplY3QoYnx8e30pLmNsb25lKCkpLmdldCgpLGw9e30sbT13eXNpaHRtbDUuZG9tLmdldEF0dHJpYnV0ZXMoYSk7Zm9yKGMgaW4gaSlpZigvXFwqJC8udGVzdChjKSlmb3IoZT1qKGMuc2xpY2UoMCwtMSksbSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylkPWsoZVtmXSxtW2VbZl1dLGlbY10sYS5ub2RlTmFtZSksZCE9PSExJiYobFtlW2ZdXT1kKTtlbHNlIGQ9ayhjLG1bY10saVtjXSxhLm5vZGVOYW1lKSxkIT09ITEmJihsW2NdPWQpO3JldHVybiBsfWZ1bmN0aW9uIG0oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9Yy5zZXRfY2xhc3MsbT1jLmFkZF9jbGFzcyxuPWMuYWRkX3N0eWxlLG89Yy5zZXRfYXR0cmlidXRlcyxwPXQuY2xhc3NlcyxxPTAscz1bXSx1PVtdLHY9W10seT1bXTtpZihvJiYoaj13eXNpaHRtbDUubGFuZy5vYmplY3QobykuY2xvbmUoKSksaj13eXNpaHRtbDUubGFuZy5vYmplY3QoaikubWVyZ2UobChhLGMuY2hlY2tfYXR0cmlidXRlcykpLmdldCgpLGsmJnMucHVzaChrKSxtKWZvcihoIGluIG0paT14W21baF1dLGkmJihnPWkod3lzaWh0bWw1LmRvbS5nZXRBdHRyaWJ1dGUoYSxoKSksXCJzdHJpbmdcIj09dHlwZW9mIGcmJnMucHVzaChnKSk7aWYobilmb3IoaCBpbiBuKWk9d1tuW2hdXSxpJiYobmV3U3R5bGU9aSh3eXNpaHRtbDUuZG9tLmdldEF0dHJpYnV0ZShhLGgpKSxcInN0cmluZ1wiPT10eXBlb2YgbmV3U3R5bGUmJnUucHVzaChuZXdTdHlsZSkpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBwJiZcImFueVwiPT09cCYmYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSlpZih0LmNsYXNzZXNfYmxhY2tsaXN0KXtmb3IoeT1hLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLHkmJihzPXMuY29uY2F0KHkuc3BsaXQocikpKSxlPXMubGVuZ3RoO2U+cTtxKyspZj1zW3FdLHQuY2xhc3Nlc19ibGFja2xpc3RbZl18fHYucHVzaChmKTt2Lmxlbmd0aCYmKGpbXCJjbGFzc1wiXT13eXNpaHRtbDUubGFuZy5hcnJheSh2KS51bmlxdWUoKS5qb2luKFwiIFwiKSl9ZWxzZSBqW1wiY2xhc3NcIl09YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtlbHNle2ZvcihkfHwocFtcIl93eXNpaHRtbDUtdGVtcC1wbGFjZWhvbGRlclwiXT0xLHAuX3Jhbmd5U2VsZWN0aW9uQm91bmRhcnk9MSxwW1wid3lzaXd5Zy10bXAtc2VsZWN0ZWQtY2VsbFwiXT0xKSx5PWEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikseSYmKHM9cy5jb25jYXQoeS5zcGxpdChyKSkpLGU9cy5sZW5ndGg7ZT5xO3ErKylmPXNbcV0scFtmXSYmdi5wdXNoKGYpO3YubGVuZ3RoJiYoaltcImNsYXNzXCJdPXd5c2lodG1sNS5sYW5nLmFycmF5KHYpLnVuaXF1ZSgpLmpvaW4oXCIgXCIpKX1qW1wiY2xhc3NcIl0mJmQmJihqW1wiY2xhc3NcIl09altcImNsYXNzXCJdLnJlcGxhY2UoXCJ3eXNpd3lnLXRtcC1zZWxlY3RlZC1jZWxsXCIsXCJcIiksL15cXHMqJC9nLnRlc3QoaltcImNsYXNzXCJdKSYmZGVsZXRlIGpbXCJjbGFzc1wiXSksdS5sZW5ndGgmJihqLnN0eWxlPXd5c2lodG1sNS5sYW5nLmFycmF5KHUpLnVuaXF1ZSgpLmpvaW4oXCIgXCIpKTtmb3IoaCBpbiBqKXRyeXtiLnNldEF0dHJpYnV0ZShoLGpbaF0pfWNhdGNoKHope31qLnNyYyYmKHZvaWQgMCE9PWoud2lkdGgmJmIuc2V0QXR0cmlidXRlKFwid2lkdGhcIixqLndpZHRoKSx2b2lkIDAhPT1qLmhlaWdodCYmYi5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIixqLmhlaWdodCkpfWZ1bmN0aW9uIG4oYSl7dmFyIGIsYz1hLm5leHRTaWJsaW5nO3JldHVybiBjJiZjLm5vZGVUeXBlPT09d3lzaWh0bWw1LlRFWFRfTk9ERT8oYy5kYXRhPWEuZGF0YS5yZXBsYWNlKHUsXCJcIikrYy5kYXRhLnJlcGxhY2UodSxcIlwiKSx2b2lkIDApOihiPWEuZGF0YS5yZXBsYWNlKHUsXCJcIiksYS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpKX1mdW5jdGlvbiBvKGEpe3JldHVybiB0LmNvbW1lbnRzP2Eub3duZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KGEubm9kZVZhbHVlKTp2b2lkIDB9dmFyIHA9ezE6ZiwzOm4sODpvfSxxPVwic3BhblwiLHI9L1xccysvLHM9e3RhZ3M6e30sY2xhc3Nlczp7fX0sdD17fSx1PS9cXHVGRUZGL2csdj17dXJsOmZ1bmN0aW9uKCl7dmFyIGE9L15odHRwcz86XFwvXFwvL2k7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiJiZiLm1hdGNoKGEpP2IucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvTG93ZXJDYXNlKCl9KTpudWxsfX0oKSxzcmM6ZnVuY3Rpb24oKXt2YXIgYT0vXihcXC98aHR0cHM/OlxcL1xcLykvaTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGImJmIubWF0Y2goYSk/Yi5yZXBsYWNlKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0pOm51bGx9fSgpLGhyZWY6ZnVuY3Rpb24oKXt2YXIgYT0vXigjfFxcL3xodHRwcz86XFwvXFwvfG1haWx0bzopL2k7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiJiZiLm1hdGNoKGEpP2IucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvTG93ZXJDYXNlKCl9KTpudWxsfX0oKSxhbHQ6ZnVuY3Rpb24oKXt2YXIgYT0vW14gYS16MC05X1xcLV0vZ2k7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiP2IucmVwbGFjZShhLFwiXCIpOlwiXCJ9fSgpLG51bWJlcnM6ZnVuY3Rpb24oKXt2YXIgYT0vXFxEL2c7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiPShifHxcIlwiKS5yZXBsYWNlKGEsXCJcIiksYnx8bnVsbH19KCksYW55OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhfX0oKX0sdz17YWxpZ25fdGV4dDpmdW5jdGlvbigpe3ZhciBhPXtsZWZ0OlwidGV4dC1hbGlnbjogbGVmdDtcIixyaWdodDpcInRleHQtYWxpZ246IHJpZ2h0O1wiLGNlbnRlcjpcInRleHQtYWxpZ246IGNlbnRlcjtcIn07cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBhWyhiK1wiXCIpLnRvTG93ZXJDYXNlKCldfX0oKX0seD17YWxpZ25faW1nOmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6XCJ3eXNpd3lnLWZsb2F0LWxlZnRcIixyaWdodDpcInd5c2l3eWctZmxvYXQtcmlnaHRcIn07cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBhWyhiK1wiXCIpLnRvTG93ZXJDYXNlKCldfX0oKSxhbGlnbl90ZXh0OmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6XCJ3eXNpd3lnLXRleHQtYWxpZ24tbGVmdFwiLHJpZ2h0Olwid3lzaXd5Zy10ZXh0LWFsaWduLXJpZ2h0XCIsY2VudGVyOlwid3lzaXd5Zy10ZXh0LWFsaWduLWNlbnRlclwiLGp1c3RpZnk6XCJ3eXNpd3lnLXRleHQtYWxpZ24tanVzdGlmeVwifTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGFbKGIrXCJcIikudG9Mb3dlckNhc2UoKV19fSgpLGNsZWFyX2JyOmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6XCJ3eXNpd3lnLWNsZWFyLWxlZnRcIixyaWdodDpcInd5c2l3eWctY2xlYXItcmlnaHRcIixib3RoOlwid3lzaXd5Zy1jbGVhci1ib3RoXCIsYWxsOlwid3lzaXd5Zy1jbGVhci1ib3RoXCJ9O3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYVsoYitcIlwiKS50b0xvd2VyQ2FzZSgpXX19KCksc2l6ZV9mb250OmZ1bmN0aW9uKCl7dmFyIGE9ezE6XCJ3eXNpd3lnLWZvbnQtc2l6ZS14eC1zbWFsbFwiLDI6XCJ3eXNpd3lnLWZvbnQtc2l6ZS1zbWFsbFwiLDM6XCJ3eXNpd3lnLWZvbnQtc2l6ZS1tZWRpdW1cIiw0Olwid3lzaXd5Zy1mb250LXNpemUtbGFyZ2VcIiw1Olwid3lzaXd5Zy1mb250LXNpemUteC1sYXJnZVwiLDY6XCJ3eXNpd3lnLWZvbnQtc2l6ZS14eC1sYXJnZVwiLDc6XCJ3eXNpd3lnLWZvbnQtc2l6ZS14eC1sYXJnZVwiLFwiLVwiOlwid3lzaXd5Zy1mb250LXNpemUtc21hbGxlclwiLFwiK1wiOlwid3lzaXd5Zy1mb250LXNpemUtbGFyZ2VyXCJ9O3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYVsoYitcIlwiKS5jaGFyQXQoMCldfX0oKX0seT17aGFzX3Zpc2libGVfY29udGV0OmZ1bmN0aW9uKCl7dmFyIGEsYj1bXCJpbWdcIixcInZpZGVvXCIsXCJwaWN0dXJlXCIsXCJiclwiLFwic2NyaXB0XCIsXCJub3NjcmlwdFwiLFwic3R5bGVcIixcInRhYmxlXCIsXCJpZnJhbWVcIixcIm9iamVjdFwiLFwiZW1iZWRcIixcImF1ZGlvXCIsXCJzdmdcIixcImlucHV0XCIsXCJidXR0b25cIixcInNlbGVjdFwiLFwidGV4dGFyZWFcIixcImNhbnZhc1wiXTtyZXR1cm4gZnVuY3Rpb24oYyl7aWYoYT0oYy5pbm5lclRleHR8fGMudGV4dENvbnRlbnQpLnJlcGxhY2UoL1xccy9nLFwiXCIpLGEmJmEubGVuZ3RoPjApcmV0dXJuITA7Zm9yKHZhciBkPWIubGVuZ3RoO2QtLTspaWYoYy5xdWVyeVNlbGVjdG9yKGJbZF0pKXJldHVybiEwO3JldHVybiBjLm9mZnNldFdpZHRoJiZjLm9mZnNldFdpZHRoPjAmJmMub2Zmc2V0SGVpZ2h0JiZjLm9mZnNldEhlaWdodD4wPyEwOiExfX0oKX0sej17dW53cmFwOmZ1bmN0aW9uKGEpe3d5c2lodG1sNS5kb20udW53cmFwKGEpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX07cmV0dXJuIGMoYSxiKX0sd3lzaWh0bWw1LmRvbS5yZW1vdmVFbXB0eVRleHROb2Rlcz1mdW5jdGlvbihhKXtmb3IodmFyIGIsYz13eXNpaHRtbDUubGFuZy5hcnJheShhLmNoaWxkTm9kZXMpLmdldCgpLGQ9Yy5sZW5ndGgsZT0wO2Q+ZTtlKyspYj1jW2VdLGIubm9kZVR5cGU9PT13eXNpaHRtbDUuVEVYVF9OT0RFJiZcIlwiPT09Yi5kYXRhJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9LHd5c2lodG1sNS5kb20ucmVuYW1lRWxlbWVudD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPWEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGIpO2M9YS5maXJzdENoaWxkOylkLmFwcGVuZENoaWxkKGMpO3JldHVybiB3eXNpaHRtbDUuZG9tLmNvcHlBdHRyaWJ1dGVzKFtcImFsaWduXCIsXCJjbGFzc05hbWVcIl0pLmZyb20oYSkudG8oZCksYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkLGEpLGR9LHd5c2lodG1sNS5kb20ucmVwbGFjZVdpdGhDaGlsZE5vZGVzPWZ1bmN0aW9uKGEpe2lmKGEucGFyZW50Tm9kZSl7aWYoIWEuZmlyc3RDaGlsZClyZXR1cm4gYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHZvaWQgMDtmb3IodmFyIGI9YS5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTthLmZpcnN0Q2hpbGQ7KWIuYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGIsYSksYT1iPW51bGx9fSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3JldHVyblwiYmxvY2tcIj09PWEuZ2V0U3R5bGUoXCJkaXNwbGF5XCIpLmZyb20oYil9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cIkJSXCI9PT1hLm5vZGVOYW1lfWZ1bmN0aW9uIGQoYSl7dmFyIGI9YS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKTthLmFwcGVuZENoaWxkKGIpfWZ1bmN0aW9uIGUoYSxlKXtpZihhLm5vZGVOYW1lLm1hdGNoKC9eKE1FTlV8VUx8T0wpJC8pKXt2YXIgZixnLGgsaSxqLGssbD1hLm93bmVyRG9jdW1lbnQsbT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxuPXd5c2lodG1sNS5kb20uZG9tTm9kZShhKS5wcmV2KHtpZ25vcmVCbGFua1RleHRzOiEwfSk7aWYoZSlmb3IoIW58fGIobil8fGMobil8fGQobSk7az1hLmZpcnN0RWxlbWVudENoaWxkfHxhLmZpcnN0Q2hpbGQ7KXtmb3IoZz1rLmxhc3RDaGlsZDtmPWsuZmlyc3RDaGlsZDspaD1mPT09ZyxpPWgmJiFiKGYpJiYhYyhmKSxtLmFwcGVuZENoaWxkKGYpLGkmJmQobSk7ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfWVsc2UgZm9yKDtrPWEuZmlyc3RFbGVtZW50Q2hpbGR8fGEuZmlyc3RDaGlsZDspe2lmKGsucXVlcnlTZWxlY3RvciYmay5xdWVyeVNlbGVjdG9yKFwiZGl2LCBwLCB1bCwgb2wsIG1lbnUsIGJsb2NrcXVvdGUsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDZcIikpZm9yKDtmPWsuZmlyc3RDaGlsZDspbS5hcHBlbmRDaGlsZChmKTtlbHNle2ZvcihqPWwuY3JlYXRlRWxlbWVudChcInBcIik7Zj1rLmZpcnN0Q2hpbGQ7KWouYXBwZW5kQ2hpbGQoZik7bS5hcHBlbmRDaGlsZChqKX1rLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9YS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChtLGEpfX1hLnJlc29sdmVMaXN0PWV9KHd5c2lodG1sNS5kb20pLGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LGM9W1wicGFyZW50XCIsXCJ0b3BcIixcIm9wZW5lclwiLFwiZnJhbWVFbGVtZW50XCIsXCJmcmFtZXNcIixcImxvY2FsU3RvcmFnZVwiLFwiZ2xvYmFsU3RvcmFnZVwiLFwic2Vzc2lvblN0b3JhZ2VcIixcImluZGV4ZWREQlwiXSxkPVtcIm9wZW5cIixcImNsb3NlXCIsXCJvcGVuRGlhbG9nXCIsXCJzaG93TW9kYWxEaWFsb2dcIixcImFsZXJ0XCIsXCJjb25maXJtXCIsXCJwcm9tcHRcIixcIm9wZW5EYXRhYmFzZVwiLFwicG9zdE1lc3NhZ2VcIixcIlhNTEh0dHBSZXF1ZXN0XCIsXCJYRG9tYWluUmVxdWVzdFwiXSxlPVtcInJlZmVycmVyXCIsXCJ3cml0ZVwiLFwib3BlblwiLFwiY2xvc2VcIl07YS5kb20uU2FuZGJveD1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixjKXt0aGlzLmNhbGxiYWNrPWJ8fGEuRU1QVFlfRlVOQ1RJT04sdGhpcy5jb25maWc9YS5sYW5nLm9iamVjdCh7fSkubWVyZ2UoYykuZ2V0KCksdGhpcy5lZGl0YWJsZUFyZWE9dGhpcy5fY3JlYXRlSWZyYW1lKCl9LGluc2VydEludG86ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09dHlwZW9mIGEmJihhPWIuZ2V0RWxlbWVudEJ5SWQoYSkpLGEuYXBwZW5kQ2hpbGQodGhpcy5lZGl0YWJsZUFyZWEpfSxnZXRJZnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZUFyZWF9LGdldFdpbmRvdzpmdW5jdGlvbigpe3RoaXMuX3JlYWR5RXJyb3IoKX0sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkeUVycm9yKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldElmcmFtZSgpO2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX0sX3JlYWR5RXJyb3I6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcInd5c2lodG1sNS5TYW5kYm94OiBTYW5kYm94IGlmcmFtZSBpc24ndCBsb2FkZWQgeWV0XCIpfSxfY3JlYXRlSWZyYW1lOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxkPWIuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtyZXR1cm4gZC5jbGFzc05hbWU9XCJ3eXNpaHRtbDUtc2FuZGJveFwiLGEuZG9tLnNldEF0dHJpYnV0ZXMoe3NlY3VyaXR5OlwicmVzdHJpY3RlZFwiLGFsbG93dHJhbnNwYXJlbmN5OlwidHJ1ZVwiLGZyYW1lYm9yZGVyOjAsd2lkdGg6MCxoZWlnaHQ6MCxtYXJnaW53aWR0aDowLG1hcmdpbmhlaWdodDowfSkub24oZCksYS5icm93c2VyLnRocm93c01peGVkQ29udGVudFdhcm5pbmdXaGVuSWZyYW1lU3JjSXNFbXB0eSgpJiYoZC5zcmM9XCJqYXZhc2NyaXB0Oic8aHRtbD48L2h0bWw+J1wiKSxkLm9ubG9hZD1mdW5jdGlvbigpe2Qub25yZWFkeXN0YXRlY2hhbmdlPWQub25sb2FkPW51bGwsYy5fb25Mb2FkSWZyYW1lKGQpfSxkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpey9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSYmKGQub25yZWFkeXN0YXRlY2hhbmdlPWQub25sb2FkPW51bGwsYy5fb25Mb2FkSWZyYW1lKGQpKX0sZH0sX29uTG9hZElmcmFtZTpmdW5jdGlvbihmKXt2YXIgZyxoLGksaixrLGwsbTtpZihhLmRvbS5jb250YWlucyhiLmRvY3VtZW50RWxlbWVudCxmKSl7aWYoZz10aGlzLGg9Zi5jb250ZW50V2luZG93LGk9Zi5jb250ZW50V2luZG93LmRvY3VtZW50LGo9Yi5jaGFyYWN0ZXJTZXR8fGIuY2hhcnNldHx8XCJ1dGYtOFwiLGs9dGhpcy5fZ2V0SHRtbCh7Y2hhcnNldDpqLHN0eWxlc2hlZXRzOnRoaXMuY29uZmlnLnN0eWxlc2hlZXRzfSksaS5vcGVuKFwidGV4dC9odG1sXCIsXCJyZXBsYWNlXCIpLGkud3JpdGUoayksaS5jbG9zZSgpLHRoaXMuZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIGYuY29udGVudFdpbmRvd30sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBmLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9LGgub25lcnJvcj1mdW5jdGlvbihhLGIsYyl7dGhyb3cgRXJyb3IoXCJ3eXNpaHRtbDUuU2FuZGJveDogXCIrYSxiLGMpfSwhYS5icm93c2VyLnN1cHBvcnRzU2FuZGJveGVkSWZyYW1lcygpKXtmb3IobD0wLG09Yy5sZW5ndGg7bT5sO2wrKyl0aGlzLl91bnNldChoLGNbbF0pO2ZvcihsPTAsbT1kLmxlbmd0aDttPmw7bCsrKXRoaXMuX3Vuc2V0KGgsZFtsXSxhLkVNUFRZX0ZVTkNUSU9OKTtmb3IobD0wLG09ZS5sZW5ndGg7bT5sO2wrKyl0aGlzLl91bnNldChpLGVbbF0pO3RoaXMuX3Vuc2V0KGksXCJjb29raWVcIixcIlwiLCEwKX10aGlzLmxvYWRlZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zy5jYWxsYmFjayhnKX0sMCl9fSxfZ2V0SHRtbDpmdW5jdGlvbihiKXt2YXIgYyxkPWIuc3R5bGVzaGVldHMsZT1cIlwiLGY9MDtpZihkPVwic3RyaW5nXCI9PXR5cGVvZiBkP1tkXTpkLGQpZm9yKGM9ZC5sZW5ndGg7Yz5mO2YrKyllKz0nPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCInK2RbZl0rJ1wiPic7cmV0dXJuIGIuc3R5bGVzaGVldHM9ZSxhLmxhbmcuc3RyaW5nKCc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PVwiI3tjaGFyc2V0fVwiPiN7c3R5bGVzaGVldHN9PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+JykuaW50ZXJwb2xhdGUoYil9LF91bnNldDpmdW5jdGlvbihiLGMsZCxlKXt0cnl7YltjXT1kfWNhdGNoKGYpe310cnl7Yi5fX2RlZmluZUdldHRlcl9fKGMsZnVuY3Rpb24oKXtyZXR1cm4gZH0pfWNhdGNoKGYpe31pZihlKXRyeXtiLl9fZGVmaW5lU2V0dGVyX18oYyxmdW5jdGlvbigpe30pfWNhdGNoKGYpe31pZighYS5icm93c2VyLmNyYXNoZXNXaGVuRGVmaW5lUHJvcGVydHkoYykpdHJ5e3ZhciBnPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZH19O2UmJihnLnNldD1mdW5jdGlvbigpe30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGMsZyl9Y2F0Y2goZil7fX19KX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudDthLmRvbS5Db250ZW50RWRpdGFibGVBcmVhPUJhc2UuZXh0ZW5kKHtnZXRDb250ZW50RWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LGdldERvY3VtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50fSxjb25zdHJ1Y3RvcjpmdW5jdGlvbihiLGMsZCl7dGhpcy5jYWxsYmFjaz1ifHxhLkVNUFRZX0ZVTkNUSU9OLHRoaXMuY29uZmlnPWEubGFuZy5vYmplY3Qoe30pLm1lcmdlKGMpLmdldCgpLHRoaXMuZWxlbWVudD1kP3RoaXMuX2JpbmRFbGVtZW50KGQpOnRoaXMuX2NyZWF0ZUVsZW1lbnQoKX0sX2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGEuY2xhc3NOYW1lPVwid3lzaWh0bWw1LXNhbmRib3hcIix0aGlzLl9sb2FkRWxlbWVudChhKSxhfSxfYmluZEVsZW1lbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lJiZcIlwiIT1hLmNsYXNzTmFtZT9hLmNsYXNzTmFtZStcIiB3eXNpaHRtbDUtc2FuZGJveFwiOlwid3lzaWh0bWw1LXNhbmRib3hcIix0aGlzLl9sb2FkRWxlbWVudChhLCEwKSxhfSxfbG9hZEVsZW1lbnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXM7Ynx8KGM9dGhpcy5fZ2V0SHRtbCgpLGEuaW5uZXJIVE1MPWMpLHRoaXMuZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld30sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBhLm93bmVyRG9jdW1lbnR9LHRoaXMubG9hZGVkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmNhbGxiYWNrKGQpfSwwKX0sX2dldEh0bWw6ZnVuY3Rpb24oKXtyZXR1cm5cIlwifX0pfSh3eXNpaHRtbDUpLGZ1bmN0aW9uKCl7dmFyIGE9e2NsYXNzTmFtZTpcImNsYXNzXCJ9O3d5c2lodG1sNS5kb20uc2V0QXR0cmlidXRlcz1mdW5jdGlvbihiKXtyZXR1cm57b246ZnVuY3Rpb24oYyl7Zm9yKHZhciBkIGluIGIpYy5zZXRBdHRyaWJ1dGUoYVtkXXx8ZCxiW2RdKX19fX0oKSx3eXNpaHRtbDUuZG9tLnNldFN0eWxlcz1mdW5jdGlvbihhKXtyZXR1cm57b246ZnVuY3Rpb24oYil7dmFyIGMsZD1iLnN0eWxlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXJldHVybiBkLmNzc1RleHQrPVwiO1wiK2Esdm9pZCAwO2ZvcihjIGluIGEpXCJmbG9hdFwiPT09Yz8oZC5jc3NGbG9hdD1hW2NdLGQuc3R5bGVGbG9hdD1hW2NdKTpkW2NdPWFbY119fX0sZnVuY3Rpb24oYSl7YS5zaW11bGF0ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1cInBsYWNlaG9sZGVyXCIsZj1mdW5jdGlvbigpe3ZhciBiPWMuZWxlbWVudC5vZmZzZXRXaWR0aD4wJiZjLmVsZW1lbnQub2Zmc2V0SGVpZ2h0PjA7Yy5oYXNQbGFjZWhvbGRlclNldCgpJiYoYy5jbGVhcigpLGMuZWxlbWVudC5mb2N1cygpLGImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1jLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oKTthLmZvY3VzTm9kZSYmYS5hbmNob3JOb2RlfHxjLnNlbGVjdGlvbi5zZWxlY3ROb2RlKGMuZWxlbWVudC5maXJzdENoaWxkfHxjLmVsZW1lbnQpfSwwKSksYy5wbGFjZWhvbGRlclNldD0hMSxhLnJlbW92ZUNsYXNzKGMuZWxlbWVudCxlKX0sZz1mdW5jdGlvbigpe2MuaXNFbXB0eSgpJiYoYy5wbGFjZWhvbGRlclNldD0hMCxjLnNldFZhbHVlKGQpLGEuYWRkQ2xhc3MoYy5lbGVtZW50LGUpKX07Yi5vbihcInNldF9wbGFjZWhvbGRlclwiLGcpLm9uKFwidW5zZXRfcGxhY2Vob2xkZXJcIixmKS5vbihcImZvY3VzOmNvbXBvc2VyXCIsZikub24oXCJwYXN0ZTpjb21wb3NlclwiLGYpLm9uKFwiYmx1cjpjb21wb3NlclwiLGcpLGcoKX19KHd5c2lodG1sNS5kb20pLGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcInRleHRDb250ZW50XCJpbiBiPyhhLnNldFRleHRDb250ZW50PWZ1bmN0aW9uKGEsYil7YS50ZXh0Q29udGVudD1ifSxhLmdldFRleHRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLnRleHRDb250ZW50fSk6XCJpbm5lclRleHRcImluIGI/KGEuc2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oYSxiKXthLmlubmVyVGV4dD1ifSxhLmdldFRleHRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVyVGV4dH0pOihhLnNldFRleHRDb250ZW50PWZ1bmN0aW9uKGEsYil7YS5ub2RlVmFsdWU9Yn0sYS5nZXRUZXh0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVmFsdWV9KX0od3lzaWh0bWw1LmRvbSksd3lzaWh0bWw1LmRvbS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj0hd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNHZXRBdHRyaWJ1dGVDb3JyZWN0bHkoKTtyZXR1cm4gYj1iLnRvTG93ZXJDYXNlKCksYz1hLm5vZGVOYW1lLFwiSU1HXCI9PWMmJlwic3JjXCI9PWImJnd5c2lodG1sNS5kb20uaXNMb2FkZWRJbWFnZShhKT09PSEwP2Euc3JjOmYmJlwib3V0ZXJIVE1MXCJpbiBhPyhkPWEub3V0ZXJIVE1MLnRvTG93ZXJDYXNlKCksZT0tMSE9ZC5pbmRleE9mKFwiIFwiK2IrXCI9XCIpLGU/YS5nZXRBdHRyaWJ1dGUoYik6bnVsbCk6YS5nZXRBdHRyaWJ1dGUoYil9LHd5c2lodG1sNS5kb20uZ2V0QXR0cmlidXRlcz1mdW5jdGlvbihhKXt2YXIgYixjPSF3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0dldEF0dHJpYnV0ZUNvcnJlY3RseSgpLGQ9YS5ub2RlTmFtZSxlPVtdO2ZvcihiIGluIGEuYXR0cmlidXRlcykoYS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5JiZhLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYil8fCFhLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLmF0dHJpYnV0ZXMsYikpJiZhLmF0dHJpYnV0ZXNbYl0uc3BlY2lmaWVkJiYoXCJJTUdcIj09ZCYmXCJzcmNcIj09YS5hdHRyaWJ1dGVzW2JdLm5hbWUudG9Mb3dlckNhc2UoKSYmd3lzaWh0bWw1LmRvbS5pc0xvYWRlZEltYWdlKGEpPT09ITA/ZS5zcmM9YS5zcmM6d3lzaWh0bWw1LmxhbmcuYXJyYXkoW1wicm93c3BhblwiLFwiY29sc3BhblwiXSkuY29udGFpbnMoYS5hdHRyaWJ1dGVzW2JdLm5hbWUudG9Mb3dlckNhc2UoKSkmJmM/MSE9PWEuYXR0cmlidXRlc1tiXS52YWx1ZSYmKGVbYS5hdHRyaWJ1dGVzW2JdLm5hbWVdPWEuYXR0cmlidXRlc1tiXS52YWx1ZSk6ZVthLmF0dHJpYnV0ZXNbYl0ubmFtZV09YS5hdHRyaWJ1dGVzW2JdLnZhbHVlKTtyZXR1cm4gZX0sd3lzaWh0bWw1LmRvbS5pc0xvYWRlZEltYWdlPWZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYS5jb21wbGV0ZSYmIWEubW96TWF0Y2hlc1NlbGVjdG9yKFwiOi1tb3otYnJva2VuXCIpfWNhdGNoKGIpe2lmKGEuY29tcGxldGUmJlwiY29tcGxldGVcIj09PWEucmVhZHlTdGF0ZSlyZXR1cm4hMH19LGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYyxkLGUsZixnPVtdO2ZvcihkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWlmKGM9YVtkXS5xdWVyeVNlbGVjdG9yQWxsKGIpLGMpZm9yKGY9Yy5sZW5ndGg7Zi0tO2cudW5zaGlmdChjW2ZdKSk7cmV0dXJuIGd9ZnVuY3Rpb24gZChhKXthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9ZnVuY3Rpb24gZShhLGIpe2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYixhLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEubmV4dFNpYmxpbmc7MSE9Yy5ub2RlVHlwZTspaWYoYz1jLm5leHRTaWJsaW5nLCFifHxiPT1jLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gYztyZXR1cm4gbnVsbH12YXIgZz1hLmRvbSxoPWZ1bmN0aW9uKGEpe3RoaXMuZWw9YSx0aGlzLmlzQ29sc3Bhbj0hMSx0aGlzLmlzUm93c3Bhbj0hMSx0aGlzLmZpcnN0Q29sPSEwLHRoaXMubGFzdENvbD0hMCx0aGlzLmZpcnN0Um93PSEwLHRoaXMubGFzdFJvdz0hMCx0aGlzLmlzUmVhbD0hMCx0aGlzLnNwYW5Db2xsZWN0aW9uPVtdLHRoaXMubW9kaWZpZWQ9ITF9LGk9ZnVuY3Rpb24oYSxiKXthPyh0aGlzLmNlbGw9YSx0aGlzLnRhYmxlPWcuZ2V0UGFyZW50RWxlbWVudChhLHtub2RlTmFtZTpbXCJUQUJMRVwiXX0pKTpiJiYodGhpcy50YWJsZT1iLHRoaXMuY2VsbD10aGlzLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0aCwgdGRcIilbMF0pfTtpLnByb3RvdHlwZT17YWRkU3Bhbm5lZENlbGxUb01hcDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaSxqPVtdLGs9YysoZj9wYXJzZUludChmLDEwKS0xOjApLGw9ZCsoZT9wYXJzZUludChlLDEwKS0xOjApO2ZvcihnPWM7az49ZztnKyspZm9yKHZvaWQgMD09PWJbZ10mJihiW2ddPVtdKSxpPWQ7bD49aTtpKyspYltnXVtpXT1uZXcgaChhKSxiW2ddW2ldLmlzQ29sc3Bhbj1lJiZwYXJzZUludChlLDEwKT4xLGJbZ11baV0uaXNSb3dzcGFuPWYmJnBhcnNlSW50KGYsMTApPjEsYltnXVtpXS5maXJzdENvbD1pPT1kLGJbZ11baV0ubGFzdENvbD1pPT1sLGJbZ11baV0uZmlyc3RSb3c9Zz09YyxiW2ddW2ldLmxhc3RSb3c9Zz09ayxiW2ddW2ldLmlzUmVhbD1pPT1kJiZnPT1jLGJbZ11baV0uc3BhbkNvbGxlY3Rpb249aixqLnB1c2goYltnXVtpXSl9LHNldENlbGxBc01vZGlmaWVkOmZ1bmN0aW9uKGEpe2lmKGEubW9kaWZpZWQ9ITAsYS5zcGFuQ29sbGVjdGlvbi5sZW5ndGg+MClmb3IodmFyIGI9MCxjPWEuc3BhbkNvbGxlY3Rpb24ubGVuZ3RoO2M+YjtiKyspYS5zcGFuQ29sbGVjdGlvbltiXS5tb2RpZmllZD0hMH0sc2V0VGFibGVNYXA6ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsaSxqLGs9W10sbD10aGlzLmdldFRhYmxlUm93cygpO2ZvcihhPTA7YTxsLmxlbmd0aDthKyspZm9yKGI9bFthXSxjPXRoaXMuZ2V0Um93Q2VsbHMoYiksZj0wLHZvaWQgMD09PWtbYV0mJihrW2FdPVtdKSxkPTA7ZDxjLmxlbmd0aDtkKyspe2ZvcihlPWNbZF07dm9pZCAwIT09a1thXVtmXTspZisrO2k9Zy5nZXRBdHRyaWJ1dGUoZSxcImNvbHNwYW5cIiksaj1nLmdldEF0dHJpYnV0ZShlLFwicm93c3BhblwiKSxpfHxqPyh0aGlzLmFkZFNwYW5uZWRDZWxsVG9NYXAoZSxrLGEsZixpLGopLGYrPWk/cGFyc2VJbnQoaSwxMCk6MSk6KGtbYV1bZl09bmV3IGgoZSksZisrKX1yZXR1cm4gdGhpcy5tYXA9ayxrfSxnZXRSb3dDZWxsczpmdW5jdGlvbihjKXt2YXIgZD10aGlzLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0YWJsZVwiKSxlPWQ/YihkLFwidGgsIHRkXCIpOltdLGY9Yy5xdWVyeVNlbGVjdG9yQWxsKFwidGgsIHRkXCIpLGc9ZS5sZW5ndGg+MD9hLmxhbmcuYXJyYXkoZikud2l0aG91dChlKTpmO3JldHVybiBnfSxnZXRUYWJsZVJvd3M6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0YWJsZVwiKSxkPWM/YihjLFwidHJcIik6W10sZT10aGlzLnRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0clwiKSxmPWQubGVuZ3RoPjA/YS5sYW5nLmFycmF5KGUpLndpdGhvdXQoZCk6ZTtyZXR1cm4gZn0sZ2V0TWFwSW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMubWFwLmxlbmd0aCxlPXRoaXMubWFwJiZ0aGlzLm1hcFswXT90aGlzLm1hcFswXS5sZW5ndGg6MDtmb3IoYj0wO2Q+YjtiKyspZm9yKGM9MDtlPmM7YysrKWlmKHRoaXMubWFwW2JdW2NdLmVsPT09YSlyZXR1cm57cm93OmIsY29sOmN9O3JldHVybiExfSxnZXRFbGVtZW50QXRJbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRUYWJsZU1hcCgpLHRoaXMubWFwW2Eucm93XSYmdGhpcy5tYXBbYS5yb3ddW2EuY29sXSYmdGhpcy5tYXBbYS5yb3ddW2EuY29sXS5lbD90aGlzLm1hcFthLnJvd11bYS5jb2xdLmVsOm51bGx9LGdldE1hcEVsc1RvOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPVtdO2lmKHRoaXMuc2V0VGFibGVNYXAoKSx0aGlzLmlkeF9zdGFydD10aGlzLmdldE1hcEluZGV4KHRoaXMuY2VsbCksdGhpcy5pZHhfZW5kPXRoaXMuZ2V0TWFwSW5kZXgoYSksKHRoaXMuaWR4X3N0YXJ0LnJvdz50aGlzLmlkeF9lbmQucm93fHx0aGlzLmlkeF9zdGFydC5yb3c9PXRoaXMuaWR4X2VuZC5yb3cmJnRoaXMuaWR4X3N0YXJ0LmNvbD50aGlzLmlkeF9lbmQuY29sKSYmKGI9dGhpcy5pZHhfc3RhcnQsdGhpcy5pZHhfc3RhcnQ9dGhpcy5pZHhfZW5kLHRoaXMuaWR4X2VuZD1iKSx0aGlzLmlkeF9zdGFydC5jb2w+dGhpcy5pZHhfZW5kLmNvbCYmKGM9dGhpcy5pZHhfc3RhcnQuY29sLHRoaXMuaWR4X3N0YXJ0LmNvbD10aGlzLmlkeF9lbmQuY29sLHRoaXMuaWR4X2VuZC5jb2w9YyksbnVsbCE9dGhpcy5pZHhfc3RhcnQmJm51bGwhPXRoaXMuaWR4X2VuZClmb3IoZD10aGlzLmlkeF9zdGFydC5yb3csZT10aGlzLmlkeF9lbmQucm93O2U+PWQ7ZCsrKWZvcihmPXRoaXMuaWR4X3N0YXJ0LmNvbCxnPXRoaXMuaWR4X2VuZC5jb2w7Zz49ZjtmKyspaC5wdXNoKHRoaXMubWFwW2RdW2ZdLmVsKTtyZXR1cm4gaH0sb3JkZXJTZWxlY3Rpb25FbmRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM7cmV0dXJuIHRoaXMuc2V0VGFibGVNYXAoKSx0aGlzLmlkeF9zdGFydD10aGlzLmdldE1hcEluZGV4KHRoaXMuY2VsbCksdGhpcy5pZHhfZW5kPXRoaXMuZ2V0TWFwSW5kZXgoYSksKHRoaXMuaWR4X3N0YXJ0LnJvdz50aGlzLmlkeF9lbmQucm93fHx0aGlzLmlkeF9zdGFydC5yb3c9PXRoaXMuaWR4X2VuZC5yb3cmJnRoaXMuaWR4X3N0YXJ0LmNvbD50aGlzLmlkeF9lbmQuY29sKSYmKGI9dGhpcy5pZHhfc3RhcnQsdGhpcy5pZHhfc3RhcnQ9dGhpcy5pZHhfZW5kLHRoaXMuaWR4X2VuZD1iKSx0aGlzLmlkeF9zdGFydC5jb2w+dGhpcy5pZHhfZW5kLmNvbCYmKGM9dGhpcy5pZHhfc3RhcnQuY29sLHRoaXMuaWR4X3N0YXJ0LmNvbD10aGlzLmlkeF9lbmQuY29sLHRoaXMuaWR4X2VuZC5jb2w9Yykse3N0YXJ0OnRoaXMubWFwW3RoaXMuaWR4X3N0YXJ0LnJvd11bdGhpcy5pZHhfc3RhcnQuY29sXS5lbCxlbmQ6dGhpcy5tYXBbdGhpcy5pZHhfZW5kLnJvd11bdGhpcy5pZHhfZW5kLmNvbF0uZWx9fSxjcmVhdGVDZWxsczpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc9dGhpcy50YWJsZS5vd25lckRvY3VtZW50LGg9Zy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKGU9MDtiPmU7ZSsrKXtpZihkPWcuY3JlYXRlRWxlbWVudChhKSxjKWZvcihmIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShmKSYmZC5zZXRBdHRyaWJ1dGUoZixjW2ZdKTtkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiwqBcIikpLGguYXBwZW5kQ2hpbGQoZCl9cmV0dXJuIGh9LGNvcnJlY3RDb2xJbmRleEZvclVucmVhbHM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5tYXBbYl0sZj0tMTtmb3IoYz0wLGQ9YTthPmM7YysrKWVbY10uaXNSZWFsJiZmKys7cmV0dXJuIGZ9LGdldExhc3ROZXdDZWxsT25Sb3c6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPXRoaXMuZ2V0Um93Q2VsbHMoYSk7Zm9yKGU9MCxmPWcubGVuZ3RoO2Y+ZTtlKyspaWYoYz1nW2VdLGQ9dGhpcy5nZXRNYXBJbmRleChjKSxkPT09ITF8fHZvaWQgMCE9PWImJmQucm93IT1iKXJldHVybiBjO3JldHVybiBudWxsfSxyZW1vdmVFbXB0eVRhYmxlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFwidGQsIHRoXCIpO3JldHVybiBhJiYwIT1hLmxlbmd0aD8hMTooZCh0aGlzLnRhYmxlKSwhMCl9LHNwbGl0Um93VG9DZWxsczpmdW5jdGlvbihhKXt2YXIgYixjLGQ7YS5pc0NvbHNwYW4mJihiPXBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJjb2xzcGFuXCIpfHwxLDEwKSxjPWEuZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpLGI+MSYmKGQ9dGhpcy5jcmVhdGVDZWxscyhjLGItMSksZShhLmVsLGQpKSxhLmVsLnJlbW92ZUF0dHJpYnV0ZShcImNvbHNwYW5cIikpfSxnZXRSZWFsUm93RWw6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9bnVsbCxmPW51bGw7Zm9yKGI9Ynx8dGhpcy5pZHgsYz0wLGQ9dGhpcy5tYXBbYi5yb3ddLmxlbmd0aDtkPmM7YysrKWlmKGY9dGhpcy5tYXBbYi5yb3ddW2NdLGYuaXNSZWFsJiYoZT1nLmdldFBhcmVudEVsZW1lbnQoZi5lbCx7bm9kZU5hbWU6W1wiVFJcIl19KSxlKSlyZXR1cm4gZTtyZXR1cm4gbnVsbD09PWUmJmEmJihlPWcuZ2V0UGFyZW50RWxlbWVudCh0aGlzLm1hcFtiLnJvd11bYi5jb2xdLmVsLHtub2RlTmFtZTpbXCJUUlwiXX0pfHxudWxsKSxlfSxpbmplY3RSb3dBdDpmdW5jdGlvbihhLGIsYyxkLGYpe3ZhciBoLGksaj10aGlzLmdldFJlYWxSb3dFbCghMSx7cm93OmEsY29sOmJ9KSxrPXRoaXMuY3JlYXRlQ2VsbHMoZCxjKTtqPyhoPXRoaXMuY29ycmVjdENvbEluZGV4Rm9yVW5yZWFscyhiLGEpLGg+PTA/ZSh0aGlzLmdldFJvd0NlbGxzKGopW2hdLGspOmouaW5zZXJ0QmVmb3JlKGssai5maXJzdENoaWxkKSk6KGk9dGhpcy50YWJsZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0clwiKSxpLmFwcGVuZENoaWxkKGspLGUoZy5nZXRQYXJlbnRFbGVtZW50KGYuZWwse25vZGVOYW1lOltcIlRSXCJdfSksaSkpfSxjYW5NZXJnZTpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGc7Zm9yKHRoaXMudG89YSx0aGlzLnNldFRhYmxlTWFwKCksdGhpcy5pZHhfc3RhcnQ9dGhpcy5nZXRNYXBJbmRleCh0aGlzLmNlbGwpLHRoaXMuaWR4X2VuZD10aGlzLmdldE1hcEluZGV4KHRoaXMudG8pLCh0aGlzLmlkeF9zdGFydC5yb3c+dGhpcy5pZHhfZW5kLnJvd3x8dGhpcy5pZHhfc3RhcnQucm93PT10aGlzLmlkeF9lbmQucm93JiZ0aGlzLmlkeF9zdGFydC5jb2w+dGhpcy5pZHhfZW5kLmNvbCkmJihiPXRoaXMuaWR4X3N0YXJ0LHRoaXMuaWR4X3N0YXJ0PXRoaXMuaWR4X2VuZCx0aGlzLmlkeF9lbmQ9YiksdGhpcy5pZHhfc3RhcnQuY29sPnRoaXMuaWR4X2VuZC5jb2wmJihjPXRoaXMuaWR4X3N0YXJ0LmNvbCx0aGlzLmlkeF9zdGFydC5jb2w9dGhpcy5pZHhfZW5kLmNvbCx0aGlzLmlkeF9lbmQuY29sPWMpLGQ9dGhpcy5pZHhfc3RhcnQucm93LGU9dGhpcy5pZHhfZW5kLnJvdztlPj1kO2QrKylmb3IoZj10aGlzLmlkeF9zdGFydC5jb2wsZz10aGlzLmlkeF9lbmQuY29sO2c+PWY7ZisrKWlmKHRoaXMubWFwW2RdW2ZdLmlzQ29sc3Bhbnx8dGhpcy5tYXBbZF1bZl0uaXNSb3dzcGFuKXJldHVybiExO3JldHVybiEwfSxkZWNyZWFzZUNlbGxTcGFuOmZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VJbnQoZy5nZXRBdHRyaWJ1dGUoYS5lbCxiKSwxMCktMTtjPj0xP2EuZWwuc2V0QXR0cmlidXRlKGIsYyk6KGEuZWwucmVtb3ZlQXR0cmlidXRlKGIpLFwiY29sc3BhblwiPT1iJiYoYS5pc0NvbHNwYW49ITEpLFwicm93c3BhblwiPT1iJiYoYS5pc1Jvd3NwYW49ITEpLGEuZmlyc3RDb2w9ITAsYS5sYXN0Q29sPSEwLGEuZmlyc3RSb3c9ITAsYS5sYXN0Um93PSEwLGEuaXNSZWFsPSEwKX0scmVtb3ZlU3VycGx1c0xpbmVzOmZ1bmN0aW9uKCl7dmFyIGEsYixjLGUsZixoLGksajtpZih0aGlzLnNldFRhYmxlTWFwKCksdGhpcy5tYXApe2ZvcihjPTAsZT10aGlzLm1hcC5sZW5ndGg7ZT5jO2MrKyl7Zm9yKGE9dGhpcy5tYXBbY10saT0hMCxmPTAsaD1hLmxlbmd0aDtoPmY7ZisrKWlmKGI9YVtmXSwhKGcuZ2V0QXR0cmlidXRlKGIuZWwsXCJyb3dzcGFuXCIpJiZwYXJzZUludChnLmdldEF0dHJpYnV0ZShiLmVsLFwicm93c3BhblwiKSwxMCk+MSYmYi5maXJzdFJvdyE9PSEwKSl7aT0hMTticmVha31pZihpKWZvcihmPTA7aD5mO2YrKyl0aGlzLmRlY3JlYXNlQ2VsbFNwYW4oYVtmXSxcInJvd3NwYW5cIil9Zm9yKGo9dGhpcy5nZXRUYWJsZVJvd3MoKSxjPTAsZT1qLmxlbmd0aDtlPmM7YysrKWE9altjXSwwPT1hLmNoaWxkTm9kZXMubGVuZ3RoJiYvXlxccyokLy50ZXN0KGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0KSYmZChhKX19LGZpbGxNaXNzaW5nQ2VsbHM6ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZD0wLGY9MCxnPW51bGw7aWYodGhpcy5zZXRUYWJsZU1hcCgpLHRoaXMubWFwKXtmb3IoZD10aGlzLm1hcC5sZW5ndGgsYT0wO2Q+YTthKyspdGhpcy5tYXBbYV0ubGVuZ3RoPmYmJihmPXRoaXMubWFwW2FdLmxlbmd0aCk7Zm9yKGI9MDtkPmI7YisrKWZvcihjPTA7Zj5jO2MrKyl0aGlzLm1hcFtiXSYmIXRoaXMubWFwW2JdW2NdJiZjPjAmJih0aGlzLm1hcFtiXVtjXT1uZXcgaCh0aGlzLmNyZWF0ZUNlbGxzKFwidGRcIiwxKSksZz10aGlzLm1hcFtiXVtjLTFdLGcmJmcuZWwmJmcuZWwucGFyZW50JiZlKHRoaXMubWFwW2JdW2MtMV0uZWwsdGhpcy5tYXBbYl1bY10uZWwpKX19LHJlY3RpZnk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVFbXB0eVRhYmxlKCk/ITE6KHRoaXMucmVtb3ZlU3VycGx1c0xpbmVzKCksdGhpcy5maWxsTWlzc2luZ0NlbGxzKCksITApfSx1bm1lcmdlOmZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmO2lmKHRoaXMucmVjdGlmeSgpJiYodGhpcy5zZXRUYWJsZU1hcCgpLHRoaXMuaWR4PXRoaXMuZ2V0TWFwSW5kZXgodGhpcy5jZWxsKSx0aGlzLmlkeCkpe2lmKGE9dGhpcy5tYXBbdGhpcy5pZHgucm93XVt0aGlzLmlkeC5jb2xdLGI9Zy5nZXRBdHRyaWJ1dGUoYS5lbCxcImNvbHNwYW5cIik/cGFyc2VJbnQoZy5nZXRBdHRyaWJ1dGUoYS5lbCxcImNvbHNwYW5cIiksMTApOjEsYz1hLmVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSxhLmlzUm93c3Bhbil7aWYoZD1wYXJzZUludChnLmdldEF0dHJpYnV0ZShhLmVsLFwicm93c3BhblwiKSwxMCksZD4xKWZvcihlPTEsZj1kLTE7Zj49ZTtlKyspdGhpcy5pbmplY3RSb3dBdCh0aGlzLmlkeC5yb3crZSx0aGlzLmlkeC5jb2wsYixjLGEpO2EuZWwucmVtb3ZlQXR0cmlidXRlKFwicm93c3BhblwiKX10aGlzLnNwbGl0Um93VG9DZWxscyhhKX19LG1lcmdlOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaDtpZih0aGlzLnJlY3RpZnkoKSlpZih0aGlzLmNhbk1lcmdlKGEpKXtmb3IoYj10aGlzLmlkeF9lbmQucm93LXRoaXMuaWR4X3N0YXJ0LnJvdysxLGM9dGhpcy5pZHhfZW5kLmNvbC10aGlzLmlkeF9zdGFydC5jb2wrMSxlPXRoaXMuaWR4X3N0YXJ0LnJvdyxmPXRoaXMuaWR4X2VuZC5yb3c7Zj49ZTtlKyspZm9yKGc9dGhpcy5pZHhfc3RhcnQuY29sLGg9dGhpcy5pZHhfZW5kLmNvbDtoPj1nO2crKyllPT10aGlzLmlkeF9zdGFydC5yb3cmJmc9PXRoaXMuaWR4X3N0YXJ0LmNvbD8oYj4xJiZ0aGlzLm1hcFtlXVtnXS5lbC5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFuXCIsYiksYz4xJiZ0aGlzLm1hcFtlXVtnXS5lbC5zZXRBdHRyaWJ1dGUoXCJjb2xzcGFuXCIsYykpOigvXlxccyo8YnJcXC8/PlxccyokLy50ZXN0KHRoaXMubWFwW2VdW2ddLmVsLmlubmVySFRNTC50b0xvd2VyQ2FzZSgpKXx8KHRoaXMubWFwW3RoaXMuaWR4X3N0YXJ0LnJvd11bdGhpcy5pZHhfc3RhcnQuY29sXS5lbC5pbm5lckhUTUwrPVwiIFwiK3RoaXMubWFwW2VdW2ddLmVsLmlubmVySFRNTCksZCh0aGlzLm1hcFtlXVtnXS5lbCkpO3RoaXMucmVjdGlmeSgpfWVsc2Ugd2luZG93LmNvbnNvbGUmJnZvaWQgMH0sY29sbGFwc2VDZWxsVG9OZXh0Um93OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxmPXRoaXMuZ2V0TWFwSW5kZXgoYS5lbCksaD1mLnJvdysxLGk9e3JvdzpoLGNvbDpmLmNvbH07aDx0aGlzLm1hcC5sZW5ndGgmJihiPXRoaXMuZ2V0UmVhbFJvd0VsKCExLGkpLG51bGwhPT1iJiYoYz10aGlzLmNvcnJlY3RDb2xJbmRleEZvclVucmVhbHMoaS5jb2wsaS5yb3cpLGM+PTA/ZSh0aGlzLmdldFJvd0NlbGxzKGIpW2NdLGEuZWwpOihkPXRoaXMuZ2V0TGFzdE5ld0NlbGxPblJvdyhiLGgpLG51bGwhPT1kP2UoZCxhLmVsKTpiLmluc2VydEJlZm9yZShhLmVsLGIuZmlyc3RDaGlsZCkpLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJyb3dzcGFuXCIpLDEwKT4yP2EuZWwuc2V0QXR0cmlidXRlKFwicm93c3BhblwiLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJyb3dzcGFuXCIpLDEwKS0xKTphLmVsLnJlbW92ZUF0dHJpYnV0ZShcInJvd3NwYW5cIikpKX0scmVtb3ZlUm93Q2VsbDpmdW5jdGlvbihhKXthLmlzUmVhbD9hLmlzUm93c3Bhbj90aGlzLmNvbGxhcHNlQ2VsbFRvTmV4dFJvdyhhKTpkKGEuZWwpOnBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJyb3dzcGFuXCIpLDEwKT4yP2EuZWwuc2V0QXR0cmlidXRlKFwicm93c3BhblwiLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJyb3dzcGFuXCIpLDEwKS0xKTphLmVsLnJlbW92ZUF0dHJpYnV0ZShcInJvd3NwYW5cIil9LGdldFJvd0VsZW1lbnRzQnlDZWxsOmZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ9W107aWYodGhpcy5zZXRUYWJsZU1hcCgpLHRoaXMuaWR4PXRoaXMuZ2V0TWFwSW5kZXgodGhpcy5jZWxsKSx0aGlzLmlkeCE9PSExKWZvcihhPXRoaXMubWFwW3RoaXMuaWR4LnJvd10sYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdLmlzUmVhbCYmZC5wdXNoKGFbYl0uZWwpO3JldHVybiBkfSxnZXRDb2x1bW5FbGVtZW50c0J5Q2VsbDpmdW5jdGlvbigpe3ZhciBhLGIsYz1bXTtpZih0aGlzLnNldFRhYmxlTWFwKCksdGhpcy5pZHg9dGhpcy5nZXRNYXBJbmRleCh0aGlzLmNlbGwpLHRoaXMuaWR4IT09ITEpZm9yKGE9MCxiPXRoaXMubWFwLmxlbmd0aDtiPmE7YSsrKXRoaXMubWFwW2FdW3RoaXMuaWR4LmNvbF0mJnRoaXMubWFwW2FdW3RoaXMuaWR4LmNvbF0uaXNSZWFsJiZjLnB1c2godGhpcy5tYXBbYV1bdGhpcy5pZHguY29sXS5lbCk7cmV0dXJuIGN9LHJlbW92ZVJvdzpmdW5jdGlvbigpe3ZhciBhLGIsYyxlPWcuZ2V0UGFyZW50RWxlbWVudCh0aGlzLmNlbGwse25vZGVOYW1lOltcIlRSXCJdfSk7aWYoZSl7aWYodGhpcy5zZXRUYWJsZU1hcCgpLHRoaXMuaWR4PXRoaXMuZ2V0TWFwSW5kZXgodGhpcy5jZWxsKSx0aGlzLmlkeCE9PSExKWZvcihhPXRoaXMubWFwW3RoaXMuaWR4LnJvd10sYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdLm1vZGlmaWVkfHwodGhpcy5zZXRDZWxsQXNNb2RpZmllZChhW2JdKSx0aGlzLnJlbW92ZVJvd0NlbGwoYVtiXSkpO2QoZSl9fSxyZW1vdmVDb2xDZWxsOmZ1bmN0aW9uKGEpe2EuaXNDb2xzcGFuP3BhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJjb2xzcGFuXCIpLDEwKT4yP2EuZWwuc2V0QXR0cmlidXRlKFwiY29sc3BhblwiLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJjb2xzcGFuXCIpLDEwKS0xKTphLmVsLnJlbW92ZUF0dHJpYnV0ZShcImNvbHNwYW5cIik6YS5pc1JlYWwmJmQoYS5lbCl9LHJlbW92ZUNvbHVtbjpmdW5jdGlvbigpe2lmKHRoaXMuc2V0VGFibGVNYXAoKSx0aGlzLmlkeD10aGlzLmdldE1hcEluZGV4KHRoaXMuY2VsbCksdGhpcy5pZHghPT0hMSlmb3IodmFyIGE9MCxiPXRoaXMubWFwLmxlbmd0aDtiPmE7YSsrKXRoaXMubWFwW2FdW3RoaXMuaWR4LmNvbF0ubW9kaWZpZWR8fCh0aGlzLnNldENlbGxBc01vZGlmaWVkKHRoaXMubWFwW2FdW3RoaXMuaWR4LmNvbF0pLHRoaXMucmVtb3ZlQ29sQ2VsbCh0aGlzLm1hcFthXVt0aGlzLmlkeC5jb2xdKSl9LHJlbW92ZTpmdW5jdGlvbihhKXtpZih0aGlzLnJlY3RpZnkoKSl7c3dpdGNoKGEpe2Nhc2VcInJvd1wiOnRoaXMucmVtb3ZlUm93KCk7YnJlYWs7Y2FzZVwiY29sdW1uXCI6dGhpcy5yZW1vdmVDb2x1bW4oKX10aGlzLnJlY3RpZnkoKX19LGFkZFJvdzpmdW5jdGlvbihhKXt2YXIgYixjLGQsZixoLGk9dGhpcy50YWJsZS5vd25lckRvY3VtZW50O2lmKHRoaXMuc2V0VGFibGVNYXAoKSx0aGlzLmlkeD10aGlzLmdldE1hcEluZGV4KHRoaXMuY2VsbCksXCJiZWxvd1wiPT1hJiZnLmdldEF0dHJpYnV0ZSh0aGlzLmNlbGwsXCJyb3dzcGFuXCIpJiYodGhpcy5pZHgucm93PXRoaXMuaWR4LnJvdytwYXJzZUludChnLmdldEF0dHJpYnV0ZSh0aGlzLmNlbGwsXCJyb3dzcGFuXCIpLDEwKS0xKSx0aGlzLmlkeCE9PSExKXtmb3IoYj10aGlzLm1hcFt0aGlzLmlkeC5yb3ddLGM9aS5jcmVhdGVFbGVtZW50KFwidHJcIiksZD0wLGY9Yi5sZW5ndGg7Zj5kO2QrKyliW2RdLm1vZGlmaWVkfHwodGhpcy5zZXRDZWxsQXNNb2RpZmllZChiW2RdKSx0aGlzLmFkZFJvd0NlbGwoYltkXSxjLGEpKTtzd2l0Y2goYSl7Y2FzZVwiYmVsb3dcIjplKHRoaXMuZ2V0UmVhbFJvd0VsKCEwKSxjKTticmVhaztjYXNlXCJhYm92ZVwiOmg9Zy5nZXRQYXJlbnRFbGVtZW50KHRoaXMubWFwW3RoaXMuaWR4LnJvd11bdGhpcy5pZHguY29sXS5lbCx7bm9kZU5hbWU6W1wiVFJcIl19KSxoJiZoLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsaCl9fX0sYWRkUm93Q2VsbDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5pc0NvbHNwYW4/e2NvbHNwYW46Zy5nZXRBdHRyaWJ1dGUoYS5lbCxcImNvbHNwYW5cIil9Om51bGw7YS5pc1JlYWw/XCJhYm92ZVwiIT1kJiZhLmlzUm93c3Bhbj9hLmVsLnNldEF0dHJpYnV0ZShcInJvd3NwYW5cIixwYXJzZUludChnLmdldEF0dHJpYnV0ZShhLmVsLFwicm93c3BhblwiKSwxMCkrMSk6Yi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNlbGxzKFwidGRcIiwxLGUpKTpcImFib3ZlXCIhPWQmJmEuaXNSb3dzcGFuJiZhLmxhc3RSb3c/Yi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNlbGxzKFwidGRcIiwxLGUpKTpjLmlzUm93c3BhbiYmYS5lbC5hdHRyKFwicm93c3BhblwiLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJyb3dzcGFuXCIpLDEwKSsxKX0sYWRkOmZ1bmN0aW9uKGEpe3RoaXMucmVjdGlmeSgpJiYoKFwiYmVsb3dcIj09YXx8XCJhYm92ZVwiPT1hKSYmdGhpcy5hZGRSb3coYSksKFwiYmVmb3JlXCI9PWF8fFwiYWZ0ZXJcIj09YSkmJnRoaXMuYWRkQ29sdW1uKGEpKX0sYWRkQ29sQ2VsbDpmdW5jdGlvbihhLGIsZCl7dmFyIGYsaD1hLmVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2goZCl7Y2FzZVwiYmVmb3JlXCI6Zj0hYS5pc0NvbHNwYW58fGEuZmlyc3RDb2w7YnJlYWs7Y2FzZVwiYWZ0ZXJcIjpmPSFhLmlzQ29sc3Bhbnx8YS5sYXN0Q29sfHxhLmlzQ29sc3BhbiYmYy5lbD09dGhpcy5jZWxsfWlmKGYpe3N3aXRjaChkKXtjYXNlXCJiZWZvcmVcIjphLmVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY3JlYXRlQ2VsbHMoaCwxKSxhLmVsKTticmVhaztjYXNlXCJhZnRlclwiOmUoYS5lbCx0aGlzLmNyZWF0ZUNlbGxzKGgsMSkpfWEuaXNSb3dzcGFuJiZ0aGlzLmhhbmRsZUNlbGxBZGRXaXRoUm93c3BhbihhLGIrMSxkKX1lbHNlIGEuZWwuc2V0QXR0cmlidXRlKFwiY29sc3BhblwiLHBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKGEuZWwsXCJjb2xzcGFuXCIpLDEwKSsxKX0sYWRkQ29sdW1uOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlO2lmKHRoaXMuc2V0VGFibGVNYXAoKSx0aGlzLmlkeD10aGlzLmdldE1hcEluZGV4KHRoaXMuY2VsbCksXCJhZnRlclwiPT1hJiZnLmdldEF0dHJpYnV0ZSh0aGlzLmNlbGwsXCJjb2xzcGFuXCIpJiYodGhpcy5pZHguY29sPXRoaXMuaWR4LmNvbCtwYXJzZUludChnLmdldEF0dHJpYnV0ZSh0aGlzLmNlbGwsXCJjb2xzcGFuXCIpLDEwKS0xKSx0aGlzLmlkeCE9PSExKWZvcihkPTAsZT10aGlzLm1hcC5sZW5ndGg7ZT5kO2QrKyliPXRoaXMubWFwW2RdLGJbdGhpcy5pZHguY29sXSYmKGM9Ylt0aGlzLmlkeC5jb2xdLGMubW9kaWZpZWR8fCh0aGlzLnNldENlbGxBc01vZGlmaWVkKGMpLHRoaXMuYWRkQ29sQ2VsbChjLGQsYSkpKX0saGFuZGxlQ2VsbEFkZFdpdGhSb3dzcGFuOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxoLGksaixrPXBhcnNlSW50KGcuZ2V0QXR0cmlidXRlKHRoaXMuY2VsbCxcInJvd3NwYW5cIiksMTApLTEsbD1nLmdldFBhcmVudEVsZW1lbnQoYS5lbCx7bm9kZU5hbWU6W1wiVFJcIl19KSxtPWEuZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpLG49dGhpcy50YWJsZS5vd25lckRvY3VtZW50O2ZvcihqPTA7az5qO2orKylpZihkPXRoaXMuY29ycmVjdENvbEluZGV4Rm9yVW5yZWFscyh0aGlzLmlkeC5jb2wsYitqKSxsPWYobCxcInRyXCIpLGwpaWYoZD4wKXN3aXRjaChjKXtjYXNlXCJiZWZvcmVcIjpoPXRoaXMuZ2V0Um93Q2VsbHMobCksZD4wJiZ0aGlzLm1hcFtiK2pdW3RoaXMuaWR4LmNvbF0uZWwhPWhbZF0mJmQ9PWgubGVuZ3RoLTE/ZShoW2RdLHRoaXMuY3JlYXRlQ2VsbHMobSwxKSk6aFtkXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNyZWF0ZUNlbGxzKG0sMSksaFtkXSk7XG5icmVhaztjYXNlXCJhZnRlclwiOmUodGhpcy5nZXRSb3dDZWxscyhsKVtkXSx0aGlzLmNyZWF0ZUNlbGxzKG0sMSkpfWVsc2UgbC5pbnNlcnRCZWZvcmUodGhpcy5jcmVhdGVDZWxscyhtLDEpLGwuZmlyc3RDaGlsZCk7ZWxzZSBpPW4uY3JlYXRlRWxlbWVudChcInRyXCIpLGkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDZWxscyhtLDEpKSx0aGlzLnRhYmxlLmFwcGVuZENoaWxkKGkpfX0sZy50YWJsZT17Z2V0Q2VsbHNCZXR3ZWVuOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7cmV0dXJuIGMuZ2V0TWFwRWxzVG8oYil9LGFkZENlbGxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7Yy5hZGQoYil9LHJlbW92ZUNlbGxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7Yy5yZW1vdmUoYil9LG1lcmdlQ2VsbHNCZXR3ZWVuOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7Yy5tZXJnZShiKX0sdW5tZXJnZUNlbGw6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGkoYSk7Yi51bm1lcmdlKCl9LG9yZGVyU2VsZWN0aW9uRW5kczpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBpKGEpO3JldHVybiBjLm9yZGVyU2VsZWN0aW9uRW5kcyhiKX0saW5kZXhPZjpmdW5jdGlvbihhKXt2YXIgYj1uZXcgaShhKTtyZXR1cm4gYi5zZXRUYWJsZU1hcCgpLGIuZ2V0TWFwSW5kZXgoYSl9LGZpbmRDZWxsOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkobnVsbCxhKTtyZXR1cm4gYy5nZXRFbGVtZW50QXRJbmRleChiKX0sZmluZFJvd0J5Q2VsbDpmdW5jdGlvbihhKXt2YXIgYj1uZXcgaShhKTtyZXR1cm4gYi5nZXRSb3dFbGVtZW50c0J5Q2VsbCgpfSxmaW5kQ29sdW1uQnlDZWxsOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBpKGEpO3JldHVybiBiLmdldENvbHVtbkVsZW1lbnRzQnlDZWxsKCl9LGNhbk1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7cmV0dXJuIGMuY2FuTWVyZ2UoYil9fX0od3lzaWh0bWw1KSx3eXNpaHRtbDUuZG9tLnF1ZXJ5PWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXTtmb3IoYS5ub2RlVHlwZSYmKGE9W2FdKSxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWlmKGM9YVtkXS5xdWVyeVNlbGVjdG9yQWxsKGIpLGMpZm9yKGY9Yy5sZW5ndGg7Zi0tO2cudW5zaGlmdChjW2ZdKSk7cmV0dXJuIGd9LHd5c2lodG1sNS5kb20uY29tcGFyZURvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKX06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYz05PT09YS5ub2RlVHlwZT9hOmEub3duZXJEb2N1bWVudCxkPTk9PT1iLm5vZGVUeXBlP2I6Yi5vd25lckRvY3VtZW50LGE9PT1iKXJldHVybiAwO2lmKGE9PT1iLm93bmVyRG9jdW1lbnQpcmV0dXJuIDIwO2lmKGEub3duZXJEb2N1bWVudD09PWIpcmV0dXJuIDEwO2lmKGMhPT1kKXJldHVybiAxO2lmKDI9PT1hLm5vZGVUeXBlJiZhLmNoaWxkTm9kZXMmJi0xIT09d3lzaWh0bWw1LmxhbmcuYXJyYXkoYS5jaGlsZE5vZGVzKS5pbmRleE9mKGIpKXJldHVybiAyMDtpZigyPT09Yi5ub2RlVHlwZSYmYi5jaGlsZE5vZGVzJiYtMSE9PXd5c2lodG1sNS5sYW5nLmFycmF5KGIuY2hpbGROb2RlcykuaW5kZXhPZihhKSlyZXR1cm4gMTA7Zm9yKGU9YSxmPVtdLGc9bnVsbDtlOyl7aWYoZT09YilyZXR1cm4gMTA7Zi5wdXNoKGUpLGU9ZS5wYXJlbnROb2RlfWZvcihlPWIsZz1udWxsO2U7KXtpZihlPT1hKXJldHVybiAyMDtpZihoPXd5c2lodG1sNS5sYW5nLmFycmF5KGYpLmluZGV4T2YoZSksLTEhPT1oKXJldHVybiBpPWZbaF0saj13eXNpaHRtbDUubGFuZy5hcnJheShpLmNoaWxkTm9kZXMpLmluZGV4T2YoZltoLTFdKSxrPXd5c2lodG1sNS5sYW5nLmFycmF5KGkuY2hpbGROb2RlcykuaW5kZXhPZihnKSxqPms/Mjo0O2c9ZSxlPWUucGFyZW50Tm9kZX1yZXR1cm4gMX19KCksd3lzaWh0bWw1LmRvbS51bndyYXA9ZnVuY3Rpb24oYSl7aWYoYS5wYXJlbnROb2RlKXtmb3IoO2EubGFzdENoaWxkOyl3eXNpaHRtbDUuZG9tLmluc2VydChhLmxhc3RDaGlsZCkuYWZ0ZXIoYSk7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX0sd3lzaWh0bWw1LmRvbS5nZXRQYXN0ZWRIdG1sPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBhLmNsaXBib2FyZERhdGEmJih3eXNpaHRtbDUubGFuZy5hcnJheShhLmNsaXBib2FyZERhdGEudHlwZXMpLmNvbnRhaW5zKFwidGV4dC9odG1sXCIpP2I9YS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L2h0bWxcIik6d3lzaWh0bWw1LmxhbmcuYXJyYXkoYS5jbGlwYm9hcmREYXRhLnR5cGVzKS5jb250YWlucyhcInRleHQvcGxhaW5cIikmJihiPXd5c2lodG1sNS5sYW5nLnN0cmluZyhhLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIikpLmVzY2FwZUhUTUwoITAsITApKSksYn0sd3lzaWh0bWw1LmRvbS5nZXRQYXN0ZWRIdG1sV2l0aERpdj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCksZD1hLmVsZW1lbnQub3duZXJEb2N1bWVudCxlPWQuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtkLmJvZHkuYXBwZW5kQ2hpbGQoZSksZS5zdHlsZS53aWR0aD1cIjFweFwiLGUuc3R5bGUuaGVpZ2h0PVwiMXB4XCIsZS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLGUuc2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIsXCJ0cnVlXCIpLGUuZm9jdXMoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5zZWxlY3Rpb24uc2V0Qm9va21hcmsoYyksYihlLmlubmVySFRNTCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSwwKX0sd3lzaWh0bWw1LnF1aXJrcy5jbGVhblBhc3RlZEhUTUw9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihhKXt2YXIgYj13eXNpaHRtbDUubGFuZy5zdHJpbmcoYSkudHJpbSgpLGM9Yi5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZyxcIlxcXFwkJlwiKTtyZXR1cm4gUmVnRXhwKFwiXigoPyFeXCIrYytcIiQpLikqJFwiLFwiaVwiKX0sYj1mdW5jdGlvbihiLGMpe3ZhciBkLGUsZj13eXNpaHRtbDUubGFuZy5vYmplY3QoYikuY2xvbmUoITApO2ZvcihkIGluIGYudGFncylpZihmLnRhZ3MuaGFzT3duUHJvcGVydHkoZCkmJmYudGFnc1tkXS5rZWVwX3N0eWxlcylmb3IoZSBpbiBmLnRhZ3NbZF0ua2VlcF9zdHlsZXMpZi50YWdzW2RdLmtlZXBfc3R5bGVzLmhhc093blByb3BlcnR5KGUpJiZjW2VdJiYoZi50YWdzW2RdLmtlZXBfc3R5bGVzW2VdPWEoY1tlXSkpO3JldHVybiBmfSxjPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO2lmKCFhKXJldHVybiBudWxsO2ZvcihkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWlmKGFbZF0uY29uZGl0aW9ufHwoYz1hW2RdLnNldCksYVtkXS5jb25kaXRpb24mJmFbZF0uY29uZGl0aW9uLnRlc3QoYikpcmV0dXJuIGFbZF0uc2V0O3JldHVybiBjfTtyZXR1cm4gZnVuY3Rpb24oYSxkKXt2YXIgZSxmPXtjb2xvcjp3eXNpaHRtbDUuZG9tLmdldFN0eWxlKFwiY29sb3JcIikuZnJvbShkLnJlZmVyZW5jZU5vZGUpLGZvbnRTaXplOnd5c2lodG1sNS5kb20uZ2V0U3R5bGUoXCJmb250LXNpemVcIikuZnJvbShkLnJlZmVyZW5jZU5vZGUpfSxnPWIoYyhkLnJ1bGVzLGEpfHx7fSxmKTtyZXR1cm4gZT13eXNpaHRtbDUuZG9tLnBhcnNlKGEse3J1bGVzOmcsY2xlYW5VcDohMCxjb250ZXh0OmQucmVmZXJlbmNlTm9kZS5vd25lckRvY3VtZW50LHVuZWRpdGFibGVDbGFzczpkLnVuZWRpdGFibGVDbGFzcyxjbGVhckludGVybmFsczohMCx1bmpvaW5OYnNwczohMH0pLGV9fSgpLHd5c2lodG1sNS5xdWlya3MuZW5zdXJlUHJvcGVyQ2xlYXJpbmc9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBiPWEuaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCk7KFwiPHA+Jm5ic3A7PC9wPlwiPT1ifHxcIjxwPiZuYnNwOzwvcD48cD4mbmJzcDs8L3A+XCI9PWIpJiYoYS5pbm5lckhUTUw9XCJcIil9LDApfTtyZXR1cm4gZnVuY3Rpb24oYil7d3lzaWh0bWw1LmRvbS5vYnNlcnZlKGIuZWxlbWVudCxbXCJjdXRcIixcImtleWRvd25cIl0sYSl9fSgpLGZ1bmN0aW9uKGEpe3ZhciBiPVwiJTdFXCI7YS5xdWlya3MuZ2V0Q29ycmVjdElubmVySFRNTD1mdW5jdGlvbihjKXt2YXIgZCxlLGYsZyxoLGk9Yy5pbm5lckhUTUw7aWYoLTE9PT1pLmluZGV4T2YoYikpcmV0dXJuIGk7Zm9yKGQ9Yy5xdWVyeVNlbGVjdG9yQWxsKFwiW2hyZWYqPSd+J10sIFtzcmMqPSd+J11cIiksaD0wLGc9ZC5sZW5ndGg7Zz5oO2grKyllPWRbaF0uaHJlZnx8ZFtoXS5zcmMsZj1hLmxhbmcuc3RyaW5nKGUpLnJlcGxhY2UoXCJ+XCIpLmJ5KGIpLGk9YS5sYW5nLnN0cmluZyhpKS5yZXBsYWNlKGYpLmJ5KGUpO3JldHVybiBpfX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj1cInd5c2lodG1sNS1xdWlya3MtcmVkcmF3XCI7YS5xdWlya3MucmVkcmF3PWZ1bmN0aW9uKGMpe2EuZG9tLmFkZENsYXNzKGMsYiksYS5kb20ucmVtb3ZlQ2xhc3MoYyxiKTt0cnl7dmFyIGQ9Yy5vd25lckRvY3VtZW50O2QuZXhlY0NvbW1hbmQoXCJpdGFsaWNcIiwhMSxudWxsKSxkLmV4ZWNDb21tYW5kKFwiaXRhbGljXCIsITEsbnVsbCl9Y2F0Y2goZSl7fX19KHd5c2lodG1sNSksd3lzaWh0bWw1LnF1aXJrcy50YWJsZUNlbGxzU2VsZWN0aW9uPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe3JldHVybiBrLm9ic2VydmUoYSxcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGEpe3ZhciBiPXd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChhLnRhcmdldCx7bm9kZU5hbWU6W1wiVERcIixcIlRIXCJdfSk7YiYmZChiKX0pLGx9ZnVuY3Rpb24gZChjKXtsLnN0YXJ0PWMsbC5lbmQ9YyxsLmNlbGxzPVtjXSxsLnRhYmxlPWsuZ2V0UGFyZW50RWxlbWVudChsLnN0YXJ0LHtub2RlTmFtZTpbXCJUQUJMRVwiXX0pLGwudGFibGUmJihlKCksay5hZGRDbGFzcyhjLG0pLG49ay5vYnNlcnZlKGEsXCJtb3VzZW1vdmVcIixnKSxvPWsub2JzZXJ2ZShhLFwibW91c2V1cFwiLGgpLGIuZmlyZShcInRhYmxlc2VsZWN0c3RhcnRcIikuZmlyZShcInRhYmxlc2VsZWN0c3RhcnQ6Y29tcG9zZXJcIikpfWZ1bmN0aW9uIGUoKXt2YXIgYixjO2lmKGEmJihiPWEucXVlcnlTZWxlY3RvckFsbChcIi5cIittKSxiLmxlbmd0aD4wKSlmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWsucmVtb3ZlQ2xhc3MoYltjXSxtKX1mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWsuYWRkQ2xhc3MoYVtiXSxtKX1mdW5jdGlvbiBnKGEpe3ZhciBjLGQ9bnVsbCxnPWsuZ2V0UGFyZW50RWxlbWVudChhLnRhcmdldCx7bm9kZU5hbWU6W1wiVERcIixcIlRIXCJdfSk7ZyYmbC50YWJsZSYmbC5zdGFydCYmKGQ9ay5nZXRQYXJlbnRFbGVtZW50KGcse25vZGVOYW1lOltcIlRBQkxFXCJdfSksZCYmZD09PWwudGFibGUmJihlKCksYz1sLmVuZCxsLmVuZD1nLGwuY2VsbHM9ay50YWJsZS5nZXRDZWxsc0JldHdlZW4obC5zdGFydCxnKSxsLmNlbGxzLmxlbmd0aD4xJiZiLmNvbXBvc2VyLnNlbGVjdGlvbi5kZXNlbGVjdCgpLGYobC5jZWxscyksbC5lbmQhPT1jJiZiLmZpcmUoXCJ0YWJsZXNlbGVjdGNoYW5nZVwiKS5maXJlKFwidGFibGVzZWxlY3RjaGFuZ2U6Y29tcG9zZXJcIikpKX1mdW5jdGlvbiBoKCl7bi5zdG9wKCksby5zdG9wKCksYi5maXJlKFwidGFibGVzZWxlY3RcIikuZmlyZShcInRhYmxlc2VsZWN0OmNvbXBvc2VyXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpKCl9LDApfWZ1bmN0aW9uIGkoKXt2YXIgYz1rLm9ic2VydmUoYS5vd25lckRvY3VtZW50LFwiY2xpY2tcIixmdW5jdGlvbihhKXtjLnN0b3AoKSxrLmdldFBhcmVudEVsZW1lbnQoYS50YXJnZXQse25vZGVOYW1lOltcIlRBQkxFXCJdfSkhPWwudGFibGUmJihlKCksbC50YWJsZT1udWxsLGwuc3RhcnQ9bnVsbCxsLmVuZD1udWxsLGIuZmlyZShcInRhYmxldW5zZWxlY3RcIikuZmlyZShcInRhYmxldW5zZWxlY3Q6Y29tcG9zZXJcIikpfSl9ZnVuY3Rpb24gaihhLGMpe2wuc3RhcnQ9YSxsLmVuZD1jLGwudGFibGU9ay5nZXRQYXJlbnRFbGVtZW50KGwuc3RhcnQse25vZGVOYW1lOltcIlRBQkxFXCJdfSksc2VsZWN0ZWRDZWxscz1rLnRhYmxlLmdldENlbGxzQmV0d2VlbihsLnN0YXJ0LGwuZW5kKSxmKHNlbGVjdGVkQ2VsbHMpLGkoKSxiLmZpcmUoXCJ0YWJsZXNlbGVjdFwiKS5maXJlKFwidGFibGVzZWxlY3Q6Y29tcG9zZXJcIil9dmFyIGs9d3lzaWh0bWw1LmRvbSxsPXt0YWJsZTpudWxsLHN0YXJ0Om51bGwsZW5kOm51bGwsY2VsbHM6bnVsbCxzZWxlY3Q6an0sbT1cInd5c2l3eWctdG1wLXNlbGVjdGVkLWNlbGxcIixuPW51bGwsbz1udWxsO3JldHVybiBjKCl9LGZ1bmN0aW9uKGEpe3ZhciBiPS9ecmdiYVxcKFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooW1xcZFxcLl0rKVxccypcXCkvaSxjPS9ecmdiXFwoXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccypcXCkvaSxkPS9eIyhbMC05YS1mXVswLTlhLWZdKShbMC05YS1mXVswLTlhLWZdKShbMC05YS1mXVswLTlhLWZdKS9pLGU9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pL2ksZj1mdW5jdGlvbihhKXtyZXR1cm4gUmVnRXhwKFwiKF58XFxcXHN8OylcIithK1wiXFxcXHMqOlxcXFxzKlteOyRdK1wiLFwiZ2lcIil9O2EucXVpcmtzLnN0eWxlUGFyc2VyPXtwYXJzZUNvbG9yOmZ1bmN0aW9uKGcsaCl7dmFyIGksaixrLGw9ZihoKSxtPWcubWF0Y2gobCksbj0xMDtpZihtKXtmb3Ioaz1tLmxlbmd0aDtrLS07KW1ba109YS5sYW5nLnN0cmluZyhtW2tdLnNwbGl0KFwiOlwiKVsxXSkudHJpbSgpO2lmKGk9bVttLmxlbmd0aC0xXSxiLnRlc3QoaSkpaj1pLm1hdGNoKGIpO2Vsc2UgaWYoYy50ZXN0KGkpKWo9aS5tYXRjaChjKTtlbHNlIGlmKGQudGVzdChpKSlqPWkubWF0Y2goZCksbj0xNjtlbHNlIGlmKGUudGVzdChpKSlyZXR1cm4gaj1pLm1hdGNoKGUpLGouc2hpZnQoKSxqLnB1c2goMSksYS5sYW5nLmFycmF5KGopLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPmI/MTYqcGFyc2VJbnQoYSwxNikrcGFyc2VJbnQoYSwxNik6cGFyc2VGbG9hdChhKX0pO2lmKGopcmV0dXJuIGouc2hpZnQoKSxqWzNdfHxqLnB1c2goMSksYS5sYW5nLmFycmF5KGopLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPmI/cGFyc2VJbnQoYSxuKTpwYXJzZUZsb2F0KGEpfSl9cmV0dXJuITF9LHVucGFyc2VDb2xvcjpmdW5jdGlvbihhLGIpe2lmKGIpe2lmKFwiaGV4XCI9PWIpcmV0dXJuIGFbMF0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrYVsxXS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSthWzJdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2lmKFwiaGFzaFwiPT1iKXJldHVyblwiI1wiK2FbMF0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrYVsxXS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSthWzJdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2lmKFwicmdiXCI9PWIpcmV0dXJuXCJyZ2IoXCIrYVswXStcIixcIithWzFdK1wiLFwiK2FbMl0rXCIpXCI7aWYoXCJyZ2JhXCI9PWIpcmV0dXJuXCJyZ2JhKFwiK2FbMF0rXCIsXCIrYVsxXStcIixcIithWzJdK1wiLFwiK2FbM10rXCIpXCI7aWYoXCJjc3ZcIj09YilyZXR1cm4gYVswXStcIixcIithWzFdK1wiLFwiK2FbMl0rXCIsXCIrYVszXX1yZXR1cm4gYVszXSYmMSE9PWFbM10/XCJyZ2JhKFwiK2FbMF0rXCIsXCIrYVsxXStcIixcIithWzJdK1wiLFwiK2FbM10rXCIpXCI6XCJyZ2IoXCIrYVswXStcIixcIithWzFdK1wiLFwiK2FbMl0rXCIpXCJ9LHBhcnNlRm9udFNpemU6ZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXRjaChmKFwiZm9udC1zaXplXCIpKTtyZXR1cm4gYz9hLmxhbmcuc3RyaW5nKGNbYy5sZW5ndGgtMV0uc3BsaXQoXCI6XCIpWzFdKS50cmltKCk6ITF9fX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPTA7aWYoYS5wYXJlbnROb2RlKWRvIGIrPWEub2Zmc2V0VG9wfHwwLGE9YS5vZmZzZXRQYXJlbnQ7d2hpbGUoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYyhhLGIpe2Zvcih2YXIgYz0wO2IhPT1hOylpZihjKyssYj1iLnBhcmVudE5vZGUsIWIpdGhyb3cgRXJyb3IoXCJub3QgYSBkZXNjZW5kYW50IG9mIGFuY2VzdG9yIVwiKTtyZXR1cm4gY31mdW5jdGlvbiBkKGEpe2lmKCFhLmNhblN1cnJvdW5kQ29udGVudHMoKSlmb3IodmFyIGI9YS5jb21tb25BbmNlc3RvckNvbnRhaW5lcixkPWMoYixhLnN0YXJ0Q29udGFpbmVyKSxlPWMoYixhLmVuZENvbnRhaW5lcik7IWEuY2FuU3Vycm91bmRDb250ZW50cygpOylkPmU/KGEuc2V0U3RhcnRCZWZvcmUoYS5zdGFydENvbnRhaW5lciksZD1jKGIsYS5zdGFydENvbnRhaW5lcikpOihhLnNldEVuZEFmdGVyKGEuZW5kQ29udGFpbmVyKSxlPWMoYixhLmVuZENvbnRhaW5lcikpfXZhciBlPWEuZG9tO2EuU2VsZWN0aW9uPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihhLGIsYyl7d2luZG93LnJhbmd5LmluaXQoKSx0aGlzLmVkaXRvcj1hLHRoaXMuY29tcG9zZXI9YS5jb21wb3Nlcix0aGlzLmRvYz10aGlzLmNvbXBvc2VyLmRvYyx0aGlzLmNvbnRhaW49Yix0aGlzLnVuc2VsZWN0YWJsZUNsYXNzPWN8fCExfSxnZXRCb29rbWFyazpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gYSYmZChhKSxhJiZhLmNsb25lUmFuZ2UoKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24oYSl7YSYmdGhpcy5zZXRTZWxlY3Rpb24oYSl9LHNldEJlZm9yZTpmdW5jdGlvbihhKXt2YXIgYj1yYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyk7cmV0dXJuIGIuc2V0U3RhcnRCZWZvcmUoYSksYi5zZXRFbmRCZWZvcmUoYSksdGhpcy5zZXRTZWxlY3Rpb24oYil9LHNldEFmdGVyOmZ1bmN0aW9uKGEpe3ZhciBiPXJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKTtyZXR1cm4gYi5zZXRTdGFydEFmdGVyKGEpLGIuc2V0RW5kQWZ0ZXIoYSksdGhpcy5zZXRTZWxlY3Rpb24oYil9LHNlbGVjdE5vZGU6ZnVuY3Rpb24oYixjKXt2YXIgZD1yYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyksZj1iLm5vZGVUeXBlPT09YS5FTEVNRU5UX05PREUsZz1cImNhbkhhdmVIVE1MXCJpbiBiP2IuY2FuSGF2ZUhUTUw6XCJJTUdcIiE9PWIubm9kZU5hbWUsaD1mP2IuaW5uZXJIVE1MOmIuZGF0YSxpPVwiXCI9PT1ofHxoPT09YS5JTlZJU0lCTEVfU1BBQ0Usaj1lLmdldFN0eWxlKFwiZGlzcGxheVwiKS5mcm9tKGIpLGs9XCJibG9ja1wiPT09anx8XCJsaXN0LWl0ZW1cIj09PWo7aWYoaSYmZiYmZyYmIWMpdHJ5e2IuaW5uZXJIVE1MPWEuSU5WSVNJQkxFX1NQQUNFfWNhdGNoKGwpe31nP2Quc2VsZWN0Tm9kZUNvbnRlbnRzKGIpOmQuc2VsZWN0Tm9kZShiKSxnJiZpJiZmP2QuY29sbGFwc2Uoayk6ZyYmaSYmKGQuc2V0U3RhcnRBZnRlcihiKSxkLnNldEVuZEFmdGVyKGIpKSx0aGlzLnNldFNlbGVjdGlvbihkKX0sZ2V0U2VsZWN0ZWROb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM7cmV0dXJuIGEmJnRoaXMuZG9jLnNlbGVjdGlvbiYmXCJDb250cm9sXCI9PT10aGlzLmRvYy5zZWxlY3Rpb24udHlwZSYmKGM9dGhpcy5kb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksYyYmYy5sZW5ndGgpP2MuaXRlbSgwKTooYj10aGlzLmdldFNlbGVjdGlvbih0aGlzLmRvYyksYi5mb2N1c05vZGU9PT1iLmFuY2hvck5vZGU/Yi5mb2N1c05vZGU6KGM9dGhpcy5nZXRSYW5nZSh0aGlzLmRvYyksYz9jLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOnRoaXMuZG9jLmJvZHkpKX0sZml4U2VsQm9yZGVyczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UmFuZ2UoKTtkKGEpLHRoaXMuc2V0U2VsZWN0aW9uKGEpfSxnZXRTZWxlY3RlZE93bk5vZGVzOmZ1bmN0aW9uKCl7dmFyIGEsYixjPXRoaXMuZ2V0T3duUmFuZ2VzKCksZD1bXTtmb3IoYT0wLGI9Yy5sZW5ndGg7Yj5hO2ErKylkLnB1c2goY1thXS5jb21tb25BbmNlc3RvckNvbnRhaW5lcnx8dGhpcy5kb2MuYm9keSk7cmV0dXJuIGR9LGZpbmROb2Rlc0luU2VsZWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBjLGQsZSxmPXRoaXMuZ2V0T3duUmFuZ2VzKCksZz1bXTtmb3IoZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKyljPWZbZF0uZ2V0Tm9kZXMoWzFdLGZ1bmN0aW9uKGMpe3JldHVybiBhLmxhbmcuYXJyYXkoYikuY29udGFpbnMoYy5ub2RlTmFtZSl9KSxnPWcuY29uY2F0KGMpO3JldHVybiBnfSxjb250YWluc1VuZWRpdGFibGU6ZnVuY3Rpb24oKXt2YXIgYSxiLGM9dGhpcy5nZXRPd25VbmVkaXRhYmxlcygpLGQ9dGhpcy5nZXRTZWxlY3Rpb24oKTtmb3IoYT0wLGI9Yy5sZW5ndGg7Yj5hO2ErKylpZihkLmNvbnRhaW5zTm9kZShjW2FdKSlyZXR1cm4hMDtyZXR1cm4hMX0sZGVsZXRlQ29udGVudHM6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZ2V0T3duUmFuZ2VzKCk7Zm9yKGE9Yi5sZW5ndGg7YS0tOyliW2FdLmRlbGV0ZUNvbnRlbnRzKCk7dGhpcy5zZXRTZWxlY3Rpb24oYlswXSl9LGdldFByZXZpb3VzTm9kZTpmdW5jdGlvbihiLGMpe3ZhciBkLGUsZjtyZXR1cm4gYnx8KGQ9dGhpcy5nZXRTZWxlY3Rpb24oKSxiPWQuYW5jaG9yTm9kZSksYj09PXRoaXMuY29udGFpbj8hMTooZT1iLnByZXZpb3VzU2libGluZyxlPT09dGhpcy5jb250YWluPyExOihlJiYzIT09ZS5ub2RlVHlwZSYmMSE9PWUubm9kZVR5cGU/ZT10aGlzLmdldFByZXZpb3VzTm9kZShlLGMpOmUmJjM9PT1lLm5vZGVUeXBlJiYvXlxccyokLy50ZXN0KGUudGV4dENvbnRlbnQpP2U9dGhpcy5nZXRQcmV2aW91c05vZGUoZSxjKTpjJiZlJiYxPT09ZS5ub2RlVHlwZSYmIWEubGFuZy5hcnJheShbXCJCUlwiLFwiSFJcIixcIklNR1wiXSkuY29udGFpbnMoZS5ub2RlTmFtZSkmJi9eW1xcc10qJC8udGVzdChlLmlubmVySFRNTCk/ZT10aGlzLmdldFByZXZpb3VzTm9kZShlLGMpOmV8fGI9PT10aGlzLmNvbnRhaW58fChmPWIucGFyZW50Tm9kZSxmIT09dGhpcy5jb250YWluJiYoZT10aGlzLmdldFByZXZpb3VzTm9kZShmLGMpKSksZSE9PXRoaXMuY29udGFpbj9lOiExKSl9LGdldFNlbGVjdGlvblBhcmVudHNCeVRhZzpmdW5jdGlvbigpe3ZhciBiLGMsZCxlPXRoaXMuZ2V0U2VsZWN0ZWRPd25Ob2RlcygpLGY9W107Zm9yKGM9MCxkPWUubGVuZ3RoO2Q+YztjKyspYj1lW2NdLm5vZGVOYW1lJiZcIkxJXCI9PT1lW2NdLm5vZGVOYW1lP2VbY106YS5kb20uZ2V0UGFyZW50RWxlbWVudChlW2NdLHtub2RlTmFtZTpbXCJMSVwiXX0sITEsdGhpcy5jb250YWluKSxiJiZmLnB1c2goYik7cmV0dXJuIGYubGVuZ3RoP2Y6bnVsbH0sZ2V0UmFuZ2VUb05vZGVFbmQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlzQ29sbGFwc2VkKCkpe3ZhciBhPXRoaXMuZ2V0UmFuZ2UoKSxiPWEuc3RhcnRDb250YWluZXIsYz1hLnN0YXJ0T2Zmc2V0LGQ9cmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpO3JldHVybiBkLnNlbGVjdE5vZGVDb250ZW50cyhiKSxkLnNldFN0YXJ0KGIsYyksZH19LGNhcmV0SXNMYXN0SW5TZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYT0ocmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpLHRoaXMuZ2V0U2VsZWN0aW9uKCksdGhpcy5nZXRSYW5nZVRvTm9kZUVuZCgpLmNsb25lQ29udGVudHMoKSksYj1hLnRleHRDb250ZW50O3JldHVybi9eXFxzKiQvLnRlc3QoYil9LGNhcmV0SXNGaXJzdEluU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9cmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpLGM9dGhpcy5nZXRTZWxlY3Rpb24oKSxkPXRoaXMuZ2V0UmFuZ2UoKSxlPWQuc3RhcnRDb250YWluZXI7cmV0dXJuIGUubm9kZVR5cGU9PT1hLlRFWFRfTk9ERT90aGlzLmlzQ29sbGFwc2VkKCkmJmUubm9kZVR5cGU9PT1hLlRFWFRfTk9ERSYmL15cXHMqJC8udGVzdChlLmRhdGEuc3Vic3RyKDAsZC5zdGFydE9mZnNldCkpOihiLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmdldFJhbmdlKCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIpLGIuY29sbGFwc2UoITApLHRoaXMuaXNDb2xsYXBzZWQoKSYmKGIuc3RhcnRDb250YWluZXI9PT1jLmFuY2hvck5vZGV8fGIuZW5kQ29udGFpbmVyPT09Yy5hbmNob3JOb2RlKSYmYi5zdGFydE9mZnNldD09PWMuYW5jaG9yT2Zmc2V0KX0sY2FyZXRJc0luVGhlQmVnaW5uaWc6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5nZXRTZWxlY3Rpb24oKSxkPWMuYW5jaG9yTm9kZSxlPWMuYW5jaG9yT2Zmc2V0O3JldHVybiBiPzA9PT1lJiYoZC5ub2RlTmFtZSYmZC5ub2RlTmFtZT09PWIudG9VcHBlckNhc2UoKXx8YS5kb20uZ2V0UGFyZW50RWxlbWVudChkLnBhcmVudE5vZGUse25vZGVOYW1lOmJ9LDEpKTowPT09ZSYmIXRoaXMuZ2V0UHJldmlvdXNOb2RlKGQsITApfSxjYXJldElzQmVmb3JlVW5lZGl0YWJsZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU9dGhpcy5nZXRTZWxlY3Rpb24oKSxmPWUuYW5jaG9yTm9kZSxnPWUuYW5jaG9yT2Zmc2V0O2lmKDA9PT1nJiYoYT10aGlzLmdldFByZXZpb3VzTm9kZShmLCEwKSxhKSlmb3IoYj10aGlzLmdldE93blVuZWRpdGFibGVzKCksYz0wLGQ9Yi5sZW5ndGg7ZD5jO2MrKylpZihhPT09YltjXSlyZXR1cm4gYltjXTtyZXR1cm4hMX0sZXhlY3V0ZUFuZFJlc3RvcmVSYW5neTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvYy5kZWZhdWx0Vmlld3x8dGhpcy5kb2MucGFyZW50V2luZG93LGM9cmFuZ3kuc2F2ZVNlbGVjdGlvbihiKTtpZihjKXRyeXthKCl9Y2F0Y2goZCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGR9LDApfWVsc2UgYSgpO3Jhbmd5LnJlc3RvcmVTZWxlY3Rpb24oYyl9LGV4ZWN1dGVBbmRSZXN0b3JlOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZixnLGgsaSxqLGssbCxtLG49dGhpcy5kb2MuYm9keSxvPWMmJm4uc2Nyb2xsVG9wLHA9YyYmbi5zY3JvbGxMZWZ0LHE9XCJfd3lzaWh0bWw1LXRlbXAtcGxhY2Vob2xkZXJcIixyPSc8c3BhbiBjbGFzcz1cIicrcSsnXCI+JythLklOVklTSUJMRV9TUEFDRStcIjwvc3Bhbj5cIixzPXRoaXMuZ2V0UmFuZ2UoITApO2lmKCFzKXJldHVybiBiKG4sbiksdm9pZCAwO3MuY29sbGFwc2VkfHwoaz1zLmNsb25lUmFuZ2UoKSxqPWsuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHIpLGsuY29sbGFwc2UoITEpLGsuaW5zZXJ0Tm9kZShqKSxrLmRldGFjaCgpKSxpPXMuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHIpLHMuaW5zZXJ0Tm9kZShpKSxqJiYoZD10aGlzLmNvbnRhaW4ucXVlcnlTZWxlY3RvckFsbChcIi5cIitxKSxzLnNldFN0YXJ0QmVmb3JlKGRbMF0pLHMuc2V0RW5kQWZ0ZXIoZFtkLmxlbmd0aC0xXSkpLHRoaXMuc2V0U2VsZWN0aW9uKHMpO3RyeXtiKHMuc3RhcnRDb250YWluZXIscy5lbmRDb250YWluZXIpfWNhdGNoKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSwwKX1pZihkPXRoaXMuY29udGFpbi5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK3EpLGQmJmQubGVuZ3RoKWZvcihsPXJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKSxnPWRbMF0ubmV4dFNpYmxpbmcsZC5sZW5ndGg+MSYmKGg9ZFtkLmxlbmd0aC0xXS5wcmV2aW91c1NpYmxpbmcpLGgmJmc/KGwuc2V0U3RhcnRCZWZvcmUoZyksbC5zZXRFbmRBZnRlcihoKSk6KGY9dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUoYS5JTlZJU0lCTEVfU1BBQ0UpLGUuaW5zZXJ0KGYpLmFmdGVyKGRbMF0pLGwuc2V0U3RhcnRCZWZvcmUoZiksbC5zZXRFbmRBZnRlcihmKSksdGhpcy5zZXRTZWxlY3Rpb24obCksbT1kLmxlbmd0aDttLS07KWRbbV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkW21dKTtlbHNlIHRoaXMuY29udGFpbi5mb2N1cygpO2MmJihuLnNjcm9sbFRvcD1vLG4uc2Nyb2xsTGVmdD1wKTt0cnl7ZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfWNhdGNoKHUpe319LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPXJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKTtjLnNldFN0YXJ0KGEsYnx8MCksdGhpcy5zZXRTZWxlY3Rpb24oYyl9LGluc2VydEhUTUw6ZnVuY3Rpb24oYSl7dmFyIGIsYz0ocmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpLHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoXCJESVZcIikpLGQ9dGhpcy5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2ZvcihjLmlubmVySFRNTD1hLGI9Yy5sYXN0Q2hpbGQ7Yy5maXJzdENoaWxkOylkLmFwcGVuZENoaWxkKGMuZmlyc3RDaGlsZCk7dGhpcy5pbnNlcnROb2RlKGQpLGImJnRoaXMuc2V0QWZ0ZXIoYil9LGluc2VydE5vZGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRSYW5nZSgpO2ImJmIuaW5zZXJ0Tm9kZShhKX0sc3Vycm91bmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMuZ2V0T3duUmFuZ2VzKCksZT1bXTtpZigwPT1kLmxlbmd0aClyZXR1cm4gZTtmb3IoYz1kLmxlbmd0aDtjLS07KXtiPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoYS5ub2RlTmFtZSksZS5wdXNoKGIpLGEuY2xhc3NOYW1lJiYoYi5jbGFzc05hbWU9YS5jbGFzc05hbWUpLGEuY3NzU3R5bGUmJmIuc2V0QXR0cmlidXRlKFwic3R5bGVcIixhLmNzc1N0eWxlKTt0cnl7ZFtjXS5zdXJyb3VuZENvbnRlbnRzKGIpLHRoaXMuc2VsZWN0Tm9kZShiKX1jYXRjaChmKXtiLmFwcGVuZENoaWxkKGRbY10uZXh0cmFjdENvbnRlbnRzKCkpLGRbY10uaW5zZXJ0Tm9kZShiKX19cmV0dXJuIGV9LGRlYmxvY2tBbmRTdXJyb3VuZDpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGc9cmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpO2lmKGYuY2xhc3NOYW1lPWIuY2xhc3NOYW1lLHRoaXMuY29tcG9zZXIuY29tbWFuZHMuZXhlYyhcImZvcm1hdEJsb2NrXCIsYi5ub2RlTmFtZSxiLmNsYXNzTmFtZSksYz10aGlzLmNvbnRhaW4ucXVlcnlTZWxlY3RvckFsbChcIi5cIitiLmNsYXNzTmFtZSksY1swXSlmb3IoY1swXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmLGNbMF0pLGcuc2V0U3RhcnRCZWZvcmUoY1swXSksZy5zZXRFbmRBZnRlcihjW2MubGVuZ3RoLTFdKSxkPWcuZXh0cmFjdENvbnRlbnRzKCk7ZC5maXJzdENoaWxkOylpZihlPWQuZmlyc3RDaGlsZCwxPT1lLm5vZGVUeXBlJiZhLmRvbS5oYXNDbGFzcyhlLGIuY2xhc3NOYW1lKSl7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWYuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtcIkJSXCIhPT1lLm5vZGVOYW1lJiZmLmFwcGVuZENoaWxkKHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoXCJiclwiKSksZC5yZW1vdmVDaGlsZChlKX1lbHNlIGYuYXBwZW5kQ2hpbGQoZSk7ZWxzZSBmPW51bGw7cmV0dXJuIGZ9LHNjcm9sbEludG9WaWV3OmZ1bmN0aW9uKCl7dmFyIGMsZD10aGlzLmRvYyxlPTUsZj1kLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ+ZC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGc9ZC5fd3lzaWh0bWw1U2Nyb2xsSW50b1ZpZXdFbGVtZW50PWQuX3d5c2lodG1sNVNjcm9sbEludG9WaWV3RWxlbWVudHx8ZnVuY3Rpb24oKXt2YXIgYj1kLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBiLmlubmVySFRNTD1hLklOVklTSUJMRV9TUEFDRSxifSgpO2YmJih0aGlzLmluc2VydE5vZGUoZyksYz1iKGcpLGcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChnKSxjPj1kLmJvZHkuc2Nyb2xsVG9wK2QuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodC1lJiYoZC5ib2R5LnNjcm9sbFRvcD1jKSl9LHNlbGVjdExpbmU6ZnVuY3Rpb24oKXthLmJyb3dzZXIuc3VwcG9ydHNTZWxlY3Rpb25Nb2RpZnkoKT90aGlzLl9zZWxlY3RMaW5lX1czQygpOnRoaXMuZG9jLnNlbGVjdGlvbiYmdGhpcy5fc2VsZWN0TGluZV9NU0lFKCl9LF9zZWxlY3RMaW5lX1czQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZG9jLmRlZmF1bHRWaWV3LGI9YS5nZXRTZWxlY3Rpb24oKTtiLm1vZGlmeShcIm1vdmVcIixcImxlZnRcIixcImxpbmVib3VuZGFyeVwiKSxiLm1vZGlmeShcImV4dGVuZFwiLFwicmlnaHRcIixcImxpbmVib3VuZGFyeVwiKX0sX3NlbGVjdExpbmVfTVNJRTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj10aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxnPWYuYm91bmRpbmdUb3AsaD10aGlzLmRvYy5ib2R5LnNjcm9sbFdpZHRoO2lmKGYubW92ZVRvUG9pbnQpe2ZvcigwPT09ZyYmKGM9dGhpcy5kb2MuY3JlYXRlRWxlbWVudChcInNwYW5cIiksdGhpcy5pbnNlcnROb2RlKGMpLGc9Yy5vZmZzZXRUb3AsYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKSxnKz0xLGQ9LTEwO2g+ZDtkKz0yKXRyeXtmLm1vdmVUb1BvaW50KGQsZyk7YnJlYWt9Y2F0Y2goaSl7fWZvcihhPWcsYj10aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxlPWg7ZT49MDtlLS0pdHJ5e2IubW92ZVRvUG9pbnQoZSxhKTticmVha31jYXRjaChqKXt9Zi5zZXRFbmRQb2ludChcIkVuZFRvRW5kXCIsYiksZi5zZWxlY3QoKX19LGdldFRleHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGlvbigpO3JldHVybiBhP1wiXCIrYTpcIlwifSxnZXROb2RlczpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gYz9jLmdldE5vZGVzKFthXSxiKTpbXX0sZml4UmFuZ2VPdmVyZmxvdzpmdW5jdGlvbihhKXt2YXIgYixjO3RoaXMuY29udGFpbiYmdGhpcy5jb250YWluLmZpcnN0Q2hpbGQmJmEmJihiPWEuY29tcGFyZU5vZGUodGhpcy5jb250YWluKSwyIT09Yj8oMT09PWImJmEuc2V0U3RhcnRCZWZvcmUodGhpcy5jb250YWluLmZpcnN0Q2hpbGQpLDA9PT1iJiZhLnNldEVuZEFmdGVyKHRoaXMuY29udGFpbi5sYXN0Q2hpbGQpLDM9PT1iJiYoYS5zZXRTdGFydEJlZm9yZSh0aGlzLmNvbnRhaW4uZmlyc3RDaGlsZCksYS5zZXRFbmRBZnRlcih0aGlzLmNvbnRhaW4ubGFzdENoaWxkKSkpOnRoaXMuX2RldGVjdElubGluZVJhbmdlUHJvYmxlbXMoYSkmJihjPWEuZW5kQ29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYyYmYS5zZXRFbmQoYyx0aGlzLl9lbmRPZmZzZXRGb3JOb2RlKGMpKSkpfSxfZW5kT2Zmc2V0Rm9yTm9kZTpmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiBiLnNlbGVjdE5vZGVDb250ZW50cyhhKSxiLmVuZE9mZnNldH0sX2RldGVjdElubGluZVJhbmdlUHJvYmxlbXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhLnN0YXJ0Q29udGFpbmVyLGEuZW5kQ29udGFpbmVyKTtyZXR1cm4gMD09YS5lbmRPZmZzZXQmJjQmYn0sZ2V0UmFuZ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRTZWxlY3Rpb24oKSxjPWImJmIucmFuZ2VDb3VudCYmYi5nZXRSYW5nZUF0KDApO3JldHVybiBhIT09ITAmJnRoaXMuZml4UmFuZ2VPdmVyZmxvdyhjKSxjfSxnZXRPd25VbmVkaXRhYmxlczpmdW5jdGlvbigpe3ZhciBiPWUucXVlcnkodGhpcy5jb250YWluLFwiLlwiK3RoaXMudW5zZWxlY3RhYmxlQ2xhc3MpLGM9ZS5xdWVyeShiLFwiLlwiK3RoaXMudW5zZWxlY3RhYmxlQ2xhc3MpO3JldHVybiBhLmxhbmcuYXJyYXkoYikud2l0aG91dChjKX0sZ2V0T3duUmFuZ2VzOmZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGcsaD1bXSxpPXRoaXMuZ2V0UmFuZ2UoKTtpZihpJiZoLnB1c2goaSksdGhpcy51bnNlbGVjdGFibGVDbGFzcyYmdGhpcy5jb250YWluJiZpJiYoYj10aGlzLmdldE93blVuZWRpdGFibGVzKCksYi5sZW5ndGg+MCkpZm9yKGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZm9yKGE9W10sZj0wLGc9aC5sZW5ndGg7Zz5mO2YrKyl7aWYoaFtmXSlzd2l0Y2goaFtmXS5jb21wYXJlTm9kZShiW2RdKSl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjPWhbZl0uY2xvbmVSYW5nZSgpLGMuc2V0RW5kQmVmb3JlKGJbZF0pLGEucHVzaChjKSxjPWhbZl0uY2xvbmVSYW5nZSgpLGMuc2V0U3RhcnRBZnRlcihiW2RdKSxhLnB1c2goYyk7YnJlYWs7ZGVmYXVsdDphLnB1c2goaFtmXSl9aD1hfXJldHVybiBofSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gcmFuZ3kuZ2V0U2VsZWN0aW9uKHRoaXMuZG9jLmRlZmF1bHRWaWV3fHx0aGlzLmRvYy5wYXJlbnRXaW5kb3cpfSxzZXRTZWxlY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kb2MuZGVmYXVsdFZpZXd8fHRoaXMuZG9jLnBhcmVudFdpbmRvdyxjPXJhbmd5LmdldFNlbGVjdGlvbihiKTtyZXR1cm4gYy5zZXRTaW5nbGVSYW5nZShhKX0sY3JlYXRlUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gcmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpfSxpc0NvbGxhcHNlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkfSxnZXRIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9IdG1sKCl9LGlzRW5kVG9FbmRJbk5vZGU6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5nZXRSYW5nZSgpLGQ9Yy5jb21tb25BbmNlc3RvckNvbnRhaW5lcixlPWMuc3RhcnRDb250YWluZXIsZj1jLmVuZENvbnRhaW5lcjtpZihkLm5vZGVUeXBlPT09YS5URVhUX05PREUmJihkPWQucGFyZW50Tm9kZSksZS5ub2RlVHlwZT09PWEuVEVYVF9OT0RFJiYhL15cXHMqJC8udGVzdChlLmRhdGEuc3Vic3RyKGMuc3RhcnRPZmZzZXQpKSlyZXR1cm4hMTtpZihmLm5vZGVUeXBlPT09YS5URVhUX05PREUmJiEvXlxccyokLy50ZXN0KGYuZGF0YS5zdWJzdHIoYy5lbmRPZmZzZXQpKSlyZXR1cm4hMTtmb3IoO2UmJmUhPT1kOyl7aWYoZS5ub2RlVHlwZSE9PWEuVEVYVF9OT0RFJiYhYS5kb20uY29udGFpbnMoZCxlKSlyZXR1cm4hMTtpZihhLmRvbS5kb21Ob2RlKGUpLnByZXYoe2lnbm9yZUJsYW5rVGV4dHM6ITB9KSlyZXR1cm4hMTtlPWUucGFyZW50Tm9kZX1mb3IoO2YmJmYhPT1kOyl7aWYoZi5ub2RlVHlwZSE9PWEuVEVYVF9OT0RFJiYhYS5kb20uY29udGFpbnMoZCxmKSlyZXR1cm4hMTtpZihhLmRvbS5kb21Ob2RlKGYpLm5leHQoe2lnbm9yZUJsYW5rVGV4dHM6ITB9KSlyZXR1cm4hMTtmPWYucGFyZW50Tm9kZX1yZXR1cm4gYS5sYW5nLmFycmF5KGIpLmNvbnRhaW5zKGQubm9kZU5hbWUpP2Q6ITF9LGRlc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb24oKTthJiZhLnJlbW92ZUFsbFJhbmdlcygpfX0pfSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7aWYoIWEuY2xhc3NOYW1lKXJldHVybiExO3ZhciBkPWEuY2xhc3NOYW1lLm1hdGNoKGMpfHxbXTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09PWJ9ZnVuY3Rpb24gZChhLGIpe2lmKCFhLmdldEF0dHJpYnV0ZXx8IWEuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikpcmV0dXJuITE7YS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKS5tYXRjaChiKTtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKS5tYXRjaChiKT8hMDohMX1mdW5jdGlvbiBlKGEsYixjKXthLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpPyhoKGEsYyksYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSYmIS9eXFxzKiQvLnRlc3QoYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSk/YS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLGIrXCI7XCIrYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSk6YS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLGIpKTphLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsYil9ZnVuY3Rpb24gZihhLGIsYyl7YS5jbGFzc05hbWU/KGcoYSxjKSxhLmNsYXNzTmFtZSs9XCIgXCIrYik6YS5jbGFzc05hbWU9Yn1mdW5jdGlvbiBnKGEsYil7YS5jbGFzc05hbWUmJihhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZS5yZXBsYWNlKGIsXCJcIikpfWZ1bmN0aW9uIGgoYSxiKXt2YXIgYyxkLGU9W107aWYoYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSl7Zm9yKGM9YS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKS5zcGxpdChcIjtcIiksZD1jLmxlbmd0aDtkLS07KWNbZF0ubWF0Y2goYil8fC9eXFxzKiQvLnRlc3QoY1tkXSl8fGUucHVzaChjW2RdKTtlLmxlbmd0aD9hLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsZS5qb2luKFwiO1wiKSk6YS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKX19ZnVuY3Rpb24gaShhLGIpe3ZhciBjLGQsZSxmPVtdLGc9Yi5zcGxpdChcIjtcIiksaD1hLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO2lmKGgpe2ZvcihoPWgucmVwbGFjZSgvXFxzL2dpLFwiXCIpLnRvTG93ZXJDYXNlKCksZi5wdXNoKFJlZ0V4cChcIihefFxcXFxzfDspXCIrYi5yZXBsYWNlKC9cXHMvZ2ksXCJcIikucmVwbGFjZSgvKFtcXChcXCldKS9naSxcIlxcXFwkMVwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoXCI7XCIsXCI7P1wiKS5yZXBsYWNlKC9yZ2JcXFxcXFwoKFxcZCspLChcXGQrKSwoXFxkKylcXFxcXFwpL2dpLFwiXFxcXHM/cmdiXFxcXCgkMSxcXFxccz8kMixcXFxccz8kM1xcXFwpXCIpLFwiZ2lcIikpLGM9Zy5sZW5ndGg7Yy0tPjA7KS9eXFxzKiQvLnRlc3QoZ1tjXSl8fGYucHVzaChSZWdFeHAoXCIoXnxcXFxcc3w7KVwiK2dbY10ucmVwbGFjZSgvXFxzL2dpLFwiXCIpLnJlcGxhY2UoLyhbXFwoXFwpXSkvZ2ksXCJcXFxcJDFcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKFwiO1wiLFwiOz9cIikucmVwbGFjZSgvcmdiXFxcXFxcKChcXGQrKSwoXFxkKyksKFxcZCspXFxcXFxcKS9naSxcIlxcXFxzP3JnYlxcXFwoJDEsXFxcXHM/JDIsXFxcXHM/JDNcXFxcKVwiKSxcImdpXCIpKTtmb3IoZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylpZihoLm1hdGNoKGZbZF0pKXJldHVybiBmW2RdfXJldHVybiExfWZ1bmN0aW9uIGooYyxkLGUsZil7cmV0dXJuIGU/aShjLGUpOmY/YS5kb20uaGFzQ2xhc3MoYyxmKTpiLmRvbS5hcnJheUNvbnRhaW5zKGQsYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGsoYSxiLGMsZCl7Zm9yKHZhciBlPWEubGVuZ3RoO2UtLTspaWYoIWooYVtlXSxiLGMsZCkpcmV0dXJuITE7cmV0dXJuIGEubGVuZ3RoPyEwOiExfWZ1bmN0aW9uIGwoYSxiLGMpe3ZhciBkPWkoYSxiKTtyZXR1cm4gZD8oaChhLGQpLFwicmVtb3ZlXCIpOihlKGEsYixjKSxcImNoYW5nZVwiKX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIGEuY2xhc3NOYW1lLnJlcGxhY2UodSxcIiBcIik9PWIuY2xhc3NOYW1lLnJlcGxhY2UodSxcIiBcIil9ZnVuY3Rpb24gbihhKXtmb3IodmFyIGI9YS5wYXJlbnROb2RlO2EuZmlyc3RDaGlsZDspYi5pbnNlcnRCZWZvcmUoYS5maXJzdENoaWxkLGEpO2IucmVtb3ZlQ2hpbGQoYSl9ZnVuY3Rpb24gbyhhLGIpe2lmKGEuYXR0cmlidXRlcy5sZW5ndGghPWIuYXR0cmlidXRlcy5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBjLGQsZSxmPTAsZz1hLmF0dHJpYnV0ZXMubGVuZ3RoO2c+ZjsrK2YpaWYoYz1hLmF0dHJpYnV0ZXNbZl0sZT1jLm5hbWUsXCJjbGFzc1wiIT1lKXtpZihkPWIuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oZSksYy5zcGVjaWZpZWQhPWQuc3BlY2lmaWVkKXJldHVybiExO2lmKGMuc3BlY2lmaWVkJiZjLm5vZGVWYWx1ZSE9PWQubm9kZVZhbHVlKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHAoYSxjKXtyZXR1cm4gYi5kb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShhKT8wPT1jPyEhYS5wcmV2aW91c1NpYmxpbmc6Yz09YS5sZW5ndGg/ISFhLm5leHRTaWJsaW5nOiEwOmM+MCYmYzxhLmNoaWxkTm9kZXMubGVuZ3RofWZ1bmN0aW9uIHEoYSxjLGQsZSl7dmFyIGYsZztpZihiLmRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKGMpJiYoMD09ZD8oZD1iLmRvbS5nZXROb2RlSW5kZXgoYyksYz1jLnBhcmVudE5vZGUpOmQ9PWMubGVuZ3RoPyhkPWIuZG9tLmdldE5vZGVJbmRleChjKSsxLGM9Yy5wYXJlbnROb2RlKTpmPWIuZG9tLnNwbGl0RGF0YU5vZGUoYyxkKSksIShmfHxlJiZjPT09ZSkpe2ZvcihmPWMuY2xvbmVOb2RlKCExKSxmLmlkJiZmLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpO2c9Yy5jaGlsZE5vZGVzW2RdOylmLmFwcGVuZENoaWxkKGcpO2IuZG9tLmluc2VydEFmdGVyKGYsYyl9cmV0dXJuIGM9PWE/ZjpxKGEsZi5wYXJlbnROb2RlLGIuZG9tLmdldE5vZGVJbmRleChmKSxlKX1mdW5jdGlvbiByKGIpe3RoaXMuaXNFbGVtZW50TWVyZ2U9Yi5ub2RlVHlwZT09YS5FTEVNRU5UX05PREUsdGhpcy5maXJzdFRleHROb2RlPXRoaXMuaXNFbGVtZW50TWVyZ2U/Yi5sYXN0Q2hpbGQ6Yix0aGlzLnRleHROb2Rlcz1bdGhpcy5maXJzdFRleHROb2RlXX1mdW5jdGlvbiBzKGEsYixjLGQsZSxmLGcpe3RoaXMudGFnTmFtZXM9YXx8W3RdLHRoaXMuY3NzQ2xhc3M9Ynx8KGI9PT0hMT8hMTpcIlwiKSx0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cD1jLHRoaXMuY3NzU3R5bGU9ZXx8XCJcIix0aGlzLnNpbWlsYXJTdHlsZVJlZ0V4cD1mLHRoaXMubm9ybWFsaXplPWQsdGhpcy5hcHBseVRvQW55VGFnTmFtZT0hMSx0aGlzLmNvbnRhaW5lcj1nfXZhciB0PVwic3BhblwiLHU9L1xccysvZztyLnByb3RvdHlwZT17ZG9NZXJnZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj1bXTtmb3IoZD0wLGU9dGhpcy50ZXh0Tm9kZXMubGVuZ3RoO2U+ZDsrK2QpYT10aGlzLnRleHROb2Rlc1tkXSxiPWEucGFyZW50Tm9kZSxmW2RdPWEuZGF0YSxkJiYoYi5yZW1vdmVDaGlsZChhKSxiLmhhc0NoaWxkTm9kZXMoKXx8Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKTtyZXR1cm4gdGhpcy5maXJzdFRleHROb2RlLmRhdGE9Yz1mLmpvaW4oXCJcIiksY30sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudGV4dE5vZGVzLmxlbmd0aCxiPTA7YS0tOyliKz10aGlzLnRleHROb2Rlc1thXS5sZW5ndGg7cmV0dXJuIGJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGEsYixjPVtdO2ZvcihhPTAsYj10aGlzLnRleHROb2Rlcy5sZW5ndGg7Yj5hOysrYSljW2FdPVwiJ1wiK3RoaXMudGV4dE5vZGVzW2FdLmRhdGErXCInXCI7cmV0dXJuXCJbTWVyZ2UoXCIrYy5qb2luKFwiLFwiKStcIildXCJ9fSxzLnByb3RvdHlwZT17Z2V0QW5jZXN0b3JXaXRoQ2xhc3M6ZnVuY3Rpb24oZCl7Zm9yKHZhciBlO2Q7KXtpZihlPXRoaXMuY3NzQ2xhc3M/YyhkLHRoaXMuY3NzQ2xhc3MsdGhpcy5zaW1pbGFyQ2xhc3NSZWdFeHApOlwiXCIhPT10aGlzLmNzc1N0eWxlPyExOiEwLGQubm9kZVR5cGU9PWEuRUxFTUVOVF9OT0RFJiZcImZhbHNlXCIhPWQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpJiZiLmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZlKXJldHVybiBkO2Q9ZC5wYXJlbnROb2RlfXJldHVybiExfSxnZXRBbmNlc3RvcldpdGhTdHlsZTpmdW5jdGlvbihjKXtmb3IodmFyIGU7Yzspe2lmKGU9dGhpcy5jc3NTdHlsZT9kKGMsdGhpcy5zaW1pbGFyU3R5bGVSZWdFeHApOiExLGMubm9kZVR5cGU9PWEuRUxFTUVOVF9OT0RFJiZcImZhbHNlXCIhPWMuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpJiZiLmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZlKXJldHVybiBjO2M9Yy5wYXJlbnROb2RlfXJldHVybiExfSxnZXRNYXRjaGluZ0FuY2VzdG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3MoYSksYz0hMTtyZXR1cm4gYj90aGlzLmNzc1N0eWxlJiYoYz1cImNsYXNzXCIpOihiPXRoaXMuZ2V0QW5jZXN0b3JXaXRoU3R5bGUoYSksYiYmKGM9XCJzdHlsZVwiKSkse2VsZW1lbnQ6Yix0eXBlOmN9fSxwb3N0QXBwbHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGgsaT1hWzBdLGo9YVthLmxlbmd0aC0xXSxrPVtdLGw9aSxtPWosbj0wLG89ai5sZW5ndGg7Zm9yKGY9MCxnPWEubGVuZ3RoO2c+ZjsrK2YpZD1hW2ZdLGU9bnVsbCxkJiZkLnBhcmVudE5vZGUmJihlPXRoaXMuZ2V0QWRqYWNlbnRNZXJnZWFibGVUZXh0Tm9kZShkLnBhcmVudE5vZGUsITEpKSxlPyhjfHwoYz1uZXcgcihlKSxrLnB1c2goYykpLGMudGV4dE5vZGVzLnB1c2goZCksZD09PWkmJihsPWMuZmlyc3RUZXh0Tm9kZSxuPWwubGVuZ3RoKSxkPT09aiYmKG09Yy5maXJzdFRleHROb2RlLG89Yy5nZXRMZW5ndGgoKSkpOmM9bnVsbDtpZihqJiZqLnBhcmVudE5vZGUmJihoPXRoaXMuZ2V0QWRqYWNlbnRNZXJnZWFibGVUZXh0Tm9kZShqLnBhcmVudE5vZGUsITApLGgmJihjfHwoYz1uZXcgcihqKSxrLnB1c2goYykpLGMudGV4dE5vZGVzLnB1c2goaCkpKSxrLmxlbmd0aCl7Zm9yKGY9MCxnPWsubGVuZ3RoO2c+ZjsrK2Ypa1tmXS5kb01lcmdlKCk7Yi5zZXRTdGFydChsLG4pLGIuc2V0RW5kKG0sbyl9fSxnZXRBZGphY2VudE1lcmdlYWJsZVRleHROb2RlOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZT1iLm5vZGVUeXBlPT1hLlRFWFRfTk9ERSxmPWU/Yi5wYXJlbnROb2RlOmIsZz1jP1wibmV4dFNpYmxpbmdcIjpcInByZXZpb3VzU2libGluZ1wiO2lmKGUpe2lmKGQ9YltnXSxkJiZkLm5vZGVUeXBlPT1hLlRFWFRfTk9ERSlyZXR1cm4gZH1lbHNlIGlmKGQ9ZltnXSxkJiZ0aGlzLmFyZUVsZW1lbnRzTWVyZ2VhYmxlKGIsZCkpcmV0dXJuIGRbYz9cImZpcnN0Q2hpbGRcIjpcImxhc3RDaGlsZFwiXTtyZXR1cm4gbnVsbH0sYXJlRWxlbWVudHNNZXJnZWFibGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYi5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLChhLnRhZ05hbWV8fFwiXCIpLnRvTG93ZXJDYXNlKCkpJiZiLmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsKGMudGFnTmFtZXx8XCJcIikudG9Mb3dlckNhc2UoKSkmJm0oYSxjKSYmbyhhLGMpfSxjcmVhdGVDb250YWluZXI6ZnVuY3Rpb24oYSl7dmFyIGI9YS5jcmVhdGVFbGVtZW50KHRoaXMudGFnTmFtZXNbMF0pO3JldHVybiB0aGlzLmNzc0NsYXNzJiYoYi5jbGFzc05hbWU9dGhpcy5jc3NDbGFzcyksdGhpcy5jc3NTdHlsZSYmYi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLHRoaXMuY3NzU3R5bGUpLGJ9LGFwcGx5VG9UZXh0Tm9kZTpmdW5jdGlvbihhKXt2YXIgYyxkPWEucGFyZW50Tm9kZTsxPT1kLmNoaWxkTm9kZXMubGVuZ3RoJiZiLmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpPyh0aGlzLmNzc0NsYXNzJiZmKGQsdGhpcy5jc3NDbGFzcyx0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cCksdGhpcy5jc3NTdHlsZSYmZShkLHRoaXMuY3NzU3R5bGUsdGhpcy5zaW1pbGFyU3R5bGVSZWdFeHApKTooYz10aGlzLmNyZWF0ZUNvbnRhaW5lcihiLmRvbS5nZXREb2N1bWVudChhKSksYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLGEpLGMuYXBwZW5kQ2hpbGQoYSkpfSxpc1JlbW92YWJsZTpmdW5jdGlvbihjKXtyZXR1cm4gYi5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLGMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSYmXCJcIj09PWEubGFuZy5zdHJpbmcoYy5jbGFzc05hbWUpLnRyaW0oKSYmKCFjLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfHxcIlwiPT09YS5sYW5nLnN0cmluZyhjLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpKS50cmltKCkpfSx1bmRvVG9UZXh0Tm9kZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPWM/ITE6ITAsaD1jfHxkLGk9ITE7Yi5jb250YWluc05vZGUoaCl8fChlPWIuY2xvbmVSYW5nZSgpLGUuc2VsZWN0Tm9kZShoKSxlLmlzUG9pbnRJblJhbmdlKGIuZW5kQ29udGFpbmVyLGIuZW5kT2Zmc2V0KSYmcChiLmVuZENvbnRhaW5lcixiLmVuZE9mZnNldCkmJihxKGgsYi5lbmRDb250YWluZXIsYi5lbmRPZmZzZXQsdGhpcy5jb250YWluZXIpLGIuc2V0RW5kQWZ0ZXIoaCkpLGUuaXNQb2ludEluUmFuZ2UoYi5zdGFydENvbnRhaW5lcixiLnN0YXJ0T2Zmc2V0KSYmcChiLnN0YXJ0Q29udGFpbmVyLGIuc3RhcnRPZmZzZXQpJiYoaD1xKGgsYi5zdGFydENvbnRhaW5lcixiLnN0YXJ0T2Zmc2V0LHRoaXMuY29udGFpbmVyKSkpLCFmJiZ0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cCYmZyhoLHRoaXMuc2ltaWxhckNsYXNzUmVnRXhwKSxmJiZ0aGlzLnNpbWlsYXJTdHlsZVJlZ0V4cCYmKGk9XCJjaGFuZ2VcIj09PWwoaCx0aGlzLmNzc1N0eWxlLHRoaXMuc2ltaWxhclN0eWxlUmVnRXhwKSksdGhpcy5pc1JlbW92YWJsZShoKSYmIWkmJm4oaCl9LGFwcGx5VG9SYW5nZTpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZixnLGg7Zm9yKGQ9Yi5sZW5ndGg7ZC0tOyl7aWYoYz1iW2RdLmdldE5vZGVzKFthLlRFWFRfTk9ERV0pLCFjLmxlbmd0aCl0cnl7cmV0dXJuIGU9dGhpcy5jcmVhdGVDb250YWluZXIoYltkXS5lbmRDb250YWluZXIub3duZXJEb2N1bWVudCksYltkXS5zdXJyb3VuZENvbnRlbnRzKGUpLHRoaXMuc2VsZWN0Tm9kZShiW2RdLGUpLHZvaWQgMH1jYXRjaChpKXt9aWYoYltkXS5zcGxpdEJvdW5kYXJpZXMoKSxjPWJbZF0uZ2V0Tm9kZXMoW2EuVEVYVF9OT0RFXSksYy5sZW5ndGgpe2ZvcihnPTAsaD1jLmxlbmd0aDtoPmc7KytnKWY9Y1tnXSx0aGlzLmdldE1hdGNoaW5nQW5jZXN0b3IoZikuZWxlbWVudHx8dGhpcy5hcHBseVRvVGV4dE5vZGUoZik7YltkXS5zZXRTdGFydChjWzBdLDApLGY9Y1tjLmxlbmd0aC0xXSxiW2RdLnNldEVuZChmLGYubGVuZ3RoKSx0aGlzLm5vcm1hbGl6ZSYmdGhpcy5wb3N0QXBwbHkoYyxiW2RdKX19fSx1bmRvVG9SYW5nZTpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihmPWIubGVuZ3RoO2YtLTspe2ZvcihjPWJbZl0uZ2V0Tm9kZXMoW2EuVEVYVF9OT0RFXSksYy5sZW5ndGg/KGJbZl0uc3BsaXRCb3VuZGFyaWVzKCksYz1iW2ZdLmdldE5vZGVzKFthLlRFWFRfTk9ERV0pKTooZz1iW2ZdLmVuZENvbnRhaW5lci5vd25lckRvY3VtZW50LGg9Zy5jcmVhdGVUZXh0Tm9kZShhLklOVklTSUJMRV9TUEFDRSksYltmXS5pbnNlcnROb2RlKGgpLGJbZl0uc2VsZWN0Tm9kZShoKSxjPVtoXSksaT0wLGo9Yy5sZW5ndGg7aj5pOysraSliW2ZdLmlzVmFsaWQoKSYmKGQ9Y1tpXSxlPXRoaXMuZ2V0TWF0Y2hpbmdBbmNlc3RvcihkKSxcInN0eWxlXCI9PT1lLnR5cGU/dGhpcy51bmRvVG9UZXh0Tm9kZShkLGJbZl0sITEsZS5lbGVtZW50KTplLmVsZW1lbnQmJnRoaXMudW5kb1RvVGV4dE5vZGUoZCxiW2ZdLGUuZWxlbWVudCkpOzE9PWo/dGhpcy5zZWxlY3ROb2RlKGJbZl0sY1swXSk6KGJbZl0uc2V0U3RhcnQoY1swXSwwKSxkPWNbYy5sZW5ndGgtMV0sYltmXS5zZXRFbmQoZCxkLmxlbmd0aCksdGhpcy5ub3JtYWxpemUmJnRoaXMucG9zdEFwcGx5KGMsYltmXSkpfX0sc2VsZWN0Tm9kZTpmdW5jdGlvbihiLGMpe3ZhciBkPWMubm9kZVR5cGU9PT1hLkVMRU1FTlRfTk9ERSxlPVwiY2FuSGF2ZUhUTUxcImluIGM/Yy5jYW5IYXZlSFRNTDohMCxmPWQ/Yy5pbm5lckhUTUw6Yy5kYXRhLGc9XCJcIj09PWZ8fGY9PT1hLklOVklTSUJMRV9TUEFDRTtpZihnJiZkJiZlKXRyeXtjLmlubmVySFRNTD1hLklOVklTSUJMRV9TUEFDRX1jYXRjaChoKXt9Yi5zZWxlY3ROb2RlQ29udGVudHMoYyksZyYmZD9iLmNvbGxhcHNlKCExKTpnJiYoYi5zZXRTdGFydEFmdGVyKGMpLGIuc2V0RW5kQWZ0ZXIoYykpfSxnZXRUZXh0U2VsZWN0ZWRCeVJhbmdlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWIuY2xvbmVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGVDb250ZW50cyhhKSxjPWUuaW50ZXJzZWN0aW9uKGIpLGQ9Yz9cIlwiK2M6XCJcIixlLmRldGFjaCgpLGR9LGlzQXBwbGllZFRvUmFuZ2U6ZnVuY3Rpb24oYil7dmFyIGMsZCxlLGYsZyxoLGk9W10saj1cImZ1bGxcIjtmb3IoZT1iLmxlbmd0aDtlLS07KXtpZihkPWJbZV0uZ2V0Tm9kZXMoW2EuVEVYVF9OT0RFXSksIWQubGVuZ3RoKXJldHVybiBjPXRoaXMuZ2V0TWF0Y2hpbmdBbmNlc3RvcihiW2VdLnN0YXJ0Q29udGFpbmVyKS5lbGVtZW50LGM/e2VsZW1lbnRzOltjXSxjb3ZlcmFnZTpqfTohMTtmb3IoZj0wLGc9ZC5sZW5ndGg7Zz5mOysrZiloPXRoaXMuZ2V0VGV4dFNlbGVjdGVkQnlSYW5nZShkW2ZdLGJbZV0pLGM9dGhpcy5nZXRNYXRjaGluZ0FuY2VzdG9yKGRbZl0pLmVsZW1lbnQsYyYmXCJcIiE9aD8oaS5wdXNoKGMpLDE9PT1hLmRvbS5nZXRUZXh0Tm9kZXMoYywhMCkubGVuZ3RoP2o9XCJmdWxsXCI6XCJmdWxsXCI9PT1qJiYoaj1cImlubGluZVwiKSk6Y3x8KGo9XCJwYXJ0aWFsXCIpfXJldHVybiBpLmxlbmd0aD97ZWxlbWVudHM6aSxjb3ZlcmFnZTpqfTohMX0sdG9nZ2xlUmFuZ2U6ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmlzQXBwbGllZFRvUmFuZ2UoYSk7Yz9cImZ1bGxcIj09PWMuY292ZXJhZ2U/dGhpcy51bmRvVG9SYW5nZShhKTpcImlubGluZVwiPT09Yy5jb3ZlcmFnZT8oYj1rKGMuZWxlbWVudHMsdGhpcy50YWdOYW1lcyx0aGlzLmNzc1N0eWxlLHRoaXMuY3NzQ2xhc3MpLHRoaXMudW5kb1RvUmFuZ2UoYSksYnx8dGhpcy5hcHBseVRvUmFuZ2UoYSkpOihrKGMuZWxlbWVudHMsdGhpcy50YWdOYW1lcyx0aGlzLmNzc1N0eWxlLHRoaXMuY3NzQ2xhc3MpfHx0aGlzLnVuZG9Ub1JhbmdlKGEpLHRoaXMuYXBwbHlUb1JhbmdlKGEpKTp0aGlzLmFwcGx5VG9SYW5nZShhKX19LGEuc2VsZWN0aW9uLkhUTUxBcHBsaWVyPXN9KHd5c2lodG1sNSxyYW5neSksd3lzaWh0bWw1LkNvbW1hbmRzPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihhKXt0aGlzLmVkaXRvcj1hLHRoaXMuY29tcG9zZXI9YS5jb21wb3Nlcix0aGlzLmRvYz10aGlzLmNvbXBvc2VyLmRvY30sc3VwcG9ydDpmdW5jdGlvbihhKXtyZXR1cm4gd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNDb21tYW5kKHRoaXMuZG9jLGEpfSxleGVjOmZ1bmN0aW9uKGEsYil7dmFyIGM9d3lzaWh0bWw1LmNvbW1hbmRzW2FdLGQ9d3lzaWh0bWw1LmxhbmcuYXJyYXkoYXJndW1lbnRzKS5nZXQoKSxlPWMmJmMuZXhlYyxmPW51bGw7aWYodGhpcy5lZGl0b3IuZmlyZShcImJlZm9yZWNvbW1hbmQ6Y29tcG9zZXJcIiksZSlkLnVuc2hpZnQodGhpcy5jb21wb3NlciksZj1lLmFwcGx5KGMsZCk7ZWxzZSB0cnl7Zj10aGlzLmRvYy5leGVjQ29tbWFuZChhLCExLGIpfWNhdGNoKGcpe31yZXR1cm4gdGhpcy5lZGl0b3IuZmlyZShcImFmdGVyY29tbWFuZDpjb21wb3NlclwiKSxmfSxzdGF0ZTpmdW5jdGlvbihhKXt2YXIgYj13eXNpaHRtbDUuY29tbWFuZHNbYV0sYz13eXNpaHRtbDUubGFuZy5hcnJheShhcmd1bWVudHMpLmdldCgpLGQ9YiYmYi5zdGF0ZTtpZihkKXJldHVybiBjLnVuc2hpZnQodGhpcy5jb21wb3NlciksZC5hcHBseShiLGMpO3RyeXtyZXR1cm4gdGhpcy5kb2MucXVlcnlDb21tYW5kU3RhdGUoYSl9Y2F0Y2goZSl7cmV0dXJuITF9fSxzdGF0ZVZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXd5c2lodG1sNS5jb21tYW5kc1thXSxjPXd5c2lodG1sNS5sYW5nLmFycmF5KGFyZ3VtZW50cykuZ2V0KCksZD1iJiZiLnN0YXRlVmFsdWU7cmV0dXJuIGQ/KGMudW5zaGlmdCh0aGlzLmNvbXBvc2VyKSxkLmFwcGx5KGIsYykpOiExfX0pLHd5c2lodG1sNS5jb21tYW5kcy5ib2xkPXtleGVjOmZ1bmN0aW9uKGEsYil7d3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjV2l0aFRvZ2dsZShhLGIsXCJiXCIpfSxzdGF0ZTpmdW5jdGlvbihhLGIpe3JldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGEsYixcImJcIil9fSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIsYyl7dmFyIGcsaCxpLGosayxsLG0sbixvLHA9Yi5kb2MscT1cIl93eXNpaHRtbDUtdGVtcC1cIisgK25ldyBEYXRlLHI9L25vbi1tYXRjaGluZy1jbGFzcy9nLHM9MDtmb3IoYS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuZXhlYyhiLGQsZSxxLHIsZCxkLCEwLCEwKSxoPXAucXVlcnlTZWxlY3RvckFsbChlK1wiLlwiK3EpLGc9aC5sZW5ndGg7Zz5zO3MrKyl7aT1oW3NdLGkucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIik7Zm9yKG8gaW4gYylcInRleHRcIiE9PW8mJmkuc2V0QXR0cmlidXRlKG8sY1tvXSl9bD1pLDE9PT1nJiYobT1mLmdldFRleHRDb250ZW50KGkpLGo9ISFpLnF1ZXJ5U2VsZWN0b3IoXCIqXCIpLGs9XCJcIj09PW18fG09PT1hLklOVklTSUJMRV9TUEFDRSwhaiYmayYmKGYuc2V0VGV4dENvbnRlbnQoaSxjLnRleHR8fGkuaHJlZiksbj1wLmNyZWF0ZVRleHROb2RlKFwiIFwiKSxiLnNlbGVjdGlvbi5zZXRBZnRlcihpKSxmLmluc2VydChuKS5hZnRlcihpKSxsPW4pKSxiLnNlbGVjdGlvbi5zZXRBZnRlcihsKX1mdW5jdGlvbiBjKGEsYixjKXt2YXIgZCxlLGYsZztmb3IoZT1iLmxlbmd0aDtlLS07KXtmb3IoZD1iW2VdLmF0dHJpYnV0ZXMsZj1kLmxlbmd0aDtmLS07KWJbZV0ucmVtb3ZlQXR0cmlidXRlKGQuaXRlbShmKS5uYW1lKTtmb3IoZyBpbiBjKWMuaGFzT3duUHJvcGVydHkoZykmJmJbZV0uc2V0QXR0cmlidXRlKGcsY1tnXSl9fXZhciBkLGU9XCJBXCIsZj1hLmRvbTthLmNvbW1hbmRzLmNyZWF0ZUxpbms9e2V4ZWM6ZnVuY3Rpb24oYSxkLGUpe3ZhciBmPXRoaXMuc3RhdGUoYSxkKTtmP2Euc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlKGZ1bmN0aW9uKCl7YyhhLGYsZSl9KTooZT1cIm9iamVjdFwiPT10eXBlb2YgZT9lOntocmVmOmV9LGIoYSxlKSl9LHN0YXRlOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGIsYyxcIkFcIil9fX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7Zm9yKHZhciBkLGUsZixnPWIubGVuZ3RoLGg9MDtnPmg7aCsrKWQ9YltoXSxlPWMuZ2V0UGFyZW50RWxlbWVudChkLHtub2RlTmFtZTpcImNvZGVcIn0pLGY9Yy5nZXRUZXh0Q29udGVudChkKSxmLm1hdGNoKGMuYXV0b0xpbmsuVVJMX1JFR19FWFApJiYhZT9lPWMucmVuYW1lRWxlbWVudChkLFwiY29kZVwiKTpjLnJlcGxhY2VXaXRoQ2hpbGROb2RlcyhkKX12YXIgYz1hLmRvbTthLmNvbW1hbmRzLnJlbW92ZUxpbms9e2V4ZWM6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnN0YXRlKGEsYyk7ZCYmYS5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKXtiKGEsZCl9KX0sc3RhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoYixjLFwiQVwiKX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPS93eXNpd3lnLWZvbnQtc2l6ZS1bMC05YS16XFwtXSsvZzthLmNvbW1hbmRzLmZvbnRTaXplPXtleGVjOmZ1bmN0aW9uKGMsZCxlKXthLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjV2l0aFRvZ2dsZShjLGQsXCJzcGFuXCIsXCJ3eXNpd3lnLWZvbnQtc2l6ZS1cIitlLGIpfSxzdGF0ZTpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGMsZCxcInNwYW5cIixcInd5c2l3eWctZm9udC1zaXplLVwiK2UsYil9fX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj0vKFxcc3xeKWZvbnQtc2l6ZVxccyo6XFxzKlteO1xcc10rOz8vZ2k7YS5jb21tYW5kcy5mb250U2l6ZVN0eWxlPXtleGVjOmZ1bmN0aW9uKGMsZCxlKXtlPVwib2JqZWN0XCI9PXR5cGVvZiBlP2Uuc2l6ZTplLC9eXFxzKiQvLnRlc3QoZSl8fGEuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWNXaXRoVG9nZ2xlKGMsZCxcInNwYW5cIiwhMSwhMSxcImZvbnQtc2l6ZTpcIitlLGIpfSxzdGF0ZTpmdW5jdGlvbihjLGQpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjLGQsXCJzcGFuXCIsITEsITEsXCJmb250LXNpemVcIixiKX0sc3RhdGVWYWx1ZTpmdW5jdGlvbihiLGMpe3ZhciBkLGU9dGhpcy5zdGF0ZShiLGMpO3JldHVybiBlJiZhLmxhbmcub2JqZWN0KGUpLmlzQXJyYXkoKSYmKGU9ZVswXSksZSYmKGQ9ZS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSxkKT9hLnF1aXJrcy5zdHlsZVBhcnNlci5wYXJzZUZvbnRTaXplKGQpOiExfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9L3d5c2l3eWctY29sb3ItWzAtOWEtel0rL2c7YS5jb21tYW5kcy5mb3JlQ29sb3I9e2V4ZWM6ZnVuY3Rpb24oYyxkLGUpe2EuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWNXaXRoVG9nZ2xlKGMsZCxcInNwYW5cIixcInd5c2l3eWctY29sb3ItXCIrZSxiKX0sc3RhdGU6ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjLGQsXCJzcGFuXCIsXCJ3eXNpd3lnLWNvbG9yLVwiK2UsYil9fX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj0vKFxcc3xeKWNvbG9yXFxzKjpcXHMqW147XFxzXSs7Py9naTthLmNvbW1hbmRzLmZvcmVDb2xvclN0eWxlPXtleGVjOmZ1bmN0aW9uKGMsZCxlKXt2YXIgZixnPWEucXVpcmtzLnN0eWxlUGFyc2VyLnBhcnNlQ29sb3IoXCJvYmplY3RcIj09dHlwZW9mIGU/XCJjb2xvcjpcIitlLmNvbG9yOlwiY29sb3I6XCIrZSxcImNvbG9yXCIpO2cmJihmPVwiY29sb3I6IHJnYihcIitnWzBdK1wiLFwiK2dbMV0rXCIsXCIrZ1syXStcIik7XCIsMSE9PWdbM10mJihmKz1cImNvbG9yOiByZ2JhKFwiK2dbMF0rXCIsXCIrZ1sxXStcIixcIitnWzJdK1wiLFwiK2dbM10rXCIpO1wiKSxhLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjV2l0aFRvZ2dsZShjLGQsXCJzcGFuXCIsITEsITEsZixiKSl9LHN0YXRlOmZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGMsZCxcInNwYW5cIiwhMSwhMSxcImNvbG9yXCIsYil9LHN0YXRlVmFsdWU6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGY9dGhpcy5zdGF0ZShiLGMpO3JldHVybiBmJiZhLmxhbmcub2JqZWN0KGYpLmlzQXJyYXkoKSYmKGY9ZlswXSksZiYmKGU9Zi5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSxlJiZlKT8odmFsPWEucXVpcmtzLnN0eWxlUGFyc2VyLnBhcnNlQ29sb3IoZSxcImNvbG9yXCIpLGEucXVpcmtzLnN0eWxlUGFyc2VyLnVucGFyc2VDb2xvcih2YWwsZCkpOiExXG59fX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj0vKFxcc3xeKWJhY2tncm91bmQtY29sb3JcXHMqOlxccypbXjtcXHNdKzs/L2dpO2EuY29tbWFuZHMuYmdDb2xvclN0eWxlPXtleGVjOmZ1bmN0aW9uKGMsZCxlKXt2YXIgZixnPWEucXVpcmtzLnN0eWxlUGFyc2VyLnBhcnNlQ29sb3IoXCJvYmplY3RcIj09dHlwZW9mIGU/XCJiYWNrZ3JvdW5kLWNvbG9yOlwiK2UuY29sb3I6XCJiYWNrZ3JvdW5kLWNvbG9yOlwiK2UsXCJiYWNrZ3JvdW5kLWNvbG9yXCIpO2cmJihmPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiKFwiK2dbMF0rXCIsXCIrZ1sxXStcIixcIitnWzJdK1wiKTtcIiwxIT09Z1szXSYmKGYrPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiYShcIitnWzBdK1wiLFwiK2dbMV0rXCIsXCIrZ1syXStcIixcIitnWzNdK1wiKTtcIiksYS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuZXhlY1dpdGhUb2dnbGUoYyxkLFwic3BhblwiLCExLCExLGYsYikpfSxzdGF0ZTpmdW5jdGlvbihjLGQpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjLGQsXCJzcGFuXCIsITEsITEsXCJiYWNrZ3JvdW5kLWNvbG9yXCIsYil9LHN0YXRlVmFsdWU6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGY9dGhpcy5zdGF0ZShiLGMpLGc9ITE7cmV0dXJuIGYmJmEubGFuZy5vYmplY3QoZikuaXNBcnJheSgpJiYoZj1mWzBdKSxmJiYoZT1mLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpLGUpPyhnPWEucXVpcmtzLnN0eWxlUGFyc2VyLnBhcnNlQ29sb3IoZSxcImJhY2tncm91bmQtY29sb3JcIiksYS5xdWlya3Muc3R5bGVQYXJzZXIudW5wYXJzZUNvbG9yKGcsZCkpOiExfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsZSl7Yi5jbGFzc05hbWU/KGQoYixlKSxiLmNsYXNzTmFtZT1hLmxhbmcuc3RyaW5nKGIuY2xhc3NOYW1lK1wiIFwiK2MpLnRyaW0oKSk6Yi5jbGFzc05hbWU9Y31mdW5jdGlvbiBjKGIsYyxkKXtlKGIsZCksYi5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKT9iLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsYS5sYW5nLnN0cmluZyhiLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpK1wiIFwiK2MpLnRyaW0oKSk6Yi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLGMpfWZ1bmN0aW9uIGQoYixjKXt2YXIgZD1jLnRlc3QoYi5jbGFzc05hbWUpO3JldHVybiBiLmNsYXNzTmFtZT1iLmNsYXNzTmFtZS5yZXBsYWNlKGMsXCJcIiksXCJcIj09YS5sYW5nLnN0cmluZyhiLmNsYXNzTmFtZSkudHJpbSgpJiZiLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpLGR9ZnVuY3Rpb24gZShiLGMpe3ZhciBkPWMudGVzdChiLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpKTtyZXR1cm4gYi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLChiLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfHxcIlwiKS5yZXBsYWNlKGMsXCJcIikpLFwiXCI9PWEubGFuZy5zdHJpbmcoYi5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKXx8XCJcIikudHJpbSgpJiZiLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpLGR9ZnVuY3Rpb24gZihhKXt2YXIgYj1hLmxhc3RDaGlsZDtiJiZnKGIpJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gZyhhKXtyZXR1cm5cIkJSXCI9PT1hLm5vZGVOYW1lfWZ1bmN0aW9uIGgoYixjKXt2YXIgZCxlLGc7Zm9yKGIuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkmJmIuc2VsZWN0aW9uLnNlbGVjdExpbmUoKSxkPWIuc2VsZWN0aW9uLnN1cnJvdW5kKGMpLGU9MCxnPWQubGVuZ3RoO2c+ZTtlKyspYS5kb20ubGluZUJyZWFrcyhkW2VdKS5yZW1vdmUoKSxmKGRbZV0pfWZ1bmN0aW9uIGkoYil7cmV0dXJuISFhLmxhbmcuc3RyaW5nKGIuY2xhc3NOYW1lKS50cmltKCl9ZnVuY3Rpb24gaihiKXtyZXR1cm4hIWEubGFuZy5zdHJpbmcoYi5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKXx8XCJcIikudHJpbSgpfXZhciBrPWEuZG9tLGw9W1wiSDFcIixcIkgyXCIsXCJIM1wiLFwiSDRcIixcIkg1XCIsXCJINlwiLFwiUFwiLFwiUFJFXCIsXCJESVZcIl07YS5jb21tYW5kcy5mb3JtYXRCbG9jaz17ZXhlYzpmdW5jdGlvbihmLGcsbSxuLG8scCxxKXt2YXIgcixzLHQsdSx2LHc9KGYuZG9jLHRoaXMuc3RhdGUoZixnLG0sbixvLHAscSkpLHg9Zi5jb25maWcudXNlTGluZUJyZWFrcyx5PXg/XCJESVZcIjpcIlBcIjtyZXR1cm4gbT1cInN0cmluZ1wiPT10eXBlb2YgbT9tLnRvVXBwZXJDYXNlKCk6bSx3Lmxlbmd0aD8oZi5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmVSYW5neShmdW5jdGlvbigpe3ZhciBiLGMsZjtmb3IoYj13Lmxlbmd0aDtiLS07KXtpZihvJiYocz1kKHdbYl0sbykpLHEmJih1PWUod1tiXSxxKSksKHV8fHMpJiZudWxsPT09bSYmd1tiXS5ub2RlTmFtZSE9eSlyZXR1cm47Yz1pKHdbYl0pLGY9aih3W2JdKSxjfHxmfHwheCYmXCJQXCIhPT1tP2sucmVuYW1lRWxlbWVudCh3W2JdLFwiUFwiPT09bT9cIkRJVlwiOnkpOihhLmRvbS5saW5lQnJlYWtzKHdbYl0pLmFkZCgpLGsucmVwbGFjZVdpdGhDaGlsZE5vZGVzKHdbYl0pKX19KSx2b2lkIDApOigobnVsbCE9PW0mJiFhLmxhbmcuYXJyYXkobCkuY29udGFpbnMobSl8fChyPWYuc2VsZWN0aW9uLmZpbmROb2Rlc0luU2VsZWN0aW9uKGwpLmNvbmNhdChmLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE93bk5vZGVzKCkpLGYuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlUmFuZ3koZnVuY3Rpb24oKXtmb3IodmFyIGE9ci5sZW5ndGg7YS0tOyl2PWsuZ2V0UGFyZW50RWxlbWVudChyW2FdLHtub2RlTmFtZTpsfSksdj09Zi5lbGVtZW50JiYodj1udWxsKSx2JiYobSYmKHY9ay5yZW5hbWVFbGVtZW50KHYsbSkpLG4mJmIodixuLG8pLHAmJmModixwLHEpLHQ9ITApfSksIXQpKSYmaChmLHtub2RlTmFtZTptfHx5LGNsYXNzTmFtZTpufHxudWxsLGNzc1N0eWxlOnB8fG51bGx9KSx2b2lkIDApfSxzdGF0ZTpmdW5jdGlvbihiLGMsZCxlLGYsZyxoKXt2YXIgaSxqLGwsbT1iLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE93bk5vZGVzKCksbj1bXTtmb3IoZD1cInN0cmluZ1wiPT10eXBlb2YgZD9kLnRvVXBwZXJDYXNlKCk6ZCxqPTAsbD1tLmxlbmd0aDtsPmo7aisrKWk9ay5nZXRQYXJlbnRFbGVtZW50KG1bal0se25vZGVOYW1lOmQsY2xhc3NOYW1lOmUsY2xhc3NSZWdFeHA6Zixjc3NTdHlsZTpnLHN0eWxlUmVnRXhwOmh9KSxpJiYtMT09YS5sYW5nLmFycmF5KG4pLmluZGV4T2YoaSkmJm4ucHVzaChpKTtyZXR1cm4gMD09bi5sZW5ndGg/ITE6bn19fSh3eXNpaHRtbDUpLHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRDb2RlPXtleGVjOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz10aGlzLnN0YXRlKGEpO2c/YS5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKXtkPWcucXVlcnlTZWxlY3RvcihcImNvZGVcIiksd3lzaWh0bWw1LmRvbS5yZXBsYWNlV2l0aENoaWxkTm9kZXMoZyksZCYmd3lzaWh0bWw1LmRvbS5yZXBsYWNlV2l0aENoaWxkTm9kZXMoZCl9KTooZT1hLnNlbGVjdGlvbi5nZXRSYW5nZSgpLGY9ZS5leHRyYWN0Q29udGVudHMoKSxnPWEuZG9jLmNyZWF0ZUVsZW1lbnQoXCJwcmVcIiksZD1hLmRvYy5jcmVhdGVFbGVtZW50KFwiY29kZVwiKSxjJiYoZC5jbGFzc05hbWU9YyksZy5hcHBlbmRDaGlsZChkKSxkLmFwcGVuZENoaWxkKGYpLGUuaW5zZXJ0Tm9kZShnKSxhLnNlbGVjdGlvbi5zZWxlY3ROb2RlKGcpKX0sc3RhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7cmV0dXJuIGImJmIubm9kZU5hbWUmJlwiUFJFXCI9PWIubm9kZU5hbWUmJmIuZmlyc3RDaGlsZCYmYi5maXJzdENoaWxkLm5vZGVOYW1lJiZcIkNPREVcIj09Yi5maXJzdENoaWxkLm5vZGVOYW1lP2I6d3lzaWh0bWw1LmRvbS5nZXRQYXJlbnRFbGVtZW50KGIse25vZGVOYW1lOlwiQ09ERVwifSkmJnd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChiLHtub2RlTmFtZTpcIlBSRVwifSl9fSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPWRbYV07cmV0dXJuIGI/W2EudG9Mb3dlckNhc2UoKSxiLnRvTG93ZXJDYXNlKCldOlthLnRvTG93ZXJDYXNlKCldfWZ1bmN0aW9uIGMoYyxkLGYsZyxoLGkpe3ZhciBqPWM7cmV0dXJuIGQmJihqKz1cIjpcIitkKSxnJiYoais9XCI6XCIrZyksZVtqXXx8KGVbal09bmV3IGEuc2VsZWN0aW9uLkhUTUxBcHBsaWVyKGIoYyksZCxmLCEwLGcsaCxpKSksZVtqXX12YXIgZD17c3Ryb25nOlwiYlwiLGVtOlwiaVwiLGI6XCJzdHJvbmdcIixpOlwiZW1cIn0sZT17fTthLmNvbW1hbmRzLmZvcm1hdElubGluZT17ZXhlYzpmdW5jdGlvbihhLGIsZCxlLGYsZyxoLGksail7dmFyIGs9YS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxsPWEuc2VsZWN0aW9uLmdldE93blJhbmdlcygpO3JldHVybiBsJiYwIT1sLmxlbmd0aD8oYS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksYyhkLGUsZixnLGgsYS5lbGVtZW50KS50b2dnbGVSYW5nZShsKSxpP2p8fGEuY2xlYW5VcCgpOihrLnNldFN0YXJ0KGxbMF0uc3RhcnRDb250YWluZXIsbFswXS5zdGFydE9mZnNldCksay5zZXRFbmQobFtsLmxlbmd0aC0xXS5lbmRDb250YWluZXIsbFtsLmxlbmd0aC0xXS5lbmRPZmZzZXQpLGEuc2VsZWN0aW9uLnNldFNlbGVjdGlvbihrKSxhLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZShmdW5jdGlvbigpe2p8fGEuY2xlYW5VcCgpfSwhMCwhMCkpLHZvaWQgMCk6ITF9LGV4ZWNXaXRoVG9nZ2xlOmZ1bmN0aW9uKGIsYyxkLGUsZixnLGgpe3ZhciBpLGo9dGhpczt0aGlzLnN0YXRlKGIsYyxkLGUsZixnLGgpJiZiLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpJiYhYi5zZWxlY3Rpb24uY2FyZXRJc0xhc3RJblNlbGVjdGlvbigpJiYhYi5zZWxlY3Rpb24uY2FyZXRJc0ZpcnN0SW5TZWxlY3Rpb24oKT8oaT1qLnN0YXRlKGIsYyxkLGUsZilbMF0sYi5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmVSYW5neShmdW5jdGlvbigpe2kucGFyZW50Tm9kZTtiLnNlbGVjdGlvbi5zZWxlY3ROb2RlKGksITApLGEuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYixjLGQsZSxmLGcsaCwhMCwhMCl9KSk6dGhpcy5zdGF0ZShiLGMsZCxlLGYsZyxoKSYmIWIuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCk/Yi5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmVSYW5neShmdW5jdGlvbigpe2EuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYixjLGQsZSxmLGcsaCwhMCwhMCl9KTphLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGIsYyxkLGUsZixnLGgpfSxzdGF0ZTpmdW5jdGlvbihiLGUsZixnLGgsaSxqKXt2YXIgayxsLG09Yi5kb2Msbj1kW2ZdfHxmO3JldHVybiBhLmRvbS5oYXNFbGVtZW50V2l0aFRhZ05hbWUobSxmKXx8YS5kb20uaGFzRWxlbWVudFdpdGhUYWdOYW1lKG0sbik/ZyYmIWEuZG9tLmhhc0VsZW1lbnRXaXRoQ2xhc3NOYW1lKG0sZyk/ITE6KGs9Yi5zZWxlY3Rpb24uZ2V0T3duUmFuZ2VzKCksayYmMCE9PWsubGVuZ3RoPyhsPWMoZixnLGgsaSxqLGIuZWxlbWVudCkuaXNBcHBsaWVkVG9SYW5nZShrKSxsJiZsLmVsZW1lbnRzP2wuZWxlbWVudHM6ITEpOiExKTohMX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe2EuY29tbWFuZHMuaW5zZXJ0QmxvY2tRdW90ZT17ZXhlYzpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuc3RhdGUoYixjKSxlPWIuc2VsZWN0aW9uLmlzRW5kVG9FbmRJbk5vZGUoW1wiSDFcIixcIkgyXCIsXCJIM1wiLFwiSDRcIixcIkg1XCIsXCJINlwiLFwiUFwiXSk7Yi5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKXtpZihkKWIuY29uZmlnLnVzZUxpbmVCcmVha3MmJmEuZG9tLmxpbmVCcmVha3MoZCkuYWRkKCksYS5kb20udW53cmFwKGQpO2Vsc2UgaWYoYi5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSYmYi5zZWxlY3Rpb24uc2VsZWN0TGluZSgpLGUpe3ZhciBjPWUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYmxvY2txdW90ZVwiKTthLmRvbS5pbnNlcnQoYykuYWZ0ZXIoZSksYy5hcHBlbmRDaGlsZChlKX1lbHNlIGIuc2VsZWN0aW9uLnN1cnJvdW5kKHtub2RlTmFtZTpcImJsb2NrcXVvdGVcIn0pfSl9LHN0YXRlOmZ1bmN0aW9uKGIpe3ZhciBjPWIuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpLGQ9YS5kb20uZ2V0UGFyZW50RWxlbWVudChjLHtub2RlTmFtZTpcIkJMT0NLUVVPVEVcIn0sITEsYi5lbGVtZW50KTtyZXR1cm4gZD9kOiExfX19KHd5c2lodG1sNSksd3lzaWh0bWw1LmNvbW1hbmRzLmluc2VydEhUTUw9e2V4ZWM6ZnVuY3Rpb24oYSxiLGMpe2EuY29tbWFuZHMuc3VwcG9ydChiKT9hLmRvYy5leGVjQ29tbWFuZChiLCExLGMpOmEuc2VsZWN0aW9uLmluc2VydEhUTUwoYyl9LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxmdW5jdGlvbihhKXt2YXIgYj1cIklNR1wiO2EuY29tbWFuZHMuaW5zZXJ0SW1hZ2U9e2V4ZWM6ZnVuY3Rpb24oYyxkLGUpe3ZhciBmLGcsaCxpLGo7aWYoZT1cIm9iamVjdFwiPT10eXBlb2YgZT9lOntzcmM6ZX0sZj1jLmRvYyxnPXRoaXMuc3RhdGUoYyksZylyZXR1cm4gYy5zZWxlY3Rpb24uc2V0QmVmb3JlKGcpLGk9Zy5wYXJlbnROb2RlLGkucmVtb3ZlQ2hpbGQoZyksYS5kb20ucmVtb3ZlRW1wdHlUZXh0Tm9kZXMoaSksXCJBXCIhPT1pLm5vZGVOYW1lfHxpLmZpcnN0Q2hpbGR8fChjLnNlbGVjdGlvbi5zZXRBZnRlcihpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpLGEucXVpcmtzLnJlZHJhdyhjLmVsZW1lbnQpLHZvaWQgMDtnPWYuY3JlYXRlRWxlbWVudChiKTtmb3IoaiBpbiBlKWcuc2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCI9PT1qP1wiY2xhc3NcIjpqLGVbal0pO2Muc2VsZWN0aW9uLmluc2VydE5vZGUoZyksYS5icm93c2VyLmhhc1Byb2JsZW1zU2V0dGluZ0NhcmV0QWZ0ZXJJbWcoKT8oaD1mLmNyZWF0ZVRleHROb2RlKGEuSU5WSVNJQkxFX1NQQUNFKSxjLnNlbGVjdGlvbi5pbnNlcnROb2RlKGgpLGMuc2VsZWN0aW9uLnNldEFmdGVyKGgpKTpjLnNlbGVjdGlvbi5zZXRBZnRlcihnKX0sc3RhdGU6ZnVuY3Rpb24oYyl7dmFyIGQsZSxmLGc9Yy5kb2M7cmV0dXJuIGEuZG9tLmhhc0VsZW1lbnRXaXRoVGFnTmFtZShnLGIpPyhkPWMuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpLGQ/ZC5ub2RlTmFtZT09PWI/ZDpkLm5vZGVUeXBlIT09YS5FTEVNRU5UX05PREU/ITE6KGU9Yy5zZWxlY3Rpb24uZ2V0VGV4dCgpLGU9YS5sYW5nLnN0cmluZyhlKS50cmltKCksZT8hMTooZj1jLnNlbGVjdGlvbi5nZXROb2RlcyhhLkVMRU1FTlRfTk9ERSxmdW5jdGlvbihhKXtyZXR1cm5cIklNR1wiPT09YS5ub2RlTmFtZX0pLDEhPT1mLmxlbmd0aD8hMTpmWzBdKSk6ITEpOiExfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9XCI8YnI+XCIrKGEuYnJvd3Nlci5uZWVkc1NwYWNlQWZ0ZXJMaW5lQnJlYWsoKT9cIiBcIjpcIlwiKTthLmNvbW1hbmRzLmluc2VydExpbmVCcmVhaz17ZXhlYzpmdW5jdGlvbihjLGQpe2MuY29tbWFuZHMuc3VwcG9ydChkKT8oYy5kb2MuZXhlY0NvbW1hbmQoZCwhMSxudWxsKSxhLmJyb3dzZXIuYXV0b1Njcm9sbHNUb0NhcmV0KCl8fGMuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KCkpOmMuY29tbWFuZHMuZXhlYyhcImluc2VydEhUTUxcIixiKX0sc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19fSh3eXNpaHRtbDUpLHd5c2lodG1sNS5jb21tYW5kcy5pbnNlcnRPcmRlcmVkTGlzdD17ZXhlYzpmdW5jdGlvbihhLGIpe3d5c2lodG1sNS5jb21tYW5kcy5pbnNlcnRMaXN0LmV4ZWMoYSxiLFwiT0xcIil9LHN0YXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5pbnNlcnRMaXN0LnN0YXRlKGEsYixcIk9MXCIpfX0sd3lzaWh0bWw1LmNvbW1hbmRzLmluc2VydFVub3JkZXJlZExpc3Q9e2V4ZWM6ZnVuY3Rpb24oYSxiKXt3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0TGlzdC5leGVjKGEsYixcIlVMXCIpfSxzdGF0ZTpmdW5jdGlvbihhLGIpe3JldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0TGlzdC5zdGF0ZShhLGIsXCJVTFwiKX19LHd5c2lodG1sNS5jb21tYW5kcy5pbnNlcnRMaXN0PWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGEsYil7aWYoYSYmYS5ub2RlTmFtZSl7XCJzdHJpbmdcIj09dHlwZW9mIGImJihiPVtiXSk7Zm9yKHZhciBjPWIubGVuZ3RoO2MtLTspaWYoYS5ub2RlTmFtZT09PWJbY10pcmV0dXJuITB9cmV0dXJuITF9LGM9ZnVuY3Rpb24oYyxkLGUpe3ZhciBmLGcsaD17ZWw6bnVsbCxvdGhlcjohMX07cmV0dXJuIGMmJihmPWEuZG9tLmdldFBhcmVudEVsZW1lbnQoYyx7bm9kZU5hbWU6XCJMSVwifSksZz1cIlVMXCI9PT1kP1wiT0xcIjpcIlVMXCIsYihjLGQpP2guZWw9YzpiKGMsZyk/aD17ZWw6YyxvdGhlcjohMH06ZiYmKGIoZi5wYXJlbnROb2RlLGQpP2guZWw9Zi5wYXJlbnROb2RlOmIoZi5wYXJlbnROb2RlLGcpJiYoaD17ZWw6Zi5wYXJlbnROb2RlLG90aGVyOiEwfSkpKSxoLmVsJiYhZS5lbGVtZW50LmNvbnRhaW5zKGguZWwpJiYoaC5lbD1udWxsKSxofSxkPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxnPVwiVUxcIj09PWM/XCJPTFwiOlwiVUxcIjtkLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZShmdW5jdGlvbigpe3ZhciBoLGksaj1mKGcsZCk7aWYoai5sZW5ndGgpZm9yKGg9ai5sZW5ndGg7aC0tOylhLmRvbS5yZW5hbWVFbGVtZW50KGpbaF0sYy50b0xvd2VyQ2FzZSgpKTtlbHNle2ZvcihlPWYoW1wiT0xcIixcIlVMXCJdLGQpLGk9ZS5sZW5ndGg7aS0tOylhLmRvbS5yZXNvbHZlTGlzdChlW2ldLGQuY29uZmlnLnVzZUxpbmVCcmVha3MpO2EuZG9tLnJlc29sdmVMaXN0KGIsZC5jb25maWcudXNlTGluZUJyZWFrcyl9fSl9LGU9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPVwiVUxcIj09PWM/XCJPTFwiOlwiVUxcIjtkLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZShmdW5jdGlvbigpe3ZhciBnLGg9W2JdLmNvbmNhdChmKGUsZCkpO2ZvcihnPWgubGVuZ3RoO2ctLTspYS5kb20ucmVuYW1lRWxlbWVudChoW2ddLGMudG9Mb3dlckNhc2UoKSl9KX0sZj1mdW5jdGlvbihhLGMpe3ZhciBkLGU9Yy5zZWxlY3Rpb24uZ2V0T3duUmFuZ2VzKCksZj1bXTtmb3IoZD1lLmxlbmd0aDtkLS07KWY9Zi5jb25jYXQoZVtkXS5nZXROb2RlcyhbMV0sZnVuY3Rpb24oYyl7cmV0dXJuIGIoYyxhKX0pKTtyZXR1cm4gZn0sZz1mdW5jdGlvbihiLGMpe2Muc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlUmFuZ3koZnVuY3Rpb24oKXt2YXIgZCxlLGY9XCJfd3lzaWh0bWw1LXRlbXAtXCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZz1jLnNlbGVjdGlvbi5kZWJsb2NrQW5kU3Vycm91bmQoe25vZGVOYW1lOlwiZGl2XCIsY2xhc3NOYW1lOmZ9KSxoPS9cXHVGRUZGL2c7Zy5pbm5lckhUTUw9Zy5pbm5lckhUTUwucmVwbGFjZShoLFwiXCIpLGcmJihkPWEubGFuZy5hcnJheShbXCJcIixcIjxicj5cIixhLklOVklTSUJMRV9TUEFDRV0pLmNvbnRhaW5zKGcuaW5uZXJIVE1MKSxlPWEuZG9tLmNvbnZlcnRUb0xpc3QoZyxiLnRvTG93ZXJDYXNlKCksYy5wYXJlbnQuY29uZmlnLnVuZWRpdGFibGVDb250YWluZXJDbGFzc25hbWUpLGQmJmMuc2VsZWN0aW9uLnNlbGVjdE5vZGUoZS5xdWVyeVNlbGVjdG9yKFwibGlcIiksITApKX0pfTtyZXR1cm57ZXhlYzpmdW5jdGlvbihhLGIsZil7dmFyIGg9YS5kb2MsaT1cIk9MXCI9PT1mP1wiaW5zZXJ0T3JkZXJlZExpc3RcIjpcImluc2VydFVub3JkZXJlZExpc3RcIixqPWEuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpLGs9YyhqLGYsYSk7ay5lbD9rLm90aGVyP2Uoay5lbCxmLGEpOmQoay5lbCxmLGEpOmEuY29tbWFuZHMuc3VwcG9ydChpKT9oLmV4ZWNDb21tYW5kKGksITEsbnVsbCk6ZyhmLGEpfSxzdGF0ZTpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksZj1jKGUsZCxhKTtyZXR1cm4gZi5lbCYmIWYub3RoZXI/Zi5lbDohMX19fSh3eXNpaHRtbDUpLHd5c2lodG1sNS5jb21tYW5kcy5pdGFsaWM9e2V4ZWM6ZnVuY3Rpb24oYSxiKXt3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWNXaXRoVG9nZ2xlKGEsYixcImlcIil9LHN0YXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoYSxiLFwiaVwiKX19LGZ1bmN0aW9uKGEpe3ZhciBiPVwid3lzaXd5Zy10ZXh0LWFsaWduLWNlbnRlclwiLGM9L3d5c2l3eWctdGV4dC1hbGlnbi1bMC05YS16XSsvZzthLmNvbW1hbmRzLmp1c3RpZnlDZW50ZXI9e2V4ZWM6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhkLFwiZm9ybWF0QmxvY2tcIixudWxsLGIsYyl9LHN0YXRlOmZ1bmN0aW9uKGQpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdEJsb2NrLnN0YXRlKGQsXCJmb3JtYXRCbG9ja1wiLG51bGwsYixjKX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPVwid3lzaXd5Zy10ZXh0LWFsaWduLWxlZnRcIixjPS93eXNpd3lnLXRleHQtYWxpZ24tWzAtOWEtel0rL2c7YS5jb21tYW5kcy5qdXN0aWZ5TGVmdD17ZXhlYzpmdW5jdGlvbihkKXtyZXR1cm4gYS5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGQsXCJmb3JtYXRCbG9ja1wiLG51bGwsYixjKX0sc3RhdGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suc3RhdGUoZCxcImZvcm1hdEJsb2NrXCIsbnVsbCxiLGMpfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9XCJ3eXNpd3lnLXRleHQtYWxpZ24tcmlnaHRcIixjPS93eXNpd3lnLXRleHQtYWxpZ24tWzAtOWEtel0rL2c7YS5jb21tYW5kcy5qdXN0aWZ5UmlnaHQ9e2V4ZWM6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhkLFwiZm9ybWF0QmxvY2tcIixudWxsLGIsYyl9LHN0YXRlOmZ1bmN0aW9uKGQpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdEJsb2NrLnN0YXRlKGQsXCJmb3JtYXRCbG9ja1wiLG51bGwsYixjKX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPVwid3lzaXd5Zy10ZXh0LWFsaWduLWp1c3RpZnlcIixjPS93eXNpd3lnLXRleHQtYWxpZ24tWzAtOWEtel0rL2c7YS5jb21tYW5kcy5qdXN0aWZ5RnVsbD17ZXhlYzpmdW5jdGlvbihkKXtyZXR1cm4gYS5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGQsXCJmb3JtYXRCbG9ja1wiLG51bGwsYixjKX0sc3RhdGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suc3RhdGUoZCxcImZvcm1hdEJsb2NrXCIsbnVsbCxiLGMpfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9XCJ0ZXh0LWFsaWduOiByaWdodDtcIixjPS8oXFxzfF4pdGV4dC1hbGlnblxccyo6XFxzKlteO1xcc10rOz8vZ2k7YS5jb21tYW5kcy5hbGlnblJpZ2h0U3R5bGU9e2V4ZWM6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhkLFwiZm9ybWF0QmxvY2tcIixudWxsLG51bGwsbnVsbCxiLGMpfSxzdGF0ZTpmdW5jdGlvbihkKXtyZXR1cm4gYS5jb21tYW5kcy5mb3JtYXRCbG9jay5zdGF0ZShkLFwiZm9ybWF0QmxvY2tcIixudWxsLG51bGwsbnVsbCxiLGMpfX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiLGM9LyhcXHN8Xil0ZXh0LWFsaWduXFxzKjpcXHMqW147XFxzXSs7Py9naTthLmNvbW1hbmRzLmFsaWduTGVmdFN0eWxlPXtleGVjOmZ1bmN0aW9uKGQpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdEJsb2NrLmV4ZWMoZCxcImZvcm1hdEJsb2NrXCIsbnVsbCxudWxsLG51bGwsYixjKX0sc3RhdGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suc3RhdGUoZCxcImZvcm1hdEJsb2NrXCIsbnVsbCxudWxsLG51bGwsYixjKX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPVwidGV4dC1hbGlnbjogY2VudGVyO1wiLGM9LyhcXHN8Xil0ZXh0LWFsaWduXFxzKjpcXHMqW147XFxzXSs7Py9naTthLmNvbW1hbmRzLmFsaWduQ2VudGVyU3R5bGU9e2V4ZWM6ZnVuY3Rpb24oZCl7cmV0dXJuIGEuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhkLFwiZm9ybWF0QmxvY2tcIixudWxsLG51bGwsbnVsbCxiLGMpfSxzdGF0ZTpmdW5jdGlvbihkKXtyZXR1cm4gYS5jb21tYW5kcy5mb3JtYXRCbG9jay5zdGF0ZShkLFwiZm9ybWF0QmxvY2tcIixudWxsLG51bGwsbnVsbCxiLGMpfX19KHd5c2lodG1sNSksd3lzaWh0bWw1LmNvbW1hbmRzLnJlZG89e2V4ZWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudW5kb01hbmFnZXIucmVkbygpfSxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiExfX0sd3lzaWh0bWw1LmNvbW1hbmRzLnVuZGVybGluZT17ZXhlYzpmdW5jdGlvbihhLGIpe3d5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuZXhlY1dpdGhUb2dnbGUoYSxiLFwidVwiKX0sc3RhdGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShhLGIsXCJ1XCIpfX0sd3lzaWh0bWw1LmNvbW1hbmRzLnVuZG89e2V4ZWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudW5kb01hbmFnZXIudW5kbygpfSxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiExfX0sd3lzaWh0bWw1LmNvbW1hbmRzLmNyZWF0ZVRhYmxlPXtleGVjOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY7aWYoYyYmYy5jb2xzJiZjLnJvd3MmJnBhcnNlSW50KGMuY29scywxMCk+MCYmcGFyc2VJbnQoYy5yb3dzLDEwKT4wKXtmb3IoZj1jLnRhYmxlU3R5bGU/Jzx0YWJsZSBzdHlsZT1cIicrYy50YWJsZVN0eWxlKydcIj4nOlwiPHRhYmxlPlwiLGYrPVwiPHRib2R5PlwiLGU9MDtlPGMucm93cztlKyspe2ZvcihmKz1cIjx0cj5cIixkPTA7ZDxjLmNvbHM7ZCsrKWYrPVwiPHRkPiZuYnNwOzwvdGQ+XCI7Zis9XCI8L3RyPlwifWYrPVwiPC90Ym9keT48L3RhYmxlPlwiLGEuY29tbWFuZHMuZXhlYyhcImluc2VydEhUTUxcIixmKX19LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx3eXNpaHRtbDUuY29tbWFuZHMubWVyZ2VUYWJsZUNlbGxzPXtleGVjOmZ1bmN0aW9uKGEsYil7YS50YWJsZVNlbGVjdGlvbiYmYS50YWJsZVNlbGVjdGlvbi5zdGFydCYmYS50YWJsZVNlbGVjdGlvbi5lbmQmJih0aGlzLnN0YXRlKGEsYik/d3lzaWh0bWw1LmRvbS50YWJsZS51bm1lcmdlQ2VsbChhLnRhYmxlU2VsZWN0aW9uLnN0YXJ0KTp3eXNpaHRtbDUuZG9tLnRhYmxlLm1lcmdlQ2VsbHNCZXR3ZWVuKGEudGFibGVTZWxlY3Rpb24uc3RhcnQsYS50YWJsZVNlbGVjdGlvbi5lbmQpKX0sc3RhdGU6ZnVuY3Rpb24oYSl7aWYoYS50YWJsZVNlbGVjdGlvbil7dmFyIGI9YS50YWJsZVNlbGVjdGlvbi5zdGFydCxjPWEudGFibGVTZWxlY3Rpb24uZW5kO2lmKGImJmMmJmI9PWMmJih3eXNpaHRtbDUuZG9tLmdldEF0dHJpYnV0ZShiLFwiY29sc3BhblwiKSYmcGFyc2VJbnQod3lzaWh0bWw1LmRvbS5nZXRBdHRyaWJ1dGUoYixcImNvbHNwYW5cIiksMTApPjF8fHd5c2lodG1sNS5kb20uZ2V0QXR0cmlidXRlKGIsXCJyb3dzcGFuXCIpJiZwYXJzZUludCh3eXNpaHRtbDUuZG9tLmdldEF0dHJpYnV0ZShiLFwicm93c3BhblwiKSwxMCk+MSkpcmV0dXJuW2JdfXJldHVybiExfX0sd3lzaWh0bWw1LmNvbW1hbmRzLmFkZFRhYmxlQ2VsbHM9e2V4ZWM6ZnVuY3Rpb24oYSxiLGMpe2lmKGEudGFibGVTZWxlY3Rpb24mJmEudGFibGVTZWxlY3Rpb24uc3RhcnQmJmEudGFibGVTZWxlY3Rpb24uZW5kKXt2YXIgZD13eXNpaHRtbDUuZG9tLnRhYmxlLm9yZGVyU2VsZWN0aW9uRW5kcyhhLnRhYmxlU2VsZWN0aW9uLnN0YXJ0LGEudGFibGVTZWxlY3Rpb24uZW5kKTtcImJlZm9yZVwiPT1jfHxcImFib3ZlXCI9PWM/d3lzaWh0bWw1LmRvbS50YWJsZS5hZGRDZWxscyhkLnN0YXJ0LGMpOihcImFmdGVyXCI9PWN8fFwiYmVsb3dcIj09YykmJnd5c2lodG1sNS5kb20udGFibGUuYWRkQ2VsbHMoZC5lbmQsYyksc2V0VGltZW91dChmdW5jdGlvbigpe2EudGFibGVTZWxlY3Rpb24uc2VsZWN0KGQuc3RhcnQsZC5lbmQpfSwwKX19LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx3eXNpaHRtbDUuY29tbWFuZHMuZGVsZXRlVGFibGVDZWxscz17ZXhlYzpmdW5jdGlvbihhLGIsYyl7aWYoYS50YWJsZVNlbGVjdGlvbiYmYS50YWJsZVNlbGVjdGlvbi5zdGFydCYmYS50YWJsZVNlbGVjdGlvbi5lbmQpe3ZhciBkLGU9d3lzaWh0bWw1LmRvbS50YWJsZS5vcmRlclNlbGVjdGlvbkVuZHMoYS50YWJsZVNlbGVjdGlvbi5zdGFydCxhLnRhYmxlU2VsZWN0aW9uLmVuZCksZj13eXNpaHRtbDUuZG9tLnRhYmxlLmluZGV4T2YoZS5zdGFydCksZz1hLnRhYmxlU2VsZWN0aW9uLnRhYmxlO3d5c2lodG1sNS5kb20udGFibGUucmVtb3ZlQ2VsbHMoZS5zdGFydCxjKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZD13eXNpaHRtbDUuZG9tLnRhYmxlLmZpbmRDZWxsKGcsZiksZHx8KFwicm93XCI9PWMmJihkPXd5c2lodG1sNS5kb20udGFibGUuZmluZENlbGwoZyx7cm93OmYucm93LTEsY29sOmYuY29sfSkpLFwiY29sdW1uXCI9PWMmJihkPXd5c2lodG1sNS5kb20udGFibGUuZmluZENlbGwoZyx7cm93OmYucm93LGNvbDpmLmNvbC0xfSkpKSxkJiZhLnRhYmxlU2VsZWN0aW9uLnNlbGVjdChkLGQpfSwwKX19LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx3eXNpaHRtbDUuY29tbWFuZHMuaW5kZW50TGlzdD17ZXhlYzpmdW5jdGlvbihhKXt2YXIgYj1hLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25QYXJlbnRzQnlUYWcoXCJMSVwiKTtyZXR1cm4gYj90aGlzLnRyeVRvUHVzaExpTGV2ZWwoYixhLnNlbGVjdGlvbik6ITF9LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LHRyeVRvUHVzaExpTGV2ZWw6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGg9ITE7cmV0dXJuIGIuZXhlY3V0ZUFuZFJlc3RvcmVSYW5neShmdW5jdGlvbigpe2Zvcih2YXIgYj1hLmxlbmd0aDtiLS07KWY9YVtiXSxjPVwiT0xcIj09PWYucGFyZW50Tm9kZS5ub2RlTmFtZT9cIk9MXCI6XCJVTFwiLGQ9Zi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYyksZT13eXNpaHRtbDUuZG9tLmRvbU5vZGUoZikucHJldih7bm9kZVR5cGVzOlt3eXNpaHRtbDUuRUxFTUVOVF9OT0RFXX0pLGc9ZT9lLnF1ZXJ5U2VsZWN0b3IoXCJ1bCwgb2xcIik6bnVsbCxlJiYoZz9nLmFwcGVuZENoaWxkKGYpOihkLmFwcGVuZENoaWxkKGYpLGUuYXBwZW5kQ2hpbGQoZCkpLGg9ITApfSksaH19LHd5c2lodG1sNS5jb21tYW5kcy5vdXRkZW50TGlzdD17ZXhlYzpmdW5jdGlvbihhKXt2YXIgYj1hLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25QYXJlbnRzQnlUYWcoXCJMSVwiKTtyZXR1cm4gYj90aGlzLnRyeVRvUHVsbExpTGV2ZWwoYixhKTohMX0sc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdHJ5VG9QdWxsTGlMZXZlbDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaD0hMSxpPXRoaXM7cmV0dXJuIGIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlUmFuZ3koZnVuY3Rpb24oKXt2YXIgaixrO2ZvcihqPWEubGVuZ3RoO2otLTspaWYoZj1hW2pdLGYucGFyZW50Tm9kZSYmKGM9Zi5wYXJlbnROb2RlLFwiT0xcIj09PWMudGFnTmFtZXx8XCJVTFwiPT09Yy50YWdOYW1lKSl7aWYoaD0hMCxkPXd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChjLnBhcmVudE5vZGUse25vZGVOYW1lOltcIk9MXCIsXCJVTFwiXX0sITEsYi5lbGVtZW50KSxlPXd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChjLnBhcmVudE5vZGUse25vZGVOYW1lOltcIkxJXCJdfSwhMSxiLmVsZW1lbnQpLGQmJmUpZi5uZXh0U2libGluZyYmKGc9aS5nZXRBZnRlckxpc3QoYyxmKSxmLmFwcGVuZENoaWxkKGcpKSxkLmluc2VydEJlZm9yZShmLGUubmV4dFNpYmxpbmcpO2Vsc2V7Zm9yKGYubmV4dFNpYmxpbmcmJihnPWkuZ2V0QWZ0ZXJMaXN0KGMsZiksZi5hcHBlbmRDaGlsZChnKSksaz1mLmNoaWxkTm9kZXMubGVuZ3RoO2stLTspYy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmLmNoaWxkTm9kZXNba10sYy5uZXh0U2libGluZyk7Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIiksYy5uZXh0U2libGluZyksZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfTA9PT1jLmNoaWxkTm9kZXMubGVuZ3RoJiZjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9fSksaH0sZ2V0QWZ0ZXJMaXN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWEubm9kZU5hbWUsZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO2IubmV4dFNpYmxpbmc7KWQuYXBwZW5kQ2hpbGQoYi5uZXh0U2libGluZyk7cmV0dXJuIGR9fSxmdW5jdGlvbihhKXt2YXIgYj05MCxjPTg5LGQ9OCxlPTQ2LGY9MjUsZz1cImRhdGEtd3lzaWh0bWw1LXNlbGVjdGlvbi1ub2RlXCIsaD1cImRhdGEtd3lzaWh0bWw1LXNlbGVjdGlvbi1vZmZzZXRcIixpPSgnPHNwYW4gaWQ9XCJfd3lzaWh0bWw1LXVuZG9cIiBjbGFzcz1cIl93eXNpaHRtbDUtdGVtcFwiPicrYS5JTlZJU0lCTEVfU1BBQ0UrXCI8L3NwYW4+XCIsJzxzcGFuIGlkPVwiX3d5c2lodG1sNS1yZWRvXCIgY2xhc3M9XCJfd3lzaWh0bWw1LXRlbXBcIj4nK2EuSU5WSVNJQkxFX1NQQUNFK1wiPC9zcGFuPlwiLGEuZG9tKTthLlVuZG9NYW5hZ2VyPWEubGFuZy5EaXNwYXRjaGVyLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5lZGl0b3I9YSx0aGlzLmNvbXBvc2VyPWEuY29tcG9zZXIsdGhpcy5lbGVtZW50PXRoaXMuY29tcG9zZXIuZWxlbWVudCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5oaXN0b3J5U3RyPVtdLHRoaXMuaGlzdG9yeURvbT1bXSx0aGlzLnRyYW5zYWN0KCksdGhpcy5fb2JzZXJ2ZSgpfSxfb2JzZXJ2ZTpmdW5jdGlvbigpe3t2YXIgYSxmPXRoaXM7dGhpcy5jb21wb3Nlci5zYW5kYm94LmdldERvY3VtZW50KCl9aS5vYnNlcnZlKHRoaXMuZWxlbWVudCxcImtleWRvd25cIixmdW5jdGlvbihhKXtpZighYS5hbHRLZXkmJihhLmN0cmxLZXl8fGEubWV0YUtleSkpe3ZhciBkPWEua2V5Q29kZSxlPWQ9PT1iJiYhYS5zaGlmdEtleSxnPWQ9PT1iJiZhLnNoaWZ0S2V5fHxkPT09YztlPyhmLnVuZG8oKSxhLnByZXZlbnREZWZhdWx0KCkpOmcmJihmLnJlZG8oKSxhLnByZXZlbnREZWZhdWx0KCkpfX0pLGkub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsXCJrZXlkb3duXCIsZnVuY3Rpb24oYil7dmFyIGM9Yi5rZXlDb2RlO2MhPT1hJiYoYT1jLChjPT09ZHx8Yz09PWUpJiZmLnRyYW5zYWN0KCkpfSksdGhpcy5lZGl0b3Iub24oXCJuZXd3b3JkOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtmLnRyYW5zYWN0KCl9KS5vbihcImJlZm9yZWNvbW1hbmQ6Y29tcG9zZXJcIixmdW5jdGlvbigpe2YudHJhbnNhY3QoKX0pfSx0cmFuc2FjdDpmdW5jdGlvbigpe3ZhciBiLGMsZCxlLGksaixrLGw9dGhpcy5oaXN0b3J5U3RyW3RoaXMucG9zaXRpb24tMV0sbT10aGlzLmNvbXBvc2VyLmdldFZhbHVlKCExLCExKSxuPXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aD4wJiZ0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0PjA7bSE9PWwmJihqPXRoaXMuaGlzdG9yeVN0ci5sZW5ndGg9dGhpcy5oaXN0b3J5RG9tLmxlbmd0aD10aGlzLnBvc2l0aW9uLGo+ZiYmKHRoaXMuaGlzdG9yeVN0ci5zaGlmdCgpLHRoaXMuaGlzdG9yeURvbS5zaGlmdCgpLHRoaXMucG9zaXRpb24tLSksdGhpcy5wb3NpdGlvbisrLG4mJihiPXRoaXMuY29tcG9zZXIuc2VsZWN0aW9uLmdldFJhbmdlKCksYz1iJiZiLnN0YXJ0Q29udGFpbmVyP2Iuc3RhcnRDb250YWluZXI6dGhpcy5lbGVtZW50LGQ9YiYmYi5zdGFydE9mZnNldD9iLnN0YXJ0T2Zmc2V0OjAsYy5ub2RlVHlwZT09PWEuRUxFTUVOVF9OT0RFP2U9YzooZT1jLnBhcmVudE5vZGUsaT10aGlzLmdldENoaWxkTm9kZUluZGV4KGUsYykpLGUuc2V0QXR0cmlidXRlKGgsZCksdm9pZCAwIT09aSYmZS5zZXRBdHRyaWJ1dGUoZyxpKSksaz10aGlzLmVsZW1lbnQuY2xvbmVOb2RlKCEhbSksdGhpcy5oaXN0b3J5RG9tLnB1c2goayksdGhpcy5oaXN0b3J5U3RyLnB1c2gobSksZSYmKGUucmVtb3ZlQXR0cmlidXRlKGgpLGUucmVtb3ZlQXR0cmlidXRlKGcpKSl9LHVuZG86ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0KCksdGhpcy51bmRvUG9zc2libGUoKSYmKHRoaXMuc2V0KHRoaXMuaGlzdG9yeURvbVstLXRoaXMucG9zaXRpb24tMV0pLHRoaXMuZWRpdG9yLmZpcmUoXCJ1bmRvOmNvbXBvc2VyXCIpKX0scmVkbzpmdW5jdGlvbigpe3RoaXMucmVkb1Bvc3NpYmxlKCkmJih0aGlzLnNldCh0aGlzLmhpc3RvcnlEb21bKyt0aGlzLnBvc2l0aW9uLTFdKSx0aGlzLmVkaXRvci5maXJlKFwicmVkbzpjb21wb3NlclwiKSl9LHVuZG9Qb3NzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uPjF9LHJlZG9Qb3NzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uPHRoaXMuaGlzdG9yeVN0ci5sZW5ndGh9LHNldDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGk7Zm9yKHRoaXMuZWxlbWVudC5pbm5lckhUTUw9XCJcIixiPTAsYz1hLmNoaWxkTm9kZXMsZD1hLmNoaWxkTm9kZXMubGVuZ3RoO2Q+YjtiKyspdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNbYl0uY2xvbmVOb2RlKCEwKSk7YS5oYXNBdHRyaWJ1dGUoaCk/KGU9YS5nZXRBdHRyaWJ1dGUoaCksaT1hLmdldEF0dHJpYnV0ZShnKSxmPXRoaXMuZWxlbWVudCk6KGY9dGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbXCIraCtcIl1cIil8fHRoaXMuZWxlbWVudCxlPWYuZ2V0QXR0cmlidXRlKGgpLGk9Zi5nZXRBdHRyaWJ1dGUoZyksZi5yZW1vdmVBdHRyaWJ1dGUoaCksZi5yZW1vdmVBdHRyaWJ1dGUoZykpLG51bGwhPT1pJiYoZj10aGlzLmdldENoaWxkTm9kZUJ5SW5kZXgoZiwraSkpLHRoaXMuY29tcG9zZXIuc2VsZWN0aW9uLnNldChmLGUpfSxnZXRDaGlsZE5vZGVJbmRleDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5jaGlsZE5vZGVzLGU9ZC5sZW5ndGg7ZT5jO2MrKylpZihkW2NdPT09YilyZXR1cm4gY30sZ2V0Q2hpbGROb2RlQnlJbmRleDpmdW5jdGlvbihhLGIpe3JldHVybiBhLmNoaWxkTm9kZXNbYl19fSl9KHd5c2lodG1sNSksd3lzaWh0bWw1LnZpZXdzLlZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnBhcmVudD1hLHRoaXMuZWxlbWVudD1iLHRoaXMuY29uZmlnPWMsdGhpcy5jb25maWcubm9UZXh0YXJlYXx8dGhpcy5fb2JzZXJ2ZVZpZXdDaGFuZ2UoKX0sX29ic2VydmVWaWV3Q2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLnBhcmVudC5vbihcImJlZm9yZWxvYWRcIixmdW5jdGlvbigpe2EucGFyZW50Lm9uKFwiY2hhbmdlX3ZpZXdcIixmdW5jdGlvbihiKXtiPT09YS5uYW1lPyhhLnBhcmVudC5jdXJyZW50Vmlldz1hLGEuc2hvdygpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmZvY3VzKCl9LDApKTphLmhpZGUoKX0pfSl9LGZvY3VzOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIjpmb2N1c1wiKSE9PXRoaXMuZWxlbWVudCl0cnl7dGhpcy5lbGVtZW50LmZvY3VzKCl9Y2F0Y2goYSl7fX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PVwibm9uZVwifSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9XCJcIn0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiZGlzYWJsZWRcIil9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKX19KSxmdW5jdGlvbihhKXt2YXIgYj1hLmRvbSxjPWEuYnJvd3NlcjthLnZpZXdzLkNvbXBvc2VyPWEudmlld3MuVmlldy5leHRlbmQoe25hbWU6XCJjb21wb3NlclwiLENBUkVUX0hBQ0s6XCI8YnI+XCIsY29uc3RydWN0b3I6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYmFzZShhLGIsYyksdGhpcy5jb25maWcubm9UZXh0YXJlYT90aGlzLmVkaXRhYmxlQXJlYT1iOnRoaXMudGV4dGFyZWE9dGhpcy5wYXJlbnQudGV4dGFyZWEsdGhpcy5jb25maWcuY29udGVudEVkaXRhYmxlTW9kZT90aGlzLl9pbml0Q29udGVudEVkaXRhYmxlQXJlYSgpOnRoaXMuX2luaXRTYW5kYm94KCl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmlubmVySFRNTD1jLmRpc3BsYXlzQ2FyZXRJbkVtcHR5Q29udGVudEVkaXRhYmxlQ29ycmVjdGx5KCk/XCJcIjp0aGlzLkNBUkVUX0hBQ0t9LGdldFZhbHVlOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5pc0VtcHR5KCk/XCJcIjphLnF1aXJrcy5nZXRDb3JyZWN0SW5uZXJIVE1MKHRoaXMuZWxlbWVudCk7cmV0dXJuIGIhPT0hMSYmKGQ9dGhpcy5wYXJlbnQucGFyc2UoZCxjPT09ITE/ITE6ITApKSxkfSxzZXRWYWx1ZTpmdW5jdGlvbihhLGIpe2ImJihhPXRoaXMucGFyZW50LnBhcnNlKGEpKTt0cnl7dGhpcy5lbGVtZW50LmlubmVySFRNTD1hfWNhdGNoKGMpe3RoaXMuZWxlbWVudC5pbm5lclRleHQ9YX19LGNsZWFuVXA6ZnVuY3Rpb24oKXt0aGlzLnBhcmVudC5wYXJzZSh0aGlzLmVsZW1lbnQpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5lZGl0YWJsZUFyZWEuc3R5bGUuZGlzcGxheT10aGlzLl9kaXNwbGF5U3R5bGV8fFwiXCIsdGhpcy5jb25maWcubm9UZXh0YXJlYXx8dGhpcy50ZXh0YXJlYS5lbGVtZW50LmRpc2FibGVkfHwodGhpcy5kaXNhYmxlKCksdGhpcy5lbmFibGUoKSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwbGF5U3R5bGU9Yi5nZXRTdHlsZShcImRpc3BsYXlcIikuZnJvbSh0aGlzLmVkaXRhYmxlQXJlYSksXCJub25lXCI9PT10aGlzLl9kaXNwbGF5U3R5bGUmJih0aGlzLl9kaXNwbGF5U3R5bGU9bnVsbCksdGhpcy5lZGl0YWJsZUFyZWEuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMucGFyZW50LmZpcmUoXCJkaXNhYmxlOmNvbXBvc2VyXCIpLHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJjb250ZW50RWRpdGFibGVcIil9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMucGFyZW50LmZpcmUoXCJlbmFibGU6Y29tcG9zZXJcIiksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImNvbnRlbnRFZGl0YWJsZVwiLFwidHJ1ZVwiKX0sZm9jdXM6ZnVuY3Rpb24oYil7YS5icm93c2VyLmRvZXNBc3luY0ZvY3VzKCkmJnRoaXMuaGFzUGxhY2Vob2xkZXJTZXQoKSYmdGhpcy5jbGVhcigpLHRoaXMuYmFzZSgpO3ZhciBjPXRoaXMuZWxlbWVudC5sYXN0Q2hpbGQ7YiYmYyYmdGhpcy5zZWxlY3Rpb24mJihcIkJSXCI9PT1jLm5vZGVOYW1lP3RoaXMuc2VsZWN0aW9uLnNldEJlZm9yZSh0aGlzLmVsZW1lbnQubGFzdENoaWxkKTp0aGlzLnNlbGVjdGlvbi5zZXRBZnRlcih0aGlzLmVsZW1lbnQubGFzdENoaWxkKSl9LGdldFRleHRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGIuZ2V0VGV4dENvbnRlbnQodGhpcy5lbGVtZW50KX0saGFzUGxhY2Vob2xkZXJTZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUZXh0Q29udGVudCgpPT0odGhpcy5jb25maWcubm9UZXh0YXJlYT90aGlzLmVkaXRhYmxlQXJlYS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyXCIpOnRoaXMudGV4dGFyZWEuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSkmJnRoaXMucGxhY2Vob2xkZXJTZXR9LGlzRW1wdHk6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW1lbnQuaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCk7cmV0dXJuL14oXFxzfDxicj58PFxcL2JyPnw8cD58PFxcL3A+KSokL2kudGVzdChhKXx8XCJcIj09PWF8fFwiPGJyPlwiPT09YXx8XCI8cD48L3A+XCI9PT1hfHxcIjxwPjxicj48L3A+XCI9PT1hfHx0aGlzLmhhc1BsYWNlaG9sZGVyU2V0KCl9LF9pbml0Q29udGVudEVkaXRhYmxlQXJlYTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5jb25maWcubm9UZXh0YXJlYT90aGlzLnNhbmRib3g9bmV3IGIuQ29udGVudEVkaXRhYmxlQXJlYShmdW5jdGlvbigpe2EuX2NyZWF0ZSgpfSx7fSx0aGlzLmVkaXRhYmxlQXJlYSk6KHRoaXMuc2FuZGJveD1uZXcgYi5Db250ZW50RWRpdGFibGVBcmVhKGZ1bmN0aW9uKCl7YS5fY3JlYXRlKCl9KSx0aGlzLmVkaXRhYmxlQXJlYT10aGlzLnNhbmRib3guZ2V0Q29udGVudEVkaXRhYmxlKCksYi5pbnNlcnQodGhpcy5lZGl0YWJsZUFyZWEpLmFmdGVyKHRoaXMudGV4dGFyZWEuZWxlbWVudCksdGhpcy5fY3JlYXRlV3lzaXd5Z0Zvcm1GaWVsZCgpKX0sX2luaXRTYW5kYm94OmZ1bmN0aW9uKCl7dmFyIGEsYz10aGlzO3RoaXMuc2FuZGJveD1uZXcgYi5TYW5kYm94KGZ1bmN0aW9uKCl7Yy5fY3JlYXRlKCl9LHtzdHlsZXNoZWV0czp0aGlzLmNvbmZpZy5zdHlsZXNoZWV0c30pLHRoaXMuZWRpdGFibGVBcmVhPXRoaXMuc2FuZGJveC5nZXRJZnJhbWUoKSxhPXRoaXMudGV4dGFyZWEuZWxlbWVudCxiLmluc2VydCh0aGlzLmVkaXRhYmxlQXJlYSkuYWZ0ZXIoYSksdGhpcy5fY3JlYXRlV3lzaXd5Z0Zvcm1GaWVsZCgpfSxfY3JlYXRlV3lzaXd5Z0Zvcm1GaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMudGV4dGFyZWEuZWxlbWVudC5mb3JtKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7YS50eXBlPVwiaGlkZGVuXCIsYS5uYW1lPVwiX3d5c2lodG1sNV9tb2RlXCIsYS52YWx1ZT0xLGIuaW5zZXJ0KGEpLmFmdGVyKHRoaXMudGV4dGFyZWEuZWxlbWVudCl9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGQsZSxmPXRoaXM7dGhpcy5kb2M9dGhpcy5zYW5kYm94LmdldERvY3VtZW50KCksdGhpcy5lbGVtZW50PXRoaXMuY29uZmlnLmNvbnRlbnRFZGl0YWJsZU1vZGU/dGhpcy5zYW5kYm94LmdldENvbnRlbnRFZGl0YWJsZSgpOnRoaXMuZG9jLmJvZHksdGhpcy5jb25maWcubm9UZXh0YXJlYT90aGlzLmNsZWFuVXAoKToodGhpcy50ZXh0YXJlYT10aGlzLnBhcmVudC50ZXh0YXJlYSx0aGlzLmVsZW1lbnQuaW5uZXJIVE1MPXRoaXMudGV4dGFyZWEuZ2V0VmFsdWUoITAsITEpKSx0aGlzLnNlbGVjdGlvbj1uZXcgYS5TZWxlY3Rpb24odGhpcy5wYXJlbnQsdGhpcy5lbGVtZW50LHRoaXMuY29uZmlnLnVuZWRpdGFibGVDb250YWluZXJDbGFzc25hbWUpLHRoaXMuY29tbWFuZHM9bmV3IGEuQ29tbWFuZHModGhpcy5wYXJlbnQpLHRoaXMuY29uZmlnLm5vVGV4dGFyZWF8fGIuY29weUF0dHJpYnV0ZXMoW1wiY2xhc3NOYW1lXCIsXCJzcGVsbGNoZWNrXCIsXCJ0aXRsZVwiLFwibGFuZ1wiLFwiZGlyXCIsXCJhY2Nlc3NLZXlcIl0pLmZyb20odGhpcy50ZXh0YXJlYS5lbGVtZW50KS50byh0aGlzLmVsZW1lbnQpLGIuYWRkQ2xhc3ModGhpcy5lbGVtZW50LHRoaXMuY29uZmlnLmNvbXBvc2VyQ2xhc3NOYW1lKSx0aGlzLmNvbmZpZy5zdHlsZSYmIXRoaXMuY29uZmlnLmNvbnRlbnRFZGl0YWJsZU1vZGUmJnRoaXMuc3R5bGUoKSx0aGlzLm9ic2VydmUoKSxkPXRoaXMuY29uZmlnLm5hbWUsZCYmKGIuYWRkQ2xhc3ModGhpcy5lbGVtZW50LGQpLHRoaXMuY29uZmlnLmNvbnRlbnRFZGl0YWJsZU1vZGV8fGIuYWRkQ2xhc3ModGhpcy5lZGl0YWJsZUFyZWEsZCkpLHRoaXMuZW5hYmxlKCksIXRoaXMuY29uZmlnLm5vVGV4dGFyZWEmJnRoaXMudGV4dGFyZWEuZWxlbWVudC5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCksZT1cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5jb25maWcucGxhY2Vob2xkZXI/dGhpcy5jb25maWcucGxhY2Vob2xkZXI6dGhpcy5jb25maWcubm9UZXh0YXJlYT90aGlzLmVkaXRhYmxlQXJlYS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyXCIpOnRoaXMudGV4dGFyZWEuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSxlJiZiLnNpbXVsYXRlUGxhY2Vob2xkZXIodGhpcy5wYXJlbnQsdGhpcyxlKSx0aGlzLmNvbW1hbmRzLmV4ZWMoXCJzdHlsZVdpdGhDU1NcIiwhMSksdGhpcy5faW5pdEF1dG9MaW5raW5nKCksdGhpcy5faW5pdE9iamVjdFJlc2l6aW5nKCksdGhpcy5faW5pdFVuZG9NYW5hZ2VyKCksdGhpcy5faW5pdExpbmVCcmVha2luZygpLHRoaXMuY29uZmlnLm5vVGV4dGFyZWF8fCF0aGlzLnRleHRhcmVhLmVsZW1lbnQuaGFzQXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOmZvY3VzXCIpIT10aGlzLnRleHRhcmVhLmVsZW1lbnR8fGMuaXNJb3MoKXx8c2V0VGltZW91dChmdW5jdGlvbigpe2YuZm9jdXMoITApfSwxMDApLGMuY2xlYXJzQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5KCl8fGEucXVpcmtzLmVuc3VyZVByb3BlckNsZWFyaW5nKHRoaXMpLHRoaXMuaW5pdFN5bmMmJnRoaXMuY29uZmlnLnN5bmMmJnRoaXMuaW5pdFN5bmMoKSx0aGlzLmNvbmZpZy5ub1RleHRhcmVhfHx0aGlzLnRleHRhcmVhLmhpZGUoKSx0aGlzLnBhcmVudC5maXJlKFwiYmVmb3JlbG9hZFwiKS5maXJlKFwibG9hZFwiKX0sX2luaXRBdXRvTGlua2luZzpmdW5jdGlvbigpe3ZhciBkLGUsZixnPXRoaXMsaD1jLmNhbkRpc2FibGVBdXRvTGlua2luZygpLGk9Yy5kb2VzQXV0b0xpbmtpbmdJbkNvbnRlbnRFZGl0YWJsZSgpO2gmJnRoaXMuY29tbWFuZHMuZXhlYyhcImF1dG9VcmxEZXRlY3RcIiwhMSksdGhpcy5jb25maWcuYXV0b0xpbmsmJigoIWl8fGkmJmgpJiYodGhpcy5wYXJlbnQub24oXCJuZXd3b3JkOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtiLmdldFRleHRDb250ZW50KGcuZWxlbWVudCkubWF0Y2goYi5hdXRvTGluay5VUkxfUkVHX0VYUCkmJmcuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlKGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1nLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIitnLmNvbmZpZy51bmVkaXRhYmxlQ29udGFpbmVyQ2xhc3NuYW1lKSxoPSExO2ZvcihlPWYubGVuZ3RoO2UtLTspYS5kb20uY29udGFpbnMoZltlXSxkKSYmKGg9ITApO2h8fGIuYXV0b0xpbmsoZC5wYXJlbnROb2RlLFtnLmNvbmZpZy51bmVkaXRhYmxlQ29udGFpbmVyQ2xhc3NuYW1lXSl9KX0pLGIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsXCJibHVyXCIsZnVuY3Rpb24oKXtiLmF1dG9MaW5rKGcuZWxlbWVudCxbZy5jb25maWcudW5lZGl0YWJsZUNvbnRhaW5lckNsYXNzbmFtZV0pfSkpLGQ9dGhpcy5zYW5kYm94LmdldERvY3VtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJhXCIpLGU9Yi5hdXRvTGluay5VUkxfUkVHX0VYUCxmPWZ1bmN0aW9uKGMpe3ZhciBkPWEubGFuZy5zdHJpbmcoYi5nZXRUZXh0Q29udGVudChjKSkudHJpbSgpO3JldHVyblwid3d3LlwiPT09ZC5zdWJzdHIoMCw0KSYmKGQ9XCJodHRwOi8vXCIrZCksZH0sYi5vYnNlcnZlKHRoaXMuZWxlbWVudCxcImtleWRvd25cIixmdW5jdGlvbihhKXtpZihkLmxlbmd0aCl7dmFyIGMsaD1nLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoYS50YXJnZXQub3duZXJEb2N1bWVudCksaT1iLmdldFBhcmVudEVsZW1lbnQoaCx7bm9kZU5hbWU6XCJBXCJ9LDQpO2kmJihjPWYoaSksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWYoaSk7YSE9PWMmJmEubWF0Y2goZSkmJmkuc2V0QXR0cmlidXRlKFwiaHJlZlwiLGEpfSwwKSl9fSkpfSxfaW5pdE9iamVjdFJlc2l6aW5nOmZ1bmN0aW9uKCl7aWYodGhpcy5jb21tYW5kcy5leGVjKFwiZW5hYmxlT2JqZWN0UmVzaXppbmdcIiwhMCksYy5zdXBwb3J0c0V2ZW50KFwicmVzaXplZW5kXCIpKXt2YXIgZD1bXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLGU9ZC5sZW5ndGgsZj10aGlzLmVsZW1lbnQ7Yi5vYnNlcnZlKGYsXCJyZXNpemVlbmRcIixmdW5jdGlvbihiKXt2YXIgYyxnPWIudGFyZ2V0fHxiLnNyY0VsZW1lbnQsaD1nLnN0eWxlLGk9MDtpZihcIklNR1wiPT09Zy5ub2RlTmFtZSl7Zm9yKDtlPmk7aSsrKWM9ZFtpXSxoW2NdJiYoZy5zZXRBdHRyaWJ1dGUoYyxwYXJzZUludChoW2NdLDEwKSksaFtjXT1cIlwiKTthLnF1aXJrcy5yZWRyYXcoZil9fSl9fSxfaW5pdFVuZG9NYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy51bmRvTWFuYWdlcj1uZXcgYS5VbmRvTWFuYWdlcih0aGlzLnBhcmVudCl9LF9pbml0TGluZUJyZWFraW5nOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChhKXt2YXIgYz1iLmdldFBhcmVudEVsZW1lbnQoYSx7bm9kZU5hbWU6W1wiUFwiLFwiRElWXCJdfSwyKTtjJiZiLmNvbnRhaW5zKGUuZWxlbWVudCxjKSYmZS5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKXtlLmNvbmZpZy51c2VMaW5lQnJlYWtzP2IucmVwbGFjZVdpdGhDaGlsZE5vZGVzKGMpOlwiUFwiIT09Yy5ub2RlTmFtZSYmYi5yZW5hbWVFbGVtZW50KGMsXCJwXCIpfSl9dmFyIGU9dGhpcyxmPVtcIkxJXCIsXCJQXCIsXCJIMVwiLFwiSDJcIixcIkgzXCIsXCJINFwiLFwiSDVcIixcIkg2XCJdLGc9W1wiVUxcIixcIk9MXCIsXCJNRU5VXCJdO3RoaXMuY29uZmlnLnVzZUxpbmVCcmVha3N8fGIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsW1wiZm9jdXNcIixcImtleWRvd25cIl0sZnVuY3Rpb24oKXtpZihlLmlzRW1wdHkoKSl7dmFyIGE9ZS5kb2MuY3JlYXRlRWxlbWVudChcIlBcIik7ZS5lbGVtZW50LmlubmVySFRNTD1cIlwiLGUuZWxlbWVudC5hcHBlbmRDaGlsZChhKSxjLmRpc3BsYXlzQ2FyZXRJbkVtcHR5Q29udGVudEVkaXRhYmxlQ29ycmVjdGx5KCk/ZS5zZWxlY3Rpb24uc2VsZWN0Tm9kZShhLCEwKTooYS5pbm5lckhUTUw9XCI8YnI+XCIsZS5zZWxlY3Rpb24uc2V0QmVmb3JlKGEuZmlyc3RDaGlsZCkpfX0pLGIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsXCJrZXlkb3duXCIsZnVuY3Rpb24oYyl7dmFyIGgsaT1jLmtleUNvZGU7aWYoIWMuc2hpZnRLZXkmJihpPT09YS5FTlRFUl9LRVl8fGk9PT1hLkJBQ0tTUEFDRV9LRVkpKXJldHVybiBoPWIuZ2V0UGFyZW50RWxlbWVudChlLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKSx7bm9kZU5hbWU6Zn0sNCksaD8oc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBjLGY9ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7aWYoXCJMSVwiPT09aC5ub2RlTmFtZSl7aWYoIWYpcmV0dXJuO2M9Yi5nZXRQYXJlbnRFbGVtZW50KGYse25vZGVOYW1lOmd9LDIpLGN8fGQoZil9aT09PWEuRU5URVJfS0VZJiZoLm5vZGVOYW1lLm1hdGNoKC9eSFsxLTZdJC8pJiZkKGYpfSwwKSx2b2lkIDApOihlLmNvbmZpZy51c2VMaW5lQnJlYWtzJiZpPT09YS5FTlRFUl9LRVkmJiFhLmJyb3dzZXIuaW5zZXJ0c0xpbmVCcmVha3NPblJldHVybigpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGUuY29tbWFuZHMuZXhlYyhcImluc2VydExpbmVCcmVha1wiKSksdm9pZCAwKX0pfX0pfSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe3ZhciBiPWEuZG9tLGM9ZG9jdW1lbnQsZD13aW5kb3csZT1jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZj1bXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXCJjb2xvclwiLFwiY3Vyc29yXCIsXCJmb250LWZhbWlseVwiLFwiZm9udC1zaXplXCIsXCJmb250LXN0eWxlXCIsXCJmb250LXZhcmlhbnRcIixcImZvbnQtd2VpZ2h0XCIsXCJsaW5lLWhlaWdodFwiLFwibGV0dGVyLXNwYWNpbmdcIixcInRleHQtYWxpZ25cIixcInRleHQtZGVjb3JhdGlvblwiLFwidGV4dC1pbmRlbnRcIixcInRleHQtcmVuZGVyaW5nXCIsXCJ3b3JkLWJyZWFrXCIsXCJ3b3JkLXdyYXBcIixcIndvcmQtc3BhY2luZ1wiXSxnPVtcImJhY2tncm91bmQtY29sb3JcIixcImJvcmRlci1jb2xsYXBzZVwiLFwiYm9yZGVyLWJvdHRvbS1jb2xvclwiLFwiYm9yZGVyLWJvdHRvbS1zdHlsZVwiLFwiYm9yZGVyLWJvdHRvbS13aWR0aFwiLFwiYm9yZGVyLWxlZnQtY29sb3JcIixcImJvcmRlci1sZWZ0LXN0eWxlXCIsXCJib3JkZXItbGVmdC13aWR0aFwiLFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsXCJib3JkZXItcmlnaHQtc3R5bGVcIixcImJvcmRlci1yaWdodC13aWR0aFwiLFwiYm9yZGVyLXRvcC1jb2xvclwiLFwiYm9yZGVyLXRvcC1zdHlsZVwiLFwiYm9yZGVyLXRvcC13aWR0aFwiLFwiY2xlYXJcIixcImRpc3BsYXlcIixcImZsb2F0XCIsXCJtYXJnaW4tYm90dG9tXCIsXCJtYXJnaW4tbGVmdFwiLFwibWFyZ2luLXJpZ2h0XCIsXCJtYXJnaW4tdG9wXCIsXCJvdXRsaW5lLWNvbG9yXCIsXCJvdXRsaW5lLW9mZnNldFwiLFwib3V0bGluZS13aWR0aFwiLFwib3V0bGluZS1zdHlsZVwiLFwicGFkZGluZy1sZWZ0XCIsXCJwYWRkaW5nLXJpZ2h0XCIsXCJwYWRkaW5nLXRvcFwiLFwicGFkZGluZy1ib3R0b21cIixcInBvc2l0aW9uXCIsXCJ0b3BcIixcImxlZnRcIixcInJpZ2h0XCIsXCJib3R0b21cIixcInotaW5kZXhcIixcInZlcnRpY2FsLWFsaWduXCIsXCJ0ZXh0LWFsaWduXCIsXCItd2Via2l0LWJveC1zaXppbmdcIixcIi1tb3otYm94LXNpemluZ1wiLFwiLW1zLWJveC1zaXppbmdcIixcImJveC1zaXppbmdcIixcIi13ZWJraXQtYm94LXNoYWRvd1wiLFwiLW1vei1ib3gtc2hhZG93XCIsXCItbXMtYm94LXNoYWRvd1wiLFwiYm94LXNoYWRvd1wiLFwiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1c1wiLFwiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0XCIsXCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1c1wiLFwiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLFwiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0XCIsXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLFwiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCIsXCItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdFwiLFwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c1wiLFwiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzXCIsXCItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdFwiLFwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1c1wiLFwid2lkdGhcIixcImhlaWdodFwiXSxoPVtcImh0bWwgICAgICAgICAgICAgICAgIHsgaGVpZ2h0OiAxMDAlOyB9XCIsXCJib2R5ICAgICAgICAgICAgICAgICB7IGhlaWdodDogMTAwJTsgcGFkZGluZzogMXB4IDAgMCAwOyBtYXJnaW46IC0xcHggMCAwIDA7IH1cIixcImJvZHkgPiBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luLXRvcDogMDsgfVwiLFwiLl93eXNpaHRtbDUtdGVtcCAgICAgeyBkaXNwbGF5OiBub25lOyB9XCIsYS5icm93c2VyLmlzR2Vja28/XCJib2R5LnBsYWNlaG9sZGVyIHsgY29sb3I6IGdyYXl0ZXh0ICFpbXBvcnRhbnQ7IH1cIjpcImJvZHkucGxhY2Vob2xkZXIgeyBjb2xvcjogI2E5YTlhOSAhaW1wb3J0YW50OyB9XCIsXCJpbWc6LW1vei1icm9rZW4gICAgICB7IC1tb3otZm9yY2UtYnJva2VuLWltYWdlLWljb246IDE7IGhlaWdodDogMjRweDsgd2lkdGg6IDI0cHg7IH1cIl0saT1mdW5jdGlvbihhKXtpZihhLnNldEFjdGl2ZSl0cnl7YS5zZXRBY3RpdmUoKX1jYXRjaChlKXt9ZWxzZXt2YXIgZj1hLnN0eWxlLGc9Yy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxjLmJvZHkuc2Nyb2xsVG9wLGg9Yy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8Yy5ib2R5LnNjcm9sbExlZnQsaT17cG9zaXRpb246Zi5wb3NpdGlvbix0b3A6Zi50b3AsbGVmdDpmLmxlZnQsV2Via2l0VXNlclNlbGVjdDpmLldlYmtpdFVzZXJTZWxlY3R9O2Iuc2V0U3R5bGVzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTk5OTk5cHhcIixsZWZ0OlwiLTk5OTk5cHhcIixXZWJraXRVc2VyU2VsZWN0Olwibm9uZVwifSkub24oYSksYS5mb2N1cygpLGIuc2V0U3R5bGVzKGkpLm9uKGEpLGQuc2Nyb2xsVG8mJmQuc2Nyb2xsVG8oaCxnKX19O2Eudmlld3MuQ29tcG9zZXIucHJvdG90eXBlLnN0eWxlPWZ1bmN0aW9uKCl7dmFyIGQsaixrPXRoaXMsbD1jLnF1ZXJ5U2VsZWN0b3IoXCI6Zm9jdXNcIiksbT10aGlzLnRleHRhcmVhLmVsZW1lbnQsbj1tLmhhc0F0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIpLG89biYmbS5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSxwPW0uc3R5bGUuZGlzcGxheSxxPW0uZGlzYWJsZWQ7cmV0dXJuIHRoaXMuZm9jdXNTdHlsZXNIb3N0PWUuY2xvbmVOb2RlKCExKSx0aGlzLmJsdXJTdHlsZXNIb3N0PWUuY2xvbmVOb2RlKCExKSx0aGlzLmRpc2FibGVkU3R5bGVzSG9zdD1lLmNsb25lTm9kZSghMSksbiYmbS5yZW1vdmVBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSxtPT09bCYmbS5ibHVyKCksbS5kaXNhYmxlZD0hMSxtLnN0eWxlLmRpc3BsYXk9ZD1cIm5vbmVcIiwobS5nZXRBdHRyaWJ1dGUoXCJyb3dzXCIpJiZcImF1dG9cIj09PWIuZ2V0U3R5bGUoXCJoZWlnaHRcIikuZnJvbShtKXx8bS5nZXRBdHRyaWJ1dGUoXCJjb2xzXCIpJiZcImF1dG9cIj09PWIuZ2V0U3R5bGUoXCJ3aWR0aFwiKS5mcm9tKG0pKSYmKG0uc3R5bGUuZGlzcGxheT1kPXApLGIuY29weVN0eWxlcyhnKS5mcm9tKG0pLnRvKHRoaXMuZWRpdGFibGVBcmVhKS5hbmRUbyh0aGlzLmJsdXJTdHlsZXNIb3N0KSxiLmNvcHlTdHlsZXMoZikuZnJvbShtKS50byh0aGlzLmVsZW1lbnQpLmFuZFRvKHRoaXMuYmx1clN0eWxlc0hvc3QpLGIuaW5zZXJ0Q1NTKGgpLmludG8odGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpLG0uZGlzYWJsZWQ9ITAsYi5jb3B5U3R5bGVzKGcpLmZyb20obSkudG8odGhpcy5kaXNhYmxlZFN0eWxlc0hvc3QpLGIuY29weVN0eWxlcyhmKS5mcm9tKG0pLnRvKHRoaXMuZGlzYWJsZWRTdHlsZXNIb3N0KSxtLmRpc2FibGVkPXEsbS5zdHlsZS5kaXNwbGF5PXAsaShtKSxtLnN0eWxlLmRpc3BsYXk9ZCxiLmNvcHlTdHlsZXMoZykuZnJvbShtKS50byh0aGlzLmZvY3VzU3R5bGVzSG9zdCksYi5jb3B5U3R5bGVzKGYpLmZyb20obSkudG8odGhpcy5mb2N1c1N0eWxlc0hvc3QpLG0uc3R5bGUuZGlzcGxheT1wLGIuY29weVN0eWxlcyhbXCJkaXNwbGF5XCJdKS5mcm9tKG0pLnRvKHRoaXMuZWRpdGFibGVBcmVhKSxqPWEubGFuZy5hcnJheShnKS53aXRob3V0KFtcImRpc3BsYXlcIl0pLGw/bC5mb2N1cygpOm0uYmx1cigpLG4mJm0uc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIixvKSx0aGlzLnBhcmVudC5vbihcImZvY3VzOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtiLmNvcHlTdHlsZXMoaikuZnJvbShrLmZvY3VzU3R5bGVzSG9zdCkudG8oay5lZGl0YWJsZUFyZWEpLGIuY29weVN0eWxlcyhmKS5mcm9tKGsuZm9jdXNTdHlsZXNIb3N0KS50byhrLmVsZW1lbnQpfSksdGhpcy5wYXJlbnQub24oXCJibHVyOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtiLmNvcHlTdHlsZXMoaikuZnJvbShrLmJsdXJTdHlsZXNIb3N0KS50byhrLmVkaXRhYmxlQXJlYSksYi5jb3B5U3R5bGVzKGYpLmZyb20oay5ibHVyU3R5bGVzSG9zdCkudG8oay5lbGVtZW50KX0pLHRoaXMucGFyZW50Lm9ic2VydmUoXCJkaXNhYmxlOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtiLmNvcHlTdHlsZXMoaikuZnJvbShrLmRpc2FibGVkU3R5bGVzSG9zdCkudG8oay5lZGl0YWJsZUFyZWEpLGIuY29weVN0eWxlcyhmKS5mcm9tKGsuZGlzYWJsZWRTdHlsZXNIb3N0KS50byhrLmVsZW1lbnQpfSksdGhpcy5wYXJlbnQub2JzZXJ2ZShcImVuYWJsZTpjb21wb3NlclwiLGZ1bmN0aW9uKCl7Yi5jb3B5U3R5bGVzKGopLmZyb20oay5ibHVyU3R5bGVzSG9zdCkudG8oay5lZGl0YWJsZUFyZWEpLGIuY29weVN0eWxlcyhmKS5mcm9tKGsuYmx1clN0eWxlc0hvc3QpLnRvKGsuZWxlbWVudCl9KSx0aGlzfX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj1hLmRvbSxjPWEuYnJvd3NlcixkPXs2NjpcImJvbGRcIiw3MzpcIml0YWxpY1wiLDg1OlwidW5kZXJsaW5lXCJ9LGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9YS5nZXRQcmV2aW91c05vZGUoYiwhMCksZj1hLmdldFNlbGVjdGVkTm9kZSgpO2lmKDEhPT1mLm5vZGVUeXBlJiZmLnBhcmVudE5vZGUhPT1jJiYoZj1mLnBhcmVudE5vZGUpLGUpaWYoMT09Zi5ub2RlVHlwZSl7aWYoZD1mLmZpcnN0Q2hpbGQsMT09ZS5ub2RlVHlwZSlmb3IoO2YuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZChmLmZpcnN0Q2hpbGQpO2Vsc2UgZm9yKDtmLmZpcnN0Q2hpbGQ7KWIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZi5maXJzdENoaWxkLGIpO2YucGFyZW50Tm9kZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpLGEuc2V0QmVmb3JlKGQpfWVsc2UgMT09ZS5ub2RlVHlwZT9lLmFwcGVuZENoaWxkKGYpOmIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZixiKSxhLnNldEJlZm9yZShmKX0sZj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZixnLGg7Yi5pc0NvbGxhcHNlZCgpP2IuY2FyZXRJc0luVGhlQmVnaW5uaWcoXCJMSVwiKT8oYS5wcmV2ZW50RGVmYXVsdCgpLGQuY29tbWFuZHMuZXhlYyhcIm91dGRlbnRMaXN0XCIpKTpiLmNhcmV0SXNJblRoZUJlZ2lubmlnKCk/YS5wcmV2ZW50RGVmYXVsdCgpOihiLmNhcmV0SXNGaXJzdEluU2VsZWN0aW9uKCkmJmIuZ2V0UHJldmlvdXNOb2RlKCkmJmIuZ2V0UHJldmlvdXNOb2RlKCkubm9kZU5hbWUmJi9eSFxcZCQvZ2kudGVzdChiLmdldFByZXZpb3VzTm9kZSgpLm5vZGVOYW1lKSYmKGY9Yi5nZXRQcmV2aW91c05vZGUoKSxhLnByZXZlbnREZWZhdWx0KCksL15cXHMqJC8udGVzdChmLnRleHRDb250ZW50fHxmLmlubmVyVGV4dCk/Zi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpOihnPWYub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLGcuc2VsZWN0Tm9kZUNvbnRlbnRzKGYpLGcuY29sbGFwc2UoITEpLGIuc2V0U2VsZWN0aW9uKGcpKSksaD1iLmNhcmV0SXNCZWZvcmVVbmVkaXRhYmxlKCksaCYmKGEucHJldmVudERlZmF1bHQoKSxlKGIsaCxjKSkpOmIuY29udGFpbnNVbmVkaXRhYmxlKCkmJihhLnByZXZlbnREZWZhdWx0KCksYi5kZWxldGVDb250ZW50cygpKX0sZz1mdW5jdGlvbihhKXtpZihhLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKXtpZihhLnNlbGVjdGlvbi5jYXJldElzSW5UaGVCZWdpbm5pZyhcIkxJXCIpJiZhLmNvbW1hbmRzLmV4ZWMoXCJpbmRlbnRMaXN0XCIpKXJldHVybn1lbHNlIGEuc2VsZWN0aW9uLmRlbGV0ZUNvbnRlbnRzKCk7XG5hLmNvbW1hbmRzLmV4ZWMoXCJpbnNlcnRIVE1MXCIsXCImZW1zcDtcIil9O2Eudmlld3MuQ29tcG9zZXIucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24oKXt2YXIgZSxoLGk9dGhpcyxqPXRoaXMuZ2V0VmFsdWUoITEsITEpLGs9dGhpcy5zYW5kYm94LmdldElmcmFtZT90aGlzLnNhbmRib3guZ2V0SWZyYW1lKCk6dGhpcy5zYW5kYm94LmdldENvbnRlbnRFZGl0YWJsZSgpLGw9dGhpcy5lbGVtZW50LG09Yy5zdXBwb3J0c0V2ZW50c0luSWZyYW1lQ29ycmVjdGx5KCl8fHRoaXMuc2FuZGJveC5nZXRDb250ZW50RWRpdGFibGU/bDp0aGlzLnNhbmRib3guZ2V0V2luZG93KCksbj1bXCJkcm9wXCIsXCJwYXN0ZVwiLFwiYmVmb3JlcGFzdGVcIl0sbz1bXCJkcm9wXCIsXCJwYXN0ZVwiLFwibW91c2V1cFwiLFwiZm9jdXNcIixcImtleXVwXCJdO2Iub2JzZXJ2ZShrLFwiRE9NTm9kZVJlbW92ZWRcIixmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoZSksaS5wYXJlbnQuZmlyZShcImRlc3Ryb3k6Y29tcG9zZXJcIil9KSxjLnN1cHBvcnRzTXV0YXRpb25FdmVudHMoKXx8KGU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtiLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxrKXx8KGNsZWFySW50ZXJ2YWwoZSksaS5wYXJlbnQuZmlyZShcImRlc3Ryb3k6Y29tcG9zZXJcIikpfSwyNTApKSxiLm9ic2VydmUobSxvLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2kucGFyZW50LmZpcmUoXCJpbnRlcmFjdGlvblwiKS5maXJlKFwiaW50ZXJhY3Rpb246Y29tcG9zZXJcIil9LDApfSksdGhpcy5jb25maWcuaGFuZGxlVGFibGVzJiYoIXRoaXMudGFibGVDbGlja0hhbmRsZSYmdGhpcy5kb2MuZXhlY0NvbW1hbmQmJmEuYnJvd3Nlci5zdXBwb3J0c0NvbW1hbmQodGhpcy5kb2MsXCJlbmFibGVPYmplY3RSZXNpemluZ1wiKSYmYS5icm93c2VyLnN1cHBvcnRzQ29tbWFuZCh0aGlzLmRvYyxcImVuYWJsZUlubGluZVRhYmxlRWRpdGluZ1wiKSYmKHRoaXMuc2FuZGJveC5nZXRJZnJhbWU/dGhpcy50YWJsZUNsaWNrSGFuZGxlPWIub2JzZXJ2ZShrLFtcImZvY3VzXCIsXCJtb3VzZXVwXCIsXCJtb3VzZW92ZXJcIl0sZnVuY3Rpb24oKXtpLmRvYy5leGVjQ29tbWFuZChcImVuYWJsZU9iamVjdFJlc2l6aW5nXCIsITEsXCJmYWxzZVwiKSxpLmRvYy5leGVjQ29tbWFuZChcImVuYWJsZUlubGluZVRhYmxlRWRpdGluZ1wiLCExLFwiZmFsc2VcIiksaS50YWJsZUNsaWNrSGFuZGxlLnN0b3AoKX0pOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmRvYy5leGVjQ29tbWFuZChcImVuYWJsZU9iamVjdFJlc2l6aW5nXCIsITEsXCJmYWxzZVwiKSxpLmRvYy5leGVjQ29tbWFuZChcImVuYWJsZUlubGluZVRhYmxlRWRpdGluZ1wiLCExLFwiZmFsc2VcIil9LDApKSx0aGlzLnRhYmxlU2VsZWN0aW9uPWEucXVpcmtzLnRhYmxlQ2VsbHNTZWxlY3Rpb24obCxpLnBhcmVudCkpLGIub2JzZXJ2ZShtLFwiZm9jdXNcIixmdW5jdGlvbihhKXtpLnBhcmVudC5maXJlKFwiZm9jdXNcIixhKS5maXJlKFwiZm9jdXM6Y29tcG9zZXJcIixhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aj1pLmdldFZhbHVlKCExLCExKX0sMCl9KSxiLm9ic2VydmUobSxcImJsdXJcIixmdW5jdGlvbihhKXtpZihqIT09aS5nZXRWYWx1ZSghMSwhMSkpe3ZhciBiPWE7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZSYmKGI9T2JqZWN0LmNyZWF0ZShhLHt0eXBlOnt2YWx1ZTpcImNoYW5nZVwifX0pKSxpLnBhcmVudC5maXJlKFwiY2hhbmdlXCIsYikuZmlyZShcImNoYW5nZTpjb21wb3NlclwiLGIpfWkucGFyZW50LmZpcmUoXCJibHVyXCIsYSkuZmlyZShcImJsdXI6Y29tcG9zZXJcIixhKX0pLGIub2JzZXJ2ZShsLFwiZHJhZ2VudGVyXCIsZnVuY3Rpb24oKXtpLnBhcmVudC5maXJlKFwidW5zZXRfcGxhY2Vob2xkZXJcIil9KSxiLm9ic2VydmUobCxuLGZ1bmN0aW9uKGEpe2kucGFyZW50LmZpcmUoYS50eXBlLGEpLmZpcmUoYS50eXBlK1wiOmNvbXBvc2VyXCIsYSl9KSx0aGlzLmNvbmZpZy5jb3B5ZWRGcm9tTWFya2luZyYmYi5vYnNlcnZlKGwsXCJjb3B5XCIsZnVuY3Rpb24oYSl7YS5jbGlwYm9hcmREYXRhJiYoYS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L2h0bWxcIixpLmNvbmZpZy5jb3B5ZWRGcm9tTWFya2luZytpLnNlbGVjdGlvbi5nZXRIdG1sKCkpLGEucHJldmVudERlZmF1bHQoKSksaS5wYXJlbnQuZmlyZShhLnR5cGUsYSkuZmlyZShhLnR5cGUrXCI6Y29tcG9zZXJcIixhKX0pLGIub2JzZXJ2ZShsLFwia2V5dXBcIixmdW5jdGlvbihiKXt2YXIgYz1iLmtleUNvZGU7KGM9PT1hLlNQQUNFX0tFWXx8Yz09PWEuRU5URVJfS0VZKSYmaS5wYXJlbnQuZmlyZShcIm5ld3dvcmQ6Y29tcG9zZXJcIil9KSx0aGlzLnBhcmVudC5vbihcInBhc3RlOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5wYXJlbnQuZmlyZShcIm5ld3dvcmQ6Y29tcG9zZXJcIil9LDApfSksYy5jYW5TZWxlY3RJbWFnZXNJbkNvbnRlbnRFZGl0YWJsZSgpfHxiLm9ic2VydmUobCxcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGIpe3ZhciBjPWIudGFyZ2V0LGQ9bC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nXCIpLGU9bC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2kuY29uZmlnLnVuZWRpdGFibGVDb250YWluZXJDbGFzc25hbWUrXCIgaW1nXCIpLGY9YS5sYW5nLmFycmF5KGQpLndpdGhvdXQoZSk7XCJJTUdcIj09PWMubm9kZU5hbWUmJmEubGFuZy5hcnJheShmKS5jb250YWlucyhjKSYmaS5zZWxlY3Rpb24uc2VsZWN0Tm9kZShjKX0pLGMuY2FuU2VsZWN0SW1hZ2VzSW5Db250ZW50RWRpdGFibGUoKXx8Yi5vYnNlcnZlKGwsXCJkcm9wXCIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCl9LDApfSksYy5oYXNIaXN0b3J5SXNzdWUoKSYmYy5zdXBwb3J0c1NlbGVjdGlvbk1vZGlmeSgpJiZiLm9ic2VydmUobCxcImtleWRvd25cIixmdW5jdGlvbihhKXtpZihhLm1ldGFLZXl8fGEuY3RybEtleSl7dmFyIGI9YS5rZXlDb2RlLGM9bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LGQ9Yy5nZXRTZWxlY3Rpb24oKTsoMzc9PT1ifHwzOT09PWIpJiYoMzc9PT1iJiYoZC5tb2RpZnkoXCJleHRlbmRcIixcImxlZnRcIixcImxpbmVib3VuZGFyeVwiKSxhLnNoaWZ0S2V5fHxkLmNvbGxhcHNlVG9TdGFydCgpKSwzOT09PWImJihkLm1vZGlmeShcImV4dGVuZFwiLFwicmlnaHRcIixcImxpbmVib3VuZGFyeVwiKSxhLnNoaWZ0S2V5fHxkLmNvbGxhcHNlVG9FbmQoKSksYS5wcmV2ZW50RGVmYXVsdCgpKX19KSxiLm9ic2VydmUobCxcImtleWRvd25cIixmdW5jdGlvbihhKXt2YXIgYj1hLmtleUNvZGUsYz1kW2JdOyhhLmN0cmxLZXl8fGEubWV0YUtleSkmJiFhLmFsdEtleSYmYyYmKGkuY29tbWFuZHMuZXhlYyhjKSxhLnByZXZlbnREZWZhdWx0KCkpLDg9PT1iP2YoYSxpLnNlbGVjdGlvbixsLGkpOmkuY29uZmlnLmhhbmRsZVRhYktleSYmOT09PWImJihhLnByZXZlbnREZWZhdWx0KCksZyhpLGwpKX0pLGIub2JzZXJ2ZShsLFwia2V5ZG93blwiLGZ1bmN0aW9uKGIpe3ZhciBjLGQ9aS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCEwKSxlPWIua2V5Q29kZTshZHx8XCJJTUdcIiE9PWQubm9kZU5hbWV8fGUhPT1hLkJBQ0tTUEFDRV9LRVkmJmUhPT1hLkRFTEVURV9LRVl8fChjPWQucGFyZW50Tm9kZSxjLnJlbW92ZUNoaWxkKGQpLFwiQVwiIT09Yy5ub2RlTmFtZXx8Yy5maXJzdENoaWxkfHxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyksc2V0VGltZW91dChmdW5jdGlvbigpe2EucXVpcmtzLnJlZHJhdyhsKX0sMCksYi5wcmV2ZW50RGVmYXVsdCgpKX0pLCF0aGlzLmNvbmZpZy5jb250ZW50RWRpdGFibGVNb2RlJiZjLmhhc0lmcmFtZUZvY3VzSXNzdWUoKSYmKGIub2JzZXJ2ZShrLFwiZm9jdXNcIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmRvYy5xdWVyeVNlbGVjdG9yKFwiOmZvY3VzXCIpIT09aS5lbGVtZW50JiZpLmZvY3VzKCl9LDApfSksYi5vYnNlcnZlKHRoaXMuZWxlbWVudCxcImJsdXJcIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKX0sMCl9KSksaD17SU1HOlwiSW1hZ2U6IFwiLEE6XCJMaW5rOiBcIn0sYi5vYnNlcnZlKGwsXCJtb3VzZW92ZXJcIixmdW5jdGlvbihhKXt2YXIgYixjLGQ9YS50YXJnZXQsZT1kLm5vZGVOYW1lOyhcIkFcIj09PWV8fFwiSU1HXCI9PT1lKSYmKGM9ZC5oYXNBdHRyaWJ1dGUoXCJ0aXRsZVwiKSxjfHwoYj1oW2VdKyhkLmdldEF0dHJpYnV0ZShcImhyZWZcIil8fGQuZ2V0QXR0cmlidXRlKFwic3JjXCIpKSxkLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsYikpKX0pfX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXt2YXIgYj00MDA7YS52aWV3cy5TeW5jaHJvbml6ZXI9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmVkaXRvcj1hLHRoaXMudGV4dGFyZWE9Yix0aGlzLmNvbXBvc2VyPWMsdGhpcy5fb2JzZXJ2ZSgpfSxmcm9tQ29tcG9zZXJUb1RleHRhcmVhOmZ1bmN0aW9uKGIpe3RoaXMudGV4dGFyZWEuc2V0VmFsdWUoYS5sYW5nLnN0cmluZyh0aGlzLmNvbXBvc2VyLmdldFZhbHVlKCExLCExKSkudHJpbSgpLGIpfSxmcm9tVGV4dGFyZWFUb0NvbXBvc2VyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGV4dGFyZWEuZ2V0VmFsdWUoITEsITEpO2I/dGhpcy5jb21wb3Nlci5zZXRWYWx1ZShiLGEpOih0aGlzLmNvbXBvc2VyLmNsZWFyKCksdGhpcy5lZGl0b3IuZmlyZShcInNldF9wbGFjZWhvbGRlclwiKSl9LHN5bmM6ZnVuY3Rpb24oYSl7XCJ0ZXh0YXJlYVwiPT09dGhpcy5lZGl0b3IuY3VycmVudFZpZXcubmFtZT90aGlzLmZyb21UZXh0YXJlYVRvQ29tcG9zZXIoYSk6dGhpcy5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKGEpfSxfb2JzZXJ2ZTpmdW5jdGlvbigpe3ZhciBjLGQ9dGhpcyxlPXRoaXMudGV4dGFyZWEuZWxlbWVudC5mb3JtLGY9ZnVuY3Rpb24oKXtjPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ZC5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKCl9LGIpfSxnPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjKSxjPW51bGx9O2YoKSxlJiYoYS5kb20ub2JzZXJ2ZShlLFwic3VibWl0XCIsZnVuY3Rpb24oKXtkLnN5bmMoITApfSksYS5kb20ub2JzZXJ2ZShlLFwicmVzZXRcIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZyb21UZXh0YXJlYVRvQ29tcG9zZXIoKX0sMCl9KSksdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2Vfdmlld1wiLGZ1bmN0aW9uKGEpe1wiY29tcG9zZXJcIiE9PWF8fGM/XCJ0ZXh0YXJlYVwiPT09YSYmKGQuZnJvbUNvbXBvc2VyVG9UZXh0YXJlYSghMCksZygpKTooZC5mcm9tVGV4dGFyZWFUb0NvbXBvc2VyKCEwKSxmKCkpfSksdGhpcy5lZGl0b3Iub24oXCJkZXN0cm95OmNvbXBvc2VyXCIsZyl9fSl9KHd5c2lodG1sNSksd3lzaWh0bWw1LnZpZXdzLlRleHRhcmVhPXd5c2lodG1sNS52aWV3cy5WaWV3LmV4dGVuZCh7bmFtZTpcInRleHRhcmVhXCIsY29uc3RydWN0b3I6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYmFzZShhLGIsYyksdGhpcy5fb2JzZXJ2ZSgpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC52YWx1ZT1cIlwifSxnZXRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmlzRW1wdHkoKT9cIlwiOnRoaXMuZWxlbWVudC52YWx1ZTtyZXR1cm4gYSE9PSExJiYoYj10aGlzLnBhcmVudC5wYXJzZShiKSksYn0sc2V0VmFsdWU6ZnVuY3Rpb24oYSxiKXtiJiYoYT10aGlzLnBhcmVudC5wYXJzZShhKSksdGhpcy5lbGVtZW50LnZhbHVlPWF9LGNsZWFuVXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcmVudC5wYXJzZSh0aGlzLmVsZW1lbnQudmFsdWUpO3RoaXMuZWxlbWVudC52YWx1ZT1hfSxoYXNQbGFjZWhvbGRlclNldDpmdW5jdGlvbigpe3ZhciBhPXd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRzUGxhY2Vob2xkZXJBdHRyaWJ1dGVPbih0aGlzLmVsZW1lbnQpLGI9dGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIpfHxudWxsLGM9dGhpcy5lbGVtZW50LnZhbHVlLGQ9IWM7cmV0dXJuIGEmJmR8fGM9PT1ifSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXd5c2lodG1sNS5sYW5nLnN0cmluZyh0aGlzLmVsZW1lbnQudmFsdWUpLnRyaW0oKXx8dGhpcy5oYXNQbGFjZWhvbGRlclNldCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudCxiPXRoaXMucGFyZW50LGM9e2ZvY3VzaW46XCJmb2N1c1wiLGZvY3Vzb3V0OlwiYmx1clwifSxkPXd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRzRXZlbnQoXCJmb2N1c2luXCIpP1tcImZvY3VzaW5cIixcImZvY3Vzb3V0XCIsXCJjaGFuZ2VcIl06W1wiZm9jdXNcIixcImJsdXJcIixcImNoYW5nZVwiXTtiLm9uKFwiYmVmb3JlbG9hZFwiLGZ1bmN0aW9uKCl7d3lzaWh0bWw1LmRvbS5vYnNlcnZlKGEsZCxmdW5jdGlvbihhKXt2YXIgZD1jW2EudHlwZV18fGEudHlwZTtiLmZpcmUoZCkuZmlyZShkK1wiOnRleHRhcmVhXCIpfSksd3lzaWh0bWw1LmRvbS5vYnNlcnZlKGEsW1wicGFzdGVcIixcImRyb3BcIl0sZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5maXJlKFwicGFzdGVcIikuZmlyZShcInBhc3RlOnRleHRhcmVhXCIpfSwwKX0pfSl9fSksZnVuY3Rpb24oYSl7dmFyIGIsYz17bmFtZTpiLHN0eWxlOiEwLHRvb2xiYXI6YixzaG93VG9vbGJhckFmdGVySW5pdDohMCxhdXRvTGluazohMCxoYW5kbGVUYWJsZXM6ITAsaGFuZGxlVGFiS2V5OiEwLHBhcnNlclJ1bGVzOnt0YWdzOnticjp7fSxzcGFuOnt9LGRpdjp7fSxwOnt9fSxjbGFzc2VzOnt9fSxwYXN0ZVBhcnNlclJ1bGVzZXRzOm51bGwscGFyc2VyOmEuZG9tLnBhcnNlLGNvbXBvc2VyQ2xhc3NOYW1lOlwid3lzaWh0bWw1LWVkaXRvclwiLGJvZHlDbGFzc05hbWU6XCJ3eXNpaHRtbDUtc3VwcG9ydGVkXCIsdXNlTGluZUJyZWFrczohMCxzdHlsZXNoZWV0czpbXSxwbGFjZWhvbGRlclRleHQ6YixzdXBwb3J0VG91Y2hEZXZpY2VzOiEwLGNsZWFuVXA6ITAsY29udGVudEVkaXRhYmxlTW9kZTohMSx1bmVkaXRhYmxlQ29udGFpbmVyQ2xhc3NuYW1lOlwid3lzaWh0bWw1LXVuZWRpdGFibGUtY29udGFpbmVyXCIsY29weWVkRnJvbU1hcmtpbmc6JzxtZXRhIG5hbWU9XCJjb3BpZWQtZnJvbVwiIGNvbnRlbnQ9XCJ3eXNpaHRtbDVcIj4nfTthLkVkaXRvcj1hLmxhbmcuRGlzcGF0Y2hlci5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGIsZCl7aWYodGhpcy5lZGl0YWJsZUVsZW1lbnQ9XCJzdHJpbmdcIj09dHlwZW9mIGI/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYik6Yix0aGlzLmNvbmZpZz1hLmxhbmcub2JqZWN0KHt9KS5tZXJnZShjKS5tZXJnZShkKS5nZXQoKSx0aGlzLl9pc0NvbXBhdGlibGU9YS5icm93c2VyLnN1cHBvcnRlZCgpLFwidGV4dGFyZWFcIiE9dGhpcy5lZGl0YWJsZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHRoaXMuY29uZmlnLmNvbnRlbnRFZGl0YWJsZU1vZGU9ITAsdGhpcy5jb25maWcubm9UZXh0YXJlYT0hMCksdGhpcy5jb25maWcubm9UZXh0YXJlYXx8KHRoaXMudGV4dGFyZWE9bmV3IGEudmlld3MuVGV4dGFyZWEodGhpcyx0aGlzLmVkaXRhYmxlRWxlbWVudCx0aGlzLmNvbmZpZyksdGhpcy5jdXJyZW50Vmlldz10aGlzLnRleHRhcmVhKSwhdGhpcy5faXNDb21wYXRpYmxlfHwhdGhpcy5jb25maWcuc3VwcG9ydFRvdWNoRGV2aWNlcyYmYS5icm93c2VyLmlzVG91Y2hEZXZpY2UoKSl7dmFyIGU9dGhpcztyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2UuZmlyZShcImJlZm9yZWxvYWRcIikuZmlyZShcImxvYWRcIil9LDApLHZvaWQgMH1hLmRvbS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LHRoaXMuY29uZmlnLmJvZHlDbGFzc05hbWUpLHRoaXMuY29tcG9zZXI9bmV3IGEudmlld3MuQ29tcG9zZXIodGhpcyx0aGlzLmVkaXRhYmxlRWxlbWVudCx0aGlzLmNvbmZpZyksdGhpcy5jdXJyZW50Vmlldz10aGlzLmNvbXBvc2VyLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuY29uZmlnLnBhcnNlciYmdGhpcy5faW5pdFBhcnNlcigpLHRoaXMub24oXCJiZWZvcmVsb2FkXCIsdGhpcy5oYW5kbGVCZWZvcmVMb2FkKX0saGFuZGxlQmVmb3JlTG9hZDpmdW5jdGlvbigpe3RoaXMuY29uZmlnLm5vVGV4dGFyZWF8fCh0aGlzLnN5bmNocm9uaXplcj1uZXcgYS52aWV3cy5TeW5jaHJvbml6ZXIodGhpcyx0aGlzLnRleHRhcmVhLHRoaXMuY29tcG9zZXIpKSx0aGlzLmNvbmZpZy50b29sYmFyJiYodGhpcy50b29sYmFyPW5ldyBhLnRvb2xiYXIuVG9vbGJhcih0aGlzLHRoaXMuY29uZmlnLnRvb2xiYXIsdGhpcy5jb25maWcuc2hvd1Rvb2xiYXJBZnRlckluaXQpKX0saXNDb21wYXRpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcGF0aWJsZX0sY2xlYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlldy5jbGVhcigpLHRoaXN9LGdldFZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY3VycmVudFZpZXcuZ2V0VmFsdWUoYSxiKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5maXJlKFwidW5zZXRfcGxhY2Vob2xkZXJcIiksYT8odGhpcy5jdXJyZW50Vmlldy5zZXRWYWx1ZShhLGIpLHRoaXMpOnRoaXMuY2xlYXIoKX0sY2xlYW5VcDpmdW5jdGlvbigpe3RoaXMuY3VycmVudFZpZXcuY2xlYW5VcCgpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlldy5mb2N1cyhhKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXcuZGlzYWJsZSgpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3LmVuYWJsZSgpLHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlldy5pc0VtcHR5KCl9LGhhc1BsYWNlaG9sZGVyU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXcuaGFzUGxhY2Vob2xkZXJTZXQoKX0scGFyc2U6ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzLmNvbmZpZy5jb250ZW50RWRpdGFibGVNb2RlP2RvY3VtZW50OnRoaXMuY29tcG9zZXI/dGhpcy5jb21wb3Nlci5zYW5kYm94LmdldERvY3VtZW50KCk6bnVsbCxlPXRoaXMuY29uZmlnLnBhcnNlcihiLHtydWxlczp0aGlzLmNvbmZpZy5wYXJzZXJSdWxlcyxjbGVhblVwOnRoaXMuY29uZmlnLmNsZWFuVXAsY29udGV4dDpkLHVuZWRpdGFibGVDbGFzczp0aGlzLmNvbmZpZy51bmVkaXRhYmxlQ29udGFpbmVyQ2xhc3NuYW1lLGNsZWFySW50ZXJuYWxzOmN9KTtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgYiYmYS5xdWlya3MucmVkcmF3KGIpLGV9LF9pbml0UGFyc2VyOmZ1bmN0aW9uKCl7dmFyIGIsYz10aGlzO2EuYnJvd3Nlci5zdXBwb3J0c01vZGVuUGFzdGUoKT90aGlzLm9uKFwicGFzdGU6Y29tcG9zZXJcIixmdW5jdGlvbihkKXtkLnByZXZlbnREZWZhdWx0KCksYj1hLmRvbS5nZXRQYXN0ZWRIdG1sKGQpLGImJmMuX2NsZWFuQW5kUGFzdGUoYil9KTp0aGlzLm9uKFwiYmVmb3JlcGFzdGU6Y29tcG9zZXJcIixmdW5jdGlvbihiKXtiLnByZXZlbnREZWZhdWx0KCksYS5kb20uZ2V0UGFzdGVkSHRtbFdpdGhEaXYoYy5jb21wb3NlcixmdW5jdGlvbihhKXthJiZjLl9jbGVhbkFuZFBhc3RlKGEpfSl9KX0sX2NsZWFuQW5kUGFzdGU6ZnVuY3Rpb24oYil7dmFyIGM9YS5xdWlya3MuY2xlYW5QYXN0ZWRIVE1MKGIse3JlZmVyZW5jZU5vZGU6dGhpcy5jb21wb3Nlci5lbGVtZW50LHJ1bGVzOnRoaXMuY29uZmlnLnBhc3RlUGFyc2VyUnVsZXNldHN8fFt7c2V0OnRoaXMuY29uZmlnLnBhcnNlclJ1bGVzfV0sdW5lZGl0YWJsZUNsYXNzOnRoaXMuY29uZmlnLnVuZWRpdGFibGVDb250YWluZXJDbGFzc25hbWV9KTt0aGlzLmNvbXBvc2VyLnNlbGVjdGlvbi5kZWxldGVDb250ZW50cygpLHRoaXMuY29tcG9zZXIuc2VsZWN0aW9uLmluc2VydEhUTUwoYyl9fSl9KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9YS5kb20sYz1cInd5c2lodG1sNS1jb21tYW5kLWRpYWxvZy1vcGVuZWRcIixkPVwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWFcIixlPVwiW2RhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZF1cIixmPVwiZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkXCI7YS50b29sYmFyLkRpYWxvZz1hLmxhbmcuRGlzcGF0Y2hlci5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsYil7dGhpcy5saW5rPWEsdGhpcy5jb250YWluZXI9Yn0sX29ic2VydmU6ZnVuY3Rpb24oKXt2YXIgZSxmLGcsaCxpLGo7aWYoIXRoaXMuX29ic2VydmVkKXtmb3IoZT10aGlzLGY9ZnVuY3Rpb24oYSl7dmFyIGI9ZS5fc2VyaWFsaXplKCk7Yj09ZS5lbGVtZW50VG9DaGFuZ2U/ZS5maXJlKFwiZWRpdFwiLGIpOmUuZmlyZShcInNhdmVcIixiKSxlLmhpZGUoKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX0sYi5vYnNlcnZlKGUubGluayxcImNsaWNrXCIsZnVuY3Rpb24oKXtiLmhhc0NsYXNzKGUubGluayxjKSYmc2V0VGltZW91dChmdW5jdGlvbigpe2UuaGlkZSgpfSwwKX0pLGIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lcixcImtleWRvd25cIixmdW5jdGlvbihiKXt2YXIgYz1iLmtleUNvZGU7Yz09PWEuRU5URVJfS0VZJiZmKGIpLGM9PT1hLkVTQ0FQRV9LRVkmJihlLmZpcmUoXCJjYW5jZWxcIiksZS5oaWRlKCkpfSksYi5kZWxlZ2F0ZSh0aGlzLmNvbnRhaW5lcixcIltkYXRhLXd5c2lodG1sNS1kaWFsb2ctYWN0aW9uPXNhdmVdXCIsXCJjbGlja1wiLGYpLGIuZGVsZWdhdGUodGhpcy5jb250YWluZXIsXCJbZGF0YS13eXNpaHRtbDUtZGlhbG9nLWFjdGlvbj1jYW5jZWxdXCIsXCJjbGlja1wiLGZ1bmN0aW9uKGEpe2UuZmlyZShcImNhbmNlbFwiKSxlLmhpZGUoKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX0pLGc9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbChkKSxoPTAsaT1nLmxlbmd0aCxqPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChlLmludGVydmFsKX07aT5oO2grKyliLm9ic2VydmUoZ1toXSxcImNoYW5nZVwiLGopO3RoaXMuX29ic2VydmVkPSEwfX0sX3NlcmlhbGl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmVsZW1lbnRUb0NoYW5nZXx8e30sYj10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGUpLGM9Yi5sZW5ndGgsZD0wO2M+ZDtkKyspYVtiW2RdLmdldEF0dHJpYnV0ZShmKV09YltkXS52YWx1ZTtyZXR1cm4gYX0sX2ludGVycG9sYXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOmZvY3VzXCIpLGg9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbChlKSxpPWgubGVuZ3RoLGo9MDtpPmo7aisrKWI9aFtqXSxiIT09ZyYmKGEmJlwiaGlkZGVuXCI9PT1iLnR5cGV8fChjPWIuZ2V0QXR0cmlidXRlKGYpLGQ9dGhpcy5lbGVtZW50VG9DaGFuZ2UmJlwiYm9vbGVhblwiIT10eXBlb2YgdGhpcy5lbGVtZW50VG9DaGFuZ2U/dGhpcy5lbGVtZW50VG9DaGFuZ2UuZ2V0QXR0cmlidXRlKGMpfHxcIlwiOmIuZGVmYXVsdFZhbHVlLGIudmFsdWU9ZCkpfSxzaG93OmZ1bmN0aW9uKGEpe2lmKCFiLmhhc0NsYXNzKHRoaXMubGluayxjKSl7dmFyIGU9dGhpcyxmPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoZCk7aWYodGhpcy5lbGVtZW50VG9DaGFuZ2U9YSx0aGlzLl9vYnNlcnZlKCksdGhpcy5faW50ZXJwb2xhdGUoKSxhJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuX2ludGVycG9sYXRlKCEwKX0sNTAwKSksYi5hZGRDbGFzcyh0aGlzLmxpbmssYyksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT1cIlwiLHRoaXMuZmlyZShcInNob3dcIiksZiYmIWEpdHJ5e2YuZm9jdXMoKX1jYXRjaChnKXt9fX0saGlkZTpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpcy5lbGVtZW50VG9DaGFuZ2U9bnVsbCxiLnJlbW92ZUNsYXNzKHRoaXMubGluayxjKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuZmlyZShcImhpZGVcIil9fSl9KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9YS5kb20sYz17cG9zaXRpb246XCJyZWxhdGl2ZVwifSxkPXtsZWZ0OjAsbWFyZ2luOjAsb3BhY2l0eTowLG92ZXJmbG93OlwiaGlkZGVuXCIscGFkZGluZzowLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCx6SW5kZXg6MX0sZT17Y3Vyc29yOlwiaW5oZXJpdFwiLGZvbnRTaXplOlwiNTBweFwiLGhlaWdodDpcIjUwcHhcIixtYXJnaW5Ub3A6XCItMjVweFwiLG91dGxpbmU6MCxwYWRkaW5nOjAscG9zaXRpb246XCJhYnNvbHV0ZVwiLHJpZ2h0OlwiLTRweFwiLHRvcDpcIjUwJVwifSxmPXtcIngtd2Via2l0LXNwZWVjaFwiOlwiXCIsc3BlZWNoOlwiXCJ9O2EudG9vbGJhci5TcGVlY2g9ZnVuY3Rpb24oZyxoKXt2YXIgaSxqLGssbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7cmV0dXJuIGEuYnJvd3Nlci5zdXBwb3J0c1NwZWVjaEFwaU9uKGwpPyhpPWcuZWRpdG9yLnRleHRhcmVhLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSxpJiYoZi5sYW5nPWkpLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmxhbmcub2JqZWN0KGQpLm1lcmdlKHt3aWR0aDpoLm9mZnNldFdpZHRoK1wicHhcIixoZWlnaHQ6aC5vZmZzZXRIZWlnaHQrXCJweFwifSksYi5pbnNlcnQobCkuaW50byhqKSxiLmluc2VydChqKS5pbnRvKGgpLGIuc2V0U3R5bGVzKGUpLm9uKGwpLGIuc2V0QXR0cmlidXRlcyhmKS5vbihsKSxiLnNldFN0eWxlcyhkKS5vbihqKSxiLnNldFN0eWxlcyhjKS5vbihoKSxrPVwib253ZWJraXRzcGVlY2hjaGFuZ2VcImluIGw/XCJ3ZWJraXRzcGVlY2hjaGFuZ2VcIjpcInNwZWVjaGNoYW5nZVwiLGIub2JzZXJ2ZShsLGssZnVuY3Rpb24oKXtnLmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLGwudmFsdWUpLGwudmFsdWU9XCJcIn0pLGIub2JzZXJ2ZShsLFwiY2xpY2tcIixmdW5jdGlvbihhKXtiLmhhc0NsYXNzKGgsXCJ3eXNpaHRtbDUtY29tbWFuZC1kaXNhYmxlZFwiKSYmYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9KSx2b2lkIDApOihoLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdm9pZCAwKX19KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9XCJ3eXNpaHRtbDUtY29tbWFuZC1kaXNhYmxlZFwiLGM9XCJ3eXNpaHRtbDUtY29tbWFuZHMtZGlzYWJsZWRcIixkPVwid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlXCIsZT1cInd5c2lodG1sNS1hY3Rpb24tYWN0aXZlXCIsZj1hLmRvbTthLnRvb2xiYXIuVG9vbGJhcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixnLGgpe3RoaXMuZWRpdG9yPWYsdGhpcy5jb250YWluZXI9XCJzdHJpbmdcIj09dHlwZW9mIGc/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZyk6Zyx0aGlzLmNvbXBvc2VyPWYuY29tcG9zZXIsdGhpcy5fZ2V0TGlua3MoXCJjb21tYW5kXCIpLHRoaXMuX2dldExpbmtzKFwiYWN0aW9uXCIpLHRoaXMuX29ic2VydmUoKSxoJiZ0aGlzLnNob3coKSxudWxsIT1mLmNvbmZpZy5jbGFzc05hbWVDb21tYW5kRGlzYWJsZWQmJihiPWYuY29uZmlnLmNsYXNzTmFtZUNvbW1hbmREaXNhYmxlZCksbnVsbCE9Zi5jb25maWcuY2xhc3NOYW1lQ29tbWFuZHNEaXNhYmxlZCYmKGM9Zi5jb25maWcuY2xhc3NOYW1lQ29tbWFuZHNEaXNhYmxlZCksbnVsbCE9Zi5jb25maWcuY2xhc3NOYW1lQ29tbWFuZEFjdGl2ZSYmKGQ9Zi5jb25maWcuY2xhc3NOYW1lQ29tbWFuZEFjdGl2ZSksbnVsbCE9Zi5jb25maWcuY2xhc3NOYW1lQWN0aW9uQWN0aXZlJiYoZT1mLmNvbmZpZy5jbGFzc05hbWVBY3Rpb25BY3RpdmUpO2Zvcih2YXIgaT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9aW5zZXJ0U3BlZWNoXVwiKSxqPWkubGVuZ3RoLGs9MDtqPms7aysrKW5ldyBhLnRvb2xiYXIuU3BlZWNoKHRoaXMsaVtrXSl9LF9nZXRMaW5rczpmdW5jdGlvbihiKXtmb3IodmFyIGMsZCxlLGYsZyxoPXRoaXNbYitcIkxpbmtzXCJdPWEubGFuZy5hcnJheSh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtd3lzaWh0bWw1LVwiK2IrXCJdXCIpKS5nZXQoKSxpPWgubGVuZ3RoLGo9MCxrPXRoaXNbYitcIk1hcHBpbmdcIl09e307aT5qO2orKyljPWhbal0sZT1jLmdldEF0dHJpYnV0ZShcImRhdGEtd3lzaWh0bWw1LVwiK2IpLGY9Yy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXd5c2lodG1sNS1cIitiK1wiLXZhbHVlXCIpLGQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIltkYXRhLXd5c2lodG1sNS1cIitiK1wiLWdyb3VwPSdcIitlK1wiJ11cIiksZz10aGlzLl9nZXREaWFsb2coYyxlKSxrW2UrXCI6XCIrZl09e2xpbms6Yyxncm91cDpkLG5hbWU6ZSx2YWx1ZTpmLGRpYWxvZzpnLHN0YXRlOiExfX0sX2dldERpYWxvZzpmdW5jdGlvbihiLGMpe3ZhciBkLGUsZj10aGlzLGc9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIltkYXRhLXd5c2lodG1sNS1kaWFsb2c9J1wiK2MrXCInXVwiKTtyZXR1cm4gZyYmKGQ9YS50b29sYmFyW1wiRGlhbG9nX1wiK2NdP25ldyBhLnRvb2xiYXJbXCJEaWFsb2dfXCIrY10oYixnKTpuZXcgYS50b29sYmFyLkRpYWxvZyhiLGcpLGQub24oXCJzaG93XCIsZnVuY3Rpb24oKXtlPWYuY29tcG9zZXIuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCksZi5lZGl0b3IuZmlyZShcInNob3c6ZGlhbG9nXCIse2NvbW1hbmQ6YyxkaWFsb2dDb250YWluZXI6Zyxjb21tYW5kTGluazpifSl9KSxkLm9uKFwic2F2ZVwiLGZ1bmN0aW9uKGEpe2UmJmYuY29tcG9zZXIuc2VsZWN0aW9uLnNldEJvb2ttYXJrKGUpLGYuX2V4ZWNDb21tYW5kKGMsYSksZi5lZGl0b3IuZmlyZShcInNhdmU6ZGlhbG9nXCIse2NvbW1hbmQ6YyxkaWFsb2dDb250YWluZXI6Zyxjb21tYW5kTGluazpifSl9KSxkLm9uKFwiY2FuY2VsXCIsZnVuY3Rpb24oKXtmLmVkaXRvci5mb2N1cyghMSksZi5lZGl0b3IuZmlyZShcImNhbmNlbDpkaWFsb2dcIix7Y29tbWFuZDpjLGRpYWxvZ0NvbnRhaW5lcjpnLGNvbW1hbmRMaW5rOmJ9KX0pKSxkfSxleGVjQ29tbWFuZDpmdW5jdGlvbihhLGIpe2lmKCF0aGlzLmNvbW1hbmRzRGlzYWJsZWQpe3ZhciBjPXRoaXMuY29tbWFuZE1hcHBpbmdbYStcIjpcIitiXTtjJiZjLmRpYWxvZyYmIWMuc3RhdGU/Yy5kaWFsb2cuc2hvdygpOnRoaXMuX2V4ZWNDb21tYW5kKGEsYil9fSxfZXhlY0NvbW1hbmQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmVkaXRvci5mb2N1cyghMSksdGhpcy5jb21wb3Nlci5jb21tYW5kcy5leGVjKGEsYiksdGhpcy5fdXBkYXRlTGlua1N0YXRlcygpfSxleGVjQWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWRpdG9yO1wiY2hhbmdlX3ZpZXdcIj09PWEmJmIudGV4dGFyZWEmJihiLmN1cnJlbnRWaWV3PT09Yi50ZXh0YXJlYT9iLmZpcmUoXCJjaGFuZ2Vfdmlld1wiLFwiY29tcG9zZXJcIik6Yi5maXJlKFwiY2hhbmdlX3ZpZXdcIixcInRleHRhcmVhXCIpKSxcInNob3dTb3VyY2VcIj09YSYmYi5maXJlKFwic2hvd1NvdXJjZVwiKX0sX29ic2VydmU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPXRoaXMuZWRpdG9yLGQ9dGhpcy5jb250YWluZXIsZT10aGlzLmNvbW1hbmRMaW5rcy5jb25jYXQodGhpcy5hY3Rpb25MaW5rcyksZz1lLmxlbmd0aCxoPTA7Zz5oO2grKylcIkFcIj09PWVbaF0ubm9kZU5hbWU/Zi5zZXRBdHRyaWJ1dGVzKHtocmVmOlwiamF2YXNjcmlwdDo7XCIsdW5zZWxlY3RhYmxlOlwib25cIn0pLm9uKGVbaF0pOmYuc2V0QXR0cmlidXRlcyh7dW5zZWxlY3RhYmxlOlwib25cIn0pLm9uKGVbaF0pO2YuZGVsZWdhdGUoZCxcIltkYXRhLXd5c2lodG1sNS1jb21tYW5kXSwgW2RhdGEtd3lzaWh0bWw1LWFjdGlvbl1cIixcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX0pLGYuZGVsZWdhdGUoZCxcIltkYXRhLXd5c2lodG1sNS1jb21tYW5kXVwiLFwiY2xpY2tcIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLGQ9Yy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXd5c2lodG1sNS1jb21tYW5kXCIpLGU9Yy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlXCIpO2EuZXhlY0NvbW1hbmQoZCxlKSxiLnByZXZlbnREZWZhdWx0KCl9KSxmLmRlbGVnYXRlKGQsXCJbZGF0YS13eXNpaHRtbDUtYWN0aW9uXVwiLFwiY2xpY2tcIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtd3lzaWh0bWw1LWFjdGlvblwiKTthLmV4ZWNBY3Rpb24oYyksYi5wcmV2ZW50RGVmYXVsdCgpfSksYi5vbihcImludGVyYWN0aW9uOmNvbXBvc2VyXCIsZnVuY3Rpb24oKXthLl91cGRhdGVMaW5rU3RhdGVzKCl9KSxiLm9uKFwiZm9jdXM6Y29tcG9zZXJcIixmdW5jdGlvbigpe2EuYm9va21hcms9bnVsbH0pLHRoaXMuZWRpdG9yLmNvbmZpZy5oYW5kbGVUYWJsZXMmJihiLm9uKFwidGFibGVzZWxlY3Q6Y29tcG9zZXJcIixmdW5jdGlvbigpe2EuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXd5c2lodG1sNS1oaWRkZW50b29scz1cInRhYmxlXCJdJylbMF0uc3R5bGUuZGlzcGxheT1cIlwifSksYi5vbihcInRhYmxldW5zZWxlY3Q6Y29tcG9zZXJcIixmdW5jdGlvbigpe2EuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXd5c2lodG1sNS1oaWRkZW50b29scz1cInRhYmxlXCJdJylbMF0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIn0pKSxiLm9uKFwiY2hhbmdlX3ZpZXdcIixmdW5jdGlvbihlKXtiLnRleHRhcmVhJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5jb21tYW5kc0Rpc2FibGVkPVwiY29tcG9zZXJcIiE9PWUsYS5fdXBkYXRlTGlua1N0YXRlcygpLGEuY29tbWFuZHNEaXNhYmxlZD9mLmFkZENsYXNzKGQsYyk6Zi5yZW1vdmVDbGFzcyhkLGMpfSwwKX0pfSxfdXBkYXRlTGlua1N0YXRlczpmdW5jdGlvbigpe3ZhciBjLGcsaCxpLGo9dGhpcy5jb21tYW5kTWFwcGluZyxrPXRoaXMuYWN0aW9uTWFwcGluZztmb3IoYyBpbiBqKWk9altjXSx0aGlzLmNvbW1hbmRzRGlzYWJsZWQ/KGc9ITEsZi5yZW1vdmVDbGFzcyhpLmxpbmssZCksaS5ncm91cCYmZi5yZW1vdmVDbGFzcyhpLmdyb3VwLGQpLGkuZGlhbG9nJiZpLmRpYWxvZy5oaWRlKCkpOihnPXRoaXMuY29tcG9zZXIuY29tbWFuZHMuc3RhdGUoaS5uYW1lLGkudmFsdWUpLGYucmVtb3ZlQ2xhc3MoaS5saW5rLGIpLGkuZ3JvdXAmJmYucmVtb3ZlQ2xhc3MoaS5ncm91cCxiKSksaS5zdGF0ZSE9PWcmJihpLnN0YXRlPWcsZz8oZi5hZGRDbGFzcyhpLmxpbmssZCksaS5ncm91cCYmZi5hZGRDbGFzcyhpLmdyb3VwLGQpLGkuZGlhbG9nJiYoXCJvYmplY3RcIj09dHlwZW9mIGd8fGEubGFuZy5vYmplY3QoZykuaXNBcnJheSgpPyghaS5kaWFsb2cubXVsdGlzZWxlY3QmJmEubGFuZy5vYmplY3QoZykuaXNBcnJheSgpJiYoZz0xPT09Zy5sZW5ndGg/Z1swXTohMCxpLnN0YXRlPWcpLGkuZGlhbG9nLnNob3coZykpOmkuZGlhbG9nLmhpZGUoKSkpOihmLnJlbW92ZUNsYXNzKGkubGluayxkKSxpLmdyb3VwJiZmLnJlbW92ZUNsYXNzKGkuZ3JvdXAsZCksaS5kaWFsb2cmJmkuZGlhbG9nLmhpZGUoKSkpO2ZvcihjIGluIGspaD1rW2NdLFwiY2hhbmdlX3ZpZXdcIj09PWgubmFtZSYmKGguc3RhdGU9dGhpcy5lZGl0b3IuY3VycmVudFZpZXc9PT10aGlzLmVkaXRvci50ZXh0YXJlYSxoLnN0YXRlP2YuYWRkQ2xhc3MoaC5saW5rLGUpOmYucmVtb3ZlQ2xhc3MoaC5saW5rLGUpKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJcIn0saGlkZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJub25lXCJ9fSl9KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7YS50b29sYmFyLkRpYWxvZ19jcmVhdGVUYWJsZT1hLnRvb2xiYXIuRGlhbG9nLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhKXt0aGlzLmJhc2UoYSl9fSl9KHd5c2lodG1sNSksZnVuY3Rpb24oYSl7dmFyIGI9KGEuZG9tLFwiW2RhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZF1cIiksYz1cImRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZFwiO2EudG9vbGJhci5EaWFsb2dfZm9yZUNvbG9yU3R5bGU9YS50b29sYmFyLkRpYWxvZy5leHRlbmQoe211bHRpc2VsZWN0OiEwLF9zZXJpYWxpemU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9e30sZD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGIpLGU9ZC5sZW5ndGgsZj0wO2U+ZjtmKyspYVtkW2ZdLmdldEF0dHJpYnV0ZShjKV09ZFtmXS52YWx1ZTtyZXR1cm4gYX0sX2ludGVycG9sYXRlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgZSxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6Zm9jdXNcIiksZz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGIpLGg9Zy5sZW5ndGgsaT0wLGo9dGhpcy5lbGVtZW50VG9DaGFuZ2U/YS5sYW5nLm9iamVjdCh0aGlzLmVsZW1lbnRUb0NoYW5nZSkuaXNBcnJheSgpP3RoaXMuZWxlbWVudFRvQ2hhbmdlWzBdOnRoaXMuZWxlbWVudFRvQ2hhbmdlOm51bGwsaz1qP2ouZ2V0QXR0cmlidXRlKFwic3R5bGVcIik6bnVsbCxsPWs/YS5xdWlya3Muc3R5bGVQYXJzZXIucGFyc2VDb2xvcihrLFwiY29sb3JcIik6bnVsbDtoPmk7aSsrKWU9Z1tpXSxlIT09ZiYmKGQmJlwiaGlkZGVuXCI9PT1lLnR5cGV8fFwiY29sb3JcIj09PWUuZ2V0QXR0cmlidXRlKGMpJiYoZS52YWx1ZT1sP2xbM10mJjEhPWxbM10/XCJyZ2JhKFwiK2xbMF0rXCIsXCIrbFsxXStcIixcIitsWzJdK1wiLFwiK2xbM10rXCIpO1wiOlwicmdiKFwiK2xbMF0rXCIsXCIrbFsxXStcIixcIitsWzJdK1wiKTtcIjpcInJnYigwLDAsMCk7XCIpKX19KX0od3lzaWh0bWw1KSxmdW5jdGlvbihhKXthLmRvbTthLnRvb2xiYXIuRGlhbG9nX2ZvbnRTaXplU3R5bGU9YS50b29sYmFyLkRpYWxvZy5leHRlbmQoe211bHRpc2VsZWN0OiEwLF9zZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTp0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkPVwic2l6ZVwiXScpLnZhbHVlfX0sX2ludGVycG9sYXRlOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIjpmb2N1c1wiKSxjPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkPSdzaXplJ11cIiksZD10aGlzLmVsZW1lbnRUb0NoYW5nZT9hLmxhbmcub2JqZWN0KHRoaXMuZWxlbWVudFRvQ2hhbmdlKS5pc0FycmF5KCk/dGhpcy5lbGVtZW50VG9DaGFuZ2VbMF06dGhpcy5lbGVtZW50VG9DaGFuZ2U6bnVsbCxlPWQ/ZC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTpudWxsLGY9ZT9hLnF1aXJrcy5zdHlsZVBhcnNlci5wYXJzZUZvbnRTaXplKGUpOm51bGw7YyYmYyE9PWImJmYmJiEvXlxccyokLy50ZXN0KGYpJiYoYy52YWx1ZT1mKX19KX0od3lzaWh0bWw1KSxIYW5kbGViYXJzPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGEpe3RoaXMuc3RyaW5nPWF9dmFyIGI7cmV0dXJuIGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIit0aGlzLnN0cmluZ30sYj1hfSgpLGI9ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhKXtyZXR1cm4ga1thXXx8XCImYW1wO1wifWZ1bmN0aW9uIGMoYSxiKXtmb3IodmFyIGMgaW4gYilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixjKSYmKGFbY109YltjXSl9ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGo/XCJcIithOmF8fDA9PT1hPyhhPVwiXCIrYSxtLnRlc3QoYSk/YS5yZXBsYWNlKGwsYik6YSk6XCJcIn1mdW5jdGlvbiBlKGEpe3JldHVybiBhfHwwPT09YT9oKGEpJiYwPT09YS5sZW5ndGg/ITA6ITE6ITB9dmFyIGYsZyxoLGk9e30saj1hLGs9e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImI3gyNztcIixcImBcIjpcIiYjeDYwO1wifSxsPS9bJjw+XCInYF0vZyxtPS9bJjw+XCInYF0vO3JldHVybiBpLmV4dGVuZD1jLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpLnRvU3RyaW5nPWYsZz1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfSxnKC94LykmJihnPWZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJlwiW29iamVjdCBGdW5jdGlvbl1cIj09PWYuY2FsbChhKX0pLGkuaXNGdW5jdGlvbj1nLGg9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhP1wiW29iamVjdCBBcnJheV1cIj09PWYuY2FsbChhKTohMX0saS5pc0FycmF5PWgsaS5lc2NhcGVFeHByZXNzaW9uPWQsaS5pc0VtcHR5PWUsaX0oYSksYz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoYSxiKXt2YXIgZCxlLGY7Zm9yKGImJmIuZmlyc3RMaW5lJiYoZD1iLmZpcnN0TGluZSxhKz1cIiAtIFwiK2QrXCI6XCIrYi5maXJzdENvbHVtbiksZT1FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpLGY9MDtmPGMubGVuZ3RoO2YrKyl0aGlzW2NbZl1dPWVbY1tmXV07ZCYmKHRoaXMubGluZU51bWJlcj1kLHRoaXMuY29sdW1uPWIuZmlyc3RDb2x1bW4pfXZhciBiLGM9W1wiZGVzY3JpcHRpb25cIixcImZpbGVOYW1lXCIsXCJsaW5lTnVtYmVyXCIsXCJtZXNzYWdlXCIsXCJuYW1lXCIsXCJudW1iZXJcIixcInN0YWNrXCJdO3JldHVybiBhLnByb3RvdHlwZT1FcnJvcigpLGI9YX0oKSxkPWZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYyhhLGIpe3RoaXMuaGVscGVycz1hfHx7fSx0aGlzLnBhcnRpYWxzPWJ8fHt9LGQodGhpcyl9ZnVuY3Rpb24gZChhKXthLnJlZ2lzdGVySGVscGVyKFwiaGVscGVyTWlzc2luZ1wiLGZ1bmN0aW9uKGEpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA7dGhyb3cgbmV3IHAoXCJNaXNzaW5nIGhlbHBlcjogJ1wiK2ErXCInXCIpfSksYS5yZWdpc3RlckhlbHBlcihcImJsb2NrSGVscGVyTWlzc2luZ1wiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yy5pbnZlcnNlfHxmdW5jdGlvbigpe30sZT1jLmZuO3JldHVybiBpKGIpJiYoYj1iLmNhbGwodGhpcykpLGI9PT0hMD9lKHRoaXMpOmI9PT0hMXx8bnVsbD09Yj9kKHRoaXMpOmgoYik/Yi5sZW5ndGg+MD9hLmhlbHBlcnMuZWFjaChiLGMpOmQodGhpcyk6ZShiKX0pLGEucmVnaXN0ZXJIZWxwZXIoXCJlYWNoXCIsZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1iLmZuLGc9Yi5pbnZlcnNlLGo9MCxrPVwiXCI7aWYoaShhKSYmKGE9YS5jYWxsKHRoaXMpKSxiLmRhdGEmJihjPW0oYi5kYXRhKSksYSYmXCJvYmplY3RcIj09dHlwZW9mIGEpaWYoaChhKSlmb3IoZD1hLmxlbmd0aDtkPmo7aisrKWMmJihjLmluZGV4PWosYy5maXJzdD0wPT09aixjLmxhc3Q9aj09PWEubGVuZ3RoLTEpLGsrPWYoYVtqXSx7ZGF0YTpjfSk7ZWxzZSBmb3IoZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJihjJiYoYy5rZXk9ZSxjLmluZGV4PWosYy5maXJzdD0wPT09aiksays9ZihhW2VdLHtkYXRhOmN9KSxqKyspO3JldHVybiAwPT09aiYmKGs9Zyh0aGlzKSksa30pLGEucmVnaXN0ZXJIZWxwZXIoXCJpZlwiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGkoYSkmJihhPWEuY2FsbCh0aGlzKSksIWIuaGFzaC5pbmNsdWRlWmVybyYmIWF8fG8uaXNFbXB0eShhKT9iLmludmVyc2UodGhpcyk6Yi5mbih0aGlzKX0pLGEucmVnaXN0ZXJIZWxwZXIoXCJ1bmxlc3NcIixmdW5jdGlvbihiLGMpe3JldHVybiBhLmhlbHBlcnNbXCJpZlwiXS5jYWxsKHRoaXMsYix7Zm46Yy5pbnZlcnNlLGludmVyc2U6Yy5mbixoYXNoOmMuaGFzaH0pfSksYS5yZWdpc3RlckhlbHBlcihcIndpdGhcIixmdW5jdGlvbihhLGIpe3JldHVybiBpKGEpJiYoYT1hLmNhbGwodGhpcykpLG8uaXNFbXB0eShhKT92b2lkIDA6Yi5mbihhKX0pLGEucmVnaXN0ZXJIZWxwZXIoXCJsb2dcIixmdW5jdGlvbihiLGMpe3ZhciBkPWMuZGF0YSYmbnVsbCE9Yy5kYXRhLmxldmVsP3BhcnNlSW50KGMuZGF0YS5sZXZlbCwxMCk6MTthLmxvZyhkLGIpfSl9ZnVuY3Rpb24gZShhLGIpe2wubG9nKGEsYil9dmFyIGYsZyxoLGksaixrLGwsbSxuPXt9LG89YSxwPWIscT1cIjEuMy4wXCI7cmV0dXJuIG4uVkVSU0lPTj1xLGY9NCxuLkNPTVBJTEVSX1JFVklTSU9OPWYsZz17MTpcIjw9IDEuMC5yYy4yXCIsMjpcIj09IDEuMC4wLXJjLjNcIiwzOlwiPT0gMS4wLjAtcmMuNFwiLDQ6XCI+PSAxLjAuMFwifSxuLlJFVklTSU9OX0NIQU5HRVM9ZyxoPW8uaXNBcnJheSxpPW8uaXNGdW5jdGlvbixqPW8udG9TdHJpbmcsaz1cIltvYmplY3QgT2JqZWN0XVwiLG4uSGFuZGxlYmFyc0Vudmlyb25tZW50PWMsYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmMsbG9nZ2VyOmwsbG9nOmUscmVnaXN0ZXJIZWxwZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKGouY2FsbChhKT09PWspe2lmKGN8fGIpdGhyb3cgbmV3IHAoXCJBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnNcIik7by5leHRlbmQodGhpcy5oZWxwZXJzLGEpfWVsc2UgYyYmKGIubm90PWMpLHRoaXMuaGVscGVyc1thXT1ifSxyZWdpc3RlclBhcnRpYWw6ZnVuY3Rpb24oYSxiKXtqLmNhbGwoYSk9PT1rP28uZXh0ZW5kKHRoaXMucGFydGlhbHMsYSk6dGhpcy5wYXJ0aWFsc1thXT1ifX0sbD17bWV0aG9kTWFwOnswOlwiZGVidWdcIiwxOlwiaW5mb1wiLDI6XCJ3YXJuXCIsMzpcImVycm9yXCJ9LERFQlVHOjAsSU5GTzoxLFdBUk46MixFUlJPUjozLGxldmVsOjMsbG9nOmZ1bmN0aW9uKGEsYil7aWYobC5sZXZlbDw9YSl7dmFyIGM9bC5tZXRob2RNYXBbYV07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGVbY10mJmNvbnNvbGVbY10uY2FsbChjb25zb2xlLGIpfX19LG4ubG9nZ2VyPWwsbi5sb2c9ZSxtPWZ1bmN0aW9uKGEpe3ZhciBiPXt9O3JldHVybiBvLmV4dGVuZChiLGEpLGJ9LG4uY3JlYXRlRnJhbWU9bSxufShiLGMpLGU9ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGIsYyxkPWEmJmFbMF18fDEsZT1tO2lmKGQhPT1lKXtpZihlPmQpdGhyb3cgYj1uW2VdLGM9bltkXSxuZXcgbChcIlRlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuIFBsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKFwiK2IrXCIpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoXCIrYytcIikuXCIpO3Rocm93IG5ldyBsKFwiVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiBQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKFwiK2FbMV0rXCIpLlwiKX19ZnVuY3Rpb24gZShhLGIpe2lmKCFiKXRocm93IG5ldyBsKFwiTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlXCIpO3ZhciBjPWZ1bmN0aW9uKGEsYyxkLGUsZixnKXt2YXIgaCxpPWIuVk0uaW52b2tlUGFydGlhbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobnVsbCE9aSlyZXR1cm4gaTtpZihiLmNvbXBpbGUpcmV0dXJuIGg9e2hlbHBlcnM6ZSxwYXJ0aWFsczpmLGRhdGE6Z30sZltjXT1iLmNvbXBpbGUoYSx7ZGF0YTp2b2lkIDAhPT1nfSxiKSxmW2NdKGQsaCk7dGhyb3cgbmV3IGwoXCJUaGUgcGFydGlhbCBcIitjK1wiIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGVcIil9LGQ9e2VzY2FwZUV4cHJlc3Npb246ay5lc2NhcGVFeHByZXNzaW9uLGludm9rZVBhcnRpYWw6Yyxwcm9ncmFtczpbXSxwcm9ncmFtOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnByb2dyYW1zW2FdO3JldHVybiBjP2Q9ZyhhLGIsYyk6ZHx8KGQ9dGhpcy5wcm9ncmFtc1thXT1nKGEsYikpLGR9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9YXx8YjtyZXR1cm4gYSYmYiYmYSE9PWImJihjPXt9LGsuZXh0ZW5kKGMsYiksay5leHRlbmQoYyxhKSksY30scHJvZ3JhbVdpdGhEZXB0aDpiLlZNLnByb2dyYW1XaXRoRGVwdGgsbm9vcDpiLlZNLm5vb3AsY29tcGlsZXJJbmZvOm51bGx9O3JldHVybiBmdW5jdGlvbihjLGUpe3ZhciBmLGcsaCxpO3JldHVybiBlPWV8fHt9LGg9ZS5wYXJ0aWFsP2U6YixlLnBhcnRpYWx8fChmPWUuaGVscGVycyxnPWUucGFydGlhbHMpLGk9YS5jYWxsKGQsaCxjLGYsZyxlLmRhdGEpLGUucGFydGlhbHx8Yi5WTS5jaGVja1JldmlzaW9uKGQuY29tcGlsZXJJbmZvKSxpfX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyksZT1mdW5jdGlvbihhLGUpe3JldHVybiBlPWV8fHt9LGIuYXBwbHkodGhpcyxbYSxlLmRhdGF8fGNdLmNvbmNhdChkKSl9O3JldHVybiBlLnByb2dyYW09YSxlLmRlcHRoPWQubGVuZ3RoLGV9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSxkKXtyZXR1cm4gZD1kfHx7fSxiKGEsZC5kYXRhfHxjKX07cmV0dXJuIGQucHJvZ3JhbT1hLGQuZGVwdGg9MCxkfWZ1bmN0aW9uIGgoYSxiLGMsZCxlLGYpe3ZhciBnPXtwYXJ0aWFsOiEwLGhlbHBlcnM6ZCxwYXJ0aWFsczplLGRhdGE6Zn07aWYodm9pZCAwPT09YSl0aHJvdyBuZXcgbChcIlRoZSBwYXJ0aWFsIFwiK2IrXCIgY291bGQgbm90IGJlIGZvdW5kXCIpO3JldHVybiBhIGluc3RhbmNlb2YgRnVuY3Rpb24/YShjLGcpOnZvaWQgMH1mdW5jdGlvbiBpKCl7cmV0dXJuXCJcIn12YXIgaj17fSxrPWEsbD1iLG09Yy5DT01QSUxFUl9SRVZJU0lPTixuPWMuUkVWSVNJT05fQ0hBTkdFUztyZXR1cm4gai5jaGVja1JldmlzaW9uPWQsai50ZW1wbGF0ZT1lLGoucHJvZ3JhbVdpdGhEZXB0aD1mLGoucHJvZ3JhbT1nLGouaW52b2tlUGFydGlhbD1oLGoubm9vcD1pLGp9KGIsYyxkKSxmPWZ1bmN0aW9uKGEsYixjLGQsZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGYsZz1hLGg9YixpPWMsaj1kLGs9ZSxsPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGcuSGFuZGxlYmFyc0Vudmlyb25tZW50O3JldHVybiBqLmV4dGVuZChhLGcpLGEuU2FmZVN0cmluZz1oLGEuRXhjZXB0aW9uPWksYS5VdGlscz1qLGEuVk09ayxhLnRlbXBsYXRlPWZ1bmN0aW9uKGIpe3JldHVybiBrLnRlbXBsYXRlKGIsYSl9LGF9LG09bCgpO3JldHVybiBtLmNyZWF0ZT1sLGY9bX0oZCxhLGMsYixlKTtyZXR1cm4gZn0oKSx0aGlzLnd5c2lodG1sNT10aGlzLnd5c2lodG1sNXx8e30sdGhpcy53eXNpaHRtbDUudHBsPXRoaXMud3lzaWh0bWw1LnRwbHx8e30sdGhpcy53eXNpaHRtbDUudHBsLmJsb2NrcXVvdGU9SGFuZGxlYmFycy50ZW1wbGF0ZShmdW5jdGlvbihhLGIsYyxkLGUpe2Z1bmN0aW9uIGYoYSl7dmFyIGIsYz1cIlwiO3JldHVybiBjKz1cImJ0bi1cIitsKChiPWEmJmEub3B0aW9ucyxiPW51bGw9PWJ8fGI9PT0hMT9iOmIudG9vbGJhcixiPW51bGw9PWJ8fGI9PT0hMT9iOmIuc2l6ZSx0eXBlb2YgYj09PWs/Yi5hcHBseShhKTpiKSksY31mdW5jdGlvbiBnKCl7cmV0dXJuJyBcXG4gICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXF1b3RlLWxlZnRcIj48L3NwYW4+XFxuICAgICd9ZnVuY3Rpb24gaCgpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcXVvdGVcIj48L3NwYW4+XFxuICAgICd9dGhpcy5jb21waWxlckluZm89WzQsXCI+PSAxLjAuMFwiXSxjPXRoaXMubWVyZ2UoYyxhLmhlbHBlcnMpLGU9ZXx8e307dmFyIGksaj1cIlwiLGs9XCJmdW5jdGlvblwiLGw9dGhpcy5lc2NhcGVFeHByZXNzaW9uLG09dGhpcztyZXR1cm4gais9JzxsaT5cXG4gIDxhIGNsYXNzPVwiYnRuICcsaT1jW1wiaWZcIl0uY2FsbChiLChpPWImJmIub3B0aW9ucyxpPW51bGw9PWl8fGk9PT0hMT9pOmkudG9vbGJhcixudWxsPT1pfHxpPT09ITE/aTppLnNpemUpLHtoYXNoOnt9LGludmVyc2U6bS5ub29wLGZuOm0ucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGl8fDA9PT1pKSYmKGorPWkpLGorPScgYnRuLWRlZmF1bHRcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9ybWF0QmxvY2tcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiYmxvY2txdW90ZVwiIGRhdGEtd3lzaWh0bWw1LWRpc3BsYXktZm9ybWF0LW5hbWU9XCJmYWxzZVwiIHRhYmluZGV4PVwiLTFcIj5cXG4gICAgJyxpPWNbXCJpZlwiXS5jYWxsKGIsKGk9YiYmYi5vcHRpb25zLGk9bnVsbD09aXx8aT09PSExP2k6aS50b29sYmFyLG51bGw9PWl8fGk9PT0hMT9pOmkuZmEpLHtoYXNoOnt9LGludmVyc2U6bS5wcm9ncmFtKDUsaCxlKSxmbjptLnByb2dyYW0oMyxnLGUpLGRhdGE6ZX0pLChpfHwwPT09aSkmJihqKz1pKSxqKz1cIlxcbiAgPC9hPlxcbjwvbGk+XFxuXCIsan0pLHRoaXMud3lzaWh0bWw1LnRwbC5jb2xvcj1IYW5kbGViYXJzLnRlbXBsYXRlKGZ1bmN0aW9uKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihhKXt2YXIgYixjPVwiXCI7cmV0dXJuIGMrPVwiYnRuLVwiK2ooKGI9YSYmYS5vcHRpb25zLGI9bnVsbD09Ynx8Yj09PSExP2I6Yi50b29sYmFyLGI9bnVsbD09Ynx8Yj09PSExP2I6Yi5zaXplLHR5cGVvZiBiPT09aT9iLmFwcGx5KGEpOmIpKSxjfXRoaXMuY29tcGlsZXJJbmZvPVs0LFwiPj0gMS4wLjBcIl0sYz10aGlzLm1lcmdlKGMsYS5oZWxwZXJzKSxlPWV8fHt9O3ZhciBnLGg9XCJcIixpPVwiZnVuY3Rpb25cIixqPXRoaXMuZXNjYXBlRXhwcmVzc2lvbixrPXRoaXM7cmV0dXJuIGgrPSc8bGkgY2xhc3M9XCJkcm9wZG93blwiPlxcbiAgPGEgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlICcsZz1jW1wiaWZcIl0uY2FsbChiLChnPWImJmIub3B0aW9ucyxnPW51bGw9PWd8fGc9PT0hMT9nOmcudG9vbGJhcixudWxsPT1nfHxnPT09ITE/ZzpnLnNpemUpLHtoYXNoOnt9LGludmVyc2U6ay5ub29wLGZuOmsucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGd8fDA9PT1nKSYmKGgrPWcpLGgrPSdcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgdGFiaW5kZXg9XCItMVwiPlxcbiAgICA8c3BhbiBjbGFzcz1cImN1cnJlbnQtY29sb3JcIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmJsYWNrLHR5cGVvZiBnPT09aT9nLmFwcGx5KGIpOmcpKSsnPC9zcGFuPlxcbiAgICA8YiBjbGFzcz1cImNhcmV0XCI+PC9iPlxcbiAgPC9hPlxcbiAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiYmxhY2tcIj48L2Rpdj48YSBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnMtdGl0bGVcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9yZUNvbG9yXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT1cImJsYWNrXCI+JytqKChnPWImJmIubG9jYWxlLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5jb2xvdXJzLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5ibGFjayx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwic2lsdmVyXCI+PC9kaXY+PGEgY2xhc3M9XCJ3eXNpaHRtbDUtY29sb3JzLXRpdGxlXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJzaWx2ZXJcIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLnNpbHZlcix0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiZ3JheVwiPjwvZGl2PjxhIGNsYXNzPVwid3lzaWh0bWw1LWNvbG9ycy10aXRsZVwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJmb3JlQ29sb3JcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiZ3JheVwiPicraigoZz1iJiZiLmxvY2FsZSxnPW51bGw9PWd8fGc9PT0hMT9nOmcuY29sb3VycyxnPW51bGw9PWd8fGc9PT0hMT9nOmcuZ3JheSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwibWFyb29uXCI+PC9kaXY+PGEgY2xhc3M9XCJ3eXNpaHRtbDUtY29sb3JzLXRpdGxlXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJtYXJvb25cIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLm1hcm9vbix0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwicmVkXCI+PC9kaXY+PGEgY2xhc3M9XCJ3eXNpaHRtbDUtY29sb3JzLXRpdGxlXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJyZWRcIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLnJlZCx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwicHVycGxlXCI+PC9kaXY+PGEgY2xhc3M9XCJ3eXNpaHRtbDUtY29sb3JzLXRpdGxlXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJwdXJwbGVcIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLnB1cnBsZSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiZ3JlZW5cIj48L2Rpdj48YSBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnMtdGl0bGVcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9yZUNvbG9yXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT1cImdyZWVuXCI+JytqKChnPWImJmIubG9jYWxlLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5jb2xvdXJzLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5ncmVlbix0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwib2xpdmVcIj48L2Rpdj48YSBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnMtdGl0bGVcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9yZUNvbG9yXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT1cIm9saXZlXCI+JytqKChnPWImJmIubG9jYWxlLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5jb2xvdXJzLGc9bnVsbD09Z3x8Zz09PSExP2c6Zy5vbGl2ZSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwibmF2eVwiPjwvZGl2PjxhIGNsYXNzPVwid3lzaWh0bWw1LWNvbG9ycy10aXRsZVwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJmb3JlQ29sb3JcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwibmF2eVwiPicraigoZz1iJiZiLmxvY2FsZSxnPW51bGw9PWd8fGc9PT0hMT9nOmcuY29sb3VycyxnPW51bGw9PWd8fGc9PT0hMT9nOmcubmF2eSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiYmx1ZVwiPjwvZGl2PjxhIGNsYXNzPVwid3lzaWh0bWw1LWNvbG9ycy10aXRsZVwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJmb3JlQ29sb3JcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiYmx1ZVwiPicraigoZz1iJiZiLmxvY2FsZSxnPW51bGw9PWd8fGc9PT0hMT9nOmcuY29sb3VycyxnPW51bGw9PWd8fGc9PT0hMT9nOmcuYmx1ZSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGRpdiBjbGFzcz1cInd5c2lodG1sNS1jb2xvcnNcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwib3JhbmdlXCI+PC9kaXY+PGEgY2xhc3M9XCJ3eXNpaHRtbDUtY29sb3JzLXRpdGxlXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJvcmFuZ2VcIj4nK2ooKGc9YiYmYi5sb2NhbGUsZz1udWxsPT1nfHxnPT09ITE/ZzpnLmNvbG91cnMsZz1udWxsPT1nfHxnPT09ITE/ZzpnLm9yYW5nZSx0eXBlb2YgZz09PWk/Zy5hcHBseShiKTpnKSkrXCI8L2E+PC9saT5cXG4gIDwvdWw+XFxuPC9saT5cXG5cIixofSksdGhpcy53eXNpaHRtbDUudHBsLmVtcGhhc2lzPUhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3ZhciBiLGM9XCJcIjtyZXR1cm4gYys9XCJidG4tXCIraygoYj1hJiZhLm9wdGlvbnMsYj1udWxsPT1ifHxiPT09ITE/YjpiLnRvb2xiYXIsYj1udWxsPT1ifHxiPT09ITE/YjpiLnNpemUsdHlwZW9mIGI9PT1qP2IuYXBwbHkoYSk6YikpLGN9ZnVuY3Rpb24gZyhhLGIpe3ZhciBkLGU9XCJcIjtyZXR1cm4gZSs9J1xcbiAgICA8YSBjbGFzcz1cImJ0biAnLGQ9Y1tcImlmXCJdLmNhbGwoYSwoZD1hJiZhLm9wdGlvbnMsZD1udWxsPT1kfHxkPT09ITE/ZDpkLnRvb2xiYXIsbnVsbD09ZHx8ZD09PSExP2Q6ZC5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOmwubm9vcCxmbjpsLnByb2dyYW0oMSxmLGIpLGRhdGE6Yn0pLChkfHwwPT09ZCkmJihlKz1kKSxlKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cInNtYWxsXCIgdGl0bGU9XCJDVFJMK1NcIiB0YWJpbmRleD1cIi0xXCI+JytrKChkPWEmJmEubG9jYWxlLGQ9bnVsbD09ZHx8ZD09PSExP2Q6ZC5lbXBoYXNpcyxkPW51bGw9PWR8fGQ9PT0hMT9kOmQuc21hbGwsdHlwZW9mIGQ9PT1qP2QuYXBwbHkoYSk6ZCkpK1wiPC9hPlxcbiAgICBcIixlfXRoaXMuY29tcGlsZXJJbmZvPVs0LFwiPj0gMS4wLjBcIl0sYz10aGlzLm1lcmdlKGMsYS5oZWxwZXJzKSxlPWV8fHt9O3ZhciBoLGk9XCJcIixqPVwiZnVuY3Rpb25cIixrPXRoaXMuZXNjYXBlRXhwcmVzc2lvbixsPXRoaXM7cmV0dXJuIGkrPSc8bGk+XFxuICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XFxuICAgIDxhIGNsYXNzPVwiYnRuICcsaD1jW1wiaWZcIl0uY2FsbChiLChoPWImJmIub3B0aW9ucyxoPW51bGw9PWh8fGg9PT0hMT9oOmgudG9vbGJhcixudWxsPT1ofHxoPT09ITE/aDpoLnNpemUpLHtoYXNoOnt9LGludmVyc2U6bC5ub29wLGZuOmwucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGh8fDA9PT1oKSYmKGkrPWgpLGkrPScgYnRuLWRlZmF1bHRcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiYm9sZFwiIHRpdGxlPVwiQ1RSTCtCXCIgdGFiaW5kZXg9XCItMVwiPicraygoaD1iJiZiLmxvY2FsZSxoPW51bGw9PWh8fGg9PT0hMT9oOmguZW1waGFzaXMsaD1udWxsPT1ofHxoPT09ITE/aDpoLmJvbGQsdHlwZW9mIGg9PT1qP2guYXBwbHkoYik6aCkpKyc8L2E+XFxuICAgIDxhIGNsYXNzPVwiYnRuICcsaD1jW1wiaWZcIl0uY2FsbChiLChoPWImJmIub3B0aW9ucyxoPW51bGw9PWh8fGg9PT0hMT9oOmgudG9vbGJhcixudWxsPT1ofHxoPT09ITE/aDpoLnNpemUpLHtoYXNoOnt9LGludmVyc2U6bC5ub29wLGZuOmwucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGh8fDA9PT1oKSYmKGkrPWgpLGkrPScgYnRuLWRlZmF1bHRcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiaXRhbGljXCIgdGl0bGU9XCJDVFJMK0lcIiB0YWJpbmRleD1cIi0xXCI+JytrKChoPWImJmIubG9jYWxlLGg9bnVsbD09aHx8aD09PSExP2g6aC5lbXBoYXNpcyxoPW51bGw9PWh8fGg9PT0hMT9oOmguaXRhbGljLHR5cGVvZiBoPT09aj9oLmFwcGx5KGIpOmgpKSsnPC9hPlxcbiAgICA8YSBjbGFzcz1cImJ0biAnLGg9Y1tcImlmXCJdLmNhbGwoYiwoaD1iJiZiLm9wdGlvbnMsaD1udWxsPT1ofHxoPT09ITE/aDpoLnRvb2xiYXIsbnVsbD09aHx8aD09PSExP2g6aC5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOmwubm9vcCxmbjpsLnByb2dyYW0oMSxmLGUpLGRhdGE6ZX0pLChofHwwPT09aCkmJihpKz1oKSxpKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cInVuZGVybGluZVwiIHRpdGxlPVwiQ1RSTCtVXCIgdGFiaW5kZXg9XCItMVwiPicraygoaD1iJiZiLmxvY2FsZSxoPW51bGw9PWh8fGg9PT0hMT9oOmguZW1waGFzaXMsaD1udWxsPT1ofHxoPT09ITE/aDpoLnVuZGVybGluZSx0eXBlb2YgaD09PWo/aC5hcHBseShiKTpoKSkrXCI8L2E+XFxuICAgIFwiLGg9Y1tcImlmXCJdLmNhbGwoYiwoaD1iJiZiLm9wdGlvbnMsaD1udWxsPT1ofHxoPT09ITE/aDpoLnRvb2xiYXIsaD1udWxsPT1ofHxoPT09ITE/aDpoLmVtcGhhc2lzLG51bGw9PWh8fGg9PT0hMT9oOmguc21hbGwpLHtoYXNoOnt9LGludmVyc2U6bC5ub29wLGZuOmwucHJvZ3JhbSgzLGcsZSksZGF0YTplfSksKGh8fDA9PT1oKSYmKGkrPWgpLGkrPVwiXFxuICA8L2Rpdj5cXG48L2xpPlxcblwiLGlcbn0pLHRoaXMud3lzaWh0bWw1LnRwbFtcImZvbnQtc3R5bGVzXCJdPUhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3ZhciBiLGM9XCJcIjtyZXR1cm4gYys9XCJidG4tXCIrbCgoYj1hJiZhLm9wdGlvbnMsYj1udWxsPT1ifHxiPT09ITE/YjpiLnRvb2xiYXIsYj1udWxsPT1ifHxiPT09ITE/YjpiLnNpemUsdHlwZW9mIGI9PT1rP2IuYXBwbHkoYSk6YikpLGN9ZnVuY3Rpb24gZygpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZvbnRcIj48L3NwYW4+XFxuICAgICd9ZnVuY3Rpb24gaCgpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tZm9udFwiPjwvc3Bhbj5cXG4gICAgJ310aGlzLmNvbXBpbGVySW5mbz1bNCxcIj49IDEuMC4wXCJdLGM9dGhpcy5tZXJnZShjLGEuaGVscGVycyksZT1lfHx7fTt2YXIgaSxqPVwiXCIsaz1cImZ1bmN0aW9uXCIsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sbT10aGlzO3JldHVybiBqKz0nPGxpIGNsYXNzPVwiZHJvcGRvd25cIj5cXG4gIDxhIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGRyb3Bkb3duLXRvZ2dsZSAnLGk9Y1tcImlmXCJdLmNhbGwoYiwoaT1iJiZiLm9wdGlvbnMsaT1udWxsPT1pfHxpPT09ITE/aTppLnRvb2xiYXIsbnVsbD09aXx8aT09PSExP2k6aS5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOm0ubm9vcCxmbjptLnByb2dyYW0oMSxmLGUpLGRhdGE6ZX0pLChpfHwwPT09aSkmJihqKz1pKSxqKz0nXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiPlxcbiAgICAnLGk9Y1tcImlmXCJdLmNhbGwoYiwoaT1iJiZiLm9wdGlvbnMsaT1udWxsPT1pfHxpPT09ITE/aTppLnRvb2xiYXIsbnVsbD09aXx8aT09PSExP2k6aS5mYSkse2hhc2g6e30saW52ZXJzZTptLnByb2dyYW0oNSxoLGUpLGZuOm0ucHJvZ3JhbSgzLGcsZSksZGF0YTplfSksKGl8fDA9PT1pKSYmKGorPWkpLGorPSdcXG4gICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LWZvbnRcIj4nK2woKGk9YiYmYi5sb2NhbGUsaT1udWxsPT1pfHxpPT09ITE/aTppLmZvbnRfc3R5bGVzLGk9bnVsbD09aXx8aT09PSExP2k6aS5ub3JtYWwsdHlwZW9mIGk9PT1rP2kuYXBwbHkoYik6aSkpKyc8L3NwYW4+XFxuICAgIDxiIGNsYXNzPVwiY2FyZXRcIj48L2I+XFxuICA8L2E+XFxuICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XFxuICAgIDxsaT48YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9ybWF0QmxvY2tcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwicFwiIHRhYmluZGV4PVwiLTFcIj4nK2woKGk9YiYmYi5sb2NhbGUsaT1udWxsPT1pfHxpPT09ITE/aTppLmZvbnRfc3R5bGVzLGk9bnVsbD09aXx8aT09PSExP2k6aS5ub3JtYWwsdHlwZW9mIGk9PT1rP2kuYXBwbHkoYik6aSkpKyc8L2E+PC9saT5cXG4gICAgPGxpPjxhIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJmb3JtYXRCbG9ja1wiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJoMVwiIHRhYmluZGV4PVwiLTFcIj4nK2woKGk9YiYmYi5sb2NhbGUsaT1udWxsPT1pfHxpPT09ITE/aTppLmZvbnRfc3R5bGVzLGk9bnVsbD09aXx8aT09PSExP2k6aS5oMSx0eXBlb2YgaT09PWs/aS5hcHBseShiKTppKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcm1hdEJsb2NrXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT1cImgyXCIgdGFiaW5kZXg9XCItMVwiPicrbCgoaT1iJiZiLmxvY2FsZSxpPW51bGw9PWl8fGk9PT0hMT9pOmkuZm9udF9zdHlsZXMsaT1udWxsPT1pfHxpPT09ITE/aTppLmgyLHR5cGVvZiBpPT09az9pLmFwcGx5KGIpOmkpKSsnPC9hPjwvbGk+XFxuICAgIDxsaT48YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9ybWF0QmxvY2tcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiaDNcIiB0YWJpbmRleD1cIi0xXCI+JytsKChpPWImJmIubG9jYWxlLGk9bnVsbD09aXx8aT09PSExP2k6aS5mb250X3N0eWxlcyxpPW51bGw9PWl8fGk9PT0hMT9pOmkuaDMsdHlwZW9mIGk9PT1rP2kuYXBwbHkoYik6aSkpKyc8L2E+PC9saT5cXG4gICAgPGxpPjxhIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJmb3JtYXRCbG9ja1wiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9XCJoNFwiIHRhYmluZGV4PVwiLTFcIj4nK2woKGk9YiYmYi5sb2NhbGUsaT1udWxsPT1pfHxpPT09ITE/aTppLmZvbnRfc3R5bGVzLGk9bnVsbD09aXx8aT09PSExP2k6aS5oNCx0eXBlb2YgaT09PWs/aS5hcHBseShiKTppKSkrJzwvYT48L2xpPlxcbiAgICA8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcm1hdEJsb2NrXCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT1cImg1XCIgdGFiaW5kZXg9XCItMVwiPicrbCgoaT1iJiZiLmxvY2FsZSxpPW51bGw9PWl8fGk9PT0hMT9pOmkuZm9udF9zdHlsZXMsaT1udWxsPT1pfHxpPT09ITE/aTppLmg1LHR5cGVvZiBpPT09az9pLmFwcGx5KGIpOmkpKSsnPC9hPjwvbGk+XFxuICAgIDxsaT48YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9ybWF0QmxvY2tcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPVwiaDZcIiB0YWJpbmRleD1cIi0xXCI+JytsKChpPWImJmIubG9jYWxlLGk9bnVsbD09aXx8aT09PSExP2k6aS5mb250X3N0eWxlcyxpPW51bGw9PWl8fGk9PT0hMT9pOmkuaDYsdHlwZW9mIGk9PT1rP2kuYXBwbHkoYik6aSkpK1wiPC9hPjwvbGk+XFxuICA8L3VsPlxcbjwvbGk+XFxuXCIsan0pLHRoaXMud3lzaWh0bWw1LnRwbC5odG1sPUhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3ZhciBiLGM9XCJcIjtyZXR1cm4gYys9XCJidG4tXCIrbCgoYj1hJiZhLm9wdGlvbnMsYj1udWxsPT1ifHxiPT09ITE/YjpiLnRvb2xiYXIsYj1udWxsPT1ifHxiPT09ITE/YjpiLnNpemUsdHlwZW9mIGI9PT1rP2IuYXBwbHkoYSk6YikpLGN9ZnVuY3Rpb24gZygpe3JldHVybidcXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9zcGFuPlxcbiAgICAgICd9ZnVuY3Rpb24gaCgpe3JldHVybidcXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wZW5jaWxcIj48L3NwYW4+XFxuICAgICAgJ310aGlzLmNvbXBpbGVySW5mbz1bNCxcIj49IDEuMC4wXCJdLGM9dGhpcy5tZXJnZShjLGEuaGVscGVycyksZT1lfHx7fTt2YXIgaSxqPVwiXCIsaz1cImZ1bmN0aW9uXCIsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sbT10aGlzO3JldHVybiBqKz0nPGxpPlxcbiAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiPlxcbiAgICA8YSBjbGFzcz1cImJ0biAnLGk9Y1tcImlmXCJdLmNhbGwoYiwoaT1iJiZiLm9wdGlvbnMsaT1udWxsPT1pfHxpPT09ITE/aTppLnRvb2xiYXIsbnVsbD09aXx8aT09PSExP2k6aS5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOm0ubm9vcCxmbjptLnByb2dyYW0oMSxmLGUpLGRhdGE6ZX0pLChpfHwwPT09aSkmJihqKz1pKSxqKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtYWN0aW9uPVwiY2hhbmdlX3ZpZXdcIiB0aXRsZT1cIicrbCgoaT1iJiZiLmxvY2FsZSxpPW51bGw9PWl8fGk9PT0hMT9pOmkuaHRtbCxpPW51bGw9PWl8fGk9PT0hMT9pOmkuZWRpdCx0eXBlb2YgaT09PWs/aS5hcHBseShiKTppKSkrJ1wiIHRhYmluZGV4PVwiLTFcIj5cXG4gICAgICAnLGk9Y1tcImlmXCJdLmNhbGwoYiwoaT1iJiZiLm9wdGlvbnMsaT1udWxsPT1pfHxpPT09ITE/aTppLnRvb2xiYXIsbnVsbD09aXx8aT09PSExP2k6aS5mYSkse2hhc2g6e30saW52ZXJzZTptLnByb2dyYW0oNSxoLGUpLGZuOm0ucHJvZ3JhbSgzLGcsZSksZGF0YTplfSksKGl8fDA9PT1pKSYmKGorPWkpLGorPVwiXFxuICAgIDwvYT5cXG4gIDwvZGl2PlxcbjwvbGk+XFxuXCIsan0pLHRoaXMud3lzaWh0bWw1LnRwbC5pbWFnZT1IYW5kbGViYXJzLnRlbXBsYXRlKGZ1bmN0aW9uKGEsYixjLGQsZSl7ZnVuY3Rpb24gZigpe3JldHVyblwibW9kYWwtc21cIn1mdW5jdGlvbiBnKGEpe3ZhciBiLGM9XCJcIjtyZXR1cm4gYys9XCJidG4tXCIrbSgoYj1hJiZhLm9wdGlvbnMsYj1udWxsPT1ifHxiPT09ITE/YjpiLnRvb2xiYXIsYj1udWxsPT1ifHxiPT09ITE/YjpiLnNpemUsdHlwZW9mIGI9PT1sP2IuYXBwbHkoYSk6YikpLGN9ZnVuY3Rpb24gaCgpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZpbGUtaW1hZ2Utb1wiPjwvc3Bhbj5cXG4gICAgJ31mdW5jdGlvbiBpKCl7cmV0dXJuJ1xcbiAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1waWN0dXJlXCI+PC9zcGFuPlxcbiAgICAnfXRoaXMuY29tcGlsZXJJbmZvPVs0LFwiPj0gMS4wLjBcIl0sYz10aGlzLm1lcmdlKGMsYS5oZWxwZXJzKSxlPWV8fHt9O3ZhciBqLGs9XCJcIixsPVwiZnVuY3Rpb25cIixtPXRoaXMuZXNjYXBlRXhwcmVzc2lvbixuPXRoaXM7cmV0dXJuIGsrPSc8bGk+XFxuICA8ZGl2IGNsYXNzPVwiYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtaW1hZ2UtbW9kYWwgbW9kYWwgZmFkZVwiIGRhdGEtd3lzaWh0bWw1LWRpYWxvZz1cImluc2VydEltYWdlXCI+XFxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgJyxqPWNbXCJpZlwiXS5jYWxsKGIsKGo9YiYmYi5vcHRpb25zLGo9bnVsbD09anx8aj09PSExP2o6ai50b29sYmFyLG51bGw9PWp8fGo9PT0hMT9qOmouc21hbGxtb2RhbHMpLHtoYXNoOnt9LGludmVyc2U6bi5ub29wLGZuOm4ucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGp8fDA9PT1qKSYmKGsrPWopLGsrPSdcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxcbiAgICAgICAgICA8YSBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj4mdGltZXM7PC9hPlxcbiAgICAgICAgICA8aDM+JyttKChqPWImJmIubG9jYWxlLGo9bnVsbD09anx8aj09PSExP2o6ai5pbWFnZSxqPW51bGw9PWp8fGo9PT0hMT9qOmouaW5zZXJ0LHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnPC9oMz5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cXG4gICAgICAgICAgICA8aW5wdXQgdmFsdWU9XCJodHRwOi8vXCIgY2xhc3M9XCJib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1pbWFnZS11cmwgZm9ybS1jb250cm9sXCIgZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkPVwic3JjXCI+XFxuICAgICAgICAgIDwvZGl2PiBcXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxcbiAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS13eXNpaHRtbDUtZGlhbG9nLWFjdGlvbj1cImNhbmNlbFwiIGhyZWY9XCIjXCI+JyttKChqPWImJmIubG9jYWxlLGo9bnVsbD09anx8aj09PSExP2o6ai5pbWFnZSxqPW51bGw9PWp8fGo9PT0hMT9qOmouY2FuY2VsLHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnPC9hPlxcbiAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgIGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1hY3Rpb249XCJzYXZlXCIgaHJlZj1cIiNcIj4nK20oKGo9YiYmYi5sb2NhbGUsaj1udWxsPT1qfHxqPT09ITE/ajpqLmltYWdlLGo9bnVsbD09anx8aj09PSExP2o6ai5pbnNlcnQsdHlwZW9mIGo9PT1sP2ouYXBwbHkoYik6aikpKyc8L2E+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxhIGNsYXNzPVwiYnRuICcsaj1jW1wiaWZcIl0uY2FsbChiLChqPWImJmIub3B0aW9ucyxqPW51bGw9PWp8fGo9PT0hMT9qOmoudG9vbGJhcixudWxsPT1qfHxqPT09ITE/ajpqLnNpemUpLHtoYXNoOnt9LGludmVyc2U6bi5ub29wLGZuOm4ucHJvZ3JhbSgzLGcsZSksZGF0YTplfSksKGp8fDA9PT1qKSYmKGsrPWopLGsrPScgYnRuLWRlZmF1bHRcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiaW5zZXJ0SW1hZ2VcIiB0aXRsZT1cIicrbSgoaj1iJiZiLmxvY2FsZSxqPW51bGw9PWp8fGo9PT0hMT9qOmouaW1hZ2Usaj1udWxsPT1qfHxqPT09ITE/ajpqLmluc2VydCx0eXBlb2Ygaj09PWw/ai5hcHBseShiKTpqKSkrJ1wiIHRhYmluZGV4PVwiLTFcIj5cXG4gICAgJyxqPWNbXCJpZlwiXS5jYWxsKGIsKGo9YiYmYi5vcHRpb25zLGo9bnVsbD09anx8aj09PSExP2o6ai50b29sYmFyLG51bGw9PWp8fGo9PT0hMT9qOmouZmEpLHtoYXNoOnt9LGludmVyc2U6bi5wcm9ncmFtKDcsaSxlKSxmbjpuLnByb2dyYW0oNSxoLGUpLGRhdGE6ZX0pLChqfHwwPT09aikmJihrKz1qKSxrKz1cIlxcbiAgPC9hPlxcbjwvbGk+XFxuXCIsa30pLHRoaXMud3lzaWh0bWw1LnRwbC5saW5rPUhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKCl7cmV0dXJuXCJtb2RhbC1zbVwifWZ1bmN0aW9uIGcoYSl7dmFyIGIsYz1cIlwiO3JldHVybiBjKz1cImJ0bi1cIittKChiPWEmJmEub3B0aW9ucyxiPW51bGw9PWJ8fGI9PT0hMT9iOmIudG9vbGJhcixiPW51bGw9PWJ8fGI9PT0hMT9iOmIuc2l6ZSx0eXBlb2YgYj09PWw/Yi5hcHBseShhKTpiKSksY31mdW5jdGlvbiBoKCl7cmV0dXJuJ1xcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc2hhcmUtc3F1YXJlLW9cIj48L3NwYW4+XFxuICAgICd9ZnVuY3Rpb24gaSgpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tc2hhcmVcIj48L3NwYW4+XFxuICAgICd9dGhpcy5jb21waWxlckluZm89WzQsXCI+PSAxLjAuMFwiXSxjPXRoaXMubWVyZ2UoYyxhLmhlbHBlcnMpLGU9ZXx8e307dmFyIGosaz1cIlwiLGw9XCJmdW5jdGlvblwiLG09dGhpcy5lc2NhcGVFeHByZXNzaW9uLG49dGhpcztyZXR1cm4gays9JzxsaT5cXG4gIDxkaXYgY2xhc3M9XCJib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1saW5rLW1vZGFsIG1vZGFsIGZhZGVcIiBkYXRhLXd5c2lodG1sNS1kaWFsb2c9XCJjcmVhdGVMaW5rXCI+XFxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgJyxqPWNbXCJpZlwiXS5jYWxsKGIsKGo9YiYmYi5vcHRpb25zLGo9bnVsbD09anx8aj09PSExP2o6ai50b29sYmFyLG51bGw9PWp8fGo9PT0hMT9qOmouc21hbGxtb2RhbHMpLHtoYXNoOnt9LGludmVyc2U6bi5ub29wLGZuOm4ucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKGp8fDA9PT1qKSYmKGsrPWopLGsrPSdcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxcbiAgICAgICAgICA8YSBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj4mdGltZXM7PC9hPlxcbiAgICAgICAgICA8aDM+JyttKChqPWImJmIubG9jYWxlLGo9bnVsbD09anx8aj09PSExP2o6ai5saW5rLGo9bnVsbD09anx8aj09PSExP2o6ai5pbnNlcnQsdHlwZW9mIGo9PT1sP2ouYXBwbHkoYik6aikpKyc8L2gzPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT1cImh0dHA6Ly9cIiBjbGFzcz1cImJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWxpbmstdXJsIGZvcm0tY29udHJvbFwiIGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZD1cImhyZWZcIj5cXG4gICAgICAgICAgPC9kaXY+IFxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cXG4gICAgICAgICAgICA8bGFiZWw+IFxcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtbGluay10YXJnZXRcIiBjaGVja2VkPicrbSgoaj1iJiZiLmxvY2FsZSxqPW51bGw9PWp8fGo9PT0hMT9qOmoubGluayxqPW51bGw9PWp8fGo9PT0hMT9qOmoudGFyZ2V0LHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnXFxuICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cXG4gICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1hY3Rpb249XCJjYW5jZWxcIiBocmVmPVwiI1wiPicrbSgoaj1iJiZiLmxvY2FsZSxqPW51bGw9PWp8fGo9PT0hMT9qOmoubGluayxqPW51bGw9PWp8fGo9PT0hMT9qOmouY2FuY2VsLHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnPC9hPlxcbiAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXd5c2lodG1sNS1kaWFsb2ctYWN0aW9uPVwic2F2ZVwiPicrbSgoaj1iJiZiLmxvY2FsZSxqPW51bGw9PWp8fGo9PT0hMT9qOmoubGluayxqPW51bGw9PWp8fGo9PT0hMT9qOmouaW5zZXJ0LHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnPC9hPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8YSBjbGFzcz1cImJ0biAnLGo9Y1tcImlmXCJdLmNhbGwoYiwoaj1iJiZiLm9wdGlvbnMsaj1udWxsPT1qfHxqPT09ITE/ajpqLnRvb2xiYXIsbnVsbD09anx8aj09PSExP2o6ai5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOm4ubm9vcCxmbjpuLnByb2dyYW0oMyxnLGUpLGRhdGE6ZX0pLChqfHwwPT09aikmJihrKz1qKSxrKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImNyZWF0ZUxpbmtcIiB0aXRsZT1cIicrbSgoaj1iJiZiLmxvY2FsZSxqPW51bGw9PWp8fGo9PT0hMT9qOmoubGluayxqPW51bGw9PWp8fGo9PT0hMT9qOmouaW5zZXJ0LHR5cGVvZiBqPT09bD9qLmFwcGx5KGIpOmopKSsnXCIgdGFiaW5kZXg9XCItMVwiPlxcbiAgICAnLGo9Y1tcImlmXCJdLmNhbGwoYiwoaj1iJiZiLm9wdGlvbnMsaj1udWxsPT1qfHxqPT09ITE/ajpqLnRvb2xiYXIsbnVsbD09anx8aj09PSExP2o6ai5mYSkse2hhc2g6e30saW52ZXJzZTpuLnByb2dyYW0oNyxpLGUpLGZuOm4ucHJvZ3JhbSg1LGgsZSksZGF0YTplfSksKGp8fDA9PT1qKSYmKGsrPWopLGsrPVwiXFxuICA8L2E+XFxuPC9saT5cXG5cIixrfSksdGhpcy53eXNpaHRtbDUudHBsLmxpc3RzPUhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3ZhciBiLGM9XCJcIjtyZXR1cm4gYys9XCJidG4tXCIrcigoYj1hJiZhLm9wdGlvbnMsYj1udWxsPT1ifHxiPT09ITE/YjpiLnRvb2xiYXIsYj1udWxsPT1ifHxiPT09ITE/YjpiLnNpemUsdHlwZW9mIGI9PT1xP2IuYXBwbHkoYSk6YikpLGN9ZnVuY3Rpb24gZygpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpc3QtdWxcIj48L3NwYW4+XFxuICAgICd9ZnVuY3Rpb24gaCgpe3JldHVybidcXG4gICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tbGlzdFwiPjwvc3Bhbj5cXG4gICAgJ31mdW5jdGlvbiBpKCl7cmV0dXJuJ1xcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlzdC1vbFwiPjwvc3Bhbj5cXG4gICAgJ31mdW5jdGlvbiBqKCl7cmV0dXJuJ1xcbiAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi10aC1saXN0XCI+PC9zcGFuPlxcbiAgICAnfWZ1bmN0aW9uIGsoKXtyZXR1cm4nXFxuICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1vdXRkZW50XCI+PC9zcGFuPlxcbiAgICAnfWZ1bmN0aW9uIGwoKXtyZXR1cm4nXFxuICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLWluZGVudC1yaWdodFwiPjwvc3Bhbj5cXG4gICAgJ31mdW5jdGlvbiBtKCl7cmV0dXJuJ1xcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtaW5kZW50XCI+PC9zcGFuPlxcbiAgICAnfWZ1bmN0aW9uIG4oKXtyZXR1cm4nXFxuICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLWluZGVudC1sZWZ0XCI+PC9zcGFuPlxcbiAgICAnfXRoaXMuY29tcGlsZXJJbmZvPVs0LFwiPj0gMS4wLjBcIl0sYz10aGlzLm1lcmdlKGMsYS5oZWxwZXJzKSxlPWV8fHt9O3ZhciBvLHA9XCJcIixxPVwiZnVuY3Rpb25cIixyPXRoaXMuZXNjYXBlRXhwcmVzc2lvbixzPXRoaXM7cmV0dXJuIHArPSc8bGk+XFxuICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XFxuICAgIDxhIGNsYXNzPVwiYnRuICcsbz1jW1wiaWZcIl0uY2FsbChiLChvPWImJmIub3B0aW9ucyxvPW51bGw9PW98fG89PT0hMT9vOm8udG9vbGJhcixudWxsPT1vfHxvPT09ITE/bzpvLnNpemUpLHtoYXNoOnt9LGludmVyc2U6cy5ub29wLGZuOnMucHJvZ3JhbSgxLGYsZSksZGF0YTplfSksKG98fDA9PT1vKSYmKHArPW8pLHArPScgYnRuLWRlZmF1bHRcIiBkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiaW5zZXJ0VW5vcmRlcmVkTGlzdFwiIHRpdGxlPVwiJytyKChvPWImJmIubG9jYWxlLG89bnVsbD09b3x8bz09PSExP286by5saXN0cyxvPW51bGw9PW98fG89PT0hMT9vOm8udW5vcmRlcmVkLHR5cGVvZiBvPT09cT9vLmFwcGx5KGIpOm8pKSsnXCIgdGFiaW5kZXg9XCItMVwiPlxcbiAgICAnLG89Y1tcImlmXCJdLmNhbGwoYiwobz1iJiZiLm9wdGlvbnMsbz1udWxsPT1vfHxvPT09ITE/bzpvLnRvb2xiYXIsbnVsbD09b3x8bz09PSExP286by5mYSkse2hhc2g6e30saW52ZXJzZTpzLnByb2dyYW0oNSxoLGUpLGZuOnMucHJvZ3JhbSgzLGcsZSksZGF0YTplfSksKG98fDA9PT1vKSYmKHArPW8pLHArPSdcXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cImJ0biAnLG89Y1tcImlmXCJdLmNhbGwoYiwobz1iJiZiLm9wdGlvbnMsbz1udWxsPT1vfHxvPT09ITE/bzpvLnRvb2xiYXIsbnVsbD09b3x8bz09PSExP286by5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOnMubm9vcCxmbjpzLnByb2dyYW0oMSxmLGUpLGRhdGE6ZX0pLChvfHwwPT09bykmJihwKz1vKSxwKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImluc2VydE9yZGVyZWRMaXN0XCIgdGl0bGU9XCInK3IoKG89YiYmYi5sb2NhbGUsbz1udWxsPT1vfHxvPT09ITE/bzpvLmxpc3RzLG89bnVsbD09b3x8bz09PSExP286by5vcmRlcmVkLHR5cGVvZiBvPT09cT9vLmFwcGx5KGIpOm8pKSsnXCIgdGFiaW5kZXg9XCItMVwiPlxcbiAgICAnLG89Y1tcImlmXCJdLmNhbGwoYiwobz1iJiZiLm9wdGlvbnMsbz1udWxsPT1vfHxvPT09ITE/bzpvLnRvb2xiYXIsbnVsbD09b3x8bz09PSExP286by5mYSkse2hhc2g6e30saW52ZXJzZTpzLnByb2dyYW0oOSxqLGUpLGZuOnMucHJvZ3JhbSg3LGksZSksZGF0YTplfSksKG98fDA9PT1vKSYmKHArPW8pLHArPSdcXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cImJ0biAnLG89Y1tcImlmXCJdLmNhbGwoYiwobz1iJiZiLm9wdGlvbnMsbz1udWxsPT1vfHxvPT09ITE/bzpvLnRvb2xiYXIsbnVsbD09b3x8bz09PSExP286by5zaXplKSx7aGFzaDp7fSxpbnZlcnNlOnMubm9vcCxmbjpzLnByb2dyYW0oMSxmLGUpLGRhdGE6ZX0pLChvfHwwPT09bykmJihwKz1vKSxwKz0nIGJ0bi1kZWZhdWx0XCIgZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cIk91dGRlbnRcIiB0aXRsZT1cIicrcigobz1iJiZiLmxvY2FsZSxvPW51bGw9PW98fG89PT0hMT9vOm8ubGlzdHMsbz1udWxsPT1vfHxvPT09ITE/bzpvLm91dGRlbnQsdHlwZW9mIG89PT1xP28uYXBwbHkoYik6bykpKydcIiB0YWJpbmRleD1cIi0xXCI+XFxuICAgICcsbz1jW1wiaWZcIl0uY2FsbChiLChvPWImJmIub3B0aW9ucyxvPW51bGw9PW98fG89PT0hMT9vOm8udG9vbGJhcixudWxsPT1vfHxvPT09ITE/bzpvLmZhKSx7aGFzaDp7fSxpbnZlcnNlOnMucHJvZ3JhbSgxMyxsLGUpLGZuOnMucHJvZ3JhbSgxMSxrLGUpLGRhdGE6ZX0pLChvfHwwPT09bykmJihwKz1vKSxwKz0nXFxuICAgIDwvYT5cXG4gICAgPGEgY2xhc3M9XCJidG4gJyxvPWNbXCJpZlwiXS5jYWxsKGIsKG89YiYmYi5vcHRpb25zLG89bnVsbD09b3x8bz09PSExP286by50b29sYmFyLG51bGw9PW98fG89PT0hMT9vOm8uc2l6ZSkse2hhc2g6e30saW52ZXJzZTpzLm5vb3AsZm46cy5wcm9ncmFtKDEsZixlKSxkYXRhOmV9KSwob3x8MD09PW8pJiYocCs9bykscCs9JyBidG4tZGVmYXVsdFwiIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9XCJJbmRlbnRcIiB0aXRsZT1cIicrcigobz1iJiZiLmxvY2FsZSxvPW51bGw9PW98fG89PT0hMT9vOm8ubGlzdHMsbz1udWxsPT1vfHxvPT09ITE/bzpvLmluZGVudCx0eXBlb2Ygbz09PXE/by5hcHBseShiKTpvKSkrJ1wiIHRhYmluZGV4PVwiLTFcIj5cXG4gICAgJyxvPWNbXCJpZlwiXS5jYWxsKGIsKG89YiYmYi5vcHRpb25zLG89bnVsbD09b3x8bz09PSExP286by50b29sYmFyLG51bGw9PW98fG89PT0hMT9vOm8uZmEpLHtoYXNoOnt9LGludmVyc2U6cy5wcm9ncmFtKDE3LG4sZSksZm46cy5wcm9ncmFtKDE1LG0sZSksZGF0YTplfSksKG98fDA9PT1vKSYmKHArPW8pLHArPVwiXFxuICAgIDwvYT5cXG4gIDwvZGl2PlxcbjwvbGk+XFxuXCIscH0pLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJib290c3RyYXAud3lzaWh0bWw1XCIsW1wianF1ZXJ5XCIsXCJ3eXNpaHRtbDVcIixcImJvb3RzdHJhcFwiLFwiYm9vdHN0cmFwLnd5c2lodG1sNS50ZW1wbGF0ZXNcIixcImJvb3RzdHJhcC53eXNpaHRtbDUuY29tbWFuZHNcIl0sYSk6YShqUXVlcnksd3lzaWh0bWw1KX0oZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYi50cGxbYV0/Yi50cGxbYV0oe2xvY2FsZTpjLG9wdGlvbnM6ZH0pOnZvaWQgMH0sZz1mdW5jdGlvbihjLGUpe3ZhciBmLGc7dGhpcy5lbD1jLGY9YS5leHRlbmQoITAse30sZCxlKTtmb3IoZyBpbiBmLmN1c3RvbVRlbXBsYXRlcylmLmN1c3RvbVRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShnKSYmKGIudHBsW2ddPWYuY3VzdG9tVGVtcGxhdGVzW2ddKTt0aGlzLnRvb2xiYXI9dGhpcy5jcmVhdGVUb29sYmFyKGMsZiksdGhpcy5lZGl0b3I9dGhpcy5jcmVhdGVFZGl0b3IoZil9O2cucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnLGNyZWF0ZUVkaXRvcjpmdW5jdGlvbihiKXtiPWJ8fHt9LGI9YS5leHRlbmQoITAse30sYiksYi50b29sYmFyPXRoaXMudG9vbGJhclswXSx0aGlzLmluaXRpYWxpemVFZGl0b3IodGhpcy5lbFswXSxiKX0saW5pdGlhbGl6ZUVkaXRvcjpmdW5jdGlvbihhLGMpe3ZhciBkLGU9bmV3IGIuRWRpdG9yKHRoaXMuZWxbMF0sYyk7aWYoZS5vbihcImJlZm9yZWxvYWRcIix0aGlzLnN5bmNCb290c3RyYXBEaWFsb2dFdmVudHMpLGUub24oXCJiZWZvcmVsb2FkXCIsdGhpcy5sb2FkUGFyc2VyUnVsZXMpLGUuY29tcG9zZXIuZWRpdGFibGVBcmVhLmNvbnRlbnREb2N1bWVudD90aGlzLmFkZE1vcmVTaG9ydGN1dHMoZSxlLmNvbXBvc2VyLmVkaXRhYmxlQXJlYS5jb250ZW50RG9jdW1lbnQuYm9keXx8ZS5jb21wb3Nlci5lZGl0YWJsZUFyZWEuY29udGVudERvY3VtZW50LGMuc2hvcnRjdXRzKTp0aGlzLmFkZE1vcmVTaG9ydGN1dHMoZSxlLmNvbXBvc2VyLmVkaXRhYmxlQXJlYSxjLnNob3J0Y3V0cyksYyYmYy5ldmVudHMpZm9yKGQgaW4gYy5ldmVudHMpYy5ldmVudHMuaGFzT3duUHJvcGVydHkoZCkmJmUub24oZCxjLmV2ZW50c1tkXSk7cmV0dXJuIGV9LGxvYWRQYXJzZXJSdWxlczpmdW5jdGlvbigpe1wic3RyaW5nXCI9PT1hLnR5cGUodGhpcy5jb25maWcucGFyc2VyUnVsZXMpJiZhLmFqYXgoe2RhdGFUeXBlOlwianNvblwiLHVybDp0aGlzLmNvbmZpZy5wYXJzZXJSdWxlcyxjb250ZXh0OnRoaXMsZXJyb3I6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMH0sc3VjY2VzczpmdW5jdGlvbihhKXt0aGlzLmNvbmZpZy5wYXJzZXJSdWxlcz1hLHZvaWQgMH19KSx0aGlzLmNvbmZpZy5wYXN0ZVBhcnNlclJ1bGVzZXRzJiZcInN0cmluZ1wiPT09YS50eXBlKHRoaXMuY29uZmlnLnBhc3RlUGFyc2VyUnVsZXNldHMpJiZhLmFqYXgoe2RhdGFUeXBlOlwianNvblwiLHVybDp0aGlzLmNvbmZpZy5wYXN0ZVBhcnNlclJ1bGVzZXRzLGNvbnRleHQ6dGhpcyxlcnJvcjpmdW5jdGlvbihhLGIsYyl7dm9pZCAwfSxzdWNjZXNzOmZ1bmN0aW9uKGEpe3RoaXMuY29uZmlnLnBhc3RlUGFyc2VyUnVsZXNldHM9YX19KX0sc3luY0Jvb3RzdHJhcERpYWxvZ0V2ZW50czpmdW5jdGlvbigpe3ZhciBiPXRoaXM7YS5tYXAodGhpcy50b29sYmFyLmNvbW1hbmRNYXBwaW5nLGZ1bmN0aW9uKGEpe3JldHVyblthXX0pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5kaWFsb2d9KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlhbG9nfSkuZm9yRWFjaChmdW5jdGlvbihjKXtjLm9uKFwic2hvd1wiLGZ1bmN0aW9uKCl7YSh0aGlzLmNvbnRhaW5lcikubW9kYWwoXCJzaG93XCIpfSksYy5vbihcImhpZGVcIixmdW5jdGlvbigpe2EodGhpcy5jb250YWluZXIpLm1vZGFsKFwiaGlkZVwiKSxzZXRUaW1lb3V0KGIuY29tcG9zZXIuZm9jdXMsMCl9KSxhKGMuY29udGFpbmVyKS5vbihcInNob3duLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXthKHRoaXMpLmZpbmQoXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYVwiKS5maXJzdCgpLmZvY3VzKCl9KX0pLHRoaXMub24oXCJjaGFuZ2Vfdmlld1wiLGZ1bmN0aW9uKCl7YSh0aGlzLnRvb2xiYXIuY29udGFpbmVyLmNoaWxkcmVuKS5maW5kKFwiYS5idG5cIikubm90KCdbZGF0YS13eXNpaHRtbDUtYWN0aW9uPVwiY2hhbmdlX3ZpZXdcIl0nKS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIpfSl9LGNyZWF0ZVRvb2xiYXI6ZnVuY3Rpb24oYixjKXt2YXIgZyxoLGk9dGhpcyxqPWEoXCI8dWwvPlwiLHtcImNsYXNzXCI6XCJ3eXNpaHRtbDUtdG9vbGJhclwiLHN0eWxlOlwiZGlzcGxheTpub25lXCJ9KSxrPWMubG9jYWxlfHxkLmxvY2FsZXx8XCJlblwiO2UuaGFzT3duUHJvcGVydHkoayl8fCh2b2lkIDAsaz1cImVuXCIpLGc9YS5leHRlbmQoITAse30sZS5lbixlW2tdKTtmb3IoaCBpbiBjLnRvb2xiYXIpYy50b29sYmFyW2hdJiZqLmFwcGVuZChmKGgsZyxjKSk7cmV0dXJuIGouZmluZCgnYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPVwiZm9ybWF0QmxvY2tcIl0nKS5jbGljayhmdW5jdGlvbihiKXt2YXIgYz1iLmRlbGVnYXRlVGFyZ2V0fHxiLnRhcmdldHx8Yi5zcmNFbGVtZW50LGQ9YShjKSxlPWQuZGF0YShcInd5c2lodG1sNS1kaXNwbGF5LWZvcm1hdC1uYW1lXCIpLGY9ZC5kYXRhKFwid3lzaWh0bWw1LWZvcm1hdC1uYW1lXCIpfHxkLmh0bWwoKTsodm9pZCAwPT09ZXx8XCJ0cnVlXCI9PT1lKSYmaS50b29sYmFyLmZpbmQoXCIuY3VycmVudC1mb250XCIpLnRleHQoZil9KSxqLmZpbmQoJ2FbZGF0YS13eXNpaHRtbDUtY29tbWFuZD1cImZvcmVDb2xvclwiXScpLmNsaWNrKGZ1bmN0aW9uKGIpe3ZhciBjPWIudGFyZ2V0fHxiLnNyY0VsZW1lbnQsZD1hKGMpO2kudG9vbGJhci5maW5kKFwiLmN1cnJlbnQtY29sb3JcIikudGV4dChkLmh0bWwoKSl9KSx0aGlzLmVsLmJlZm9yZShqKSxqfSxhZGRNb3JlU2hvcnRjdXRzOmZ1bmN0aW9uKGEsYyxkKXtiLmRvbS5vYnNlcnZlKGMsXCJrZXlkb3duXCIsZnVuY3Rpb24oYyl7dmFyIGUsZj1jLmtleUNvZGUsZz1kW2ZdOyhjLmN0cmxLZXl8fGMubWV0YUtleXx8Yy5hbHRLZXkpJiZnJiZiLmNvbW1hbmRzW2ddJiYoZT1hLnRvb2xiYXIuY29tbWFuZE1hcHBpbmdbZytcIjpudWxsXCJdLGUmJmUuZGlhbG9nJiYhZS5zdGF0ZT9lLmRpYWxvZy5zaG93KCk6Yi5jb21tYW5kc1tnXS5leGVjKGEuY29tcG9zZXIsZyksYy5wcmV2ZW50RGVmYXVsdCgpKX0pfX0sYz17cmVzZXREZWZhdWx0czpmdW5jdGlvbigpe2EuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGEuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zQ2FjaGUpfSxieXBhc3NEZWZhdWx0czpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtjLmRhdGEoXCJ3eXNpaHRtbDVcIixuZXcgZyhjLGIpKX0pfSxzaGFsbG93RXh0ZW5kOmZ1bmN0aW9uKGIpe3ZhciBkPWEuZXh0ZW5kKHt9LGEuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zLGJ8fHt9LGEodGhpcykuZGF0YSgpKSxlPXRoaXM7cmV0dXJuIGMuYnlwYXNzRGVmYXVsdHMuYXBwbHkoZSxbZF0pfSxkZWVwRXh0ZW5kOmZ1bmN0aW9uKGIpe3ZhciBkPWEuZXh0ZW5kKCEwLHt9LGEuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zLGJ8fHt9KSxlPXRoaXM7cmV0dXJuIGMuYnlwYXNzRGVmYXVsdHMuYXBwbHkoZSxbZF0pfSxpbml0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7cmV0dXJuIGMuc2hhbGxvd0V4dGVuZC5hcHBseShiLFthXSl9fSxhLmZuLnd5c2lodG1sNT1mdW5jdGlvbihiKXtyZXR1cm4gY1tiXT9jW2JdLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTpcIm9iamVjdFwiIT10eXBlb2YgYiYmYj8oYS5lcnJvcihcIk1ldGhvZCBcIitiK1wiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS53eXNpaHRtbDVcIiksdm9pZCAwKTpjLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLmZuLnd5c2lodG1sNS5Db25zdHJ1Y3Rvcj1nLGQ9YS5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnM9e3Rvb2xiYXI6e1wiZm9udC1zdHlsZXNcIjohMCxjb2xvcjohMSxlbXBoYXNpczp7c21hbGw6ITB9LGJsb2NrcXVvdGU6ITAsbGlzdHM6ITAsaHRtbDohMSxsaW5rOiEwLGltYWdlOiEwLHNtYWxsbW9kYWxzOiExfSx1c2VMaW5lQnJlYWtzOiExLHBhcnNlclJ1bGVzOntjbGFzc2VzOntcInd5c2l3eWctY29sb3Itc2lsdmVyXCI6MSxcInd5c2l3eWctY29sb3ItZ3JheVwiOjEsXCJ3eXNpd3lnLWNvbG9yLXdoaXRlXCI6MSxcInd5c2l3eWctY29sb3ItbWFyb29uXCI6MSxcInd5c2l3eWctY29sb3ItcmVkXCI6MSxcInd5c2l3eWctY29sb3ItcHVycGxlXCI6MSxcInd5c2l3eWctY29sb3ItZnVjaHNpYVwiOjEsXCJ3eXNpd3lnLWNvbG9yLWdyZWVuXCI6MSxcInd5c2l3eWctY29sb3ItbGltZVwiOjEsXCJ3eXNpd3lnLWNvbG9yLW9saXZlXCI6MSxcInd5c2l3eWctY29sb3IteWVsbG93XCI6MSxcInd5c2l3eWctY29sb3ItbmF2eVwiOjEsXCJ3eXNpd3lnLWNvbG9yLWJsdWVcIjoxLFwid3lzaXd5Zy1jb2xvci10ZWFsXCI6MSxcInd5c2l3eWctY29sb3ItYXF1YVwiOjEsXCJ3eXNpd3lnLWNvbG9yLW9yYW5nZVwiOjF9LHRhZ3M6e2I6e30saTp7fSxzdHJvbmc6e30sZW06e30scDp7fSxicjp7fSxvbDp7fSx1bDp7fSxsaTp7fSxoMTp7fSxoMjp7fSxoMzp7fSxoNDp7fSxoNTp7fSxoNjp7fSxibG9ja3F1b3RlOnt9LHU6MSxpbWc6e2NoZWNrX2F0dHJpYnV0ZXM6e3dpZHRoOlwibnVtYmVyc1wiLGFsdDpcImFsdFwiLHNyYzpcInVybFwiLGhlaWdodDpcIm51bWJlcnNcIn19LGE6e2NoZWNrX2F0dHJpYnV0ZXM6e2hyZWY6XCJ1cmxcIn0sc2V0X2F0dHJpYnV0ZXM6e3RhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vZm9sbG93XCJ9fSxzcGFuOjEsZGl2OjEsc21hbGw6MSxjb2RlOjEscHJlOjF9fSxsb2NhbGU6XCJlblwiLHNob3J0Y3V0czp7ODM6XCJzbWFsbFwiLDc1OlwiY3JlYXRlTGlua1wifX0sdm9pZCAwPT09YS5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnNDYWNoZSYmKGEuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zQ2FjaGU9YS5leHRlbmQoITAse30sYS5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMpKSxlPWEuZm4ud3lzaWh0bWw1LmxvY2FsZT17fX07YyhhLGIpfSksZnVuY3Rpb24oYSl7YS5jb21tYW5kcy5zbWFsbD17ZXhlYzpmdW5jdGlvbihiLGMpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGIsYyxcInNtYWxsXCIpfSxzdGF0ZTpmdW5jdGlvbihiLGMpe3JldHVybiBhLmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShiLGMsXCJzbWFsbFwiKX19fSh3eXNpaHRtbDUpLGZ1bmN0aW9uKGEpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJib290c3RyYXAud3lzaWh0bWw1LmVuLVVTXCIsW1wianF1ZXJ5XCIsXCJib290c3RyYXAud3lzaWh0bWw1XCJdLGEpOmEoalF1ZXJ5KX0oZnVuY3Rpb24oYSl7YS5mbi53eXNpaHRtbDUubG9jYWxlLmVuPWEuZm4ud3lzaWh0bWw1LmxvY2FsZVtcImVuLVVTXCJdPXtmb250X3N0eWxlczp7bm9ybWFsOlwiTm9ybWFsIHRleHRcIixoMTpcIkhlYWRpbmcgMVwiLGgyOlwiSGVhZGluZyAyXCIsaDM6XCJIZWFkaW5nIDNcIixoNDpcIkhlYWRpbmcgNFwiLGg1OlwiSGVhZGluZyA1XCIsaDY6XCJIZWFkaW5nIDZcIn0sZW1waGFzaXM6e2JvbGQ6XCJCb2xkXCIsaXRhbGljOlwiSXRhbGljXCIsdW5kZXJsaW5lOlwiVW5kZXJsaW5lXCIsc21hbGw6XCJTbWFsbFwifSxsaXN0czp7dW5vcmRlcmVkOlwiVW5vcmRlcmVkIGxpc3RcIixvcmRlcmVkOlwiT3JkZXJlZCBsaXN0XCIsb3V0ZGVudDpcIk91dGRlbnRcIixpbmRlbnQ6XCJJbmRlbnRcIn0sbGluazp7aW5zZXJ0OlwiSW5zZXJ0IGxpbmtcIixjYW5jZWw6XCJDYW5jZWxcIix0YXJnZXQ6XCJPcGVuIGxpbmsgaW4gbmV3IHdpbmRvd1wifSxpbWFnZTp7aW5zZXJ0OlwiSW5zZXJ0IGltYWdlXCIsY2FuY2VsOlwiQ2FuY2VsXCJ9LGh0bWw6e2VkaXQ6XCJFZGl0IEhUTUxcIn0sY29sb3Vyczp7YmxhY2s6XCJCbGFja1wiLHNpbHZlcjpcIlNpbHZlclwiLGdyYXk6XCJHcmV5XCIsbWFyb29uOlwiTWFyb29uXCIscmVkOlwiUmVkXCIscHVycGxlOlwiUHVycGxlXCIsZ3JlZW46XCJHcmVlblwiLG9saXZlOlwiT2xpdmVcIixuYXZ5OlwiTmF2eVwiLGJsdWU6XCJCbHVlXCIsb3JhbmdlOlwiT3JhbmdlXCJ9fX0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL3BsdWdpbnMvYm9vdHN0cmFwLXd5c2lodG1sNS9ib290c3RyYXAzLXd5c2lodG1sNS5hbGwubWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///60\n"); - -/***/ }), -/* 61 */ +/***/ 53: /***/ (function(module, exports) { -eval("/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function(e){e.fn.extend({slimScroll:function(f){var a=e.extend({width:\"auto\",height:\"250px\",size:\"7px\",color:\"#000\",position:\"right\",distance:\"1px\",start:\"top\",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:\"#333\",railOpacity:.2,railDraggable:!0,railClass:\"slimScrollRail\",barClass:\"slimScrollBar\",wrapperClass:\"slimScrollDiv\",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:\"7px\",railBorderRadius:\"7px\"},f);this.each(function(){function v(d){if(r){d=d||window.event;\nvar c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest(\".\"+a.wrapperClass).is(b.parent())&&n(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function n(d,g,e){k=!1;var f=b.outerHeight()-c.outerHeight();g&&(g=parseInt(c.css(\"top\"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),g=Math.min(Math.max(g,0),f),g=0<d?Math.ceil(g):Math.floor(g),c.css({top:g+\"px\"}));l=parseInt(c.css(\"top\"))/(b.outerHeight()-c.outerHeight());g=\nl*(b[0].scrollHeight-b.outerHeight());e&&(g=d,d=g/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),f),c.css({top:d+\"px\"}));b.scrollTop(g);b.trigger(\"slimscrolling\",~~g);w();p()}function x(){u=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:u+\"px\"});var a=u==b.outerHeight()?\"none\":\"block\";c.css({display:a})}function w(){x();clearTimeout(B);l==~~l?(k=a.allowPageScroll,C!=l&&b.trigger(\"slimscroll\",0==~~l?\"top\":\"bottom\")):k=!1;C=l;u>=b.outerHeight()?k=!0:(c.stop(!0,\n!0).fadeIn(\"fast\"),a.railVisible&&m.stop(!0,!0).fadeIn(\"fast\"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut(\"slow\"),m.fadeOut(\"slow\"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var q=b.scrollTop(),c=b.siblings(\".\"+a.barClass),m=b.siblings(\".\"+a.railClass);x();if(e.isPlainObject(f)){if(\"height\"in f&&\"auto\"==f.height){b.parent().css(\"height\",\"auto\");b.css(\"height\",\"auto\");var h=b.parent().parent().height();b.parent().css(\"height\",\nh);b.css(\"height\",h)}else\"height\"in f&&(h=f.height,b.parent().css(\"height\",h),b.css(\"height\",h));if(\"scrollTo\"in f)q=parseInt(a.scrollTo);else if(\"scrollBy\"in f)q+=parseInt(a.scrollBy);else if(\"destroy\"in f){c.remove();m.remove();b.unwrap();return}n(q,!1,!0)}}else if(!(e.isPlainObject(f)&&\"destroy\"in f)){a.height=\"auto\"==a.height?b.parent().height():a.height;q=e(\"<div></div>\").addClass(a.wrapperClass).css({position:\"relative\",overflow:\"hidden\",width:a.width,height:a.height});b.css({overflow:\"hidden\",\nwidth:a.width,height:a.height});var m=e(\"<div></div>\").addClass(a.railClass).css({width:a.size,height:\"100%\",position:\"absolute\",top:0,display:a.alwaysVisible&&a.railVisible?\"block\":\"none\",\"border-radius\":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e(\"<div></div>\").addClass(a.barClass).css({background:a.color,width:a.size,position:\"absolute\",top:0,opacity:a.opacity,display:a.alwaysVisible?\"block\":\"none\",\"border-radius\":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,\nWebkitBorderRadius:a.borderRadius,zIndex:99}),h=\"right\"==a.position?{right:a.distance}:{left:a.distance};m.css(h);c.css(h);b.wrap(q);b.parent().append(c);b.parent().append(m);a.railDraggable&&c.bind(\"mousedown\",function(a){var b=e(document);z=!0;t=parseFloat(c.css(\"top\"));pageY=a.pageY;b.bind(\"mousemove.slimscroll\",function(a){currTop=t+a.pageY-pageY;c.css(\"top\",currTop);n(0,c.position().top,!1)});b.bind(\"mouseup.slimscroll\",function(a){z=!1;p();b.unbind(\".slimscroll\")});return!1}).bind(\"selectstart.slimscroll\",\nfunction(a){a.stopPropagation();a.preventDefault();return!1});m.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind(\"touchstart\",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind(\"touchmove\",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(n((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});\nx();\"bottom\"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),n(0,!0)):\"top\"!==a.start&&(n(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener(\"DOMMouseScroll\",v,!1),this.addEventListener(\"mousewheel\",v,!1)):document.attachEvent(\"onmousewheel\",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1zbGltc2Nyb2xsL2pxdWVyeS5zbGltc2Nyb2xsLm1pbi5qcz8xNWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhLHVCQUF1QixnQkFBZ0IsNlhBQTZYLElBQUkscUJBQXFCLGNBQWMsTUFBTTtBQUMzZSxRQUFRLG9DQUFvQyx5QkFBeUIsMkZBQTJGLHlDQUF5Qyx1QkFBdUIsa0JBQWtCLEtBQUssc0NBQXNDLDZJQUE2SSxXQUFXLEdBQUcsMkRBQTJEO0FBQ25mLHNDQUFzQyxpRkFBaUYsV0FBVyxHQUFHLGVBQWUsK0JBQStCLElBQUksSUFBSSxhQUFhLGlFQUFpRSxPQUFPLGNBQWMsRUFBRSx3Q0FBd0MsT0FBTyxVQUFVLEVBQUUsYUFBYSxJQUFJLGdCQUFnQixzRkFBc0YsSUFBSTtBQUN0ZCxnRUFBZ0UsYUFBYSwwQ0FBMEMsaUVBQWlFLE9BQU8sbUNBQW1DLHdDQUF3QywrRUFBK0UsSUFBSSx1QkFBdUIsbUNBQW1DLGdDQUFnQyx1QkFBdUIsbUNBQW1DO0FBQ2pmLEdBQUcsa0JBQWtCLDRFQUE0RSx5Q0FBeUMsK0NBQStDLHVCQUF1QixXQUFXLFdBQVcsV0FBVyxPQUFPLFlBQVksOENBQThDLHVEQUF1RCxpREFBaUQsb0VBQW9FLEVBQUUsT0FBTztBQUN2ZSw4QkFBOEIsRUFBRSxrREFBa0QscU1BQXFNLCtDQUErQztBQUN0VSw0Q0FBNEMseUJBQXlCLGlCQUFpQixFQUFFLGlCQUFpQixTQUFTLFNBQVMsVUFBVSxxQkFBcUIscUJBQXFCLGdEQUFnRCxrQkFBa0IsS0FBSywyQkFBMkIsY0FBYywwQ0FBMEMsd0JBQXdCLHFCQUFxQix5QkFBeUIsRUFBRSx3Q0FBd0MsS0FBSyxJQUFJLHdCQUF3QixFQUFFLFNBQVM7QUFDcmUsWUFBWSxvQkFBb0IsbUJBQW1CLFNBQVMsRUFBRSxtQkFBbUIsSUFBSSxZQUFZLElBQUksRUFBRSxtQkFBbUIsS0FBSyxZQUFZLEtBQUssRUFBRSxtQkFBbUIsS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxrQ0FBa0MscUVBQXFFLEVBQUUsK0JBQStCLG9DQUFvQyxrSUFBa0k7QUFDdmYsSUFBSSwyQkFBMkIsb0NBQW9DLDZGQUE2Rix3SkFBd0osRUFBRSxhQUFhLEVBQUUsYUFBYSwyQkFBMkIsRUFBRSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBDb3B5cmlnaHQgKGMpIDIwMTEgUGlvdHIgUm9jaGFsYSAoaHR0cDovL3JvY2hhLmxhKVxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqIGFuZCBHUEwgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwKSBsaWNlbnNlcy5cbiAqXG4gKiBWZXJzaW9uOiAxLjMuOFxuICpcbiAqL1xuKGZ1bmN0aW9uKGUpe2UuZm4uZXh0ZW5kKHtzbGltU2Nyb2xsOmZ1bmN0aW9uKGYpe3ZhciBhPWUuZXh0ZW5kKHt3aWR0aDpcImF1dG9cIixoZWlnaHQ6XCIyNTBweFwiLHNpemU6XCI3cHhcIixjb2xvcjpcIiMwMDBcIixwb3NpdGlvbjpcInJpZ2h0XCIsZGlzdGFuY2U6XCIxcHhcIixzdGFydDpcInRvcFwiLG9wYWNpdHk6LjQsYWx3YXlzVmlzaWJsZTohMSxkaXNhYmxlRmFkZU91dDohMSxyYWlsVmlzaWJsZTohMSxyYWlsQ29sb3I6XCIjMzMzXCIscmFpbE9wYWNpdHk6LjIscmFpbERyYWdnYWJsZTohMCxyYWlsQ2xhc3M6XCJzbGltU2Nyb2xsUmFpbFwiLGJhckNsYXNzOlwic2xpbVNjcm9sbEJhclwiLHdyYXBwZXJDbGFzczpcInNsaW1TY3JvbGxEaXZcIixhbGxvd1BhZ2VTY3JvbGw6ITEsd2hlZWxTdGVwOjIwLHRvdWNoU2Nyb2xsU3RlcDoyMDAsYm9yZGVyUmFkaXVzOlwiN3B4XCIscmFpbEJvcmRlclJhZGl1czpcIjdweFwifSxmKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiB2KGQpe2lmKHIpe2Q9ZHx8d2luZG93LmV2ZW50O1xudmFyIGM9MDtkLndoZWVsRGVsdGEmJihjPS1kLndoZWVsRGVsdGEvMTIwKTtkLmRldGFpbCYmKGM9ZC5kZXRhaWwvMyk7ZShkLnRhcmdldHx8ZC5zcmNUYXJnZXR8fGQuc3JjRWxlbWVudCkuY2xvc2VzdChcIi5cIithLndyYXBwZXJDbGFzcykuaXMoYi5wYXJlbnQoKSkmJm4oYywhMCk7ZC5wcmV2ZW50RGVmYXVsdCYmIWsmJmQucHJldmVudERlZmF1bHQoKTtrfHwoZC5yZXR1cm5WYWx1ZT0hMSl9fWZ1bmN0aW9uIG4oZCxnLGUpe2s9ITE7dmFyIGY9Yi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKTtnJiYoZz1wYXJzZUludChjLmNzcyhcInRvcFwiKSkrZCpwYXJzZUludChhLndoZWVsU3RlcCkvMTAwKmMub3V0ZXJIZWlnaHQoKSxnPU1hdGgubWluKE1hdGgubWF4KGcsMCksZiksZz0wPGQ/TWF0aC5jZWlsKGcpOk1hdGguZmxvb3IoZyksYy5jc3Moe3RvcDpnK1wicHhcIn0pKTtsPXBhcnNlSW50KGMuY3NzKFwidG9wXCIpKS8oYi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKSk7Zz1cbmwqKGJbMF0uc2Nyb2xsSGVpZ2h0LWIub3V0ZXJIZWlnaHQoKSk7ZSYmKGc9ZCxkPWcvYlswXS5zY3JvbGxIZWlnaHQqYi5vdXRlckhlaWdodCgpLGQ9TWF0aC5taW4oTWF0aC5tYXgoZCwwKSxmKSxjLmNzcyh7dG9wOmQrXCJweFwifSkpO2Iuc2Nyb2xsVG9wKGcpO2IudHJpZ2dlcihcInNsaW1zY3JvbGxpbmdcIix+fmcpO3coKTtwKCl9ZnVuY3Rpb24geCgpe3U9TWF0aC5tYXgoYi5vdXRlckhlaWdodCgpL2JbMF0uc2Nyb2xsSGVpZ2h0KmIub3V0ZXJIZWlnaHQoKSwzMCk7Yy5jc3Moe2hlaWdodDp1K1wicHhcIn0pO3ZhciBhPXU9PWIub3V0ZXJIZWlnaHQoKT9cIm5vbmVcIjpcImJsb2NrXCI7Yy5jc3Moe2Rpc3BsYXk6YX0pfWZ1bmN0aW9uIHcoKXt4KCk7Y2xlYXJUaW1lb3V0KEIpO2w9PX5+bD8oaz1hLmFsbG93UGFnZVNjcm9sbCxDIT1sJiZiLnRyaWdnZXIoXCJzbGltc2Nyb2xsXCIsMD09fn5sP1widG9wXCI6XCJib3R0b21cIikpOms9ITE7Qz1sO3U+PWIub3V0ZXJIZWlnaHQoKT9rPSEwOihjLnN0b3AoITAsXG4hMCkuZmFkZUluKFwiZmFzdFwiKSxhLnJhaWxWaXNpYmxlJiZtLnN0b3AoITAsITApLmZhZGVJbihcImZhc3RcIikpfWZ1bmN0aW9uIHAoKXthLmFsd2F5c1Zpc2libGV8fChCPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc2FibGVGYWRlT3V0JiZyfHx5fHx6fHwoYy5mYWRlT3V0KFwic2xvd1wiKSxtLmZhZGVPdXQoXCJzbG93XCIpKX0sMUUzKSl9dmFyIHIseSx6LEIsQSx1LGwsQyxrPSExLGI9ZSh0aGlzKTtpZihiLnBhcmVudCgpLmhhc0NsYXNzKGEud3JhcHBlckNsYXNzKSl7dmFyIHE9Yi5zY3JvbGxUb3AoKSxjPWIuc2libGluZ3MoXCIuXCIrYS5iYXJDbGFzcyksbT1iLnNpYmxpbmdzKFwiLlwiK2EucmFpbENsYXNzKTt4KCk7aWYoZS5pc1BsYWluT2JqZWN0KGYpKXtpZihcImhlaWdodFwiaW4gZiYmXCJhdXRvXCI9PWYuaGVpZ2h0KXtiLnBhcmVudCgpLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTtiLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTt2YXIgaD1iLnBhcmVudCgpLnBhcmVudCgpLmhlaWdodCgpO2IucGFyZW50KCkuY3NzKFwiaGVpZ2h0XCIsXG5oKTtiLmNzcyhcImhlaWdodFwiLGgpfWVsc2VcImhlaWdodFwiaW4gZiYmKGg9Zi5oZWlnaHQsYi5wYXJlbnQoKS5jc3MoXCJoZWlnaHRcIixoKSxiLmNzcyhcImhlaWdodFwiLGgpKTtpZihcInNjcm9sbFRvXCJpbiBmKXE9cGFyc2VJbnQoYS5zY3JvbGxUbyk7ZWxzZSBpZihcInNjcm9sbEJ5XCJpbiBmKXErPXBhcnNlSW50KGEuc2Nyb2xsQnkpO2Vsc2UgaWYoXCJkZXN0cm95XCJpbiBmKXtjLnJlbW92ZSgpO20ucmVtb3ZlKCk7Yi51bndyYXAoKTtyZXR1cm59bihxLCExLCEwKX19ZWxzZSBpZighKGUuaXNQbGFpbk9iamVjdChmKSYmXCJkZXN0cm95XCJpbiBmKSl7YS5oZWlnaHQ9XCJhdXRvXCI9PWEuaGVpZ2h0P2IucGFyZW50KCkuaGVpZ2h0KCk6YS5oZWlnaHQ7cT1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS53cmFwcGVyQ2xhc3MpLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9KTtiLmNzcyh7b3ZlcmZsb3c6XCJoaWRkZW5cIixcbndpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fSk7dmFyIG09ZShcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKGEucmFpbENsYXNzKS5jc3Moe3dpZHRoOmEuc2l6ZSxoZWlnaHQ6XCIxMDAlXCIscG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLGRpc3BsYXk6YS5hbHdheXNWaXNpYmxlJiZhLnJhaWxWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIixcImJvcmRlci1yYWRpdXNcIjphLnJhaWxCb3JkZXJSYWRpdXMsYmFja2dyb3VuZDphLnJhaWxDb2xvcixvcGFjaXR5OmEucmFpbE9wYWNpdHksekluZGV4OjkwfSksYz1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS5iYXJDbGFzcykuY3NzKHtiYWNrZ3JvdW5kOmEuY29sb3Isd2lkdGg6YS5zaXplLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxvcGFjaXR5OmEub3BhY2l0eSxkaXNwbGF5OmEuYWx3YXlzVmlzaWJsZT9cImJsb2NrXCI6XCJub25lXCIsXCJib3JkZXItcmFkaXVzXCI6YS5ib3JkZXJSYWRpdXMsQm9yZGVyUmFkaXVzOmEuYm9yZGVyUmFkaXVzLE1vekJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyxcbldlYmtpdEJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyx6SW5kZXg6OTl9KSxoPVwicmlnaHRcIj09YS5wb3NpdGlvbj97cmlnaHQ6YS5kaXN0YW5jZX06e2xlZnQ6YS5kaXN0YW5jZX07bS5jc3MoaCk7Yy5jc3MoaCk7Yi53cmFwKHEpO2IucGFyZW50KCkuYXBwZW5kKGMpO2IucGFyZW50KCkuYXBwZW5kKG0pO2EucmFpbERyYWdnYWJsZSYmYy5iaW5kKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYSl7dmFyIGI9ZShkb2N1bWVudCk7ej0hMDt0PXBhcnNlRmxvYXQoYy5jc3MoXCJ0b3BcIikpO3BhZ2VZPWEucGFnZVk7Yi5iaW5kKFwibW91c2Vtb3ZlLnNsaW1zY3JvbGxcIixmdW5jdGlvbihhKXtjdXJyVG9wPXQrYS5wYWdlWS1wYWdlWTtjLmNzcyhcInRvcFwiLGN1cnJUb3ApO24oMCxjLnBvc2l0aW9uKCkudG9wLCExKX0pO2IuYmluZChcIm1vdXNldXAuc2xpbXNjcm9sbFwiLGZ1bmN0aW9uKGEpe3o9ITE7cCgpO2IudW5iaW5kKFwiLnNsaW1zY3JvbGxcIil9KTtyZXR1cm4hMX0pLmJpbmQoXCJzZWxlY3RzdGFydC5zbGltc2Nyb2xsXCIsXG5mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EucHJldmVudERlZmF1bHQoKTtyZXR1cm4hMX0pO20uaG92ZXIoZnVuY3Rpb24oKXt3KCl9LGZ1bmN0aW9uKCl7cCgpfSk7Yy5ob3ZlcihmdW5jdGlvbigpe3k9ITB9LGZ1bmN0aW9uKCl7eT0hMX0pO2IuaG92ZXIoZnVuY3Rpb24oKXtyPSEwO3coKTtwKCl9LGZ1bmN0aW9uKCl7cj0hMTtwKCl9KTtiLmJpbmQoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYSxiKXthLm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGgmJihBPWEub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO2IuYmluZChcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGIpe2t8fGIub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2Iub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCYmKG4oKEEtYi5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkpL2EudG91Y2hTY3JvbGxTdGVwLCEwKSxBPWIub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO1xueCgpO1wiYm90dG9tXCI9PT1hLnN0YXJ0PyhjLmNzcyh7dG9wOmIub3V0ZXJIZWlnaHQoKS1jLm91dGVySGVpZ2h0KCl9KSxuKDAsITApKTpcInRvcFwiIT09YS5zdGFydCYmKG4oZShhLnN0YXJ0KS5wb3NpdGlvbigpLnRvcCxudWxsLCEwKSxhLmFsd2F5c1Zpc2libGV8fGMuaGlkZSgpKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8odGhpcy5hZGRFdmVudExpc3RlbmVyKFwiRE9NTW91c2VTY3JvbGxcIix2LCExKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsdiwhMSkpOmRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25tb3VzZXdoZWVsXCIsdil9fSk7cmV0dXJuIHRoaXN9fSk7ZS5mbi5leHRlbmQoe3NsaW1zY3JvbGw6ZS5mbi5zbGltU2Nyb2xsfSl9KShqUXVlcnkpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnktc2xpbXNjcm9sbC9qcXVlcnkuc2xpbXNjcm9sbC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDYxXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61\n"); +eval("$.fn.vectorMap('addMap', 'world_mill_en', { \"insets\": [{ \"width\": 900.0, \"top\": 0, \"height\": 440.7063107441331, \"bbox\": [{ \"y\": -12671671.123330014, \"x\": -20004297.151525836 }, { \"y\": 6930392.02513512, \"x\": 20026572.394749384 }], \"left\": 0 }], \"paths\": { \"BD\": { \"path\": \"M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z\", \"name\": \"Bangladesh\" }, \"BE\": { \"path\": \"M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z\", \"name\": \"Belgium\" }, \"BF\": { \"path\": \"M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z\", \"name\": \"Burkina Faso\" }, \"BG\": { \"path\": \"M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z\", \"name\": \"Bulgaria\" }, \"BA\": { \"path\": \"M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z\", \"name\": \"Bosnia and Herzegovina\" }, \"BN\": { \"path\": \"M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z\", \"name\": \"Brunei\" }, \"BO\": { \"path\": \"M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z\", \"name\": \"Bolivia\" }, \"JP\": { \"path\": \"M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z\", \"name\": \"Japan\" }, \"BI\": { \"path\": \"M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z\", \"name\": \"Burundi\" }, \"BJ\": { \"path\": \"M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z\", \"name\": \"Benin\" }, \"BT\": { \"path\": \"M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z\", \"name\": \"Bhutan\" }, \"JM\": { \"path\": \"M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z\", \"name\": \"Jamaica\" }, \"BW\": { \"path\": \"M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z\", \"name\": \"Botswana\" }, \"BR\": { \"path\": \"M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z\", \"name\": \"Brazil\" }, \"BS\": { \"path\": \"M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z\", \"name\": \"The Bahamas\" }, \"BY\": { \"path\": \"M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z\", \"name\": \"Belarus\" }, \"BZ\": { \"path\": \"M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z\", \"name\": \"Belize\" }, \"RU\": { \"path\": \"M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z\", \"name\": \"Russia\" }, \"RW\": { \"path\": \"M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z\", \"name\": \"Rwanda\" }, \"RS\": { \"path\": \"M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z\", \"name\": \"Republic of Serbia\" }, \"LT\": { \"path\": \"M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z\", \"name\": \"Lithuania\" }, \"LU\": { \"path\": \"M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z\", \"name\": \"Luxembourg\" }, \"LR\": { \"path\": \"M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z\", \"name\": \"Liberia\" }, \"RO\": { \"path\": \"M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z\", \"name\": \"Romania\" }, \"GW\": { \"path\": \"M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z\", \"name\": \"Guinea Bissau\" }, \"GT\": { \"path\": \"M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z\", \"name\": \"Guatemala\" }, \"GR\": { \"path\": \"M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z\", \"name\": \"Greece\" }, \"GQ\": { \"path\": \"M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z\", \"name\": \"Equatorial Guinea\" }, \"GY\": { \"path\": \"M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z\", \"name\": \"Guyana\" }, \"GE\": { \"path\": \"M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z\", \"name\": \"Georgia\" }, \"GB\": { \"path\": \"M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z\", \"name\": \"United Kingdom\" }, \"GA\": { \"path\": \"M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z\", \"name\": \"Gabon\" }, \"GN\": { \"path\": \"M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z\", \"name\": \"Guinea\" }, \"GM\": { \"path\": \"M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z\", \"name\": \"Gambia\" }, \"GL\": { \"path\": \"M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z\", \"name\": \"Greenland\" }, \"KW\": { \"path\": \"M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z\", \"name\": \"Kuwait\" }, \"GH\": { \"path\": \"M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z\", \"name\": \"Ghana\" }, \"OM\": { \"path\": \"M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z\", \"name\": \"Oman\" }, \"_3\": { \"path\": \"M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z\", \"name\": \"Somaliland\" }, \"_2\": { \"path\": \"M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z\", \"name\": \"Western Sahara\" }, \"_1\": { \"path\": \"M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z\", \"name\": \"Kosovo\" }, \"_0\": { \"path\": \"M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z\", \"name\": \"Northern Cyprus\" }, \"JO\": { \"path\": \"M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z\", \"name\": \"Jordan\" }, \"HR\": { \"path\": \"M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z\", \"name\": \"Croatia\" }, \"HT\": { \"path\": \"M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z\", \"name\": \"Haiti\" }, \"HU\": { \"path\": \"M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z\", \"name\": \"Hungary\" }, \"HN\": { \"path\": \"M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z\", \"name\": \"Honduras\" }, \"PR\": { \"path\": \"M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z\", \"name\": \"Puerto Rico\" }, \"PS\": { \"path\": \"M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z\", \"name\": \"West Bank\" }, \"PT\": { \"path\": \"M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z\", \"name\": \"Portugal\" }, \"PY\": { \"path\": \"M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z\", \"name\": \"Paraguay\" }, \"PA\": { \"path\": \"M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z\", \"name\": \"Panama\" }, \"PG\": { \"path\": \"M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z\", \"name\": \"Papua New Guinea\" }, \"PE\": { \"path\": \"M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z\", \"name\": \"Peru\" }, \"PK\": { \"path\": \"M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z\", \"name\": \"Pakistan\" }, \"PH\": { \"path\": \"M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z\", \"name\": \"Philippines\" }, \"PL\": { \"path\": \"M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z\", \"name\": \"Poland\" }, \"ZM\": { \"path\": \"M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z\", \"name\": \"Zambia\" }, \"EE\": { \"path\": \"M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z\", \"name\": \"Estonia\" }, \"EG\": { \"path\": \"M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z\", \"name\": \"Egypt\" }, \"ZA\": { \"path\": \"M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z\", \"name\": \"South Africa\" }, \"EC\": { \"path\": \"M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z\", \"name\": \"Ecuador\" }, \"AL\": { \"path\": \"M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z\", \"name\": \"Albania\" }, \"AO\": { \"path\": \"M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z\", \"name\": \"Angola\" }, \"KZ\": { \"path\": \"M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z\", \"name\": \"Kazakhstan\" }, \"ET\": { \"path\": \"M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z\", \"name\": \"Ethiopia\" }, \"ZW\": { \"path\": \"M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z\", \"name\": \"Zimbabwe\" }, \"ES\": { \"path\": \"M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z\", \"name\": \"Spain\" }, \"ER\": { \"path\": \"M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z\", \"name\": \"Eritrea\" }, \"ME\": { \"path\": \"M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z\", \"name\": \"Montenegro\" }, \"MD\": { \"path\": \"M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z\", \"name\": \"Moldova\" }, \"MG\": { \"path\": \"M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z\", \"name\": \"Madagascar\" }, \"MA\": { \"path\": \"M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z\", \"name\": \"Morocco\" }, \"UZ\": { \"path\": \"M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z\", \"name\": \"Uzbekistan\" }, \"MM\": { \"path\": \"M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z\", \"name\": \"Myanmar\" }, \"ML\": { \"path\": \"M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z\", \"name\": \"Mali\" }, \"MN\": { \"path\": \"M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z\", \"name\": \"Mongolia\" }, \"MK\": { \"path\": \"M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z\", \"name\": \"Macedonia\" }, \"MW\": { \"path\": \"M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z\", \"name\": \"Malawi\" }, \"MR\": { \"path\": \"M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z\", \"name\": \"Mauritania\" }, \"UG\": { \"path\": \"M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z\", \"name\": \"Uganda\" }, \"MY\": { \"path\": \"M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z\", \"name\": \"Malaysia\" }, \"MX\": { \"path\": \"M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z\", \"name\": \"Mexico\" }, \"VU\": { \"path\": \"M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z\", \"name\": \"Vanuatu\" }, \"FR\": { \"path\": \"M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z\", \"name\": \"France\" }, \"FI\": { \"path\": \"M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z\", \"name\": \"Finland\" }, \"FJ\": { \"path\": \"M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z\", \"name\": \"Fiji\" }, \"FK\": { \"path\": \"M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z\", \"name\": \"Falkland Islands\" }, \"NI\": { \"path\": \"M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z\", \"name\": \"Nicaragua\" }, \"NL\": { \"path\": \"M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z\", \"name\": \"Netherlands\" }, \"NO\": { \"path\": \"M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z\", \"name\": \"Norway\" }, \"NA\": { \"path\": \"M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z\", \"name\": \"Namibia\" }, \"NC\": { \"path\": \"M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z\", \"name\": \"New Caledonia\" }, \"NE\": { \"path\": \"M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z\", \"name\": \"Niger\" }, \"NG\": { \"path\": \"M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z\", \"name\": \"Nigeria\" }, \"NZ\": { \"path\": \"M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z\", \"name\": \"New Zealand\" }, \"NP\": { \"path\": \"M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z\", \"name\": \"Nepal\" }, \"CI\": { \"path\": \"M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z\", \"name\": \"Ivory Coast\" }, \"CH\": { \"path\": \"M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z\", \"name\": \"Switzerland\" }, \"CO\": { \"path\": \"M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z\", \"name\": \"Colombia\" }, \"CN\": { \"path\": \"M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z\", \"name\": \"China\" }, \"CM\": { \"path\": \"M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z\", \"name\": \"Cameroon\" }, \"CL\": { \"path\": \"M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z\", \"name\": \"Chile\" }, \"CA\": { \"path\": \"M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z\", \"name\": \"Canada\" }, \"CG\": { \"path\": \"M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z\", \"name\": \"Republic of the Congo\" }, \"CF\": { \"path\": \"M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z\", \"name\": \"Central African Republic\" }, \"CD\": { \"path\": \"M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z\", \"name\": \"Democratic Republic of the Congo\" }, \"CZ\": { \"path\": \"M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z\", \"name\": \"Czech Republic\" }, \"CY\": { \"path\": \"M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z\", \"name\": \"Cyprus\" }, \"CR\": { \"path\": \"M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z\", \"name\": \"Costa Rica\" }, \"CU\": { \"path\": \"M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z\", \"name\": \"Cuba\" }, \"SZ\": { \"path\": \"M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z\", \"name\": \"Swaziland\" }, \"SY\": { \"path\": \"M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z\", \"name\": \"Syria\" }, \"KG\": { \"path\": \"M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z\", \"name\": \"Kyrgyzstan\" }, \"KE\": { \"path\": \"M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z\", \"name\": \"Kenya\" }, \"SS\": { \"path\": \"M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z\", \"name\": \"South Sudan\" }, \"SR\": { \"path\": \"M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z\", \"name\": \"Suriname\" }, \"KH\": { \"path\": \"M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z\", \"name\": \"Cambodia\" }, \"SV\": { \"path\": \"M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z\", \"name\": \"El Salvador\" }, \"SK\": { \"path\": \"M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z\", \"name\": \"Slovakia\" }, \"KR\": { \"path\": \"M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z\", \"name\": \"South Korea\" }, \"SI\": { \"path\": \"M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z\", \"name\": \"Slovenia\" }, \"KP\": { \"path\": \"M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z\", \"name\": \"North Korea\" }, \"SO\": { \"path\": \"M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z\", \"name\": \"Somalia\" }, \"SN\": { \"path\": \"M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z\", \"name\": \"Senegal\" }, \"SL\": { \"path\": \"M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z\", \"name\": \"Sierra Leone\" }, \"SB\": { \"path\": \"M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z\", \"name\": \"Solomon Islands\" }, \"SA\": { \"path\": \"M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z\", \"name\": \"Saudi Arabia\" }, \"SE\": { \"path\": \"M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z\", \"name\": \"Sweden\" }, \"SD\": { \"path\": \"M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z\", \"name\": \"Sudan\" }, \"DO\": { \"path\": \"M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z\", \"name\": \"Dominican Republic\" }, \"DJ\": { \"path\": \"M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z\", \"name\": \"Djibouti\" }, \"DK\": { \"path\": \"M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z\", \"name\": \"Denmark\" }, \"DE\": { \"path\": \"M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z\", \"name\": \"Germany\" }, \"YE\": { \"path\": \"M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z\", \"name\": \"Yemen\" }, \"AT\": { \"path\": \"M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z\", \"name\": \"Austria\" }, \"DZ\": { \"path\": \"M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z\", \"name\": \"Algeria\" }, \"US\": { \"path\": \"M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z\", \"name\": \"United States of America\" }, \"LV\": { \"path\": \"M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z\", \"name\": \"Latvia\" }, \"UY\": { \"path\": \"M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z\", \"name\": \"Uruguay\" }, \"LB\": { \"path\": \"M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z\", \"name\": \"Lebanon\" }, \"LA\": { \"path\": \"M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z\", \"name\": \"Laos\" }, \"TW\": { \"path\": \"M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z\", \"name\": \"Taiwan\" }, \"TT\": { \"path\": \"M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z\", \"name\": \"Trinidad and Tobago\" }, \"TR\": { \"path\": \"M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z\", \"name\": \"Turkey\" }, \"LK\": { \"path\": \"M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z\", \"name\": \"Sri Lanka\" }, \"TN\": { \"path\": \"M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z\", \"name\": \"Tunisia\" }, \"TL\": { \"path\": \"M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z\", \"name\": \"East Timor\" }, \"TM\": { \"path\": \"M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z\", \"name\": \"Turkmenistan\" }, \"TJ\": { \"path\": \"M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z\", \"name\": \"Tajikistan\" }, \"LS\": { \"path\": \"M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z\", \"name\": \"Lesotho\" }, \"TH\": { \"path\": \"M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z\", \"name\": \"Thailand\" }, \"TF\": { \"path\": \"M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z\", \"name\": \"French Southern and Antarctic Lands\" }, \"TG\": { \"path\": \"M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z\", \"name\": \"Togo\" }, \"TD\": { \"path\": \"M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z\", \"name\": \"Chad\" }, \"LY\": { \"path\": \"M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z\", \"name\": \"Libya\" }, \"AE\": { \"path\": \"M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z\", \"name\": \"United Arab Emirates\" }, \"VE\": { \"path\": \"M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z\", \"name\": \"Venezuela\" }, \"AF\": { \"path\": \"M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z\", \"name\": \"Afghanistan\" }, \"IQ\": { \"path\": \"M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z\", \"name\": \"Iraq\" }, \"IS\": { \"path\": \"M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z\", \"name\": \"Iceland\" }, \"IR\": { \"path\": \"M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z\", \"name\": \"Iran\" }, \"AM\": { \"path\": \"M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z\", \"name\": \"Armenia\" }, \"IT\": { \"path\": \"M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z\", \"name\": \"Italy\" }, \"VN\": { \"path\": \"M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z\", \"name\": \"Vietnam\" }, \"AR\": { \"path\": \"M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z\", \"name\": \"Argentina\" }, \"AU\": { \"path\": \"M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z\", \"name\": \"Australia\" }, \"IL\": { \"path\": \"M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z\", \"name\": \"Israel\" }, \"IN\": { \"path\": \"M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z\", \"name\": \"India\" }, \"TZ\": { \"path\": \"M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z\", \"name\": \"Tanzania\" }, \"AZ\": { \"path\": \"M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z\", \"name\": \"Azerbaijan\" }, \"IE\": { \"path\": \"M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z\", \"name\": \"Ireland\" }, \"ID\": { \"path\": \"M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z\", \"name\": \"Indonesia\" }, \"UA\": { \"path\": \"M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z\", \"name\": \"Ukraine\" }, \"QA\": { \"path\": \"M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z\", \"name\": \"Qatar\" }, \"MZ\": { \"path\": \"M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z\", \"name\": \"Mozambique\" } }, \"height\": 440.7063107441331, \"projection\": { \"type\": \"mill\", \"centralMeridian\": 11.5 }, \"width\": 900.0 });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcz81ODVjIl0sIm5hbWVzIjpbIiQiLCJmbiIsInZlY3Rvck1hcCJdLCJtYXBwaW5ncyI6IkFBQUFBLEVBQUVDLEVBQUYsQ0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBeUIsZUFBekIsRUFBeUMsRUFBQyxVQUFVLENBQUMsRUFBQyxTQUFTLEtBQVYsRUFBaUIsT0FBTyxDQUF4QixFQUEyQixVQUFVLGlCQUFyQyxFQUF3RCxRQUFRLENBQUMsRUFBQyxLQUFLLENBQUMsa0JBQVAsRUFBMkIsS0FBSyxDQUFDLGtCQUFqQyxFQUFELEVBQXVELEVBQUMsS0FBSyxnQkFBTixFQUF3QixLQUFLLGtCQUE3QixFQUF2RCxDQUFoRSxFQUEwSyxRQUFRLENBQWxMLEVBQUQsQ0FBWCxFQUFtTSxTQUFTLEVBQUMsTUFBTSxFQUFDLFFBQVEscWZBQVQsRUFBZ2dCLFFBQVEsWUFBeGdCLEVBQVAsRUFBOGhCLE1BQU0sRUFBQyxRQUFRLHVOQUFULEVBQWtPLFFBQVEsU0FBMU8sRUFBcGlCLEVBQTB4QixNQUFNLEVBQUMsUUFBUSwra0JBQVQsRUFBMGxCLFFBQVEsY0FBbG1CLEVBQWh5QixFQUFtNUMsTUFBTSxFQUFDLFFBQVEsd1pBQVQsRUFBbWEsUUFBUSxVQUEzYSxFQUF6NUMsRUFBaTFELE1BQU0sRUFBQyxRQUFRLHlSQUFULEVBQW9TLFFBQVEsd0JBQTVTLEVBQXYxRCxFQUE4cEUsTUFBTSxFQUFDLFFBQVEsK0ZBQVQsRUFBMEcsUUFBUSxRQUFsSCxFQUFwcUUsRUFBaXlFLE1BQU0sRUFBQyxRQUFRLCs1QkFBVCxFQUEwNkIsUUFBUSxTQUFsN0IsRUFBdnlFLEVBQXF1RyxNQUFNLEVBQUMsUUFBUSxzNEJBQVQsRUFBaTVCLFFBQVEsT0FBejVCLEVBQTN1RyxFQUE4b0ksTUFBTSxFQUFDLFFBQVEsZ0xBQVQs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RUFBbW5CLFFBQVEsWUFBM25CLEVBQTVvckksRUFBc3hzSSxNQUFNLEVBQUMsUUFBUSx3S0FBVCxFQUFtTCxRQUFRLFNBQTNMLEVBQTV4c0ksRUFBbStzSSxNQUFNLEVBQUMsUUFBUSwrMkdBQVQsRUFBMDNHLFFBQVEsV0FBbDRHLEVBQXorc0ksRUFBeTN6SSxNQUFNLEVBQUMsUUFBUSw2K0NBQVQsRUFBdy9DLFFBQVEsU0FBaGdELEVBQS8zekksRUFBMjQySSxNQUFNLEVBQUMsUUFBUSx1R0FBVCxFQUFrSCxRQUFRLE9BQTFILEVBQWo1MkksRUFBcWgzSSxNQUFNLEVBQUMsUUFBUSwraENBQVQsRUFBMGlDLFFBQVEsWUFBbGpDLEVBQTNoM0ksRUFBNU0sRUFBeXk1SSxVQUFVLGlCQUFuejVJLEVBQXMwNUksY0FBYyxFQUFDLFFBQVEsTUFBVCxFQUFpQixtQkFBbUIsSUFBcEMsRUFBcDE1SSxFQUErMzVJLFNBQVMsS0FBeDQ1SSxFQUF6QyIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIiQuZm4udmVjdG9yTWFwKCdhZGRNYXAnLCAnd29ybGRfbWlsbF9lbicse1wiaW5zZXRzXCI6IFt7XCJ3aWR0aFwiOiA5MDAuMCwgXCJ0b3BcIjogMCwgXCJoZWlnaHRcIjogNDQwLjcwNjMxMDc0NDEzMzEsIFwiYmJveFwiOiBbe1wieVwiOiAtMTI2NzE2NzEuMTIzMzMwMDE0LCBcInhcIjogLTIwMDA0Mjk3LjE1MTUyNTgzNn0sIHtcInlcIjogNjkzMDM5Mi4wMjUxMzUxMiwgXCJ4XCI6IDIwMDI2NTcyLjM5NDc0OTM4NH1dLCBcImxlZnRcIjogMH1dLCBcInBhdGhzXCI6IHtcIkJEXCI6IHtcInBhdGhcIjogXCJNNjUyLjcxLDIyOC44NWwtMC4wNCwxLjM4bC0wLjQ2LC0wLjIxbC0wLjQyLDAuM2wwLjA1LDAuNjVsLTAuMTcsLTEuMzdsLTAuNDgsLTEuMjZsLTEuMDgsLTEuNmwtMC4yMywtMC4xM2wtMi4zMSwtMC4xMWwtMC4zMSwwLjM2bDAuMjEsMC45OGwtMC42LDEuMTFsLTAuOCwtMC40bC0wLjM3LDAuMDlsLTAuMjMsMC4zbC0wLjU0LC0wLjIxbC0wLjc4LC0wLjE5bC0wLjM4LC0yLjA0bC0wLjgzLC0xLjg5bDAuNCwtMS41bC0wLjE2LC0wLjM1bC0xLjI0LC0wLjU3bDAuMzYsLTAuNjJsMS41LC0wLjk1bDAuMDIsLTAuNDlsLTEuNjIsLTEuMjZsMC42NCwtMS4zMWwxLjcsMS4wbDAuMTIsMC4wNGwwLjk2LDAuMTFsMC4xOSwxLjYybDAuMjUsMC4yNmwyLjM4LDAuMzdsMi4zMiwtMC4wNGwxLjA2LDAuMzNsLTAuOTIsMS43OWwtMC45NywwLjEzbC0wLjIzLDAuMTZsLTAuNzcsMS41MWwwLjA1LDAuMzVsMS4zNywxLjM3bDAuNSwtMC4xNGwwLjM1LC0xLjQ2bDAuMjQsLTAuMGwxLjI0LDMuOTJaXCIsIFwibmFtZVwiOiBcIkJhbmdsYWRlc2hcIn0sIFwiQkVcIjoge1wicGF0aFwiOiBcIk00MjkuMjgsMTQzLjk1bDEuNzYsMC4yNWwwLjEzLC0wLjAxbDIuMTYsLTAuNjRsMS40NiwxLjM0bDEuMjYsMC43MWwtMC4yMywxLjhsLTAuNDQsMC4wOGwtMC4yNCwwLjI1bC0wLjIsMS4zNmwtMS44LC0xLjIybC0wLjIzLC0wLjA1bC0xLjE0LDAuMjNsLTEuNjIsLTEuNDNsLTEuMTUsLTEuMzFsLTAuMjEsLTAuMWwtMC45NSwtMC4wNGwtMC4yMSwtMC42OGwxLjY2LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJCZWxnaXVtXCJ9LCBcIkJGXCI6IHtcInBhdGhcIjogXCJNNDEzLjQ4LDI2MC4yMWwtMS4yMiwtMC40NmwtMC4xMywtMC4wMmwtMS4xNywwLjFsLTAuMTUsMC4wNmwtMC43MywwLjUzbC0wLjg3LC0wLjQxbC0wLjM5LC0wLjc1bC0wLjEzLC0wLjEzbC0wLjk4LC0wLjQ4bC0wLjE0LC0xLjJsMC42MywtMC45OWwwLjA1LC0wLjE4bC0wLjA1LC0wLjczbDEuOSwtMi4wMWwwLjA4LC0wLjE0bDAuMzUsLTEuNjVsMC40OSwtMC40NGwxLjA1LDAuM2wwLjIxLC0wLjAybDEuMDUsLTAuNTJsMC4xMywtMC4xM2wwLjMsLTAuNThsMS44NywtMS4xbDAuMTEsLTAuMWwwLjQzLC0wLjcybDIuMjMsLTEuMDFsMS4yMSwtMC4zMmwwLjUxLDAuNGwwLjE5LDAuMDZsMS4yNSwtMC4wMWwtMC4xNCwwLjg5bDAuMDEsMC4xM2wwLjM0LDEuMTZsMC4wNiwwLjExbDEuMzUsMS41OWwwLjA3LDEuMTNsMC4yNCwwLjI4bDIuNjQsMC41M2wtMC4wNSwxLjM5bC0wLjQyLDAuNTlsLTEuMTEsMC4yMWwtMC4yMiwwLjE3bC0wLjQ2LDAuOTlsLTAuNjksMC4yM2wtMi4xMiwtMC4wNWwtMS4xNCwtMC4ybC0wLjE5LDAuMDNsLTAuNzIsMC4zNmwtMS4wNywtMC4xN2wtNC4zNSwwLjEybC0wLjI5LDAuMjlsLTAuMDYsMS40NGwwLjI1LDEuNDVaXCIsIFwibmFtZVwiOiBcIkJ1cmtpbmEgRmFzb1wifSwgXCJCR1wiOiB7XCJwYXRoXCI6IFwiTTQ3Ny42MywxNjYuODRsMC41MSwwLjlsMC4zMywwLjE0bDAuOSwtMC4yMWwxLjkxLDAuNDdsMy42OCwwLjE2bDAuMTcsLTAuMDVsMS4yLC0wLjc1bDIuNzgsLTAuNjdsMS43MiwxLjA1bDEuMDIsMC4yNGwtMC45NywwLjk3bC0wLjkxLDIuMTdsMC4wLDAuMjRsMC41NiwxLjE5bC0xLjU4LC0wLjNsLTAuMTYsMC4wMWwtMi41NSwwLjk1bC0wLjIsMC4yOGwtMC4wMiwxLjIzbC0xLjkyLDAuMjRsLTEuNjgsLTAuOTlsLTAuMjcsLTAuMDJsLTEuOTQsMC44bC0xLjUyLC0wLjA3bC0wLjE1LC0xLjcybC0wLjEyLC0wLjIxbC0wLjk5LC0wLjc2bDAuMTgsLTAuMThsMC4wMiwtMC4zOWwtMC4xNywtMC4yMmwwLjMzLC0wLjc1bDAuOTEsLTAuOTFsMC4wMSwtMC40MmwtMS4xNiwtMS4yNWwtMC4xOCwtMC44OWwwLjI0LC0wLjI3WlwiLCBcIm5hbWVcIjogXCJCdWxnYXJpYVwifSwgXCJCQVwiOiB7XCJwYXRoXCI6IFwiTTQ2OC4zOSwxNjQuNjZsMC4xNiwwLjA0bDAuNDMsLTAuMGwtMC40MywwLjkzbDAuMDYsMC4zNGwxLjA4LDEuMDZsLTAuMjgsMS4wOWwtMC41LDAuMTNsLTAuNDcsMC4yOGwtMC44NiwwLjc0bC0wLjEsMC4xNmwtMC4yOCwxLjI5bC0xLjgxLC0wLjk0bC0wLjksLTEuMjJsLTEuMCwtMC43M2wtMS4xLC0xLjFsLTAuNTUsLTAuOTZsLTEuMTEsLTEuM2wwLjMsLTAuNzVsMC41OSwwLjQ2bDAuNDIsLTAuMDRsMC40NiwtMC41NGwxLjAsLTAuMDZsMi4xMSwwLjVsMS43MiwtMC4wM2wxLjA2LDAuNjRaXCIsIFwibmFtZVwiOiBcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcIn0sIFwiQk5cIjoge1wicGF0aFwiOiBcIk03MDcuMzQsMjczLjU3bDAuNzYsLTAuNzJsMS41OSwtMS4wM2wtMC4xOCwxLjkzbC0wLjksLTAuMDZsLTAuMjgsMC4xNGwtMC4zMSwwLjUxbC0wLjY4LC0wLjc4WlwiLCBcIm5hbWVcIjogXCJCcnVuZWlcIn0sIFwiQk9cIjoge1wicGF0aFwiOiBcIk0yNjMuODMsMzQwLjc5bC0wLjIzLC0wLjEybC0yLjg2LC0wLjExbC0wLjI4LDAuMTdsLTAuNzcsMS42N2wtMS4xNywtMS41MWwtMC4xOCwtMC4xMWwtMy4yOCwtMC42NGwtMC4yOCwwLjFsLTIuMDIsMi4zbC0xLjQzLDAuMjlsLTAuOTEsLTMuMzVsLTEuMzEsLTIuODhsMC43NSwtMi40MWwtMC4wOSwtMC4zMmwtMS4yMywtMS4wM2wtMC4zMSwtMS43NmwtMC4wNSwtMC4xMmwtMS4xMiwtMS42bDEuNDksLTIuNjJsMC4wMSwtMC4yOGwtMS4wLC0yLjBsMC40OCwtMC43MmwwLjAyLC0wLjI5bC0wLjM3LC0wLjc4bDAuODcsLTEuMTNsMC4wNiwtMC4xOGwwLjA1LC0yLjE3bDAuMTIsLTEuNzFsMC41LC0wLjhsMC4wMSwtMC4zbC0xLjksLTMuNThsMS4zLDAuMTVsMS4zNCwtMC4wNWwwLjIzLC0wLjEybDAuNTEsLTAuN2wyLjEyLC0wLjk5bDEuMzEsLTAuOTNsMi44MSwtMC4zN2wtMC4yMSwxLjUxbDAuMDEsMC4xM2wwLjI5LDAuOTFsLTAuMTksMS42NGwwLjExLDAuMjdsMi43MiwyLjI3bDAuMTUsMC4wN2wyLjcxLDAuNDFsMC45MiwwLjg4bDAuMTIsMC4wN2wxLjY0LDAuNDlsMS4wLDAuNzFsMC4xOCwwLjA2bDEuNSwtMC4wMmwxLjI0LDAuNjRsMC4xLDEuMzFsMC4wNSwwLjE0bDAuNDQsMC42OGwwLjAyLDAuNzNsLTAuNDQsMC4wM2wtMC4yNywwLjM5bDAuOTYsMi45OWwwLjI4LDAuMjFsNC40MywwLjFsLTAuMjgsMS4xMmwwLjAsMC4xNWwwLjI3LDEuMDJsMC4xNSwwLjE5bDEuMjcsMC42N2wwLjUyLDEuNDJsLTAuNDIsMS45MWwtMC42NiwxLjFsLTAuMDQsMC4ybDAuMjEsMS4zbC0wLjE5LDAuMTNsLTAuMDEsLTAuMjdsLTAuMTUsLTAuMjRsLTIuMzMsLTEuMzNsLTAuMTQsLTAuMDRsLTIuMzgsLTAuMDNsLTQuMzYsMC43NmwtMC4yMSwwLjE2bC0xLjIsMi4yOWwtMC4wMywwLjEzbC0wLjA2LDEuMzdsLTAuNzksMi41M2wtMC4wNSwtMC4wOFpcIiwgXCJuYW1lXCI6IFwiQm9saXZpYVwifSwgXCJKUFwiOiB7XCJwYXRoXCI6IFwiTTc4MS4xNywxNjYuNzhsMS44LDAuNjdsMC4yOCwtMC4wNGwxLjM4LC0xLjAxbDAuNDMsMi42N2wtMy40NCwwLjc3bC0wLjE4LDAuMTJsLTIuMDQsMi43OWwtMy43MSwtMS45NGwtMC40MiwwLjE1bC0xLjI5LDMuMTFsLTIuMzIsMC4wNGwtMC4zLC0yLjYzbDEuMTIsLTIuMWwyLjUxLC0wLjE2bDAuMjgsLTAuMjVsMC43MywtNC4yMmwwLjU4LC0xLjlsMi41OSwyLjg0bDIuMCwxLjFaTTc3My42NiwxODcuMzZsLTAuOTIsMi4yNGwtMC4wMSwwLjJsMC40LDEuM2wtMS4xOCwxLjgxbC0zLjA2LDEuMjhsLTQuMzUsMC4xN2wtMC4xOSwwLjA4bC0zLjQsMy4wNmwtMS4zNiwtMC44N2wtMC4xLC0xLjk1bC0wLjM0LC0wLjI4bC00LjM1LDAuNjJsLTIuOTksMS4zM2wtMi44NywwLjA1bC0wLjI4LDAuMmwwLjA5LDAuMzNsMi4zNywxLjkzbC0xLjU3LDQuNDRsLTEuMzUsMC45N2wtMC45LC0wLjc5bDAuNTcsLTIuMzJsLTAuMTUsLTAuMzRsLTEuNSwtMC43N2wtMC44MSwtMS41M2wyLjA0LC0wLjc1bDAuMTQsLTAuMWwxLjI4LC0xLjcybDIuNDcsLTEuNDNsMS44NCwtMS45Mmw0LjgzLC0wLjgybDIuNjIsMC41N2wwLjMzLC0wLjE2bDIuNDUsLTQuNzdsMS4zOCwxLjE0bDAuMzgsMC4wbDUuMSwtNC4wMmwwLjA5LC0wLjExbDEuNTcsLTMuNTdsMC4wMiwtMC4xNmwtMC40MiwtMy4yMmwwLjk0LC0xLjY3bDIuMjcsLTAuNDdsMS4yNiwzLjgybC0wLjA3LDIuMjNsLTIuMjYsMi44NmwtMC4wNiwwLjE5bDAuMDQsMi45M1pNNzU3Ljg1LDE5Ni4xOGwwLjIyLDAuNjZsLTEuMTEsMS4zM2wtMC44LC0wLjdsLTAuMzMsLTAuMDRsLTEuMjgsMC42NWwtMC4xNCwwLjE1bC0wLjU0LDEuMzRsLTEuMTcsLTAuNTdsMC4wMiwtMS4wM2wxLjIsLTEuNDVsMS4yNCwwLjI4bDAuMjksLTAuMWwwLjksLTEuMDNsMS41MSwwLjVaXCIsIFwibmFtZVwiOiBcIkphcGFuXCJ9LCBcIkJJXCI6IHtcInBhdGhcIjogXCJNNDk0LjcsMjk1LjgzbC0wLjE0LC0yLjcxbC0wLjA0LC0wLjEzbC0wLjM0LC0wLjYybDAuOTMsMC4xMmwwLjMsLTAuMTZsMC42NywtMS4yNWwwLjksMC4xMWwwLjExLDAuNzZsMC4wOCwwLjE2bDAuNDYsMC40OGwwLjAyLDAuNTZsLTAuNTUsMC40OGwtMC45NiwxLjI5bC0wLjgyLDAuODJsLTAuNjEsMC4wN1pcIiwgXCJuYW1lXCI6IFwiQnVydW5kaVwifSwgXCJCSlwiOiB7XCJwYXRoXCI6IFwiTTQyNy40LDI2OC45NGwtMS41OCwwLjIybC0wLjUyLC0xLjQ1bDAuMTEsLTUuNzNsLTAuMDgsLTAuMjFsLTAuNDMsLTAuNDRsLTAuMDksLTEuMTNsLTAuMDksLTAuMTlsLTEuNTIsLTEuNTJsMC4yNCwtMS4wMWwwLjcsLTAuMjNsMC4xOCwtMC4xNmwwLjQ1LC0wLjk3bDEuMDcsLTAuMjFsMC4xOSwtMC4xMmwwLjUzLC0wLjczbDAuNzMsLTAuNjVsMC42OCwtMC4wbDEuNjksMS4zbC0wLjA4LDAuNjdsMC4wMiwwLjE0bDAuNTIsMS4zOGwtMC40NCwwLjlsLTAuMDEsMC4yNGwwLjIsMC41MmwtMS4xLDEuNDJsLTAuNzYsMC43NmwtMC4wOCwwLjEzbC0wLjQ3LDEuNTlsMC4wNSwxLjY5bC0wLjEzLDMuNzlaXCIsIFwibmFtZVwiOiBcIkJlbmluXCJ9LCBcIkJUXCI6IHtcInBhdGhcIjogXCJNNjUwLjM4LDIxMy43OGwwLjg4LDAuNzVsLTAuMTMsMS4yNGwtMS43NywwLjA3bC0yLjEsLTAuMThsLTEuNTcsMC40bC0yLjAyLC0wLjkxbC0wLjAyLC0wLjI0bDEuNTQsLTEuODdsMS4xOCwtMC42bDEuNjcsMC41OWwxLjMyLDAuMDhsMS4wMSwwLjY3WlwiLCBcIm5hbWVcIjogXCJCaHV0YW5cIn0sIFwiSk1cIjoge1wicGF0aFwiOiBcIk0yMjYuNjcsMjM4LjM3bDEuNjQsMC4yM2wxLjIsMC41NmwwLjExLDAuMTlsLTEuMjUsMC4wM2wtMC4xNCwwLjA0bC0wLjY1LDAuMzdsLTEuMjQsLTAuMzdsLTEuMTcsLTAuNzdsMC4xMSwtMC4yMmwwLjg2LC0wLjE1bDAuNTIsMC4wOFpcIiwgXCJuYW1lXCI6IFwiSmFtYWljYVwifSwgXCJCV1wiOiB7XCJwYXRoXCI6IFwiTTQ4NC45MSwzMzEuOTZsMC41MywwLjUybDAuODIsMS41M2wyLjgzLDIuODZsMC4xNCwwLjA4bDAuODUsMC4yMmwwLjAzLDAuODFsMC43NCwxLjY2bDAuMjEsMC4xN2wxLjg3LDAuMzlsMS4xNywwLjg3bC0zLjEzLDEuNzFsLTIuMywyLjAxbC0wLjA3LDAuMWwtMC44MiwxLjc0bC0wLjY2LDAuODhsLTEuMjQsMC4xOWwtMC4yNCwwLjJsLTAuNjUsMS45OGwtMS40LDAuNTVsLTEuOSwtMC4xMmwtMS4yLC0wLjc0bC0xLjA2LC0wLjMybC0wLjIyLDAuMDJsLTEuMjIsMC42MmwtMC4xNCwwLjE0bC0wLjU4LDEuMjFsLTEuMTYsMC43OWwtMS4xOCwxLjEzbC0xLjUsMC4yM2wtMC40LC0wLjY4bDAuMjIsLTEuNTNsLTAuMDQsLTAuMTlsLTEuNDgsLTIuNTRsLTAuMTEsLTAuMTFsLTAuNTMsLTAuMzFsLTAuMCwtNy4yNWwyLjE4LC0wLjA4bDAuMjksLTAuM2wwLjA3LC05LjBsMS42MywtMC4wOGwzLjY5LC0wLjg2bDAuODQsMC45M2wwLjM4LDAuMDVsMS41MywtMC45N2wwLjc5LC0wLjAzbDEuMywtMC41M2wwLjIzLDAuMWwwLjkyLDEuOTZaXCIsIFwibmFtZVwiOiBcIkJvdHN3YW5hXCJ9LCBcIkJSXCI6IHtcInBhdGhcIjogXCJNMjU5LjQ5LDI3NC44N2wxLjQyLDAuMjVsMS45NywwLjYybDAuMjgsLTAuMDVsMC42NywtMC41NWwxLjc2LC0wLjM4bDIuOCwtMC45NGwwLjEyLC0wLjA4bDAuOTIsLTAuOTZsMC4wNSwtMC4zM2wtMC4xNSwtMC4zMmwwLjczLC0wLjA2bDAuMzYsMC4zNWwtMC4yNywwLjkzbDAuMTcsMC4zNmwwLjc2LDAuMzRsMC40NCwwLjlsLTAuNTgsMC43M2wtMC4wNiwwLjEzbC0wLjQsMi4xM2wwLjAzLDAuMTlsMC42MiwxLjIybDAuMTcsMS4xMWwwLjExLDAuMTlsMS41NCwxLjE4bDAuMTUsMC4wNmwxLjIzLDAuMTJsMC4yOSwtMC4xNWwwLjIsLTAuMzZsMC43MSwtMC4xMWwxLjEzLC0wLjQ0bDAuNzksLTAuNjNsMS4yNSwwLjE5bDAuNjUsLTAuMDhsMS4zMiwwLjJsMC4zMiwtMC4xOGwwLjIzLC0wLjUxbC0wLjA1LC0wLjMxbC0wLjMxLC0wLjM3bDAuMTEsLTAuMzFsMC43NSwwLjE3bDAuMTMsMC4wbDEuMSwtMC4yNGwxLjM0LDAuNWwxLjA4LDAuNTFsMC4zMywtMC4wNWwwLjY3LC0wLjU4bDAuMjcsMC4wNWwwLjI4LDAuNTdsMC4zMSwwLjE3bDEuMiwtMC4xOGwwLjE3LC0wLjA4bDEuMDMsLTEuMDVsMC43NiwtMS44MmwxLjM5LC0yLjE2bDAuNDksLTAuMDdsMC41MiwxLjE3bDEuNCw0LjM3bDAuMiwwLjJsMS4xNCwwLjM1bDAuMDUsMS4zOWwtMS44LDEuOTdsMC4wMSwwLjQybDAuNzgsMC43NWwwLjE4LDAuMDhsNC4xNiwwLjM3bDAuMDgsMi4yNWwwLjUsMC4yMmwxLjc4LC0xLjU0bDIuOTgsMC44NWw0LjA3LDEuNWwxLjA3LDEuMjhsLTAuMzcsMS4yM2wwLjM2LDAuMzhsMi44MywtMC43NWw0LjgsMS4zbDMuNzUsLTAuMDlsMy42LDIuMDJsMy4yNywyLjg0bDEuOTMsMC43MmwyLjEzLDAuMTFsMC43NiwwLjY2bDEuMjIsNC41NmwtMC45Niw0LjAzbC0xLjIyLDEuNThsLTMuNTIsMy41MWwtMS42MywyLjkxbC0xLjc1LDIuMDlsLTAuNSwwLjA0bC0wLjI2LDAuMTlsLTAuNzIsMS45OWwwLjE4LDQuNzZsLTAuOTUsNS41NmwtMC43NCwwLjk2bC0wLjA2LDAuMTVsLTAuNDMsMy4zOWwtMi40OSwzLjM0bC0wLjA2LDAuMTNsLTAuNCwyLjU2bC0xLjksMS4wN2wtMC4xMywwLjE2bC0wLjUxLDEuMzhsLTIuNTksMC4wbC0zLjk0LDEuMDFsLTEuODIsMS4xOWwtMi44NSwwLjgxbC0zLjAxLDIuMTdsLTIuMTIsMi42NWwtMC4wNiwwLjEzbC0wLjM2LDIuMGwwLjAxLDAuMTNsMC40LDEuNDJsLTAuNDUsMi42M2wtMC41MywxLjIzbC0xLjc2LDEuNTNsLTIuNzYsNC43OWwtMi4xNiwyLjE1bC0xLjY5LDEuMjlsLTAuMDksMC4xMmwtMS4xMiwyLjZsLTEuMywxLjI2bC0wLjQ1LC0xLjAybDAuOTksLTEuMThsMC4wMSwtMC4zN2wtMS41LC0xLjk1bC0xLjk4LC0xLjU0bC0yLjU4LC0xLjc3bC0wLjIsLTAuMDVsLTAuODEsMC4wN2wtMi40MiwtMi4wNWwtMC4yNSwtMC4wN2wtMC43NywwLjE0bDIuNzUsLTMuMDdsMi44LC0yLjYxbDEuNjcsLTEuMDlsMi4xMSwtMS40OWwwLjEzLC0wLjI0bDAuMDUsLTIuMTVsLTAuMDcsLTAuMmwtMS4yNiwtMS41NGwtMC4zNSwtMC4wOWwtMC42NCwwLjI3bDAuMywtMC45NWwwLjM0LC0xLjU3bDAuMDEsLTEuNTJsLTAuMTYsLTAuMjZsLTAuOSwtMC40OGwtMC4yNywtMC4wMWwtMC44NiwwLjM5bC0wLjY1LC0wLjA4bC0wLjIzLC0wLjhsLTAuMjMsLTIuMzlsLTAuMDQsLTAuMTJsLTAuNDcsLTAuNzlsLTAuMTQsLTAuMTJsLTEuNjksLTAuNzFsLTAuMjUsMC4wMWwtMC45MywwLjQ3bC0yLjI5LC0wLjQ0bDAuMTUsLTMuM2wtMC4wMywtMC4xNWwtMC42MiwtMS4yMmwwLjU3LC0wLjM5bDAuMTMsLTAuM2wtMC4yMiwtMS4zN2wwLjY3LC0xLjEzbDAuNDQsLTIuMDRsLTAuMDEsLTAuMTdsLTAuNTksLTEuNjFsLTAuMTQsLTAuMTZsLTEuMjUsLTAuNjZsLTAuMjIsLTAuODJsMC4zNSwtMS40MWwtMC4yOCwtMC4zN2wtNC41OSwtMC4xbC0wLjc4LC0yLjQxbDAuMzQsLTAuMDJsMC4yOCwtMC4zMWwtMC4wMywtMS4xbC0wLjA1LC0wLjE2bC0wLjQ1LC0wLjY4bC0wLjEsLTEuNGwtMC4xNiwtMC4yNGwtMS40NSwtMC43NmwtMC4xNCwtMC4wM2wtMS40OCwwLjAybC0xLjA0LC0wLjczbC0xLjYyLC0wLjQ4bC0wLjkzLC0wLjlsLTAuMTYsLTAuMDhsLTIuNzIsLTAuNDFsLTIuNTMsLTIuMTJsMC4xOCwtMS41NGwtMC4wMSwtMC4xM2wtMC4yOSwtMC45MWwwLjI2LC0xLjgzbC0wLjM0LC0wLjM0bC0zLjI4LDAuNDNsLTAuMTQsMC4wNWwtMS4zLDAuOTNsLTIuMTYsMS4wMWwtMC4xMiwwLjA5bC0wLjQ3LDAuNjVsLTEuMTIsMC4wNWwtMS44NCwtMC4yMWwtMC4xMiwwLjAxbC0xLjMzLDAuNDFsLTAuODIsLTAuMjFsMC4xNiwtMy42bC0wLjQ4LC0wLjI2bC0xLjk3LDEuNDNsLTEuOTYsLTAuMDZsLTAuODYsLTEuMjNsLTAuMjIsLTAuMTNsLTEuMjMsLTAuMTFsMC4zNCwtMC42OWwtMC4wNSwtMC4zM2wtMS4zNiwtMS41bC0wLjkyLC0yLjBsMC40NSwtMC4zMmwwLjEzLC0wLjI1bC0wLjAsLTAuODdsMS4zNCwtMC42NGwwLjE3LC0wLjMybC0wLjIzLC0xLjIzbDAuNTYsLTAuNzdsMC4wNSwtMC4xM2wwLjE2LC0xLjAzbDIuNywtMS42MWwyLjAxLC0wLjQ3bDAuMTYsLTAuMDlsMC4yNCwtMC4yN2wyLjExLDAuMTFsMC4zMSwtMC4yNWwxLjEzLC02Ljg3bDAuMDYsLTEuMTJsLTAuNCwtMS41M2wtMC4xLC0wLjE1bC0xLjAsLTAuODJsMC4wMSwtMS40NWwxLjA4LC0wLjMybDAuMzksMC4ybDAuNDQsLTAuMjRsMC4wOCwtMC45NmwtMC4yNSwtMC4zMmwtMS4yMiwtMC4yMmwtMC4wMiwtMS4wMWw0LjU3LDAuMDVsMC4yMiwtMC4wOWwwLjYsLTAuNjNsMC40NCwwLjVsMC40NywxLjQybDAuNDUsMC4xNmwwLjI3LC0wLjE4bDEuMjEsMS4xNmwwLjIzLDAuMDhsMS45NSwtMC4xNmwwLjIzLC0wLjE0bDAuNDMsLTAuNjdsMS43NiwtMC41NWwxLjA1LC0wLjQybDAuMTgsLTAuMmwwLjI1LC0wLjkybDEuNjUsLTAuNjZsMC4xOCwtMC4zNWwtMC4xNCwtMC41M2wtMC4yNiwtMC4yMmwtMS45MSwtMC4xOWwtMC4yOSwtMS4zM2wwLjEsLTEuNjRsLTAuMTUsLTAuMjhsLTAuNDQsLTAuMjVaXCIsIFwibmFtZVwiOiBcIkJyYXppbFwifSwgXCJCU1wiOiB7XCJwYXRoXCI6IFwiTTIyNy41MSwyMTYuNjlsMC4zLDAuMThsLTAuMjQsMS4wN2wwLjAzLC0xLjA0bC0wLjA5LC0wLjIxWk0yMjYuNSwyMjQuMDNsLTAuMTMsMC4wM2wtMC41NCwtMS4zbC0wLjA5LC0wLjEybC0wLjc4LC0wLjY0bDAuNCwtMS4yNmwwLjMzLDAuMDVsMC43OSwyLjBsMC4wMSwxLjI0Wk0yMjUuNzYsMjE2LjVsLTIuMTYsMC4zNGwtMC4wNywtMC40MWwwLjg1LC0wLjE2bDEuMzYsMC4wN2wwLjAyLDAuMTZaXCIsIFwibmFtZVwiOiBcIlRoZSBCYWhhbWFzXCJ9LCBcIkJZXCI6IHtcInBhdGhcIjogXCJNNDgwLjA4LDEzNS4yOGwyLjA5LDAuMDJsMC4xMywtMC4wM2wyLjcyLC0xLjNsMC4xNiwtMC4xOWwwLjU1LC0xLjgzbDEuOTQsLTEuMDZsMC4xNSwtMC4zMWwtMC4yLC0xLjMzbDEuMzMsLTAuNTJsMi41OCwtMS4zbDIuMzksMC44bDAuMywwLjc1bDAuMzcsMC4xN2wxLjIyLC0wLjM5bDIuMTgsMC43NWwwLjIsMS4zNmwtMC40OCwwLjg1bDAuMDEsMC4zMmwxLjU3LDIuMjZsMC45MiwwLjZsLTAuMSwwLjQxbDAuMTksMC4zNWwxLjYxLDAuNTdsMC40OCwwLjZsLTAuNjQsMC40OWwtMS45MSwtMC4xMWwtMC4xOCwwLjA1bC0wLjQ4LDAuMzJsLTAuMSwwLjM5bDAuNTcsMS4xbDAuNTEsMS43OGwtMS43OSwwLjE3bC0wLjE4LDAuMDhsLTAuNzcsMC43M2wtMC4wOSwwLjE5bC0wLjEzLDEuMzFsLTAuNzUsLTAuMjJsLTIuMTEsMC4xNWwtMC41NiwtMC42NmwtMC4zOSwtMC4wNmwtMC44LDAuNDlsLTAuNzksLTAuNGwtMC4xMywtMC4wM2wtMS45NCwtMC4wN2wtMi43NiwtMC43OWwtMi41OCwtMC4yN2wtMS45OCwwLjA3bC0wLjE1LDAuMDVsLTEuMzEsMC44NmwtMC44LDAuMDlsLTAuMDQsLTEuMTZsLTAuMDMsLTAuMTJsLTAuNjMsLTEuMjhsMS4yMiwtMC41NmwwLjE3LC0wLjI3bDAuMDEsLTEuMzVsLTAuMDQsLTAuMTVsLTAuNjYsLTEuMjRsLTAuMDgsLTEuMTJaXCIsIFwibmFtZVwiOiBcIkJlbGFydXNcIn0sIFwiQlpcIjoge1wicGF0aFwiOiBcIk0xOTguMDMsMjM5LjdsMC4yOCwwLjE5bDAuNDMsLTAuMWwwLjgyLC0xLjQybDAuMCwwLjA3bDAuMjksMC4yOWwwLjE2LDAuMGwtMC4wMiwwLjM1bC0wLjM5LDEuMDhsMC4wMiwwLjI1bDAuMTYsMC4yOWwtMC4yMywwLjhsMC4wNCwwLjI0bDAuMDksMC4xNGwtMC4yNSwxLjEybC0wLjM4LDAuNTNsLTAuMzMsMC4wNmwtMC4yMSwwLjE1bC0wLjQxLDAuNzRsLTAuMjUsMC4wbDAuMTcsLTIuNThsMC4wMSwtMi4yWlwiLCBcIm5hbWVcIjogXCJCZWxpemVcIn0sIFwiUlVcIjoge1wicGF0aFwiOiBcIk02ODguNTcsMzguODVsMC42MywyLjM5bDAuNDQsMC4xOWwyLjIyLC0xLjIzbDcuMTgsMC4wN2w1LjU0LDIuNDlsMS44NSwxLjc3bC0wLjU1LDIuMzRsLTIuNjQsMS40MmwtNi41NywyLjc2bC0xLjk1LDEuNWwwLjEyLDAuNTNsMy4wOSwwLjY4bDMuNjksMS4yM2wwLjIxLC0wLjAxbDEuOTgsLTAuODFsMS4xNiwyLjg0bDAuNSwwLjA4bDEuMDMsLTEuMThsMy44NiwtMC43NGw3Ljc5LDAuNzhsMC41NiwyLjA1bDAuMjcsMC4yMmwxMC40NywwLjcxbDAuMzIsLTAuMjlsMC4xMywtMy4zNGw0Ljk4LDAuOGwzLjk2LC0wLjAybDMuODgsMi40M2wxLjA2LDIuNzlsLTEuMzgsMS44M2wwLjAxLDAuMzhsMy4xNSwzLjY0bDAuMSwwLjA4bDMuOTQsMS44NmwwLjQsLTAuMTRsMi4yOCwtNC41NmwzLjc1LDEuOTRsMC4yMiwwLjAybDQuMTgsLTEuMjJsNC43NiwxLjRsMC4yNiwtMC4wNGwxLjc0LC0xLjIzbDMuOTgsMC42M2wwLjMyLC0wLjQxbC0xLjcxLC00LjFsMy4wLC0xLjg2bDIyLjM5LDMuMDRsMi4wNiwyLjY3bDAuMSwwLjA4bDYuNTUsMy41MWwwLjE3LDAuMDNsMTAuMDgsLTAuODZsNC44NiwwLjczbDEuOTEsMS43MmwtMC4yOSwzLjEzbDAuMTgsMC4zMWwzLjA4LDEuMjZsMC4xOSwwLjAxbDMuMzIsLTAuOWw0LjM3LC0wLjExbDQuNzgsMC44N2w0LjYxLC0wLjQ4bDQuMjYsMy44MmwwLjMyLDAuMDVsMy4xLC0xLjRsMC4xMiwtMC40NWwtMS45MSwtMi42N2wwLjkyLC0xLjY0bDcuNzgsMS4yMmw1LjIyLC0wLjI2bDcuMTIsMi4xbDkuNiw1LjIybDYuNCw0LjE1bC0wLjIsMi40NGwwLjE0LDAuMjhsMS42OSwxLjA0bDAuNDUsLTAuMzFsLTAuNTEsLTIuNjZsNi4zMSwwLjU4bDQuNTIsMy42MWwtMi4xLDEuNTJsLTQuMDIsMC40MmwtMC4yNywwLjI5bC0wLjA2LDMuODNsLTAuODEsMC42N2wtMi4xNCwtMC4xMWwtMS45MSwtMS4zOWwtMy4xOSwtMS4xM2wtMC41MSwtMS42M2wtMC4yMSwtMC4ybC0yLjU0LC0wLjY3bC0wLjEzLC0wLjBsLTIuNjksMC41bC0xLjEyLC0xLjE5bDAuNDgsLTEuMzZsLTAuMzgsLTAuMzlsLTMuMCwwLjk4bC0wLjE3LDAuNDRsMS4wMiwxLjc2bC0xLjI3LDEuNTVsLTMuMDksMS43MWwtMy4xNSwtMC4yOWwtMC4zLDAuMThsMC4wNywwLjM0bDIuMjIsMi4xbDEuNDcsMy4yMmwxLjE1LDEuMDlsMC4yNSwxLjQxbC0wLjQ4LDAuNzZsLTQuNDcsLTAuODFsLTAuMTcsMC4wMmwtNi45NywyLjlsLTIuMiwwLjQ0bC0wLjExLDAuMDVsLTMuODMsMi42OGwtMy42MywyLjMybC0wLjEsMC4xMWwtMC43NiwxLjRsLTMuMywtMi40bC0wLjMsLTAuMDNsLTYuMzEsMi44NWwtMC45OSwtMS4yMWwtMC40LC0wLjA2bC0yLjMyLDEuNTRsLTMuMjMsLTAuNDlsLTAuMzMsMC4ybC0wLjc5LDIuMzlsLTIuOTcsMy41MWwtMC4wNywwLjIxbDAuMDksMS40N2wwLjIyLDAuMjdsMi42MiwwLjc0bC0wLjMsNC43bC0yLjA2LDAuMTJsLTAuMjYsMC4ybC0xLjA3LDIuOTRsMC4wNCwwLjI3bDAuODMsMS4xOWwtNC4wMywxLjYzbC0wLjE4LDAuMjFsLTAuODMsMy43MmwtMy41NSwwLjc5bC0wLjIzLDAuMjNsLTAuNzMsMy4zMmwtMy4yMiwyLjc2bC0wLjc2LC0xLjg4bC0xLjA3LC00Ljg4bC0xLjM5LC03LjU5bDEuMTcsLTQuNzZsMi4wNSwtMi4wOGwwLjA5LC0wLjE5bDAuMTEsLTEuNDZsMy42NywtMC43N2wwLjE1LC0wLjA4bDQuNDcsLTQuNjFsNC4yOSwtMy44Mmw0LjQ4LC0zLjAxbDAuMTEsLTAuMTRsMi4wMSwtNS40M2wtMC4zMSwtMC40bC0zLjA0LDAuMzNsLTAuMjQsMC4xN2wtMS40NywzLjExbC01Ljk4LDMuOTRsLTEuOTEsLTQuMzZsLTAuMzMsLTAuMTdsLTYuNDYsMS4zbC0wLjE1LDAuMDhsLTYuMjcsNi4zM2wtMC4wMSwwLjQxbDEuNywxLjg3bC01LjA0LDAuODdsLTMuNTEsMC4zNGwwLjE2LC0yLjMybC0wLjI2LC0wLjMybC0zLjg5LC0wLjU2bC0wLjE5LDAuMDRsLTMuMDIsMS43N2wtNy42MywtMC42M2wtOC4yNCwxLjFsLTAuMTYsMC4wN2wtOC4xMSw3LjA5bC05LjYsOC4zMWwwLjE2LDAuNTJsMy43OSwwLjQybDEuMTYsMi4wM2wwLjE3LDAuMTRsMi40MywwLjc2bDAuMzEsLTAuMDhsMS41LC0xLjYxbDIuNDksMC4ybDMuNDYsMy42bDAuMDgsMi42N2wtMS45MSwzLjI2bC0wLjA0LDAuMTRsLTAuMjEsMy45MWwtMS4xMSw1LjA5bC0zLjczLDQuNTVsLTAuODcsMi4yMWwtNi43Myw3LjE0bC0xLjU5LDEuNzdsLTMuMjMsMS43MmwtMS4zOCwwLjAzbC0xLjQ4LC0xLjM5bC0wLjM3LC0wLjAzbC0zLjM2LDIuMjJsLTAuMTEsMC4xNGwtMC4xNiwwLjQybC0wLjAxLC0xLjA5bDEuMCwtMC4wNmwwLjI4LC0wLjI3bDAuMzYsLTMuNmwtMC42MSwtMi41MWwxLjg1LC0wLjk0bDIuOTQsMC41M2wwLjMyLC0wLjE1bDEuNzEsLTMuMWwwLjg0LC0zLjM4bDAuOTcsLTEuMThsMS4zMiwtMi44OGwtMC4zNCwtMC40MmwtNC4xNCwwLjk1bC0yLjE4LDEuMjVsLTMuNTEsLTAuMGwtMC45NSwtMi44MWwtMC4xLC0wLjE0bC0yLjk3LC0yLjNsLTAuMTEsLTAuMDVsLTQuMTksLTEuMGwtMC44OSwtMy4wOGwtMC44NywtMi4wM2wtMC45NSwtMS40NmwtMS41NCwtMy4zN2wtMC4xMiwtMC4xNGwtMi4yNywtMS4yOGwtMy44MywtMS4wMmwtMy4zNywwLjFsLTMuMTEsMC42MWwtMC4xMywwLjA2bC0yLjA3LDEuNjlsMC4wNCwwLjQ5bDEuMjMsMC43MmwwLjAzLDEuNTNsLTEuMzQsMS4wNWwtMi4yNiwzLjUxbC0wLjA1LDAuMTdsMC4wMiwxLjI3bC0zLjI1LDEuOWwtMi44NywtMS4xN2wtMC4xNCwtMC4wMmwtMi44NiwwLjI2bC0xLjIyLC0xLjAybC0wLjEyLC0wLjA2bC0xLjUsLTAuMzVsLTAuMjMsMC4wNGwtMy42MiwyLjI3bC0zLjI0LDAuNTNsLTIuMjgsMC43OWwtMy4wOCwtMC41MWwtMi4yNCwwLjAzbC0xLjQ5LC0xLjYxbC0yLjQ1LC0xLjU3bC0wLjExLC0wLjA0bC0yLjYsLTAuNDNsLTMuMTcsMC40M2wtMi4zMSwwLjU5bC0zLjMxLC0xLjI4bC0wLjQ1LC0yLjMxbC0wLjIxLC0wLjIzbC0yLjk0LC0wLjg1bC0yLjI2LC0wLjM5bC0yLjc3LC0xLjM2bC0wLjM3LDAuMDlsLTIuNTksMy40NWwtMC4wMywwLjMybDAuOTEsMS43NGwtMi4xNSwyLjAxbC0zLjQ3LC0wLjc5bC0yLjQ0LC0wLjEybC0xLjU5LC0xLjQ2bC0wLjIsLTAuMDhsLTIuNTUsLTAuMDVsLTIuMTIsLTAuOThsLTAuMjQsLTAuMDFsLTMuODUsMS41N2wtNC43NCwyLjc5bC0yLjU5LDAuNTVsLTAuNzksMC4yMWwtMS4yMSwtMS44MWwtMC4yOSwtMC4xM2wtMy4wNSwwLjQxbC0wLjk2LC0xLjI1bC0wLjE0LC0wLjFsLTEuNjUsLTAuNmwtMS4xNSwtMS44MmwtMC4xMywtMC4xMmwtMS4zOCwtMC42bC0wLjE5LC0wLjAybC0zLjQ5LDAuODJsLTMuMzUsLTEuODVsLTAuMzgsMC4wOGwtMS4wOCwxLjRsLTUuMzYsLTguMTdsLTMuMDIsLTIuNTJsMC43MiwtMC44NWwwLjAxLC0wLjM4bC0wLjM3LC0wLjA4bC02LjIyLDMuMjFsLTEuOTgsMC4xNmwwLjE3LC0xLjUxbC0wLjIsLTAuMzFsLTMuMjIsLTEuMTdsLTAuMTksLTAuMGwtMi4zLDAuNzRsLTAuNzIsLTMuMjdsLTAuMjQsLTAuMjNsLTQuNSwtMC43NWwtMC4yMSwwLjA0bC0yLjIsMS40MmwtNi4yMSwxLjI3bC0wLjExLDAuMDVsLTEuMTYsMC44MWwtOS4zLDEuMTlsLTAuMTgsMC4wOWwtMS4xNSwxLjE3bC0wLjAyLDAuMzlsMS41NiwyLjAxbC0yLjAyLDAuNzRsLTAuMTYsMC40MmwwLjM1LDAuNjhsLTIuMTgsMS40OWwwLjAyLDAuNTFsMy44MywyLjE2bC0wLjQ1LDEuMTNsLTMuMzEsLTAuMTNsLTAuMjUsMC4xMmwtMC41NywwLjc3bC0yLjk3LC0xLjU5bC0wLjE1LC0wLjA0bC0zLjk3LDAuMDdsLTAuMTMsMC4wM2wtMi41MywxLjMybC0yLjg0LC0xLjI4bC01LjUyLC0yLjNsLTAuMTIsLTAuMDJsLTMuOTEsMC4wOWwtMC4xNiwwLjA1bC01LjE3LDMuNmwtMC4xMywwLjIxbC0wLjI1LDEuODlsLTIuMTcsLTEuNmwtMC40NCwwLjFsLTIuMCwzLjU5bDAuMDYsMC4zN2wwLjU1LDAuNWwtMS4zMiwyLjIzbDAuMDQsMC4zNmwyLjEzLDIuMTdsMC4yMywwLjA5bDEuNywtMC4wOGwxLjQyLDEuODlsLTAuMjMsMS41bDAuMTksMC4zMmwwLjk0LDAuMzhsLTAuODksMS40NGwtMi4zLDAuNDlsLTAuMTcsMC4xMWwtMi40OSwzLjJsMC4wLDAuMzdsMi4yLDIuODFsLTAuMjMsMS45M2wwLjA2LDAuMjJsMi41NiwzLjMybC0xLjI3LDEuMDJsLTAuNCwwLjY2bC0wLjgsLTAuMTVsLTEuNjUsLTEuNzVsLTAuMTgsLTAuMDlsLTAuNjYsLTAuMDlsLTEuNDUsLTAuNjRsLTAuNzIsLTEuMTZsLTAuMTgsLTAuMTNsLTIuMzQsLTAuNjNsLTAuMTcsMC4wbC0xLjMyLDAuNDFsLTAuMzEsLTAuNGwtMC4xMiwtMC4wOWwtMy40OSwtMS40OGwtMy42NywtMC40OWwtMi4xLC0wLjUybC0wLjMsMC4xbC0wLjEyLDAuMTRsLTIuOTYsLTIuNGwtMi44OSwtMS4xOWwtMS42OSwtMS40MmwxLjI3LC0wLjM1bDAuMTYsLTAuMWwyLjA4LC0yLjYxbC0wLjA0LC0wLjQxbC0xLjAyLC0wLjlsMy4yMSwtMS4xMmwwLjIsLTAuMzFsLTAuMDcsLTAuNjlsLTAuMzcsLTAuMjZsLTEuODYsMC40MmwwLjA1LC0wLjg2bDEuMTEsLTAuNzZsMi4zNSwtMC4yM2wwLjI1LC0wLjE5bDAuMzksLTEuMDdsMC4wLC0wLjE5bC0wLjUxLC0xLjY0bDAuOTUsLTEuNThsMC4wNCwtMC4xNmwtMC4wMywtMC45NWwtMC4yMiwtMC4yOGwtMy42OSwtMS4wNmwtMS40MywwLjAybC0xLjQ1LC0xLjQ0bC0wLjI5LC0wLjA4bC0xLjgzLDAuNDlsLTIuODgsLTEuMDRsMC4wNCwtMC40MmwtMC4wNCwtMC4xOGwtMC44OSwtMS40M2wtMC4yMywtMC4xNGwtMS43NywtMC4xNGwtMC4xMywtMC42NmwwLjUyLC0wLjU2bDAuMDEsLTAuNGwtMS42LC0xLjlsLTAuMjcsLTAuMWwtMi41NSwwLjMybC0wLjcxLC0wLjE2bC0wLjMsMC4xbC0wLjUzLDAuNjNsLTAuNTgsLTAuMDhsLTAuNTYsLTEuOTdsLTAuNDgsLTAuOTRsMC4xNywtMC4xMWwxLjkyLDAuMTFsMC4yLC0wLjA2bDAuOTcsLTAuNzRsMC4wNSwtMC40MmwtMC43MiwtMC45MWwtMC4xMywtMC4xbC0xLjQzLC0wLjUxbDAuMDksLTAuMzZsLTAuMTMsLTAuMzNsLTAuOTcsLTAuNTlsLTEuNDMsLTIuMDZsMC40NCwtMC43N2wwLjA0LC0wLjE5bC0wLjI1LC0xLjY0bC0wLjIsLTAuMjRsLTIuNDUsLTAuODRsLTAuMTksLTAuMGwtMS4wNSwwLjM0bC0wLjI1LC0wLjYybC0wLjE4LC0wLjE3bC0yLjUsLTAuODRsLTAuNzQsLTEuOTNsLTAuMjEsLTEuN2wtMC4xMywtMC4yMWwtMC45MiwtMC42M2wwLjgzLC0wLjg5bDAuMDcsLTAuMjdsLTAuNzEsLTMuMjZsMS42OSwtMi4wMWwwLjAzLC0wLjM0bC0wLjI0LC0wLjQxbDIuNjMsLTEuOWwtMC4wMSwtMC40OWwtMi4zMSwtMS41N2w1LjA4LC00LjYxbDIuMzMsLTIuMjRsMS4wMSwtMi4wOGwtMC4wOSwtMC4zN2wtMy41MiwtMi41NmwwLjk0LC0yLjM4bC0wLjA0LC0wLjI5bC0yLjE0LC0yLjg2bDEuNjEsLTMuMzVsLTAuMDEsLTAuMjlsLTIuODEsLTQuNThsMi4xOSwtMy4wNGwtMC4wNiwtMC40MmwtMy43LC0yLjc2bDAuMzIsLTIuNjdsMS44NywtMC4zOGw0LjI2LC0xLjc3bDIuNDYsLTEuNDdsMy45NiwyLjU4bDAuMTIsMC4wNWw2LjgxLDEuMDRsOS4zNyw0Ljg3bDEuODEsMS45MmwwLjE1LDIuNTVsLTIuNjEsMi4wNmwtMy45NSwxLjA3bC0xMS4xLC0zLjE1bC0wLjE3LDAuMGwtMS44NCwwLjUzbC0wLjEsMC41M2wzLjk3LDIuOTdsMC4xNSwxLjc3bDAuMTYsNC4xNGwwLjE5LDAuMjdsMy4yMSwxLjIybDEuOTQsMS4wM2wwLjQ0LC0wLjIybDAuMzIsLTEuOTRsLTAuMDcsLTAuMjVsLTEuMzIsLTEuNTJsMS4yNSwtMS4ybDUuODcsMi40NWwwLjI0LC0wLjAxbDIuMTEsLTAuOThsMC4xMywtMC40MmwtMS41NSwtMi43NWw1LjUyLC0zLjg0bDIuMTMsMC4yMmwyLjI4LDEuNDJsMC40MywtMC4xMmwxLjQ2LC0yLjg3bC0wLjA0LC0wLjMzbC0xLjk3LC0yLjM3bDEuMTQsLTIuMzhsLTAuMDIsLTAuM2wtMS40MiwtMi4wN2w2LjE1LDEuMjJsMS4xNCwxLjkybC0yLjc0LDAuNDZsLTAuMjUsMC4zbDAuMDIsMi4zNmwwLjEyLDAuMjRsMS45NywxLjQ0bDAuMjUsMC4wNWwzLjg3LC0wLjkxbDAuMjIsLTAuMjNsMC41OCwtMi41NWw1LjA5LC0xLjk4bDguNjcsLTMuNjlsMS4yMiwwLjE0bC0yLjA2LDIuMmwwLjE4LDAuNWwzLjExLDAuNDVsMC4yMywtMC4wN2wxLjcxLC0xLjQxbDQuNTksLTAuMTJsMC4xMiwtMC4wM2wzLjUzLC0xLjcybDIuNywyLjQ4bDAuNDIsLTAuMDFsMi44NSwtMi44OGwtMC4wLC0wLjQzbC0yLjQyLC0yLjM1bDEuMCwtMS4xM2w3LjIsMS4zMWwzLjQyLDEuMzZsOS4wNiw0Ljk3bDAuMzksLTAuMDhsMS42NywtMi4yN2wtMC4wNCwtMC40bC0yLjQ2LC0yLjIzbC0wLjA2LC0wLjgybC0wLjI2LC0wLjI3bC0yLjY0LC0wLjM4bDAuNjksLTEuNzZsMC4wLC0wLjIybC0xLjMyLC0zLjQ3bC0wLjA3LC0xLjI3bDQuNTIsLTQuMDlsMC4wOCwtMC4xMWwxLjYsLTQuMThsMS42NywtMC44NGw2LjMzLDEuMmwwLjQ2LDIuMzFsLTIuMzEsMy42N2wwLjA1LDAuMzhsMS40OSwxLjQxbDAuNzcsMy4wNGwtMC41Niw2LjA1bDAuMDksMC4yNGwyLjYyLDIuNTRsLTAuOTksMi42NWwtNC44Nyw1Ljk2bDAuMTcsMC40OGwyLjg2LDAuNjFsMC4zMSwtMC4xM2wwLjk0LC0xLjQybDIuNjcsLTEuMDRsMC4xOCwtMC4xOWwwLjY0LC0yLjAxbDIuMTEsLTEuOThsMC4wNSwtMC4zN2wtMS4zOCwtMi4zMmwxLjExLC0yLjc0bC0wLjI0LC0wLjQxbC0yLjUzLC0wLjMzbC0wLjUzLC0yLjE2bDEuOTYsLTQuNDJsLTAuMDUsLTAuMzJsLTMuMDMsLTMuNDhsNC4yMSwtMi45NGwwLjEyLC0wLjNsLTAuNTIsLTMuMDRsMC43MiwtMC4wNmwxLjE4LDIuMzVsLTAuOTcsNC4zOWwwLjIsMC4zNWwyLjY4LDAuODRsMC4zNywtMC4zOGwtMS4wNSwtMy4wN2wzLjg5LC0xLjcxbDUuMDUsLTAuMjRsNC41NSwyLjYybDAuMzYsLTAuMDVsMC4wNSwtMC4zNmwtMi4xOSwtMy44NGwtMC4yMywtNC43OGw0LjA3LC0wLjkybDUuOTgsMC4yMWw1LjQ3LC0wLjY0bDAuMiwtMC40OGwtMS44OCwtMi4zN2wyLjY1LC0yLjk5bDIuNzUsLTAuMTNsMC4xMiwtMC4wM2w0LjgyLC0yLjQ4bDYuNTYsLTAuNjdsMC4yMywtMC4xNGwwLjc2LC0xLjI3bDYuMzMsLTAuNDZsMS45NywxLjExbDAuMjgsMC4wMWw1LjU1LC0yLjcxbDQuNTMsMC4wOGwwLjI5LC0wLjIxbDAuNjcsLTIuMThsMi4yOSwtMi4xNWw1Ljc1LC0yLjEzbDMuNDgsMS40bC0yLjcsMS4wM2wtMC4xOSwwLjMxbDAuMjYsMC4yNmw1LjQ3LDAuNzhaTTg3MS44Myw2NS43M2wwLjI1LC0wLjE1bDEuOTksMC4wMWwzLjMsMS4ybC0wLjA4LDAuMjJsLTIuNDEsMS4wM2wtNS43MywwLjQ5bC0wLjMxLC0xLjBsMi45OSwtMS44Wk03OTcuNjQsNDguNDRsLTIuMjIsMS41MWwtMy44NSwtMC40M2wtNC4zNSwtMS44NWwwLjQyLC0xLjEzbDQuNDIsMC43Mmw1LjU5LDEuMTdaTTc4My44Miw0Ni4wNmwtMS43MSwzLjI1bC05LjA1LC0wLjE0bC00LjExLDEuMTVsLTQuNjQsLTMuMDRsMS4yMSwtMy4xM2wzLjExLC0wLjkxbDYuNTMsMC4yMmw4LjY2LDIuNTlaTTc4MC4zNywxNDUuNzFsMi4yOCw1LjIzbC0zLjA5LC0wLjg5bC0wLjM3LDAuMTlsLTEuNTQsNC42NWwwLjA0LDAuMjdsMi4zOCwzLjE3bC0wLjA1LDEuNGwtMS40MSwtMS40MWwtMC40NiwwLjA0bC0xLjIzLDEuODFsLTAuMzMsLTEuODZsMC4yOCwtMy4xbC0wLjI4LC0zLjQxbDAuNTgsLTIuNDZsMC4xMSwtNC4zOWwtMC4wMywtMC4xM2wtMS40NCwtMy4ybDAuMjEsLTQuMzlsMi4xOSwtMS40OWwwLjA5LC0wLjQxbC0wLjgxLC0xLjNsMC40OCwtMC4yMWwwLjU2LDEuOTRsMC44NiwzLjIzbC0wLjA1LDMuMzZsMS4wMywzLjM1Wk03ODAuMTYsNTcuMThsLTMuNCwwLjAzbC01LjA2LC0wLjUzbDEuOTcsLTEuNTlsMi45NSwtMC40MmwzLjM1LDEuNzVsMC4xOCwwLjc3Wk02ODMuODQsMzEuMThsLTEzLjI5LDEuOTdsNC4xNiwtNi41NmwxLjg4LC0wLjU4bDEuNzcsMC4zNGw2LjA4LDMuMDJsLTAuNiwxLjhaTTY3MC45NCwyOC4wMmwtNS4xOCwwLjY1bC02Ljg5LC0xLjU4bC00LjAzLC0yLjA3bC0xLjg4LC0zLjk4bC0wLjE4LC0wLjE2bC0yLjgsLTAuOTNsNS45MSwtMy42Mmw1LjI1LC0xLjI5bDQuNzMsMi44OGw1LjYzLDUuNDRsLTAuNTcsNC42NlpNNTY0LjM3LDY4Ljk4bC0wLjg1LDAuMjNsLTcuOTMsLTAuNTdsLTAuNiwtMS44NGwtMC4yMSwtMC4ybC00LjM0LC0xLjE4bC0wLjMsLTIuMDhsMi4zNCwtMC45MmwwLjE5LC0wLjI5bC0wLjA4LC0yLjQzbDQuODUsLTQuMGwtMC4xMiwtMC41MmwtMS42OCwtMC40M2w1LjQ3LC0zLjk0bDAuMTEsLTAuMzNsLTAuNiwtMi4wMmw1LjM2LC0yLjU1bDguMjIsLTMuMjdsOC4yOSwtMC45Nmw0LjM0LC0xLjk0bDQuNjcsLTAuNjVsMS40NSwxLjcybC0xLjQzLDEuMzdsLTguOCwyLjUybC03LjY1LDIuNDJsLTcuOTIsNC44NGwtMy43Myw0Ljc1bC0zLjkyLDQuNThsLTAuMDcsMC4yM2wwLjUxLDMuODhsMC4xMSwwLjJsNC4zMiwzLjM5Wk01NDguODYsMTguNTdsLTMuMjgsMC43NWwtMi4yNSwwLjQ0bC0wLjIyLDAuMTlsLTAuMywwLjgxbC0yLjY3LDAuODZsLTIuMjcsLTEuMTRsMS4yLC0xLjUxbC0wLjIzLC0wLjQ5bC0zLjE0LC0wLjFsMi40OCwtMC41NGwzLjU1LC0wLjA3bDAuNDQsMS4zNmwwLjQ5LDAuMTJsMS40LC0xLjM1bDIuMiwtMC45bDMuMTMsMS4wOGwtMC41NCwwLjQ5Wk00NzcuNSwxMzMuMjVsLTQuMjEsMC4wNWwtMi42OSwtMC4zNGwwLjM5LC0xLjAzbDMuMjQsLTEuMDZsMi41MSwwLjU4bDAuODUsMC40M2wtMC4yLDAuNzFsLTAuMCwwLjE1bDAuMTIsMC41MlpcIiwgXCJuYW1lXCI6IFwiUnVzc2lhXCJ9LCBcIlJXXCI6IHtcInBhdGhcIjogXCJNNDk3LjAzLDI4OC4xMmwwLjc4LDEuMTFsLTAuMTIsMS4xOWwtMC40OSwwLjIxbC0xLjI1LC0wLjE1bC0wLjMsMC4xNmwtMC42NywxLjI0bC0xLjAxLC0wLjEzbDAuMTYsLTAuOTJsMC4yMiwtMC4xMmwwLjE1LC0wLjI0bDAuMDksLTEuMzdsMC40OSwtMC40OGwwLjQyLDAuMThsMC4yNSwtMC4wMWwxLjI2LC0wLjY1WlwiLCBcIm5hbWVcIjogXCJSd2FuZGFcIn0sIFwiUlNcIjoge1wicGF0aFwiOiBcIk00NjkuNzUsMTY4LjY1bDAuMjEsLTAuMjFsMC4zNiwtMS40NGwtMC4wOCwtMC4yOWwtMS4wNiwtMS4wM2wwLjU0LC0xLjE2bC0wLjI4LC0wLjQzbC0wLjI2LDAuMGwwLjU1LC0wLjY3bC0wLjAxLC0wLjM5bC0wLjc3LC0wLjg2bC0wLjQ1LC0wLjg5bDEuNTYsLTAuNjdsMS4zOSwwLjEybDEuMjIsMS4xbDAuMjYsMC45MWwwLjE2LDAuMTlsMS4zOCwwLjY2bDAuMTcsMS4xMmwwLjE0LDAuMjFsMS40NiwwLjlsMC4zNSwtMC4wM2wwLjYyLC0wLjU0bDAuMDksMC4wNmwtMC4yOCwwLjI1bC0wLjAzLDAuNDJsMC4yOSwwLjM0bC0wLjQ0LDAuNWwtMC4wNywwLjI2bDAuMjIsMS4xMmwwLjA3LDAuMTRsMS4wMiwxLjFsLTAuODEsMC44NGwtMC40MiwwLjk2bDAuMDQsMC4zbDAuMTIsMC4xNWwtMC4xNSwwLjE2bC0xLjA0LDAuMDRsLTAuMzksMC4wOGwwLjMzLC0wLjgxbC0wLjI5LC0wLjQxbC0wLjIxLDAuMDFsLTAuMzksLTAuNDVsLTAuMTMsLTAuMDlsLTAuMzIsLTAuMTFsLTAuMjcsLTAuNGwtMC4xNCwtMC4xMWwtMC40LC0wLjE2bC0wLjMxLC0wLjM3bC0wLjM0LC0wLjA5bC0wLjQ1LDAuMTdsLTAuMTgsMC4xOGwtMC4yOSwwLjg0bC0wLjk2LC0wLjY1bC0wLjgxLC0wLjMzbC0wLjMyLC0wLjM3bC0wLjIyLC0wLjE4WlwiLCBcIm5hbWVcIjogXCJSZXB1YmxpYyBvZiBTZXJiaWFcIn0sIFwiTFRcIjoge1wicGF0aFwiOiBcIk00NzguMTMsMTMzLjMxbC0wLjE0LC0wLjYzbDAuMjUsLTAuODhsLTAuMTUsLTAuMzVsLTEuMTcsLTAuNThsLTIuNDMsLTAuNTdsLTAuNDUsLTIuNTFsMi41OCwtMC45N2w0LjE0LDAuMjJsMi4zLC0wLjMybDAuMjYsMC41NGwwLjIyLDAuMTdsMS4yNiwwLjIybDIuMjUsMS42bDAuMTksMS4yM2wtMS44NywxLjAxbC0wLjE0LDAuMThsLTAuNTQsMS44M2wtMi41NCwxLjIxbC0yLjE4LC0wLjAybC0wLjUyLC0wLjkxbC0wLjE4LC0wLjE0bC0xLjExLC0wLjMyWlwiLCBcIm5hbWVcIjogXCJMaXRodWFuaWFcIn0sIFwiTFVcIjoge1wicGF0aFwiOiBcIk00MzUuOTUsMTQ3Ljk5bDAuMzMsMC40OWwtMC4xMSwxLjA3bC0wLjM5LDAuMDRsLTAuMjksLTAuMTVsMC4yMSwtMS40bDAuMjUsLTAuMDVaXCIsIFwibmFtZVwiOiBcIkx1eGVtYm91cmdcIn0sIFwiTFJcIjoge1wicGF0aFwiOiBcIk00MDEuMzcsMjczLjY3bC0wLjMyLDAuMDFsLTIuNDgsLTEuMTVsLTIuMjQsLTEuODlsLTIuMTQsLTEuMzhsLTEuNDcsLTEuNDJsMC40NCwtMC41OWwwLjA1LC0wLjEzbDAuMTIsLTAuNjVsMS4wNywtMS4zbDEuMDgsLTEuMDlsMC41MiwtMC4wN2wwLjQzLC0wLjE4bDAuODQsMS4yNGwtMC4xNSwwLjg5bDAuMDcsMC4yNWwwLjQ5LDAuNTRsMC4yMiwwLjFsMC43MSwwLjAxbDAuMjcsLTAuMTZsMC40MiwtMC44M2wwLjE5LDAuMDJsLTAuMDYsMC41MmwwLjIzLDEuMTJsLTAuNSwxLjAzbDAuMDYsMC4zNWwwLjczLDAuNjlsMC4xNCwwLjA4bDAuNzEsMC4xNWwwLjkyLDAuOTFsMC4wNiwwLjc2bC0wLjE3LDAuMjJsLTAuMDYsMC4xNWwtMC4xNywxLjhaXCIsIFwibmFtZVwiOiBcIkxpYmVyaWFcIn0sIFwiUk9cIjoge1wicGF0aFwiOiBcIk00NzcuOTQsMTU1LjE5bDEuMDIsLTAuNjRsMS40OSwwLjMzbDEuNTIsMC4wMWwxLjA5LDAuNzNsMC4zMiwwLjAxbDAuODEsLTAuNDZsMS44LC0wLjNsMC4xOCwtMC4xbDAuNTQsLTAuNjRsMC44NiwwLjBsMC42NCwwLjI2bDAuNzEsMC44N2wwLjgsMS4zNWwxLjM5LDEuODFsMC4wNywxLjI1bC0wLjI2LDEuM2wwLjAxLDAuMTVsMC40NSwxLjQybDAuMTUsMC4xOGwxLjEyLDAuNTdsMC4yNSwwLjAxbDEuMDUsLTAuNDVsMC44NiwwLjRsMC4wMywwLjQzbC0wLjkyLDAuNTFsLTAuNjMsLTAuMjRsLTAuNCwwLjIybC0wLjY0LDMuNDFsLTEuMTIsLTAuMjRsLTEuNzgsLTEuMDlsLTAuMjMsLTAuMDRsLTIuOTUsMC43MWwtMS4yNSwwLjc3bC0zLjU1LC0wLjE2bC0xLjg5LC0wLjQ3bC0wLjE0LC0wLjBsLTAuNzUsMC4xN2wtMC42MSwtMS4wN2wtMC4zLC0wLjM2bDAuMzYsLTAuMzJsLTAuMDQsLTAuNDhsLTAuNjIsLTAuMzhsLTAuMzYsMC4wM2wtMC42MiwwLjU0bC0xLjE1LC0wLjcxbC0wLjE4LC0xLjE0bC0wLjE3LC0wLjIybC0xLjQsLTAuNjdsLTAuMjQsLTAuODZsLTAuMDksLTAuMTRsLTAuOTYsLTAuODdsMS40OSwtMC40NGwwLjE2LC0wLjExbDEuNTEsLTIuMTRsMS4xNSwtMi4wOWwxLjQ0LC0wLjYzWlwiLCBcIm5hbWVcIjogXCJSb21hbmlhXCJ9LCBcIkdXXCI6IHtcInBhdGhcIjogXCJNMzgzLjAzLDI1Ni43M2wtMS4xMiwtMC44OGwtMC4xNCwtMC4wNmwtMC45NCwtMC4xNWwtMC40MywtMC41NGwwLjAxLC0wLjI3bC0wLjEzLC0wLjI2bC0wLjY4LC0wLjQ4bC0wLjA1LC0wLjE2bDAuOTksLTAuMzFsMC43NywwLjA4bDAuMTUsLTAuMDJsMC42MSwtMC4yNmw0LjI1LDAuMWwtMC4wMiwwLjQ0bC0wLjE5LDAuMThsLTAuMDgsMC4yOWwwLjE3LDAuNjZsLTAuMTcsMC4xNGwtMC40NCwwLjBsLTAuMTYsMC4wNWwtMC41NywwLjM3bC0wLjY2LC0wLjA0bC0wLjI0LDAuMWwtMC45MiwxLjAzWlwiLCBcIm5hbWVcIjogXCJHdWluZWEgQmlzc2F1XCJ9LCBcIkdUXCI6IHtcInBhdGhcIjogXCJNMTk1LjEzLDI0OS44OWwtMS4wNSwtMC4zNWwtMS41LC0wLjA0bC0xLjA2LC0wLjQ3bC0xLjE5LC0wLjkzbDAuMDQsLTAuNTNsMC4yNywtMC41NWwtMC4wMywtMC4zMWwtMC4yNCwtMC4zMmwxLjAyLC0xLjc3bDMuMDQsLTAuMDFsMC4zLC0wLjI4bDAuMDYsLTAuODhsLTAuMTksLTAuM2wtMC4zLC0wLjExbC0wLjIzLC0wLjQ1bC0wLjExLC0wLjEybC0wLjksLTAuNThsLTAuMzUsLTAuMzNsMC4zNywtMC4wbDAuMywtMC4zbDAuMCwtMS4xNWw0LjA1LDAuMDJsLTAuMDIsMS43NGwtMC4yLDIuODlsMC4zLDAuMzJsMC42NywtMC4wbDAuNzUsMC40MmwwLjQsLTAuMTFsLTAuNjIsMC41M2wtMS4xNywwLjdsLTAuMTMsMC4xNmwtMC4xOCwwLjQ5bDAuMCwwLjIxbDAuMTQsMC4zNGwtMC4zNSwwLjQ0bC0wLjQ5LDAuMTNsLTAuMiwwLjQxbDAuMDMsMC4wNmwtMC4yNywwLjE2bC0wLjg2LDAuNjRsLTAuMTIsMC4yMlpNMTk5LjM1LDI0NS4zOGwwLjA3LC0wLjEzbDAuMDUsMC4wMmwtMC4xMywwLjExWlwiLCBcIm5hbWVcIjogXCJHdWF0ZW1hbGFcIn0sIFwiR1JcIjoge1wicGF0aFwiOiBcIk00ODcuMiwxNzQuNTVsLTAuNjQsMS41NGwtMC40MywwLjI0bC0xLjQxLC0wLjA4bC0xLjI4LC0wLjI4bC0wLjE0LDAuMGwtMy4wMywwLjc3bC0wLjEzLDAuNTFsMS4zOSwxLjM0bC0wLjc4LDAuMjlsLTEuMiwwLjBsLTEuMjMsLTEuNDJsLTAuNDcsMC4wMmwtMC40NywwLjY1bC0wLjA0LDAuMjdsMC41NiwxLjc2bDAuMDYsMC4xMWwxLjAyLDEuMTJsLTAuNjYsMC40NWwtMC4wNCwwLjQ2bDEuMzksMS4zNWwxLjE1LDAuNzlsMC4wMiwxLjA2bC0xLjkxLC0wLjYzbC0wLjM2LDAuNDJsMC41NiwxLjEybC0xLjIsMC4yM2wtMC4yMiwwLjRsMC44LDIuMTRsLTEuMTUsMC4wMmwtMS44OSwtMS4xNWwtMC44OSwtMi4xOWwtMC40MywtMS45MWwtMC4wNSwtMC4xMWwtMC45OCwtMS4zNWwtMS4yNCwtMS42MmwtMC4xMywtMC42M2wxLjA3LC0xLjMybDAuMDYsLTAuMTRsMC4xMywtMC44MWwwLjY4LC0wLjM2bDAuMTYsLTAuMjVsMC4wMywtMC41NGwxLjQsLTAuMjNsMC4xMiwtMC4wNWwwLjg3LC0wLjZsMS4yNiwwLjA1bDAuMjUsLTAuMTFsMC4zNCwtMC40M2wwLjMzLC0wLjA3bDEuODEsMC4wOGwwLjEzLC0wLjAybDEuODcsLTAuNzdsMS42NCwwLjk3bDAuMTksMC4wNGwyLjI4LC0wLjI4bDAuMjYsLTAuMjlsMC4wMiwtMC45NWwwLjU2LDAuMzZaTTQ4MC40NCwxOTIuMGwxLjA1LDAuNzRsMC4wMSwwLjBsLTEuMjYsLTAuMjNsMC4yLC0wLjUxWk00ODEuNzYsMTkyLjc5bDEuODYsLTAuMTVsMS41MywwLjE3bC0wLjAyLDAuMTlsMC4zNCwwLjNsLTIuMjgsMC4xNWwwLjAxLC0wLjEzbC0wLjI1LC0wLjMxbC0xLjE5LC0wLjIyWk00ODUuNjUsMTkzLjI4bDAuNjUsLTAuMTZsLTAuMDUsMC4xMmwtMC42LDAuMDRaXCIsIFwibmFtZVwiOiBcIkdyZWVjZVwifSwgXCJHUVwiOiB7XCJwYXRoXCI6IFwiTTQ0NC44MSwyODIuMDRsLTAuMjEsLTAuMTdsMC43NCwtMi40bDMuNTYsMC4wNWwwLjAyLDIuNDJsLTMuMzQsLTAuMDJsLTAuNzYsMC4xM1pcIiwgXCJuYW1lXCI6IFwiRXF1YXRvcmlhbCBHdWluZWFcIn0sIFwiR1lcIjoge1wicGF0aFwiOiBcIk0yNzEuMzQsMjY0LjI1bDEuNDMsMC44MWwxLjQ0LDEuNTNsMC4wNiwxLjE5bDAuMjgsMC4yOGwwLjg0LDAuMDVsMi4xMywxLjkybC0wLjM0LDEuOTNsLTEuMzcsMC41OWwtMC4xNywwLjM0bDAuMTIsMC41MWwtMC40MywxLjIxbDAuMDMsMC4yNmwxLjExLDEuODJsMC4yNiwwLjE0bDAuNTYsMC4wbDAuMzIsMS4yOWwxLjI1LDEuNzhsLTAuMDgsMC4wMWwtMS4zNCwtMC4yMWwtMC4yNCwwLjA2bC0wLjc4LDAuNjRsLTEuMDYsMC40MWwtMC43NiwwLjFsLTAuMjIsMC4xNWwtMC4xOCwwLjMybC0wLjk1LC0wLjFsLTEuMzgsLTEuMDVsLTAuMTksLTEuMTNsLTAuNiwtMS4xOGwwLjM3LC0xLjk2bDAuNjUsLTAuODNsMC4wMywtMC4zMmwtMC41NywtMS4xN2wtMC4xNSwtMC4xNGwtMC42MiwtMC4yN2wwLjI1LC0wLjg1bC0wLjA4LC0wLjNsLTAuNTgsLTAuNThsLTAuMjQsLTAuMDlsLTEuMTUsMC4xbC0xLjQxLC0xLjU4bDAuNDgsLTAuNDlsMC4wOSwtMC4yMmwtMC4wNCwtMC45MmwxLjMxLC0wLjM0bDAuNzMsLTAuNTJsMC4wNCwtMC40NGwtMC43NSwtMC44MmwwLjE2LC0wLjY2bDEuNzQsLTEuM1pcIiwgXCJuYW1lXCI6IFwiR3V5YW5hXCJ9LCBcIkdFXCI6IHtcInBhdGhcIjogXCJNNTI1LjQxLDE3NC4xOWwwLjI2LC0wLjg4bC0wLjAsLTAuMTdsLTAuNjMsLTIuMDZsLTAuMSwtMC4xNWwtMS40NSwtMS4xMmwtMC4xMSwtMC4wNWwtMS4zMSwtMC4zM2wtMC42NiwtMC42OWwxLjk3LDAuNDhsMy42NSwwLjQ5bDMuMywxLjQxbDAuMzksMC41bDAuMzMsMC4xbDEuNDMsLTAuNDVsMi4xNCwwLjU4bDAuNywxLjE0bDAuMTMsMC4xMmwxLjA2LDAuNDdsLTAuMTgsMC4xMWwtMC4wOCwwLjQzbDEuMDgsMS40MWwtMC4wNiwwLjA2bC0xLjE2LC0wLjE1bC0xLjgyLC0wLjg0bC0wLjMxLDAuMDRsLTAuNTUsMC40NGwtMy4yOSwwLjQ0bC0yLjMyLC0xLjQxbC0wLjE3LC0wLjA0bC0yLjI1LDAuMTJaXCIsIFwibmFtZVwiOiBcIkdlb3JnaWFcIn0sIFwiR0JcIjoge1wicGF0aFwiOiBcIk00MTIuODIsMTE4LjZsLTIuMzEsMy40bC0wLjAsMC4zM2wwLjMxLDAuMTNsMi41MiwtMC40OWwyLjM0LDAuMDJsLTAuNTYsMi41MWwtMi4yMiwzLjEzbDAuMjIsMC40N2wyLjQzLDAuMjFsMi4zNSw0LjM1bDAuMTcsMC4xNGwxLjU4LDAuNTFsMS40OSwzLjc4bDAuNzMsMS4zN2wwLjIsMC4xNWwyLjc2LDAuNTlsLTAuMjUsMS43NWwtMS4xOCwwLjkxbC0wLjA4LDAuMzlsMC44NywxLjQ5bC0xLjk2LDEuNTFsLTMuMzEsLTAuMDJsLTQuMTUsMC44OGwtMS4wNywtMC41OWwtMC4zNSwwLjA0bC0xLjU1LDEuNDRsLTIuMTcsLTAuMzVsLTAuMjIsMC4wNWwtMS42MSwxLjE1bC0wLjc4LC0wLjM4bDMuMzEsLTMuMTJsMi4xOCwtMC43bDAuMjEsLTAuMzFsLTAuMjYsLTAuMjdsLTMuNzgsLTAuNTRsLTAuNDgsLTAuOWwyLjMsLTAuOTJsMC4xMywtMC40NmwtMS4yOSwtMS43MWwwLjM5LC0xLjgzbDMuNDYsMC4yOWwwLjMyLC0wLjI0bDAuMzcsLTEuOTlsLTAuMDYsLTAuMjRsLTEuNzEsLTIuMTdsLTAuMTgsLTAuMTFsLTIuOTEsLTAuNThsLTAuNDMsLTAuNjhsMC44MiwtMS40bC0wLjAzLC0wLjM1bC0wLjgyLC0wLjk3bC0wLjQ2LDAuMDFsLTAuODUsMS4wNWwtMC4xMSwtMi42bC0wLjA1LC0wLjE2bC0xLjE5LC0xLjdsMC44NiwtMy41M2wxLjgxLC0yLjc1bDEuODgsMC4yNmwyLjM4LC0wLjI0Wk00MDYuMzksMTMyLjg0bC0xLjA5LDEuOTJsLTEuNjUsLTAuNjJsLTEuMjYsMC4wMmwwLjQxLC0xLjQ2bDAuMCwtMC4xNmwtMC40MiwtMS41MWwxLjYyLC0wLjExbDIuMzksMS45MlpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIEtpbmdkb21cIn0sIFwiR0FcIjoge1wicGF0aFwiOiBcIk00NDguNzYsMjk0LjQ3bC0yLjM4LC0yLjM0bC0xLjYzLC0yLjA0bC0xLjQ2LC0yLjQ4bDAuMDYsLTAuNjZsMC41NCwtMC44MWwwLjYxLC0xLjgybDAuNDYsLTEuNjlsMC42MywtMC4xMWwzLjYyLDAuMDNsMC4zLC0wLjNsLTAuMDIsLTIuNzVsMC44OCwtMC4xMmwxLjQ3LDAuMzJsMC4xMywwLjBsMS4zOSwtMC4zbC0wLjEzLDAuODdsMC4wMywwLjE5bDAuNywxLjI5bDAuMywwLjE2bDEuNzQsLTAuMTlsMC4zNiwwLjI5bC0xLjAxLDIuN2wwLjA1LDAuMjlsMS4xMywxLjQybDAuMjUsMS44MmwtMC4zLDEuNTZsLTAuNjQsMC45OWwtMS45MywtMC4wOWwtMS4yNiwtMS4xM2wtMC41LDAuMTdsLTAuMTYsMC45MWwtMS40OCwwLjI3bC0wLjEyLDAuMDVsLTAuODYsMC42M2wtMC4wOCwwLjM5bDAuODEsMS40MmwtMS40OCwxLjA4WlwiLCBcIm5hbWVcIjogXCJHYWJvblwifSwgXCJHTlwiOiB7XCJwYXRoXCI6IFwiTTM5OS44MywyNjUuMzFsLTAuNjksLTAuMDZsLTAuMywwLjE2bC0wLjQzLDAuODVsLTAuMzksLTAuMDFsLTAuMywtMC4zM2wwLjE0LC0wLjg3bC0wLjA1LC0wLjIybC0xLjA1LC0xLjU0bC0wLjM3LC0wLjExbC0wLjYxLDAuMjdsLTAuODQsMC4xMmwwLjAyLC0wLjU0bC0wLjA0LC0wLjE3bC0wLjM1LC0wLjU3bDAuMDcsLTAuNjNsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMTFsLTAuNywtMC45bC0wLjI0LC0wLjEybC0yLjAsLTAuMGwtMC4xOSwwLjA3bC0wLjUxLDAuNDJsLTAuNiwwLjA1bC0wLjIxLDAuMTFsLTAuNDMsMC41NWwtMC4zLDAuN2wtMS4wNCwwLjg2bC0wLjkxLC0xLjI0bC0xLjAsLTEuMDJsLTAuNjksLTAuMzdsLTAuNTIsLTAuNDJsLTAuMywtMS4xMWwtMC4zNywtMC41NmwtMC4xLC0wLjFsLTAuNCwtMC4yM2wwLjc3LC0wLjg1bDAuNjIsMC4wNGwwLjE4LC0wLjA1bDAuNTgsLTAuMzhsMC40NiwtMC4wbDAuMTksLTAuMDdsMC4zOSwtMC4zNGwwLjEsLTAuM2wtMC4xNywtMC42N2wwLjE1LC0wLjE0bDAuMDksLTAuMmwwLjAzLC0wLjU3bDAuODcsMC4wMmwxLjc2LDAuNmwwLjEzLDAuMDFsMC41NSwtMC4wNmwwLjIyLC0wLjEzbDAuMDgsLTAuMTJsMS4xOCwwLjE3bDAuMTcsLTAuMDJsMC4wOSwwLjU2bDAuMywwLjI1bDAuNCwtMC4wbDAuMTQsLTAuMDNsMC41NiwtMC4yOWwwLjIzLDAuMDVsMC42MywwLjU5bDAuMTUsMC4wN2wxLjA3LDAuMmwwLjI0LC0wLjA2bDAuNjUsLTAuNTJsMC43NywtMC4zMmwwLjU1LC0wLjMybDAuMywwLjA0bDAuNDQsMC40NWwwLjM0LDAuNzRsMC44NCwwLjg3bC0wLjM1LDAuNDVsLTAuMDYsMC4xNWwtMC4xLDAuODJsMC40MiwwLjMxbDAuMzUsLTAuMTZsMC4wNSwwLjA0bC0wLjEsMC41OWwwLjA5LDAuMjdsMC40MiwwLjRsLTAuMDYsMC4wMmwtMC4xOCwwLjIxbC0wLjIsMC44NmwwLjAzLDAuMjFsMC41NiwxLjAybDAuNTIsMS43MWwtMC42NSwwLjIxbC0wLjE1LDAuMTJsLTAuMjQsMC4zNWwtMC4wMywwLjI4bDAuMTYsMC40MWwtMC4xLDAuNzZsLTAuMTIsMC4wWlwiLCBcIm5hbWVcIjogXCJHdWluZWFcIn0sIFwiR01cIjoge1wicGF0aFwiOiBcIk0zNzkuMTgsMjUxLjQ4bDAuMTUsLTAuNTVsMi41MSwtMC4wN2wwLjIxLC0wLjA5bDAuNDgsLTAuNTJsMC41OCwtMC4wM2wwLjkxLDAuNThsMC4xNiwwLjA1bDAuNzgsMC4wMWwwLjE0LC0wLjAzbDAuNTksLTAuMzFsMC4xNiwwLjI0bC0wLjcxLDAuMzhsLTAuOTQsLTAuMDRsLTEuMDIsLTAuNTFsLTAuMywwLjAxbC0wLjg2LDAuNTVsLTAuMzcsMC4wMmwtMC4xNCwwLjA0bC0wLjUzLDAuMzFsLTEuODEsLTAuMDRaXCIsIFwibmFtZVwiOiBcIkdhbWJpYVwifSwgXCJHTFwiOiB7XCJwYXRoXCI6IFwiTTMwNC4xMyw2LjZsOC4xOSwtMy42M2w4LjcyLDAuMjhsMC4xOSwtMC4wNmwzLjEyLC0yLjI4bDguNzUsLTAuNjFsMTkuOTQsMC44bDE0LjkzLDQuNzVsLTMuOTIsMi4wMWwtOS41MiwwLjI3bC0xMy40OCwwLjZsLTAuMjcsMC4ybDAuMDksMC4zM2wxLjI2LDEuMDlsMC4yMiwwLjA3bDguODEsLTAuNjdsNy40OSwyLjA3bDAuMTksLTAuMDFsNC42OCwtMS43OGwxLjc2LDEuODRsLTIuNTksMy4yNmwtMC4wMSwwLjM2bDAuMzQsMC4xMWw2LjM1LC0yLjJsMTIuMDksLTIuMzJsNy4zMSwxLjE0bDEuMTcsMi4xM2wtOS45LDQuMDVsLTEuNDMsMS4zMmwtNy45MSwwLjk4bC0wLjI2LDAuMzFsMC4yOSwwLjI5bDUuMjUsMC4yNWwtMi42MywzLjcybC0yLjAyLDMuNjFsLTAuMDQsMC4xNWwwLjA4LDYuMDVsMC4wNywwLjE5bDIuNjEsMy4wbC0zLjQsMC4ybC00LjEyLDEuNjZsLTAuMDQsMC41NGw0LjUsMi42N2wwLjUzLDMuOWwtMi4zOSwwLjQybC0wLjE5LDAuNDhsMi45MSwzLjgzbC01LjAsMC4zMmwtMC4yNywwLjIybDAuMTIsMC4zM2wyLjY5LDEuODRsLTAuNjUsMS4zNWwtMy4zNiwwLjcxbC0zLjQ2LDAuMDFsLTAuMjEsMC41MWwzLjA1LDMuMTVsMC4wMiwxLjUzbC00LjU0LC0xLjc5bC0wLjMyLDAuMDZsLTEuMjksMS4yNmwwLjExLDAuNWwzLjMzLDEuMTVsMy4xNywyLjc0bDAuODUsMy4yOWwtNC4wLDAuNzhsLTEuODMsLTEuNjZsLTMuMSwtMi42NGwtMC4zNiwtMC4wMmwtMC4xMywwLjMzbDAuOCwyLjkybC0yLjc2LDIuMjZsLTAuMDksMC4zM2wwLjI4LDAuMmw2LjU5LDAuMTlsMi40NywwLjE4bC01Ljg2LDMuMzhsLTYuNzYsMy40M2wtNy4yNiwxLjQ4bC0yLjczLDAuMDJsLTAuMTYsMC4wNWwtMi42NywxLjcybC0zLjQ0LDQuNDJsLTUuMjgsMi44NmwtMS43MywwLjE4bC0zLjMzLDEuMDFsLTMuNTksMC45NmwtMC4xNSwwLjFsLTIuMTUsMi41MmwtMC4wNywwLjE5bC0wLjAzLDIuNzZsLTEuMjEsMi40OWwtNC4wMywzLjFsLTAuMSwwLjMzbDAuOTgsMi45NGwtMi4zMSw2LjU3bC0zLjIxLDAuMjFsLTMuNiwtMy4wbC0wLjE5LC0wLjA3bC00LjksLTAuMDJsLTIuMjksLTEuOTdsLTEuNjksLTMuNzhsLTQuMzEsLTQuODZsLTEuMjMsLTIuNTJsLTAuMzQsLTMuNThsLTAuMDgsLTAuMTdsLTMuMzUsLTMuNjdsMC44NSwtMi45MmwtMC4wOSwtMC4zMWwtMS41LC0xLjM0bDIuMzMsLTQuN2wzLjY3LC0xLjU3bDAuMTUsLTAuMTNsMS4wMiwtMS45M2wwLjUyLC0zLjQ3bC0wLjQ0LC0wLjMxbC0yLjg1LDEuNTdsLTEuMzMsMC42NGwtMi4xMiwwLjU5bC0yLjgxLC0xLjMybC0wLjE1LC0yLjc5bDAuODgsLTIuMTdsMi4wOSwtMC4wNmw1LjA3LDEuMmwwLjM0LC0wLjE3bC0wLjExLC0wLjM3bC00LjMsLTIuOWwtMi4yNCwtMS41OGwtMC4yNSwtMC4wNWwtMi4zOCwwLjYybC0xLjcsLTAuOTNsMi42MiwtNC4xbC0wLjAzLC0wLjM2bC0xLjUxLC0xLjc1bC0xLjk3LC0zLjNsLTMuMDEsLTUuMjFsLTAuMSwtMC4xMWwtMy4wNCwtMS44NWwwLjAzLC0xLjk0bC0wLjE4LC0wLjI4bC02LjgyLC0zLjAxbC01LjM1LC0wLjM4bC02LjY5LDAuMjFsLTYuMDMsMC4zN2wtMi44MSwtMS41OWwtMy44NCwtMi45bDUuOTQsLTEuNWw1LjAxLC0wLjI4bDAuMjgsLTAuMjlsLTAuMjYsLTAuMzFsLTEwLjY4LC0xLjM4bC01LjM4LC0yLjFsMC4yNywtMS42OGw5LjMsLTIuNmw5LjE4LC0yLjY4bDAuMTksLTAuMTZsMC45NywtMi4wNWwtMC4xOCwtMC40MmwtNi4yOSwtMS45MWwxLjgxLC0xLjlsOC41OCwtNC4wNWwzLjYsLTAuNjNsMC4yMywtMC40bC0wLjkyLC0yLjM3bDUuNTksLTEuNWw3LjY2LC0wLjk1bDcuNTgsLTAuMDVsMi42NSwxLjg0bDAuMzEsMC4wMmw2LjUyLC0zLjI5bDUuODUsMi4yNGwzLjU1LDAuNDlsNS4xNywxLjk1bDAuMzgsLTAuMTZsLTAuMTMsLTAuMzlsLTUuNzcsLTMuMTZsMC4yOSwtMi4yNlpcIiwgXCJuYW1lXCI6IFwiR3JlZW5sYW5kXCJ9LCBcIktXXCI6IHtcInBhdGhcIjogXCJNNTQwLjg3LDIwNy44MWwwLjQxLDAuOTRsLTAuMTgsMC41MWwwLjAsMC4yMWwwLjY1LDEuNjZsLTEuMTUsMC4wNWwtMC41NCwtMS4xMmwtMC4yNCwtMC4xN2wtMS43MywtMC4ybDEuNDQsLTIuMDZsMS4zMywwLjE4WlwiLCBcIm5hbWVcIjogXCJLdXdhaXRcIn0sIFwiR0hcIjoge1wicGF0aFwiOiBcIk00MjMuMTYsMjY5Ljg4bC0zLjU4LDEuMzRsLTEuNDEsMC44N2wtMi4xMywwLjY5bC0xLjkxLC0wLjYxbDAuMDksLTAuNzVsLTAuMDMsLTAuMTdsLTEuMDQsLTIuMDdsMC42MiwtMi43bDEuMDQsLTIuMDhsMC4wMywtMC4xOWwtMS4wLC01LjQ2bDAuMDUsLTEuMTJsNC4wNCwtMC4xMWwxLjA4LDAuMThsMC4xOCwtMC4wM2wwLjcyLC0wLjM2bDAuNzUsMC4xM2wtMC4xMSwwLjQ4bDAuMDYsMC4yNmwwLjk4LDEuMjJsLTAuMCwxLjc3bDAuMjQsMS45OWwwLjA1LDAuMTNsMC41NSwwLjgxbC0wLjUyLDIuMTRsMC4xOSwxLjM3bDAuNjksMS42NmwwLjM4LDAuNjJaXCIsIFwibmFtZVwiOiBcIkdoYW5hXCJ9LCBcIk9NXCI6IHtcInBhdGhcIjogXCJNNTY4LjE2LDIzMS4wbC0wLjA4LDAuMWwtMC44NCwxLjYxbC0wLjkzLC0wLjExbC0wLjI3LDAuMTFsLTAuNTgsMC43M2wtMC40LDEuMzJsLTAuMDEsMC4xNGwwLjI5LDEuNjFsLTAuMDcsMC4wOWwtMS4wLC0wLjAxbC0wLjE2LDAuMDRsLTEuNTYsMC45N2wtMC4xNCwwLjJsLTAuMjMsMS4xN2wtMC40MSwwLjRsLTEuNDQsLTAuMDJsLTAuMTcsMC4wNWwtMC45OCwwLjY1bC0wLjEzLDAuMjVsMC4wMSwwLjg3bC0wLjk3LDAuNTdsLTEuMjcsLTAuMjJsLTAuMTksMC4wM2wtMS42MywwLjg0bC0wLjg4LDAuMTFsLTIuNTUsLTUuNTdsNy4yLC0yLjQ5bDAuMTksLTAuMTlsMS42NywtNS4yM2wtMC4wMywtMC4yNWwtMS4xLC0xLjc4bDAuMDUsLTAuODlsMC42OCwtMS4wM2wwLjA1LC0wLjE2bDAuMDEsLTAuODlsMC45NiwtMC40NGwwLjA3LC0wLjVsLTAuMzIsLTAuMjZsMC4xNiwtMS4zMWwwLjg1LC0wLjAxbDEuMDMsMS42N2wwLjA5LDAuMDlsMS40LDAuOTZsMC4xMSwwLjA1bDEuODIsMC4zNGwxLjM3LDAuNDVsMS43NSwyLjMybDAuMTMsMC4xbDAuNywwLjI2bC0wLjAsMC4zbC0xLjI1LDIuMTlsLTEuMDEsMC44Wk01NjEuODgsMjE4LjQ3bC0wLjAxLDAuMDJsLTAuMTUsLTAuMjlsMC4zLC0wLjM4bC0wLjE0LDAuNjVaXCIsIFwibmFtZVwiOiBcIk9tYW5cIn0sIFwiXzNcIjoge1wicGF0aFwiOiBcIk01NDMuMiwyNjEuMDZsLTEuMDcsMS40NmwtMS42NSwxLjk5bC0xLjkxLDAuMDFsLTguMDgsLTIuOTVsLTAuODksLTAuODRsLTAuOSwtMS4xOWwtMC44MSwtMS4yM2wwLjQ0LC0wLjczbDAuNzYsLTEuMTJsMC40OSwwLjI4bDAuNTIsMS4wNWwxLjEzLDEuMDZsMC4yLDAuMDhsMS4yNCwwLjAxbDIuNDIsLTAuNjVsMi43NywtMC4zMWwyLjE3LC0wLjc4bDEuMzEsLTAuMTlsMC44NCwtMC40M2wxLjAzLC0wLjA2bC0wLjAxLDQuNTRaXCIsIFwibmFtZVwiOiBcIlNvbWFsaWxhbmRcIn0sIFwiXzJcIjoge1wicGF0aFwiOiBcIk0zODQuMjMsMjMwLjM3bDAuMDcsLTAuMDZsMC4yOCwtMC44OWwwLjk5LC0xLjEzbDAuMDcsLTAuMTNsMC44LC0zLjU0bDMuNCwtMi44bDAuMDksLTAuMTNsMC43NiwtMi4xN2wwLjA3LDUuNWwtMi4wNywwLjIxbC0wLjI0LDAuMTdsLTAuNjEsMS4zNmwtMC4wMiwwLjE2bDAuNDMsMy40NmwtNC4wMSwtMC4wMVpNMzkxLjgyLDIxOC4ybDAuMDcsLTAuMDZsMC43NSwtMS45M2wxLjg2LC0wLjI1bDAuOTQsMC4zNGwxLjE0LDAuMGwwLjE4LC0wLjA2bDAuNzMsLTAuNTZsMS40MSwtMC4wOGwtMC4wLDIuNzJsLTcuMDgsLTAuMTJaXCIsIFwibmFtZVwiOiBcIldlc3Rlcm4gU2FoYXJhXCJ9LCBcIl8xXCI6IHtcInBhdGhcIjogXCJNNDcyLjcxLDE3Mi44NGwtMC4wNywtMC40M2wtMC4xNiwtMC4yMmwtMC41MywtMC4yN2wtMC4zOCwtMC41OGwwLjMsLTAuNDNsMC41MSwtMC4xOWwwLjE4LC0wLjE4bDAuMywtMC44N2wwLjEyLC0wLjA0bDAuMjIsMC4yNmwwLjEyLDAuMDlsMC4zOCwwLjE1bDAuMjgsMC40MWwwLjE1LDAuMTJsMC4zNCwwLjEybDAuNDMsMC41bDAuMTUsMC4wN2wtMC4xMiwwLjNsLTAuMjcsMC4zMmwtMC4wMywwLjE4bC0wLjMxLDAuMDZsLTEuNDgsMC40N2wtMC4xNSwwLjE3WlwiLCBcIm5hbWVcIjogXCJLb3Nvdm9cIn0sIFwiXzBcIjoge1wicGF0aFwiOiBcIk01MDMuNTQsMTkyLjkybDAuMDksLTAuMTdsMC40MSwwLjAxbC0wLjA4LDAuMDFsLTAuNDIsMC4xNVpNNTA0LjIzLDE5Mi43NmwxLjAyLDAuMDJsMC40LC0wLjEzbC0wLjA5LDAuMjlsMC4wMywwLjA4bC0wLjM1LDAuMTZsLTAuMjQsLTAuMDRsLTAuMDYsLTAuMWwtMC4xOCwtMC4xN2wtMC4xOSwtMC4wOGwtMC4zMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiTm9ydGhlcm4gQ3lwcnVzXCJ9LCBcIkpPXCI6IHtcInBhdGhcIjogXCJNNTEwLjI2LDIwMC45M2wwLjI4LC0wLjU3bDIuNTMsMS4wbDAuMjcsLTAuMDJsNC41NywtMi43N2wwLjg0LDIuODRsLTAuMjgsMC4yNWwtNC45NSwxLjM3bC0wLjE0LDAuNDlsMi4yNCwyLjQ4bC0wLjUsMC4yOGwtMC4xMywwLjE0bC0wLjM1LDAuNzhsLTEuNzYsMC4zNWwtMC4yLDAuMTRsLTAuNTcsMC45NGwtMC45NCwwLjczbC0yLjQ1LC0wLjM4bC0wLjAzLC0wLjEybDEuMjMsLTQuMzJsLTAuMDQsLTEuMWwwLjM0LC0wLjc1bDAuMDMsLTAuMTJsMC4wLC0xLjYzWlwiLCBcIm5hbWVcIjogXCJKb3JkYW5cIn0sIFwiSFJcIjoge1wicGF0aFwiOiBcIk00NTUuNDksMTYyLjczbDEuNTMsMC4wOWwwLjI0LC0wLjFsMC4yOSwtMC4zNGwwLjY0LDAuMzhsMC4xNCwwLjA0bDAuOTgsMC4wNmwwLjMyLC0wLjNsLTAuMDEsLTAuNjZsMC42NywtMC4yNWwwLjE5LC0wLjIybDAuMjEsLTEuMTFsMS43MiwtMC43MmwwLjY1LDAuMzJsMS45NCwxLjM3bDIuMDcsMC42bDAuMjIsLTAuMDJsMC42NywtMC4zM2wwLjQ3LDAuOTRsMC42NywwLjc2bC0wLjYzLDAuNzdsLTAuOTEsLTAuNTVsLTAuMTYsLTAuMDRsLTEuNjksMC4wNGwtMi4yLC0wLjUxbC0xLjE3LDAuMDdsLTAuMjEsMC4xMWwtMC4zNiwwLjQybC0wLjY3LC0wLjUzbC0wLjQ2LDAuMTJsLTAuNTIsMS4yOWwwLjA1LDAuMzFsMS4yMSwxLjQybDAuNTgsMC45OWwxLjE1LDEuMTRsMC45NSwwLjY4bDAuOTIsMS4yM2wwLjEsMC4wOWwxLjc1LDAuOTFsLTEuODcsLTAuODlsLTEuNSwtMS4xMWwtMi4yMywtMC44OGwtMS43NywtMS45bDAuMTIsLTAuMDZsMC4xLC0wLjQ3bC0xLjA3LC0xLjIybC0wLjA0LC0wLjk0bC0wLjIxLC0wLjI3bC0xLjYxLC0wLjQ5bC0wLjM1LDAuMTRsLTAuNTMsMC45M2wtMC40MSwtMC41N2wwLjA0LC0wLjczWlwiLCBcIm5hbWVcIjogXCJDcm9hdGlhXCJ9LCBcIkhUXCI6IHtcInBhdGhcIjogXCJNMjM3LjgyLDIzNC42OGwxLjM1LDAuMWwxLjk1LDAuMzdsMC4xOCwxLjE1bC0wLjE2LDAuODNsLTAuNTEsMC4zN2wtMC4wNiwwLjQ0bDAuNTcsMC42OGwtMC4wMiwwLjIybC0xLjMxLC0wLjM1bC0xLjI2LDAuMTdsLTEuNDksLTAuMThsLTAuMTUsMC4wMmwtMS4wMywwLjQzbC0xLjAyLC0wLjYxbDAuMDksLTAuMzZsMi4wNCwwLjMybDEuOSwwLjIxbDAuMTksLTAuMDVsMC45LC0wLjU4bDAuMDUsLTAuNDdsLTEuMDUsLTEuMDNsMC4wMiwtMC44NmwtMC4yMywtMC4zbC0xLjEzLC0wLjI5bDAuMTgsLTAuMjNaXCIsIFwibmFtZVwiOiBcIkhhaXRpXCJ9LCBcIkhVXCI6IHtcInBhdGhcIjogXCJNNDYxLjk2LDE1Ny45MmwwLjY4LC0xLjY2bC0wLjAzLC0wLjI5bC0wLjE1LC0wLjIybDAuODQsLTAuMGwwLjMsLTAuMjZsMC4xMiwtMC44NGwwLjg4LDAuNTdsMC45OCwwLjM4bDAuMTYsMC4wMWwyLjEsLTAuMzlsMC4yMywtMC4yMWwwLjE0LC0wLjQ1bDAuODgsLTAuMWwxLjA2LC0wLjQzbDAuMTMsMC4xbDAuMjgsMC4wNGwxLjE4LC0wLjRsMC4xNCwtMC4xbDAuNTIsLTAuNjdsMC42MywtMC4xNWwyLjYsMC45NWwwLjI2LC0wLjAzbDAuMzgsLTAuMjNsMS4xMiwwLjdsMC4xLDAuNDlsLTEuMzEsMC41N2wtMC4xNCwwLjEzbC0xLjE4LDIuMTRsLTEuNDQsMi4wNGwtMS44NSwwLjU1bC0xLjUxLC0wLjEzbC0wLjE0LDAuMDJsLTEuOTIsMC44MmwtMC44NSwwLjQybC0xLjkxLC0wLjU1bC0xLjgzLC0xLjMxbC0wLjc0LC0wLjM3bC0wLjQ0LC0wLjk3bC0wLjI2LC0wLjE4WlwiLCBcIm5hbWVcIjogXCJIdW5nYXJ5XCJ9LCBcIkhOXCI6IHtcInBhdGhcIjogXCJNMjAyLjQ4LDI1MS44N2wtMC4zMywtMC42MmwtMC4xOCwtMC4xNGwtMC41LC0wLjE1bDAuMTMsLTAuNzZsLTAuMTEsLTAuMjhsLTAuMzQsLTAuMjhsLTAuNiwtMC4yM2wtMC4xOCwtMC4wMWwtMC44MSwwLjIybC0wLjE2LC0wLjI0bC0wLjcyLC0wLjM5bC0wLjUxLC0wLjQ4bC0wLjEyLC0wLjA3bC0wLjMxLC0wLjA5bDAuMjQsLTAuM2wwLjA0LC0wLjNsLTAuMTYsLTAuNGwwLjEsLTAuMjhsMS4xNCwtMC42OWwxLjAsLTAuODZsMC4wOSwwLjA0bDAuMywtMC4wNWwwLjQ3LC0wLjM5bDAuNDksLTAuMDNsMC4xNCwwLjEzbDAuMjksMC4wNmwwLjMxLC0wLjFsMS4xNiwwLjIybDEuMjQsLTAuMDhsMC44MSwtMC4yOGwwLjI5LC0wLjI1bDAuNjMsMC4xbDAuNjksMC4xOGwwLjY1LC0wLjA2bDAuNDksLTAuMmwxLjA0LDAuMzJsMC4zOCwwLjA2bDAuNywwLjQ0bDAuNzEsMC41NmwwLjkyLDAuNDFsMC4xLDAuMTFsLTAuMTEsLTAuMDFsLTAuMjMsMC4wOWwtMC4zLDAuM2wtMC43NiwwLjI5bC0wLjU4LDAuMGwtMC4xNSwwLjA0bC0wLjQ1LDAuMjZsLTAuMzEsLTAuMDdsLTAuMzcsLTAuMzRsLTAuMjgsLTAuMDdsLTAuMjYsMC4wN2wtMC4xOCwwLjE1bC0wLjIzLDAuNDNsLTAuMDQsLTAuMGwtMC4zMywwLjI4bC0wLjAzLDAuNGwtMC43NiwwLjYxbC0wLjQ1LDAuM2wtMC4xNSwwLjE2bC0wLjUxLC0wLjM2bC0wLjQxLDAuMDZsLTAuNDUsMC41NmwtMC40MSwtMC4wMWwtMC41OSwwLjA2bC0wLjI3LDAuMzFsMC4wNCwwLjk2bC0wLjA3LDAuMGwtMC4yNSwwLjE2bC0wLjI0LDAuNDVsLTAuNDIsMC4wNlpcIiwgXCJuYW1lXCI6IFwiSG9uZHVyYXNcIn0sIFwiUFJcIjoge1wicGF0aFwiOiBcIk0yNTQuOTUsMjM4LjMxbDEuMTUsMC4yMWwwLjIsMC4yM2wtMC4zNiwwLjM2bC0xLjc2LC0wLjAxbC0xLjIsMC4wN2wtMC4wOSwtMC42OWwwLjE3LC0wLjE4bDEuODksMC4wMVpcIiwgXCJuYW1lXCI6IFwiUHVlcnRvIFJpY29cIn0sIFwiUFNcIjoge1wicGF0aFwiOiBcIk01MDkuNjYsMjAxLjA2bC0wLjAsMS40NGwtMC4yOSwwLjYzbC0wLjU5LDAuMTlsMC4wMiwtMC4xMWwwLjUyLC0wLjMxbC0wLjAyLC0wLjUzbC0wLjQxLC0wLjJsMC4zNiwtMS4yOGwwLjQxLDAuMTdaXCIsIFwibmFtZVwiOiBcIldlc3QgQmFua1wifSwgXCJQVFwiOiB7XCJwYXRoXCI6IFwiTTM5OC42NSwxNzMuNmwwLjc1LC0wLjYzbDAuNywtMC4zbDAuNTEsMS4ybDAuMjgsMC4xOGwxLjQ4LC0wLjBsMC4yLC0wLjA4bDAuMzMsLTAuM2wxLjE2LDAuMDhsMC41MiwxLjExbC0wLjk1LDAuNjZsLTAuMTMsMC4yNGwtMC4wMywyLjJsLTAuMzMsMC4zNWwtMC4wOCwwLjE4bC0wLjA4LDEuMTdsLTAuODYsMC4xOWwtMC4yLDAuNDRsMC45MywxLjY0bC0wLjY0LDEuNzlsMC4wNywwLjMxbDAuNzIsMC43MmwtMC4yNCwwLjU2bC0wLjksMS4wNWwtMC4wNywwLjI2bDAuMTcsMC43N2wtMC43MywwLjU0bC0xLjE4LC0wLjM2bC0wLjE2LC0wLjBsLTAuODUsMC4yMWwwLjMxLC0xLjgxbC0wLjIzLC0xLjg3bC0wLjIzLC0wLjI1bC0wLjk5LC0wLjI0bC0wLjQ5LC0wLjkxbDAuMTgsLTEuNzJsMC45MywtMC45OWwwLjA4LC0wLjE2bDAuMTcsLTEuMTdsMC41MiwtMS43NmwtMC4wNCwtMS4zNmwtMC41MSwtMS4xNGwtMC4wOSwtMC44WlwiLCBcIm5hbWVcIjogXCJQb3J0dWdhbFwifSwgXCJQWVwiOiB7XCJwYXRoXCI6IFwiTTI2NC4zMywzNDEuNDNsMC45MywtMi45NmwwLjA3LC0xLjQybDEuMSwtMi4xbDQuMTksLTAuNzNsMi4yMiwwLjA0bDIuMTIsMS4yMWwwLjA3LDAuNzZsMC43LDEuMzhsLTAuMTYsMy40OGwwLjI0LDAuMzFsMi42NCwwLjVsMC4xOSwtMC4wM2wwLjksLTAuNDVsMS40NywwLjYybDAuMzgsMC42NGwwLjIzLDIuMzVsMC4zLDEuMDdsMC4yNSwwLjIxbDAuOTMsMC4xMmwwLjE2LC0wLjAybDAuOCwtMC4zN2wwLjYxLDAuMzNsLTAuMCwxLjI1bC0wLjMzLDEuNTNsLTAuNSwxLjU3bC0wLjM5LDIuMjZsLTIuMTQsMS45NGwtMS44NSwwLjRsLTIuNzQsLTAuNGwtMi4xMywtMC42MmwyLjI2LC0zLjc1bDAuMDMsLTAuMjRsLTAuMzYsLTEuMThsLTAuMTcsLTAuMTlsLTIuNTUsLTEuMDNsLTMuMDQsLTEuOTVsLTIuMDcsLTAuNDNsLTQuNCwtNC4xMlpcIiwgXCJuYW1lXCI6IFwiUGFyYWd1YXlcIn0sIFwiUEFcIjoge1wicGF0aFwiOiBcIk0yMTMuNjUsMjYzLjc5bDAuMTgsLTAuNDNsMC4wMiwtMC4xOGwtMC4wNiwtMC4yOGwwLjIzLC0wLjE4bC0wLjAxLC0wLjQ4bC0wLjQsLTAuMjlsLTAuMDEsLTAuNjJsMC41NywtMC4xM2wwLjY4LDAuNjlsLTAuMDQsMC4zOWwwLjI2LDAuMzNsMS4wLDAuMTFsMC4yNywtMC4xbDAuNDksMC40NGwwLjI0LDAuMDdsMS4zNCwtMC4yMmwxLjA0LC0wLjYybDEuNDksLTAuNWwwLjg2LC0wLjczbDAuOTksMC4xMWwwLjE4LDAuMjhsMS4zNSwwLjA4bDEuMDIsMC40bDAuNzgsMC43MmwwLjcxLDAuNTNsLTAuMSwwLjEybC0wLjA1LDAuM2wwLjUzLDEuMzRsLTAuMjgsMC40NGwtMC42LC0wLjEzbC0wLjM2LDAuMjJsLTAuMiwwLjc2bC0wLjQxLC0wLjM2bC0wLjQ0LC0xLjEybDAuNDksLTAuNTNsLTAuMTQsLTAuNDlsLTAuNTEsLTAuMTRsLTAuNDEsLTAuNzJsLTAuMTEsLTAuMTFsLTEuMjUsLTAuN2wtMC4xOSwtMC4wNGwtMS4xLDAuMTZsLTAuMjIsMC4xNWwtMC40NywwLjgxbC0wLjksMC41NmwtMC40OSwwLjA4bC0wLjIyLDAuMTdsLTAuMjUsMC41MmwwLjA1LDAuMzJsMC45MywxLjA3bC0wLjQxLDAuMjFsLTAuMjksMC4zbC0wLjgxLDAuMDlsLTAuMzYsLTEuMjZsLTAuNTMsLTAuMWwtMC4yMSwwLjI4bC0wLjUsLTAuMDlsLTAuNDQsLTAuODhsLTAuMjIsLTAuMTZsLTAuOTksLTAuMTZsLTAuNjEsLTAuMjhsLTAuMTMsLTAuMDNsLTEuMCwwLjBaXCIsIFwibmFtZVwiOiBcIlBhbmFtYVwifSwgXCJQR1wiOiB7XCJwYXRoXCI6IFwiTTgwOC40LDI5OC42bDAuNjIsMC40NmwxLjE5LDEuNTZsMS4wNCwwLjc3bC0wLjE4LDAuMzdsLTAuNDIsMC4xNWwtMC45MiwtMC44MmwtMS4wNSwtMS41M2wtMC4yNywtMC45NlpNODA0LjA5LDI5Ni4wNmwtMC4zLDAuMjZsLTAuMzYsLTEuMTFsLTAuNjYsLTEuMDZsLTIuNTUsLTEuODlsLTEuNDIsLTAuNTlsMC4xNywtMC4xNWwxLjE2LDAuNmwwLjg1LDAuNTVsMS4wMSwwLjU4bDAuOTcsMS4wMmwwLjksMC43NmwwLjI0LDEuMDNaTTc5Ni43MSwyOTcuOTlsMC4xNSwwLjgybDAuMzQsMC4yNGwxLjQzLC0wLjE5bDAuMTksLTAuMTFsMC42OCwtMC44MmwxLjM2LC0wLjg3bDAuMTMsLTAuMzFsLTAuMjEsLTEuMTNsMS4wNCwtMC4wM2wwLjMsMC4yNWwtMC4wNCwxLjE3bC0wLjc0LDEuMzRsLTEuMTcsMC4xOGwtMC4yMiwwLjE1bC0wLjM1LDAuNjJsLTIuNTEsMS4xM2wtMS4yMSwtMC4wbC0xLjk5LC0wLjcxbC0xLjE5LC0wLjU4bDAuMDcsLTAuMjhsMS45OCwwLjMybDEuNDYsLTAuMmwwLjI0LC0wLjIxbDAuMjUsLTAuNzlaTTc4OS4yNCwzMDMuNTJsMC4xMSwwLjE1bDIuMTksMS42MmwxLjYsMi42MmwwLjI3LDAuMTRsMS4wOSwtMC4wNmwtMC4wNywwLjc3bDAuMjMsMC4zMmwxLjIzLDAuMjdsLTAuMTQsMC4wOWwwLjA1LDAuNTNsMi4zOSwwLjk1bC0wLjExLDAuMjhsLTEuMzMsMC4xNGwtMC41MSwtMC41NWwtMC4xOCwtMC4wOWwtNC41OSwtMC42NWwtMS44NywtMS41NWwtMS4zOCwtMS4zNWwtMS4yOCwtMi4xN2wtMC4xNiwtMC4xM2wtMy4yNywtMS4xbC0wLjE5LDAuMGwtMi4xMiwwLjcybC0xLjU4LDAuODVsLTAuMTUsMC4zMWwwLjI4LDEuNjNsLTEuNjUsMC43M2wtMS4zNywtMC40bC0yLjMsLTAuMDlsLTAuMDgsLTE1LjY1bDMuOTUsMS41N2w0LjU4LDEuNDJsMS42NywxLjI1bDEuMzIsMS4xOWwwLjM2LDEuMzlsMC4xOSwwLjIxbDQuMDYsMS41MWwwLjM5LDAuODVsLTEuOSwwLjIybC0wLjI1LDAuMzlsMC41NSwxLjY4WlwiLCBcIm5hbWVcIjogXCJQYXB1YSBOZXcgR3VpbmVhXCJ9LCBcIlBFXCI6IHtcInBhdGhcIjogXCJNMjQ2LjQ0LDMyOS4yMWwtMC42MywxLjI1bC0xLjA1LDAuNTRsLTIuMjUsLTEuMzNsLTAuMTksLTAuOTNsLTAuMTYsLTAuMjFsLTQuOTUsLTIuNThsLTQuNDYsLTIuNzlsLTEuODcsLTEuNTJsLTAuOTQsLTEuOTFsMC4zMywtMC42bC0wLjAxLC0wLjMxbC0yLjExLC0zLjMzbC0yLjQ2LC00LjY2bC0yLjM2LC01LjAybC0xLjA0LC0xLjE4bC0wLjc3LC0xLjgxbC0wLjA4LC0wLjExbC0xLjk1LC0xLjY0bC0xLjU0LC0wLjg4bDAuNjEsLTAuODVsMC4wMiwtMC4zMWwtMS4xNSwtMi4yN2wwLjY5LC0xLjU2bDEuNTksLTEuMjZsMC4xMiwwLjQybC0wLjU2LDAuNDdsLTAuMTEsMC4yNWwwLjA3LDAuOTJsMC4zNiwwLjI3bDAuOTcsLTAuMTlsMC44NSwwLjIzbDAuOTksMS4xOWwwLjQxLDAuMDVsMS40MiwtMS4wM2wwLjExLC0wLjE2bDAuNDYsLTEuNjRsMS40NSwtMi4wNmwyLjkyLC0wLjk2bDAuMTEsLTAuMDdsMi43MywtMi42MmwwLjg0LC0xLjcybDAuMDIsLTAuMThsLTAuMywtMS42NWwwLjI4LC0wLjFsMS40OSwxLjA2bDAuNzcsMS4xNGwwLjEsMC4wOWwxLjA4LDAuNmwxLjQzLDIuNTVsMC4yMSwwLjE1bDEuODYsMC4zMWwwLjE4LC0wLjAzbDEuMjUsLTAuNmwwLjc3LDAuMzdsMC4xNywwLjAzbDEuNCwtMC4ybDEuNTcsMC45NmwtMS40NSwyLjI5bDAuMjMsMC40NmwwLjYzLDAuMDVsMC42NiwwLjdsLTEuNTEsLTAuMDhsLTAuMjQsMC4xbC0wLjI3LDAuMzFsLTEuOTYsMC40NmwtMi45NSwxLjc0bC0wLjE0LDAuMjFsLTAuMTcsMS4xbC0wLjYsMC44MmwtMC4wNSwwLjIzbDAuMjEsMS4xM2wtMS4zMSwwLjYzbC0wLjE3LDAuMjdsMC4wLDAuOTFsLTAuNTMsMC4zN2wtMC4xLDAuMzdsMS4wNCwyLjI3bDEuMzEsMS40NmwtMC40NCwwLjlsMC4yNCwwLjQzbDEuNTIsMC4xM2wwLjg3LDEuMjNsMC4yNCwwLjEzbDIuMjEsMC4wN2wwLjE4LC0wLjA2bDEuNTUsLTEuMTNsLTAuMTQsMy4yMmwwLjIzLDAuM2wxLjE0LDAuMjlsMC4xNiwtMC4wbDEuMTgsLTAuMzZsMS45NywzLjcxbC0wLjQ1LDAuNzFsLTAuMDQsMC4xNGwtMC4xMiwxLjhsLTAuMDUsMi4wN2wtMC45MiwxLjJsLTAuMDMsMC4zMWwwLjM4LDAuOGwtMC40OCwwLjcybC0wLjAyLDAuM2wxLjAxLDIuMDJsLTEuNSwyLjY0WlwiLCBcIm5hbWVcIjogXCJQZXJ1XCJ9LCBcIlBLXCI6IHtcInBhdGhcIjogXCJNNjA5LjA4LDE4Ny43NmwxLjY2LDEuMjFsMC43MSwyLjExbDAuMiwwLjE5bDMuNjIsMS4wMWwtMS45OCwxLjk1bC0yLjY1LDAuNGwtMy43NSwtMC42OGwtMC4yNiwwLjA4bC0xLjIzLDEuMjJsLTAuMDcsMC4zMWwwLjg5LDIuNDZsMC44OCwxLjkybDAuMSwwLjEybDEuNjcsMS4xNGwtMS44LDEuMzVsLTAuMTIsMC4yNWwwLjA0LDEuODVsLTIuMzUsMi42N2wtMS41OSwyLjc5bC0yLjUsMi43MmwtMi43NiwtMC4ybC0wLjI0LDAuMDlsLTIuNzYsMi44M2wwLjA0LDAuNDVsMS41NCwxLjEzbDAuMjcsMS45NGwwLjA5LDAuMTdsMS4zNCwxLjI5bDAuNCwxLjgzbC01LjE0LC0wLjAxbC0wLjIyLDAuMDlsLTEuNTMsMS42M2wtMS41MiwtMC41NmwtMC43NiwtMS44OGwtMS45MywtMi4wM2wtMC4yNSwtMC4wOWwtNC42LDAuNWwtNC4wNSwwLjA1bC0zLjEsMC4zM2wwLjc3LC0yLjUzbDMuNDgsLTEuMzNsMC4xOSwtMC4zM2wtMC4yMSwtMS4yNGwtMC4xOSwtMC4yM2wtMS4wMSwtMC4zN2wtMC4wNiwtMi4xOGwtMC4xNywtMC4yNmwtMi4zMiwtMS4xNmwtMC45NiwtMS41N2wtMC41NiwtMC42NWwzLjE2LDEuMDVsMC4xNCwwLjAxbDIuNDUsLTAuNGwxLjQ0LDAuMzNsMC4zLC0wLjFsMC40LC0wLjQ3bDEuNTgsMC4yMmwwLjE0LC0wLjAxbDMuMjUsLTEuMTRsMC4yLC0wLjI3bDAuMDgsLTIuMjNsMS4yMywtMS4zOGwxLjczLDAuMGwwLjI4LC0wLjJsMC4yMiwtMC42MWwxLjY4LC0wLjMybDAuODYsMC4yNGwwLjI3LC0wLjA1bDAuOTgsLTAuNzhsMC4xMSwtMC4yNmwtMC4xMywtMS41N2wwLjk2LC0xLjUybDEuNTEsLTAuNjdsMC4xNCwtMC40MWwtMC43NCwtMS40bDEuODYsMC4wN2wwLjI2LC0wLjEzbDAuNjksLTEuMDFsMC4wNSwtMC4ybC0wLjA5LC0wLjk0bDEuMTQsLTEuMDlsMC4wOSwtMC4yOGwtMC4yOSwtMS40MWwtMC41MSwtMS4wN2wxLjIzLC0xLjA1bDIuNiwtMC41OGwyLjg2LC0wLjMzbDEuMzMsLTAuNTRsMS4zLC0wLjI5WlwiLCBcIm5hbWVcIjogXCJQYWtpc3RhblwifSwgXCJQSFwiOiB7XCJwYXRoXCI6IFwiTTczNy4xMSwyNjMuODJsMC4yNSwxLjY2bDAuMTQsMS4zNGwtMC41NCwxLjQ2bC0wLjY0LC0xLjc5bC0wLjUsLTAuMWwtMS4xNywxLjI4bC0wLjA1LDAuMzJsMC43NCwxLjcxbC0wLjQ5LDAuODFsLTIuNiwtMS4yOGwtMC42MSwtMS41N2wwLjY4LC0xLjA3bC0wLjA3LC0wLjRsLTEuNTksLTEuMTlsLTAuNDIsMC4wNmwtMC42OSwwLjkxbC0xLjAxLC0wLjA4bC0wLjIxLDAuMDZsLTEuNTgsMS4ybC0wLjE3LC0wLjNsMC44NywtMS44OGwxLjQ4LC0wLjY2bDEuMTgsLTAuODFsMC43MSwwLjkybDAuMzQsMC4xbDEuOSwtMC42OWwwLjE4LC0wLjE4bDAuMzQsLTAuOTRsMS41NywtMC4wNmwwLjI5LC0wLjMybC0wLjEsLTEuMzhsMS40MSwwLjgzbDAuMzYsMi4wNlpNNzM0Ljk0LDI1NC40MmwwLjU2LDIuMjRsLTEuNDEsLTAuNDlsLTAuNCwwLjNsMC4wNywwLjk0bDAuNTEsMS4zbC0wLjU0LDAuMjZsLTAuMDgsLTEuMzRsLTAuMjUsLTAuMjhsLTAuNTYsLTAuMWwtMC4yMywtMC45MWwxLjAzLDAuMTRsMC4zNCwtMC4zMWwtMC4wMywtMC45NmwtMC4wNiwtMC4xOGwtMS4xNCwtMS40NGwxLjYyLDAuMDRsMC41NywwLjc4Wk03MjQuNjgsMjM4LjMzbDEuNDgsMC43MWwwLjMzLC0wLjA0bDAuNDQsLTAuMzhsMC4wNSwwLjEzbC0wLjM3LDAuOTdsMC4wMSwwLjIzbDAuODEsMS43NWwtMC41OSwxLjkybC0xLjM3LDAuNzlsLTAuMTQsMC4ybC0wLjM5LDIuMDdsMC4wMSwwLjE0bDAuNTYsMi4wNGwwLjIzLDAuMjFsMS4zMywwLjI4bDAuMTQsLTAuMGwxLjAsLTAuMjdsMi44MiwxLjI4bC0wLjIsMS4xNmwwLjEyLDAuMjlsMC42NiwwLjVsLTAuMTMsMC41NmwtMS41NCwtMC45OWwtMC44OSwtMS4yOWwtMC40OSwwLjBsLTAuNDQsMC42NWwtMS4zNCwtMS4yOGwtMC4yNiwtMC4wOGwtMi4xOCwwLjM2bC0wLjk2LC0wLjQ0bDAuMDksLTAuNzJsMC42OSwtMC41N2wtMC4wMSwtMC40N2wtMC43NSwtMC41OWwtMC40NywwLjE0bC0wLjE1LDAuNDNsLTAuODYsLTEuMDJsLTAuMzQsLTEuMDJsLTAuMDcsLTEuNzRsMC40OSwwLjQxbDAuNDksLTAuMjFsMC4yNiwtMy45OWwwLjczLC0yLjFsMS4yMywwLjBaTTczMS4xMiwyNTguOTJsLTAuODIsMC43NWwtMC44MywxLjY0bC0wLjUyLDAuNWwtMS4xNywtMS4zM2wwLjM2LC0wLjQ3bDAuNjIsLTAuN2wwLjA3LC0wLjE1bDAuMjQsLTEuMzVsMC43MywtMC4wOGwtMC4zMSwxLjI5bDAuMTYsMC4zNGwwLjM3LC0wLjA5bDEuMjEsLTEuNmwtMC4xMiwxLjI0Wk03MjYuNjYsMjU1LjU4bDAuODUsMC40NWwwLjE0LDAuMDNsMS4yOCwtMC4wbC0wLjAzLDAuNjJsLTEuMDQsMC45NmwtMS4xNSwwLjU1bC0wLjA1LC0wLjcxbDAuMTcsLTEuMjZsLTAuMDEsLTAuMTNsLTAuMTYsLTAuNTFaTTcyNC45MiwyNTIuMDZsLTAuNDUsMS41bC0wLjcsLTAuODNsLTAuOTUsLTEuNDNsMS40NCwwLjA2bDAuNjcsMC43Wk03MTcuNDgsMjYxLjI4bC0xLjg3LDEuMzVsMC4yMSwtMC4zbDEuODEsLTEuNTdsMS41LC0xLjc1bDAuOTcsLTEuODRsMC4yMywxLjA4bC0xLjU2LDEuMzNsLTEuMjksMS43WlwiLCBcIm5hbWVcIjogXCJQaGlsaXBwaW5lc1wifSwgXCJQTFwiOiB7XCJwYXRoXCI6IFwiTTQ1OC44LDE0NC4yNWwtMC45NiwtMS45OGwwLjE4LC0xLjA2bC0wLjAxLC0wLjE1bC0wLjYyLC0xLjhsLTAuODIsLTEuMTFsMC41NiwtMC43M2wwLjA1LC0wLjI4bC0wLjUxLC0xLjUxbDEuNDgsLTAuODdsMy44OCwtMS41OGwzLjA2LC0xLjE0bDIuMjMsMC41MmwwLjE1LDAuNjZsMC4yOSwwLjIzbDIuNCwwLjA0bDMuMTEsMC4zOWw0LjU2LC0wLjA1bDEuMTIsMC4zMmwwLjUxLDAuODlsMC4xLDEuNDVsMC4wMywwLjEybDAuNjYsMS4yM2wtMC4wMSwxLjA4bC0xLjMzLDAuNjFsLTAuMTQsMC40MWwwLjc0LDEuNWwwLjA3LDEuNTNsMS4yMiwyLjc5bC0wLjE5LDAuNjZsLTEuMDksMC4zM2wtMC4xNCwwLjA5bC0yLjI3LDIuNzJsLTAuMDQsMC4zMWwwLjM1LDAuOGwtMi4yMiwtMS4xNmwtMC4yMSwtMC4wMmwtMS43MiwwLjQ0bC0xLjEsLTAuMzFsLTAuMjEsMC4wMmwtMS4zLDAuNjFsLTEuMTEsLTEuMDJsLTAuMzIsLTAuMDVsLTAuODEsMC4zNWwtMS4xNSwtMS42MWwtMC4yMSwtMC4xMmwtMS42NSwtMC4xN2wtMC4xOSwtMC44MmwtMC4yMywtMC4yM2wtMS43MiwtMC4zN2wtMC4zNCwwLjE3bC0wLjI1LDAuNTZsLTAuODgsLTAuNDRsMC4xMiwtMC42OWwtMC4yNSwtMC4zNWwtMS43OCwtMC4yN2wtMS4wOCwtMC45N1pcIiwgXCJuYW1lXCI6IFwiUG9sYW5kXCJ9LCBcIlpNXCI6IHtcInBhdGhcIjogXCJNNTAyLjgxLDMwOC4zMmwxLjA5LDEuMDRsMC41OCwxLjk0bC0wLjM5LDAuNjZsLTAuNSwyLjA1bC0wLjAsMC4xNGwwLjQ1LDEuOTVsLTAuNjksMC43N2wtMC4wNiwwLjExbC0wLjc2LDIuMzdsMC4xNSwwLjM2bDAuNjIsMC4zMWwtNi44NSwxLjlsLTAuMjIsMC4zM2wwLjIsMS41NGwtMS42MiwwLjNsLTAuMTIsMC4wNWwtMS40MywxLjAybC0wLjExLDAuMTVsLTAuMjUsMC43M2wtMC43MywwLjE3bC0wLjE0LDAuMDhsLTIuMTgsMi4xMmwtMS4zMywxLjZsLTAuNjUsMC4wNWwtMC44MywtMC4yOWwtMi43NSwtMC4yOGwtMC4yNCwtMC4xbC0wLjE1LC0wLjI3bC0wLjk5LC0wLjU4bC0wLjEyLC0wLjA0bC0xLjczLC0wLjE0bC0xLjg4LDAuNTRsLTEuNSwtMS40OGwtMS42MSwtMi4wMWwwLjExLC03LjczbDQuOTIsMC4wM2wwLjI5LC0wLjM3bC0wLjE5LC0wLjc5bDAuMzQsLTAuODZsMC4wLC0wLjIxbC0wLjQxLC0xLjExbDAuMjYsLTEuMTRsLTAuMDEsLTAuMTZsLTAuMTIsLTAuMzZsMC4xOCwwLjAxbDAuMSwwLjU2bDAuMzEsMC4yNWwxLjE0LC0wLjA2bDEuNDQsMC4yMWwwLjc2LDEuMDVsMC4xOSwwLjEybDIuMDEsMC4zNWwwLjE5LC0wLjAzbDEuMjQsLTAuNjVsMC40NCwxLjAzbDAuMjIsMC4xOGwxLjgxLDAuMzRsMC44NSwwLjk5bDEuMDIsMS4zOWwwLjI0LDAuMTJsMS45MiwwLjAybDAuMywtMC4zMmwtMC4yMSwtMi43NGwtMC40NywtMC4yM2wtMC41MywwLjM2bC0xLjU4LC0wLjg5bC0wLjUxLC0wLjM0bDAuMjksLTIuMzZsMC40NCwtMi45OWwtMC4wMywtMC4xOGwtMC41LC0wLjk5bDAuNjEsLTEuMzhsMC41MywtMC4yNGwzLjI2LC0wLjQxbDAuODksMC4yM2wxLjAxLDAuNjJsMS4wNCwwLjQ0bDEuNiwwLjQzbDEuMzUsMC43MlpcIiwgXCJuYW1lXCI6IFwiWmFtYmlhXCJ9LCBcIkVFXCI6IHtcInBhdGhcIjogXCJNNDgyLjE5LDEyMC44OGwwLjIzLC0xLjY4bC0wLjQzLC0wLjMxbC0wLjc1LDAuMzdsLTEuMzQsLTEuMWwtMC4xOCwtMS43NWwyLjkyLC0wLjk1bDMuMDcsLTAuNTNsMi42NiwwLjZsMi40OCwtMC4xbDAuMTgsMC4zMWwtMS42NSwxLjk2bC0wLjA2LDAuMjZsMC43MSwzLjI1bC0wLjg4LDAuOTRsLTEuODUsLTAuMDFsLTIuMDgsLTEuM2wtMS4xNCwtMC40N2wtMC4yLC0wLjAxbC0xLjY5LDAuNTFaXCIsIFwibmFtZVwiOiBcIkVzdG9uaWFcIn0sIFwiRUdcIjoge1wicGF0aFwiOiBcIk01MDguMDcsMjA4LjhsLTAuNjYsMS4wNmwtMC41MywyLjAzbC0wLjY0LDEuMzJsLTAuMzIsMC4yNmwtMS43NCwtMS44NWwtMS43NywtMy44NmwtMC40OCwtMC4wOWwtMC4yNiwwLjI1bC0wLjA3LDAuMzJsMS4wNCwyLjg4bDEuNTUsMi43NmwxLjg5LDQuMThsMC45NCwxLjQ4bDAuODMsMS41NGwyLjA4LDIuNzNsLTAuMywwLjI4bC0wLjEsMC4yM2wwLjA4LDEuNzJsMC4xMSwwLjIybDIuOTEsMi4zN2wtMjguNzgsMC4wbDAuMCwtMTkuMDZsLTAuNzMsLTIuMmwwLjYxLC0xLjU5bDAuMCwtMC4ybC0wLjM0LC0xLjA0bDAuNzMsLTEuMDhsMy4xMywtMC4wNGwyLjM2LDAuNzJsMi40OCwwLjgxbDEuMTUsMC40M2wwLjIzLC0wLjAxbDEuOTMsLTAuODdsMS4wMiwtMC43OGwyLjA4LC0wLjIxbDEuNTksMC4zMWwwLjYyLDEuMjRsMC41MiwwLjAzbDAuNDYsLTAuNzFsMS44NiwwLjU5bDEuOTUsMC4xNmwwLjE3LC0wLjA0bDAuOTIsLTAuNTJsMS40OCw0LjI0WlwiLCBcIm5hbWVcIjogXCJFZ3lwdFwifSwgXCJaQVwiOiB7XCJwYXRoXCI6IFwiTTQ2Ny4wNiwzNzMuMjdsLTAuMTMsLTAuMjlsMC4wMSwtMS41OGwtMC4wMiwtMC4xMmwtMC43MSwtMS42NGwwLjU5LC0wLjM3bDAuMTQsLTAuMjZsLTAuMDcsLTIuMTNsLTAuMDUsLTAuMTVsLTEuNjMsLTIuNThsLTEuMjUsLTIuMzFsLTEuNzEsLTMuMzdsMC44OCwtMC45OGwwLjcsMC41MmwwLjM5LDEuMDhsMC4yMywwLjE5bDEuMSwwLjE5bDEuNTUsMC41MWwwLjE0LDAuMDFsMS4zNSwtMC4ybDAuMTEsLTAuMDRsMi4yNCwtMS4zOWwwLjE0LC0wLjI1bDAuMCwtOS40bDAuMTYsMC4wOWwxLjM5LDIuMzhsLTAuMjIsMS41M2wwLjA0LDAuMTlsMC41NiwwLjk0bDAuMywwLjE0bDEuNzksLTAuMjdsMC4xNiwtMC4wOGwxLjIzLC0xLjE4bDEuMTcsLTAuNzlsMC4xLC0wLjEybDAuNTcsLTEuMTlsMS4wMiwtMC41MmwwLjksMC4yOGwxLjE2LDAuNzNsMC4xNCwwLjA1bDIuMDQsMC4xM2wwLjEzLC0wLjAybDEuNiwtMC42MmwwLjE4LC0wLjE5bDAuNjMsLTEuOTNsMS4xOCwtMC4xOWwwLjE5LC0wLjEybDAuNzgsLTEuMDVsMC44MSwtMS43MWwyLjE4LC0xLjkxbDMuNDQsLTEuODhsMC44OSwwLjAybDEuMTcsMC40M2wwLjIxLC0wLjBsMC43NiwtMC4yOWwxLjA3LDAuMjFsMS4xNSwzLjU1bDAuNjMsMS44MmwtMC40NCwyLjlsMC4xLDAuNTJsLTAuNzQsLTAuMjlsLTAuMTgsLTAuMDFsLTAuNzIsMC4xOWwtMC4yMSwwLjJsLTAuMjIsMC43NGwtMC42NiwwLjk3bC0wLjA1LDAuMThsMC4wMiwwLjkzbDAuMDksMC4yMWwxLjQ5LDEuNDZsMC4yNywwLjA4bDEuNDcsLTAuMjlsMC4yMiwtMC4xOGwwLjQzLC0xLjAxbDEuMjksMC4wMmwtMC41MSwxLjYzbC0wLjI5LDIuMmwtMC41OSwxLjEybC0yLjIsMS43OGwtMS4wNiwxLjM5bC0wLjcyLDEuNDRsLTEuMzksMS45M2wtMi44MSwyLjg0bC0xLjc1LDEuNjVsLTEuODUsMS4yNGwtMi41NSwxLjA2bC0xLjIzLDAuMTRsLTAuMjQsMC4xOGwtMC4yMiwwLjU0bC0xLjI3LC0wLjM1bC0wLjIsMC4wMWwtMS4xNSwwLjVsLTIuNjIsLTAuNTJsLTAuMTIsMC4wbC0xLjQ2LDAuMzNsLTAuOTgsLTAuMTRsLTAuMTYsMC4wMmwtMi41NSwxLjFsLTIuMTEsMC40NGwtMS41OSwxLjA3bC0wLjkzLDAuMDZsLTAuOTcsLTAuOTJsLTAuMTksLTAuMDhsLTAuNzIsLTAuMDRsLTEuMCwtMS4xNmwtMC4yNSwwLjA1Wk00OTMuNzIsMzU5LjI0bC0xLjEyLC0wLjg2bC0wLjMxLC0wLjAzbC0xLjIzLDAuNTlsLTEuMzYsMS4wN2wtMS4zOSwxLjc4bDAuMDEsMC4zOGwxLjg4LDIuMTFsMC4zMSwwLjA5bDAuOSwtMC4yN2wwLjE4LC0wLjE1bDAuNCwtMC43N2wxLjI4LC0wLjM5bDAuMTgsLTAuMTZsMC40MiwtMC44OGwwLjc2LC0xLjMybC0wLjA1LC0wLjM3bC0wLjg3LC0wLjgyWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBBZnJpY2FcIn0sIFwiRUNcIjoge1wicGF0aFwiOiBcIk0yMjAuMiwyOTMuNDhsMS4yNSwtMS43NmwwLjAyLC0wLjMxbC0wLjU0LC0xLjA5bC0wLjUsLTAuMDZsLTAuNzgsMC45NGwtMS4wMywtMC43NWwwLjMzLC0wLjQ2bDAuMDUsLTAuMjNsLTAuMzgsLTIuMDRsMC42NiwtMC4yOGwwLjE3LC0wLjE5bDAuNDUsLTEuNTJsMC45MywtMS41OGwwLjA0LC0wLjJsLTAuMTMsLTAuNzhsMS4xOSwtMC40N2wxLjU3LC0wLjkxbDIuMzUsMS4zNGwwLjE3LDAuMDRsMC4yOCwtMC4wMmwwLjUyLDAuOTFsMC4yMSwwLjE1bDIuMTIsMC4zNWwwLjIsLTAuMDNsMC41NSwtMC4zMWwxLjA4LDAuNzNsMC45NywwLjU0bDAuMzEsMS42N2wtMC43MSwxLjQ5bC0yLjY0LDIuNTRsLTIuOTUsMC45N2wtMC4xNSwwLjExbC0xLjUzLDIuMThsLTAuNDksMS42OGwtMS4xLDAuOGwtMC44NywtMS4wNWwtMC4xNSwtMC4xbC0xLjAxLC0wLjI3bC0wLjEzLC0wLjBsLTAuNywwLjE0bC0wLjAzLC0wLjQzbDAuNiwtMC41bDAuMSwtMC4zMWwtMC4yNiwtMC45MVpcIiwgXCJuYW1lXCI6IFwiRWN1YWRvclwifSwgXCJBTFwiOiB7XCJwYXRoXCI6IFwiTTQ3MC4yNywxNzEuN2wwLjM4LDAuMTlsMC40NSwtMC4xOGwwLjQsMC42MWwwLjExLDAuMWwwLjQ2LDAuMjRsMC4xMywwLjg3bC0wLjMsMC45NWwtMC4wLDAuMTdsMC4zNiwxLjI4bDAuMTIsMC4xN2wwLjksMC42M2wtMC4wMywwLjQ0bC0wLjY3LDAuMzVsLTAuMTYsMC4yMmwtMC4xNCwwLjg4bC0wLjk2LDEuMThsLTAuMDYsLTAuMDNsLTAuMDQsLTAuNDhsLTAuMTIsLTAuMjJsLTEuMjgsLTAuOTJsLTAuMTksLTEuMjVsMC4yLC0xLjk2bDAuMzMsLTAuODlsLTAuMDYsLTAuM2wtMC4zNiwtMC40MWwtMC4xMywtMC43NWwwLjY2LC0wLjlaXCIsIFwibmFtZVwiOiBcIkFsYmFuaWFcIn0sIFwiQU9cIjoge1wicGF0aFwiOiBcIk00NjEuNjIsMjk5LjkzbDAuNTUsMS42N2wwLjczLDEuNTRsMS41NiwyLjE4bDAuMjgsMC4xMmwxLjY2LC0wLjJsMC44MSwtMC4zNGwxLjI4LDAuMzNsMC4zMywtMC4xNGwwLjM5LC0wLjY3bDAuNTYsLTEuM2wxLjM3LC0wLjA5bDAuMjcsLTAuMjFsMC4wNywtMC4yM2wwLjY3LC0wLjAxbC0wLjEzLDAuNTNsMC4yOSwwLjM3bDIuNzQsLTAuMDJsMC4wNCwxLjI5bDAuMDMsMC4xM2wwLjQ2LDAuODdsLTAuMzUsMS41MmwwLjE4LDEuNTVsMC4wNywwLjE2bDAuNzUsMC44NWwtMC4xMywyLjg5bDAuNDEsMC4yOWwwLjU2LC0wLjIxbDEuMTEsMC4wNWwxLjUsLTAuMzdsMC45LDAuMTJsMC4xOCwwLjUzbC0wLjI3LDEuMTVsMC4wMSwwLjE3bDAuNCwxLjA4bC0wLjMzLDAuODVsLTAuMDEsMC4xOGwwLjEyLDAuNTFsLTQuODMsLTAuMDNsLTAuMywwLjNsLTAuMTIsOC4xM2wwLjA3LDAuMTlsMS42OSwyLjFsMS4yNywxLjI1bC00LjAzLDAuOTJsLTUuOTMsLTAuMzZsLTEuNjYsLTEuMTlsLTAuMTgsLTAuMDZsLTEwLjE1LDAuMTFsLTAuMzQsMC4xM2wtMS4zNSwtMS4wNWwtMC4xNywtMC4wNmwtMS42MiwtMC4wOGwtMS42LDAuNDVsLTAuODgsMC4zNmwtMC4xNywtMS4ybDAuMzQsLTIuMTlsMC44NSwtMi4zMmwwLjE0LC0xLjEzbDAuNzksLTIuMjRsMC41NywtMS4wbDEuNDIsLTEuNjRsMC44MiwtMS4xNWwwLjA1LC0wLjEzbDAuMjYsLTEuODhsLTAuMTMsLTEuNTFsLTAuMDcsLTAuMTZsLTAuNzIsLTAuODdsLTEuMjMsLTIuOTFsMC4wOSwtMC4zN2wwLjczLC0wLjk1bDAuMDUsLTAuMjdsLTEuMjcsLTQuMTJsLTEuMTksLTEuNTRsMC4xLC0wLjJsMC44NiwtMC4yOGwwLjc4LDAuMDNsMC44MywtMC4yOWw3LjEyLDAuMDNaTTQ1MS44MSwyOTguOTRsLTAuMTcsMC4wN2wtMC41LC0xLjQybDAuODUsLTAuOTJsMC41MywtMC4yOWwwLjQ4LDAuNDRsLTAuNTYsMC4zMmwtMC4xLDAuMWwtMC40MSwwLjY1bC0wLjA1LDAuMTRsLTAuMDcsMC45MVpcIiwgXCJuYW1lXCI6IFwiQW5nb2xhXCJ9LCBcIktaXCI6IHtcInBhdGhcIjogXCJNNTk4LjQyLDE3Mi4wOGwtMS4zNywwLjU0bC0zLjMsMi4wOWwtMC4xMSwwLjEybC0xLjAxLDEuOTdsLTAuNTYsMC4wMWwtMC42LC0xLjI0bC0wLjI2LC0wLjE3bC0yLjk1LC0wLjA5bC0wLjQ2LC0yLjIybC0wLjI5LC0wLjI0bC0wLjkxLC0wLjAybDAuMTcsLTIuNzJsLTAuMTIsLTAuMjZsLTMuMCwtMi4yMmwtMC4yLC0wLjA2bC00LjI5LDAuMjRsLTIuOCwwLjQybC0yLjM2LC0yLjdsLTYuNCwtMy42NWwtMC4yMywtMC4wM2wtNi40NSwxLjgzbC0wLjIyLDAuMjlsMC4xLDEwLjk0bC0wLjg0LDAuMWwtMS42NSwtMi4yMWwtMC4xMSwtMC4wOWwtMS42OSwtMC44NGwtMC4yLC0wLjAybC0yLjg0LDAuNjNsLTAuMTQsMC4wN2wtMC43MSwwLjY0bC0wLjAyLC0wLjExbDAuNTcsLTEuMTdsMC4wLC0wLjI2bC0wLjQ4LC0xLjA1bC0wLjE3LC0wLjE2bC0yLjc4LC0wLjk5bC0xLjA4LC0yLjYybC0wLjEzLC0wLjE1bC0xLjI0LC0wLjdsLTAuMDQsLTAuNDhsMi4wNywwLjI1bDAuMzQsLTAuMjlsMC4wOSwtMi4wM2wxLjg0LC0wLjQ0bDIuMTIsMC40NWwwLjM2LC0wLjI1bDAuNDUsLTMuMDRsLTAuNDUsLTIuMDZsLTAuMzEsLTAuMjNsLTIuNDQsMC4xNWwtMi4wNywtMC43NWwtMC4yMywwLjAxbC0yLjg4LDEuMzhsLTIuMjEsMC42MmwtMC45NiwtMC4zOGwwLjIyLC0xLjM5bC0wLjA2LC0wLjIzbC0xLjYsLTIuMTJsLTAuMjUsLTAuMTJsLTEuNzIsMC4wOGwtMS44NywtMS45MWwxLjMzLC0yLjI0bC0wLjA2LC0wLjM4bC0wLjU1LC0wLjVsMS43MiwtMy4wOGwyLjMsMS43bDAuNDgsLTAuMmwwLjI5LC0yLjI2bDQuOTksLTMuNDhsMy43NiwtMC4wOGw1LjQ2LDIuMjdsMi45NiwxLjMzbDAuMjYsLTAuMDFsMi41OSwtMS4zNmwzLjgyLC0wLjA2bDMuMTMsMS42N2wwLjM4LC0wLjA5bDAuNjMsLTAuODVsMy4zNiwwLjE0bDAuMjksLTAuMTlsMC42MywtMS41N2wtMC4xMywtMC4zN2wtMy42NCwtMi4wNWwyLjAsLTEuMzZsMC4xLC0wLjM4bC0wLjMyLC0wLjYybDIuMDksLTAuNzZsMC4xMywtMC40N2wtMS42NSwtMi4xM2wwLjg5LC0wLjkxbDkuMjcsLTEuMThsMC4xMywtMC4wNWwxLjE3LC0wLjgybDYuMiwtMS4yN2wyLjI2LC0xLjQzbDQuMTksMC43bDAuNzQsMy4zOWwwLjM4LDAuMjJsMi41MiwtMC44MWwyLjksMS4wNmwtMC4xOCwxLjYzbDAuMzIsMC4zM2wyLjUyLC0wLjIzbDUuMCwtMi41OGwwLjAzLDAuMzlsMy4xNiwyLjYybDUuNTcsOC40OGwwLjQ5LDAuMDJsMS4xOCwtMS41M2wzLjIyLDEuNzhsMC4yMSwwLjAzbDMuNSwtMC44M2wxLjIxLDAuNTJsMS4xNiwxLjgybDAuMTUsMC4xMmwxLjY3LDAuNjFsMS4wMSwxLjMybDAuMjgsMC4xMWwzLjA0LC0wLjQxbDEuMSwxLjY0bC0xLjY4LDEuODlsLTEuOTcsMC4yOGwtMC4yNiwwLjI5bC0wLjEyLDMuMDlsLTEuMiwxLjIzbC00LjgxLC0xLjAxbC0wLjM1LDAuMmwtMS43Nyw1LjUxbC0xLjE0LDAuNjJsLTQuOTIsMS4yM2wtMC4yLDAuNDFsMi4xNCw1LjA2bC0xLjQ1LDAuNjdsLTAuMTcsMC4zMWwwLjE1LDEuMjhsLTEuMDUsLTAuM2wtMS4yMSwtMS4wNGwtMC4xNywtMC4wN2wtMy43MywtMC4zMmwtNC4xNSwtMC4wOGwtMC45MiwwLjMxbC0zLjQ2LC0xLjI0bC0wLjIyLDAuMDFsLTEuNDIsMC42M2wtMC4xNywwLjIxbC0wLjMyLDEuNDlsLTMuODIsLTAuOTdsLTAuMTUsMC4wbC0xLjY1LDAuNDNsLTAuMiwwLjE3bC0wLjUxLDEuMjFaXCIsIFwibmFtZVwiOiBcIkthemFraHN0YW5cIn0sIFwiRVRcIjoge1wicGF0aFwiOiBcIk01MTYuMCwyNDcuNjNsMS4yMSwwLjkybDAuMywwLjA0bDEuMywtMC41M2wwLjQ2LDAuNDFsMC4xOSwwLjA4bDEuNjUsMC4wM2wyLjA1LDAuOTZsMC42NywwLjg4bDEuMDcsMC43OWwxLjAsMS40NWwwLjcsMC42OGwtMC43MiwwLjkybC0wLjg1LDEuMTlsLTAuMDQsMC4yNWwwLjE5LDAuNjdsMC4wNCwwLjc0bDAuMjksMC4yOGwxLjQsMC4wNGwwLjU1LC0wLjE1bDAuMjMsMC4xOWwtMC40MSwwLjY3bDAuMDEsMC4zMmwwLjkyLDEuMzlsMC45MywxLjIzbDAuOTksMC45NGwwLjEsMC4wNmw4LjE5LDIuOTlsMS41MSwwLjAxbC02LjUxLDYuOTVsLTMuMTQsMC4xMWwtMC4xOCwwLjA2bC0yLjE1LDEuNzFsLTEuNTEsMC4wNGwtMC4yMiwwLjFsLTAuNiwwLjY5bC0xLjQ2LC0wLjBsLTAuOTMsLTAuNzhsLTAuMzIsLTAuMDRsLTIuMjksMS4wNWwtMC4xMiwwLjFsLTAuNjQsMC45bC0xLjQ0LC0wLjE3bC0wLjUxLC0wLjI2bC0wLjE3LC0wLjAzbC0wLjU2LDAuMDdsLTAuNjgsLTAuMDJsLTMuMSwtMi4wOGwtMC4xNywtMC4wNWwtMS42MiwwLjBsLTAuNjgsLTAuNjVsMC4wLC0xLjI4bC0wLjIxLC0wLjI5bC0xLjE5LC0wLjM4bC0xLjQyLC0yLjYzbC0wLjEzLC0wLjEybC0xLjA1LC0wLjUzbC0wLjQ2LC0xLjBsLTEuMjcsLTEuMjNsLTAuMTcsLTAuMDhsLTEuMDgsLTAuMTNsMC41MywtMC45bDEuMTcsLTAuMDVsMC4yNiwtMC4xN2wwLjM3LC0wLjc3bDAuMDMsLTAuMTRsLTAuMDMsLTIuMjNsMC43LC0yLjQ5bDEuMDgsLTAuNjVsMC4xNCwtMC4xOWwwLjI0LC0xLjBsMS4wMywtMS44NWwxLjQ3LC0xLjIybDAuMDksLTAuMTJsMS4wMiwtMi41MWwwLjM2LC0xLjk2bDIuNjIsMC40OGwwLjMzLC0wLjE4bDAuNjMsLTEuNTVaXCIsIFwibmFtZVwiOiBcIkV0aGlvcGlhXCJ9LCBcIlpXXCI6IHtcInBhdGhcIjogXCJNNDk4Ljk1LDM0MS4ybC0xLjE2LC0wLjIzbC0wLjE2LDAuMDFsLTAuNzQsMC4yOGwtMS4xMSwtMC40MWwtMS4wMiwtMC4wNGwtMS41MiwtMS4xM2wtMC4xMiwtMC4wNWwtMS43OSwtMC4zN2wtMC42NSwtMS40NmwtMC4wMSwtMC44NmwtMC4yMiwtMC4yOWwtMC45OSwtMC4yNmwtMi43NCwtMi43N2wtMC43NywtMS40NmwtMC41MiwtMC41bC0wLjcyLC0xLjU0bDIuMjQsMC4yM2wwLjc4LDAuMjhsMC4xMiwwLjAybDAuODUsLTAuMDZsMC4yMSwtMC4xMWwxLjM4LC0xLjY2bDIuMTEsLTIuMDVsMC44MSwtMC4xOGwwLjIyLC0wLjJsMC4yNywtMC44bDEuMjksLTAuOTNsMS41MywtMC4yOGwwLjExLDAuNjZsMC4zLDAuMjVsMi4wMiwtMC4wNWwxLjA0LDAuNDhsMC41LDAuNTlsMC4xOCwwLjFsMS4xMywwLjE4bDEuMTEsMC43bDAuMDEsMy4wNmwtMC40OSwxLjgybC0wLjExLDEuOTRsMC4wMywwLjE2bDAuMzUsMC42OGwtMC4yNCwxLjNsLTAuMjcsMC4xN2wtMC4xMiwwLjE1bC0wLjY0LDEuODNsLTIuNDksMi44WlwiLCBcIm5hbWVcIjogXCJaaW1iYWJ3ZVwifSwgXCJFU1wiOiB7XCJwYXRoXCI6IFwiTTM5OC42NywxNzIuOGwwLjA5LC0xLjQ1bC0wLjA2LC0wLjJsLTAuODIsLTEuMDVsMy4xNiwtMS45NmwzLjAxLDAuNTRsMy4zMywtMC4wMmwyLjY0LDAuNTJsMi4xNCwtMC4xNWwzLjksMC4xbDAuOTEsMS4wOGwwLjE0LDAuMDlsNC42MSwxLjM4bDAuMjYsLTAuMDRsMC43NywtMC41NWwyLjY2LDEuMjlsMC4xNywwLjAzbDIuNTksLTAuMzVsMC4xLDEuMjhsLTIuMiwxLjg1bC0zLjEzLDAuNjJsLTAuMjMsMC4yM2wtMC4yMSwwLjkybC0xLjU0LDEuNjhsLTAuOTcsMi40bDAuMDIsMC4yNmwwLjg1LDEuNDZsLTEuMjcsMS4xNGwtMC4wOSwwLjE0bC0wLjUsMS43M2wtMS43MywwLjUzbC0wLjE1LDAuMWwtMS42OCwyLjFsLTMuMDMsMC4wNGwtMi4zOCwtMC4wNWwtMC4xNywwLjA1bC0xLjU3LDEuMDFsLTAuOSwxLjAxbC0wLjk2LC0wLjE5bC0wLjgyLC0wLjg2bC0wLjY5LC0xLjZsLTAuMjIsLTAuMThsLTIuMTQsLTAuNDFsLTAuMTMsLTAuNjJsMC44MywtMC45N2wwLjM5LC0wLjg2bC0wLjA2LC0wLjMzbC0wLjczLC0wLjczbDAuNjMsLTEuNzRsLTAuMDIsLTAuMjVsLTAuOCwtMS40MWwwLjY5LC0wLjE1bDAuMjMsLTAuMjdsMC4wOSwtMS4yOWwwLjMzLC0wLjM2bDAuMDgsLTAuMmwwLjAzLC0yLjE2bDEuMDMsLTAuNzJsMC4xLC0wLjM3bC0wLjcsLTEuNWwtMC4yNSwtMC4xN2wtMS40NiwtMC4xMWwtMC4yMiwwLjA3bC0wLjM0LDAuM2wtMS4xNywwLjBsLTAuNTUsLTEuMjlsLTAuMzksLTAuMTZsLTEuMDIsMC40NGwtMC40NSwwLjM2WlwiLCBcIm5hbWVcIjogXCJTcGFpblwifSwgXCJFUlwiOiB7XCJwYXRoXCI6IFwiTTUyNy4xNSwyNTMuMDVsLTAuNzcsLTAuNzRsLTEuMDEsLTEuNDdsLTEuMTQsLTAuODZsLTAuNjIsLTAuODRsLTAuMTEsLTAuMDlsLTIuMTgsLTEuMDJsLTAuMTIsLTAuMDNsLTEuNjEsLTAuMDNsLTAuNTIsLTAuNDZsLTAuMzEsLTAuMDVsLTEuMzEsMC41NGwtMS4zOCwtMS4wNmwtMC40NiwwLjEybC0wLjY5LDEuNjhsLTIuNDksLTAuNDZsLTAuMiwtMC43NmwxLjA2LC0zLjY5bDAuMjQsLTEuNjVsMC42NiwtMC42NmwxLjc2LC0wLjRsMC4xNiwtMC4xbDAuOTcsLTEuMTNsMS4yNCwyLjU1bDAuNjgsMi4zNGwwLjA5LDAuMTRsMS40LDEuMjdsMy4zOSwyLjRsMS4zNywxLjQzbDIuMTQsMi4zNGwwLjk0LDAuNmwtMC4zMiwwLjI2bC0wLjg1LC0wLjE3WlwiLCBcIm5hbWVcIjogXCJFcml0cmVhXCJ9LCBcIk1FXCI6IHtcInBhdGhcIjogXCJNNDY5LjA1LDE3Mi45bC0wLjU3LC0wLjhsLTAuMSwtMC4wOWwtMC44MiwtMC40NmwwLjE2LC0wLjMzbDAuMzUsLTEuNTdsMC43MiwtMC42MmwwLjI3LC0wLjE2bDAuNDgsMC4zOGwwLjM1LDAuNGwwLjEyLDAuMDhsMC43OSwwLjMybDAuNjYsMC40M2wtMC40MywwLjYybC0wLjI4LDAuMTFsLTAuMDcsLTAuMjVsLTAuNTMsLTAuMWwtMS4wOSwxLjQ5bC0wLjA1LDAuMjNsMC4wNiwwLjMyWlwiLCBcIm5hbWVcIjogXCJNb250ZW5lZ3JvXCJ9LCBcIk1EXCI6IHtcInBhdGhcIjogXCJNNDg4LjIsMTUzLjc1bDAuMTQsLTAuMTFsMS40OSwtMC4yOGwxLjc1LDAuOTVsMS4wNiwwLjE0bDAuOTIsMC43bC0wLjE1LDAuOWwwLjE1LDAuMzFsMC44LDAuNDZsMC4zMywxLjJsMC4wOSwwLjE0bDAuNzIsMC42NmwtMC4xMSwwLjI4bDAuMSwwLjMzbC0wLjA2LDAuMDJsLTEuMjUsLTAuMDhsLTAuMTcsLTAuMjlsLTAuMzksLTAuMTJsLTAuNTIsMC4yNWwtMC4xNiwwLjM2bDAuMTMsMC40MmwtMC42LDAuODhsLTAuNDMsMS4wM2wtMC4yMiwwLjEybC0wLjMyLC0xLjBsMC4yNSwtMS4zNGwtMC4wOCwtMS4zOGwtMC4wNiwtMC4xN2wtMS40MywtMS44N2wtMC44MSwtMS4zNmwtMC43OCwtMC45NWwtMC4xMiwtMC4wOWwtMC4yOSwtMC4xMlpcIiwgXCJuYW1lXCI6IFwiTW9sZG92YVwifSwgXCJNR1wiOiB7XCJwYXRoXCI6IFwiTTU0NC43NywzMTYuNDVsMC42NCwxLjA0bDAuNiwxLjYybDAuNCwzLjA0bDAuNjMsMS4yMWwtMC4yMiwxLjA3bC0wLjE1LDAuMjZsLTAuNTksLTEuMDVsLTAuNTIsLTAuMDFsLTAuNDcsMC43NmwtMC4wNCwwLjIzbDAuNDYsMS44NGwtMC4xOSwwLjkybC0wLjYxLDAuNTNsLTAuMSwwLjIxbC0wLjE2LDIuMTVsLTAuOTcsMi45OGwtMS4yNCwzLjU5bC0xLjU1LDQuOTdsLTAuOTYsMy42N2wtMS4wOCwyLjkzbC0xLjk0LDAuNjFsLTIuMDUsMS4wNmwtMy4yLC0xLjUzbC0wLjYyLC0xLjI2bC0wLjE4LC0yLjM5bC0wLjg3LC0yLjA3bC0wLjIyLC0xLjhsMC40LC0xLjY5bDEuMDEsLTAuNGwwLjE5LC0wLjI4bDAuMDEsLTAuNzlsMS4xNSwtMS45MWwwLjA0LC0wLjExbDAuMjMsLTEuNjZsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMjFsLTAuNDYsLTEuNThsLTAuMTksLTIuMjVsMC44MiwtMS4zNmwwLjMzLC0xLjUxbDEuMTEsLTAuMWwxLjQsLTAuNTNsMC45LC0wLjQ1bDEuMDMsLTAuMDNsMC4yMSwtMC4wOWwxLjQxLC0xLjQ1bDIuMTIsLTEuNjVsMC43NSwtMS4yOWwwLjAzLC0wLjI0bC0wLjE3LC0wLjU2bDAuNTMsMC4xNWwwLjMyLC0wLjFsMS4zOCwtMS43N2wwLjA2LC0wLjE4bDAuMDQsLTEuNDRsMC41NCwtMC43NGwwLjYyLDAuNzdaXCIsIFwibmFtZVwiOiBcIk1hZGFnYXNjYXJcIn0sIFwiTUFcIjoge1wicGF0aFwiOiBcIk0zNzguNjYsMjMwLjEzbDAuMDcsLTAuNzVsMC45MywtMC43MmwwLjgyLC0xLjM3bDAuMDQsLTAuMjFsLTAuMTQsLTAuOGwwLjgsLTEuNzRsMS4zMywtMS42MWwwLjc5LC0wLjRsMC4xNCwtMC4xNWwwLjY2LC0xLjU1bDAuMDgsLTEuNDZsMC44MywtMS41MmwxLjYsLTAuOTRsMC4xMSwtMC4xMWwxLjU2LC0yLjcxbDEuMiwtMC45OWwyLjI0LC0wLjI5bDAuMTcsLTAuMDhsMS45NSwtMS44M2wxLjMsLTAuNzdsMi4wOSwtMi4yOGwwLjA3LC0wLjI2bC0wLjYxLC0zLjM0bDAuOTIsLTIuM2wwLjMzLC0xLjQ0bDEuNTIsLTEuNzlsMi40OCwtMS4yN2wxLjg2LC0xLjE2bDAuMSwtMC4xMWwxLjY3LC0yLjkzbDAuNzIsLTEuNTlsMS41NCwwLjAxbDEuNDMsMS4xNGwwLjIxLDAuMDZsMi4zMywtMC4xOWwyLjU1LDAuNjJsMC45NywwLjAzbDAuODMsMS42bDAuMTUsMS43MWwwLjg2LDIuOTZsMC4wOSwwLjE0bDAuNSwwLjQ1bC0wLjMxLDAuNzNsLTMuMTEsMC40NGwtMC4xNiwwLjA3bC0xLjA3LDAuOTdsLTEuMzYsMC4yM2wtMC4yNSwwLjI4bC0wLjEsMS44NWwtMi43NCwxLjAybC0wLjE0LDAuMTFsLTAuOSwxLjNsLTEuOTMsMC42OWwtMi41NiwwLjQ0bC00LjA0LDIuMDFsLTAuMTcsMC4yN2wwLjAyLDIuOTFsLTAuMDgsMC4wbC0wLjMsMC4zMWwwLjA1LDEuMTVsLTEuMjUsMC4wN2wtMC4xNiwwLjA2bC0wLjczLDAuNTVsLTAuOTgsMC4wbC0wLjg1LC0wLjMzbC0wLjE1LC0wLjAybC0yLjExLDAuMjlsLTAuMjQsMC4xOWwtMC43NiwxLjk1bC0wLjYzLDAuMTZsLTAuMjEsMC4xOWwtMS4xNSwzLjI5bC0zLjQyLDIuODFsLTAuMSwwLjE3bC0wLjgxLDMuNTdsLTAuOTgsMS4xMmwtMC4zLDAuODVsLTUuMTMsMC4xOVpcIiwgXCJuYW1lXCI6IFwiTW9yb2Njb1wifSwgXCJVWlwiOiB7XCJwYXRoXCI6IFwiTTU4Ny44MywxODYuNDhsMC4wNiwtMS40NmwtMC4xOSwtMC4yOWwtMy4zMSwtMS4yNGwtMi41NywtMS40bC0xLjYzLC0xLjM4bC0yLjc5LC0xLjk4bC0xLjIsLTIuOThsLTAuMTIsLTAuMTRsLTAuODQsLTAuNTRsLTAuMTgsLTAuMDVsLTIuNjEsMC4xM2wtMC43NiwtMC40OGwtMC4yNSwtMi4yNWwtMC4xNywtMC4yNGwtMy4zNywtMS42bC0wLjMyLDAuMDRsLTIuMDgsMS43M2wtMi4xMSwxLjAybC0wLjE2LDAuMzVsMC4zMSwxLjE0bC0yLjE0LDAuMDNsLTAuMDksLTEwLjY4bDYuMSwtMS43NGw2LjI1LDMuNTdsMi4zNiwyLjcybDAuMjcsMC4xbDIuOTIsLTAuNDRsNC4xNywtMC4yM2wyLjc4LDIuMDZsLTAuMTgsMi44N2wwLjI5LDAuMzJsMC45OCwwLjAybDAuNDYsMi4yMmwwLjI4LDAuMjRsMy4wLDAuMDlsMC42MSwxLjI1bDAuMjgsMC4xN2wwLjkzLC0wLjAybDAuMjYsLTAuMTZsMS4wNiwtMi4wNmwzLjIxLC0yLjAzbDEuMywtMC41bDAuMTksMC4wOGwtMS43NSwxLjYybDAuMDUsMC40OGwxLjg1LDEuMTJsMC4yNywwLjAybDEuNjUsLTAuNjlsMi40LDEuMjdsLTIuNjksMS43OWwtMS43OSwtMC4yN2wtMC44OSwwLjA2bC0wLjIyLC0wLjUybDAuNDgsLTEuMjZsLTAuMzQsLTAuNGwtMy4zNSwwLjY5bC0wLjIyLDAuMThsLTAuNzgsMS44N2wtMS4wNywxLjQ3bC0xLjkzLC0wLjEzbC0wLjI5LDAuMTZsLTAuNjUsMS4yOWwwLjE2LDAuNDJsMS42OSwwLjY0bDAuNDgsMS45MWwtMS4yNSwyLjZsLTEuNjQsLTAuNTNsLTEuMTgsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlV6YmVraXN0YW5cIn0sIFwiTU1cIjoge1wicGF0aFwiOiBcIk02NzAuMSwyMzMuMzlsLTEuNDYsMS4xMWwtMS42OCwwLjExbC0wLjI2LDAuMTlsLTEuMSwyLjdsLTAuOTUsMC40MmwtMC4xNCwwLjQybDEuMjEsMi4yN2wxLjYxLDEuOTJsMC45NCwxLjU1bC0wLjgyLDEuOTlsLTAuNzcsMC40MmwtMC4xMywwLjM5bDAuNjQsMS4zNWwxLjYyLDEuOTdsMC4yNiwxLjMybC0wLjA0LDEuMTVsMC4wMiwwLjEzbDAuOTIsMi4xOGwtMS4zLDIuMjNsLTAuNzksMS42OWwtMC4xLC0wLjc3bDAuNzQsLTEuODdsLTAuMDIsLTAuMjZsLTAuOCwtMS40MmwwLjIsLTIuNjhsLTAuMDYsLTAuMmwtMC45OCwtMS4yN2wtMC44LC0yLjk4bC0wLjQ1LC0zLjIybC0xLjExLC0yLjIybC0wLjQ1LC0wLjFsLTEuNjQsMS4yOGwtMi43NCwxLjc2bC0xLjI2LC0wLjJsLTEuMjcsLTAuNDlsMC43OSwtMi45M2wwLjAsLTAuMTRsLTAuNTIsLTIuNDJsLTEuOTMsLTIuOTdsMC4yNiwtMC44bC0wLjIyLC0wLjM5bC0xLjM3LC0wLjMxbC0xLjY1LC0xLjk4bC0wLjEyLC0xLjVsMC40MSwwLjE5bDAuNDIsLTAuMjZsMC4wNSwtMS43bDEuMDgsLTAuNTRsMC4xNiwtMC4zNGwtMC4yNCwtMS4wbDAuNSwtMC43OWwwLjA1LC0wLjE1bDAuMDgsLTIuMzVsMS41OCwwLjQ5bDAuMzYsLTAuMTVsMS4xMiwtMi4xOWwwLjE1LC0xLjM0bDEuMzUsLTIuMThsMC4wNCwtMC4xN2wtMC4wNywtMS4zNWwyLjk3LC0xLjcxbDEuNjcsMC40NWwwLjM4LC0wLjMzbC0wLjE4LC0xLjQ2bDAuNywtMC40bDAuMTUsLTAuMzJsLTAuMTMsLTAuNzJsMC45NCwtMC4xM2wwLjc0LDEuNDFsMC4xMSwwLjEybDAuOTUsMC41NmwwLjA3LDEuODlsLTAuMDksMi4wOGwtMi4yOCwyLjE1bC0wLjA5LDAuMTlsLTAuMywzLjE1bDAuMzUsMC4zMmwyLjM3LC0wLjM5bDAuNTMsMi4xN2wwLjIsMC4yMWwxLjMsMC40MmwtMC42MywxLjlsMC4xNCwwLjM2bDEuODYsMC45OWwxLjEsMC40OWwwLjI0LDAuMGwxLjQ1LC0wLjZsMC4wNCwwLjUxbC0yLjAxLDEuNmwtMC41NiwwLjk2bC0xLjM0LDAuNTZaXCIsIFwibmFtZVwiOiBcIk15YW5tYXJcIn0sIFwiTUxcIjoge1wicGF0aFwiOiBcIk0zOTAuNzksMjQ4LjJsMC42NywtMC4zN2wwLjE0LC0wLjE4bDAuMzYsLTEuMzFsMC41MSwtMC4wNGwxLjY4LDAuNjlsMC4yMSwwLjBsMS4zNCwtMC40OGwwLjg5LDAuMTZsMC4zLC0wLjEzbDAuMjksLTAuNDRsOS44OSwtMC4wNGwwLjI5LC0wLjIxbDAuNTYsLTEuOGwtMC4xMSwtMC4zM2wtMC4zMywtMC4yNGwtMi4zNywtMjIuMWwzLjQxLC0wLjA0bDguMzcsNS43M2w4LjM4LDUuNjhsMC41NiwxLjE1bDAuMTQsMC4xNGwxLjU2LDAuNzVsMC45OSwwLjM2bDAuMDMsMS40NWwwLjMzLDAuMjlsMi40NSwtMC4yMmwwLjAxLDUuNTJsLTEuMywxLjY0bC0wLjA2LDAuMTVsLTAuMTgsMS4zN2wtMS45OSwwLjM2bC0zLjQsMC4yMmwtMC4xOSwwLjA5bC0wLjg1LDAuODNsLTEuNDgsMC4wOWwtMS40OSwwLjAxbC0wLjU0LC0wLjQzbC0wLjI2LC0wLjA1bC0xLjM4LDAuMzZsLTIuMzksMS4wOGwtMC4xMywwLjEybC0wLjQ0LDAuNzNsLTEuODgsMS4xMWwtMC4xMSwwLjEybC0wLjMsMC41N2wtMC44NiwwLjQybC0xLjEsLTAuMzFsLTAuMjgsMC4wN2wtMC42OSwwLjYybC0wLjA5LDAuMTZsLTAuMzUsMS42NmwtMS45MywyLjA0bC0wLjA4LDAuMjNsMC4wNSwwLjc2bC0wLjYzLDAuOTlsLTAuMDQsMC4xOWwwLjE0LDEuMjNsLTAuODEsMC4yOWwtMC4zMiwwLjE3bC0wLjI3LC0wLjc1bC0wLjM5LC0wLjE4bC0wLjY1LDAuMjZsLTAuMzYsLTAuMDRsLTAuMjksMC4xNGwtMC4zNywwLjZsLTEuNjksLTAuMDJsLTAuNjMsLTAuMzRsLTAuMzIsMC4wMmwtMC4xMiwwLjA5bC0wLjQ3LC0wLjQ1bDAuMSwtMC42bC0wLjA5LC0wLjI3bC0wLjMxLC0wLjNsLTAuMzMsLTAuMDVsLTAuMDUsMC4wMmwwLjAyLC0wLjIxbDAuNDYsLTAuNTlsLTAuMDIsLTAuMzlsLTAuOTksLTEuMDJsLTAuMzQsLTAuNzRsLTAuNTYsLTAuNTZsLTAuMTcsLTAuMDlsLTAuNSwtMC4wN2wtMC4xOSwwLjA0bC0wLjU4LDAuMzVsLTAuNzksMC4zM2wtMC42NSwwLjUxbC0wLjg1LC0wLjE2bC0wLjYzLC0wLjU5bC0wLjE0LC0wLjA3bC0wLjQxLC0wLjA4bC0wLjIsMC4wM2wtMC41OSwwLjMxbC0wLjA3LDAuMGwtMC4xLC0wLjYzbDAuMTEsLTAuODVsLTAuMjEsLTAuOThsLTAuMTEsLTAuMTdsLTAuODYsLTAuNjZsLTAuNDUsLTEuMzRsLTAuMSwtMS4zNlpcIiwgXCJuYW1lXCI6IFwiTWFsaVwifSwgXCJNTlwiOiB7XCJwYXRoXCI6IFwiTTY0MS4wNiwxNTAuNTlsMi40MSwtMC41M2w0Ljc2LC0yLjhsMy42NywtMS40OWwyLjA2LDAuOTZsMC4xMiwwLjAzbDIuNSwwLjA1bDEuNTksMS40NWwwLjE5LDAuMDhsMi40NywwLjEybDMuNTksMC44MWwwLjI3LC0wLjA3bDIuNDMsLTIuMjhsMC4wNiwtMC4zNmwtMC45MywtMS43N2wyLjMzLC0zLjFsMi42NiwxLjNsMi4yNiwwLjM5bDIuNzUsMC44bDAuNDQsMi4zbDAuMTksMC4yMmwzLjU2LDEuMzhsMC4xOCwwLjAxbDIuMzUsLTAuNmwzLjEsLTAuNDJsMi40LDAuNDFsMi4zNywxLjUybDEuNDksMS42M2wwLjIzLDAuMWwyLjI5LC0wLjAzbDMuMTMsMC41MmwwLjE1LC0wLjAxbDIuMjgsLTAuNzlsMy4yNywtMC41M2wwLjExLC0wLjA0bDMuNTYsLTIuMjNsMS4zMSwwLjMxbDEuMjYsMS4wNWwwLjIyLDAuMDdsMi40NSwtMC4yMmwtMC45OCwxLjk2bC0xLjc3LDMuMjFsLTAuMDEsMC4yOGwwLjY0LDEuMzFsMC4zNSwwLjE2bDEuMzUsLTAuMzhsMi40LDAuNDhsMC4yMiwtMC4wNGwxLjc4LC0xLjA5bDEuODIsMC45MmwyLjExLDIuMDdsLTAuMTcsMC42OGwtMS43OSwtMC4zMWwtMy43NCwwLjQ1bC0xLjg1LDAuOTZsLTEuNzgsMi4wMWwtMy43NCwxLjE4bC0yLjQ2LDEuNjFsLTIuNDUsLTAuNmwtMS40MiwtMC4yOGwtMC4zMSwwLjEzbC0xLjMxLDEuOTlsMC4wLDAuMzNsMC43OCwxLjE1bDAuMywwLjc0bC0xLjU4LDAuOTNsLTEuNzUsMS41OWwtMi44MywxLjAzbC0zLjc3LDAuMTJsLTQuMDUsMS4wNWwtMi44MSwxLjU0bC0wLjk1LC0wLjhsLTAuMTksLTAuMDdsLTIuOTYsMC4wbC0zLjY0LC0xLjhsLTIuNTUsLTAuNDhsLTMuMzgsMC40MWwtNS4xMywtMC42N2wtMi42NiwwLjA2bC0xLjM1LC0xLjY1bC0xLjEyLC0yLjc4bC0wLjIxLC0wLjE4bC0xLjUsLTAuMzNsLTIuOTgsLTEuODlsLTAuMTIsLTAuMDRsLTMuMzcsLTAuNDNsLTIuODQsLTAuNTFsLTAuNzUsLTEuMTNsMC45MywtMy41NGwtMC4wNCwtMC4yNGwtMS43MywtMi41NWwtMC4xNSwtMC4xMmwtMy41MiwtMS4xOGwtMS45OSwtMS42MWwtMC41NCwtMS44NVpcIiwgXCJuYW1lXCI6IFwiTW9uZ29saWFcIn0sIFwiTUtcIjoge1wicGF0aFwiOiBcIk00NzIuNzMsMTczLjg3bDAuMDgsMC4wMWwwLjMyLC0wLjI1bDAuMDgsLTAuNDRsMS4yOSwtMC40MWwxLjM3LC0wLjI4bDEuMDMsLTAuMDRsMS4wNiwwLjgybDAuMTQsMS41OWwtMC4yMiwwLjA0bC0wLjE3LDAuMTFsLTAuMzIsMC40bC0xLjIsLTAuMDVsLTAuMTgsMC4wNWwtMC45LDAuNjFsLTEuNDUsMC4yM2wtMC44NSwtMC41OWwtMC4zLC0xLjA5bDAuMjIsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk1hY2Vkb25pYVwifSwgXCJNV1wiOiB7XCJwYXRoXCI6IFwiTTUwNy4xOCwzMTMuODRsLTAuNjcsMS44NWwtMC4wMSwwLjE2bDAuNywzLjMxbDAuMzEsMC4yNGwwLjc1LC0wLjAzbDAuNzgsMC43MWwwLjk5LDEuNzVsMC4yLDMuMDNsLTAuOTEsMC40NWwtMC4xNCwwLjE1bC0wLjU5LDEuMzhsLTEuMjQsLTEuMjFsLTAuMTcsLTEuNjJsMC40OSwtMS4xMmwwLjAyLC0wLjE2bC0wLjE1LC0xLjAzbC0wLjEzLC0wLjIxbC0wLjk5LC0wLjY1bC0wLjI2LC0wLjAzbC0wLjUzLDAuMThsLTEuMzEsLTEuMTJsLTEuMTUsLTAuNTlsMC42NiwtMi4wNmwwLjc1LC0wLjg0bDAuMDcsLTAuMjdsLTAuNDcsLTIuMDRsMC40OCwtMS45NGwwLjQsLTAuNjVsMC4wMywtMC4yNGwtMC42NCwtMi4xNWwtMC4wOCwtMC4xM2wtMC40NCwtMC40MmwxLjM0LDAuMjZsMS4yNSwxLjczbDAuNjcsMy4zWlwiLCBcIm5hbWVcIjogXCJNYWxhd2lcIn0sIFwiTVJcIjoge1wicGF0aFwiOiBcIk0zOTAuNTQsMjQ3LjY2bC0xLjQ4LC0xLjU4bC0xLjUxLC0xLjg4bC0wLjEyLC0wLjA5bC0xLjY0LC0wLjY3bC0xLjE3LC0wLjc0bC0wLjE3LC0wLjA1bC0xLjQsMC4wM2wtMC4xMiwwLjAzbC0xLjE0LDAuNTJsLTEuMTUsLTAuMjFsLTAuMjYsMC4wOGwtMC40NCwwLjQzbC0wLjExLC0wLjcybDAuNjgsLTEuMjlsMC4zMSwtMi40M2wtMC4yOCwtMi42M2wtMC4yOSwtMS4yN2wwLjI0LC0xLjI0bC0wLjAzLC0wLjJsLTAuNjUsLTEuMjRsLTEuMTksLTEuMDVsMC4zMiwtMC41MWw5LjY0LDAuMDJsMC4zLC0wLjM0bC0wLjQ2LC0zLjcxbDAuNTEsLTEuMTJsMi4xNywtMC4yMmwwLjI3LC0wLjNsLTAuMDgsLTYuNWw3LjkxLDAuMTNsMC4zMSwtMC4zbDAuMDEsLTMuNWw4LjE3LDUuNjNsLTIuODksMC4wNGwtMC4yOSwwLjMzbDIuNDIsMjIuNTZsMC4xMiwwLjIxbDAuMjYsMC4xOWwtMC40MywxLjM4bC05LjgzLDAuMDRsLTAuMjUsMC4xM2wtMC4yNywwLjQxbC0wLjc3LC0wLjE0bC0wLjE1LDAuMDFsLTEuMywwLjQ3bC0xLjY0LC0wLjY3bC0wLjE0LC0wLjAybC0wLjc5LDAuMDZsLTAuMjcsMC4yMmwtMC4zOSwxLjM5bC0wLjUzLDAuMjlaXCIsIFwibmFtZVwiOiBcIk1hdXJpdGFuaWFcIn0sIFwiVUdcIjoge1wicGF0aFwiOiBcIk01MDAuNzQsMjg3LjE3bC0yLjg0LC0wLjAybC0wLjkyLDAuMzJsLTEuMzcsMC43MWwtMC4yOSwtMC4xMmwwLjAyLC0xLjZsMC41NCwtMC44OWwwLjA0LC0wLjEzbDAuMTQsLTEuOTZsMC40OSwtMS4wOWwwLjkxLC0xLjI0bDAuOTcsLTAuNjhsMC44LC0wLjg5bC0wLjEzLC0wLjQ5bC0wLjc5LC0wLjI3bDAuMTMsLTIuNTVsMC43OCwtMC41MmwxLjQ1LDAuNTFsMC4xOCwwLjAxbDEuOTcsLTAuNTdsMS43MiwwLjAxbDAuMTgsLTAuMDZsMS4yOSwtMC45N2wwLjk4LDEuNDRsMC4yOSwxLjI0bDEuMDUsMi43NWwtMC44NCwxLjY4bC0xLjk0LDIuNjZsLTAuMDYsMC4xOGwwLjAyLDIuMzZsLTQuOCwwLjE4WlwiLCBcIm5hbWVcIjogXCJVZ2FuZGFcIn0sIFwiTVlcIjoge1wicGF0aFwiOiBcIk03MTcuNiwyNzMuNTJsLTEuNTEsMC43bC0yLjEzLC0wLjQxbC0yLjg4LC0wLjBsLTAuMjksMC4yMWwtMC44NCwyLjc3bC0wLjksMC44MmwtMC4wOCwwLjEybC0xLjIzLDMuMzRsLTEuODEsMC40N2wtMi4yOSwtMC42OGwtMC4xNCwtMC4wMWwtMS4yLDAuMjJsLTAuMTQsMC4wN2wtMS4zNiwxLjE4bC0xLjQ3LC0wLjE3bC0wLjEyLDAuMDFsLTEuNDYsMC40NmwtMS41MSwtMS4yNWwtMC4yNCwtMC45N2wxLjI2LDAuNTlsMC4yLDAuMDJsMS45MywtMC40N2wwLjIyLC0wLjIybDAuNDcsLTEuOThsMC45LC0wLjRsMi45NywtMC41NGwwLjE3LC0wLjA5bDEuOCwtMS45OGwxLjAyLC0xLjMybDAuOSwxLjAzbDAuNDgsLTAuMDRsMC40MywtMC43bDEuMDIsMC4wN2wwLjMyLC0wLjI3bDAuMjUsLTIuNzJsMS44NCwtMS42N2wxLjIzLC0xLjg5bDAuNzMsLTAuMDFsMS4xMiwxLjExbDAuMSwwLjk5bDAuMTgsMC4yNGwxLjY2LDAuNzFsMS44NSwwLjY3bC0wLjA5LDAuNTFsLTEuNDUsMC4xMWwtMC4yNiwwLjRsMC4zNSwwLjk3Wk02NzMuNzgsMjY5LjUzbDAuMTcsMS4xNGwwLjM1LDAuMjVsMS42NSwtMC4zbDAuMTgsLTAuMTFsMC42OCwtMC44NmwwLjMxLDAuMTNsMS40MSwxLjQ1bDAuOTksMS41OWwwLjEzLDEuNTdsLTAuMjYsMS4wOWwwLjAsMC4xNWwwLjI0LDAuODRsMC4xOCwxLjQ2bDAuMTEsMC4ybDAuODIsMC42NGwwLjkyLDIuMDhsLTAuMDMsMC41MmwtMS40LDAuMTNsLTIuMjksLTEuNzlsLTIuODYsLTEuOTJsLTAuMjcsLTEuMTZsLTAuMDcsLTAuMTNsLTEuMzksLTEuNjFsLTAuMzMsLTEuOTlsLTAuMDUsLTAuMTJsLTAuODQsLTEuMjdsMC4yNiwtMS43MmwtMC4wMywtMC4xOGwtMC40NSwtMC44N2wwLjEzLC0wLjEzbDEuNzEsMC45MlpcIiwgXCJuYW1lXCI6IFwiTWFsYXlzaWFcIn0sIFwiTVhcIjoge1wicGF0aFwiOiBcIk0xMzMuNDEsMjEzLjgzbDAuNjEsMC4wOWwwLjI3LC0wLjA5bDAuOTMsLTEuMDFsMC4wOCwtMC4xOGwwLjA5LC0xLjIybC0wLjA5LC0wLjIzbC0xLjkzLC0xLjk0bC0xLjQ2LC0wLjc3bC0yLjk2LC01LjYybC0wLjg2LC0yLjFsMi40NCwtMC4xOGwyLjY4LC0wLjI1bC0wLjAzLDAuMDhsMC4xNywwLjRsMy43OSwxLjM1bDUuODEsMS45N2w2Ljk2LC0wLjAybDAuMywtMC4zbDAuMCwtMC44NGwzLjkxLDAuMGwwLjg3LDAuOTNsMS4yNywwLjg3bDEuNDQsMS4xN2wwLjc5LDEuMzdsMC42MiwxLjQ5bDAuMTIsMC4xNGwxLjM1LDAuODVsMi4wOCwwLjgybDAuMzUsLTAuMWwxLjQ5LC0yLjA0bDEuODEsLTAuMDVsMS42MywxLjAxbDEuMjEsMS44bDAuODYsMS41OGwxLjQ3LDEuNTVsMC41MywxLjgybDAuNzMsMS4zMmwwLjE0LDAuMTNsMS45OCwwLjg0bDEuNzgsMC41OWwwLjYxLC0wLjAzbC0wLjc4LDEuODlsLTAuNDUsMS45NmwtMC4xOSwzLjU4bC0wLjI0LDEuMjdsMC4wMSwwLjE0bDAuNDMsMS40M2wwLjc4LDEuMzFsMC40OSwxLjk4bDAuMDYsMC4xMmwxLjYzLDEuOWwwLjYxLDEuNTFsMC45OCwxLjI4bDAuMTYsMC4xMWwyLjU4LDAuNjdsMC45OCwxLjAybDAuMzEsMC4wOGwyLjE3LC0wLjcxbDEuOTEsLTAuMjZsMS44NywtMC40N2wxLjY3LC0wLjQ5bDEuNTksLTEuMDZsMC4xMSwtMC4xNGwwLjYsLTEuNTJsMC4yMiwtMi4yMWwwLjM1LC0wLjYybDEuNTgsLTAuNjRsMi41OSwtMC41OWwyLjE4LDAuMDlsMS40MywtMC4ybDAuMzksMC4zNmwtMC4wNywxLjAybC0xLjI4LDEuNDhsLTAuNjUsMS42OGwwLjA3LDAuMzJsMC4zMywwLjMybC0wLjc5LDIuNDlsLTAuMjgsLTAuM2wtMC4yNCwtMC4wOWwtMS4wLDAuMDhsLTAuMjQsMC4xNWwtMC43NCwxLjI4bC0wLjE5LC0wLjEzbC0wLjI4LC0wLjAzbC0wLjMsMC4xMmwtMC4xOSwwLjI5bDAuMCwwLjA2bC00LjM0LC0wLjAybC0wLjMsMC4zbC0wLjAsMS4xNmwtMC44MywwLjBsLTAuMjgsMC4xOWwwLjA4LDAuMzNsMC45MywwLjg2bDAuOSwwLjU4bDAuMjQsMC40OGwwLjE2LDAuMTVsMC4yLDAuMDhsLTAuMDMsMC4zOGwtMi45NCwwLjAxbC0wLjI2LDAuMTVsLTEuMjEsMi4wOWwwLjAyLDAuMzNsMC4yNSwwLjMzbC0wLjIxLDAuNDRsLTAuMDQsMC4yMmwtMi40MiwtMi4zNWwtMS4zNiwtMC44N2wtMi4wNCwtMC42N2wtMC4xMywtMC4wMWwtMS40LDAuMTlsLTIuMDcsMC45OGwtMS4xNCwwLjIzbC0xLjcyLC0wLjY2bC0xLjg1LC0wLjQ4bC0yLjMxLC0xLjE2bC0xLjkyLC0wLjM4bC0yLjc5LC0xLjE4bC0yLjA0LC0xLjJsLTAuNiwtMC42NmwtMC4xOSwtMC4xbC0xLjM3LC0wLjE1bC0yLjQ1LC0wLjc4bC0xLjA3LC0xLjE4bC0yLjYzLC0xLjQ0bC0xLjIsLTEuNTZsLTAuNDQsLTAuOTNsMC41LC0wLjE1bDAuMiwtMC4zOWwtMC4yLC0wLjU4bDAuNDYsLTAuNTVsMC4wNywtMC4xOWwwLjAxLC0wLjkxbC0wLjA2LC0wLjE4bC0wLjgxLC0xLjEzbC0wLjI1LC0xLjA4bC0wLjg2LC0xLjM2bC0yLjIxLC0yLjYzbC0yLjUzLC0yLjA5bC0xLjIsLTEuNjNsLTAuMTEsLTAuMDlsLTIuMDgsLTEuMDZsLTAuMzQsLTAuNDhsMC4zNSwtMS41M2wtMC4xNiwtMC4zNGwtMS4yNCwtMC42MWwtMS4zOSwtMS4yM2wtMC42LC0xLjgxbC0wLjI0LC0wLjJsLTEuMjUsLTAuMmwtMS4zOCwtMS4zNWwtMS4xMSwtMS4yNWwtMC4xLC0wLjc2bC0wLjA1LC0wLjEzbC0xLjMzLC0yLjA0bC0wLjg1LC0yLjAybDAuMDQsLTAuOTlsLTAuMTQsLTAuMjdsLTEuODEsLTEuMWwtMC4yLC0wLjA0bC0wLjc0LDAuMTFsLTEuMzQsLTAuNzJsLTAuNDIsMC4xNmwtMC40LDEuMTJsLTAuMCwwLjE5bDAuNDEsMS4zbDAuMjQsMi4wNGwwLjA2LDAuMTVsMC44OCwxLjE2bDEuODQsMS44NmwwLjQsMC42MWwwLjEyLDAuMWwwLjI3LDAuMTRsMC4yOSwwLjgybDAuMzEsMC4ybDAuMiwtMC4wMmwwLjQzLDEuNTFsMC4wOSwwLjE0bDAuNzIsMC42NWwwLjUxLDAuOTFsMS41OCwxLjRsMC44LDIuNDJsMC43NywxLjIzbDAuNjYsMS4xOWwwLjEzLDEuMzRsMC4yOCwwLjI3bDEuMDgsMC4wOGwwLjkyLDEuMWwwLjgzLDEuMDhsLTAuMDMsMC4yNGwtMC44OCwwLjgxbC0wLjEzLC0wLjBsLTAuNTksLTEuNDJsLTAuMDcsLTAuMTFsLTEuNjcsLTEuNTNsLTEuODEsLTEuMjhsLTEuMTUsLTAuNjFsMC4wNywtMS44NWwtMC4zOCwtMS40NWwtMC4xMiwtMC4xN2wtMi45MSwtMi4wM2wtMC4zOSwwLjA0bC0wLjExLDAuMTFsLTAuNDIsLTAuNDZsLTAuMTEsLTAuMDhsLTEuNDksLTAuNjNsLTEuMDksLTEuMTZaXCIsIFwibmFtZVwiOiBcIk1leGljb1wifSwgXCJWVVwiOiB7XCJwYXRoXCI6IFwiTTgzOS45MiwzMjUuNjZsMC43OCwwLjczbC0wLjE4LDAuMDdsLTAuNiwtMC44Wk04MzkuMTMsMzIyLjc0bDAuMjcsMS4zNmwtMC4xMywtMC4wNmwtMC4yMSwtMC4wMmwtMC4yOSwwLjA4bC0wLjIyLC0wLjQzbC0wLjAzLC0xLjMybDAuNjEsMC40WlwiLCBcIm5hbWVcIjogXCJWYW51YXR1XCJ9LCBcIkZSXCI6IHtcInBhdGhcIjogXCJNNDQ0LjU4LDE3Mi42M2wtMC42OCwxLjkybC0wLjcyLC0wLjM4bC0wLjUxLC0xLjc5bDAuNDMsLTAuOTVsMS4xNSwtMC44M2wwLjMzLDIuMDRaTTQyOS43MSwxNDcuMDNsMS43NywxLjU3bDAuMjYsMC4wN2wxLjE2LC0wLjIzbDIuMTIsMS40NGwwLjU2LDAuMjhsMC4xNiwwLjAzbDAuNjEsLTAuMDZsMS4wOSwwLjc4bDAuMTMsMC4wNWwzLjE4LDAuNTNsLTEuMDksMS45NGwtMC4zLDIuMTZsLTAuNDgsMC4zOGwtMS4wLC0wLjI2bC0wLjM3LDAuMzJsMC4wNywwLjY2bC0xLjczLDEuNjhsLTAuMDksMC4yMWwtMC4wNCwxLjQybDAuNDEsMC4yOWwwLjk2LC0wLjRsMC42NywxLjA3bC0wLjA5LDAuNzhsMC4wNCwwLjE5bDAuNjEsMC45N2wtMC43MSwwLjc4bC0wLjA3LDAuMjhsMC42NSwyLjM5bDAuMjEsMC4yMWwxLjA5LDAuMzFsLTAuMiwwLjk1bC0yLjA4LDEuNThsLTQuODEsLTAuOGwtMC4xMywwLjAxbC0zLjY1LDAuOTlsLTAuMjIsMC4yNGwtMC4yNSwxLjZsLTIuNTksMC4zNWwtMi43NCwtMS4zM2wtMC4zMSwwLjAzbC0wLjc5LDAuNTdsLTQuMzgsLTEuMzFsLTAuNzksLTAuOTRsMS4xNiwtMS42NGwwLjA1LC0wLjE1bDAuNDgsLTYuMTdsLTAuMDYsLTAuMjFsLTIuNTgsLTMuM2wtMS44OSwtMS42NWwtMC4xMSwtMC4wNmwtMy42NCwtMS4xN2wtMC4yLC0xLjg4bDIuOTIsLTAuNjNsNC4xNCwwLjgybDAuMzUsLTAuMzZsLTAuNjUsLTMuMGwxLjc3LDEuMDVsMC4yNywwLjAybDUuODMsLTIuNTRsMC4xNywtMC4xOWwwLjcxLC0yLjU0bDEuNzUsLTAuNTNsMC4yNywwLjg4bDAuMjcsMC4yMWwxLjA0LDAuMDVsMS4wOCwxLjIzWk0yODkuMSwyNzguNDVsLTAuODUsMC44NGwtMC44OCwwLjEzbC0wLjI1LC0wLjUxbC0wLjIxLC0wLjE2bC0wLjU2LC0wLjFsLTAuMjUsMC4wN2wtMC42MywwLjU1bC0wLjYyLC0wLjI5bDAuNSwtMC44OGwwLjIxLC0xLjExbDAuNDIsLTEuMDVsLTAuMDMsLTAuMjhsLTAuOTMsLTEuNDJsLTAuMTgsLTEuNTRsMS4xMywtMS44N2wyLjQyLDAuNzhsMi41NSwyLjA0bDAuMzMsMC44MWwtMS40LDIuMTZsLTAuNzcsMS44NFpcIiwgXCJuYW1lXCI6IFwiRnJhbmNlXCJ9LCBcIkZJXCI6IHtcInBhdGhcIjogXCJNNDkyLjI2LDc2LjQybC0wLjM4LDMuMTJsMC4xMiwwLjI4bDMuNiwyLjY5bC0yLjE0LDIuOTZsLTAuMDEsMC4zM2wyLjgzLDQuNjFsLTEuNjEsMy4zNmwwLjAzLDAuMzFsMi4xNSwyLjg3bC0wLjk2LDIuNDRsMC4xLDAuMzVsMy41MSwyLjU1bC0wLjgxLDEuNzJsLTIuMjgsMi4xOWwtNS4yOCw0Ljc5bC00LjUxLDAuMzFsLTQuMzksMS4zN2wtMy44NywwLjc1bC0xLjM0LC0xLjg5bC0wLjExLC0wLjA5bC0yLjIzLC0xLjE0bDAuNTMsLTMuNTRsLTAuMDEsLTAuMTRsLTEuMTcsLTMuMzdsMS4xMiwtMi4xM2wyLjIzLC0yLjQ0bDUuNjksLTQuMzNsMS42NSwtMC44NGwwLjE2LC0wLjMxbC0wLjI2LC0xLjczbC0wLjE1LC0wLjIybC0zLjQsLTEuOTFsLTAuNzcsLTEuNDdsLTAuMDcsLTYuNDVsLTAuMTIsLTAuMjRsLTMuOTEsLTIuOTRsLTMuMCwtMS45MmwwLjk3LC0wLjc2bDIuNiwyLjE3bDAuMjEsMC4wN2wzLjIsLTAuMjFsMi42MywxLjAzbDAuMywtMC4wNWwyLjM5LC0xLjk0bDAuMDksLTAuMTNsMS4xOCwtMy4xMmwzLjYzLC0xLjQybDIuODcsMS41OWwtMC45OCwyLjg3WlwiLCBcIm5hbWVcIjogXCJGaW5sYW5kXCJ9LCBcIkZKXCI6IHtcInBhdGhcIjogXCJNODY5Ljk4LDMyNy4wN2wtMS4zMSwwLjQ0bC0wLjE0LC0wLjQxbDAuOTYsLTAuNDFsMC44NSwtMC4xN2wxLjQzLC0wLjc4bC0wLjE2LDAuNjVsLTEuNjQsMC42N1pNODY3LjU4LDMyOS4xMmwwLjU0LDAuNDdsLTAuMzEsMS4wbC0xLjMyLDAuM2wtMS4xMywtMC4yNmwtMC4xNywtMC43OGwwLjcyLC0wLjY2bDAuOTgsMC4yN2wwLjI1LC0wLjA0bDAuNDMsLTAuMjlaXCIsIFwibmFtZVwiOiBcIkZpamlcIn0sIFwiRktcIjoge1wicGF0aFwiOiBcIk0yNjguMTUsNDI3Ljg5bDIuNiwtMS43M2wxLjk4LDAuNzdsMC4zMSwtMC4wNWwxLjMyLC0xLjE3bDEuNTgsMS4xOGwtMC41NCwwLjg0bC0zLjEsMC45MmwtMS4wLC0xLjA0bC0wLjM5LC0wLjA0bC0xLjksMS4zNWwtMC44NiwtMS4wNFpcIiwgXCJuYW1lXCI6IFwiRmFsa2xhbmQgSXNsYW5kc1wifSwgXCJOSVwiOiB7XCJwYXRoXCI6IFwiTTIwMi4xLDI1Mi42bDAuMjMsLTAuMGwwLjEyLC0wLjExbDAuNjgsLTAuMDlsMC4yMiwtMC4xNWwwLjIzLC0wLjQzbDAuMiwtMC4wMWwwLjI4LC0wLjMxbC0wLjA0LC0wLjk3bDAuMjksLTAuMDNsMC41LDAuMDJsMC4yNSwtMC4xMWwwLjM3LC0wLjQ2bDAuNTEsMC4zNWwwLjQsLTAuMDZsMC4yMywtMC4yOGwwLjQ1LC0wLjI5bDAuODcsLTAuN2wwLjExLC0wLjIxbDAuMDIsLTAuMjZsMC4yMywtMC4xMmwwLjI1LC0wLjQ4bDAuMjksMC4yN2wwLjE0LDAuMDdsMC41LDAuMTJsMC4yMiwtMC4wM2wwLjQ4LC0wLjI4bDAuNjYsLTAuMDJsMC44NywtMC4zM2wwLjM2LC0wLjMybDAuMjEsMC4wMWwtMC4xMSwwLjQ4bDAuMCwwLjE0bDAuMjIsMC44bC0wLjU0LDAuODVsLTAuMjcsMS4wM2wtMC4wOSwxLjE4bDAuMTQsMC43MmwwLjA1LDAuOTVsLTAuMjQsMC4xNWwtMC4xMywwLjE5bC0wLjIzLDEuMDlsMC4wLDAuMTRsMC4xNCwwLjUzbC0wLjQyLDAuNTNsLTAuMDYsMC4yNGwwLjEyLDAuNjlsMC4wOCwwLjE1bDAuMTgsMC4xOWwtMC4yNiwwLjIzbC0wLjQ5LC0wLjExbC0wLjM1LC0wLjQ0bC0wLjE2LC0wLjFsLTAuNzksLTAuMjFsLTAuMjMsMC4wM2wtMC40NSwwLjI2bC0xLjUxLC0wLjYybC0wLjMxLDAuMDVsLTAuMTcsMC4xNWwtMS44MSwtMS42MmwtMC42LC0wLjlsLTEuMDQsLTAuNzlsLTAuNzcsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk5pY2FyYWd1YVwifSwgXCJOTFwiOiB7XCJwYXRoXCI6IFwiTTQzNi4yMiwxMzYuNjVsMS44MiwwLjA4bDAuMzYsMC44OWwtMC42LDIuOTZsLTAuNTMsMS4wNmwtMS4zMiwwLjBsLTAuMywwLjM0bDAuMzUsMi44OWwtMC44MywtMC40N2wtMS41NiwtMS40M2wtMC4yOSwtMC4wN2wtMi4yNiwwLjY3bC0xLjAyLC0wLjE1bDAuNjgsLTAuNDhsMC4xLC0wLjEybDIuMTQsLTQuODRsMy4yNSwtMS4zNVpcIiwgXCJuYW1lXCI6IFwiTmV0aGVybGFuZHNcIn0sIFwiTk9cIjoge1wicGF0aFwiOiBcIk00OTEuNDUsNjcuMzFsNy4wNiwzLjBsLTIuNTIsMC45NGwtMC4xMSwwLjQ5bDIuNDMsMi40OWwtMy44MiwxLjU5bC0xLjQ4LDAuM2wwLjg5LC0yLjYxbC0wLjE0LC0wLjM2bC0zLjIxLC0xLjc4bC0wLjI1LC0wLjAybC0zLjg5LDEuNTJsLTAuMTcsMC4xN2wtMS4yLDMuMTdsLTIuMTksMS43OGwtMi41MywtMC45OWwtMC4xMywtMC4wMmwtMy4xNSwwLjIxbC0yLjY5LC0yLjI1bC0wLjM4LC0wLjAxbC0xLjQzLDEuMTFsLTEuNDcsMC4xN2wtMC4yNiwwLjI2bC0wLjMzLDIuNTdsLTQuNDIsLTAuNjVsLTAuMzMsMC4yMmwtMC42LDIuMTlsLTIuMTcsLTAuMDFsLTAuMjcsMC4xNmwtNC4xNSw3LjY4bC0zLjg4LDUuNzZsLTAuMCwwLjMzbDAuODEsMS4yM2wtMC43LDEuMjdsLTIuMywtMC4wNmwtMC4yOCwwLjE4bC0xLjYzLDMuNzJsLTAuMDIsMC4xM2wwLjE1LDUuMTdsMC4wNywwLjE4bDEuNTEsMS44NGwtMC43OSw0LjI0bC0yLjA0LDIuNWwtMC45MiwxLjc1bC0xLjM5LC0xLjg4bC0wLjQ0LC0wLjA1bC00Ljg5LDQuMjFsLTMuMTYsMC44MWwtMy4yNCwtMS43NGwtMC44NiwtMy44MmwtMC43OCwtOC42bDIuMTgsLTIuMzZsNi41NiwtMy4yOGw1LjAsLTQuMTZsNC42MywtNS43NGw1Ljk5LC04LjA5bDQuMTcsLTMuMjNsNi44NCwtNS40OWw1LjM5LC0xLjkybDQuMDYsMC4yNGwwLjIzLC0wLjA5bDMuNzIsLTMuNjdsNC41MSwwLjE5bDQuNCwtMC44OVpNNDg0LjU4LDE5Ljk1bDQuNDIsMS44MmwtMy4yNSwyLjY4bC03LjE0LDAuNjVsLTcuMTYsLTAuOTFsLTAuMzksLTEuMzdsLTAuMjgsLTAuMjJsLTMuNDgsLTAuMWwtMi4yNSwtMi4xNWw3LjA5LC0xLjQ4bDMuNTUsMS4zNmwwLjI4LC0wLjAzbDIuNDIsLTEuNjZsNi4xOCwxLjQxWk00ODEuOTksMzMuOTJsLTQuNzMsMS44NWwtMy43NiwtMS4wNmwxLjI3LC0xLjAybDAuMDQsLTAuNDNsLTEuMTgsLTEuMzVsNC40NiwtMC45NGwwLjg5LDEuODNsMC4xNywwLjE1bDIuODMsMC45NlpNNDY2LjUsMjMuOTVsNy42NCwzLjg3bC01LjYzLDEuOTRsLTAuMTksMC4xOWwtMS4zNSwzLjg4bC0yLjA4LDAuOTZsLTAuMTYsMC4xOWwtMS4xNCw0LjE4bC0yLjcxLDAuMThsLTQuOTQsLTIuOTVsMS45NSwtMS42M2wtMC4wOCwtMC41MWwtMy43LC0xLjU0bC00Ljc5LC00LjU0bC0xLjc4LC00LjAxbDYuMjksLTEuODhsMS4yNSwxLjgxbDAuMjUsMC4xM2wzLjU3LC0wLjA4bDAuMjYsLTAuMTdsMC44NywtMS43OWwzLjQxLC0wLjE4bDMuMDgsMS45NFpcIiwgXCJuYW1lXCI6IFwiTm9yd2F5XCJ9LCBcIk5BXCI6IHtcInBhdGhcIjogXCJNNDYxLjg4LDM1Ny45OGwtMS42MSwtMS43N2wtMC45NCwtMS45bC0wLjU0LC0yLjU4bC0wLjYyLC0xLjk1bC0wLjgzLC00LjA1bC0wLjA2LC0zLjEzbC0wLjMzLC0xLjVsLTAuMDcsLTAuMTRsLTAuOTUsLTEuMDZsLTEuMjcsLTIuMTJsLTEuMywtMy4xbC0wLjU5LC0xLjcxbC0xLjk4LC0yLjQ2bC0wLjEzLC0xLjY3bDAuOTksLTAuNGwxLjQ0LC0wLjQybDEuNDgsMC4wN2wxLjQyLDEuMTFsMC4zMSwwLjAzbDAuMzIsLTAuMTVsOS45OSwtMC4xMWwxLjY2LDEuMThsMC4xNiwwLjA2bDYuMDYsMC4zN2w0LjY5LC0xLjA2bDIuMDEsLTAuNTdsMS41LDAuMTRsMC42MywwLjM3bC0xLjAsMC40MWwtMC43LDAuMDFsLTAuMTYsMC4wNWwtMS4zOCwwLjg4bC0wLjc5LC0wLjg4bC0wLjI5LC0wLjA5bC0zLjgzLDAuOWwtMS44NCwwLjA4bC0wLjI5LDAuM2wtMC4wNyw4Ljk5bC0yLjE4LDAuMDhsLTAuMjksMC4zbC0wLjAsMTcuNDdsLTIuMDQsMS4yN2wtMS4yMSwwLjE4bC0xLjUxLC0wLjQ5bC0wLjk5LC0wLjE4bC0wLjM2LC0xLjBsLTAuMSwtMC4xNGwtMC45OSwtMC43NGwtMC40LDAuMDRsLTAuOTgsMS4wOVpcIiwgXCJuYW1lXCI6IFwiTmFtaWJpYVwifSwgXCJOQ1wiOiB7XCJwYXRoXCI6IFwiTTgzNS44NywzMzguNjhsMi4wNiwxLjYzbDEuMDEsMC45NGwtMC40OSwwLjMybC0xLjIxLC0wLjYybC0xLjc2LC0xLjE2bC0xLjU4LC0xLjM2bC0xLjYxLC0xLjc5bC0wLjE2LC0wLjQxbDAuNTQsMC4wMmwxLjMyLDAuODNsMS4wOCwwLjg3bDAuNzksMC43M1pcIiwgXCJuYW1lXCI6IFwiTmV3IENhbGVkb25pYVwifSwgXCJORVwiOiB7XCJwYXRoXCI6IFwiTTQyNi42NywyNTQuMTdsMC4wMywtMS4wNGwtMC4yNCwtMC4zbC0yLjY2LC0wLjUzbC0wLjA2LC0xLjBsLTAuMDcsLTAuMTdsLTEuMzcsLTEuNjJsLTAuMywtMS4wNGwwLjE1LC0wLjk0bDEuMzcsLTAuMDlsMC4xOSwtMC4wOWwwLjg1LC0wLjgzbDMuMzQsLTAuMjJsMi4yMiwtMC40MWwwLjI0LC0wLjI2bDAuMiwtMS41bDEuMzIsLTEuNjVsMC4wNywtMC4xOWwtMC4wMSwtNS43NGwzLjQsLTEuMTNsNy4yNCwtNS4xMmw4LjQ2LC00Ljk1bDMuNzYsMS4wOGwxLjM1LDEuMzlsMC4zNiwwLjA1bDEuMzksLTAuNzdsMC41NSwzLjY2bDAuMTIsMC4ybDAuODIsMC42bDAuMDMsMC42OWwwLjEsMC4yMWwwLjg3LDAuNzRsLTAuNDcsMC45OWwtMC45Niw1LjI2bC0wLjEzLDMuMjVsLTMuMDgsMi4zNGwtMC4xLDAuMTVsLTEuMDgsMy4zN2wwLjA4LDAuMzFsMC45NCwwLjg2bC0wLjAxLDEuNTFsMC4yOSwwLjNsMS4yNSwwLjA1bC0wLjE0LDAuNjZsLTAuNTEsMC4xMWwtMC4yNCwwLjI2bC0wLjA2LDAuNTdsLTAuMDQsMC4wbC0xLjU5LC0yLjYybC0wLjIxLC0wLjE0bC0wLjU5LC0wLjFsLTAuMjMsMC4wNWwtMS44MywxLjMzbC0xLjc5LC0wLjY4bC0xLjQyLC0wLjE3bC0wLjE3LDAuMDNsLTAuNjUsMC4zMmwtMS4zOSwtMC4wN2wtMC4xOSwwLjA2bC0xLjQsMS4wM2wtMS4xMiwwLjA1bC0yLjk3LC0xLjI5bC0wLjI2LDAuMDFsLTEuMTIsMC41OWwtMS4wOCwtMC4wNGwtMC44NSwtMC44OGwtMC4xMSwtMC4wN2wtMi41MSwtMC45NWwtMC4xNCwtMC4wMmwtMi42OSwwLjNsLTAuMTYsMC4wN2wtMC42NSwwLjU1bC0wLjEsMC4xNmwtMC4zNCwxLjQxbC0wLjY5LDAuOThsLTAuMDUsMC4xNWwtMC4xMywxLjcybC0xLjQ3LC0xLjEzbC0wLjE4LC0wLjA2bC0wLjksMC4wMWwtMC4yLDAuMDhsLTAuMzIsMC4yOFpcIiwgXCJuYW1lXCI6IFwiTmlnZXJcIn0sIFwiTkdcIjoge1wicGF0aFwiOiBcIk00NDIuMCwyNzIuN2wtMi40LDAuODNsLTAuODgsLTAuMTJsLTAuMTksMC4wNGwtMC44OSwwLjUybC0xLjc4LC0wLjA1bC0xLjIzLC0xLjQ0bC0wLjg4LC0xLjg3bC0xLjc3LC0xLjY2bC0wLjIxLC0wLjA4bC0zLjc4LDAuMDNsMC4xMywtMy43NWwtMC4wNiwtMS41OGwwLjQ0LC0xLjQ3bDAuNzQsLTAuNzVsMS4yMSwtMS41NmwwLjA0LC0wLjI5bC0wLjIyLC0wLjU2bDAuNDQsLTAuOWwwLjAxLC0wLjI0bC0wLjU0LC0xLjQ0bDAuMjYsLTIuOTdsMC43MiwtMS4wNmwwLjMzLC0xLjM3bDAuNTEsLTAuNDNsMi41MywtMC4yOGwyLjM4LDAuOWwwLjg5LDAuOTFsMC4yLDAuMDlsMS4yOCwwLjA0bDAuMTUsLTAuMDNsMS4wNiwtMC41NmwyLjksMS4yNmwwLjEzLDAuMDJsMS4yOCwtMC4wNmwwLjE2LC0wLjA2bDEuMzksLTEuMDJsMS4zNiwwLjA3bDAuMTUsLTAuMDNsMC42NCwtMC4zMmwxLjIyLDAuMTNsMS45LDAuNzNsMC4yOCwtMC4wNGwxLjg2LC0xLjM1bDAuMzMsMC4wNmwxLjYyLDIuNjdsMC4yOSwwLjE0bDAuMzIsLTAuMDRsMC43MywwLjc0bC0wLjE5LDAuMzdsLTAuMTIsMC43NGwtMi4wMywxLjg5bC0wLjA3LDAuMTFsLTAuNjYsMS42MmwtMC4zNSwxLjI4bC0wLjQ4LDAuNTFsLTAuMDcsMC4xMmwtMC40OCwxLjY3bC0xLjI2LDAuOThsLTAuMSwwLjE1bC0wLjM4LDEuMjRsLTAuNTgsMS4wN2wtMC4yLDAuOTFsLTEuNDMsMC43bC0xLjI2LC0wLjkzbC0wLjE5LC0wLjA2bC0wLjk1LDAuMDRsLTAuMiwwLjA5bC0xLjQxLDEuMzlsLTAuNjEsMC4wMmwtMC4yNiwwLjE3bC0xLjE5LDIuNDJsLTAuNjEsMS42N1pcIiwgXCJuYW1lXCI6IFwiTmlnZXJpYVwifSwgXCJOWlwiOiB7XCJwYXRoXCI6IFwiTTg1Ny45LDM3OS42MmwxLjg1LDMuMWwwLjMzLDAuMTRsMC4yMiwtMC4yOGwwLjA0LC0xLjQxbDAuNTcsMC40bDAuMzUsMi4wNmwwLjE3LDAuMjJsMi4wMiwwLjk0bDEuNzgsMC4yNmwwLjIyLC0wLjA2bDEuMzEsLTEuMDFsMC44NCwwLjIybC0wLjUzLDIuMjdsLTAuNjcsMS41bC0xLjcxLC0wLjA1bC0wLjI1LDAuMTJsLTAuNjcsMC44OWwtMC4wNSwwLjIzbDAuMjEsMS4xNWwtMC4zMSwwLjQ2bC0yLjE1LDMuNTdsLTEuNiwwLjk5bC0wLjI4LC0wLjUxbC0wLjE1LC0wLjEzbC0wLjcyLC0wLjNsMS4yNywtMi4xNWwwLjAxLC0wLjI5bC0wLjgyLC0xLjYzbC0wLjE1LC0wLjE0bC0yLjUsLTEuMDlsMC4wNSwtMC42OWwxLjY3LC0wLjk0bDAuMTUsLTAuMjFsMC40MiwtMi4yNGwtMC4xMSwtMS45NWwtMC4wMywtMC4xMmwtMC45NywtMS44NWwwLjA1LC0wLjQxbC0wLjA5LC0wLjI1bC0xLjE4LC0xLjE3bC0xLjk0LC0yLjQ5bC0wLjg2LC0xLjY0bDAuMzgsLTAuMDlsMS4yNCwxLjQzbDAuMTIsMC4wOGwxLjgxLDAuNjhsMC42NywyLjM5Wk04NTMuOTMsMzkzLjU1bDAuNTcsMS4yNGwwLjQ0LDAuMTJsMS41MSwtMS4wM2wwLjUyLDAuOTFsMC4wLDEuMDlsLTAuODgsMS4zMWwtMS42MiwyLjJsLTEuMjYsMS4ybC0wLjA1LDAuMzhsMC42NCwxLjAybC0xLjQsMC4wM2wtMC4xNCwwLjA0bC0yLjE0LDEuMTZsLTAuMTQsMC4xN2wtMC42NywyLjBsLTEuMzgsMy4wNmwtMy4wNywyLjE5bC0yLjEyLC0wLjA2bC0xLjU1LC0wLjk5bC0wLjE0LC0wLjA1bC0yLjUzLC0wLjJsLTAuMzEsLTAuODRsMS4yNSwtMi4xNWwzLjA3LC0yLjk3bDEuNjIsLTAuNTlsMS44MSwtMS4xN2wyLjE4LC0xLjYzbDEuNTUsLTEuNjVsMS4wOCwtMi4xOGwwLjksLTAuNzJsMC4xMSwtMC4xN2wwLjM1LC0xLjU2bDEuMzcsLTEuMDdsMC40LDAuOTFaXCIsIFwibmFtZVwiOiBcIk5ldyBaZWFsYW5kXCJ9LCBcIk5QXCI6IHtcInBhdGhcIjogXCJNNjQxLjI2LDIxMy41M2wtMC4xNCwwLjk1bDAuMzIsMS42NGwtMC4yMSwwLjc4bC0xLjgzLDAuMDRsLTIuOTgsLTAuNjJsLTEuODYsLTAuMjVsLTEuMzcsLTEuM2wtMC4xOCwtMC4wOGwtMy4zOCwtMC4zNGwtMy4yMSwtMS40OWwtMi4zOCwtMS4zNGwtMi4xNiwtMC45MmwwLjg0LC0yLjJsMS41MSwtMS4xOGwwLjg5LC0wLjU3bDEuODMsMC43N2wyLjUsMS43NmwxLjM5LDAuNDFsMC43OCwxLjIxbDAuMTcsMC4xM2wxLjkxLDAuNTNsMi4wLDEuMTdsMi45MiwwLjY2bDIuNjMsMC4yNFpcIiwgXCJuYW1lXCI6IFwiTmVwYWxcIn0sIFwiQ0lcIjoge1wicGF0aFwiOiBcIk00MTMuNTMsMjcyLjA4bC0wLjgzLDAuMDJsLTEuNzksLTAuNDlsLTEuNjQsMC4wM2wtMy4wNCwwLjQ2bC0xLjczLDAuNzJsLTIuNCwwLjg5bC0wLjEyLC0wLjAybDAuMTYsLTEuN2wwLjE5LC0wLjI1bDAuMDYsLTAuMmwtMC4wOCwtMC45OWwtMC4wOSwtMC4xOWwtMS4wNiwtMS4wNWwtMC4xNSwtMC4wOGwtMC43MSwtMC4xNWwtMC41MSwtMC40OGwwLjQ1LC0wLjkybDAuMDIsLTAuMTlsLTAuMjQsLTEuMTZsMC4wNywtMC40M2wwLjE0LC0wLjBsMC4zLC0wLjI2bDAuMTUsLTEuMWwtMC4wMiwtMC4xNWwtMC4xMywtMC4zNGwwLjA5LC0wLjEzbDAuODMsLTAuMjdsMC4xOSwtMC4zN2wtMC42MiwtMi4wMmwtMC41NSwtMS4wbDAuMTQsLTAuNTlsMC4zNSwtMC4xNGwwLjI0LC0wLjE2bDAuNTMsMC4yOWwwLjE0LDAuMDRsMS45MywwLjAybDAuMjYsLTAuMTRsMC4zNiwtMC41OGwwLjM5LDAuMDFsMC40MywtMC4xN2wwLjI4LDAuNzlsMC40MywwLjE2bDAuNTYsLTAuMzFsMC44OSwtMC4zMmwwLjkyLDAuNDVsMC4zOSwwLjc1bDAuMTQsMC4xM2wxLjEzLDAuNTNsMC4zLC0wLjAzbDAuODEsLTAuNTlsMS4wMiwtMC4wOGwxLjQ5LDAuNTdsMC42MiwzLjMzbC0xLjAzLDIuMDlsLTAuNjUsMi44NGwwLjAyLDAuMmwxLjA1LDIuMDhsLTAuMDcsMC42NFpcIiwgXCJuYW1lXCI6IFwiSXZvcnkgQ29hc3RcIn0sIFwiQ0hcIjoge1wicGF0aFwiOiBcIk00NDQuNzEsMTU2LjI3bDAuMDUsMC4zbC0wLjM0LDAuNjlsMC4xMywwLjRsMS4xMywwLjU4bDEuMDcsMC4xbC0wLjEyLDAuODFsLTAuODcsMC40MmwtMS43NSwtMC4zN2wtMC4zNCwwLjE4bC0wLjQ3LDEuMWwtMC44NiwwLjA3bC0wLjMzLC0wLjM4bC0wLjQxLC0wLjA0bC0xLjM0LDEuMDFsLTEuMDIsMC4xM2wtMC45MywtMC41OGwtMC44MiwtMS4zMmwtMC4zNywtMC4xMmwtMC43NywwLjMybDAuMDIsLTAuODRsMS43NCwtMS42OWwwLjA5LC0wLjI1bC0wLjA0LC0wLjM4bDAuNzMsMC4xOWwwLjI2LC0wLjA2bDAuNiwtMC40OGwyLjAyLDAuMDJsMC4yNCwtMC4xMmwwLjM4LC0wLjUxbDIuMzEsMC44NFpcIiwgXCJuYW1lXCI6IFwiU3dpdHplcmxhbmRcIn0sIFwiQ09cIjoge1wicGF0aFwiOiBcIk0yMzIuMjQsMjg0Ljk1bC0wLjk0LC0wLjUybC0xLjIyLC0wLjgybC0wLjMxLC0wLjAxbC0wLjYyLDAuMzVsLTEuODgsLTAuMzFsLTAuNTQsLTAuOTVsLTAuMjksLTAuMTVsLTAuMzcsMC4wM2wtMi4zNCwtMS4zM2wtMC4xNSwtMC4zNWwwLjU3LC0wLjExbDAuMjQsLTAuMzJsLTAuMSwtMS4xNWwwLjQ2LC0wLjcxbDEuMTEsLTAuMTVsMC4yMSwtMC4xM2wxLjA1LC0xLjU3bDAuOTUsLTEuMzFsLTAuMDgsLTAuNDNsLTAuNzMsLTAuNDdsMC40LC0xLjI0bDAuMDEsLTAuMTZsLTAuNTMsLTIuMTVsMC40NCwtMC41NGwwLjA2LC0wLjI0bC0wLjQsLTIuMTNsLTAuMDYsLTAuMTNsLTAuOTMsLTEuMjJsMC4yMSwtMC44bDAuNTIsMC4xMmwwLjMyLC0wLjEzbDAuNDcsLTAuNzVsMC4wMywtMC4yN2wtMC41MiwtMS4zMmwwLjA5LC0wLjExbDEuMTQsMC4wN2wwLjIyLC0wLjA4bDEuODIsLTEuNzFsMC45NiwtMC4yNWwwLjIyLC0wLjI4bDAuMDIsLTAuODFsMC40MywtMi4wMWwxLjI4LC0xLjA0bDEuNDgsLTAuMDVsMC4yNywtMC4xOWwwLjEyLC0wLjMxbDEuNzMsMC4xOWwwLjIsLTAuMDVsMS45NiwtMS4yOGwwLjk3LC0wLjU2bDEuMTYsLTEuMTZsMC42NCwwLjExbDAuNDMsMC40NGwtMC4zMSwwLjU1bC0xLjQ5LDAuMzlsLTAuMTksMC4xNmwtMC42LDEuMmwtMC45NywwLjc0bC0wLjczLDAuOTRsLTAuMDYsMC4xM2wtMC4zLDEuNzZsLTAuNjgsMS40NGwwLjIzLDAuNDNsMS4xLDAuMTRsMC4yNywwLjk3bDAuMDgsMC4xM2wwLjQ5LDAuNDlsMC4xNywwLjg1bC0wLjI3LDAuODZsLTAuMDEsMC4xNGwwLjA5LDAuNTNsMC4yLDAuMjNsMC41MiwwLjE4bDAuNTQsMC43OWwwLjI3LDAuMTNsMy4xOCwtMC4yNGwxLjMxLDAuMjlsMS43LDIuMDhsMC4zMSwwLjFsMC45NiwtMC4yNmwxLjc1LDAuMTNsMS40MSwtMC4yN2wwLjU2LDAuMjdsLTAuMzYsMS4wN2wtMC41NCwwLjgxbC0wLjA1LDAuMTNsLTAuMiwxLjhsMC41MSwxLjc5bDAuMDcsMC4xMmwwLjY1LDAuNjhsMC4wNSwwLjMybC0xLjE2LDEuMTRsMC4wNSwwLjQ3bDAuODYsMC41MmwwLjYsMC43OWwwLjMxLDEuMDFsLTAuNywtMC44MWwtMC40NCwtMC4wMWwtMC43NCwwLjc3bC00Ljc1LC0wLjA1bC0wLjMsMC4zMWwwLjAzLDEuNTdsMC4yNSwwLjI5bDEuMiwwLjIxbC0wLjAyLDAuMjRsLTAuMSwtMC4wNWwtMC4yMiwtMC4wMmwtMS40MSwwLjQxbC0wLjIyLDAuMjlsLTAuMDEsMS44MmwwLjExLDAuMjNsMS4wNCwwLjg1bDAuMzUsMS4zbC0wLjA2LDEuMDJsLTEuMDIsNi4yNmwtMC44NCwtMC44OWwtMC4xOSwtMC4wOWwtMC4yNSwtMC4wMmwxLjM1LC0yLjEzbC0wLjEsLTAuNDJsLTEuOTIsLTEuMTdsLTAuMiwtMC4wNGwtMS40MSwwLjJsLTAuODIsLTAuMzlsLTAuMjYsMC4wbC0xLjI5LDAuNjJsLTEuNjMsLTAuMjdsLTEuNCwtMi41bC0wLjEyLC0wLjEybC0xLjEsLTAuNjFsLTAuODMsLTEuMmwtMS42NywtMS4xOWwtMC4yNywtMC4wNGwtMC41NCwwLjE5WlwiLCBcIm5hbWVcIjogXCJDb2xvbWJpYVwifSwgXCJDTlwiOiB7XCJwYXRoXCI6IFwiTTc0MC4zMiwxNDguOTRsMC4yMiwwLjIxbDQuMywxLjAzbDIuODQsMi4ybDAuOTksMi45MmwwLjI4LDAuMmwzLjgsMC4wbDAuMTUsLTAuMDRsMi4xMywtMS4yNGwzLjUsLTAuOGwtMS4wNSwyLjI5bC0wLjk1LDEuMTNsLTAuMDYsMC4xMmwtMC44NSwzLjQxbC0xLjU2LDIuODFsLTIuODMsLTAuNTFsLTAuMTksMC4wM2wtMi4xNSwxLjA5bC0wLjE1LDAuMzRsMC42NSwyLjU5bC0wLjMzLDMuM2wtMS4wMywwLjA3bC0wLjI4LDAuM2wwLjAxLDAuNzVsLTEuMDksLTEuMmwtMC40OCwwLjA1bC0wLjk0LDEuNmwtMy43NiwxLjI2bC0wLjIsMC4zNmwwLjI5LDEuMTlsLTEuNjcsLTAuMDhsLTEuMTEsLTAuODhsLTAuNDIsMC4wNWwtMS42OSwyLjA4bC0yLjcxLDEuNTdsLTIuMDQsMS44OGwtMy40MiwwLjg0bC0wLjExLDAuMDVsLTEuOCwxLjM0bC0xLjU0LDAuNDZsMC41MiwtMC41M2wwLjA2LC0wLjMzbC0wLjQ0LC0wLjk2bDEuODQsLTEuODRsMC4wMiwtMC40MWwtMS4zMiwtMS41NmwtMC4zNiwtMC4wOGwtMi4yMywxLjA4bC0yLjgzLDIuMDZsLTEuNTIsMS44NWwtMi4zMiwwLjEzbC0wLjIsMC4wOWwtMS4yOCwxLjM3bC0wLjAzLDAuMzdsMS4zMiwxLjk3bDAuMTgsMC4xM2wxLjgzLDAuNDNsMC4wNywxLjA4bDAuMTgsMC4yNmwxLjk4LDAuODRsMC4zLC0wLjAzbDIuNjYsLTEuOTZsMi4wNiwxLjA0bDAuMTIsMC4wM2wxLjQsMC4wN2wwLjI3LDEuMGwtMy4yNCwwLjczbC0wLjE3LDAuMTFsLTEuMTMsMS41bC0yLjM4LDEuNGwtMC4xLDAuMWwtMS4yOSwxLjk5bDAuMSwwLjQybDIuNiwxLjVsMC45NywyLjcybDEuNTIsMi41NmwxLjY2LDIuMDhsLTAuMDMsMS43NmwtMS40LDAuNjdsLTAuMTUsMC4zOGwwLjYsMS40N2wwLjEzLDAuMTVsMS4yOSwwLjc1bC0wLjM1LDIuMGwtMC41OCwxLjk2bC0xLjIyLDAuMjFsLTAuMiwwLjE0bC0xLjgzLDIuOTNsLTIuMDIsMy41MWwtMi4yOSwzLjEzbC0zLjQsMi40MmwtMy40MiwyLjE4bC0yLjc1LDAuM2wtMC4xNSwwLjA2bC0xLjMyLDEuMDFsLTAuNjgsLTAuNjdsLTAuNDEsLTAuMDFsLTEuMzcsMS4yN2wtMy40MiwxLjI4bC0yLjYyLDAuNGwtMC4yNCwwLjIxbC0wLjgsMi41N2wtMC45NSwwLjExbC0wLjUzLC0xLjU0bDAuNTIsLTAuODlsLTAuMTksLTAuNDRsLTMuMzYsLTAuODRsLTAuMTcsMC4wMWwtMS4wOSwwLjRsLTIuMzYsLTAuNjRsLTEuMCwtMC45bDAuMzUsLTEuMzRsLTAuMjMsLTAuMzdsLTIuMjIsLTAuNDdsLTEuMTUsLTAuOTRsLTAuMzYsLTAuMDJsLTIuMDgsMS4zN2wtMi4zNSwwLjI5bC0xLjk4LC0wLjAxbC0wLjEzLDAuMDNsLTEuMzIsMC42M2wtMS4yOCwwLjM4bC0wLjIxLDAuMzNsMC4zMywyLjY1bC0wLjc4LC0wLjA0bC0wLjE0LC0wLjM5bC0wLjA3LC0xLjA0bC0wLjQxLC0wLjI2bC0xLjcyLDAuNzFsLTAuOTYsLTAuNDNsLTEuNjMsLTAuODZsMC42NSwtMS45NWwtMC4xOSwtMC4zOGwtMS40MywtMC40NmwtMC41NiwtMi4yN2wtMC4zNCwtMC4yMmwtMi4yNiwwLjM4bDAuMjUsLTIuNjVsMi4yOSwtMi4xNWwwLjA5LC0wLjJsMC4xLC0yLjIxbC0wLjA3LC0yLjA5bC0wLjE1LC0wLjI1bC0xLjAyLC0wLjZsLTAuOCwtMS41MmwtMC4zMSwtMC4xNmwtMS40MiwwLjJsLTIuMTYsLTAuMzJsMC41NSwtMC43NGwwLjAxLC0wLjM1bC0xLjE3LC0xLjdsLTAuNDEsLTAuMDhsLTEuNjcsMS4wN2wtMS45NywtMC42M2wtMC4yNSwwLjAzbC0yLjg5LDEuNzNsLTIuMjYsMS45OWwtMS44MiwwLjNsLTEuMCwtMC42NmwtMC4xNSwtMC4wNWwtMS4yOCwtMC4wNmwtMS43NSwtMC42MWwtMC4yNCwwLjAybC0xLjM1LDAuNjlsLTAuMSwwLjA4bC0xLjIsMS40NWwtMC4xNCwtMS40MWwtMC40LC0wLjI1bC0xLjQ2LDAuNTVsLTIuODMsLTAuMjZsLTIuNzcsLTAuNjFsLTEuOTksLTEuMTdsLTEuOTEsLTAuNTRsLTAuNzgsLTEuMjFsLTAuMTcsLTAuMTNsLTEuMzYsLTAuMzhsLTIuNTQsLTEuNzlsLTIuMDEsLTAuODRsLTAuMjgsMC4wMmwtMC44OSwwLjU2bC0zLjMxLC0xLjgzbC0yLjM1LC0xLjY3bC0wLjU3LC0yLjQ5bDEuMzQsMC4yOGwwLjM2LC0wLjI4bDAuMDgsLTEuNDJsLTAuMDUsLTAuMTlsLTAuOTMsLTEuMzRsMC4yNCwtMi4xOGwtMC4wNywtMC4yMmwtMi42OSwtMy4zMmwtMC4xNSwtMC4xbC0zLjk3LC0xLjExbC0wLjY5LC0yLjA1bC0wLjExLC0wLjE1bC0xLjc5LC0xLjNsLTAuMzksLTAuNzNsLTAuMzYsLTEuNTdsMC4wOCwtMS4wOWwtMC4xOCwtMC4zbC0xLjUyLC0wLjY2bC0wLjIyLC0wLjAxbC0wLjUxLDAuMThsLTAuNTIsLTIuMjFsMC41OSwtMC41NWwwLjA2LC0wLjM1bC0wLjIyLC0wLjQ0bDIuMTIsLTEuMjRsMS42MywtMC41NWwyLjU4LDAuMzlsMC4zMSwtMC4xNmwwLjg3LC0xLjc1bDMuMDUsLTAuMzRsMC4yMSwtMC4xMmwwLjg0LC0xLjEybDMuODcsLTEuNTlsMC4xNSwtMC4xNGwwLjM1LC0wLjY4bDAuMDMsLTAuMTdsLTAuMTcsLTEuNTFsMS41MiwtMC43bDAuMTUsLTAuMzlsLTIuMTIsLTUuMGw0LjYyLC0xLjE1bDEuMzUsLTAuNzJsMC4xNCwtMC4xN2wxLjcyLC01LjM3bDQuNywwLjk5bDAuMjgsLTAuMDhsMS4zOSwtMS40M2wwLjA4LC0wLjJsMC4xMSwtMi45NWwxLjgzLC0wLjI2bDAuMTgsLTAuMWwxLjg1LC0yLjA4bDAuNjEsLTAuMTdsMC41NywxLjk3bDAuMSwwLjE1bDIuMiwxLjc1bDMuNDgsMS4xN2wxLjU5LDIuMzZsLTAuOTMsMy41M2wwLjA0LDAuMjRsMC45LDEuMzVsMC4yLDAuMTNsMi45OCwwLjUzbDMuMzIsMC40M2wyLjk3LDEuODlsMS40OSwwLjM1bDEuMDgsMi42N2wxLjUyLDEuODhsMC4yNCwwLjExbDIuNzQsLTAuMDdsNS4xNSwwLjY3bDMuMzYsLTAuNDFsMi4zOSwwLjQzbDMuNjcsMS44MWwwLjEzLDAuMDNsMi45MiwtMC4wbDEuMDIsMC44NmwwLjM0LDAuMDNsMi44OCwtMS41OWwzLjk4LC0xLjAzbDMuODEsLTAuMTNsMy4wMiwtMS4xMmwxLjc3LC0xLjYxbDEuNzMsLTEuMDFsMC4xMywtMC4zN2wtMC40MSwtMS4wMWwtMC43MiwtMS4wN2wxLjA5LC0xLjY2bDEuMjEsMC4yNGwyLjU3LDAuNjNsMC4yNCwtMC4wNGwyLjQ2LC0xLjYybDMuNzgsLTEuMTlsMC4xMywtMC4wOWwxLjgsLTIuMDNsMS42NiwtMC44NGwzLjU0LC0wLjQxbDEuOTMsMC4zNWwwLjM0LC0wLjIybDAuMjcsLTEuMTJsLTAuMDgsLTAuMjlsLTIuMjcsLTIuMjJsLTIuMDgsLTEuMDdsLTAuMjksMC4wMWwtMS44MiwxLjEybC0yLjM2LC0wLjQ3bC0wLjE0LDAuMDFsLTEuMTgsMC4zNGwtMC40NiwtMC45NGwxLjY5LC0zLjA4bDEuMSwtMi4yMWwyLjc1LDEuMTJsMC4yNiwtMC4wMmwzLjUzLC0yLjA2bDAuMTUsLTAuMjZsLTAuMDIsLTEuMzVsMi4xOCwtMy4zOWwxLjM1LC0xLjA0bDAuMTIsLTAuMjRsLTAuMDMsLTEuODVsLTAuMTUsLTAuMjVsLTEuMCwtMC41OGwxLjY4LC0xLjM3bDMuMDEsLTAuNTlsMy4yNSwtMC4wOWwzLjY3LDAuOTlsMi4wOCwxLjE4bDEuNTEsMy4zbDAuOTUsMS40NWwwLjg1LDEuOTlsMC45MiwzLjE5Wk02OTcuMCwyMzcuMzdsLTEuOTUsMS4xMmwtMS43NCwtMC42OGwtMC4wNiwtMS45bDEuMDgsLTEuMDNsMi42MiwtMC43bDEuMjMsMC4wNWwwLjM3LDAuNjVsLTEuMDEsMS4wOGwtMC41NCwxLjRaXCIsIFwibmFtZVwiOiBcIkNoaW5hXCJ9LCBcIkNNXCI6IHtcInBhdGhcIjogXCJNNDUzLjc2LDI3OC45MmwtMC4yNiwtMC4xMWwtMC4xOCwtMC4wMmwtMS40MiwwLjMxbC0xLjU2LC0wLjMzbC0xLjE3LDAuMTZsLTMuNywtMC4wNWwwLjMsLTEuNjNsLTAuMDQsLTAuMjFsLTAuOTgsLTEuNjZsLTAuMTUsLTAuMTNsLTEuMDMsLTAuMzhsLTAuNDYsLTEuMDFsLTAuMTMsLTAuMTRsLTAuNDgsLTAuMjdsMC4wMiwtMC40NmwwLjYyLC0xLjcybDEuMSwtMi4yNWwwLjU0LC0wLjAybDAuMiwtMC4wOWwxLjQxLC0xLjM5bDAuNzMsLTAuMDNsMS4zMiwwLjk3bDAuMzEsMC4wM2wxLjcyLC0wLjg1bDAuMTYsLTAuMmwwLjIyLC0xLjBsMC41NywtMS4wM2wwLjM2LC0xLjE4bDEuMjYsLTAuOThsMC4xLC0wLjE1bDAuNDksLTEuN2wwLjQ4LC0wLjUxbDAuMDcsLTAuMTNsMC4zNSwtMS4zbDAuNjMsLTEuNTRsMi4wNiwtMS45MmwwLjA5LC0wLjE3bDAuMTIsLTAuNzlsMC4yNCwtMC40MWwtMC4wNCwtMC4zNmwtMC44OSwtMC45MWwwLjA0LC0wLjQ1bDAuMjgsLTAuMDZsMC44NSwxLjM5bDAuMTYsMS41OWwtMC4wOSwxLjY2bDAuMDQsMC4xN2wxLjA5LDEuODRsLTAuODYsLTAuMDJsLTAuNzIsMC4xN2wtMS4wNywtMC4yNGwtMC4zNCwwLjE3bC0wLjU0LDEuMTlsMC4wNiwwLjM0bDEuNDgsMS40N2wxLjA2LDAuNDRsMC4zMiwwLjk0bDAuNzMsMS42bC0wLjMyLDAuNTdsLTEuMjMsMi40OWwtMC41NCwwLjQxbC0wLjEyLDAuMjFsLTAuMTksMS45NWwwLjI0LDEuMDhsLTAuMTgsMC42N2wwLjA3LDAuMjhsMS4xMywxLjI1bDAuMjQsMC45M2wwLjkyLDEuMjlsMS4xLDAuOGwwLjEsMS4wMWwwLjI2LDAuNzNsLTAuMTIsMC45M2wtMS42NSwtMC40OWwtMi4wMiwtMC42NmwtMy4xOSwtMC4xMVpcIiwgXCJuYW1lXCI6IFwiQ2FtZXJvb25cIn0sIFwiQ0xcIjoge1wicGF0aFwiOiBcIk0yNDYuOCw0MjkuMWwtMS4xNCwwLjc4bC0yLjI1LDEuMjFsLTAuMTYsMC4yM2wtMC4zNywyLjk0bC0wLjc1LDAuMDZsLTIuNzIsLTEuMDdsLTIuODMsLTIuMzRsLTMuMDYsLTEuOWwtMC43MSwtMS45MmwwLjY3LC0xLjg0bC0wLjAyLC0wLjI1bC0xLjIyLC0yLjEzbC0wLjMxLC01LjQxbDEuMDIsLTIuOTVsMi41OSwtMi40bC0wLjEzLC0wLjUxbC0zLjMyLC0wLjhsMi4wNiwtMi40bDAuMDcsLTAuMTVsMC43OSwtNC43N2wyLjQ0LDAuOTVsMC40LC0wLjIybDEuMzEsLTYuMzFsLTAuMTYsLTAuMzNsLTEuNjgsLTAuOGwtMC40MiwwLjIxbC0wLjcyLDMuNDdsLTEuMDEsLTAuMjdsMC43NCwtNC4wNmwwLjg1LC01LjQ2bDEuMTIsLTEuOTZsMC4wMywtMC4yMmwtMC43MSwtMi44MmwtMC4xOSwtMi45NGwwLjc2LC0wLjA3bDAuMjYsLTAuMmwxLjUzLC00LjYybDEuNzMsLTQuNTJsMS4wNywtNC4ybC0wLjU2LC00LjJsMC43MywtMi4ybDAuMDEsLTAuMTJsLTAuMjksLTMuM2wxLjQ2LC0zLjM0bDAuNDUsLTUuMTlsMC44LC01LjUybDAuNzgsLTUuODlsLTAuMTgsLTQuMzNsLTAuNDksLTMuNDdsMS4xLC0wLjU2bDAuMTMsLTAuMTNsMC40NCwtMC44OGwwLjksMS4yOWwwLjMyLDEuOGwwLjEsMC4xOGwxLjE2LDAuOTdsLTAuNzMsMi4zM2wwLjAxLDAuMjFsMS4zMywyLjkxbDAuOTcsMy42bDAuMzUsMC4yMmwxLjU3LC0wLjMxbDAuMTYsMC4zNGwtMC43OSwyLjUxbC0yLjYxLDEuMjVsLTAuMTcsMC4yOGwwLjA4LDQuMzZsLTAuNDgsMC43OWwwLjAxLDAuMzNsMC42LDAuODRsLTEuNjIsMS41NWwtMS42NywyLjZsLTAuODksMi40N2wtMC4wMiwwLjEzbDAuMjMsMi41NmwtMS41LDIuNzZsLTAuMDMsMC4yMWwxLjE1LDQuOGwwLjExLDAuMTdsMC41NCwwLjQybC0wLjAxLDIuMzdsLTEuNCwyLjdsLTAuMDMsMC4xNWwwLjA2LDIuMjVsLTEuOCwxLjc4bC0wLjA5LDAuMjFsMC4wMiwyLjczbDAuNzEsMi42M2wtMS4zMywwLjk0bC0wLjEyLDAuMTdsLTAuNjcsMi42NGwtMC41OSwzLjAzbDAuNCwzLjU1bC0wLjg0LDAuNTFsLTAuMTQsMC4zMWwwLjU4LDMuNWwwLjA4LDAuMTZsMC45NiwwLjk5bC0wLjcsMS4wOGwwLjExLDAuNDNsMS4wNCwwLjU1bDAuMTksMC44bC0wLjg5LDAuNDhsLTAuMTYsMC4zMWwwLjI2LDEuNzdsLTAuODksNC4wNmwtMS4zMSwyLjY3bC0wLjAzLDAuMTlsMC4yOCwxLjUzbC0wLjczLDEuODhsLTEuODUsMS4zN2wtMC4xMiwwLjI2bDAuMjIsMy40NmwwLjA2LDAuMTZsMC44OCwxLjE5bDAuMjgsMC4xMmwxLjMyLC0wLjE3bC0wLjA0LDIuMTNsMC4wNCwwLjE1bDEuMDQsMS45NWwwLjI0LDAuMTZsNS45NCwwLjQ0Wk0yNDguNzksNDMwLjcxbDAuMCw3LjQxbDAuMywwLjNsMi42NywwLjBsMS4wMSwwLjA2bC0wLjU0LDAuOTFsLTEuOTksMS4wMWwtMS4xMywtMC4xbC0xLjQyLC0wLjI3bC0xLjg3LC0xLjA2bC0yLjU3LC0wLjQ5bC0zLjA5LC0xLjlsLTIuNTIsLTEuODNsLTIuNjUsLTIuOTNsMC45MywwLjMybDMuNTQsMi4yOWwzLjMyLDEuMjNsMC4zNCwtMC4wOWwxLjI5LC0xLjU3bDAuODMsLTIuMzJsMi4xMSwtMS4yOGwxLjQzLDAuMzJaXCIsIFwibmFtZVwiOiBcIkNoaWxlXCJ9LCBcIkNBXCI6IHtcInBhdGhcIjogXCJNMjgwLjE0LDE0NS42NmwtMS42NiwyLjg4bDAuMDYsMC4zN2wwLjM3LDAuMDNsMS41LC0xLjAxbDEuMTcsMC40OWwtMC42NCwwLjgzbDAuMTMsMC40NmwyLjIyLDAuODlsMC4yOCwtMC4wM2wxLjAyLC0wLjdsMi4wOSwwLjgzbC0wLjY5LDIuMWwwLjM3LDAuMzhsMS40MywtMC40NWwwLjI3LDEuNDNsMC43NCwxLjg4bC0wLjk1LDIuNWwtMC44OCwwLjA5bC0xLjM0LC0wLjQ4bDAuNDksLTIuMzRsLTAuMTQsLTAuMzJsLTAuNywtMC40bC0wLjM2LDAuMDRsLTIuODEsMi42NmwtMC42MywtMC4wNWwxLjIsLTEuMDFsLTAuMSwtMC41MmwtMi40LC0wLjc3bC0yLjc5LDAuMThsLTQuNjUsLTAuMDlsLTAuMjIsLTAuNTRsMS4zNywtMC45OWwwLjAxLC0wLjQ4bC0wLjgyLC0wLjY1bDEuOTEsLTEuNzlsMi41NywtNS4xN2wxLjQ5LC0xLjgxbDIuMDQsLTEuMDdsMC42MywwLjA4bC0wLjI3LDAuNTFsLTEuMzMsMi4wN1pNMTkzLjkyLDc0Ljg1bC0wLjAxLDQuMjRsMC4xOSwwLjI4bDAuMzMsLTAuMDdsMy4xNCwtMy4yMmwyLjY1LDIuNWwtMC43MSwzLjA0bDAuMDYsMC4yNmwyLjQyLDIuODhsMC40NiwwLjBsMi42NiwtMy4xNGwxLjgzLC0zLjc0bDAuMDMsLTAuMTJsMC4xMywtNC41M2wzLjIzLDAuMzFsMy42MywwLjY0bDMuMTgsMi4wOGwwLjEzLDEuOTFsLTEuNzksMi4yMmwtMC4wLDAuMzdsMS42OSwyLjJsLTAuMjgsMS44bC00Ljc0LDIuODRsLTMuMzMsMC42MmwtMi41LC0xLjIxbC0wLjQxLDAuMTdsLTAuNzMsMi4wNWwtMi4zOSwzLjQ0bC0wLjc0LDEuNzhsLTIuNzgsMi42MWwtMy40OCwwLjI2bC0wLjE3LDAuMDdsLTEuOTgsMS42OGwtMC4xLDAuMjFsLTAuMTUsMi4zM2wtMi42OCwwLjQ1bC0wLjE3LDAuMDlsLTMuMSwzLjJsLTIuNzUsNC4zOGwtMC45OSwzLjA2bC0wLjE0LDQuMzFsMC4yNSwwLjMxbDMuNSwwLjU4bDEuMDcsMy4yNGwxLjE4LDIuNzZsMC4zNCwwLjE4bDMuNDMsLTAuNjlsNC41NSwxLjUybDIuNDUsMS4zMmwxLjc2LDEuNjVsMC4xMiwwLjA3bDMuMTEsMC45NmwyLjYzLDEuNDZsMC4xMywwLjA0bDQuMTIsMC4ybDIuNDEsMC4zbC0wLjM2LDIuODFsMC44LDMuNTFsMS44MSwzLjc4bDAuMDgsMC4xbDMuNzMsMy4xN2wwLjM0LDAuMDNsMS45MywtMS4wOGwwLjEzLC0wLjE1bDEuMzUsLTMuNDRsMC4wMSwtMC4xOGwtMS4zMSwtNS4zOGwtMC4wOCwtMC4xNGwtMS40NiwtMS41bDMuNjgsLTEuNTFsMi44NCwtMi40NmwxLjQ1LC0yLjU1bDAuMDQsLTAuMTdsLTAuMiwtMi4zOWwtMC4wNCwtMC4xMmwtMS43LC0zLjA3bC0yLjksLTIuNjRsMi43OSwtMy42NmwwLjA1LC0wLjI3bC0xLjA4LC0zLjM4bC0wLjgsLTUuNzVsMS40NSwtMC43NWw0LjE4LDEuMDNsMi42LDAuMzhsMC4xOCwtMC4wM2wxLjkzLC0wLjk1bDIuMTgsMS4yM2wzLjAxLDIuMThsMC43MywxLjQybDAuMjUsMC4xNmw0LjE4LDAuMjdsLTAuMDYsMi45NWwwLjgzLDQuN2wwLjIyLDAuMjRsMi4xOSwwLjU1bDEuNzUsMi4wOGwwLjM4LDAuMDdsMy42MywtMi4wM2wwLjExLC0wLjExbDIuMzgsLTQuMDZsMS4zNiwtMS40M2wxLjc2LDMuMDFsMy4yNiw0LjY4bDIuNjgsNC4xOWwtMC45NCwyLjA5bDAuMTIsMC4zOGwzLjMxLDEuOThsMi4yMywxLjk4bDAuMTMsMC4wN2wzLjk0LDAuODlsMS40OCwxLjAybDAuOTYsMi44MmwwLjIyLDAuMmwxLjg1LDAuNDNsMC44OCwxLjEzbDAuMTcsMy41M2wtMS42OCwxLjE2bC0xLjc2LDEuMTRsLTQuMDgsMS4xN2wtMC4xMSwwLjA2bC0zLjA4LDIuNjVsLTQuMTEsMC41MmwtNS4zNSwtMC42OWwtMy43NiwtMC4wMmwtMi42MiwwLjIzbC0wLjIsMC4xbC0yLjA1LDIuMjlsLTMuMTMsMS40MWwtMC4xMSwwLjA4bC0zLjYsNC4yNGwtMi44NywyLjkybC0wLjA1LDAuMzZsMC4zMywwLjE0bDIuMTMsLTAuNTJsMC4xNSwtMC4wOGwzLjk4LC00LjE1bDUuMTYsLTIuNjNsMy41OCwtMC4zMWwxLjgyLDEuM2wtMi4wOSwxLjkxbC0wLjA5LDAuMjlsMC44LDMuNDZsMC44MiwyLjM3bDAuMTUsMC4xN2wzLjI1LDEuNTZsMC4xNiwwLjAzbDQuMTQsLTAuNDVsMC4yMSwtMC4xMmwyLjAzLC0yLjg2bDAuMTEsMS40NmwwLjEzLDAuMjJsMS4yNiwwLjg4bC0yLjcsMS43OGwtNS41MSwxLjgzbC0yLjUyLDEuMjZsLTIuNzUsMi4xNmwtMS41MiwtMC4xOGwtMC4wOCwtMi4xNmw0LjE5LC0yLjQ3bDAuMTQsLTAuMzRsLTAuMywtMC4yMmwtNC4wMSwwLjFsLTIuNjYsMC4zNmwtMS40NSwtMS41NmwwLjAsLTQuMTZsLTAuMTEsLTAuMjNsLTEuMTEsLTAuOTFsLTAuMjgsLTAuMDVsLTEuNSwwLjQ4bC0wLjcsLTAuN2wtMC40NSwwLjAybC0xLjkxLDIuMzlsLTAuOCwyLjVsLTAuODIsMS4zMWwtMC45NSwwLjQzbC0wLjc3LDAuMTVsLTAuMjMsMC4ybC0wLjE4LDAuNTZsLTguMiwwLjAybC0wLjEzLDAuMDNsLTEuMTksMC42MWwtMi45NSwyLjQ1bC0wLjc4LDEuMTNsLTQuNiwwLjAxbC0wLjEyLDAuMDJsLTEuMTMsMC40OGwtMC4xMywwLjQ0bDAuMzcsMC41NWwwLjIsMC44MmwtMC4wMSwwLjA5bC0zLjEsMS40MmwtMi42MywwLjVsLTIuODQsMS41N2wtMC40NywwLjBsLTAuNzIsLTAuNGwtMC4xOCwtMC4yN2wwLjAzLC0wLjE1bDAuNTIsLTEuMGwxLjIsLTEuNzFsMC43MywtMS44bDAuMDIsLTAuMTdsLTEuMDMsLTUuNDdsLTAuMTUsLTAuMjFsLTIuMzUsLTEuMzJsMC4xNiwtMC4yOWwtMC4wNSwtMC4zNWwtMC4zNywtMC4zOGwtMC4yMiwtMC4wOWwtMC41NiwwLjBsLTAuMzUsLTAuMzRsLTAuMTEsLTAuNjVsLTAuNDYsLTAuMmwtMC4zOSwwLjI2bC0wLjIsLTAuMDNsLTAuMTEsLTAuMzNsLTAuNDgsLTAuMjVsLTAuMjEsLTAuNzFsLTAuMTUsLTAuMThsLTMuOTcsLTIuMDdsLTQuOCwtMi4zOWwtMC4yNSwtMC4wMWwtMi4xOSwwLjg5bC0wLjcyLDAuMDNsLTMuMDQsLTAuODJsLTAuMTQsLTAuMGwtMS45NCwwLjRsLTIuNCwtMC45OGwtMi41NiwtMC41MWwtMS43LC0wLjE5bC0wLjYyLC0wLjQ0bC0wLjQyLC0xLjY3bC0wLjMsLTAuMjNsLTAuODUsMC4wMmwtMC4yOSwwLjNsLTAuMDEsMC45NWwtNjkuMjYsLTAuMDFsLTQuNzcsLTMuMTRsLTEuNzgsLTEuNDFsLTQuNTEsLTEuMzhsLTEuMywtMi43M2wwLjM0LC0xLjk2bC0wLjE3LC0wLjMzbC0zLjA2LC0xLjM3bC0wLjQxLC0yLjU4bC0wLjExLC0wLjE4bC0yLjkyLC0yLjRsLTAuMDUsLTEuNTNsMS4zMiwtMS41OWwwLjA3LC0wLjJsLTAuMDcsLTIuMjFsLTAuMTYsLTAuMjZsLTQuMTksLTIuMjJsLTIuNTIsLTQuMDJsLTEuNTYsLTIuNmwtMC4wOCwtMC4wOWwtMi4yOCwtMS42NGwtMS42NSwtMS40OGwtMS4zMSwtMS44OWwtMC4zOCwtMC4xbC0yLjUxLDEuMjFsLTIuMjgsMS45MmwtMi4wMywtMi4yMmwtMS44NSwtMS43MWwtMi40NCwtMS4wNGwtMi4yOCwtMC4xMmwwLjAzLC0zNy43Mmw0LjI3LDAuOThsNC4wLDIuMTNsMi42MSwwLjRsMC4yNCwtMC4wN2wyLjE3LC0xLjgxbDIuOTIsLTEuMzNsMy42MywwLjUzbDAuMTgsLTAuMDNsMy43MiwtMS45NGwzLjg5LC0xLjA2bDEuNiwxLjcybDAuMzcsMC4wNmwxLjg3LC0xLjA0bDAuMTQsLTAuMTlsMC40OCwtMS44M2wxLjM3LDAuMzhsNC4xOCwzLjk2bDAuNDEsMC4wbDIuODksLTIuNjJsMC4yOCwyLjc5bDAuMzcsMC4yNmwzLjA4LC0wLjczbDAuMTcsLTAuMTJsMC44NSwtMS4xNmwyLjgxLDAuMjRsMy44MywxLjg2bDUuODYsMS42MWwzLjQ2LDAuNzVsMi40NCwtMC4yNmwyLjg5LDEuODlsLTMuMTIsMS44OWwtMC4xNCwwLjMxbDAuMjQsMC4yNGw0LjUzLDAuOTJsNi44NCwtMC41bDIuMDQsLTAuNzFsMi41NCwyLjQ0bDAuMzksMC4wMmwyLjcyLC0yLjE2bC0wLjAxLC0wLjQ4bC0yLjI2LC0xLjYxbDEuMjcsLTEuMTZsMi45NCwtMC4xOWwxLjk0LC0wLjQybDEuODksMC45N2wyLjQ5LDIuMzJsMC4yNCwwLjA4bDIuNzEsLTAuMzNsNC4zNSwxLjlsMC4xNywwLjAybDMuODYsLTAuNjdsMy42MiwwLjFsMC4zMSwtMC4zM2wtMC4yNiwtMi40NGwxLjksLTAuNjVsMy41OCwxLjM2bC0wLjAxLDMuODRsMC4yMywwLjI5bDAuMzQsLTAuMTdsMS41MSwtMy4yM2wxLjgxLDAuMWwwLjMxLC0wLjIybDEuMTMsLTQuMzdsLTAuMDgsLTAuMjlsLTIuNjgsLTIuNzNsLTIuODMsLTEuNzZsMC4xOSwtNC43M2wyLjc3LC0zLjE1bDMuMDYsMC42OWwyLjQ0LDEuOTdsMy4yNCw0Ljg4bC0yLjA1LDIuMDJsMC4xNSwwLjUxbDQuNDEsMC44NVpNMjY1Ljg1LDE1MC43bC0wLjg0LDAuMDRsLTMuMTUsLTAuOTlsLTEuNzcsLTEuMTdsMC4xOSwtMC4wNmwzLjE3LDAuNzlsMi4zOSwxLjI3bDAuMDEsMC4xMlpNMjQ5LjQxLDMuNzFsNi42OCwwLjQ5bDUuMzQsMC43OWw0LjM0LDEuNmwtMC4wOCwxLjI0bC01LjkxLDIuNTZsLTYuMDMsMS4yMWwtMi4zNiwxLjM4bC0wLjE0LDAuMzRsMC4yOSwwLjIybDQuMzcsLTAuMDJsLTQuOTYsMy4wMWwtNC4wNiwxLjY0bC0wLjExLDAuMDhsLTQuMjEsNC42MmwtNS4wNywwLjkybC0wLjEyLDAuMDVsLTEuNTMsMS4xbC03LjUsMC41OWwtMC4yOCwwLjI4bDAuMjQsMC4zMWwyLjY3LDAuNTRsLTEuMDQsMC42bC0wLjA5LDAuNDRsMS44OSwyLjQ5bC0yLjExLDEuNjZsLTMuODMsMS41MmwtMC4xNSwwLjEzbC0xLjE0LDIuMDFsLTMuNDEsMS41NWwtMC4xNiwwLjM2bDAuMzUsMS4xOWwwLjMsMC4yMmwzLjk4LC0wLjE5bDAuMDMsMC43OGwtNi40MiwyLjk5bC02LjQ0LC0xLjQxbC03LjQxLDAuNzlsLTMuNzIsLTAuNjJsLTQuNDgsLTAuMjZsLTAuMjUsLTIuMGw0LjM3LC0xLjEzbDAuMjEsLTAuMzhsLTEuMTQsLTMuNTVsMS4xMywtMC4yOGw2LjYxLDIuMjlsMC4zNSwtMC4xMmwtMC4wNCwtMC4zN2wtMy40MSwtMy40NWwtMC4xNCwtMC4wOGwtMy41NywtMC45MmwxLjYyLC0xLjdsNC4zNiwtMS4zbDAuMiwtMC4xOGwwLjcxLC0xLjk0bC0wLjEyLC0wLjM2bC0zLjQ1LC0yLjE1bC0wLjg4LC0yLjQzbDYuMzYsMC4yM2wxLjk0LDAuNjFsMC4yMywtMC4wMmwzLjkxLC0yLjFsMC4xNSwtMC4zMmwtMC4yNiwtMC4yNGwtNS42OSwtMC42N2wtOC42OSwwLjM3bC00LjMsLTEuOTJsLTIuMTIsLTIuMzlsLTIuODIsLTEuNjhsLTAuNDQsLTEuNjVsMy40MSwtMS4wNmwyLjkzLC0wLjJsNC45MSwtMC45OWwzLjY5LC0yLjI4bDIuOTMsMC4zMWwyLjY0LDEuNjhsMC40MiwtMC4xbDEuODQsLTMuMjNsMy4xNywtMC45Nmw0LjQ1LC0wLjY5bDcuNTYsLTAuMjZsMS4yNiwwLjY0bDAuMTgsMC4wM2w3LjIsLTEuMDZsMTAuODEsMC44Wk0yMDMuOTQsNTcuNTlsMC4wMSwwLjMybDEuOTcsMi45N2wwLjUxLC0wLjAxbDIuMjYsLTMuNzVsNi4wNSwtMS44OWw0LjA4LDQuNzJsLTAuMzYsMi45NWwwLjM4LDAuMzNsNC45NSwtMS4zNmwwLjExLC0wLjA1bDIuMjMsLTEuNzdsNS4zNywyLjMxbDMuMzIsMi4xNGwwLjMsMS44OWwwLjM2LDAuMjVsNC40OCwtMS4wMWwyLjQ5LDIuOGwwLjE0LDAuMDlsNS45OSwxLjc4bDIuMDksMS43NGwyLjE4LDMuODNsLTQuMjksMS45MWwtMC4wMSwwLjU0bDUuOSwyLjgzbDMuOTUsMC45NGwzLjU0LDMuODRsMC4yLDAuMWwzLjU4LDAuMjVsLTAuNjcsMi41MWwtNC4xOCw0LjU0bC0yLjg0LC0xLjYxbC0zLjkxLC0zLjk1bC0wLjI2LC0wLjA5bC0zLjI0LDAuNTJsLTAuMjUsMC4yNmwtMC4zMiwyLjM3bDAuMSwwLjI2bDIuNjMsMi4zOGwzLjQyLDEuODlsMC45NiwxLjBsMS41NywzLjhsLTAuNzQsMi40M2wtMi44NSwtMC45NmwtNi4yNiwtMy4xNWwtMC4zOCwwLjA5bDAuMDQsMC4zOWwzLjU0LDMuNGwyLjU1LDIuMzFsMC4yMywwLjc4bC02LjI2LC0xLjQzbC01LjMzLC0yLjI1bC0yLjczLC0xLjczbDAuNjcsLTAuODZsLTAuMDksLTAuNDVsLTcuMzgsLTQuMDFsLTAuNDQsMC4yN2wwLjAzLDAuODlsLTYuODUsMC42MWwtMS44LC0xLjE3bDEuNDMsLTIuNmw0LjU2LC0wLjA3bDUuMTUsLTAuNTJsMC4yMywtMC40NWwtMC43NiwtMS4zNGwwLjgsLTEuODlsMy4yMSwtNC4wNmwwLjA1LC0wLjI5bC0wLjcyLC0xLjk1bC0wLjk3LC0xLjQ3bC0wLjExLC0wLjFsLTMuODQsLTIuMWwtNC41MywtMS4zM2wxLjA5LC0wLjc1bDAuMDUsLTAuNDVsLTIuNjUsLTIuNzVsLTAuMTgsLTAuMDlsLTIuMTIsLTAuMjRsLTEuOTEsLTEuNDdsLTAuMzksMC4wMmwtMS4yNywxLjI1bC00LjQsMC41NmwtOS4wNiwtMC45OWwtNS4yOCwtMS4zMWwtNC4wMSwtMC42N2wtMS43MiwtMS4zMWwyLjMyLC0xLjg1bDAuMSwtMC4zM2wtMC4yOCwtMC4ybC0zLjMsLTAuMDJsLTAuNzQsLTQuMzZsMS44NiwtNC4wOWwyLjQ2LC0xLjg4bDUuNzQsLTEuMTVsLTEuNSwyLjU1Wk0yNjEuMjgsMTU5LjI4bDAuMTksMC4xNGwxLjgyLDAuNDJsMS42NiwtMC4wNWwtMC42NiwwLjY4bC0wLjc1LDAuMTZsLTMuMCwtMS4yNWwtMC40NiwtMC43N2wwLjUxLC0wLjUybDAuNjgsMS4xOVpNMjMwLjg3LDg0LjQ4bC0yLjQ4LDAuMTlsLTAuNTIsLTEuNzRsMC45NiwtMi4xN2wyLjAzLC0wLjUzbDEuNzEsMS4wNGwwLjAyLDEuNmwtMC4yMiwwLjQ2bC0xLjUsMS4xNlpNMjI5LjUyLDU4LjE5bDAuMTQsMC44MmwtNC45OSwtMC4yMmwtMi43MywwLjYzbC0wLjU5LC0wLjIzbC0yLjYxLC0yLjRsMC4wOCwtMS4zOGwwLjk0LC0wLjI1bDUuNjEsMC41MWw0LjE0LDIuNTRaTTIyMi4xMiwxMDUuMGwtMC43OSwxLjYzbC0wLjc1LC0wLjIybC0wLjUyLC0wLjkxbDAuMDQsLTAuMDlsMC44NCwtMS4wMWwwLjc0LDAuMDZsMC40NCwwLjU1Wk0xODMuNzcsMzguMjJsMi43MiwxLjY1bDAuMTYsMC4wNGw0LjgzLC0wLjAxbDEuOTIsMS41MmwtMC41MSwxLjc1bDAuMTgsMC4zNmwyLjg0LDEuMTRsMS41NiwxLjE5bDAuMTYsMC4wNmwzLjM3LDAuMjJsMy42NSwwLjQybDQuMDcsLTEuMWw1LjA1LC0wLjQzbDMuOTYsMC4zNWwyLjUzLDEuOGwwLjQ4LDEuNzlsLTEuMzcsMS4xNmwtMy42LDEuMDNsLTMuMjIsLTAuNTlsLTcuMTcsMC43NmwtNS4xLDAuMDlsLTQuMCwtMC42bC02LjQ4LC0xLjU2bC0wLjgxLC0yLjU3bC0wLjMsLTIuNDlsLTAuMSwtMC4xOWwtMi41MSwtMi4yNWwtMC4xNiwtMC4wN2wtNS4xMiwtMC42M2wtMi42MSwtMS40NWwwLjc1LC0xLjcxbDQuODgsMC4zMlpNMjA3LjQ2LDkxLjI2bDAuNDIsMS42MmwwLjQyLDAuMTlsMS4xMiwtMC41NWwxLjM1LDAuOTlsMi43NCwxLjM5bDIuNzMsMS4ybDAuMiwxLjc0bDAuMzUsMC4yNmwxLjcyLC0wLjI5bDEuMzEsMC45N2wtMS43MiwwLjk2bC0zLjY4LC0wLjlsLTEuMzQsLTEuNzFsLTAuNDMsLTAuMDRsLTIuNDYsMi4xbC0zLjIzLDEuODVsLTAuNzQsLTEuOThsLTAuMzEsLTAuMTlsLTIuNDcsMC4yOGwxLjQ5LC0xLjM0bDAuMSwtMC4xOWwwLjMyLC0zLjE1bDAuNzksLTMuNDVsMS4zNCwwLjI1Wk0yMTUuNTksMTAyLjY2bC0yLjczLDIuMGwtMS40OSwtMC4wOGwtMC4zNywtMC43bDEuNjEsLTEuNTZsMy4wLDAuMDNsLTAuMDIsMC4zWk0yMDIuNzksMjQuMDdsMC4xMSwwLjEybDIuNTQsMS41M2wtMy4wMSwxLjQ3bC00LjU1LDQuMDdsLTQuMywwLjM4bC01LjA3LC0wLjY4bC0yLjUxLC0yLjA5bDAuMDMsLTEuNzJsMS44NiwtMS40bDAuMSwtMC4zNGwtMC4yOSwtMC4ybC00LjQ5LDAuMDRsLTIuNjMsLTEuNzlsLTEuNDUsLTIuMzZsMS42MSwtMi4zOGwxLjY1LC0xLjY5bDIuNDcsLTAuNGwwLjE5LC0wLjQ4bC0wLjcyLC0wLjg5bDUuMSwtMC4yNmwzLjEsMy4wNWwwLjEzLDAuMDdsNC4yMSwxLjI1bDMuOTksMS4wNmwxLjkyLDMuNjVaTTE4Ny41LDU5LjNsLTAuMTUsMC4xbC0yLjU5LDMuNGwtMi41LC0wLjE1bC0xLjQ3LC0zLjkybDAuMDQsLTIuMjRsMS4yMiwtMS45MmwyLjM0LC0xLjI2bDUuMTEsMC4xN2w0LjI4LDEuMDZsLTMuMzYsMy44NmwtMi45LDAuOVpNMTg2LjE5LDQ4LjhsLTEuMTUsMS42M2wtMy40MiwtMC4zNWwtMi42OCwtMS4xNWwxLjExLC0xLjg4bDMuMzQsLTEuMjdsMi4wMSwxLjYzbDAuNzksMS4zOFpNMTg1Ljc4LDM1LjQxbC0wLjk1LDAuMTNsLTQuNDgsLTAuMzNsLTAuNCwtMC45MWw0LjUsMC4wN2wxLjQ1LDAuODJsLTAuMSwwLjIxWk0xODAuNzYsMzIuNTZsLTMuNDMsMS4wM2wtMS44NSwtMS4xNGwtMS4wMSwtMS45MmwtMC4xNiwtMS44N2wyLjg3LDAuMmwxLjM5LDAuMzVsMi43NSwxLjc1bC0wLjU1LDEuNlpNMTgxLjAzLDc2LjMybC0xLjIxLDEuMmwtMy4xOSwtMS4yNmwtMC4xOCwtMC4wMWwtMS45MiwwLjQ1bC0yLjg4LC0xLjY3bDEuODQsLTEuMTZsMS42LC0xLjc3bDIuNDUsMS4xN2wxLjQ1LDAuNzdsMi4wNSwyLjI4Wk0xNjkuNzIsNTQuNzZsMi44MywwLjk3bDAuMTQsMC4wMWw0LjI1LC0wLjU4bDAuNDcsMS4wMWwtMi4xOSwyLjE2bDAuMDcsMC40OGwzLjYxLDEuOTVsLTAuNDEsMy44NGwtMy44NywxLjY4bC0yLjIzLC0wLjM2bC0xLjczLC0xLjc1bC02LjA3LC0zLjUzbDAuMDMsLTEuMDFsNC43OSwwLjU1bDAuMywtMC4xNmwtMC4wNCwtMC4zNGwtMi41NSwtMi44OWwyLjU5LC0yLjA1Wk0xNzQuNDQsNDAuNTZsMS40OSwxLjg3bDAuMDcsMi40OGwtMS4wNywzLjUybC0zLjg3LDAuNDhsLTIuNDEsLTAuNzJsMC4wNSwtMi43MmwtMC4zMywtMC4zbC0zLjc5LDAuMzZsLTAuMTMsLTMuMzFsMi4zNiwwLjE0bDAuMTUsLTAuMDNsMy43LC0xLjc0bDMuNDQsMC4yOWwwLjMxLC0wLjIybDAuMDMsLTAuMTJaTTE3MC4xNCwzMS41bDAuNzUsMS43NGwtMy41MiwtMC41MmwtNC4xOSwtMS43N2wtNC42NSwtMC4xN2wxLjY1LC0xLjExbC0wLjA1LC0wLjUybC0yLjg2LC0xLjI2bC0wLjEzLC0xLjU4bDQuNTIsMC43bDYuNjYsMS45OWwxLjg0LDIuNVpNMTM0LjY0LDU4LjA4bC0xLjA4LDEuOTNsMC4zNCwwLjQ0bDUuNDQsLTEuNDFsMy4zNywyLjMybDAuMzcsLTAuMDJsMi42NiwtMi4yOGwyLjAzLDEuMzhsMi4wMSw0LjUzbDAuNTMsMC4wNGwxLjI2LC0xLjkzbDAuMDMsLTAuMjdsLTEuNjcsLTQuNTVsMS44MiwtMC41OGwyLjM2LDAuNzNsMi42OSwxLjg0bDEuNTMsNC40NmwwLjc3LDMuMjRsMC4xNSwwLjE5bDQuMjIsMi4yNmw0LjMyLDIuMDRsLTAuMjEsMS41MWwtMy44NywwLjM0bC0wLjE5LDAuNWwxLjQ1LDEuNTRsLTAuNjUsMS4yM2wtNC4zLC0wLjY1bC00LjQsLTEuMTlsLTIuOTcsMC4yOGwtNC42NywxLjQ4bC02LjMxLDAuNjVsLTQuMjcsMC4zOWwtMS4yNiwtMS45MWwtMC4xNSwtMC4xMmwtMy40MiwtMS4ybC0wLjE2LC0wLjAxbC0yLjA1LDAuNDVsLTIuNjYsLTMuMDJsMS4yLC0wLjM0bDMuODIsLTAuNzZsMy41OCwwLjE5bDMuMjcsLTAuNzhsMC4yMywtMC4yOWwtMC4yNCwtMC4yOWwtNC44NCwtMS4wNmwtNS40MiwwLjM1bC0zLjQsLTAuMDlsLTAuOTcsLTEuMjJsNS4zOSwtMS43bDAuMjEsLTAuMzNsLTAuMywtMC4yNWwtMy44MiwwLjA2bC0zLjk1LC0xLjFsMS44OCwtMy4xM2wxLjY4LC0xLjgxbDYuNTQsLTIuODRsMi4xMSwwLjc3Wk0xNTguODUsNTYuNThsLTEuODIsMi42MmwtMy4zOCwtMi45bDAuNDksLTAuMzlsMy4xNywtMC4xOGwxLjU0LDAuODZaTTE0OS43MSw0Mi43bDEuMCwxLjg3bDAuMzcsMC4xNGwyLjE3LC0wLjgzbDIuMzMsMC4ybDAuMzgsMi4xNmwtMS4zOCwyLjE3bC04LjMzLDAuNzZsLTYuMzQsMi4xNWwtMy41MSwwLjFsLTAuMjIsLTEuMTNsNC45OCwtMi4xMmwwLjE3LC0wLjM0bC0wLjMxLC0wLjIzbC0xMS4yNywwLjZsLTMuMDQsLTAuNzhsMy4xNCwtNC41N2wyLjIsLTEuMzVsNi44NywxLjdsNC40LDMuMGwwLjE0LDAuMDVsNC4zNywwLjM5bDAuMjcsLTAuNDhsLTMuNDEsLTQuNjhsMS45NiwtMS42MmwyLjI4LDAuNTNsMC43OSwyLjMyWk0xNDUuNDQsMjkuODNsLTIuMTgsMC43N2wtMy43OSwtMC4wbDAuMDIsLTAuMzFsMi4zNCwtMS41bDEuMiwwLjIzbDIuNDIsMC44M1pNMTQ0LjgzLDM0LjVsLTQuNDQsMS40NmwtMy4xOCwtMS40OGwxLjYsLTEuMzZsMy41MSwtMC41M2wzLjEsMC43NWwtMC42LDEuMTZaTTExOS4wMiw2NS44N2wtNi4xNywyLjA3bC0xLjE5LC0xLjgybC0wLjEzLC0wLjExbC01LjQ4LC0yLjMybDAuOTIsLTEuN2wxLjczLC0zLjQ0bDIuMTYsLTMuMTVsLTAuMDIsLTAuMzZsLTIuMDksLTIuNTZsNy44NCwtMC43MWwzLjU5LDEuMDJsNi4zMiwwLjI3bDIuMzUsMS4zN2wyLjI1LDEuNzFsLTIuNjgsMS4wNGwtNi4yMSwzLjQxbC0zLjEsMy4yOGwtMC4wOCwwLjIxbDAuMCwxLjgxWk0xMjkuNjYsMzUuNGwtMC4zLDMuNTVsLTEuNzcsMS42N2wtMi4zNCwwLjI3bC00LjYyLDIuMmwtMy44OSwwLjc2bC0yLjgzLC0wLjkzbDMuODUsLTMuNTJsNS4wNCwtMy4zNmwzLjc1LDAuMDdsMy4xMSwtMC43Wk0xMTEuMjQsMTUyLjc0bC0wLjgyLDAuMjlsLTMuOTIsLTEuMzlsLTAuNywtMS4wNmwtMC4xMiwtMC4xbC0yLjE1LC0xLjA5bC0wLjQxLC0wLjg0bC0wLjIsLTAuMTZsLTIuNDQsLTAuNTZsLTAuODQsLTEuNTZsMC4xLC0wLjM2bDIuMzQsMC42NGwxLjUzLDAuNWwyLjI4LDAuMzRsMC43OCwxLjA0bDEuMjQsMS41NWwwLjA5LDAuMDhsMi40MiwxLjNsMC44MSwxLjM5Wk04OC41NCwxMzQuODJsMC4xNCwwLjAybDIuMCwtMC4yM2wtMC42NywzLjQ4bDAuMDYsMC4yNGwxLjc4LDIuMjJsLTAuMjQsLTAuMGwtMS40LC0xLjQybC0wLjkxLC0xLjUzbC0xLjI2LC0xLjA4bC0wLjQyLC0xLjM1bDAuMDksLTAuNjZsMC44MiwwLjMxWlwiLCBcIm5hbWVcIjogXCJDYW5hZGFcIn0sIFwiQ0dcIjoge1wicGF0aFwiOiBcIk00NTMuNjYsMjk2LjYxbC0wLjksLTAuODJsLTAuMzUsLTAuMDRsLTAuODMsMC40OGwtMC43NywwLjgzbC0xLjY1LC0yLjEzbDEuNjYsLTEuMmwwLjA4LC0wLjM5bC0wLjgxLC0xLjQzbDAuNTksLTAuNDNsMS42MiwtMC4yOWwwLjI0LC0wLjI0bDAuMSwtMC41OGwwLjk0LDAuODRsMC4xOSwwLjA4bDIuMjEsMC4xMWwwLjI3LC0wLjE0bDAuODEsLTEuMjlsMC4zMiwtMS43NmwtMC4yNywtMS45NmwtMC4wNiwtMC4xNWwtMS4wOCwtMS4zNWwxLjAyLC0yLjc0bC0wLjA5LC0wLjM0bC0wLjYyLC0wLjVsLTAuMjIsLTAuMDZsLTEuNjYsMC4xOGwtMC41NSwtMS4wM2wwLjEyLC0wLjczbDIuODUsMC4wOWwxLjk4LDAuNjVsMi4wLDAuNTlsMC4zOCwtMC4yNWwwLjE3LC0xLjNsMS4yNiwtMi4yNGwxLjM0LC0xLjE5bDEuNTQsMC4zOGwxLjM1LDAuMTJsLTAuMTEsMS4xNWwtMC43NCwxLjM0bC0wLjUsMS42MWwtMC4zMSwyLjIybDAuMTIsMS40MWwtMC40LDAuOWwtMC4wNiwwLjg4bC0wLjI0LDAuNjdsLTEuNTcsMS4xNWwtMS4yNCwxLjQxbC0xLjA5LDIuNDNsLTAuMDMsMC4xM2wwLjA4LDEuOTVsLTAuNTUsMC42OWwtMS40NiwxLjIzbC0xLjMyLDEuNDFsLTAuNjEsLTAuMjlsLTAuMTMsLTAuNTdsLTAuMjksLTAuMjNsLTEuMzYsLTAuMDJsLTAuMjMsMC4xbC0wLjcyLDAuODFsLTAuNDEsLTAuMTZaXCIsIFwibmFtZVwiOiBcIlJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDRlwiOiB7XCJwYXRoXCI6IFwiTTQ1OS40MSwyNjYuNTZsMS45LC0wLjE3bDAuMjIsLTAuMTJsMC4zNiwtMC41bDAuMTQsMC4wMmwwLjU1LDAuNTFsMC4yOSwwLjA3bDMuMTUsLTAuOTZsMC4xMiwtMC4wN2wxLjA1LC0wLjk3bDEuMjksLTAuODdsMC4xMiwtMC4zM2wtMC4xNywtMC42MWwwLjM4LC0wLjEybDIuMzYsMC4xNWwwLjE1LC0wLjAzbDIuMzYsLTEuMTdsMC4xMiwtMC4xbDEuNzgsLTIuNzJsMS4xOCwtMC45NmwxLjIzLC0wLjM0bDAuMjEsMC43OWwwLjA3LDAuMTNsMS4zNywxLjVsMC4wMSwwLjg2bC0wLjM5LDEuMGwtMC4wMSwwLjE3bDAuMTYsMC43OGwwLjEsMC4xN2wwLjkxLDAuNzZsMS44OSwxLjA5bDEuMjQsMC45MmwwLjAyLDAuNjdsMC4xMiwwLjIzbDEuNjcsMS4zbDAuOTksMS4wM2wwLjYxLDEuNDZsMC4xNCwwLjE1bDEuNzksMC45NWwwLjIsMC40bC0wLjQ0LDAuMTRsLTEuNTQsLTAuMDZsLTEuOTgsLTAuMjZsLTAuOTMsMC4yMmwtMC4xOSwwLjE0bC0wLjMsMC40OGwtMC41NywwLjA1bC0wLjkxLC0wLjQ5bC0wLjI2LC0wLjAxbC0yLjcsMS4yMWwtMS4wNCwtMC4yM2wtMC4yMSwwLjAzbC0wLjM0LDAuMTlsLTAuMTIsMC4xM2wtMC42NCwxLjNsLTEuNjcsLTAuNDNsLTEuNzcsLTAuMjRsLTEuNTgsLTAuOTFsLTIuMDYsLTAuODVsLTAuMjcsMC4wMmwtMS40MiwwLjg4bC0wLjk3LDEuMjdsLTAuMDYsMC4xNGwtMC4xOSwxLjQ2bC0xLjMsLTAuMTFsLTEuNjcsLTAuNDJsLTAuMjcsMC4wN2wtMS41NSwxLjQxbC0wLjk5LDEuNzZsLTAuMTQsLTEuMThsLTAuMTMsLTAuMjJsLTEuMSwtMC43OGwtMC44NiwtMS4ybC0wLjIsLTAuODRsLTAuMDcsLTAuMTNsLTEuMDcsLTEuMTlsMC4xNiwtMC41OWwwLjAsLTAuMTVsLTAuMjQsLTEuMDFsMC4xOCwtMS43N2wwLjUsLTAuMzhsMC4wOSwtMC4xMWwxLjE4LC0yLjRaXCIsIFwibmFtZVwiOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wifSwgXCJDRFwiOiB7XCJwYXRoXCI6IFwiTTQ5Ny44NSwyNzYuMjVsLTAuMTQsMi43N2wwLjIsMC4zbDAuNTcsMC4xOWwtMC40NywwLjUybC0xLjAsMC43MWwtMC45NiwxLjMxbC0wLjU2LDEuMjJsLTAuMTYsMi4wNGwtMC41NCwwLjg5bC0wLjA0LDAuMTVsLTAuMDIsMS43NmwtMC42MywwLjYxbC0wLjA5LDAuMmwtMC4wOCwxLjMzbC0wLjIsMC4xMWwtMC4xNSwwLjIxbC0wLjIzLDEuMzdsMC4wMywwLjJsMC42LDEuMDhsMC4xNiwyLjk2bDAuNDQsMi4yOWwtMC4yNCwxLjI1bDAuMDEsMC4xNWwwLjUsMS40NmwwLjA3LDAuMTJsMS40MSwxLjM3bDEuMDksMi41NmwtMC41MSwtMC4xMWwtMy40NSwwLjQ1bC0wLjY3LDAuM2wtMC4xNSwwLjE1bC0wLjcxLDEuNjFsMC4wMSwwLjI2bDAuNTIsMS4wM2wtMC40MywyLjlsLTAuMzEsMi41NWwwLjEzLDAuMjlsMC43LDAuNDZsMS43NSwwLjk5bDAuMzEsLTAuMDFsMC4yNiwtMC4xN2wwLjE1LDEuOWwtMS40NCwtMC4wMmwtMC45NCwtMS4yOGwtMC45NCwtMS4xbC0wLjE3LC0wLjFsLTEuNzYsLTAuMzNsLTAuNSwtMS4xOGwtMC40MiwtMC4xNWwtMS40NCwwLjc1bC0xLjc5LC0wLjMybC0wLjc3LC0xLjA1bC0wLjIsLTAuMTJsLTEuNTksLTAuMjNsLTAuOTcsMC4wNGwtMC4xLC0wLjUzbC0wLjI3LC0wLjI1bC0wLjg2LC0wLjA2bC0xLjEzLC0wLjE1bC0xLjYyLDAuMzdsLTEuMDQsLTAuMDZsLTAuMzIsMC4wOWwwLjExLC0yLjU2bC0wLjA4LC0wLjIxbC0wLjc3LC0wLjg3bC0wLjE3LC0xLjQxbDAuMzYsLTEuNDdsLTAuMDMsLTAuMjFsLTAuNDgsLTAuOTFsLTAuMDQsLTEuNTJsLTAuMywtMC4yOWwtMi42NSwwLjAybDAuMTMsLTAuNTNsLTAuMjksLTAuMzdsLTEuMjgsMC4wMWwtMC4yOCwwLjIxbC0wLjA3LDAuMjRsLTEuMzUsMC4wOWwtMC4yNiwwLjE4bC0wLjYyLDEuNDVsLTAuMjUsMC40MmwtMS4xNywtMC4zbC0wLjE5LDAuMDFsLTAuNzksMC4zNGwtMS40NCwwLjE4bC0xLjQxLC0xLjk2bC0wLjcsLTEuNDdsLTAuNjEsLTEuODZsLTAuMjgsLTAuMjFsLTcuMzksLTAuMDNsLTAuOTIsMC4zbC0wLjc4LC0wLjAzbC0wLjc4LDAuMjVsLTAuMTEsLTAuMjVsMC4zNSwtMC4xNWwwLjE4LC0wLjI2bDAuMDcsLTEuMDJsMC4zMywtMC41MmwwLjcyLC0wLjQybDAuNTIsMC4ybDAuMzMsLTAuMDhsMC43NiwtMC44NmwwLjk5LDAuMDJsMC4xMSwwLjQ4bDAuMTYsMC4ybDAuOTQsMC40NGwwLjM1LC0wLjA3bDEuNDYsLTEuNTZsMS40NCwtMS4yMWwwLjY4LC0wLjg1bDAuMDYsLTAuMmwtMC4wOCwtMS45OWwxLjA0LC0yLjMzbDEuMSwtMS4yM2wxLjYyLC0xLjE5bDAuMTEsLTAuMTRsMC4yOSwtMC44bDAuMDgsLTAuOTRsMC4zOCwtMC44MmwwLjAzLC0wLjE2bC0wLjEzLC0xLjM4bDAuMywtMi4xNmwwLjQ3LC0xLjUxbDAuNzMsLTEuMzFsMC4wNCwtMC4xMmwwLjE1LC0xLjUxbDAuMjEsLTEuNjZsMC44OSwtMS4xNmwxLjE2LC0wLjdsMS45LDAuNzlsMS42OSwwLjk1bDEuODEsMC4yNGwxLjg1LDAuNDhsMC4zNSwtMC4xNmwwLjcxLC0xLjQzbDAuMTYsLTAuMDlsMS4wMywwLjIzbDAuMTksLTAuMDJsMi42NSwtMS4xOWwwLjg2LDAuNDZsMC4xNywwLjAzbDAuODEsLTAuMDhsMC4yMywtMC4xNGwwLjMxLC0wLjVsMC43NSwtMC4xN2wxLjgzLDAuMjZsMS42NCwwLjA2bDAuNzIsLTAuMjFsMS4zOSwxLjlsMC4xNiwwLjExbDEuMTIsMC4zbDAuMjQsLTAuMDRsMC41OCwtMC4zNmwxLjA1LDAuMTVsMC4xNSwtMC4wMmwxLjE1LC0wLjQ0bDAuNDcsMC44NGwwLjA4LDAuMDlsMi4wOCwxLjU3WlwiLCBcIm5hbWVcIjogXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDWlwiOiB7XCJwYXRoXCI6IFwiTTQ2My4yOSwxNTIuMjJsLTAuODgsLTAuNDdsLTAuMTgsLTAuMDNsLTEuMDgsMC4xNWwtMS44NiwtMC45NGwtMC4yMSwtMC4wMmwtMC44OCwwLjI0bC0wLjEzLDAuMDdsLTEuMjUsMS4xN2wtMS42MywtMC45MWwtMS4zOCwtMS4zNmwtMS4yMiwtMC43NWwtMC4yNCwtMS4yNGwtMC4zMywtMC43NWwxLjUzLC0wLjZsMC45OCwtMC44NGwxLjc0LC0wLjYybDAuMTEsLTAuMDdsMC40NywtMC40N2wwLjQ2LDAuMjdsMC4yNCwwLjAzbDAuOTYsLTAuM2wxLjA2LDAuOTVsMC4xNSwwLjA3bDEuNTcsMC4yNGwtMC4xLDAuNmwwLjE2LDAuMzJsMS4zNiwwLjY4bDAuNDEsLTAuMTVsMC4yOCwtMC42MmwxLjI5LDAuMjhsMC4xOSwwLjg0bDAuMjYsMC4yM2wxLjczLDAuMThsMC43NCwxLjAybC0wLjE3LDAuMGwtMC4yNSwwLjEzbC0wLjMyLDAuNDlsLTAuNDYsMC4xMWwtMC4yMiwwLjIzbC0wLjEzLDAuNTdsLTAuMzIsMC4xbC0wLjIsMC4yMmwtMC4wMywwLjE0bC0wLjY1LDAuMjVsLTEuMDUsLTAuMDVsLTAuMjgsMC4xN2wtMC4yMiwwLjQzWlwiLCBcIm5hbWVcIjogXCJDemVjaCBSZXB1YmxpY1wifSwgXCJDWVwiOiB7XCJwYXRoXCI6IFwiTTUwNS4wMywxOTMuNzVsLTEuNTEsMC42OGwtMS4wLC0wLjNsLTAuMzIsLTAuNjNsMC42OSwtMC4wNmwwLjQxLDAuMTNsMC4xOSwtMC4wbDAuNjIsLTAuMjJsMC4zMSwwLjAybDAuMDYsMC4yMmwwLjQ5LDAuMTdsMC4wNiwtMC4wMVpcIiwgXCJuYW1lXCI6IFwiQ3lwcnVzXCJ9LCBcIkNSXCI6IHtcInBhdGhcIjogXCJNMjEzLjAsMjYzLjg0bC0wLjk4LC0wLjRsLTAuMywtMC4zMWwwLjE2LC0wLjI0bDAuMDUsLTAuMjFsLTAuMDksLTAuNTZsLTAuMSwtMC4xOGwtMC43NiwtMC42NWwtMC45OSwtMC41bC0wLjc0LC0wLjI4bC0wLjEzLC0wLjU4bC0wLjEyLC0wLjE4bC0wLjY2LC0wLjQ1bC0wLjM0LC0wLjBsLTAuMTMsMC4zMWwwLjEzLDAuNTlsLTAuMTcsMC4yMWwtMC4zNCwtMC40MmwtMC4xNCwtMC4xbC0wLjcsLTAuMjJsLTAuMjMsLTAuMzRsMC4wMSwtMC42MmwwLjMxLC0wLjc0bC0wLjE0LC0wLjM4bC0wLjMsLTAuMTVsMC40NywtMC40bDEuNDgsMC42bDAuMjYsLTAuMDJsMC40NywtMC4yN2wwLjU4LDAuMTVsMC4zNSwwLjQ0bDAuMTcsMC4xMWwwLjc0LDAuMTdsMC4yNywtMC4wN2wwLjMsLTAuMjdsMC41MiwxLjA5bDAuOTcsMS4wMmwwLjc3LDAuNzFsLTAuNDEsMC4xbC0wLjIzLDAuM2wwLjAxLDEuMDJsMC4xMiwwLjI0bDAuMiwwLjE0bC0wLjA3LDAuMDVsLTAuMTEsMC4zbDAuMDgsMC4zN2wtMC4yMywwLjYzWlwiLCBcIm5hbWVcIjogXCJDb3N0YSBSaWNhXCJ9LCBcIkNVXCI6IHtcInBhdGhcIjogXCJNMjE1LjAxLDIyNi4wOWwyLjA4LDAuMThsMS45NCwwLjAzbDIuMjQsMC44NmwwLjk1LDAuOTJsMC4yNSwwLjA4bDIuMjIsLTAuMjhsMC43OSwwLjU1bDMuNjgsMi44MWwwLjE5LDAuMDZsMC43NywtMC4wM2wxLjE4LDAuNDJsLTAuMTIsMC40N2wwLjI3LDAuMzdsMS43OCwwLjFsMS41OSwwLjlsLTAuMTEsMC4yMmwtMS41LDAuM2wtMS42NCwwLjEzbC0xLjc1LC0wLjJsLTIuNjksMC4xOWwxLjAsLTAuODZsLTAuMDMsLTAuNDhsLTEuMDIsLTAuNjhsLTAuMTMsLTAuMDVsLTEuNTIsLTAuMTZsLTAuNzQsLTAuNjRsLTAuNTcsLTEuNDJsLTAuMywtMC4xOWwtMS4zNiwwLjFsLTIuMjMsLTAuNjdsLTAuNzEsLTAuNTJsLTAuMTQsLTAuMDZsLTMuMiwtMC40bC0wLjQyLC0wLjI1bDAuNTYsLTAuMzlsMC4xMiwtMC4zM2wtMC4yNywtMC4yMmwtMi40NiwtMC4xM2wtMC4yLDAuMDZsLTEuNzIsMS4zMWwtMC45NCwwLjAzbC0wLjI1LDAuMTVsLTAuMjksMC41M2wtMS4wNCwwLjI0bC0wLjI5LC0wLjA3bDAuNywtMC40M2wwLjEsLTAuMTFsMC41LC0wLjg3bDEuMDQsLTAuNTRsMS4yMywtMC40OWwxLjg2LC0wLjI1bDAuNjIsLTAuMjhaXCIsIFwibmFtZVwiOiBcIkN1YmFcIn0sIFwiU1pcIjoge1wicGF0aFwiOiBcIk01MDAuOTUsMzUzLjQxbC0wLjQxLDAuOTdsLTEuMTYsMC4yM2wtMS4yOSwtMS4yNmwtMC4wMiwtMC43MWwwLjYzLC0wLjkzbDAuMjMsLTAuN2wwLjQ3LC0wLjEybDEuMDQsMC40bDAuMzIsMS4wNWwwLjIsMS4wOFpcIiwgXCJuYW1lXCI6IFwiU3dhemlsYW5kXCJ9LCBcIlNZXCI6IHtcInBhdGhcIjogXCJNNTEwLjg0LDE5OS44M2wwLjA5LC0wLjExbDAuMDcsLTAuMmwtMC4wNCwtMS4wOGwwLjU2LC0xLjRsMS4zLC0xLjAxbDAuMSwtMC4zNGwtMC40MSwtMS4xMWwtMC4yNCwtMC4xOWwtMC44OSwtMC4xMWwtMC4yLC0xLjg0bDAuNTUsLTEuMDVsMS4zLC0xLjIybDAuMDksLTAuMTlsMC4wOSwtMS4wOWwwLjM5LDAuMjdsMC4yNSwwLjA0bDIuNjYsLTAuNzdsMS4zNSwwLjUybDIuMDYsLTAuMDFsMi45MywtMS4wOGwxLjM1LDAuMDRsMi4xNCwtMC4zNGwtMC44MywxLjE2bC0xLjMxLDAuNjhsLTAuMTYsMC4zbDAuMjMsMi4wM2wtMC45LDMuMjVsLTUuNDMsMi44N2wtNC43OSwyLjkxbC0yLjMyLC0wLjkyWlwiLCBcIm5hbWVcIjogXCJTeXJpYVwifSwgXCJLR1wiOiB7XCJwYXRoXCI6IFwiTTU5OS4wNCwxNzIuMTVsMC4zOCwtMC45bDEuNDMsLTAuMzdsNC4wNCwxLjAybDAuMzcsLTAuMjNsMC4zNiwtMS42NGwxLjE3LC0wLjUybDMuNDUsMS4yNGwwLjIsLTAuMGwwLjg2LC0wLjMxbDQuMDksMC4wOGwzLjYxLDAuMzFsMS4xOCwxLjAybDAuMTEsMC4wNmwxLjE5LDAuMzRsLTAuMTMsMC4yNmwtMy44NCwxLjU4bC0wLjEzLDAuMWwtMC44MSwxLjA4bC0zLjA4LDAuMzRsLTAuMjQsMC4xNmwtMC44NSwxLjdsLTIuNDMsLTAuMzdsLTAuMTQsMC4wMWwtMS43OSwwLjYxbC0yLjM5LDEuNGwtMC4xMiwwLjM5bDAuMjUsMC40OWwtMC40OCwwLjQ1bC00LjU3LDAuNDNsLTMuMDQsLTAuOTRsLTIuNDUsMC4xOGwwLjE0LC0xLjAybDIuNDIsMC40NGwwLjI3LC0wLjA4bDAuODEsLTAuODFsMS43NiwwLjI3bDAuMjEsLTAuMDVsMy4yMSwtMi4xNGwtMC4wMywtMC41MWwtMi45NywtMS41N2wtMC4yNiwtMC4wMWwtMS42NCwwLjY5bC0xLjM4LC0wLjg0bDEuODEsLTEuNjdsLTAuMDksLTAuNWwtMC40NiwtMC4xOFpcIiwgXCJuYW1lXCI6IFwiS3lyZ3l6c3RhblwifSwgXCJLRVwiOiB7XCJwYXRoXCI6IFwiTTUyMy4zLDI4Ny4wNGwwLjA2LDAuMTdsMS4yOSwxLjhsLTEuNDYsMC44NGwtMC4xMSwwLjExbC0wLjU1LDAuOTNsLTAuODEsMC4xNmwtMC4yNCwwLjI0bC0wLjM0LDEuNjlsLTAuODEsMS4wNmwtMC40NiwxLjU4bC0wLjc2LDAuNjNsLTMuMywtMi4zbC0wLjE2LC0xLjMybC0wLjE1LC0wLjIzbC05LjM1LC01LjI4bC0wLjAyLC0yLjRsMS45MiwtMi42M2wwLjkxLC0xLjgzbDAuMDEsLTAuMjRsLTEuMDksLTIuODZsLTAuMjksLTEuMjRsLTEuMDksLTEuNjNsMi45MywtMi44NWwwLjkyLDAuM2wwLjAsMS4xOWwwLjA5LDAuMjJsMC44NiwwLjgzbDAuMjEsMC4wOGwxLjY1LDAuMGwzLjA5LDIuMDhsMC4xNiwwLjA1bDAuNzksMC4wM2wwLjU0LC0wLjA2bDAuNTgsMC4yOGwxLjY3LDAuMmwwLjI4LC0wLjEybDAuNjksLTAuOThsMi4wNCwtMC45NGwwLjg2LDAuNzNsMC4xOSwwLjA3bDEuMSwwLjBsLTEuODIsMi4zNmwtMC4wNiwwLjE4bDAuMDMsOS4xMlpcIiwgXCJuYW1lXCI6IFwiS2VueWFcIn0sIFwiU1NcIjoge1wicGF0aFwiOiBcIk01MDUuNywyNjEuMzlsMC4wMiwxLjY0bC0wLjI3LDAuNTVsLTEuMTUsMC4wNWwtMC4yNCwwLjE1bC0wLjg1LDEuNDRsMC4yMiwwLjQ1bDEuNDQsMC4xN2wxLjE1LDEuMTJsMC40MiwwLjk1bDAuMTQsMC4xNWwxLjA2LDAuNTRsMS4zMywyLjQ1bC0zLjA2LDIuOThsLTEuNDQsMS4wOGwtMS43NSwwLjAxbC0xLjkyLDAuNTZsLTEuNSwtMC41M2wtMC4yNywwLjAzbC0wLjg1LDAuNTdsLTEuOTgsLTEuNWwtMC41NiwtMS4wMmwtMC4zNywtMC4xM2wtMS4zMiwwLjVsLTEuMDgsLTAuMTVsLTAuMiwwLjA0bC0wLjU2LDAuMzVsLTAuOSwtMC4yNGwtMS40NCwtMS45N2wtMC4zOSwtMC43N2wtMC4xMywtMC4xM2wtMS43OCwtMC45NGwtMC42NSwtMS41bC0xLjA4LC0xLjEybC0xLjU3LC0xLjIybC0wLjAyLC0wLjY4bC0wLjEyLC0wLjIzbC0xLjM3LC0xLjAybC0xLjE3LC0wLjY4bDAuMiwtMC4wOGwwLjg2LC0wLjQ4bDAuMTQsLTAuMThsMC42MywtMi4yMmwwLjYsLTEuMDJsMS40NywtMC4yOGwwLjM1LDAuNTZsMS4yOSwxLjQ4bDAuMTQsMC4wOWwwLjY5LDAuMjJsMC4yMiwtMC4wMmwwLjgzLC0wLjRsMS41OCwwLjA4bDAuMjYsMC4zOWwwLjI1LDAuMTNsMi40OSwwLjBsMC4zLC0wLjI1bDAuMDYsLTAuMzVsMS4xMywtMC40MmwwLjE4LC0wLjE4bDAuMjIsLTAuNjNsMC42OCwtMC4zOGwxLjk1LDEuMzdsMC4yMywwLjA1bDEuMjksLTAuMjZsMC4xOSwtMC4xMmwxLjIzLC0xLjhsMS4zNiwtMS4zN2wwLjA4LC0wLjI1bC0wLjIxLC0xLjUybC0wLjA2LC0wLjE1bC0wLjI1LC0wLjNsMC45NCwtMC4wOGwwLjI2LC0wLjIxbDAuMSwtMC4zMmwwLjYsMC4wOWwtMC4yNSwxLjY3bDAuMywxLjgzbDAuMTEsMC4xOWwxLjIyLDAuOTRsMC4yNSwwLjczbC0wLjA0LDEuMmwwLjI2LDAuMzFsMC4wOSwwLjAxWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBTdWRhblwifSwgXCJTUlwiOiB7XCJwYXRoXCI6IFwiTTI3OC4xLDI3MC4yNmwyLjcxLDAuNDVsMC4zMSwtMC4xNGwwLjE5LC0wLjMybDEuODIsLTAuMTZsMi4yNSwwLjU2bC0xLjA5LDEuODFsLTAuMDQsMC4xOWwwLjIsMS43MmwwLjA1LDAuMTNsMC45LDEuMzVsLTAuMzksMC45OWwtMC4yMSwxLjA5bC0wLjQ4LDAuOGwtMS4yLC0wLjQ0bC0wLjE3LC0wLjAxbC0xLjEyLDAuMjRsLTAuOTUsLTAuMjFsLTAuMzUsMC4ybC0wLjI1LDAuNzNsMC4wNSwwLjI5bDAuMywwLjM1bC0wLjA2LDAuMTNsLTEuMDEsLTAuMTVsLTEuNDIsLTIuMDNsLTAuMzIsLTEuMzZsLTAuMjksLTAuMjNsLTAuNjMsLTAuMGwtMC45NSwtMS41NmwwLjQxLC0xLjE2bDAuMDEsLTAuMTdsLTAuMDgsLTAuMzVsMS4yOSwtMC41NmwwLjE4LC0wLjIybDAuMzUsLTEuOTdaXCIsIFwibmFtZVwiOiBcIlN1cmluYW1lXCJ9LCBcIktIXCI6IHtcInBhdGhcIjogXCJNNjgwLjI4LDI1Ny44OWwtMC45MywtMS4ybC0xLjI0LC0yLjU2bC0wLjU2LC0yLjlsMS40NSwtMS45MmwzLjA3LC0wLjQ2bDIuMjYsMC4zNWwyLjAzLDAuOThsMC4zOCwtMC4xMWwxLjAsLTEuNTVsMS44NiwwLjc5bDAuNTIsMS41MWwtMC4yOCwyLjgybC00LjA1LDEuODhsLTAuMTIsMC40NWwwLjc5LDEuMWwtMi4yLDAuMTdsLTIuMDgsMC45OGwtMS44OSwtMC4zM1pcIiwgXCJuYW1lXCI6IFwiQ2FtYm9kaWFcIn0sIFwiU1ZcIjoge1wicGF0aFwiOiBcIk0xOTcuMDIsMjQ4Ljg5bDAuMTgsLTAuMDVsMC41OSwwLjE3bDAuNTUsMC41MWwwLjY0LDAuMzVsMC4wNiwwLjIybDAuMzcsMC4yMWwxLjAxLC0wLjI4bDAuMzgsMC4xM2wwLjE2LDAuMTNsLTAuMTQsMC44MWwtMC4xOCwwLjM4bC0xLjIyLC0wLjAzbC0wLjg0LC0wLjIzbC0xLjExLC0wLjUybC0xLjMxLC0wLjE1bC0wLjQ5LC0wLjM4bDAuMDIsLTAuMDhsMC43NiwtMC41N2wwLjQ2LC0wLjI3bDAuMTEsLTAuMzVaXCIsIFwibmFtZVwiOiBcIkVsIFNhbHZhZG9yXCJ9LCBcIlNLXCI6IHtcInBhdGhcIjogXCJNNDY4LjAxLDE1MC4wMmwwLjA1LDAuMDdsMC4zNiwwLjFsMC44NSwtMC4zN2wxLjEyLDEuMDJsMC4zMywwLjA1bDEuMzgsLTAuNjVsMS4wNywwLjNsMC4xNiwwLjBsMS42OSwtMC40M2wxLjk1LDEuMDJsLTAuNTEsMC42NGwtMC40NSwxLjJsLTAuMzIsMC4ybC0yLjU1LC0wLjkzbC0wLjE3LC0wLjAxbC0wLjgyLDAuMmwtMC4xNywwLjExbC0wLjUzLDAuNjhsLTAuOTQsMC4zMmwtMC4xNCwtMC4xMWwtMC4yOSwtMC4wNGwtMS4xOCwwLjQ4bC0wLjk1LDAuMDlsLTAuMjYsMC4yMWwtMC4xNSwwLjQ3bC0xLjg0LDAuMzRsLTAuODIsLTAuMzFsLTEuMTQsLTAuNzNsLTAuMiwtMC44OWwwLjQyLC0wLjg0bDAuOTEsMC4wNWwwLjEyLC0wLjAybDAuODYsLTAuMzNsMC4xOCwtMC4yMWwwLjAzLC0wLjEzbDAuMzIsLTAuMWwwLjIsLTAuMjJsMC4xMiwtMC41NWwwLjM5LC0wLjFsMC4xOCwtMC4xM2wwLjMsLTAuNDVsMC40MywtMC4wWlwiLCBcIm5hbWVcIjogXCJTbG92YWtpYVwifSwgXCJLUlwiOiB7XCJwYXRoXCI6IFwiTTczNy4zMSwxODUuNzJsMC44NCwwLjA4bDAuMjcsLTAuMTJsMC44OSwtMS4ybDEuNjMsLTAuMTNsMS4xLC0wLjJsMC4yMSwtMC4xNmwwLjEyLC0wLjI0bDEuODYsMi45NWwwLjU5LDEuNzlsMC4wMiwzLjE3bC0wLjg0LDEuMzhsLTIuMjMsMC41NWwtMS45NSwxLjE0bC0xLjkxLDAuMjFsLTAuMjIsLTEuMjFsMC40NSwtMi4wN2wtMC4wMSwtMC4xN2wtMC45OSwtMi42N2wxLjU0LC0wLjRsMC4xNywtMC40NmwtMS41NSwtMi4yNFpcIiwgXCJuYW1lXCI6IFwiU291dGggS29yZWFcIn0sIFwiU0lcIjoge1wicGF0aFwiOiBcIk00NTUuNzcsMTU5LjU5bDEuNzksMC4yMWwwLjE4LC0wLjA0bDEuMiwtMC42OGwyLjEyLC0wLjA4bDAuMjEsLTAuMWwwLjM4LC0wLjQybDAuMSwwLjAxbDAuMjgsMC42MmwtMS43MSwwLjcxbC0wLjE4LDAuMjJsLTAuMjEsMS4xbC0wLjcxLDAuMjZsLTAuMiwwLjI4bDAuMDEsMC41NWwtMC41OSwtMC4wNGwtMC43OSwtMC40N2wtMC4zOCwwLjA2bC0wLjM2LDAuNDFsLTAuODQsLTAuMDVsMC4wNSwtMC4xNWwtMC41NiwtMS4yNGwwLjIxLC0xLjE3WlwiLCBcIm5hbWVcIjogXCJTbG92ZW5pYVwifSwgXCJLUFwiOiB7XCJwYXRoXCI6IFwiTTc0Ny43NiwxNzIuMDJsLTAuMjMsLTAuMDRsLTAuMjYsMC4wOGwtMS4wOSwxLjAybC0wLjc4LDEuMDZsLTAuMDYsMC4xOWwwLjA5LDEuOTVsLTEuMTIsMC41N2wtMC41MywwLjU4bC0wLjg4LDAuODJsLTEuNjksMC41MWwtMS4wOSwwLjc5bC0wLjEyLDAuMjJsLTAuMDcsMS4xN2wtMC4yMiwwLjI1bDAuMDksMC40N2wwLjk2LDAuNDZsMS4yMiwxLjFsLTAuMTksMC4zN2wtMC45MSwwLjE2bC0xLjc1LDAuMTRsLTAuMjIsMC4xMmwtMC44NywxLjE4bC0wLjk1LC0wLjA5bC0wLjMsMC4xOGwtMC45NywtMC40NGwtMC4zOSwwLjEzbC0wLjI1LDAuNDRsLTAuMjksMC4wOWwtMC4wMywtMC4ybC0wLjE4LC0wLjIzbC0wLjYyLC0wLjI1bC0wLjQzLC0wLjI5bDAuNTIsLTAuOTdsMC41MiwtMC4zbDAuMTMsLTAuMzhsLTAuMTgsLTAuNDJsMC41OSwtMS40N2wwLjAxLC0wLjIxbC0wLjE2LC0wLjQ4bC0wLjIyLC0wLjJsLTEuNDEsLTAuMzFsLTAuODIsLTAuNTVsMS43NCwtMS42MmwyLjczLC0xLjU4bDEuNjIsLTEuOTZsMC45NiwwLjc2bDAuMTcsMC4wNmwyLjE3LDAuMTFsMC4zMSwtMC4zN2wtMC4zMiwtMS4zMWwzLjYxLC0xLjIxbDAuMTYsLTAuMTNsMC43OSwtMS4zNGwxLjI1LDEuMzhaXCIsIFwibmFtZVwiOiBcIk5vcnRoIEtvcmVhXCJ9LCBcIlNPXCI6IHtcInBhdGhcIjogXCJNNTQzLjgsMjU2LjQ4bDAuNjEsLTAuMDVsMS4xNCwtMC4zN2wxLjMxLC0wLjI1bDAuMTIsLTAuMDVsMS4xMSwtMC44MWwwLjU3LC0wLjBsMC4wMywwLjM5bC0wLjIzLDEuNDlsMC4wMSwxLjI1bC0wLjUyLDAuOTJsLTAuNywyLjcxbC0xLjE5LDIuNzlsLTEuNTQsMy4ybC0yLjEzLDMuNjZsLTIuMTIsMi43OWwtMi45MiwzLjM5bC0yLjQ3LDIuMGwtMy43NiwyLjVsLTIuMzMsMS45bC0yLjc3LDMuMDZsLTAuNjEsMS4zNWwtMC4yOCwwLjI5bC0xLjIyLC0xLjY5bC0wLjAzLC04LjkybDIuMTIsLTIuNzZsMC41OSwtMC42OGwxLjQ3LC0wLjA0bDAuMTgsLTAuMDZsMi4xNSwtMS43MWwzLjE2LC0wLjExbDAuMjEsLTAuMDlsNy4wOCwtNy41NWwxLjc2LC0yLjEybDEuMTQsLTEuNTdsMC4wNiwtMC4xOGwwLjAxLC00LjY3WlwiLCBcIm5hbWVcIjogXCJTb21hbGlhXCJ9LCBcIlNOXCI6IHtcInBhdGhcIjogXCJNMzc5LjI4LDI1MC4zNGwtMC45NSwtMS44MmwtMC4wOSwtMC4xbC0wLjgzLC0wLjZsMC42MiwtMC4yOGwwLjEzLC0wLjExbDEuMjEsLTEuOGwwLjYsLTEuMzFsMC43MSwtMC42OGwxLjA5LDAuMmwwLjE4LC0wLjAybDEuMTcsLTAuNTNsMS4yNSwtMC4wM2wxLjE3LDAuNzNsMS41OSwwLjY1bDEuNDcsMS44M2wxLjU5LDEuN2wwLjEyLDEuNTZsMC40OSwxLjQ2bDAuMSwwLjE0bDAuODUsMC42NWwwLjE4LDAuODJsLTAuMDgsMC41N2wtMC4xMywwLjA1bC0xLjI5LC0wLjE5bC0wLjI5LDAuMTNsLTAuMTEsMC4xNmwtMC4zNSwwLjA0bC0xLjgzLC0wLjYxbC01Ljg0LC0wLjEzbC0wLjEyLDAuMDJsLTAuNiwwLjI2bC0wLjg3LC0wLjA2bC0xLjAxLDAuMzJsLTAuMjYsLTEuMjZsMS45LDAuMDRsMC4xNiwtMC4wNGwwLjU0LC0wLjMybDAuMzcsLTAuMDJsMC4xNSwtMC4wNWwwLjc4LC0wLjVsMC45MiwwLjQ2bDAuMTIsMC4wM2wxLjA5LDAuMDRsMC4xNSwtMC4wM2wxLjA4LC0wLjU3bDAuMTEsLTAuNDRsLTAuNTEsLTAuNzRsLTAuMzksLTAuMWwtMC43NiwwLjM5bC0wLjYyLC0wLjAxbC0wLjkyLC0wLjU4bC0wLjE4LC0wLjA1bC0wLjc5LDAuMDRsLTAuMiwwLjA5bC0wLjQ4LDAuNTFsLTIuNDEsMC4wNlpcIiwgXCJuYW1lXCI6IFwiU2VuZWdhbFwifSwgXCJTTFwiOiB7XCJwYXRoXCI6IFwiTTM5Mi4xOSwyNjcuNTNsLTAuNDQsLTAuMTJsLTEuNzMsLTAuOTdsLTEuMjQsLTEuMjhsLTAuNCwtMC44NGwtMC4yNywtMS42NWwxLjIxLC0xLjBsMC4wOSwtMC4xMmwwLjI3LC0wLjY2bDAuMzIsLTAuNDFsMC41NiwtMC4wNWwwLjE2LC0wLjA3bDAuNSwtMC40MWwxLjc1LDAuMGwwLjU5LDAuNzdsMC40OSwwLjk2bC0wLjA3LDAuNjRsMC4wNCwwLjE5bDAuMzYsMC41OGwtMC4wMywwLjg0bDAuMjQsMC4ybC0wLjY0LDAuNjVsLTEuMTMsMS4zN2wtMC4wNiwwLjE0bC0wLjEyLDAuNjZsLTAuNDMsMC41OFpcIiwgXCJuYW1lXCI6IFwiU2llcnJhIExlb25lXCJ9LCBcIlNCXCI6IHtcInBhdGhcIjogXCJNODI2Ljc0LDMxMS41MWwwLjIzLDAuMjlsLTAuOTUsLTAuMDFsLTAuMzksLTAuNjNsMC42NSwwLjI3bDAuNDUsMC4wOVpNODI1LjAxLDMwOC41MmwtMS4xOCwtMS4zOWwtMC4zNywtMS4wNmwwLjI0LDAuMGwwLjgyLDEuODRsMC40OSwwLjZaTTgyMy4yMSwzMDkuNDJsLTAuNDQsMC4wM2wtMS40MywtMC4yNGwtMC4zMiwtMC4yNGwwLjA4LC0wLjVsMS4yOSwwLjMxbDAuNzIsMC40N2wwLjExLDAuMThaTTgxNy45LDMwMy44MWwyLjU5LDEuNDRsMC4zLDAuNDFsLTEuMjEsLTAuNjZsLTEuMzQsLTAuODlsLTAuMzQsLTAuM1pNODEzLjc3LDMwMi40bDAuNDgsMC4zNGwwLjEsMC4wOGwtMC4zMywtMC4xN2wtMC4yNSwtMC4yNVpcIiwgXCJuYW1lXCI6IFwiU29sb21vbiBJc2xhbmRzXCJ9LCBcIlNBXCI6IHtcInBhdGhcIjogXCJNNTI4LjI0LDI0My4xbC0wLjIsLTAuNjlsLTAuMDcsLTAuMTJsLTAuNjksLTAuNzFsLTAuMTgsLTAuOTRsLTAuMTIsLTAuMTlsLTEuMjQsLTAuODlsLTEuMjgsLTIuMDlsLTAuNywtMi4wOGwtMC4wNywtMC4xMWwtMS43MywtMS43OWwtMC4xMSwtMC4wN2wtMS4wMywtMC4zOWwtMS41NywtMi4zNmwtMC4yNywtMS43MmwwLjEsLTEuNTNsLTAuMDMsLTAuMTVsLTEuNDQsLTIuOTNsLTEuMjUsLTEuMTNsLTEuMzQsLTAuNTZsLTAuNzIsLTEuMzNsMC4xMSwtMC40OWwtMC4wMiwtMC4ybC0wLjcsLTEuMzhsLTAuMDgsLTAuMWwtMC42OCwtMC41NmwtMC45NywtMS45OGwtMi44LC00LjAzbC0wLjI1LC0wLjEzbC0wLjg1LDAuMDFsMC4yOSwtMS4xMWwwLjEyLC0wLjk3bDAuMjMsLTAuODFsMi41MiwwLjM5bDAuMjMsLTAuMDZsMS4wOCwtMC44NGwwLjYsLTAuOTVsMS43OCwtMC4zNWwwLjIyLC0wLjE3bDAuMzcsLTAuODNsMC43NCwtMC40MmwwLjA4LC0wLjQ2bC0yLjE3LC0yLjRsNC41NSwtMS4yNmwwLjEyLC0wLjA2bDAuMzYsLTAuMzJsMi44MywwLjcxbDMuNjcsMS45MWw3LjA0LDUuNWwwLjE3LDAuMDZsNC42NCwwLjIybDIuMDYsMC4yNGwwLjU1LDEuMTVsMC4yOCwwLjE3bDEuNTYsLTAuMDZsMC45LDIuMTVsMC4xNCwwLjE1bDEuMTQsMC41N2wwLjM5LDAuODVsMC4xMSwwLjEzbDEuNTksMS4wNmwwLjEyLDAuOTFsLTAuMjMsMC44M2wwLjAxLDAuMThsMC4zMiwwLjlsMC4wNywwLjExbDAuNjgsMC43bDAuMzMsMC44NmwwLjM3LDAuNjVsMC4wOSwwLjFsMC43NiwwLjUzbDAuMjUsMC4wNGwwLjQ1LC0wLjEybDAuMzUsMC43NWwwLjEsMC42M2wwLjk2LDIuNjhsMC4yMywwLjE5bDcuNTMsMS4zM2wwLjI3LC0wLjA5bDAuMjQsLTAuMjZsMC44NywxLjQxbC0xLjU4LDQuOTZsLTcuMzQsMi41NGwtNy4yOCwxLjAybC0yLjM0LDEuMTdsLTAuMTIsMC4xbC0xLjc0LDIuNjNsLTAuODYsMC4zMmwtMC40OSwtMC42OGwtMC4yOCwtMC4xMmwtMC45MiwwLjEybC0yLjMyLC0wLjI1bC0wLjQxLC0wLjIzbC0wLjE1LC0wLjA0bC0yLjg5LDAuMDZsLTAuNjMsMC4ybC0wLjkxLC0wLjU5bC0wLjQzLDAuMTFsLTAuNjYsMS4yN2wtMC4wMywwLjIxbDAuMjEsMC44OWwtMC42LDAuNDVaXCIsIFwibmFtZVwiOiBcIlNhdWRpIEFyYWJpYVwifSwgXCJTRVwiOiB7XCJwYXRoXCI6IFwiTTQ3Ni40Miw5MC40NGwtMC4xNSwwLjFsLTIuNDMsMi44NmwtMC4wNywwLjI0bDAuMzYsMi4zMWwtMy44NCwzLjFsLTQuODMsMy4zOGwtMC4xMSwwLjE1bC0xLjgyLDUuNDVsMC4wMywwLjI2bDEuNzgsMi42OGwyLjI3LDEuOTlsLTIuMTMsMy44OGwtMi40OSwwLjgybC0wLjIsMC4yNGwtMC45NSw2LjA1bC0xLjMyLDMuMDlsLTIuODIsLTAuMzJsLTAuMywwLjE2bC0xLjM0LDIuNjRsLTIuNDgsMC4xNGwtMC43NiwtMy4xNWwtMi4wOSwtNC4wNGwtMS44NSwtNS4wMWwxLjAzLC0xLjk4bDIuMDYsLTIuNTNsMC4wNiwtMC4xM2wwLjgzLC00LjQ1bC0wLjA2LC0wLjI1bC0xLjU0LC0xLjg2bC0wLjE1LC01LjBsMS41MiwtMy40OGwyLjI4LDAuMDZsMC4yNywtMC4xNmwwLjg3LC0xLjU5bC0wLjAxLC0wLjMxbC0wLjgsLTEuMjFsMy43OSwtNS42M2w0LjA3LC03LjU0bDIuMjMsMC4wMWwwLjI5LC0wLjIybDAuNTksLTIuMTVsNC40NiwwLjY2bDAuMzQsLTAuMjZsMC4zNCwtMi42NGwxLjIxLC0wLjE0bDMuMjQsMi4wOGwzLjc4LDIuODVsMC4wNiw2LjM3bDAuMDMsMC4xNGwwLjY3LDEuMjlsLTMuOTUsMS4wN1pcIiwgXCJuYW1lXCI6IFwiU3dlZGVuXCJ9LCBcIlNEXCI6IHtcInBhdGhcIjogXCJNNTA1Ljk4LDI1OS43NWwtMC4zMSwtMC45bC0wLjEsLTAuMTRsLTEuMiwtMC45M2wtMC4yNywtMS42NmwwLjI5LC0xLjgzbC0wLjI1LC0wLjM0bC0xLjE2LC0wLjE3bC0wLjMzLDAuMjFsLTAuMTEsMC4zN2wtMS4zLDAuMTFsLTAuMjEsMC40OWwwLjU1LDAuNjhsMC4xOCwxLjI5bC0xLjMxLDEuMzNsLTEuMTgsMS43MmwtMS4wNCwwLjIxbC0yLjAsLTEuNGwtMC4zMiwtMC4wMmwtMC45NSwwLjUybC0wLjE0LDAuMTZsLTAuMjEsMC42bC0xLjE2LDAuNDNsLTAuMTksMC4yM2wtMC4wNCwwLjI3bC0yLjA4LDAuMGwtMC4yNSwtMC4zOWwtMC4yNCwtMC4xM2wtMS44MSwtMC4wOWwtMC4xNCwwLjAzbC0wLjgsMC4zOGwtMC40OSwtMC4xNmwtMS4yMiwtMS4zOWwtMC40MiwtMC42N2wtMC4zMSwtMC4xNGwtMS44MSwwLjM1bC0wLjIsMC4xNGwtMC43MiwxLjI0bC0wLjYxLDIuMTRsLTAuNzMsMC40bC0wLjYyLDAuMjJsLTAuODMsLTAuNjhsLTAuMTIsLTAuNmwwLjM4LC0wLjk3bDAuMDEsLTEuMTRsLTAuMDgsLTAuMmwtMS4zOSwtMS41M2wtMC4yNSwtMC45N2wwLjAzLC0wLjU3bC0wLjExLC0wLjI1bC0wLjgxLC0wLjY2bC0wLjAzLC0xLjM0bC0wLjA0LC0wLjE0bC0wLjUyLC0wLjk4bC0wLjMxLC0wLjE1bC0wLjQyLDAuMDdsMC4xMiwtMC40NGwwLjYzLC0xLjAzbDAuMDMsLTAuMjNsLTAuMjQsLTAuODhsMC42OSwtMC42NmwwLjAyLC0wLjQxbC0wLjQsLTAuNDZsMC41OCwtMS4zOWwxLjA0LC0xLjcxbDEuOTcsMC4xNmwwLjMyLC0wLjNsLTAuMTIsLTEwLjI0bDAuMDIsLTAuOGwyLjU5LC0wLjAxbDAuMywtMC4zbDAuMCwtNC45MmwyOS4xOSwwLjBsMC42OCwyLjE3bC0wLjQsMC4zNWwtMC4xLDAuMjdsMC4zNiwyLjY5bDAuOTMsMy4xNWwwLjEyLDAuMTZsMi4wNSwxLjRsLTAuOTksMS4xNWwtMS43NSwwLjRsLTAuMTUsMC4wOGwtMC43OSwwLjc5bC0wLjA4LDAuMTdsLTAuMjQsMS42OWwtMS4wNywzLjc1bC0wLjAsMC4xNmwwLjI1LDAuOTZsLTAuMzgsMi4xbC0wLjk4LDIuNDFsLTEuNTIsMS4zbC0xLjA3LDEuOTRsLTAuMjUsMC45OWwtMS4wOCwwLjY0bC0wLjEzLDAuMThsLTAuNDYsMS42NVpcIiwgXCJuYW1lXCI6IFwiU3VkYW5cIn0sIFwiRE9cIjoge1wicGF0aFwiOiBcIk0yNDEuNywyMzQuOTdsMC4xNSwtMC4yMmwxLjczLDAuMDFsMS40MywwLjY0bDAuMTUsMC4wM2wwLjQ1LC0wLjA0bDAuMzYsMC43NGwwLjI4LDAuMTdsMS4wMiwtMC4wNGwtMC4wNCwwLjQzbDAuMjcsMC4zM2wxLjAzLDAuMDlsMC45MSwwLjdsLTAuNTcsMC42NGwtMC45OSwtMC40N2wtMC4xNiwtMC4wM2wtMS4xMSwwLjExbC0wLjc5LC0wLjEybC0wLjI2LDAuMDlsLTAuMzgsMC40bC0wLjY2LDAuMTFsLTAuMjgsLTAuNDVsLTAuMzgsLTAuMTJsLTAuODMsMC4zN2wtMC4xNCwwLjEzbC0wLjg1LDEuNDlsLTAuMjcsLTAuMTdsLTAuMSwtMC41OGwwLjA1LC0wLjY3bC0wLjA3LC0wLjIxbC0wLjQ0LC0wLjUzbDAuMzUsLTAuMjVsMC4xMiwtMC4xOWwwLjE5LC0xLjBsLTAuMiwtMS40WlwiLCBcIm5hbWVcIjogXCJEb21pbmljYW4gUmVwdWJsaWNcIn0sIFwiREpcIjoge1wicGF0aFwiOiBcIk01MjguNzgsMjUzLjM2bDAuMzQsMC40NWwtMC4wNiwwLjc2bC0xLjI2LDAuNTRsLTAuMDUsMC41M2wwLjgyLDAuNTNsLTAuNTcsMC44M2wtMC4zLC0wLjI1bC0wLjI3LC0wLjA1bC0wLjU2LDAuMTdsLTEuMDcsLTAuMDNsLTAuMDQsLTAuNTZsLTAuMTYsLTAuNTZsMC43NiwtMS4wN2wwLjc2LC0wLjk3bDAuODksMC4xOGwwLjI1LC0wLjA2bDAuNTEsLTAuNDJaXCIsIFwibmFtZVwiOiBcIkRqaWJvdXRpXCJ9LCBcIkRLXCI6IHtcInBhdGhcIjogXCJNNDUyLjQsMTI5LjA3bC0xLjI3LDIuMzlsLTIuMjUsLTEuNjlsLTAuMjYsLTEuMDhsMy4xNSwtMS4wbDAuNjMsMS4zOVpNNDQ3Ljg3LDEyNi4yNWwtMC4zNSwwLjc2bC0wLjQ3LC0wLjI0bC0wLjM4LDAuMDlsLTEuOCwyLjUzbC0wLjAzLDAuMjlsMC41NiwxLjRsLTEuMjIsMC40bC0xLjY4LC0wLjQxbC0wLjkyLC0xLjc2bC0wLjA3LC0zLjQ3bDAuMzgsLTAuODhsMC42MiwtMC45M2wyLjA3LC0wLjIxbDAuMTksLTAuMWwwLjg0LC0wLjk1bDEuNSwtMC43NmwtMC4wNiwxLjI2bC0wLjcsMS4xbC0wLjAzLDAuMjVsMC4zLDEuMGwwLjE4LDAuMTlsMS4wNiwwLjQyWlwiLCBcIm5hbWVcIjogXCJEZW5tYXJrXCJ9LCBcIkRFXCI6IHtcInBhdGhcIjogXCJNNDQ1LjUxLDEzMS42OWwwLjAzLDAuOTRsMC4yMSwwLjI4bDIuMzIsMC43NGwtMC4wMiwxLjBsMC4zNywwLjNsMi41NSwtMC42NWwxLjM2LC0wLjg5bDIuNjMsMS4yN2wxLjA5LDEuMDFsMC41MSwxLjUxbC0wLjYsMC43OGwtMC4wLDAuMzZsMC44OCwxLjE3bDAuNTgsMS42OGwtMC4xOCwxLjA4bDAuMDMsMC4xOGwwLjg3LDEuODFsLTAuNjYsMC4ybC0wLjU1LC0wLjMybC0wLjM2LDAuMDVsLTAuNTgsMC41OGwtMS43MywwLjYybC0wLjk5LDAuODRsLTEuNzcsMC43bC0wLjE2LDAuNGwwLjQyLDAuOTRsMC4yNiwxLjM0bDAuMTQsMC4ybDEuMjUsMC43NmwxLjIyLDEuMmwtMC43MSwxLjJsLTAuODEsMC4zN2wtMC4xNywwLjMybDAuMzQsMS45OWwtMC4wNCwwLjA5bC0wLjQ3LC0wLjM5bC0wLjE3LC0wLjA3bC0xLjIsLTAuMWwtMS44NSwwLjU3bC0yLjE1LC0wLjEzbC0wLjI5LDAuMThsLTAuMjEsMC41bC0wLjk2LC0wLjY3bC0wLjI0LC0wLjA1bC0wLjY3LDAuMTZsLTIuNiwtMC45NGwtMC4zNCwwLjFsLTAuNDIsMC41N2wtMS42NCwtMC4wMmwwLjI2LC0xLjg4bDEuMjQsLTIuMTVsLTAuMjEsLTAuNDVsLTMuNTQsLTAuNThsLTAuOTgsLTAuNzFsMC4xMiwtMS4yNmwtMC4wNSwtMC4ybC0wLjQ0LC0wLjY0bDAuMjcsLTIuMThsLTAuMzgsLTMuMTRsMS4xNywtMC4wbDAuMjcsLTAuMTdsMC42MywtMS4yNmwwLjY1LC0zLjE3bC0wLjAyLC0wLjE3bC0wLjQxLC0xLjBsMC4zMiwtMC40N2wxLjc3LC0wLjE2bDAuMzcsMC42bDAuNDcsMC4wNmwxLjcsLTEuNjlsMC4wNiwtMC4zM2wtMC41NSwtMS4yNGwtMC4wOSwtMS41MWwxLjUsMC4zNmwwLjE2LC0wLjAxbDEuMjIsLTAuNFpcIiwgXCJuYW1lXCI6IFwiR2VybWFueVwifSwgXCJZRVwiOiB7XCJwYXRoXCI6IFwiTTU1My41MywyNDIuNjVsLTEuNTEsMC41OGwtMC4xNywwLjE2bC0wLjQ4LDEuMTRsLTAuMDcsMC43OWwtMi4zMSwxLjBsLTMuOTgsMS4xOWwtMi4yOCwxLjhsLTAuOTcsMC4xMmwtMC43LC0wLjE0bC0wLjIzLDAuMDVsLTEuNDIsMS4wM2wtMS41MSwwLjQ3bC0yLjA3LDAuMTNsLTAuNjgsMC4xNWwtMC4xNywwLjFsLTAuNDksMC42bC0wLjU3LDAuMTZsLTAuMTgsMC4xM2wtMC4zLDAuNDlsLTEuMDYsLTAuMDVsLTAuMTMsMC4wMmwtMC43MywwLjMybC0xLjQ4LC0wLjExbC0wLjU1LC0xLjI2bDAuMDcsLTEuMzJsLTAuMDQsLTAuMTZsLTAuMzksLTAuNzJsLTAuNDgsLTEuODVsLTAuNTIsLTAuNzlsMC4wOCwtMC4wMmwwLjIyLC0wLjM2bC0wLjIzLC0xLjA1bDAuMjQsLTAuMzlsMC4wNCwtMC4xOWwtMC4wOSwtMC45NWwwLjk2LC0wLjcybDAuMTEsLTAuMzFsLTAuMjMsLTAuOThsMC40NiwtMC44OGwwLjc1LDAuNDlsMC4yNiwwLjAzbDAuNjMsLTAuMjJsMi43NiwtMC4wNmwwLjUsMC4yNWwyLjQyLDAuMjZsMC44NSwtMC4xMWwwLjUyLDAuNzFsMC4zNSwwLjFsMS4xNywtMC40M2wwLjE1LC0wLjEybDEuNzUsLTIuNjRsMi4yMiwtMS4xMWw2Ljk1LC0wLjk2bDIuNTUsNS41OFpcIiwgXCJuYW1lXCI6IFwiWWVtZW5cIn0sIFwiQVRcIjoge1wicGF0aFwiOiBcIk00NjMuMTcsMTU0LjE1bC0wLjE0LDAuOTlsLTEuMTUsMC4wMWwtMC4yNCwwLjQ3bDAuMzksMC41NmwtMC43NSwxLjg0bC0wLjM2LDAuNGwtMi4wNiwwLjA3bC0wLjE0LDAuMDRsLTEuMTgsMC42N2wtMS45NiwtMC4yM2wtMy40MywtMC43OGwtMC41LC0wLjk3bC0wLjMzLC0wLjE2bC0yLjQ3LDAuNTVsLTAuMiwwLjE2bC0wLjE4LDAuMzdsLTEuMjcsLTAuMzhsLTEuMjgsLTAuMDlsLTAuODEsLTAuNDFsMC4yNSwtMC41MWwwLjAzLC0wLjE4bC0wLjA1LC0wLjI4bDAuMzUsLTAuMDhsMS4xNiwwLjgxbDAuNDUsLTAuMTNsMC4yNywtMC42NGwyLjAsMC4xMmwxLjg0LC0wLjU3bDEuMDUsMC4wOWwwLjcxLDAuNTlsMC40NywtMC4xMWwwLjIzLC0wLjU0bDAuMDIsLTAuMTdsLTAuMzIsLTEuODVsMC42OSwtMC4zMWwwLjEzLC0wLjEybDAuNzMsLTEuMjNsMS42MSwwLjg5bDAuMzUsLTAuMDRsMS4zNSwtMS4yN2wwLjcsLTAuMTlsMS44NCwwLjkzbDAuMTgsMC4wM2wxLjA4LC0wLjE1bDAuODEsMC40M2wtMC4wNywwLjE1bC0wLjAyLDAuMmwwLjI0LDEuMDZaXCIsIFwibmFtZVwiOiBcIkF1c3RyaWFcIn0sIFwiRFpcIjoge1wicGF0aFwiOiBcIk00NTAuNTgsMjI0Ljk0bC04LjMxLDQuODZsLTcuMjMsNS4xMmwtMy40NiwxLjEzbC0yLjQyLDAuMjJsLTAuMDIsLTEuMzNsLTAuMiwtMC4yOGwtMS4xNSwtMC40MmwtMS40NSwtMC42OWwtMC41NSwtMS4xM2wtMC4xLC0wLjEybC04LjQ1LC01LjcybC0xNy43MiwtMTIuMTdsMC4wMywtMC4zOGwtMC4wMiwtMy4yMWwzLjg0LC0xLjkxbDIuNDYsLTAuNDFsMi4xLC0wLjc1bDAuMTQsLTAuMTFsMC45LC0xLjNsMi44NCwtMS4wNmwwLjE5LC0wLjI3bDAuMDksLTEuODFsMS4yMSwtMC4ybDAuMTUsLTAuMDdsMS4wNiwtMC45NmwzLjE5LC0wLjQ2bDAuMjMsLTAuMThsMC40NiwtMS4wOGwtMC4wOCwtMC4zNGwtMC42LC0wLjU0bC0wLjgzLC0yLjg1bC0wLjE4LC0xLjhsLTAuODIsLTEuNTdsMi4xMywtMS4zN2wyLjY1LC0wLjQ5bDAuMTMsLTAuMDVsMS41NSwtMS4xNWwyLjM0LC0wLjg1bDQuMiwtMC41MWw0LjA3LC0wLjIzbDEuMjEsMC40MWwwLjIzLC0wLjAxbDIuMywtMS4xMWwyLjUyLC0wLjAybDAuOTQsMC42MmwwLjIsMC4wNWwxLjI1LC0wLjEzbC0wLjM2LDEuMDNsLTAuMDEsMC4xNGwwLjM5LDIuNjZsLTAuNTYsMi4ybC0xLjQ5LDEuNTJsLTAuMDgsMC4yNGwwLjIyLDIuMTJsMC4xMSwwLjJsMS45NCwxLjU4bDAuMDIsMC41NGwwLjEyLDAuMjNsMS40NSwxLjA2bDEuMDQsNC44NWwwLjgxLDIuNDJsMC4xMywxLjE5bC0wLjQzLDIuMTdsMC4xNywxLjI4bC0wLjMxLDEuNTNsMC4yLDEuNTZsLTAuOSwxLjAybC0wLjAxLDAuMzhsMS40MywxLjg4bDAuMDksMS4wNmwwLjA0LDAuMTNsMC44OSwxLjQ4bDAuMzcsMC4xMmwxLjAzLC0wLjQzbDEuNzksMS4xMmwwLjg5LDEuMzRaXCIsIFwibmFtZVwiOiBcIkFsZ2VyaWFcIn0sIFwiVVNcIjoge1wicGF0aFwiOiBcIk04OTIuNjQsOTkuMDVsMS4xNiwwLjU3bDAuMjEsMC4wMmwxLjQ1LC0wLjM4bDEuOTIsMC45OWwyLjE3LDAuNDdsLTEuNjUsMC43MmwtMS43NSwtMC43OWwtMC45MywtMC43bC0wLjIxLC0wLjA2bC0yLjExLDAuMjJsLTAuMzUsLTAuMmwwLjA5LC0wLjg3Wk0xODMuMjksMTUwLjM3bDAuMzksMS41NGwwLjEyLDAuMTdsMC43OCwwLjU1bDAuMTQsMC4wNWwxLjc0LDAuMmwyLjUyLDAuNWwyLjQsMC45OGwwLjE3LDAuMDJsMS45NiwtMC40bDMuMDEsMC44MWwwLjkxLC0wLjAybDIuMjIsLTAuODhsNC42NywyLjMzbDMuODYsMi4wMWwwLjIxLDAuNzFsMC4xNSwwLjE4bDAuMzMsMC4xN2wtMC4wMiwwLjA1bDAuMjMsMC40M2wwLjY3LDAuMWwwLjIxLC0wLjA1bDAuMSwtMC4wN2wwLjA1LDAuMjlsMC4wOSwwLjE2bDAuNSwwLjVsMC4yMSwwLjA5bDAuNTYsMC4wbDAuMTMsMC4xM2wtMC4yLDAuMzZsMC4xMiwwLjQxbDIuNDksMS4zOWwwLjk5LDUuMjRsLTAuNjksMS42OGwtMS4xNiwxLjY0bC0wLjYsMS4xOGwtMC4wNiwwLjMxbDAuMDQsMC4yMmwwLjI4LDAuNDNsMC4xMSwwLjFsMC44NSwwLjQ3bDAuMTUsMC4wNGwwLjYzLDAuMGwwLjE0LC0wLjA0bDIuODcsLTEuNThsMi42LC0wLjQ5bDMuMjgsLTEuNWwwLjE3LC0wLjIzbDAuMDQsLTAuNDNsLTAuMjMsLTAuOTNsLTAuMjQsLTAuMzlsMC43NCwtMC4zMmw0LjcsLTAuMDFsMC4yNSwtMC4xM2wwLjc3LC0xLjE1bDIuOSwtMi40MWwxLjA0LC0wLjUybDguMzUsLTAuMDJsMC4yOCwtMC4yMWwwLjIsLTAuNmwwLjcsLTAuMTRsMS4wNiwtMC40OGwwLjEzLC0wLjExbDAuOTIsLTEuNDlsMC43NSwtMi4zOWwxLjY3LC0yLjA4bDAuNTksMC42bDAuMywwLjA3bDEuNTIsLTAuNDlsMC44OCwwLjcybC0wLjAsNC4xNGwwLjA4LDAuMmwxLjYsMS43MmwwLjMxLDAuNzJsLTIuNDIsMS4zNWwtMi41NSwxLjA1bC0yLjY0LDAuOWwtMC4xNCwwLjExbC0xLjMzLDEuODFsLTAuNDQsMC43bC0wLjA1LDAuMTVsLTAuMDMsMS42bDAuMDMsMC4xNGwwLjgzLDEuNTlsMC4yNCwwLjE2bDAuNzgsMC4wNmwtMS4xNSwwLjMzbC0xLjI1LC0wLjA0bC0xLjgzLDAuNTJsLTIuNTEsMC4yOWwtMi4xNywwLjg4bC0wLjE3LDAuMzZsMC4zMywwLjIybDMuNTUsLTAuNTRsMC4xNSwwLjExbC0yLjg3LDAuNzNsLTEuMTksMC4wbC0wLjE2LC0wLjMzbC0wLjM2LDAuMDZsLTAuNzYsMC44MmwwLjE3LDAuNWwwLjQyLDAuMDhsLTAuNDUsMS43NWwtMS40LDEuNzRsLTAuMDQsLTAuMTdsLTAuMjEsLTAuMjJsLTAuNDgsLTAuMTNsLTAuNzcsLTAuNjlsLTAuMzYsLTAuMDNsLTAuMTIsMC4zNGwwLjUyLDEuNThsMC4wOSwwLjE0bDAuNTIsMC40M2wwLjAzLDAuODdsLTAuNzQsMS4wNWwtMC4zOSwwLjYzbDAuMDUsLTAuMTJsLTAuMDgsLTAuMzRsLTEuMTksLTEuMDNsLTAuMjgsLTIuMzFsLTAuMjYsLTAuMjZsLTAuMzIsMC4xOWwtMC40OCwxLjI3bC0wLjAxLDAuMTlsMC4zOSwxLjMzbC0xLjE0LC0wLjMxbC0wLjM2LDAuMThsMC4xNCwwLjM4bDEuNTcsMC44NWwwLjEsMi41OGwwLjIyLDAuMjhsMC41NSwwLjE1bDAuMjEsMC44MWwwLjMzLDIuNzJsLTEuNDYsMS45NGwtMi41LDAuODFsLTAuMTIsMC4wN2wtMS41OCwxLjU4bC0xLjE1LDAuMTdsLTAuMTUsMC4wNmwtMS4yNywxLjAzbC0wLjA5LDAuMTNsLTAuMzIsMC44NWwtMi43MSwxLjc5bC0xLjQ1LDEuMzdsLTEuMTgsMS42NGwtMC4wNSwwLjEybC0wLjM5LDEuOTZsMC4wLDAuMTNsMC40NCwxLjkxbDAuODUsMi4zN2wxLjEsMS45MWwwLjAzLDEuMmwxLjE2LDMuMDdsLTAuMDgsMS43NGwtMC4xLDAuOTlsLTAuNTcsMS40OGwtMC41NCwwLjI0bC0wLjk3LC0wLjI2bC0wLjM0LC0xLjAybC0wLjEyLC0wLjE2bC0wLjg5LC0wLjU4bC0yLjQ0LC00LjI4bC0wLjM0LC0wLjk0bDAuNDksLTEuNzFsLTAuMDIsLTAuMjFsLTAuNywtMS41bC0yLjAsLTIuMzVsLTAuMTEsLTAuMDhsLTAuOTgsLTAuNDJsLTAuMjUsMC4wMWwtMi40MiwxLjE5bC0wLjI2LC0wLjA4bC0xLjI2LC0xLjI5bC0xLjU3LC0wLjY4bC0wLjE2LC0wLjAybC0yLjc5LDAuMzRsLTIuMTgsLTAuM2wtMS45OCwwLjE5bC0xLjEyLDAuNDVsLTAuMTQsMC40NGwwLjQsMC42NWwtMC4wNCwxLjAybDAuMDksMC4yMmwwLjI5LDAuM2wtMC4wNiwwLjA1bC0wLjc3LC0wLjMzbC0wLjI2LDAuMDFsLTAuODcsMC40OGwtMS42NCwtMC4wOGwtMS43OSwtMS4zOWwtMC4yMywtMC4wNmwtMi4xMSwwLjMzbC0xLjc1LC0wLjYxbC0wLjE0LC0wLjAxbC0xLjYxLDAuMmwtMi4xMSwwLjY0bC0wLjExLDAuMDZsLTIuMjUsMS45OWwtMi41MywxLjIxbC0xLjQzLDEuMzhsLTAuNTgsMS4yMmwtMC4wMywwLjEybC0wLjAzLDEuODZsMC4xMywxLjMybDAuMywwLjYybC0wLjQ2LDAuMDRsLTEuNzEsLTAuNTdsLTEuODUsLTAuNzlsLTAuNjMsLTEuMTRsLTAuNTQsLTEuODVsLTAuMDcsLTAuMTJsLTEuNDUsLTEuNTFsLTAuODYsLTEuNThsLTEuMjYsLTEuODdsLTAuMDksLTAuMDlsLTEuNzYsLTEuMDlsLTAuMTcsLTAuMDRsLTIuMDUsMC4wNWwtMC4yMywwLjEybC0xLjQ0LDEuOTdsLTEuODQsLTAuNzJsLTEuMTksLTAuNzZsLTAuNiwtMS40NWwtMC45LC0xLjUybC0xLjQ5LC0xLjIxbC0xLjI3LC0wLjg3bC0wLjg5LC0wLjk2bC0wLjIyLC0wLjFsLTQuMzQsLTAuMGwtMC4zLDAuM2wtMC4wLDAuODRsLTYuNjIsMC4wMmwtNS42NiwtMS45M2wtMy40OCwtMS4yNGwwLjExLC0wLjI1bC0wLjMsLTAuNDJsLTMuMTgsMC4zbC0yLjYsMC4ybC0wLjM1LC0xLjE5bC0wLjA4LC0wLjEzbC0xLjYyLC0xLjYxbC0wLjEzLC0wLjA4bC0xLjAyLC0wLjI5bC0wLjIyLC0wLjY2bC0wLjI1LC0wLjJsLTEuMzEsLTAuMTNsLTAuODIsLTAuN2wtMC4xNiwtMC4wN2wtMi4yNSwtMC4yN2wtMC40OCwtMC4zNGwtMC4yOCwtMS40NGwtMC4wNywtMC4xNGwtMi40MSwtMi44NGwtMi4wMywtMy44OWwwLjA4LC0wLjU4bC0wLjEsLTAuMjdsLTEuMDgsLTAuOTRsLTEuODcsLTIuMzZsLTAuMzMsLTIuMzFsLTAuMDcsLTAuMTVsLTEuMjQsLTEuNWwwLjUyLC0yLjRsLTAuMDksLTIuNTdsLTAuNzgsLTIuM2wwLjk2LC0yLjgzbDAuNjEsLTUuNjZsLTAuNDYsLTQuMjZsLTAuNzksLTIuNzFsLTAuNjgsLTEuNGwwLjEzLC0wLjI2bDMuMjQsMC45N2wxLjI4LDIuODhsMC41MiwwLjA2bDAuNjIsLTAuODRsMC4wNiwtMC4yMmwtMC40LC0yLjYxbC0wLjc0LC0yLjI5bDY4LjksLTAuMGwwLjMsLTAuM2wwLjAxLC0wLjk1bDAuMzIsLTAuMDFaTTMyLjUsNjcuNDNsMS43NSwxLjk5bDAuNDEsMC4wNGwxLjAyLC0wLjgxbDMuNzksMC4yNWwtMC4xLDAuNzJsMC4yNCwwLjM0bDMuODMsMC43N2wyLjYsLTAuNDRsNS4yMSwxLjQxbDQuODQsMC40M2wxLjksMC41N2wwLjE1LDAuMDFsMy4yNSwtMC43MWwzLjcyLDEuMzJsMi41MiwwLjU4bC0wLjAzLDM4LjE0bDAuMjksMC4zbDIuNDEsMC4xMWwyLjM0LDEuMGwxLjcsMS41OWwyLjIyLDIuNDJsMC40MiwwLjAzbDIuNDEsLTIuMDRsMi4yNSwtMS4wOGwxLjIzLDEuNzZsMS43MSwxLjUzbDIuMjQsMS42MmwxLjU0LDIuNTZsMi41Niw0LjA5bDAuMTEsMC4xMWw0LjEsMi4xN2wwLjA2LDEuOTNsLTEuMTIsMS4zNWwtMS4yMiwtMS4xNGwtMi4wOCwtMS4wNWwtMC42OCwtMi45NGwtMC4wOSwtMC4xNmwtMy4xOCwtMi44NGwtMS4zMiwtMy4zNWwtMC4yNSwtMC4xOWwtMi40MywtMC4yNGwtMy45MywtMC4wOWwtMi44NSwtMS4wMmwtNS4yNCwtMy44NWwtNi43NywtMi4wNGwtMy41MiwwLjNsLTQuODQsLTEuN2wtMi45NiwtMS42bC0wLjIzLC0wLjAybC0yLjc4LDAuOGwtMC4yMSwwLjM1bDAuNDYsMi4zMWwtMS4xMSwwLjE5bC0yLjksMC43OGwtMi4yNCwxLjI2bC0yLjQyLDAuNjhsLTAuMjksLTEuNzlsMS4wNywtMy40OWwyLjU0LC0xLjExbDAuMTIsLTAuNDVsLTAuNjksLTAuOTZsLTAuNDEsLTAuMDdsLTMuMTksMi4xMmwtMS43NiwyLjU0bC0zLjU3LDIuNjJsLTAuMDMsMC40NmwxLjYzLDEuNTlsLTIuMTQsMi4zOGwtMi42NCwxLjQ5bC0yLjQ5LDEuMDlsLTAuMTYsMC4xN2wtMC41OCwxLjQ4bC0zLjgsMS43OWwtMC4xNCwwLjE0bC0wLjc1LDEuNTdsLTIuNzUsMS40MWwtMS42MiwtMC4yNWwtMC4xNiwwLjAybC0yLjM1LDAuOThsLTIuNTQsMS4xOWwtMi4wNiwxLjE1bC00LjA1LDAuOTNsLTAuMSwtMC4xNWwyLjQ1LC0xLjQ1bDIuNDksLTEuMWwyLjYxLC0xLjg4bDMuMDMsLTAuMzlsMC4xOSwtMC4xbDEuMiwtMS40MWwzLjQzLC0yLjExbDAuNjEsLTAuNzVsMS44MSwtMS4yNGwwLjEzLC0wLjJsMC40MiwtMi43bDEuMjQsLTIuMTJsLTAuMDMsLTAuMzVsLTAuMzQsLTAuMDlsLTIuNzMsMS4wNWwtMC42NywtMC41M2wtMC4zOSwwLjAybC0xLjEzLDEuMTFsLTEuNDMsLTEuNjJsLTAuNDksMC4wNmwtMC40MSwwLjhsLTAuNjcsLTEuMzFsLTAuNDIsLTAuMTJsLTIuNDMsMS40M2wtMS4xOCwtMC4wbC0wLjE4LC0xLjg2bDAuNDMsLTEuM2wtMC4wOSwtMC4zM2wtMS42MSwtMS4zM2wtMC4yNiwtMC4wNmwtMy4xMSwwLjY4bC0yLjAsLTEuNjZsLTEuNjEsLTAuODVsLTAuMDEsLTEuOTdsLTAuMTEsLTAuMjNsLTEuNzYsLTEuNDhsMC44NiwtMS45NmwyLjAxLC0yLjEzbDAuODgsLTEuOTRsMS43OSwtMC4yNWwxLjY1LDAuNmwwLjMxLC0wLjA2bDEuOTEsLTEuOGwxLjY3LDAuMzFsMC4yMiwtMC4wNGwxLjkxLC0xLjIzbDAuMTMsLTAuMzNsLTAuNDcsLTEuODJsLTAuMTUsLTAuMTlsLTEuMCwtMC41MmwxLjUxLC0xLjI3bDAuMDksLTAuMzRsLTAuMjksLTAuMTlsLTEuNjIsMC4wNmwtMi42NiwwLjg4bC0wLjEzLDAuMDlsLTAuNjIsMC43MmwtMS43NywtMC44bC0wLjE2LC0wLjAybC0zLjQ4LDAuNDRsLTMuNSwtMC45MmwtMS4wNiwtMS42MWwtMi43OCwtMi4wOWwzLjA3LC0xLjUxbDUuNTIsLTIuMDFsMS42NSwwLjBsLTAuMjgsMS43M2wwLjMxLDAuMzVsNS4yOSwtMC4xNmwwLjIzLC0wLjQ5bC0yLjAzLC0yLjU5bC0wLjEsLTAuMDhsLTMuMDMsLTEuNThsLTEuNzksLTIuMTJsLTIuNCwtMS44M2wtMy4xOCwtMS4yN2wxLjEzLC0xLjg0bDQuMjgsLTAuMTRsMC4xNSwtMC4wNWwzLjE2LC0yLjBsMC4xMywtMC4xN2wwLjU3LC0yLjA3bDIuNDMsLTIuMDJsMi40MiwtMC41Mmw0LjY3LC0xLjk4bDIuMjIsMC4yOWwwLjIsLTAuMDRsMy43NCwtMi4zN2wzLjU3LDAuOTFaTTM3LjY2LDEyMy40OWwtMi4zMSwxLjI2bC0xLjA0LC0wLjc1bC0wLjMxLC0xLjM1bDIuMDYsLTEuMTZsMS4yNCwtMC41MWwxLjQ4LDAuMjJsMC43NiwwLjgxbC0xLjg5LDEuNDlaTTMwLjg5LDIzMy44NGwxLjIsMC41N2wwLjM1LDAuM2wwLjQ4LDAuNjlsLTEuNiwwLjg2bC0wLjMsMC4zMWwtMC4yNCwtMC4xNGwwLjA1LC0wLjU0bC0wLjAyLC0wLjE1bC0wLjM2LC0wLjgzbDAuMDUsLTAuMTJsMC4zOSwtMC4zOGwwLjA3LC0wLjMxbC0wLjA5LC0wLjI3Wk0yOS4wNiwyMzEuODlsMC41LDAuMTRsMC4zMSwwLjE5bC0wLjQ2LDAuMWwtMC4zNCwtMC40M1pNMjUuMDIsMjMwLjEzbDAuMiwtMC4xMWwwLjQsMC40N2wtMC40MywtMC4wNWwtMC4xNywtMC4zMVpNMjEuMjksMjI4LjY4bDAuMSwtMC4wN2wwLjIyLDAuMDJsMC4wMiwwLjIxbC0wLjAyLDAuMDJsLTAuMzIsLTAuMThaTTYuMCwxMTMuMzNsLTEuMTksMC40NWwtMS41LC0wLjY0bC0wLjk0LC0wLjYzbDEuNzYsLTAuNDZsMS43MSwwLjI5bDAuMTYsMC45OFpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhXCJ9LCBcIkxWXCI6IHtcInBhdGhcIjogXCJNNDczLjk5LDEyNy4xNmwwLjA3LC0yLjE1bDEuMTUsLTIuMTFsMi4wNSwtMS4wN2wxLjg0LDIuNDhsMC4yNSwwLjEybDIuMDEsLTAuMDdsMC4yOSwtMC4yNWwwLjQ1LC0yLjU4bDEuODUsLTAuNTZsMC45OCwwLjRsMi4xMywxLjMzbDAuMTYsMC4wNWwxLjk3LDAuMDFsMS4wMiwwLjdsMC4yMSwxLjY3bDAuNzEsMS44NGwtMi40NCwxLjIzbC0xLjM2LDAuNTNsLTIuMjgsLTEuNjJsLTAuMTIsLTAuMDVsLTEuMTgsLTAuMmwtMC4yOCwtMC42bC0wLjMxLC0wLjE3bC0yLjQzLDAuMzVsLTQuMTcsLTAuMjNsLTAuMTIsMC4wMmwtMi40NSwwLjkzWlwiLCBcIm5hbWVcIjogXCJMYXR2aWFcIn0sIFwiVVlcIjoge1wicGF0aFwiOiBcIk0yNzYuOSwzNjMuMTdsMS4zLC0wLjIzbDIuNCwyLjA0bDAuMjIsMC4wN2wwLjgyLC0wLjA3bDIuNDgsMS43bDEuOTMsMS41bDEuMjgsMS42N2wtMC45NSwxLjE0bC0wLjA0LDAuMzFsMC42MywxLjQ1bC0wLjk2LDEuNTdsLTIuNjUsMS40N2wtMS43MywtMC41M2wtMC4xNSwtMC4wMWwtMS4yNSwwLjI4bC0yLjIyLC0xLjE2bC0wLjE2LC0wLjAzbC0xLjU2LDAuMDhsLTEuMzMsLTEuMzZsMC4xNywtMS41OGwwLjQ4LC0wLjU1bDAuMDcsLTAuMmwtMC4wMiwtMi43NGwwLjY2LC0yLjhsMC41NywtMi4wMlpcIiwgXCJuYW1lXCI6IFwiVXJ1Z3VheVwifSwgXCJMQlwiOiB7XCJwYXRoXCI6IFwiTTUxMC40NCwxOTguMTFsLTAuNDgsMC4wM2wtMC4yNiwwLjE3bC0wLjE1LDAuMzJsLTAuMjEsLTAuMGwwLjcyLC0xLjg1bDEuMTksLTEuOWwwLjc0LDAuMDlsMC4yNywwLjczbC0xLjE5LDAuOTNsLTAuMDksMC4xM2wtMC41NCwxLjM2WlwiLCBcIm5hbWVcIjogXCJMZWJhbm9uXCJ9LCBcIkxBXCI6IHtcInBhdGhcIjogXCJNNjg0Ljg3LDI0OC44bDAuNjEsLTAuODZsMC4wNSwtMC4xNmwwLjExLC0yLjE3bC0wLjA4LC0wLjIybC0xLjk2LC0yLjE2bC0wLjE1LC0yLjQ0bC0wLjA4LC0wLjE4bC0xLjksLTIuMWwtMC4xOSwtMC4xbC0xLjg5LC0wLjE4bC0wLjI5LDAuMTVsLTAuNDIsMC43NmwtMS4yMSwwLjA2bC0wLjY3LC0wLjQxbC0wLjMxLC0wLjBsLTIuMiwxLjI5bC0wLjA1LC0xLjc3bDAuNjEsLTIuN2wtMC4yNywtMC4zN2wtMS40NCwtMC4xbC0wLjEyLC0xLjMxbC0wLjEyLC0wLjIxbC0wLjg3LC0wLjY1bDAuMzgsLTAuNjhsMS43NiwtMS40MWwwLjA4LDAuMjJsMC4yNywwLjJsMS4zMywwLjA3bDAuMzEsLTAuMzRsLTAuMzUsLTIuNzVsMC44NSwtMC4yNWwxLjMyLDEuODhsMS4xMSwyLjM2bDAuMjcsMC4xN2wyLjg5LDAuMDJsMC43OCwxLjgybC0xLjMyLDAuNTZsLTAuMTIsMC4wOWwtMC43MiwwLjkzbDAuMSwwLjQ1bDIuOTMsMS41MmwzLjYyLDUuMjdsMS44OCwxLjc4bDAuNTgsMS42N2wtMC4zOCwyLjExbC0xLjg3LC0wLjc5bC0wLjM3LDAuMTFsLTAuOTksMS41NGwtMS41MSwtMC43M1pcIiwgXCJuYW1lXCI6IFwiTGFvc1wifSwgXCJUV1wiOiB7XCJwYXRoXCI6IFwiTTcyNS42LDIyMi41bC0xLjUsNC4yMmwtMC44MiwxLjY1bC0xLjAxLC0xLjdsLTAuMjYsLTEuOGwxLjQsLTIuNDhsMS44LC0xLjgxbDAuNzYsMC41M2wtMC4zOCwxLjM5WlwiLCBcIm5hbWVcIjogXCJUYWl3YW5cIn0sIFwiVFRcIjoge1wicGF0aFwiOiBcIk0yNjYuMzUsMjU5LjQ2bDAuNDEsLTAuMzlsMC4wOSwtMC4yM2wtMC4wNCwtMC43NWwxLjE0LC0wLjI2bDAuMiwwLjAzbC0wLjA3LDEuMzdsLTEuNzMsMC4yM1pcIiwgXCJuYW1lXCI6IFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wifSwgXCJUUlwiOiB7XCJwYXRoXCI6IFwiTTUxMy4yNSwxNzUuMzhsMy42MywxLjE3bDAuMTQsMC4wMWwyLjg4LC0wLjQ1bDIuMTEsMC4yNmwwLjE4LC0wLjAzbDIuOSwtMS41M2wyLjUxLC0wLjEzbDIuMjUsMS4zN2wwLjM2LDAuODhsLTAuMjMsMS4zNmwwLjE5LDAuMzNsMS44MSwwLjcybDAuNjEsMC41M2wtMS4zMSwwLjY0bC0wLjE2LDAuMzRsMC43NiwzLjI0bC0wLjQ0LDAuOGwwLjAxLDAuM2wxLjE5LDIuMDJsLTAuNzEsMC4yOWwtMC43NCwtMC42MmwtMC4xNSwtMC4wN2wtMi45MSwtMC4zN2wtMC4xNSwwLjAybC0xLjA0LDAuNDNsLTIuNzgsMC40NGwtMS40NCwtMC4wM2wtMi44MywxLjA2bC0xLjk1LDAuMDFsLTEuMjgsLTAuNTJsLTAuMiwtMC4wMWwtMi42MiwwLjc2bC0wLjcsLTAuNDhsLTAuNDcsMC4yMmwtMC4xMywxLjQ5bC0xLjAxLDAuOTRsLTAuNTgsLTAuODJsMC43OSwtMC45bDAuMDQsLTAuMzRsLTAuMzEsLTAuMTVsLTEuNDYsMC4yM2wtMi4wMywtMC42NGwtMC4zLDAuMDdsLTEuNjUsMS41OGwtMy41OCwwLjNsLTEuOTQsLTEuNDdsLTAuMTcsLTAuMDZsLTIuNywtMC4xbC0wLjI4LDAuMTdsLTAuNTEsMS4wNmwtMS40NywwLjI5bC0yLjMyLC0xLjQ2bC0wLjE3LC0wLjA1bC0yLjU1LDAuMDVsLTEuNCwtMi43bC0xLjcyLC0xLjU0bDEuMTEsLTIuMDZsLTAuMDcsLTAuMzdsLTEuMzUsLTEuMTlsMi40NywtMi41MWwzLjc0LC0wLjExbDAuMjYsLTAuMTdsMC45NiwtMi4wN2w0LjU2LDAuMzhsMC4xOSwtMC4wNWwyLjk3LC0xLjkybDIuODQsLTAuODNsNC4wMywtMC4wNmw0LjMxLDIuMDhaTTQ4OC44NSwxNzYuOGwtMS44MSwxLjM4bC0wLjU3LC0xLjAxbDAuMDIsLTAuMzZsMC40NSwtMC4yNWwwLjEzLC0wLjE1bDAuNzgsLTEuODdsLTAuMTEsLTAuMzdsLTAuNzIsLTAuNDdsMS45MSwtMC43MWwxLjg5LDAuMzVsMC4yNSwwLjk3bDAuMTcsMC4ybDEuODcsMC44M2wtMC4xOSwwLjMxbC0yLjgyLDAuMTZsLTAuMTgsMC4wN2wtMS4wNiwwLjkxWlwiLCBcIm5hbWVcIjogXCJUdXJrZXlcIn0sIFwiTEtcIjoge1wicGF0aFwiOiBcIk02MjUuNDQsMjY2LjA3bC0wLjM1LDIuNGwtMC45LDAuNjFsLTEuOTEsMC41bC0xLjA0LC0xLjc1bC0wLjQzLC0zLjVsMS4wLC0zLjZsMS4zNCwxLjA5bDEuMTMsMS43MmwxLjE2LDIuNTJaXCIsIFwibmFtZVwiOiBcIlNyaSBMYW5rYVwifSwgXCJUTlwiOiB7XCJwYXRoXCI6IFwiTTQ0NC45MSwyMDYuMThsLTAuOTksLTQuNTdsLTAuMTIsLTAuMThsLTEuNDMsLTEuMDRsLTAuMDIsLTAuNTNsLTAuMTEsLTAuMjJsLTEuOTUsLTEuNTlsLTAuMTksLTEuODVsMS40NCwtMS40N2wwLjA4LC0wLjE0bDAuNTksLTIuMzRsLTAuMzgsLTIuNzdsMC40NCwtMS4yOGwyLjUyLC0xLjA4bDEuNDEsMC4yOGwtMC4wNiwxLjJsMC40MywwLjI4bDEuODEsLTAuOWwwLjAyLDAuMDZsLTEuMTQsMS4yOGwtMC4wOCwwLjJsLTAuMDIsMS4zMmwwLjExLDAuMjRsMC43NCwwLjZsLTAuMjksMi4xOGwtMS41NiwxLjM1bC0wLjA5LDAuMzJsMC40OCwxLjU0bDAuMjgsMC4yMWwxLjExLDAuMDRsMC41NSwxLjE3bDAuMTUsMC4xNGwwLjc2LDAuMzVsLTAuMTIsMS43OWwtMS4xLDAuNzJsLTAuOCwwLjkxbC0xLjY4LDEuMDRsLTAuMTMsMC4zMmwwLjI1LDEuMDhsLTAuMTgsMC45NmwtMC43NCwwLjM5WlwiLCBcIm5hbWVcIjogXCJUdW5pc2lhXCJ9LCBcIlRMXCI6IHtcInBhdGhcIjogXCJNNzM0LjIxLDMwNy4yMmwwLjE3LC0wLjM0bDEuOTksLTAuNTJsMS43MiwtMC4wOGwwLjc4LC0wLjNsMC4yOSwwLjFsLTAuNDMsMC4zMmwtMi41NywxLjA5bC0xLjcxLDAuNTlsLTAuMDUsLTAuNDlsLTAuMTksLTAuMzZaXCIsIFwibmFtZVwiOiBcIkVhc3QgVGltb3JcIn0sIFwiVE1cIjoge1wicGF0aFwiOiBcIk01NTMuMTYsMTczLjUxbC0wLjEyLDEuMGwtMC4yNiwtMC42NWwwLjM4LC0wLjM0Wk01NTMuNTQsMTczLjE2bDAuMTMsLTAuMTJsMC40MywtMC4wOWwtMC41NiwwLjIxWk01NTUuNjgsMTcyLjZsMC42NSwtMC4xNGwxLjUzLDAuNzZsMS43MSwyLjI5bDAuMjcsMC4xMmwxLjI3LC0wLjE0bDIuODEsLTAuMDRsMC4yOSwtMC4zOGwtMC4zNSwtMS4yN2wxLjk4LC0wLjk3bDEuOTYsLTEuNjNsMy4wNSwxLjQ0bDAuMjUsMi4yM2wwLjE0LDAuMjJsMC45NiwwLjYxbDAuMTgsMC4wNWwyLjYxLC0wLjEzbDAuNjgsMC40NGwxLjIsMi45N2wwLjEsMC4xM2wyLjg1LDIuMDNsMS42NywxLjQxbDIuNjYsMS40NWwzLjEzLDEuMTdsLTAuMDUsMS4yM2wtMC4zNiwtMC4wNGwtMS4xMiwtMC43M2wtMC40NCwwLjE0bC0wLjM0LDAuODlsLTEuOTYsMC41MmwtMC4yMiwwLjIzbC0wLjQ3LDIuMTdsLTEuMjYsMC43OGwtMS45MywwLjQybC0wLjIxLDAuMThsLTAuNDYsMS4xNGwtMS42NCwwLjMzbC0yLjMsLTAuOTdsLTAuMiwtMi4yM2wtMC4yOCwtMC4yN2wtMS43NiwtMC4xbC0yLjc4LC0yLjQ4bC0wLjE1LC0wLjA3bC0xLjk1LC0wLjMxbC0yLjgyLC0xLjQ4bC0xLjc4LC0wLjI3bC0wLjE4LDAuMDNsLTEuMDMsMC41MWwtMS42LC0wLjA4bC0wLjIyLDAuMDhsLTEuNzIsMS42bC0xLjgzLDAuNDZsLTAuMzksLTEuN2wwLjM2LC0zLjBsLTAuMTYsLTAuM2wtMS43MywtMC44OGwwLjU3LC0xLjc3bC0wLjI1LC0wLjM5bC0xLjMzLC0wLjE0bDAuNDEsLTEuODVsMi4wNSwwLjYzbDAuMjEsLTAuMDFsMi4yLC0wLjk1bDAuMDksLTAuNDlsLTEuNzgsLTEuNzVsLTAuNjksLTEuNjZsLTAuMDcsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlR1cmttZW5pc3RhblwifSwgXCJUSlwiOiB7XCJwYXRoXCI6IFwiTTU5Ny45OSwxNzguNzFsLTAuMjMsMC4yM2wtMi41NywtMC40N2wtMC4zNSwwLjI1bC0wLjI0LDEuN2wwLjMyLDAuMzRsMi42NiwtMC4yMmwzLjE1LDAuOTVsNC40NywtMC40MmwwLjU4LDIuNDVsMC4zOSwwLjIxbDAuNzEsLTAuMjVsMS4yMiwwLjUzbC0wLjA2LDEuMDFsMC4yOSwxLjI4bC0yLjE5LC0wLjBsLTEuNzEsLTAuMjFsLTAuMjMsMC4wN2wtMS41MSwxLjI1bC0xLjA1LDAuMjdsLTAuNzcsMC41MWwtMC43MSwtMC42N2wwLjIyLC0yLjI4bC0wLjI0LC0wLjMybC0wLjQzLC0wLjA4bDAuMTcsLTAuNTdsLTAuMTYsLTAuMzZsLTEuMzYsLTAuNjZsLTAuMzQsMC4wNWwtMS4wOCwxLjAxbC0wLjA5LDAuMTVsLTAuMjUsMS4wOWwtMC4yNCwwLjI2bC0xLjM2LC0wLjA1bC0wLjI3LDAuMTRsLTAuNjUsMS4wNmwtMC41OCwtMC4zOWwtMC4zLC0wLjAybC0xLjY4LDAuODZsLTAuMzYsLTAuMTZsMS4yOCwtMi42NWwwLjAyLC0wLjJsLTAuNTQsLTIuMTdsLTAuMTgsLTAuMjFsLTEuNTMsLTAuNThsMC40MSwtMC44MmwxLjg5LDAuMTNsMC4yNiwtMC4xMmwxLjE5LC0xLjYzbDAuNzcsLTEuODJsMi42NiwtMC41NWwtMC4zMywwLjg3bDAuMDEsMC4yM2wwLjM2LDAuODJsMC4zLDAuMThsMC4yMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiVGFqaWtpc3RhblwifSwgXCJMU1wiOiB7XCJwYXRoXCI6IFwiTTQ5My4zMiwzNTkuNjlsMC42OSwwLjY1bC0wLjY1LDEuMTJsLTAuMzgsMC44bC0xLjI3LDAuMzlsLTAuMTgsMC4xNWwtMC40LDAuNzdsLTAuNTksMC4xOGwtMS41OSwtMS43OGwxLjE2LC0xLjVsMS4zLC0xLjAybDAuOTcsLTAuNDZsMC45NCwwLjcyWlwiLCBcIm5hbWVcIjogXCJMZXNvdGhvXCJ9LCBcIlRIXCI6IHtcInBhdGhcIjogXCJNNjc3LjQyLDI1My42OGwtMS43LC0wLjg4bC0wLjE0LC0wLjAzbC0xLjc3LDAuMDRsMC4zLC0xLjY0bC0wLjMsLTAuMzVsLTIuMjEsMC4wMWwtMC4zLDAuMjhsLTAuMiwyLjc2bC0yLjE1LDUuOWwtMC4wMiwwLjEzbDAuMTcsMS44M2wwLjI4LDAuMjdsMS40NSwwLjA3bDAuOTMsMi4xbDAuNDQsMi4xNWwwLjA4LDAuMTVsMS40LDEuNDRsMC4xNiwwLjA5bDEuNDMsMC4yN2wxLjA0LDEuMDVsLTAuNTgsMC43M2wtMS4yNCwwLjIybC0wLjE1LC0wLjk5bC0wLjE1LC0wLjIybC0yLjA0LC0xLjFsLTAuMzYsMC4wNmwtMC4yMywwLjIzbC0wLjcyLC0wLjcxbC0wLjQxLC0xLjE4bC0wLjA2LC0wLjExbC0xLjMzLC0xLjQybC0xLjIyLC0xLjJsLTAuNSwwLjEzbC0wLjE1LDAuNTRsLTAuMTQsLTAuNDFsMC4yNiwtMS40OGwwLjczLC0yLjM4bDEuMiwtMi41N2wxLjM3LC0yLjM1bDAuMDIsLTAuMjdsLTAuOTUsLTIuMjZsMC4wMywtMS4xOWwtMC4yOSwtMS40MmwtMC4wNiwtMC4xM2wtMS42NSwtMi4wbC0wLjQ2LC0wLjk5bDAuNjIsLTAuMzRsMC4xMywtMC4xNWwwLjkyLC0yLjIzbC0wLjAyLC0wLjI3bC0xLjA1LC0xLjc0bC0xLjU3LC0xLjg2bC0xLjA0LC0xLjk2bDAuNzYsLTAuMzRsMC4xNiwtMC4xNmwxLjA3LC0yLjYzbDEuNTgsLTAuMWwwLjE2LC0wLjA2bDEuNDMsLTEuMTFsMS4yNCwtMC41MmwwLjg0LDAuNjJsMC4xMywxLjQzbDAuMjgsMC4yN2wxLjM0LDAuMDlsLTAuNTQsMi4zOWwwLjA1LDIuMzlsMC40NSwwLjI1bDIuNDgsLTEuNDVsMC42LDAuMzZsMC4xNywwLjA0bDEuNDcsLTAuMDdsMC4yNSwtMC4xNWwwLjQxLC0wLjczbDEuNTgsMC4xNWwxLjc2LDEuOTNsMC4xNSwyLjQ0bDAuMDgsMC4xOGwxLjk0LDIuMTVsLTAuMSwxLjk2bC0wLjY2LDAuOTNsLTIuMjUsLTAuMzRsLTMuMjQsMC40OWwtMC4xOSwwLjEybC0xLjYsMi4xMmwtMC4wNiwwLjI0bDAuNDgsMi40NlpcIiwgXCJuYW1lXCI6IFwiVGhhaWxhbmRcIn0sIFwiVEZcIjoge1wicGF0aFwiOiBcIk01OTMuNzYsNDE3LjczbDEuMzgsMC44NGwyLjE1LDAuMzdsMC4wNCwwLjMxbC0wLjU5LDEuMjRsLTMuMzYsMC4xOWwtMC4wNSwtMS4zOGwwLjQzLC0xLjU2WlwiLCBcIm5hbWVcIjogXCJGcmVuY2ggU291dGhlcm4gYW5kIEFudGFyY3RpYyBMYW5kc1wifSwgXCJUR1wiOiB7XCJwYXRoXCI6IFwiTTQyNS4yMywyNjkuMjlsLTEuNDksMC40bC0wLjQzLC0wLjY4bC0wLjY0LC0xLjU0bC0wLjE4LC0xLjE2bDAuNTQsLTIuMjFsLTAuMDQsLTAuMjRsLTAuNTksLTAuODZsLTAuMjMsLTEuOWwwLjAsLTEuODJsLTAuMDcsLTAuMTlsLTAuOTUsLTEuMTlsMC4xLC0wLjQxbDEuNTgsMC4wNGwtMC4yMywwLjk3bDAuMDgsMC4yOGwxLjU1LDEuNTVsMC4wOSwxLjEzbDAuMDgsMC4xOWwwLjQyLDAuNDNsLTAuMTEsNS42NmwwLjUyLDEuNTNaXCIsIFwibmFtZVwiOiBcIlRvZ29cIn0sIFwiVERcIjoge1wicGF0aFwiOiBcIk00NTcuNTcsMjUyLjQ2bDAuMjMsLTEuMDhsLTAuMjgsLTAuMzZsLTEuMzIsLTAuMDVsMC4wLC0xLjM1bC0wLjEsLTAuMjJsLTAuOSwtMC44MmwwLjk5LC0zLjFsMy4xMiwtMi4zN2wwLjEyLC0wLjIzbDAuMTMsLTMuMzNsMC45NSwtNS4ybDAuNTMsLTEuMDlsLTAuMDcsLTAuMzZsLTAuOTQsLTAuODFsLTAuMDMsLTAuN2wtMC4xMiwtMC4yM2wtMC44NCwtMC42MWwtMC41NywtMy43NmwyLjIxLC0xLjI2bDE5LjY3LDkuODhsMC4xMiw5Ljc0bC0xLjgzLC0wLjE1bC0wLjI4LDAuMTRsLTEuMTQsMS44OWwtMC42OCwxLjYybDAuMDUsMC4zMWwwLjMzLDAuMzhsLTAuNjEsMC41OGwtMC4wOCwwLjNsMC4yNSwwLjkzbC0wLjU4LDAuOTVsLTAuMjksMS4wMWwwLjM0LDAuMzdsMC42NywtMC4xMWwwLjM5LDAuNzNsMC4wMywxLjRsMC4xMSwwLjIzbDAuOCwwLjY1bC0wLjAxLDAuMjRsLTEuMzgsMC4zN2wtMC4xMSwwLjA2bC0xLjI3LDEuMDNsLTEuODMsMi43NmwtMi4yMSwxLjFsLTIuMzQsLTAuMTVsLTAuODIsMC4yNWwtMC4yLDAuMzdsMC4xOSwwLjY4bC0xLjE2LDAuNzlsLTEuMDEsMC45NGwtMi45MiwwLjg5bC0wLjUsLTAuNDZsLTAuMTcsLTAuMDhsLTAuNDEsLTAuMDVsLTAuMjgsMC4xMmwtMC4zOCwwLjU0bC0xLjM2LDAuMTJsMC4xLC0wLjE4bDAuMDEsLTAuMjdsLTAuNzgsLTEuNzJsLTAuMzUsLTEuMDNsLTAuMTcsLTAuMThsLTEuMDMsLTAuNDFsLTEuMjksLTEuMjhsMC4zNiwtMC43OGwwLjksMC4ybDAuMTQsLTAuMGwwLjY3LC0wLjE3bDEuMzYsMC4wMmwwLjI2LC0wLjQ1bC0xLjMyLC0yLjIybDAuMDksLTEuNjRsLTAuMTcsLTEuNjhsLTAuMDQsLTAuMTNsLTAuOTMsLTEuNTNaXCIsIFwibmFtZVwiOiBcIkNoYWRcIn0sIFwiTFlcIjoge1wicGF0aFwiOiBcIk00NTcuOTksMjI2LjM4bC0xLjU3LDAuODdsLTEuMjUsLTEuMjhsLTAuMTMsLTAuMDhsLTMuODUsLTEuMTFsLTEuMDQsLTEuNTdsLTAuMDksLTAuMDlsLTEuOTgsLTEuMjNsLTAuMjcsLTAuMDJsLTAuOTMsMC4zOWwtMC43MiwtMS4ybC0wLjA5LC0xLjA3bC0wLjA2LC0wLjE2bC0xLjMzLC0xLjc1bDAuODMsLTAuOTRsMC4wNywtMC4yNGwtMC4yMSwtMS42NGwwLjMxLC0xLjQzbC0wLjE3LC0xLjI5bDAuNDMsLTIuMjZsLTAuMTUsLTEuMzNsLTAuNzMsLTIuMThsMC45OSwtMC41MmwwLjE2LC0wLjIxbDAuMjIsLTEuMTZsLTAuMjIsLTEuMDZsMS41NCwtMC45NWwwLjgxLC0wLjkybDEuMTksLTAuNzhsMC4xNCwtMC4yM2wwLjEyLC0xLjc2bDIuNTcsMC44NGwwLjE2LDAuMDFsMC45OSwtMC4yM2wyLjAxLDAuNDVsMy4xOSwxLjJsMS4xMiwyLjM2bDAuMiwwLjE2bDIuMjQsMC41M2wzLjUsMS4xNGwyLjY1LDEuMzZsMC4yOSwtMC4wMWwxLjIyLC0wLjcxbDEuMjcsLTEuMzJsMC4wNywtMC4yOWwtMC41NSwtMi4wbDAuNjksLTEuMTlsMS43LC0xLjIzbDEuNjEsLTAuMzVsMy4yLDAuNTRsMC43OCwxLjE0bDAuMjQsMC4xM2wwLjg1LDAuMDFsMC44NCwwLjQ3bDIuMzUsMC4zMWwwLjQyLDAuNjNsLTAuNzksMS4xNmwtMC4wNCwwLjI2bDAuMzUsMS4wOGwtMC42MSwxLjZsLTAuMCwwLjJsMC43MywyLjE2bDAuMCwyNC4yNGwtMi41OCwwLjAxbC0wLjMsMC4yOWwtMC4wMiwwLjYybC0xOS41NSwtOS44M2wtMC4yOCwwLjAxbC0yLjUzLDEuNDRaXCIsIFwibmFtZVwiOiBcIkxpYnlhXCJ9LCBcIkFFXCI6IHtcInBhdGhcIjogXCJNNTUwLjU5LDIyMy44bDAuMTIsMC4wOGwxLjkyLC0wLjQxbDMuNTQsMC4xNWwwLjIzLC0wLjA5bDEuNzEsLTEuNzlsMS44NiwtMS43bDEuMzEsLTEuMzZsMC4yNiwwLjVsMC4yOCwxLjcybC0wLjkzLDAuMDFsLTAuMywwLjI2bC0wLjIxLDEuNzNsMC4xMSwwLjI3bDAuMDgsMC4wNmwtMC43LDAuMzJsLTAuMTcsMC4yN2wtMC4wMSwwLjk5bC0wLjY4LDEuMDJsLTAuMDUsMC4xNWwtMC4wNiwwLjk2bC0wLjMyLDAuMzZsLTcuMTksLTEuMjdsLTAuNzksLTIuMjJaXCIsIFwibmFtZVwiOiBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCJ9LCBcIlZFXCI6IHtcInBhdGhcIjogXCJNMjQwLjY2LDI1Ni41bDAuNjUsMC45MWwtMC4wMywxLjEzbC0xLjA1LDEuMzlsLTAuMDMsMC4zMWwwLjk1LDIuMGwwLjMyLDAuMTdsMS4wOCwtMC4xNmwwLjI0LC0wLjIxbDAuNTYsLTEuODNsLTAuMDYsLTAuMjlsLTAuNzEsLTAuODFsLTAuMSwtMS41OGwyLjksLTAuOTZsMC4xOSwtMC4zN2wtMC4yOSwtMS4wMmwwLjQ1LC0wLjQxbDAuNzIsMS40M2wwLjI2LDAuMTZsMS42NSwwLjA0bDEuNDYsMS4yN2wwLjA4LDAuNzJsMC4zLDAuMjdsMi4yOCwwLjAybDIuNTUsLTAuMjVsMS4zNCwxLjA2bDAuMTQsMC4wNmwxLjkyLDAuMzFsMC4yLC0wLjAzbDEuNCwtMC43OWwwLjE1LC0wLjI1bDAuMDIsLTAuMzZsMi44MiwtMC4xNGwxLjE3LC0wLjAxbC0wLjQxLDAuMTRsLTAuMTQsMC40NmwwLjg2LDEuMTlsMC4yMiwwLjEybDEuOTMsMC4xOGwxLjczLDEuMTNsMC4zNywxLjlsMC4zMSwwLjI0bDEuMjEsLTAuMDVsMC41MiwwLjMybC0xLjYzLDEuMjFsLTAuMTEsMC4xN2wtMC4yMiwwLjkybDAuMDcsMC4yN2wwLjYzLDAuNjlsLTAuMzEsMC4yNGwtMS40OCwwLjM5bC0wLjIyLDAuM2wwLjA0LDEuMDNsLTAuNTksMC42bC0wLjAxLDAuNDFsMS42NywxLjg3bDAuMjMsMC40OGwtMC43MiwwLjc2bC0yLjcxLDAuOTFsLTEuNzgsMC4zOWwtMC4xMywwLjA2bC0wLjYsMC40OWwtMS44NCwtMC41OGwtMS44OSwtMC4zM2wtMC4xOCwwLjAzbC0wLjQ3LDAuMjNsLTAuMDIsMC41M2wwLjk2LDAuNTZsLTAuMDgsMS41OGwwLjM1LDEuNThsMC4yNiwwLjIzbDEuOTEsMC4xOWwwLjAyLDAuMDdsLTEuNTQsMC42MmwtMC4xOCwwLjJsLTAuMjUsMC45MmwtMC44OCwwLjM1bC0xLjg1LDAuNThsLTAuMTYsMC4xM2wtMC40LDAuNjRsLTEuNjYsMC4xNGwtMS4yMiwtMS4xOGwtMC43OSwtMi41MmwtMC42NywtMC44OGwtMC42NiwtMC40M2wwLjk5LC0wLjk4bDAuMDksLTAuMjZsLTAuMDksLTAuNTZsLTAuMDgsLTAuMTZsLTAuNjYsLTAuNjlsLTAuNDcsLTEuNTRsMC4xOCwtMS42N2wwLjU1LC0wLjg1bDAuNDUsLTEuMzVsLTAuMTUsLTAuMzZsLTAuODksLTAuNDNsLTAuMTksLTAuMDJsLTEuMzksMC4yOGwtMS43NiwtMC4xM2wtMC45MiwwLjIzbC0xLjY0LC0yLjAxbC0wLjE3LC0wLjFsLTEuNTQsLTAuMzNsLTMuMDUsMC4yM2wtMC41LC0wLjczbC0wLjE1LC0wLjEybC0wLjQ1LC0wLjE1bC0wLjA1LC0wLjI4bDAuMjgsLTAuODZsMC4wMSwtMC4xNWwtMC4yLC0xLjAxbC0wLjA4LC0wLjE1bC0wLjUsLTAuNWwtMC4zLC0xLjA4bC0wLjI1LC0wLjIybC0wLjg5LC0wLjEybDAuNTQsLTEuMThsMC4yOSwtMS43M2wwLjY2LC0wLjg1bDAuOTQsLTAuN2wwLjA5LC0wLjExbDAuMywtMC42WlwiLCBcIm5hbWVcIjogXCJWZW5lenVlbGFcIn0sIFwiQUZcIjoge1wicGF0aFwiOiBcIk01NzQuNDIsMTkyLjFsMi4yNCwwLjk1bDAuMTgsMC4wMmwxLjg5LC0wLjM4bDAuMjIsLTAuMThsMC40NiwtMS4xNGwxLjgyLC0wLjRsMS41LC0wLjkxbDAuMTQsLTAuMTlsMC40NiwtMi4xMmwxLjkzLC0wLjUxbDAuMiwtMC4xOGwwLjI2LC0wLjY4bDAuODcsMC41N2wwLjEzLDAuMDVsMC43OSwwLjA5bDEuMzUsMC4wMmwxLjgzLDAuNTlsMC43NSwwLjM0bDAuMjYsLTAuMDFsMS42NiwtMC44NWwwLjcsMC40NmwwLjQyLC0wLjA5bDAuNzIsLTEuMTdsMS4zMiwwLjA1bDAuMjMsLTAuMWwwLjM5LC0wLjQzbDAuMDcsLTAuMTRsMC4yNCwtMS4wOGwwLjg2LC0wLjgxbDAuOTQsMC40NmwtMC4yLDAuNjRsMC4yMywwLjM4bDAuNDksMC4wOWwtMC4yMSwyLjE1bDAuMDksMC4yNWwwLjk5LDAuOTRsMC4zOCwwLjAzbDAuODMsLTAuNTdsMS4wNiwtMC4yN2wwLjEyLC0wLjA2bDEuNDYsLTEuMjFsMS42MywwLjJsMi40LDAuMGwwLjE3LDAuMzJsLTEuMTIsMC4yNWwtMS4yMywwLjUybC0yLjg2LDAuMzNsLTIuNjksMC42bC0wLjEzLDAuMDZsLTEuNDYsMS4yNWwtMC4wNywwLjM2bDAuNTgsMS4xOGwwLjI1LDEuMjFsLTEuMTMsMS4wOGwtMC4wOSwwLjI1bDAuMDksMC45OGwtMC41MywwLjc5bC0yLjIyLC0wLjA4bC0wLjI4LDAuNDRsMC44MywxLjU3bC0xLjMsMC41OGwtMC4xMywwLjExbC0xLjA2LDEuNjlsLTAuMDUsMC4xOGwwLjEzLDEuNTFsLTAuNzMsMC41OGwtMC43OCwtMC4yMmwtMC4xNCwtMC4wMWwtMS45MSwwLjM2bC0wLjIzLDAuMTlsLTAuMiwwLjU3bC0xLjY1LC0wLjBsLTAuMjIsMC4xbC0xLjQsMS41NmwtMC4wOCwwLjE5bC0wLjA4LDIuMTNsLTIuOTksMS4wNWwtMS42NywtMC4yM2wtMC4yNywwLjFsLTAuMzksMC40NmwtMS40MywtMC4zMWwtMi40MywwLjRsLTMuNjksLTEuMjNsMS45NiwtMi4xNWwwLjA4LC0wLjI0bC0wLjIxLC0xLjc4bC0wLjIzLC0wLjI2bC0xLjY5LC0wLjQybC0wLjE5LC0xLjYybC0wLjc3LC0yLjA4bDAuOTgsLTEuNDFsLTAuMTQsLTAuNDVsLTAuODIsLTAuMzFsMC42LC0xLjc5bDAuOTMsLTMuMjFaXCIsIFwibmFtZVwiOiBcIkFmZ2hhbmlzdGFuXCJ9LCBcIklRXCI6IHtcInBhdGhcIjogXCJNNTM0LjQyLDE5MC44OWwwLjEzLDAuMTRsMS41LDAuNzhsMC4xNSwxLjM0bC0xLjEzLDAuODdsLTAuMTEsMC4xNmwtMC41OCwyLjJsMC4wNCwwLjI0bDEuNzMsMi42N2wwLjEyLDAuMWwyLjk5LDEuNDlsMS4xOCwxLjk0bC0wLjM5LDEuODlsMC4yOSwwLjM2bDAuNSwtMC4wbDAuMDIsMS4xN2wwLjA4LDAuMmwwLjgzLDAuODZsLTIuMzYsLTAuMjlsLTAuMjksMC4xM2wtMS43NCwyLjQ5bC00LjQsLTAuMjFsLTcuMDMsLTUuNDlsLTMuNzMsLTEuOTRsLTIuOTIsLTAuNzRsLTAuODksLTMuMGw1LjMzLC0yLjgxbDAuMTUsLTAuMTlsMC45NSwtMy40M2wtMC4yLC0yLjBsMS4xOSwtMC42MWwwLjExLC0wLjA5bDEuMjMsLTEuNzNsMC45MiwtMC4zOGwyLjc1LDAuMzVsMC44MSwwLjY4bDAuMzEsMC4wNWwwLjk0LC0wLjM4bDEuNSwzLjE3WlwiLCBcIm5hbWVcIjogXCJJcmFxXCJ9LCBcIklTXCI6IHtcInBhdGhcIjogXCJNMzg0LjI2LDg3Ljk2bC0wLjUxLDIuMzVsMC4wOCwwLjI4bDIuNjEsMi41OGwtMi45OSwyLjgzbC03LjE2LDIuNzJsLTIuMDgsMC43bC05LjUxLC0xLjcxbDEuODksLTEuMzZsLTAuMDcsLTAuNTNsLTQuNCwtMS41OWwzLjMzLC0wLjU5bDAuMjUsLTAuMzJsLTAuMTEsLTEuMmwtMC4yNSwtMC4yN2wtNC44MiwtMC44OGwxLjM4LC0yLjJsMy41NCwtMC41N2wzLjgsMi43NGwwLjMzLDAuMDFsMy42OCwtMi4xOGwzLjAyLDEuMTJsMC4yNSwtMC4wMmw0LjAxLC0yLjE4bDMuNzIsMC4yN1pcIiwgXCJuYW1lXCI6IFwiSWNlbGFuZFwifSwgXCJJUlwiOiB7XCJwYXRoXCI6IFwiTTU1Ni4yLDE4Ny41bDIuMDUsLTAuNTJsMC4xMywtMC4wN2wxLjY5LC0xLjU3bDEuNTUsMC4wOGwwLjE1LC0wLjAzbDEuMDIsLTAuNWwxLjY0LDAuMjVsMi44MiwxLjQ4bDEuOTEsMC4zbDIuOCwyLjQ5bDAuMTgsMC4wOGwxLjYxLDAuMDlsMC4xOSwyLjA5bC0xLjAsMy40N2wtMC42OSwyLjA0bDAuMTgsMC4zOGwwLjczLDAuMjhsLTAuODUsMS4yMmwtMC4wNCwwLjI4bDAuODEsMi4xOWwwLjE5LDEuNzJsMC4yMywwLjI2bDEuNjksMC40MmwwLjE3LDEuNDNsLTIuMTgsMi4zOWwtMC4wMSwwLjRsMS4yMiwxLjQybDEuMCwxLjYybDAuMTIsMC4xMWwyLjIzLDEuMTFsMC4wNiwyLjJsMC4yLDAuMjdsMS4wMywwLjM4bDAuMTQsMC44M2wtMy4zOCwxLjNsLTAuMTgsMC4xOWwtMC44NywyLjg1bC00LjQ0LC0wLjc2bC0yLjc1LC0wLjYybC0yLjY0LC0wLjMybC0xLjAxLC0zLjExbC0wLjE3LC0wLjE5bC0xLjIsLTAuNDhsLTAuMTgsLTAuMDFsLTEuOTksMC41MWwtMi40MiwxLjI1bC0yLjg5LC0wLjg0bC0yLjQ4LC0yLjAzbC0yLjQxLC0wLjc5bC0xLjYxLC0yLjQ3bC0xLjg0LC0zLjYzbC0wLjM2LC0wLjE1bC0xLjIyLDAuNGwtMS40OCwtMC44NGwtMC4zNywwLjA2bC0wLjcyLDAuODJsLTEuMDgsLTEuMTJsLTAuMDIsLTEuMzVsLTAuMywtMC4yOWwtMC40MywwLjBsMC4zNCwtMS42NGwtMC4wNCwtMC4yMmwtMS4yOSwtMi4xMWwtMC4xMiwtMC4xMWwtMy4wLC0xLjQ5bC0xLjYyLC0yLjQ5bDAuNTIsLTEuOThsMS4xOCwtMC45MmwwLjExLC0wLjI3bC0wLjE5LC0xLjY2bC0wLjE2LC0wLjIzbC0xLjU1LC0wLjgxbC0xLjU4LC0zLjMzbC0xLjMsLTIuMmwwLjQxLC0wLjc1bDAuMDMsLTAuMjFsLTAuNzMsLTMuMTJsMS4yLC0wLjU5bDAuMzUsMC45bDEuMjYsMS4zNWwwLjE1LDAuMDlsMS44MSwwLjM5bDAuOTEsLTAuMDlsMC4xNSwtMC4wNmwyLjksLTIuMTNsMC43LC0wLjE2bDAuNDgsMC41NmwtMC43NSwxLjI2bDAuMDUsMC4zN2wxLjU2LDEuNTNsMC4yOCwwLjA4bDAuMzcsLTAuMDlsMC43LDEuODlsMC4yMSwwLjE5bDIuMzEsMC41OWwxLjY5LDEuNGwwLjE1LDAuMDdsMy42NiwwLjQ5bDMuOTEsLTAuNzZsMC4yMywtMC4xOWwwLjE5LC0wLjUyWlwiLCBcIm5hbWVcIjogXCJJcmFuXCJ9LCBcIkFNXCI6IHtcInBhdGhcIjogXCJNNTMwLjUxLDE3Ni4wOGwyLjkxLC0wLjM5bDAuNDEsMC42M2wwLjExLDAuMWwwLjY2LDAuMzZsLTAuMzIsMC40N2wwLjA3LDAuNDFsMS4xLDAuODRsLTAuNTMsMC43bDAuMDYsMC40MmwxLjA2LDAuOGwxLjAxLDAuNDRsMC4wNCwxLjU2bC0wLjQ0LDAuMDRsLTAuODgsLTEuNDZsMC4wMSwtMC4zN2wtMC4zLC0wLjMxbC0wLjk4LDAuMDFsLTAuNjUsLTAuNjlsLTAuMjYsLTAuMDlsLTAuMzgsMC4wNmwtMC45NywtMC44MmwtMS42NCwtMC42NWwwLjIsLTEuMmwtMC4wMiwtMC4xNmwtMC4yOCwtMC42OVpcIiwgXCJuYW1lXCI6IFwiQXJtZW5pYVwifSwgXCJJVFwiOiB7XCJwYXRoXCI6IFwiTTQ1MS42OCwxNTguNThsMC4yLDAuMTZsMy4zLDAuNzVsLTAuMjIsMS4yNmwwLjAyLDAuMThsMC4zNSwwLjc4bC0xLjQsLTAuMzJsLTAuMjEsMC4wM2wtMi4wNCwxLjFsLTAuMTYsMC4yOWwwLjEzLDEuNDdsLTAuMjksMC44MmwwLjAyLDAuMjRsMC44MiwxLjU3bDAuMSwwLjExbDIuMjgsMS41bDEuMjksMi41M2wyLjc5LDIuNDNsMC4yLDAuMDdsMS44MywtMC4wMmwwLjMxLDAuMzRsLTAuNDYsMC4zOWwwLjA2LDAuNWw0LjA2LDEuOTdsMi4wNiwxLjQ5bDAuMTcsMC4zNmwtMC4yNCwwLjUzbC0xLjA4LC0xLjA3bC0wLjE1LC0wLjA4bC0yLjE4LC0wLjQ5bC0wLjMzLDAuMTVsLTEuMDUsMS45MWwwLjExLDAuNGwxLjYzLDAuOThsLTAuMjIsMS4xMmwtMC44NCwwLjE0bC0wLjIyLDAuMTVsLTEuMjcsMi4zOGwtMC41NCwwLjEybDAuMDEsLTAuNDdsMC40OCwtMS40NmwwLjUsLTAuNThsMC4wMywtMC4zNWwtMC45NywtMS42OWwtMC43NiwtMS40OGwtMC4xNywtMC4xNWwtMC45NCwtMC4zM2wtMC42OCwtMS4xOGwtMC4xNiwtMC4xM2wtMS41MywtMC41MmwtMS4wMywtMS4xNGwtMC4xOSwtMC4xbC0xLjc4LC0wLjE5bC0xLjg4LC0xLjNsLTIuMjcsLTEuOTRsLTEuNjQsLTEuNjhsLTAuNzYsLTIuOTRsLTAuMjEsLTAuMjFsLTEuMjIsLTAuMzVsLTIuMDEsLTEuMGwtMC4yNCwtMC4wMWwtMS4xNSwwLjQybC0wLjExLDAuMDdsLTEuMzgsMS4zNmwtMC41LDAuMTFsMC4xOSwtMC44N2wtMC4yMSwtMC4zNWwtMS4xOSwtMC4zNGwtMC41NiwtMi4wNmwwLjc2LC0wLjgybDAuMDMsLTAuMzZsLTAuNjgsLTEuMDhsMC4wNCwtMC4zMWwwLjY4LDAuNDJsMC4xOSwwLjA0bDEuMjEsLTAuMTVsMC4xNCwtMC4wNmwxLjE4LC0wLjg5bDAuMjUsMC4yOWwwLjI1LDAuMWwxLjE5LC0wLjFsMC4yNSwtMC4xOGwwLjQ1LC0xLjA0bDEuNjEsMC4zNGwwLjE5LC0wLjAybDEuMSwtMC41M2wwLjE3LC0wLjIybDAuMTUsLTAuOTVsMS4xOSwwLjM1bDAuMzUsLTAuMTZsMC4yMywtMC40N2wyLjExLC0wLjQ3bDAuNDUsMC44OVpNNDU5LjM1LDE4NC42M2wtMC43MSwxLjgxbDAuMCwwLjIzbDAuMzMsMC43OWwtMC4zNywxLjAzbC0xLjYsLTAuOTFsLTEuMzMsLTAuMzRsLTMuMjQsLTEuMzZsMC4yMywtMC45OWwyLjczLDAuMjRsMy45NSwtMC41Wk00NDMuOTUsMTc1LjkxbDEuMjYsMS43N2wtMC4zMSwzLjQ3bC0wLjgyLC0wLjEzbC0wLjI2LDAuMDhsLTAuODMsMC43OWwtMC42NCwtMC41MmwtMC4xLC0zLjQybC0wLjQ0LC0xLjM0bDAuOTEsMC4xbDAuMjEsLTAuMDZsMS4wMSwtMC43NFpcIiwgXCJuYW1lXCI6IFwiSXRhbHlcIn0sIFwiVk5cIjoge1wicGF0aFwiOiBcIk02OTAuOCwyMzAuMjFsLTIuODYsMS45M2wtMi4wOSwyLjQ2bC0wLjA2LDAuMTFsLTAuNTUsMS44bDAuMDQsMC4yNmw0LjI2LDYuMWwyLjMxLDEuNjNsMS40NiwxLjk3bDEuMTIsNC42MmwtMC4zMiw0LjNsLTEuOTcsMS41N2wtMi44NSwxLjYybC0yLjA5LDIuMTRsLTIuODMsMi4xM2wtMC42NywtMS4xOWwwLjY1LC0xLjU4bC0wLjA5LC0wLjM1bC0xLjQ3LC0xLjE0bDEuNjcsLTAuNzlsMi41NywtMC4xOGwwLjIyLC0wLjQ3bC0wLjg5LC0xLjI0bDMuODgsLTEuOGwwLjE3LC0wLjI0bDAuMzEsLTMuMDVsLTAuMDEsLTAuMTNsLTAuNTYsLTEuNjNsMC40NCwtMi40OGwtMC4wMSwtMC4xNWwtMC42MywtMS44MWwtMC4wOCwtMC4xMmwtMS44NywtMS43N2wtMy42NCwtNS4zbC0wLjExLC0wLjFsLTIuNjgsLTEuMzlsMC40NSwtMC41OWwxLjUzLC0wLjY1bDAuMTYsLTAuMzlsLTAuOTcsLTIuMjdsLTAuMjcsLTAuMThsLTIuODksLTAuMDJsLTEuMDQsLTIuMjFsLTEuMjgsLTEuODNsMC45NiwtMC40NmwxLjk3LDAuMDFsMi40MywtMC4zbDAuMTMsLTAuMDVsMS45NSwtMS4yOWwxLjA0LDAuODVsMC4xMywwLjA2bDEuOTgsMC40MmwtMC4zMiwxLjIxbDAuMDksMC4zbDEuMTksMS4wN2wwLjEyLDAuMDdsMS44OCwwLjUxWlwiLCBcIm5hbWVcIjogXCJWaWV0bmFtXCJ9LCBcIkFSXCI6IHtcInBhdGhcIjogXCJNMjU4LjExLDM0MS4zNGwxLjQsMS44MWwwLjUxLC0wLjA2bDAuODksLTEuOTRsMi41MSwwLjFsMC4zNiwwLjQ5bDQuNiw0LjMxbDAuMTUsMC4wOGwxLjk5LDAuMzlsMy4wMSwxLjkzbDIuNSwxLjAxbDAuMjgsMC45MWwtMi40LDMuOTdsMC4xNywwLjQ0bDIuNTcsMC43NGwyLjgxLDAuNDFsMi4wOSwtMC40NGwwLjE0LC0wLjA3bDIuMjcsLTIuMDZsMC4wOSwtMC4xN2wwLjM4LC0yLjJsMC44OCwtMC4zNmwxLjA1LDEuMjlsLTAuMDQsMS44OGwtMS45OCwxLjRsLTEuNzIsMS4xM2wtMi44NCwyLjY1bC0zLjM0LDMuNzNsLTAuMDcsMC4xMmwtMC42MywyLjIybC0wLjY3LDIuODVsMC4wMiwyLjczbC0wLjQ3LDAuNTRsLTAuMDcsMC4xN2wtMC4zNiwzLjI4bDAuMTIsMC4yN2wzLjAzLDIuMzJsLTAuMzEsMS43OGwwLjExLDAuMjlsMS40NCwxLjE1bC0wLjExLDEuMTdsLTIuMzIsMy41N2wtMy41OSwxLjUxbC00Ljk1LDAuNmwtMi43MiwtMC4yOWwtMC4zMiwwLjM4bDAuNSwxLjY3bC0wLjQ5LDIuMTNsMC4wMSwwLjE2bDAuNCwxLjI5bC0xLjI3LDAuODhsLTIuNDEsMC4zOWwtMi4zMywtMS4wNWwtMC4zMSwwLjA0bC0wLjk3LDAuNzhsLTAuMTEsMC4yN2wwLjM1LDIuOThsMC4xNiwwLjIzbDEuNjksMC45MWwwLjMxLC0wLjAybDEuMDgsLTAuNzVsMC40NiwwLjk2bC0yLjEsMC44OGwtMi4wMSwxLjg5bC0wLjA5LDAuMThsLTAuMzYsMy4wNWwtMC41MSwxLjQybC0yLjE2LDAuMDFsLTAuMTksMC4wN2wtMS45NiwxLjU5bC0wLjEsMC4xNWwtMC43MiwyLjM0bDAuMDgsMC4zMWwyLjQ2LDIuMzFsMC4xMywwLjA3bDIuMDksMC41NmwtMC43NCwyLjQ1bC0yLjg2LDEuNzVsLTAuMTIsMC4xNGwtMS41OSwzLjcxbC0yLjIsMS4yNGwtMC4xLDAuMDlsLTEuMDMsMS41NGwtMC4wNCwwLjIzbDAuODEsMy40NWwwLjA2LDAuMTNsMS4xMywxLjMybC0yLjU5LC0wLjU3bC01Ljg5LC0wLjQ0bC0wLjkyLC0xLjczbDAuMDUsLTIuNGwtMC4zNCwtMC4zbC0xLjQ5LDAuMTlsLTAuNzIsLTAuOThsLTAuMiwtMy4yMWwxLjc5LC0xLjMzbDAuMSwtMC4xM2wwLjc5LC0yLjA0bDAuMDIsLTAuMTZsLTAuMjcsLTEuNTJsMS4zMSwtMi42OWwwLjkxLC00LjE1bC0wLjIzLC0xLjcybDAuOTEsLTAuNDlsMC4xNSwtMC4zM2wtMC4yNywtMS4xNmwtMC4xNSwtMC4ybC0wLjg3LC0wLjQ2bDAuNjUsLTEuMDFsLTAuMDQsLTAuMzdsLTEuMDYsLTEuMDlsLTAuNTQsLTMuMmwwLjgzLC0wLjUxbDAuMTQsLTAuMjlsLTAuNDIsLTMuNmwwLjU4LC0yLjk4bDAuNjQsLTIuNWwxLjQxLC0xLjBsMC4xMiwtMC4zMmwtMC43NSwtMi44bC0wLjAxLC0yLjQ4bDEuODEsLTEuNzhsMC4wOSwtMC4yMmwtMC4wNiwtMi4zbDEuMzksLTIuNjlsMC4wMywtMC4xNGwwLjAxLC0yLjU4bC0wLjExLC0wLjI0bC0wLjU3LC0wLjQ1bC0xLjEsLTQuNTlsMS40OSwtMi43M2wwLjA0LC0wLjE3bC0wLjIzLC0yLjU5bDAuODYsLTIuMzhsMS42LC0yLjQ4bDEuNzQsLTEuNjVsMC4wNCwtMC4zOWwtMC42NCwtMC44OWwwLjQyLC0wLjdsMC4wNCwtMC4xNmwtMC4wOCwtNC4yNmwyLjU1LC0xLjIzbDAuMTYsLTAuMThsMC44NiwtMi43NWwtMC4wMSwtMC4yMmwtMC4yMiwtMC40OGwxLjg0LC0yLjFsMy4wLDAuNTlaTTI1Ni43Nyw0MzguOThsLTIuMSwwLjE1bC0xLjE4LC0xLjE0bC0wLjE5LC0wLjA4bC0xLjUzLC0wLjA5bC0yLjM4LC0wLjBsLTAuMCwtNi4yOGwwLjQsMC42NWwxLjI1LDIuNTVsMC4xMSwwLjEybDMuMjYsMi4wN2wzLjE5LDAuOGwtMC44MiwxLjI2WlwiLCBcIm5hbWVcIjogXCJBcmdlbnRpbmFcIn0sIFwiQVVcIjoge1wicGF0aFwiOiBcIk03MDUuNTUsMzUzLjA2bDAuMDksMC4wOWwwLjM3LDAuMDVsMC4xMywtMC4zNWwtMC41NywtMS42OWwwLjQ4LDAuM2wwLjcxLDAuOTlsMC4zNCwwLjExbDAuMiwtMC4yOWwtMC4wNCwtMS4zN2wtMC4wNCwtMC4xNGwtMS4yMiwtMi4wN2wtMC4yOCwtMC45bC0wLjUxLC0wLjY5bDAuMjQsLTEuMzNsMC41MiwtMC43bDAuMzQsLTEuMzJsMC4wMSwtMC4xM2wtMC4yNSwtMS40NGwwLjUxLC0wLjk0bDAuMSwxLjAzbDAuMjMsMC4yNmwwLjMyLC0wLjE0bDEuMDEsLTEuNzJsMS45NCwtMC44NGwxLjI3LC0xLjE0bDEuODQsLTAuOTJsMS4wLC0wLjE4bDAuNiwwLjI4bDAuMjYsLTAuMGwxLjk0LC0wLjk2bDEuNDgsLTAuMjhsMC4xOSwtMC4xM2wwLjMyLC0wLjQ5bDAuNTEsLTAuMThsMS40MiwwLjA1bDIuNjMsLTAuNzZsMC4xMSwtMC4wNmwxLjM2LC0xLjE1bDAuMDgsLTAuMWwwLjYxLC0xLjMzbDEuNDIsLTEuMjdsMC4xLC0wLjE5bDAuMTEsLTEuMDNsMC4wNiwtMS4zMmwxLjM5LC0xLjc0bDAuODUsMS43OWwwLjQsMC4xNGwxLjA3LC0wLjUxbDAuMTEsLTAuNDVsLTAuNzcsLTEuMDVsMC41MywtMC44NGwwLjg2LDAuNDNsMC40MywtMC4yMmwwLjI5LC0xLjg1bDEuMjksLTEuMTlsMC42LC0wLjk4bDEuMTYsLTAuNGwwLjIsLTAuMjdsMC4wMiwtMC4zNGwwLjc0LDAuMmwwLjM4LC0wLjI3bDAuMDMsLTAuNDRsMS45OCwtMC42MWwxLjcsMS4wOGwxLjM2LDEuNDhsMC4yMiwwLjFsMS41NSwwLjAybDEuNTcsMC4yNGwwLjMzLC0wLjRsLTAuNDgsLTEuMjdsMS4wOSwtMS44NmwxLjA2LC0wLjYzbDAuMSwtMC40MmwtMC4yOCwtMC40NmwwLjkzLC0xLjI0bDEuMzYsLTAuOGwxLjE2LDAuMjdsMC4xNCwwLjBsMi4xLC0wLjQ4bDAuMjMsLTAuM2wtMC4wNSwtMS4zbC0wLjE4LC0wLjI2bC0xLjA4LC0wLjQ5bDAuNDQsLTAuMTJsMS41MiwwLjU4bDEuMzksMS4wNmwyLjExLDAuNjVsMC4xOSwtMC4wbDAuNTksLTAuMjFsMS40NCwwLjcybDAuMjcsMC4wbDEuMzcsLTAuNjhsMC44NCwwLjJsMC4yNiwtMC4wNmwwLjM3LC0wLjNsMC44MiwwLjg5bC0wLjU2LDEuMTRsLTAuODQsMC45MWwtMC43NSwwLjA3bC0wLjI2LDAuMzhsMC4yNiwwLjlsLTAuNjcsMS4xNWwtMC44OCwxLjI0bC0wLjA1LDAuMjVsMC4xOCwwLjcybDAuMTIsMC4xN2wxLjk5LDEuNDJsMS45NiwwLjg0bDEuMjUsMC44NmwxLjgsMS41MWwwLjE5LDAuMDdsMC42MywtMC4wbDEuMTUsMC41OGwwLjM0LDAuN2wwLjE3LDAuMTVsMi4zOSwwLjg4bDAuMjQsLTAuMDJsMS42NSwtMC44OGwwLjE0LC0wLjE2bDAuNDksLTEuMzdsMC41MiwtMS4xOWwwLjMxLC0xLjM5bDAuNzUsLTIuMDJsMC4wMSwtMC4xOWwtMC4zMywtMS4xNmwwLjE2LC0wLjY3bDAuMCwtMC4xM2wtMC4yOCwtMS40MWwwLjMsLTEuNzhsMC40MiwtMC40NWwwLjA1LC0wLjMzbC0wLjMzLC0wLjczbDAuNTYsLTEuMjVsMC40OCwtMS4zOWwwLjA3LC0wLjY5bDAuNTgsLTAuNTlsMC40OCwwLjg0bDAuMTcsMS41M2wwLjE3LDAuMjRsMC40NywwLjIzbDAuMDksMC45bDAuMDUsMC4xNGwwLjg3LDEuMjNsMC4xNywxLjMzbC0wLjA5LDAuODlsMC4wMywwLjE1bDAuOSwyLjBsMC40MywwLjEzbDEuMzgsLTAuODNsMC43MSwwLjkybDEuMDYsMC44OGwtMC4yMiwwLjk2bDAuMCwwLjE0bDAuNTMsMi4ybDAuMzgsMS4zbDAuMTUsMC4xOGwwLjUyLDAuMjZsMC42MiwyLjAxbC0wLjIzLDEuMjdsMC4wMiwwLjE4bDAuODEsMS43NmwwLjE0LDAuMTRsMi42OSwxLjM1bDMuMjEsMi4yMWwtMC4yLDAuNGwwLjA0LDAuMzRsMS4zOSwxLjZsMC45NSwyLjc4bDAuNDMsMC4xNmwwLjc5LC0wLjQ2bDAuODUsMC45NmwwLjM5LDAuMDVsMC4yMiwtMC4xNWwwLjM2LDIuMzNsMC4wOSwwLjE4bDEuNzgsMS42M2wxLjE2LDEuMDFsMS45LDIuMWwwLjY3LDIuMDVsMC4wNiwxLjQ3bC0wLjE3LDEuNjRsMC4wMywwLjE3bDEuMTYsMi4yMmwtMC4xNCwyLjI4bC0wLjQzLDEuMjRsLTAuNjgsMi40NGwwLjA0LDEuNjNsLTAuNDgsMS45MmwtMS4wNiwyLjQzbC0xLjc5LDEuMzJsLTAuMSwwLjEybC0wLjkxLDIuMTVsLTAuODIsMS4zN2wtMC43NiwyLjQ3bC0wLjk4LDEuNDZsLTAuNjMsMi4xNGwtMC4zMywyLjAybDAuMSwwLjgybC0xLjIxLDAuODVsLTIuNzEsMC4xbC0wLjEzLDAuMDNsLTIuMzEsMS4xOWwtMS4yMSwxLjE3bC0xLjM0LDEuMTFsLTEuODksLTEuMThsLTEuMzMsLTAuNDZsMC4zMiwtMS4yNGwtMC40LC0wLjM1bC0xLjQ2LDAuNjFsLTIuMDYsMS45OGwtMS45OSwtMC43M2wtMS40MywtMC40NmwtMS40NSwtMC4yMmwtMi4zMiwtMC44MWwtMS41MSwtMS42N2wtMC40NSwtMi4xMWwtMC42LC0xLjVsLTAuMDcsLTAuMTFsLTEuMjMsLTEuMTZsLTAuMTYsLTAuMDhsLTEuOTYsLTAuMjhsMC41OSwtMC45OWwwLjAzLC0wLjI0bC0wLjYxLC0yLjFsLTAuNTQsLTAuMDhsLTEuMTYsMS44NWwtMS4yMywwLjI5bDAuNzMsLTAuODhsMC4wNiwtMC4xMmwwLjM3LC0xLjU3bDAuOTMsLTEuMzNsMC4wNSwtMC4ybC0wLjIsLTIuMDdsLTAuNTMsLTAuMTdsLTIuMDEsMi4zNWwtMS41MiwwLjk0bC0wLjEyLDAuMTRsLTAuODIsMS45M2wtMS41LC0wLjlsMC4wNywtMS4zMmwtMC4wNiwtMC4ybC0xLjU3LC0yLjA0bC0xLjE1LC0wLjkybDAuMywtMC40MWwtMC4xLC0wLjQ0bC0zLjIxLC0xLjY5bC0wLjEzLC0wLjAzbC0xLjY5LC0wLjA4bC0yLjM1LC0xLjMxbC0wLjE2LC0wLjA0bC00LjU1LDAuMjdsLTMuMjQsMC45OWwtMi44LDAuOTFsLTIuMzMsLTAuMThsLTAuMTcsMC4wM2wtMi42MywxLjQxbC0yLjE0LDAuNjRsLTAuMiwwLjE5bC0wLjQ3LDEuNDJsLTAuOCwwLjk5bC0xLjk5LDAuMDZsLTEuNTUsMC4yNGwtMi4yNywtMC41bC0xLjc5LDAuM2wtMS43MSwwLjEzbC0wLjE5LDAuMDlsLTEuMzgsMS4zOWwtMC41OCwtMC4xbC0wLjIxLDAuMDRsLTEuMjYsMC44bC0xLjEzLDAuODVsLTEuNzIsLTAuMWwtMS42LC0wLjBsLTIuNTgsLTEuNzZsLTEuMjEsLTAuNDlsMC4wNCwtMS4xOWwxLjA0LC0wLjMybDAuMTYsLTAuMTJsMC40MiwtMC42NGwwLjA1LC0wLjE5bC0wLjA5LC0wLjk3bDAuMywtMi4wbC0wLjI4LC0xLjY0bC0xLjM0LC0yLjg0bC0wLjM5LC0xLjQ5bDAuMSwtMS41MWwtMC4wNCwtMC4xN2wtMC45NiwtMS43MmwtMC4wNiwtMC43M2wtMC4wOSwtMC4xOWwtMS4wNCwtMS4wMWwtMC4zLC0yLjAybC0wLjA1LC0wLjEybC0xLjIzLC0xLjgzWk03ODQuOTUsMzkzLjM1bDIuMzksMS4wMWwwLjIsMC4wMWwzLjI2LC0wLjk2bDEuMTksMC4xNmwwLjE2LDMuMTlsLTAuNzgsMC45NWwtMC4wNywwLjE2bC0wLjE5LDEuODNsLTAuNDMsLTAuNDFsLTAuNDQsMC4wM2wtMS42MSwxLjk2bC0wLjQsLTAuMTJsLTEuMzgsLTAuMDlsLTEuNDMsLTIuNDJsLTAuMzcsLTIuMDNsLTEuNCwtMi41M2wwLjA0LC0wLjk0bDEuMjcsMC4yWlwiLCBcIm5hbWVcIjogXCJBdXN0cmFsaWFcIn0sIFwiSUxcIjoge1wicGF0aFwiOiBcIk01MDkuMDQsMTk5LjIybDAuNzEsMC4wbDAuMjcsLTAuMTdsMC4xNSwtMC4zM2wwLjE5LC0wLjAxbDAuMDIsMC43M2wtMC4yNywwLjM0bDAuMDIsMC4wOGwtMC4zMiwwLjYybC0wLjY1LC0wLjI3bC0wLjQxLDAuMTlsLTAuNTIsMS44NWwwLjE2LDAuMzVsMC4xNCwwLjA3bC0wLjE3LDAuMWwtMC4xNCwwLjIxbC0wLjExLDAuNzNsMC4zOSwwLjMzbDAuODEsLTAuMjZsMC4wMywwLjY0bC0wLjk3LDMuNDNsLTEuMjgsLTMuNjdsMC42MiwtMC43OGwtMC4wMywtMC40MWwwLjU4LC0xLjE2bDAuNSwtMi4wN2wwLjI3LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJJc3JhZWxcIn0sIFwiSU5cIjoge1wicGF0aFwiOiBcIk02MTUuODQsMTkyLjU4bDIuNCwyLjk3bC0wLjI0LDIuMTdsMC4wNSwwLjJsMC45NCwxLjM1bC0wLjA2LDAuOTdsLTEuNDYsLTAuM2wtMC4zNSwwLjM2bDAuNywzLjA2bDAuMTIsMC4xOGwyLjQ2LDEuNzVsMy4xMSwxLjcybC0xLjIzLDAuOTZsLTAuMSwwLjEzbC0wLjk3LDIuNTVsMC4xNiwwLjM4bDIuNDEsMS4wMmwyLjM3LDEuMzNsMy4yNywxLjUybDMuNDMsMC4zN2wxLjM3LDEuM2wwLjE3LDAuMDhsMS45MiwwLjI1bDMuMCwwLjYybDIuMTUsLTAuMDRsMC4yOCwtMC4yMmwwLjI5LC0xLjA2bDAuMCwtMC4xM2wtMC4zMiwtMS42NmwwLjE2LC0wLjk0bDEuMCwtMC4zN2wwLjIzLDIuMjhsMC4xOCwwLjI0bDIuMjgsMS4wMmwwLjIsMC4wMmwxLjUyLC0wLjQxbDIuMDYsMC4xOGwyLjA4LC0wLjA4bDAuMjksLTAuMjdsMC4xOCwtMS42NmwtMC4xLC0wLjI2bC0wLjUzLC0wLjQ0bDEuMzgsLTAuMjNsMC4xNSwtMC4wN2wyLjI2LC0yLjBsMi43NSwtMS42NWwxLjk3LDAuNjNsMC4yNSwtMC4wM2wxLjU0LC0wLjk5bDAuODksMS4yOGwtMC43MiwwLjk3bDAuMiwwLjQ4bDIuNDksMC4zN2wwLjExLDAuNjFsLTAuNjksMC4zOWwtMC4xNSwwLjNsMC4xNSwxLjIybC0xLjM2LC0wLjM3bC0wLjIzLDAuMDNsLTMuMjQsMS44NmwtMC4xNSwwLjI4bDAuMDcsMS40NGwtMS4zMywyLjE2bC0wLjA0LDAuMTNsLTAuMTIsMS4yNGwtMC45OCwxLjkxbC0xLjcyLC0wLjUzbC0wLjM5LDAuMjhsLTAuMDksMi42NmwtMC41MiwwLjgzbC0wLjA0LDAuMjNsMC4yMSwwLjg5bC0wLjcxLDAuMzZsLTEuMjEsLTMuODVsLTAuMjksLTAuMjFsLTAuNjksMC4wMWwtMC4yOSwwLjIzbC0wLjI4LDEuMTdsLTAuODQsLTAuODRsMC42LC0xLjE3bDAuOTcsLTAuMTNsMC4yMywtMC4xNmwxLjE1LC0yLjI1bC0wLjE4LC0wLjQybC0xLjU0LC0wLjQ3bC0yLjMsMC4wNGwtMi4xMywtMC4zM2wtMC4xOSwtMS42M2wtMC4yNiwtMC4yNmwtMS4xMywtMC4xM2wtMS45MywtMS4xM2wtMC40MiwwLjEzbC0wLjg4LDEuODJsMC4wOCwwLjM3bDEuNDcsMS4xNWwtMS4yMSwwLjc3bC0wLjEsMC4xbC0wLjU2LDAuOTdsMC4xMywwLjQybDEuMzEsMC42MWwtMC4zNiwxLjM1bDAuMDEsMC4ybDAuODUsMS45NWwwLjM3LDIuMDVsLTAuMjYsMC42OGwtMS41NSwtMC4wMmwtMy4wOSwwLjU0bC0wLjI1LDAuMzJsMC4xMywxLjg0bC0xLjIxLDEuNGwtMy42NCwxLjc5bC0yLjc5LDMuMDRsLTEuODYsMS42MWwtMi40OCwxLjY4bC0wLjEzLDAuMjVsLTAuMCwxLjBsLTEuMDcsMC41NWwtMi4yMSwwLjlsLTEuMTMsMC4xM2wtMC4yNSwwLjE5bC0wLjc1LDEuOTZsLTAuMDIsMC4xNWwwLjUyLDMuMzFsMC4xMywyLjAzbC0xLjAzLDIuMzVsLTAuMDMsMC4xMmwtMC4wMSw0LjAzbC0xLjAyLDAuMWwtMC4yMywwLjE1bC0xLjE0LDEuOTNsMC4wNCwwLjM2bDAuNDQsMC40OGwtMS44MywwLjU3bC0wLjE4LDAuMTVsLTAuODEsMS42NWwtMC43NCwwLjUzbC0yLjE0LC0yLjEybC0xLjE0LC0zLjQ3bC0wLjk2LC0yLjU3bC0wLjksLTEuMjZsLTEuMywtMi4zOGwtMC42MSwtMy4xNGwtMC40NCwtMS42MmwtMi4yOSwtMy41NmwtMS4wMywtNC45NGwtMC43NCwtMy4yOWwwLjAxLC0zLjEybC0wLjQ5LC0yLjUxbC0wLjQxLC0wLjIybC0zLjU2LDEuNTNsLTEuNTksLTAuMjhsLTIuOTYsLTIuODdsMC45NCwtMC43NGwwLjA2LC0wLjQxbC0wLjc0LC0xLjAzbC0yLjczLC0yLjFsMS4zNSwtMS40M2w1LjM4LDAuMDFsMC4yOSwtMC4zNmwtMC41LC0yLjI5bC0wLjA5LC0wLjE1bC0xLjMzLC0xLjI4bC0wLjI3LC0xLjk2bC0wLjEyLC0wLjJsLTEuMzYsLTEuMGwyLjQyLC0yLjQ4bDIuNzcsMC4ybDAuMjQsLTAuMWwyLjYyLC0yLjg1bDEuNTksLTIuOGwyLjQxLC0yLjc0bDAuMDcsLTAuMmwtMC4wNCwtMS44MmwyLjAxLC0xLjUxbC0wLjAxLC0wLjQ5bC0xLjk1LC0xLjMzbC0wLjgzLC0xLjgxbC0wLjgyLC0yLjI3bDAuOTgsLTAuOTdsMy42NCwwLjY2bDIuODksLTAuNDJsMC4xNywtMC4wOGwyLjE4LC0yLjE1WlwiLCBcIm5hbWVcIjogXCJJbmRpYVwifSwgXCJUWlwiOiB7XCJwYXRoXCI6IFwiTTUwNS43NywyODcuNThsMC4zNiwwLjIzbDguOTUsNS4wM2wwLjE1LDEuM2wwLjEzLDAuMjFsMy40LDIuMzdsLTEuMDcsMi44OGwtMC4wMiwwLjE0bDAuMTUsMS40MmwwLjE1LDAuMjNsMS40NywwLjg0bDAuMDUsMC40MmwtMC42NiwxLjQ0bC0wLjAyLDAuMThsMC4xMywwLjcybC0wLjE2LDEuMTZsMC4wMywwLjE5bDAuODcsMS41N2wxLjAzLDIuNDhsMC4xMiwwLjE0bDAuNTMsMC4zMmwtMS41OSwxLjE4bC0yLjY0LDAuOTVsLTEuNDUsLTAuMDRsLTAuMiwwLjA3bC0wLjgxLDAuNjlsLTEuNjQsMC4wNmwtMC42OCwwLjNsLTIuOSwtMC42OWwtMS43MSwwLjE3bC0wLjY1LC0zLjE4bC0wLjA1LC0wLjEybC0xLjM1LC0xLjg4bC0wLjE5LC0wLjEybC0yLjQxLC0wLjQ2bC0xLjM4LC0wLjc0bC0xLjYzLC0wLjQ0bC0wLjk2LC0wLjQxbC0wLjk1LC0wLjU4bC0xLjMxLC0zLjA5bC0xLjQ3LC0xLjQ2bC0wLjQ1LC0xLjMxbDAuMjQsLTEuMzRsLTAuMzksLTEuOTlsMC43MSwtMC4wOGwwLjE4LC0wLjA5bDAuOTEsLTAuOTFsMC45OCwtMS4zMWwwLjU5LC0wLjVsMC4xMSwtMC4yNGwtMC4wMiwtMC44MWwtMC4wOCwtMC4ybC0wLjQ3LC0wLjVsLTAuMSwtMC42N2wwLjUxLC0wLjIzbDAuMTgsLTAuMjVsMC4xNCwtMS40N2wtMC4wNSwtMC4ybC0wLjc2LC0xLjA5bDAuNDUsLTAuMTVsMi43MSwwLjAzbDUuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlRhbnphbmlhXCJ9LCBcIkFaXCI6IHtcInBhdGhcIjogXCJNNTM5LjM2LDE3NS42NmwwLjE2LDAuMDlsMS4xMSwwLjJsMC4zMiwtMC4xNWwwLjQsLTAuNzFsMS4yMiwtMC45OWwxLjExLDEuMzNsMS4yNiwyLjA5bDAuMjIsMC4xNGwxLjA2LDAuMTNsMC4yOCwwLjI5bC0xLjQ2LDAuMTdsLTAuMjYsMC4yNGwtMC40MywyLjI2bC0wLjM5LDAuOTJsLTAuODUsMC42M2wtMC4xMiwwLjI1bDAuMDYsMS4ybC0wLjIyLDAuMDVsLTEuMjgsLTEuMjVsMC43NCwtMS4yNWwtMC4wMywtMC4zNWwtMC43NCwtMC44NmwtMC4zLC0wLjFsLTEuMDUsMC4yN2wtMi40OSwxLjgybC0wLjA0LC0xLjQ2bC0wLjE4LC0wLjI3bC0xLjA5LC0wLjQ3bC0wLjgsLTAuNmwwLjUzLC0wLjdsLTAuMDYsLTAuNDJsLTEuMTEsLTAuODRsMC4zNCwtMC41MWwtMC4xMSwtMC40M2wtMC44OSwtMC40OGwtMC4zMywtMC40OWwwLjI1LC0wLjJsMS43OCwwLjgxbDEuMzUsMC4xOGwwLjI1LC0wLjA5bDAuMzQsLTAuMzVsMC4wMiwtMC4zOWwtMS4wNCwtMS4zNmwwLjI4LC0wLjE4bDAuNDksMC4wN2wxLjY1LDEuNzRaTTUzMy41MywxODAuMTZsMC42MywwLjY3bDAuMjIsMC4wOWwwLjgsLTAuMGwwLjA0LDAuMzFsMC42NiwxLjA5bC0wLjk0LC0wLjIxbC0xLjE2LC0xLjI0bC0wLjI1LC0wLjcxWlwiLCBcIm5hbWVcIjogXCJBemVyYmFpamFuXCJ9LCBcIklFXCI6IHtcInBhdGhcIjogXCJNNDA1LjE3LDEzNS4zNWwwLjM2LDIuMTZsLTEuNzgsMi44NGwtNC4yOCwxLjkxbC0zLjAyLC0wLjQzbDEuODEsLTMuMTNsMC4wMiwtMC4yNmwtMS4yMywtMy4yNmwzLjI0LC0yLjU2bDEuNTQsLTEuMzJsMC4zNywxLjMzbC0wLjQ5LDEuNzdsMC4zLDAuMzhsMS40OSwtMC4wNWwxLjY4LDAuNjNaXCIsIFwibmFtZVwiOiBcIklyZWxhbmRcIn0sIFwiSURcIjoge1wicGF0aFwiOiBcIk03NTYuNTYsMjg3Ljg2bDAuNjksNC4wMmwwLjE1LDAuMjFsMi41OSwxLjVsMC4zOSwtMC4wN2wyLjA1LC0yLjYxbDIuNzUsLTEuNDVsMi4wOSwtMC4wbDIuMDgsMC44NWwxLjg1LDAuODlsMi41MiwwLjQ2bDAuMDgsMTUuNDRsLTEuNzIsLTEuNmwtMC4xNSwtMC4wN2wtMi41NCwtMC41MWwtMC4yOSwwLjFsLTAuNTMsMC42MmwtMi41MywwLjA2bDAuNzgsLTEuNTFsMS40OCwtMC42NmwwLjE3LC0wLjM0bC0wLjY1LC0yLjc0bC0xLjIzLC0yLjE5bC0wLjE0LC0wLjEzbC00Ljg1LC0yLjEzbC0yLjA5LC0wLjIzbC0zLjcsLTIuMjhsLTAuNDEsMC4xbC0wLjY3LDEuMTFsLTAuNjMsMC4xNGwtMC40MSwtMC42N2wtMC4wMSwtMS4wMWwtMC4xNCwtMC4yNWwtMS4zOSwtMC44OWwyLjA1LC0wLjY5bDEuNzMsMC4wNWwwLjI5LC0wLjM5bC0wLjIxLC0wLjY2bC0wLjI5LC0wLjIxbC0zLjUsLTAuMGwtMC45LC0xLjM2bC0wLjE5LC0wLjEzbC0yLjE0LC0wLjQ0bC0wLjY1LC0wLjc2bDIuODYsLTAuNTFsMS4yOCwtMC43OWwzLjc1LDAuOTZsMC4zMiwwLjc2Wk03NTguMDEsMzAwLjM3bC0wLjc5LDEuMDRsLTAuMTQsLTEuMDdsMC40LC0wLjgxbDAuMjksLTAuNDdsMC4yNCwwLjMxbC0wLjAsMS4wWk03NDcuNDUsMjkyLjlsMC40OCwxLjAybC0xLjQ1LC0wLjY5bC0yLjA5LC0wLjIxbC0xLjQ1LDAuMTZsLTEuMjgsLTAuMDdsMC4zNSwtMC44MWwyLjg2LC0wLjFsMi41OCwwLjY4Wk03NDEuMTUsMjg1LjY5bC0wLjE2LC0wLjI1bC0wLjcyLC0zLjA4bDAuNDcsLTEuODZsMC4zNSwtMC4zOGwwLjEsMC43M2wwLjI1LDAuMjZsMS4yOCwwLjE5bDAuMTgsMC43OGwtMC4xMSwxLjhsLTAuOTYsLTAuMThsLTAuMzUsMC4yMmwtMC4zOCwxLjUybDAuMDUsMC4yNFpNNzQxLjE5LDI4NS43NWwwLjc2LDAuOTdsLTAuMTEsMC4wNWwtMC42NSwtMS4wMlpNNzM5LjE4LDI5My41MmwtMC42MSwwLjU0bC0xLjQ0LC0wLjM4bC0wLjI1LC0wLjU1bDEuOTMsLTAuMDlsMC4zNiwwLjQ4Wk03MjguNCwyOTUuODdsLTAuMjcsLTAuMDdsLTIuMjYsMC44OWwtMC4zNywtMC40MWwwLjI3LC0wLjhsLTAuMDksLTAuMzNsLTEuNjgsLTEuMzdsMC4xNywtMi4yOWwtMC40MiwtMC4zbC0xLjY3LDAuNzZsLTAuMTcsMC4yOWwwLjIxLDIuOTJsMC4wOSwzLjM0bC0xLjIyLDAuMjhsLTAuNzgsLTAuNTRsMC42NSwtMi4xbDAuMDEsLTAuMTRsLTAuMzksLTIuNDJsLTAuMjksLTAuMjVsLTAuODYsLTAuMDJsLTAuNjMsLTEuNGwwLjk5LC0xLjYxbDAuMzUsLTEuOTdsMS4yNCwtMy43M2wwLjQ5LC0wLjk2bDEuOTUsLTEuN2wxLjg2LDAuNjlsMy4xNiwwLjM1bDIuOTIsLTAuMWwwLjE3LC0wLjA2bDIuMjQsLTEuNjVsMC4xMSwwLjE0bC0xLjgsMi4yMmwtMS43MiwwLjQ0bC0yLjQxLC0wLjQ4bC00LjIxLDAuMTNsLTIuMTksMC4zNmwtMC4yNSwwLjI0bC0wLjM2LDEuOWwwLjA4LDAuMjdsMi4yNCwyLjIzbDAuNCwwLjAybDEuMjksLTEuMDhsMy4xOSwtMC41OGwtMC4xOSwwLjA2bC0xLjA0LDEuNGwtMi4xMywwLjk0bC0wLjEyLDAuNDVsMi4yNiwzLjA2bC0wLjM3LDAuNjlsMC4wMywwLjMybDEuNTEsMS45NVpNNzI4LjQ4LDI5NS45N2wwLjU5LDAuNzZsLTAuMDIsMS4zN2wtMS4wLDAuNTVsLTAuNjQsLTAuNThsMS4wOSwtMS44NGwtMC4wMiwtMC4yNlpNNzI4LjY0LDI4Ni45NWwwLjc5LC0wLjE0bC0wLjA3LDAuMzlsLTAuNzIsLTAuMjRaTTczMi4zOCwzMTAuMWwtMS44OSwwLjQ5bC0wLjA2LC0wLjA2bDAuMTcsLTAuNjRsMS4wLC0xLjQybDIuMTQsLTAuODdsMC4xLDAuMmwwLjA0LDAuNThsLTEuNDksMS43MlpNNzI4LjI2LDMwNS43MWwtMC4xNywwLjYzbC0zLjUzLDAuNjdsLTMuMDIsLTAuMjhsLTAuMCwtMC40MmwxLjY2LC0wLjQ0bDEuNDcsMC43MWwwLjE2LDAuMDNsMS43NSwtMC4yMWwxLjY5LC0wLjY5Wk03MjIuOTgsMzEwLjMzbC0wLjc0LDAuMDNsLTIuNTIsLTEuMzVsMS40MiwtMC4zbDEuMTksMC43bDAuNzIsMC42M2wtMC4wNiwwLjI4Wk03MTYuMjQsMzA1LjYzbDAuNjYsMC40OWwwLjIyLDAuMDZsMS4zNSwtMC4xOGwwLjMxLDAuNTNsLTQuMTgsMC43N2wtMC44LC0wLjAxbDAuNTEsLTAuODZsMS4yLC0wLjAybDAuMjQsLTAuMTJsMC40OSwtMC42NVpNNzE1Ljg0LDI4MC4yMWwwLjA5LDAuMzRsMi4yNSwxLjg2bC0yLjI1LDAuMjJsLTAuMjQsMC4xN2wtMC44NCwxLjcxbC0wLjAzLDAuMTVsMC4xLDIuMTFsLTIuMjcsMS42MmwtMC4xMywwLjI0bC0wLjA2LDIuNDZsLTAuNzQsMi45MmwtMC4wMiwtMC4wNWwtMC4zOSwtMC4xNmwtMi42MiwxLjA0bC0wLjg2LC0xLjMzbC0wLjIzLC0wLjE0bC0xLjcxLC0wLjE0bC0xLjE5LC0wLjc2bC0wLjI1LC0wLjAzbC0yLjc4LDAuODRsLTAuNzksLTEuMDVsLTAuMjYsLTAuMTJsLTEuNjEsMC4xM2wtMS44LC0wLjI1bC0wLjM2LC0zLjEzbC0wLjE1LC0wLjIzbC0xLjE4LC0wLjY1bC0xLjEzLC0yLjAybC0wLjMzLC0yLjFsMC4yNywtMi4xOWwxLjA1LC0xLjE3bDAuMjgsMS4xMmwwLjEsMC4xNmwxLjcxLDEuNDFsMC4yOCwwLjA1bDEuNTUsLTAuNDlsMS41NCwwLjE3bDAuMjMsLTAuMDdsMS40LC0xLjIxbDEuMDUsLTAuMTlsMi4zLDAuNjhsMC4xNiwwLjBsMi4wNCwtMC41M2wwLjIxLC0wLjE5bDEuMjYsLTMuNDFsMC45MSwtMC44MmwwLjA5LC0wLjE0bDAuOCwtMi42NGwyLjYzLDAuMGwxLjcxLDAuMzNsLTEuMTksMS44OWwwLjAyLDAuMzRsMS43NCwyLjI0bC0wLjM3LDEuMFpNNjkyLjY3LDMwMi4wbDAuMjYsMC4xOWw0LjgsMC4yNWwwLjI4LC0wLjE2bDAuNDQsLTAuODNsNC4yOSwxLjEybDAuODUsMS41MmwwLjIzLDAuMTVsMy43MSwwLjQ1bDIuMzcsMS4xNWwtMi4wNiwwLjY5bC0yLjc3LC0xLjBsLTIuMjUsMC4wN2wtMi41NywtMC4xOGwtMi4zMSwtMC40NWwtMi45NCwtMC45N2wtMS44NCwtMC4yNWwtMC4xMywwLjAxbC0wLjk3LDAuMjlsLTQuMzQsLTAuOThsLTAuMzgsLTAuOTRsLTAuMjUsLTAuMTlsLTEuNzYsLTAuMTRsMS4zMSwtMS44NGwyLjgxLDAuMTRsMS45NywwLjk2bDAuOTUsMC4xOWwwLjI4LDAuNzRaTTY4NS42MywyOTkuMjdsLTIuMzYsMC4wNGwtMi4wNywtMi4wNWwtMy4xNywtMi4wMmwtMS4wNiwtMS41bC0xLjg4LC0yLjAybC0xLjIyLC0xLjg1bC0xLjksLTMuNDlsLTIuMiwtMi4xMWwtMC43MSwtMi4wOGwtMC45NCwtMS45OWwtMC4xLC0wLjEybC0yLjIxLC0xLjU0bC0xLjM1LC0yLjE3bC0xLjg2LC0xLjM5bC0yLjUzLC0yLjY4bC0wLjE0LC0wLjgxbDEuMjIsMC4wOGwzLjc2LDAuNDdsMi4xNiwyLjRsMS45NCwxLjdsMS4zNywxLjA0bDIuMzUsMi42N2wwLjIyLDAuMWwyLjQ0LDAuMDRsMS45OSwxLjYybDEuNDIsMi4wNmwwLjA5LDAuMDlsMS42NywxLjBsLTAuODgsMS44bDAuMTEsMC4zOWwxLjQ0LDAuODdsMC4xMywwLjA0bDAuNjgsMC4wNWwwLjQxLDEuNjJsMC44NywxLjRsMC4yMiwwLjE0bDEuNzEsMC4yMWwxLjA2LDEuMzhsLTAuNjEsMy4wNGwtMC4wOSwzLjZaXCIsIFwibmFtZVwiOiBcIkluZG9uZXNpYVwifSwgXCJVQVwiOiB7XCJwYXRoXCI6IFwiTTUwMC41NCwxNDEuNDJsMC45LDAuMTNsMC4yNywtMC4xMWwwLjUyLC0wLjYybDAuNjgsMC4xM2wyLjQzLC0wLjNsMS4zMiwxLjU3bC0wLjQ1LDAuNDhsLTAuMDcsMC4yNmwwLjIxLDEuMDNsMC4yNywwLjI0bDEuODUsMC4xNWwwLjc2LDEuMjJsLTAuMDUsMC41NWwwLjIsMC4zMWwzLjE4LDEuMTVsMC4xOCwwLjAxbDEuNzUsLTAuNDdsMS40MiwxLjQxbDAuMjIsMC4wOWwxLjQyLC0wLjAzbDMuNDQsMC45OWwwLjAyLDAuNjVsLTAuOTcsMS42MmwtMC4wMywwLjI0bDAuNTIsMS42N2wtMC4yOSwwLjc5bC0yLjI0LDAuMjJsLTAuMTQsMC4wNWwtMS4yOSwwLjg5bC0wLjEzLDAuMjNsLTAuMDcsMS4xNmwtMS43NSwwLjIybC0wLjEyLDAuMDRsLTEuNiwwLjk4bC0yLjI3LDAuMTZsLTAuMTIsMC4wNGwtMi4xNiwxLjE3bC0wLjE2LDAuMjlsMC4xNSwxLjk0bDAuMTQsMC4yM2wxLjIzLDAuNzVsMC4xOCwwLjA0bDIuMDYsLTAuMTVsLTAuMjIsMC41MWwtMi42NywwLjU0bC0zLjI3LDEuNzJsLTEuMCwtMC40NWwwLjQ1LC0xLjE5bC0wLjE5LC0wLjM5bC0yLjM0LC0wLjc4bDAuMTUsLTAuMmwyLjMyLC0xLjBsMC4wOSwtMC40OWwtMC43MywtMC43MmwtMC4xNSwtMC4wOGwtMy42OSwtMC43NWwtMC4xNCwtMC45NmwtMC4zNSwtMC4yNWwtMi4zMiwwLjM5bC0wLjIxLDAuMTVsLTAuOTEsMS43bC0xLjc3LDIuMWwtMC45MywtMC40NGwtMC4yNCwtMC4wbC0xLjA1LDAuNDVsLTAuNDgsLTAuMjVsMC4xMywtMC4wN2wwLjE0LC0wLjE1bDAuNDMsLTEuMDRsMC42NywtMC45N2wwLjA0LC0wLjI2bC0wLjEsLTAuMzFsMC4wNCwtMC4wMmwwLjExLDAuMTlsMC4yNCwwLjE1bDEuNDgsMC4wOWwwLjc4LC0wLjI1bDAuMDcsLTAuNTNsLTAuMjcsLTAuMTlsMC4wOSwtMC4yNWwtMC4wOCwtMC4zM2wtMC44MSwtMC43NGwtMC4zNCwtMS4yNGwtMC4xNCwtMC4xOGwtMC43MywtMC40MmwwLjE1LC0wLjg3bC0wLjExLC0wLjI5bC0xLjEzLC0wLjg2bC0wLjE1LC0wLjA2bC0wLjk3LC0wLjExbC0xLjc5LC0wLjk3bC0wLjIsLTAuMDNsLTEuNjYsMC4zMmwtMC4xMywwLjA2bC0wLjUyLDAuNDFsLTAuOTUsLTAuMGwtMC4yMywwLjExbC0wLjU2LDAuNjZsLTEuNzQsMC4yOWwtMC43OSwwLjQzbC0xLjAxLC0wLjY4bC0wLjE2LC0wLjA1bC0xLjU3LC0wLjAxbC0xLjUyLC0wLjM1bC0wLjIzLDAuMDRsLTAuNzEsMC40NWwtMC4wOSwtMC40M2wtMC4xMywtMC4xOWwtMS4xOCwtMC43NGwwLjM4LC0xLjAybDAuNTMsLTAuNjRsMC4zNSwwLjEybDAuMzcsLTAuNDFsLTAuNTcsLTEuMjlsMi4xLC0yLjVsMS4xNiwtMC4zNmwwLjIsLTAuMmwwLjI3LC0wLjkybC0wLjAxLC0wLjJsLTEuMSwtMi41MmwwLjc5LC0wLjA5bDAuMTMsLTAuMDVsMS4zLC0wLjg2bDEuODMsLTAuMDdsMi40OCwwLjI2bDIuODQsMC44bDEuOTEsMC4wNmwwLjg4LDAuNDVsMC4yOSwtMC4wMWwwLjcyLC0wLjQ0bDAuNDksMC41OGwwLjI1LDAuMTFsMi4yLC0wLjE2bDAuOTQsMC4zbDAuMzksLTAuMjZsMC4xNSwtMS41N2wwLjYxLC0wLjU5bDIuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlVrcmFpbmVcIn0sIFwiUUFcIjoge1wicGF0aFwiOiBcIk01NDguNDcsMjIxLjQ3bC0wLjE1LC0xLjcybDAuNTksLTEuMjNsMC4zOCwtMC4xNmwwLjU0LDAuNmwwLjA0LDEuNGwtMC40NywxLjM3bC0wLjQxLDAuMTFsLTAuNTMsLTAuMzdaXCIsIFwibmFtZVwiOiBcIlFhdGFyXCJ9LCBcIk1aXCI6IHtcInBhdGhcIjogXCJNNTA3LjcxLDMxNC4xNGwxLjY1LC0wLjE4bDIuOTYsMC43bDAuMiwtMC4wMmwwLjYsLTAuMjlsMS42OCwtMC4wNmwwLjE4LC0wLjA3bDAuOCwtMC42OWwxLjUsMC4wMmwyLjc0LC0wLjk4bDEuNzQsLTEuMjdsMC4yNSwwLjdsLTAuMSwyLjQ3bDAuMzEsMi4yN2wwLjEsMy45N2wwLjQyLDEuMjRsLTAuNywxLjcxbC0wLjk0LDEuNzNsLTEuNTIsMS41MmwtNS4wNiwyLjIxbC0yLjg4LDIuOGwtMS4wMSwwLjUxbC0xLjcyLDEuODFsLTAuOTksMC41OGwtMC4xNSwwLjIzbC0wLjIxLDEuODZsMC4wNCwwLjE5bDEuMTcsMS45NWwwLjQ3LDEuNDdsMC4wMywwLjc0bDAuMzksMC4yOGwwLjA1LC0wLjAxbC0wLjA2LDIuMTNsLTAuMzksMS4xOWwwLjEsMC4zM2wwLjQyLDAuMzJsLTAuMjgsMC44M2wtMC45NSwwLjg2bC0yLjAzLDAuODhsLTMuMDgsMS40OWwtMS4xLDAuOTlsLTAuMDksMC4yOGwwLjIxLDEuMTNsMC4yMSwwLjIzbDAuMzgsMC4xMWwtMC4xNCwwLjg5bC0xLjM5LC0wLjAybC0wLjE3LC0wLjk0bC0wLjM4LC0xLjIzbC0wLjIsLTAuODlsMC40NCwtMi45MWwtMC4wMSwtMC4xNGwtMC42NSwtMS44OGwtMS4xNSwtMy41NWwyLjUyLC0yLjg1bDAuNjgsLTEuODlsMC4yOSwtMC4xOGwwLjE0LC0wLjJsMC4yOCwtMS41M2wtMC4wMywtMC4xOWwtMC4zNiwtMC43bDAuMSwtMS44M2wwLjQ5LC0xLjg0bC0wLjAxLC0zLjI2bC0wLjE0LC0wLjI1bC0xLjMsLTAuODNsLTAuMTEsLTAuMDRsLTEuMDgsLTAuMTdsLTAuNDcsLTAuNTVsLTAuMSwtMC4wOGwtMS4xNiwtMC41NGwtMC4xMywtMC4wM2wtMS44MywwLjA0bC0wLjMyLC0yLjI1bDcuMTksLTEuOTlsMS4zMiwxLjEybDAuMjksMC4wNmwwLjU1LC0wLjE5bDAuNzUsMC40OWwwLjExLDAuODFsLTAuNDksMS4xMWwtMC4wMiwwLjE1bDAuMTksMS44MWwwLjA5LDAuMThsMS42MywxLjU5bDAuNDgsLTAuMWwwLjcyLC0xLjY4bDAuOTksLTAuNDlsMC4xNywtMC4yOWwtMC4yMSwtMy4yOWwtMC4wNCwtMC4xM2wtMS4xMSwtMS45MmwtMC45LC0wLjgybC0wLjIxLC0wLjA4bC0wLjYyLDAuMDNsLTAuNjMsLTIuOThsMC42MSwtMS42N1pcIiwgXCJuYW1lXCI6IFwiTW96YW1iaXF1ZVwifX0sIFwiaGVpZ2h0XCI6IDQ0MC43MDYzMTA3NDQxMzMxLCBcInByb2plY3Rpb25cIjoge1widHlwZVwiOiBcIm1pbGxcIiwgXCJjZW50cmFsTWVyaWRpYW5cIjogMTEuNX0sIFwid2lkdGhcIjogOTAwLjB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///53\n"); /***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_RESULT__;;(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (true) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn FastClick;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzPzk2ODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQixZQUFZLE9BQU8sWUFBWTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQix5Q0FBeUM7QUFDL0Q7OztBQUdBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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RUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVksT0FBTyxZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQUE7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIEBwcmVzZXJ2ZSBGYXN0Q2xpY2s6IHBvbHlmaWxsIHRvIHJlbW92ZSBjbGljayBkZWxheXMgb24gYnJvd3NlcnMgd2l0aCB0b3VjaCBVSXMuXG5cdCAqXG5cdCAqIEBjb2RpbmdzdGFuZGFyZCBmdGxhYnMtanN2MlxuXHQgKiBAY29weXJpZ2h0IFRoZSBGaW5hbmNpYWwgVGltZXMgTGltaXRlZCBbQWxsIFJpZ2h0cyBSZXNlcnZlZF1cblx0ICogQGxpY2Vuc2UgTUlUIExpY2Vuc2UgKHNlZSBMSUNFTlNFLnR4dClcblx0ICovXG5cblx0Lypqc2xpbnQgYnJvd3Nlcjp0cnVlLCBub2RlOnRydWUqL1xuXHQvKmdsb2JhbCBkZWZpbmUsIEV2ZW50LCBOb2RlKi9cblxuXG5cdC8qKlxuXHQgKiBJbnN0YW50aWF0ZSBmYXN0LWNsaWNraW5nIGxpc3RlbmVycyBvbiB0aGUgc3BlY2lmaWVkIGxheWVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtFbGVtZW50fSBsYXllciBUaGUgbGF5ZXIgdG8gbGlzdGVuIG9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzXG5cdCAqL1xuXHRmdW5jdGlvbiBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpIHtcblx0XHR2YXIgb2xkT25DbGljaztcblxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciBhIGNsaWNrIGlzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgYm9vbGVhblxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXG5cblx0XHQvKipcblx0XHQgKiBUaW1lc3RhbXAgZm9yIHdoZW4gY2xpY2sgdHJhY2tpbmcgc3RhcnRlZC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGVsZW1lbnQgYmVpbmcgdHJhY2tlZCBmb3IgYSBjbGljay5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIEV2ZW50VGFyZ2V0XG5cdFx0ICovXG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblxuXG5cdFx0LyoqXG5cdFx0ICogWC1jb29yZGluYXRlIG9mIHRvdWNoIHN0YXJ0IGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50b3VjaFN0YXJ0WCA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFktY29vcmRpbmF0ZSBvZiB0b3VjaCBzdGFydCBldmVudC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudG91Y2hTdGFydFkgPSAwO1xuXG5cblx0XHQvKipcblx0XHQgKiBJRCBvZiB0aGUgbGFzdCB0b3VjaCwgcmV0cmlldmVkIGZyb20gVG91Y2guaWRlbnRpZmllci5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMubGFzdFRvdWNoSWRlbnRpZmllciA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRvdWNobW92ZSBib3VuZGFyeSwgYmV5b25kIHdoaWNoIGEgY2xpY2sgd2lsbCBiZSBjYW5jZWxsZWQuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRvdWNoQm91bmRhcnkgPSBvcHRpb25zLnRvdWNoQm91bmRhcnkgfHwgMTA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBGYXN0Q2xpY2sgbGF5ZXIuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBFbGVtZW50XG5cdFx0ICovXG5cdFx0dGhpcy5sYXllciA9IGxheWVyO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdGltZSBiZXR3ZWVuIHRhcCh0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCkgZXZlbnRzXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRhcERlbGF5ID0gb3B0aW9ucy50YXBEZWxheSB8fCAyMDA7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgbWF4aW11bSB0aW1lIGZvciBhIHRhcFxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50YXBUaW1lb3V0ID0gb3B0aW9ucy50YXBUaW1lb3V0IHx8IDcwMDtcblxuXHRcdGlmIChGYXN0Q2xpY2subm90TmVlZGVkKGxheWVyKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIEFuZHJvaWQgZG9uJ3QgaGF2ZSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuXHRcdGZ1bmN0aW9uIGJpbmQobWV0aG9kLCBjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTsgfTtcblx0XHR9XG5cblxuXHRcdHZhciBtZXRob2RzID0gWydvbk1vdXNlJywgJ29uQ2xpY2snLCAnb25Ub3VjaFN0YXJ0JywgJ29uVG91Y2hNb3ZlJywgJ29uVG91Y2hFbmQnLCAnb25Ub3VjaENhbmNlbCddO1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcztcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb250ZXh0W21ldGhvZHNbaV1dID0gYmluZChjb250ZXh0W21ldGhvZHNbaV1dLCBjb250ZXh0KTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnMgYXMgcmVxdWlyZWRcblx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdH1cblxuXHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrLCB0cnVlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG5cdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbCwgZmFsc2UpO1xuXG5cdFx0Ly8gSGFjayBpcyByZXF1aXJlZCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IEV2ZW50I3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoZS5nLiBBbmRyb2lkIDIpXG5cdFx0Ly8gd2hpY2ggaXMgaG93IEZhc3RDbGljayBub3JtYWxseSBzdG9wcyBjbGljayBldmVudHMgYnViYmxpbmcgdG8gY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIEZhc3RDbGlja1xuXHRcdC8vIGxheWVyIHdoZW4gdGhleSBhcmUgY2FuY2VsbGVkLlxuXHRcdGlmICghRXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBybXYgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdHJtdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCBjYWxsYmFjaywgY2FwdHVyZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm12LmNhbGwobGF5ZXIsIHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBhZHYgPSBOb2RlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdGFkdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCAoY2FsbGJhY2suaGlqYWNrZWQgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0aWYgKCFldmVudC5wcm9wYWdhdGlvblN0b3BwZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soZXZlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLCBjYXB0dXJlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZHYuY2FsbChsYXllciwgdHlwZSwgY2FsbGJhY2ssIGNhcHR1cmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIElmIGEgaGFuZGxlciBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSBlbGVtZW50J3Mgb25jbGljayBhdHRyaWJ1dGUsIGl0IHdpbGwgYmUgZmlyZWQgYmVmb3JlXG5cdFx0Ly8gRmFzdENsaWNrJ3Mgb25DbGljayBoYW5kbGVyLiBGaXggdGhpcyBieSBwdWxsaW5nIG91dCB0aGUgdXNlci1kZWZpbmVkIGhhbmRsZXIgZnVuY3Rpb24gYW5kXG5cdFx0Ly8gYWRkaW5nIGl0IGFzIGxpc3RlbmVyLlxuXHRcdGlmICh0eXBlb2YgbGF5ZXIub25jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuXG5cdFx0XHQvLyBBbmRyb2lkIGJyb3dzZXIgb24gYXQgbGVhc3QgMy4yIHJlcXVpcmVzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW4gbGF5ZXIub25jbGlja1xuXHRcdFx0Ly8gLSB0aGUgb2xkIG9uZSB3b24ndCB3b3JrIGlmIHBhc3NlZCB0byBhZGRFdmVudExpc3RlbmVyIGRpcmVjdGx5LlxuXHRcdFx0b2xkT25DbGljayA9IGxheWVyLm9uY2xpY2s7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdG9sZE9uQ2xpY2soZXZlbnQpO1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdFx0bGF5ZXIub25jbGljayA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogV2luZG93cyBQaG9uZSA4LjEgZmFrZXMgdXNlciBhZ2VudCBzdHJpbmcgdG8gbG9vayBsaWtlIEFuZHJvaWQgYW5kIGlQaG9uZS5cblx0KlxuXHQqIEB0eXBlIGJvb2xlYW5cblx0Ki9cblx0dmFyIGRldmljZUlzV2luZG93c1Bob25lID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiV2luZG93cyBQaG9uZVwiKSA+PSAwO1xuXG5cdC8qKlxuXHQgKiBBbmRyb2lkIHJlcXVpcmVzIGV4Y2VwdGlvbnMuXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0FuZHJvaWQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0FuZHJvaWQnKSA+IDAgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyByZXF1aXJlcyBleGNlcHRpb25zLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1MgPSAvaVAoYWR8aG9uZXxvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA0IHJlcXVpcmVzIGFuIGV4Y2VwdGlvbiBmb3Igc2VsZWN0IGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1M0ID0gZGV2aWNlSXNJT1MgJiYgKC9PUyA0X1xcZChfXFxkKT8vKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA2LjAtNy4qIHJlcXVpcmVzIHRoZSB0YXJnZXQgZWxlbWVudCB0byBiZSBtYW51YWxseSBkZXJpdmVkXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0lPU1dpdGhCYWRUYXJnZXQgPSBkZXZpY2VJc0lPUyAmJiAoL09TIFs2LTddX1xcZC8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cblx0LyoqXG5cdCAqIEJsYWNrQmVycnkgcmVxdWlyZXMgZXhjZXB0aW9ucy5cblx0ICpcblx0ICogQHR5cGUgYm9vbGVhblxuXHQgKi9cblx0dmFyIGRldmljZUlzQmxhY2tCZXJyeTEwID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdCQjEwJykgPiAwO1xuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIGVsZW1lbnQgcmVxdWlyZXMgYSBuYXRpdmUgY2xpY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IG5lZWRzIGEgbmF0aXZlIGNsaWNrXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzQ2xpY2sgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cblx0XHQvLyBEb24ndCBzZW5kIGEgc3ludGhldGljIGNsaWNrIHRvIGRpc2FibGVkIGlucHV0cyAoaXNzdWUgIzYyKVxuXHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRjYXNlICd0ZXh0YXJlYSc6XG5cdFx0XHRpZiAodGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdpbnB1dCc6XG5cblx0XHRcdC8vIEZpbGUgaW5wdXRzIG5lZWQgcmVhbCBjbGlja3Mgb24gaU9TIDYgZHVlIHRvIGEgYnJvd3NlciBidWcgKGlzc3VlICM2OClcblx0XHRcdGlmICgoZGV2aWNlSXNJT1MgJiYgdGFyZ2V0LnR5cGUgPT09ICdmaWxlJykgfHwgdGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdsYWJlbCc6XG5cdFx0Y2FzZSAnaWZyYW1lJzogLy8gaU9TOCBob21lc2NyZWVuIGFwcHMgY2FuIHByZXZlbnQgZXZlbnRzIGJ1YmJsaW5nIGludG8gZnJhbWVzXG5cdFx0Y2FzZSAndmlkZW8nOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICgvXFxibmVlZHNjbGlja1xcYi8pLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSk7XG5cdH07XG5cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBjbGljayBpbnRvIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBuYXRpdmUgY2xpY2suXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzRm9jdXMgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAndGV4dGFyZWEnOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRcdHJldHVybiAhZGV2aWNlSXNBbmRyb2lkO1xuXHRcdGNhc2UgJ2lucHV0Jzpcblx0XHRcdHN3aXRjaCAodGFyZ2V0LnR5cGUpIHtcblx0XHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0XHRjYXNlICdjaGVja2JveCc6XG5cdFx0XHRjYXNlICdmaWxlJzpcblx0XHRcdGNhc2UgJ2ltYWdlJzpcblx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTm8gcG9pbnQgaW4gYXR0ZW1wdGluZyB0byBmb2N1cyBkaXNhYmxlZCBpbnB1dHNcblx0XHRcdHJldHVybiAhdGFyZ2V0LmRpc2FibGVkICYmICF0YXJnZXQucmVhZE9ubHk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoL1xcYm5lZWRzZm9jdXNcXGIvKS50ZXN0KHRhcmdldC5jbGFzc05hbWUpO1xuXHRcdH1cblx0fTtcblxuXG5cdC8qKlxuXHQgKiBTZW5kIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEVsZW1lbnR9IHRhcmdldEVsZW1lbnRcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuc2VuZENsaWNrID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpIHtcblx0XHR2YXIgY2xpY2tFdmVudCwgdG91Y2g7XG5cblx0XHQvLyBPbiBzb21lIEFuZHJvaWQgZGV2aWNlcyBhY3RpdmVFbGVtZW50IG5lZWRzIHRvIGJlIGJsdXJyZWQgb3RoZXJ3aXNlIHRoZSBzeW50aGV0aWMgY2xpY2sgd2lsbCBoYXZlIG5vIGVmZmVjdCAoIzI0KVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRhcmdldEVsZW1lbnQpIHtcblx0XHRcdGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdH1cblxuXHRcdHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG5cblx0XHQvLyBTeW50aGVzaXNlIGEgY2xpY2sgZXZlbnQsIHdpdGggYW4gZXh0cmEgYXR0cmlidXRlIHNvIGl0IGNhbiBiZSB0cmFja2VkXG5cdFx0Y2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuXHRcdGNsaWNrRXZlbnQuaW5pdE1vdXNlRXZlbnQodGhpcy5kZXRlcm1pbmVFdmVudFR5cGUodGFyZ2V0RWxlbWVudCksIHRydWUsIHRydWUsIHdpbmRvdywgMSwgdG91Y2guc2NyZWVuWCwgdG91Y2guc2NyZWVuWSwgdG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXHRcdGNsaWNrRXZlbnQuZm9yd2FyZGVkVG91Y2hFdmVudCA9IHRydWU7XG5cdFx0dGFyZ2V0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGNsaWNrRXZlbnQpO1xuXHR9O1xuXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZGV0ZXJtaW5lRXZlbnRUeXBlID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXG5cdFx0Ly9Jc3N1ZSAjMTU5OiBBbmRyb2lkIENocm9tZSBTZWxlY3QgQm94IGRvZXMgbm90IG9wZW4gd2l0aCBhIHN5bnRoZXRpYyBjbGljayBldmVudFxuXHRcdGlmIChkZXZpY2VJc0FuZHJvaWQgJiYgdGFyZ2V0RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ21vdXNlZG93bic7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdjbGljayc7XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXHRcdHZhciBsZW5ndGg7XG5cblx0XHQvLyBJc3N1ZSAjMTYwOiBvbiBpT1MgNywgc29tZSBpbnB1dCBlbGVtZW50cyAoZS5nLiBkYXRlIGRhdGV0aW1lIG1vbnRoKSB0aHJvdyBhIHZhZ3VlIFR5cGVFcnJvciBvbiBzZXRTZWxlY3Rpb25SYW5nZS4gVGhlc2UgZWxlbWVudHMgZG9uJ3QgaGF2ZSBhbiBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCBwcm9wZXJ0aWVzLCBidXQgdW5mb3J0dW5hdGVseSB0aGF0IGNhbid0IGJlIHVzZWQgZm9yIGRldGVjdGlvbiBiZWNhdXNlIGFjY2Vzc2luZyB0aGUgcHJvcGVydGllcyBhbHNvIHRocm93cyBhIFR5cGVFcnJvci4gSnVzdCBjaGVjayB0aGUgdHlwZSBpbnN0ZWFkLiBGaWxlZCBhcyBBcHBsZSBidWcgIzE1MTIyNzI0LlxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiB0YXJnZXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlICYmIHRhcmdldEVsZW1lbnQudHlwZS5pbmRleE9mKCdkYXRlJykgIT09IDAgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAndGltZScgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAnbW9udGgnKSB7XG5cdFx0XHRsZW5ndGggPSB0YXJnZXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblx0XHRcdHRhcmdldEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2YgYSBzY3JvbGxhYmxlIGxheWVyIGFuZCBpZiBzbywgc2V0IGEgZmxhZyBvbiBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLnVwZGF0ZVNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uKHRhcmdldEVsZW1lbnQpIHtcblx0XHR2YXIgc2Nyb2xsUGFyZW50LCBwYXJlbnRFbGVtZW50O1xuXG5cdFx0c2Nyb2xsUGFyZW50ID0gdGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQ7XG5cblx0XHQvLyBBdHRlbXB0IHRvIGRpc2NvdmVyIHdoZXRoZXIgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxhYmxlIGxheWVyLiBSZS1jaGVjayBpZiB0aGVcblx0XHQvLyB0YXJnZXQgZWxlbWVudCB3YXMgbW92ZWQgdG8gYW5vdGhlciBwYXJlbnQuXG5cdFx0aWYgKCFzY3JvbGxQYXJlbnQgfHwgIXNjcm9sbFBhcmVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0cGFyZW50RWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGlmIChwYXJlbnRFbGVtZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KSB7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50ID0gcGFyZW50RWxlbWVudDtcblx0XHRcdFx0XHR0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudCA9IHBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0fSB3aGlsZSAocGFyZW50RWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWx3YXlzIHVwZGF0ZSB0aGUgc2Nyb2xsIHRvcCB0cmFja2VyIGlmIHBvc3NpYmxlLlxuXHRcdGlmIChzY3JvbGxQYXJlbnQpIHtcblx0XHRcdHNjcm9sbFBhcmVudC5mYXN0Q2xpY2tMYXN0U2Nyb2xsVG9wID0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcDtcblx0XHR9XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0RWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxFdmVudFRhcmdldH1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldCA9IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0KSB7XG5cblx0XHQvLyBPbiBzb21lIG9sZGVyIGJyb3dzZXJzIChub3RhYmx5IFNhZmFyaSBvbiBpT1MgNC4xIC0gc2VlIGlzc3VlICM1NikgdGhlIGV2ZW50IHRhcmdldCBtYXkgYmUgYSB0ZXh0IG5vZGUuXG5cdFx0aWYgKGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuXHRcdFx0cmV0dXJuIGV2ZW50VGFyZ2V0LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50VGFyZ2V0O1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIHRvdWNoIHN0YXJ0LCByZWNvcmQgdGhlIHBvc2l0aW9uIGFuZCBzY3JvbGwgb2Zmc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdGFyZ2V0RWxlbWVudCwgdG91Y2gsIHNlbGVjdGlvbjtcblxuXHRcdC8vIElnbm9yZSBtdWx0aXBsZSB0b3VjaGVzLCBvdGhlcndpc2UgcGluY2gtdG8tem9vbSBpcyBwcmV2ZW50ZWQgaWYgYm90aCBmaW5nZXJzIGFyZSBvbiB0aGUgRmFzdENsaWNrIGVsZW1lbnQgKGlzc3VlICMxMTEpLlxuXHRcdGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHRhcmdldEVsZW1lbnQgPSB0aGlzLmdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnRUYXJnZXQoZXZlbnQudGFyZ2V0KTtcblx0XHR0b3VjaCA9IGV2ZW50LnRhcmdldFRvdWNoZXNbMF07XG5cblx0XHRpZiAoZGV2aWNlSXNJT1MpIHtcblxuXHRcdFx0Ly8gT25seSB0cnVzdGVkIGV2ZW50cyB3aWxsIGRlc2VsZWN0IHRleHQgb24gaU9TIChpc3N1ZSAjNDkpXG5cdFx0XHRzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFkZXZpY2VJc0lPUzQpIHtcblxuXHRcdFx0XHQvLyBXZWlyZCB0aGluZ3MgaGFwcGVuIG9uIGlPUyB3aGVuIGFuIGFsZXJ0IG9yIGNvbmZpcm0gZGlhbG9nIGlzIG9wZW5lZCBmcm9tIGEgY2xpY2sgZXZlbnQgY2FsbGJhY2sgKGlzc3VlICMyMyk6XG5cdFx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgbmV4dCB0YXBzIGFueXdoZXJlIGVsc2Ugb24gdGhlIHBhZ2UsIG5ldyB0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCBldmVudHMgYXJlIGRpc3BhdGNoZWRcblx0XHRcdFx0Ly8gd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIHRoZSB0b3VjaCBldmVudCB0aGF0IHByZXZpb3VzbHkgdHJpZ2dlcmVkIHRoZSBjbGljayB0aGF0IHRyaWdnZXJlZCB0aGUgYWxlcnQuXG5cdFx0XHRcdC8vIFNhZGx5LCB0aGVyZSBpcyBhbiBpc3N1ZSBvbiBpT1MgNCB0aGF0IGNhdXNlcyBzb21lIG5vcm1hbCB0b3VjaCBldmVudHMgdG8gaGF2ZSB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIGFuXG5cdFx0XHRcdC8vIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdG91Y2ggZXZlbnQgKGlzc3VlICM1MiksIHNvIHRoaXMgZml4IGlzIHVuYXZhaWxhYmxlIG9uIHRoYXQgcGxhdGZvcm0uXG5cdFx0XHRcdC8vIElzc3VlIDEyMDogdG91Y2guaWRlbnRpZmllciBpcyAwIHdoZW4gQ2hyb21lIGRldiB0b29scyAnRW11bGF0ZSB0b3VjaCBldmVudHMnIGlzIHNldCB3aXRoIGFuIGlPUyBkZXZpY2UgVUEgc3RyaW5nLFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgYWxsIHRvdWNoIGV2ZW50cyB0byBiZSBpZ25vcmVkLiBBcyB0aGlzIGJsb2NrIG9ubHkgYXBwbGllcyB0byBpT1MsIGFuZCBpT1MgaWRlbnRpZmllcnMgYXJlIGFsd2F5cyBsb25nLFxuXHRcdFx0XHQvLyByYW5kb20gaW50ZWdlcnMsIGl0J3Mgc2FmZSB0byB0byBjb250aW51ZSBpZiB0aGUgaWRlbnRpZmllciBpcyAwIGhlcmUuXG5cdFx0XHRcdGlmICh0b3VjaC5pZGVudGlmaWVyICYmIHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMubGFzdFRvdWNoSWRlbnRpZmllcikge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5sYXN0VG91Y2hJZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtcblxuXHRcdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBjaGlsZCBvZiBhIHNjcm9sbGFibGUgbGF5ZXIgKHVzaW5nIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaCkgYW5kOlxuXHRcdFx0XHQvLyAxKSB0aGUgdXNlciBkb2VzIGEgZmxpbmcgc2Nyb2xsIG9uIHRoZSBzY3JvbGxhYmxlIGxheWVyXG5cdFx0XHRcdC8vIDIpIHRoZSB1c2VyIHN0b3BzIHRoZSBmbGluZyBzY3JvbGwgd2l0aCBhbm90aGVyIHRhcFxuXHRcdFx0XHQvLyB0aGVuIHRoZSBldmVudC50YXJnZXQgb2YgdGhlIGxhc3QgJ3RvdWNoZW5kJyBldmVudCB3aWxsIGJlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHVuZGVyIHRoZSB1c2VyJ3MgZmluZ2VyXG5cdFx0XHRcdC8vIHdoZW4gdGhlIGZsaW5nIHNjcm9sbCB3YXMgc3RhcnRlZCwgY2F1c2luZyBGYXN0Q2xpY2sgdG8gc2VuZCBhIGNsaWNrIGV2ZW50IHRvIHRoYXQgbGF5ZXIgLSB1bmxlc3MgYSBjaGVja1xuXHRcdFx0XHQvLyBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IGEgcGFyZW50IGxheWVyIHdhcyBub3Qgc2Nyb2xsZWQgYmVmb3JlIHNlbmRpbmcgYSBzeW50aGV0aWMgY2xpY2sgKGlzc3VlICM0MikuXG5cdFx0XHRcdHRoaXMudXBkYXRlU2Nyb2xsUGFyZW50KHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IHRydWU7XG5cdFx0dGhpcy50cmFja2luZ0NsaWNrU3RhcnQgPSBldmVudC50aW1lU3RhbXA7XG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcblxuXHRcdHRoaXMudG91Y2hTdGFydFggPSB0b3VjaC5wYWdlWDtcblx0XHR0aGlzLnRvdWNoU3RhcnRZID0gdG91Y2gucGFnZVk7XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblxuXHQvKipcblx0ICogQmFzZWQgb24gYSB0b3VjaG1vdmUgZXZlbnQgb2JqZWN0LCBjaGVjayB3aGV0aGVyIHRoZSB0b3VjaCBoYXMgbW92ZWQgcGFzdCBhIGJvdW5kYXJ5IHNpbmNlIGl0IHN0YXJ0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS50b3VjaEhhc01vdmVkID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSwgYm91bmRhcnkgPSB0aGlzLnRvdWNoQm91bmRhcnk7XG5cblx0XHRpZiAoTWF0aC5hYnModG91Y2gucGFnZVggLSB0aGlzLnRvdWNoU3RhcnRYKSA+IGJvdW5kYXJ5IHx8IE1hdGguYWJzKHRvdWNoLnBhZ2VZIC0gdGhpcy50b3VjaFN0YXJ0WSkgPiBib3VuZGFyeSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgbGFzdCBwb3NpdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMudHJhY2tpbmdDbGljaykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHRvdWNoIGhhcyBtb3ZlZCwgY2FuY2VsIHRoZSBjbGljayB0cmFja2luZ1xuXHRcdGlmICh0aGlzLnRhcmdldEVsZW1lbnQgIT09IHRoaXMuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldChldmVudC50YXJnZXQpIHx8IHRoaXMudG91Y2hIYXNNb3ZlZChldmVudCkpIHtcblx0XHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBBdHRlbXB0IHRvIGZpbmQgdGhlIGxhYmVsbGVkIGNvbnRyb2wgZm9yIHRoZSBnaXZlbiBsYWJlbCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEhUTUxMYWJlbEVsZW1lbnR9IGxhYmVsRWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS5maW5kQ29udHJvbCA9IGZ1bmN0aW9uKGxhYmVsRWxlbWVudCkge1xuXG5cdFx0Ly8gRmFzdCBwYXRoIGZvciBuZXdlciBicm93c2VycyBzdXBwb3J0aW5nIHRoZSBIVE1MNSBjb250cm9sIGF0dHJpYnV0ZVxuXHRcdGlmIChsYWJlbEVsZW1lbnQuY29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gbGFiZWxFbGVtZW50LmNvbnRyb2w7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGJyb3dzZXJzIHVuZGVyIHRlc3QgdGhhdCBzdXBwb3J0IHRvdWNoIGV2ZW50cyBhbHNvIHN1cHBvcnQgdGhlIEhUTUw1IGh0bWxGb3IgYXR0cmlidXRlXG5cdFx0aWYgKGxhYmVsRWxlbWVudC5odG1sRm9yKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGFiZWxFbGVtZW50Lmh0bWxGb3IpO1xuXHRcdH1cblxuXHRcdC8vIElmIG5vIGZvciBhdHRyaWJ1dGUgZXhpc3RzLCBhdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBsYWJlbGxhYmxlIGRlc2NlbmRhbnQgZWxlbWVudFxuXHRcdC8vIHRoZSBsaXN0IG9mIHdoaWNoIGlzIGRlZmluZWQgaGVyZTogaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCNjYXRlZ29yeS1sYWJlbFxuXHRcdHJldHVybiBsYWJlbEVsZW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLCBpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSksIGtleWdlbiwgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHNlbGVjdCwgdGV4dGFyZWEnKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBPbiB0b3VjaCBlbmQsIGRldGVybWluZSB3aGV0aGVyIHRvIHNlbmQgYSBjbGljayBldmVudCBhdCBvbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0dmFyIGZvckVsZW1lbnQsIHRyYWNraW5nQ2xpY2tTdGFydCwgdGFyZ2V0VGFnTmFtZSwgc2Nyb2xsUGFyZW50LCB0b3VjaCwgdGFyZ2V0RWxlbWVudCA9IHRoaXMudGFyZ2V0RWxlbWVudDtcblxuXHRcdGlmICghdGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdHRoaXMuY2FuY2VsTmV4dENsaWNrID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy50cmFja2luZ0NsaWNrU3RhcnQpID4gdGhpcy50YXBUaW1lb3V0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBSZXNldCB0byBwcmV2ZW50IHdyb25nIGNsaWNrIGNhbmNlbCBvbiBpbnB1dCAoaXNzdWUgIzE1NikuXG5cdFx0dGhpcy5jYW5jZWxOZXh0Q2xpY2sgPSBmYWxzZTtcblxuXHRcdHRoaXMubGFzdENsaWNrVGltZSA9IGV2ZW50LnRpbWVTdGFtcDtcblxuXHRcdHRyYWNraW5nQ2xpY2tTdGFydCA9IHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0O1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXHRcdC8vIE9uIHNvbWUgaU9TIGRldmljZXMsIHRoZSB0YXJnZXRFbGVtZW50IHN1cHBsaWVkIHdpdGggdGhlIGV2ZW50IGlzIGludmFsaWQgaWYgdGhlIGxheWVyXG5cdFx0Ly8gaXMgcGVyZm9ybWluZyBhIHRyYW5zaXRpb24gb3Igc2Nyb2xsLCBhbmQgaGFzIHRvIGJlIHJlLWRldGVjdGVkIG1hbnVhbGx5LiBOb3RlIHRoYXRcblx0XHQvLyBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHksIGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogdGhlIGV2ZW50IHRhcmdldCBpcyBjaGVja2VkIVxuXHRcdC8vIFNlZSBpc3N1ZSAjNTc7IGFsc28gZmlsZWQgYXMgcmRhcjovLzEzMDQ4NTg5IC5cblx0XHRpZiAoZGV2aWNlSXNJT1NXaXRoQmFkVGFyZ2V0KSB7XG5cdFx0XHR0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuXG5cdFx0XHQvLyBJbiBjZXJ0YWluIGNhc2VzIGFyZ3VtZW50cyBvZiBlbGVtZW50RnJvbVBvaW50IGNhbiBiZSBuZWdhdGl2ZSwgc28gcHJldmVudCBzZXR0aW5nIHRhcmdldEVsZW1lbnQgdG8gbnVsbFxuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2gucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIHRvdWNoLnBhZ2VZIC0gd2luZG93LnBhZ2VZT2Zmc2V0KSB8fCB0YXJnZXRFbGVtZW50O1xuXHRcdFx0dGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQgPSB0aGlzLnRhcmdldEVsZW1lbnQuZmFzdENsaWNrU2Nyb2xsUGFyZW50O1xuXHRcdH1cblxuXHRcdHRhcmdldFRhZ05hbWUgPSB0YXJnZXRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ2xhYmVsJykge1xuXHRcdFx0Zm9yRWxlbWVudCA9IHRoaXMuZmluZENvbnRyb2wodGFyZ2V0RWxlbWVudCk7XG5cdFx0XHRpZiAoZm9yRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0RWxlbWVudCA9IGZvckVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLm5lZWRzRm9jdXModGFyZ2V0RWxlbWVudCkpIHtcblxuXHRcdFx0Ly8gQ2FzZSAxOiBJZiB0aGUgdG91Y2ggc3RhcnRlZCBhIHdoaWxlIGFnbyAoYmVzdCBndWVzcyBpcyAxMDBtcyBiYXNlZCBvbiB0ZXN0cyBmb3IgaXNzdWUgIzM2KSB0aGVuIGZvY3VzIHdpbGwgYmUgdHJpZ2dlcmVkIGFueXdheS4gUmV0dXJuIGVhcmx5IGFuZCB1bnNldCB0aGUgdGFyZ2V0IGVsZW1lbnQgcmVmZXJlbmNlIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgY2xpY2sgd2lsbCBiZSBhbGxvd2VkIHRocm91Z2guXG5cdFx0XHQvLyBDYXNlIDI6IFdpdGhvdXQgdGhpcyBleGNlcHRpb24gZm9yIGlucHV0IGVsZW1lbnRzIHRhcHBlZCB3aGVuIHRoZSBkb2N1bWVudCBpcyBjb250YWluZWQgaW4gYW4gaWZyYW1lLCB0aGVuIGFueSBpbnB1dHRlZCB0ZXh0IHdvbid0IGJlIHZpc2libGUgZXZlbiB0aG91Z2ggdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyB1cGRhdGVkIGFzIHRoZSB1c2VyIHR5cGVzIChpc3N1ZSAjMzcpLlxuXHRcdFx0aWYgKChldmVudC50aW1lU3RhbXAgLSB0cmFja2luZ0NsaWNrU3RhcnQpID4gMTAwIHx8IChkZXZpY2VJc0lPUyAmJiB3aW5kb3cudG9wICE9PSB3aW5kb3cgJiYgdGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JykpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5zZW5kQ2xpY2sodGFyZ2V0RWxlbWVudCwgZXZlbnQpO1xuXG5cdFx0XHQvLyBTZWxlY3QgZWxlbWVudHMgbmVlZCB0aGUgZXZlbnQgdG8gZ28gdGhyb3VnaCBvbiBpT1MgNCwgb3RoZXJ3aXNlIHRoZSBzZWxlY3RvciBtZW51IHdvbid0IG9wZW4uXG5cdFx0XHQvLyBBbHNvIHRoaXMgYnJlYWtzIG9wZW5pbmcgc2VsZWN0cyB3aGVuIFZvaWNlT3ZlciBpcyBhY3RpdmUgb24gaU9TNiwgaU9TNyAoYW5kIHBvc3NpYmx5IG90aGVycylcblx0XHRcdGlmICghZGV2aWNlSXNJT1MgfHwgdGFyZ2V0VGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiAhZGV2aWNlSXNJT1M0KSB7XG5cblx0XHRcdC8vIERvbid0IHNlbmQgYSBzeW50aGV0aWMgY2xpY2sgZXZlbnQgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBwYXJlbnQgbGF5ZXIgdGhhdCB3YXMgc2Nyb2xsZWRcblx0XHRcdC8vIGFuZCB0aGlzIHRhcCBpcyBiZWluZyB1c2VkIHRvIHN0b3AgdGhlIHNjcm9sbGluZyAodXN1YWxseSBpbml0aWF0ZWQgYnkgYSBmbGluZyAtIGlzc3VlICM0MikuXG5cdFx0XHRzY3JvbGxQYXJlbnQgPSB0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudDtcblx0XHRcdGlmIChzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50LmZhc3RDbGlja0xhc3RTY3JvbGxUb3AgIT09IHNjcm9sbFBhcmVudC5zY3JvbGxUb3ApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJldmVudCB0aGUgYWN0dWFsIGNsaWNrIGZyb20gZ29pbmcgdGhvdWdoIC0gdW5sZXNzIHRoZSB0YXJnZXQgbm9kZSBpcyBtYXJrZWQgYXMgcmVxdWlyaW5nXG5cdFx0Ly8gcmVhbCBjbGlja3Mgb3IgaWYgaXQgaXMgaW4gdGhlIHdoaXRlbGlzdCBpbiB3aGljaCBjYXNlIG9ubHkgbm9uLXByb2dyYW1tYXRpYyBjbGlja3MgYXJlIHBlcm1pdHRlZC5cblx0XHRpZiAoIXRoaXMubmVlZHNDbGljayh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuc2VuZENsaWNrKHRhcmdldEVsZW1lbnQsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblxuXHQvKipcblx0ICogT24gdG91Y2ggY2FuY2VsLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hDYW5jZWwgPSBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRyYWNraW5nQ2xpY2sgPSBmYWxzZTtcblx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIERldGVybWluZSBtb3VzZSBldmVudHMgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uTW91c2UgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdFx0Ly8gSWYgYSB0YXJnZXQgZWxlbWVudCB3YXMgbmV2ZXIgc2V0IChiZWNhdXNlIGEgdG91Y2ggZXZlbnQgd2FzIG5ldmVyIGZpcmVkKSBhbGxvdyB0aGUgZXZlbnRcblx0XHRpZiAoIXRoaXMudGFyZ2V0RWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50LmZvcndhcmRlZFRvdWNoRXZlbnQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFByb2dyYW1tYXRpY2FsbHkgZ2VuZXJhdGVkIGV2ZW50cyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBlbGVtZW50IHNob3VsZCBiZSBwZXJtaXR0ZWRcblx0XHRpZiAoIWV2ZW50LmNhbmNlbGFibGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIERlcml2ZSBhbmQgY2hlY2sgdGhlIHRhcmdldCBlbGVtZW50IHRvIHNlZSB3aGV0aGVyIHRoZSBtb3VzZSBldmVudCBuZWVkcyB0byBiZSBwZXJtaXR0ZWQ7XG5cdFx0Ly8gdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCwgcHJldmVudCBub24tdG91Y2ggY2xpY2sgZXZlbnRzIGZyb20gdHJpZ2dlcmluZyBhY3Rpb25zLFxuXHRcdC8vIHRvIHByZXZlbnQgZ2hvc3QvZG91YmxlY2xpY2tzLlxuXHRcdGlmICghdGhpcy5uZWVkc0NsaWNrKHRoaXMudGFyZ2V0RWxlbWVudCkgfHwgdGhpcy5jYW5jZWxOZXh0Q2xpY2spIHtcblxuXHRcdFx0Ly8gUHJldmVudCBhbnkgdXNlci1hZGRlZCBsaXN0ZW5lcnMgZGVjbGFyZWQgb24gRmFzdENsaWNrIGVsZW1lbnQgZnJvbSBiZWluZyBmaXJlZC5cblx0XHRcdGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFBhcnQgb2YgdGhlIGhhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBFdmVudCNzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gKGUuZy4gQW5kcm9pZCAyKVxuXHRcdFx0XHRldmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYW5jZWwgdGhlIGV2ZW50XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbW91c2UgZXZlbnQgaXMgcGVybWl0dGVkLCByZXR1cm4gdHJ1ZSBmb3IgdGhlIGFjdGlvbiB0byBnbyB0aHJvdWdoLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIGFjdHVhbCBjbGlja3MsIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSB0b3VjaC1nZW5lcmF0ZWQgY2xpY2ssIGEgY2xpY2sgYWN0aW9uIG9jY3VycmluZ1xuXHQgKiBuYXR1cmFsbHkgYWZ0ZXIgYSBkZWxheSBhZnRlciBhIHRvdWNoICh3aGljaCBuZWVkcyB0byBiZSBjYW5jZWxsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24pLCBvclxuXHQgKiBhbiBhY3R1YWwgY2xpY2sgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdHZhciBwZXJtaXR0ZWQ7XG5cblx0XHQvLyBJdCdzIHBvc3NpYmxlIGZvciBhbm90aGVyIEZhc3RDbGljay1saWtlIGxpYnJhcnkgZGVsaXZlcmVkIHdpdGggdGhpcmQtcGFydHkgY29kZSB0byBmaXJlIGEgY2xpY2sgZXZlbnQgYmVmb3JlIEZhc3RDbGljayBkb2VzIChpc3N1ZSAjNDQpLiBJbiB0aGF0IGNhc2UsIHNldCB0aGUgY2xpY2stdHJhY2tpbmcgZmxhZyBiYWNrIHRvIGZhbHNlIGFuZCByZXR1cm4gZWFybHkuIFRoaXMgd2lsbCBjYXVzZSBvblRvdWNoRW5kIHRvIHJldHVybiBlYXJseS5cblx0XHRpZiAodGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHRcdFx0dGhpcy50cmFja2luZ0NsaWNrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBWZXJ5IG9kZCBiZWhhdmlvdXIgb24gaU9TIChpc3N1ZSAjMTgpOiBpZiBhIHN1Ym1pdCBlbGVtZW50IGlzIHByZXNlbnQgaW5zaWRlIGEgZm9ybSBhbmQgdGhlIHVzZXIgaGl0cyBlbnRlciBpbiB0aGUgaU9TIHNpbXVsYXRvciBvciBjbGlja3MgdGhlIEdvIGJ1dHRvbiBvbiB0aGUgcG9wLXVwIE9TIGtleWJvYXJkIHRoZSBhIGtpbmQgb2YgJ2Zha2UnIGNsaWNrIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIHdpdGggdGhlIHN1Ym1pdC10eXBlIGlucHV0IGVsZW1lbnQgYXMgdGhlIHRhcmdldC5cblx0XHRpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdzdWJtaXQnICYmIGV2ZW50LmRldGFpbCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cGVybWl0dGVkID0gdGhpcy5vbk1vdXNlKGV2ZW50KTtcblxuXHRcdC8vIE9ubHkgdW5zZXQgdGFyZ2V0RWxlbWVudCBpZiB0aGUgY2xpY2sgaXMgbm90IHBlcm1pdHRlZC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBjaGVjayBmb3IgIXRhcmdldEVsZW1lbnQgaW4gb25Nb3VzZSBmYWlscyBhbmQgdGhlIGJyb3dzZXIncyBjbGljayBkb2Vzbid0IGdvIHRocm91Z2guXG5cdFx0aWYgKCFwZXJtaXR0ZWQpIHtcblx0XHRcdHRoaXMudGFyZ2V0RWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgY2xpY2tzIGFyZSBwZXJtaXR0ZWQsIHJldHVybiB0cnVlIGZvciB0aGUgYWN0aW9uIHRvIGdvIHRocm91Z2guXG5cdFx0cmV0dXJuIHBlcm1pdHRlZDtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIEZhc3RDbGljaydzIGV2ZW50IGxpc3RlbmVycy5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGF5ZXIgPSB0aGlzLmxheWVyO1xuXG5cdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZSwgdHJ1ZSk7XG5cdFx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHR9XG5cblx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGljaywgdHJ1ZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgZmFsc2UpO1xuXHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLm9uVG91Y2hDYW5jZWwsIGZhbHNlKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBDaGVjayB3aGV0aGVyIEZhc3RDbGljayBpcyBuZWVkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKi9cblx0RmFzdENsaWNrLm5vdE5lZWRlZCA9IGZ1bmN0aW9uKGxheWVyKSB7XG5cdFx0dmFyIG1ldGFWaWV3cG9ydDtcblx0XHR2YXIgY2hyb21lVmVyc2lvbjtcblx0XHR2YXIgYmxhY2tiZXJyeVZlcnNpb247XG5cdFx0dmFyIGZpcmVmb3hWZXJzaW9uO1xuXG5cdFx0Ly8gRGV2aWNlcyB0aGF0IGRvbid0IHN1cHBvcnQgdG91Y2ggZG9uJ3QgbmVlZCBGYXN0Q2xpY2tcblx0XHRpZiAodHlwZW9mIHdpbmRvdy5vbnRvdWNoc3RhcnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBDaHJvbWUgdmVyc2lvbiAtIHplcm8gZm9yIG90aGVyIGJyb3dzZXJzXG5cdFx0Y2hyb21lVmVyc2lvbiA9ICsoL0Nocm9tZVxcLyhbMC05XSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IFssMF0pWzFdO1xuXG5cdFx0aWYgKGNocm9tZVZlcnNpb24pIHtcblxuXHRcdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0XHRtZXRhVmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7XG5cblx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydCkge1xuXHRcdFx0XHRcdC8vIENocm9tZSBvbiBBbmRyb2lkIHdpdGggdXNlci1zY2FsYWJsZT1cIm5vXCIgZG9lc24ndCBuZWVkIEZhc3RDbGljayAoaXNzdWUgIzg5KVxuXHRcdFx0XHRcdGlmIChtZXRhVmlld3BvcnQuY29udGVudC5pbmRleE9mKCd1c2VyLXNjYWxhYmxlPW5vJykgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2hyb21lIDMyIGFuZCBhYm92ZSB3aXRoIHdpZHRoPWRldmljZS13aWR0aCBvciBsZXNzIGRvbid0IG5lZWQgRmFzdENsaWNrXG5cdFx0XHRcdFx0aWYgKGNocm9tZVZlcnNpb24gPiAzMSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGggPD0gd2luZG93Lm91dGVyV2lkdGgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBDaHJvbWUgZGVza3RvcCBkb2Vzbid0IG5lZWQgRmFzdENsaWNrIChpc3N1ZSAjMTUpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZGV2aWNlSXNCbGFja0JlcnJ5MTApIHtcblx0XHRcdGJsYWNrYmVycnlWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblxcLyhbMC05XSopXFwuKFswLTldKikvKTtcblxuXHRcdFx0Ly8gQmxhY2tCZXJyeSAxMC4zKyBkb2VzIG5vdCByZXF1aXJlIEZhc3RjbGljayBsaWJyYXJ5LlxuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2Z0bGFicy9mYXN0Y2xpY2svaXNzdWVzLzI1MVxuXHRcdFx0aWYgKGJsYWNrYmVycnlWZXJzaW9uWzFdID49IDEwICYmIGJsYWNrYmVycnlWZXJzaW9uWzJdID49IDMpIHtcblx0XHRcdFx0bWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPXZpZXdwb3J0XScpO1xuXG5cdFx0XHRcdGlmIChtZXRhVmlld3BvcnQpIHtcblx0XHRcdFx0XHQvLyB1c2VyLXNjYWxhYmxlPW5vIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB3aWR0aD1kZXZpY2Utd2lkdGggKG9yIGxlc3MgdGhhbiBkZXZpY2Utd2lkdGgpIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCA8PSB3aW5kb3cub3V0ZXJXaWR0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSUUxMCB3aXRoIC1tcy10b3VjaC1hY3Rpb246IG5vbmUgb3IgbWFuaXB1bGF0aW9uLCB3aGljaCBkaXNhYmxlcyBkb3VibGUtdGFwLXRvLXpvb20gKGlzc3VlICM5Nylcblx0XHRpZiAobGF5ZXIuc3R5bGUubXNUb3VjaEFjdGlvbiA9PT0gJ25vbmUnIHx8IGxheWVyLnN0eWxlLnRvdWNoQWN0aW9uID09PSAnbWFuaXB1bGF0aW9uJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZWZveCB2ZXJzaW9uIC0gemVybyBmb3Igb3RoZXIgYnJvd3NlcnNcblx0XHRmaXJlZm94VmVyc2lvbiA9ICsoL0ZpcmVmb3hcXC8oWzAtOV0rKS8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCBbLDBdKVsxXTtcblxuXHRcdGlmIChmaXJlZm94VmVyc2lvbiA+PSAyNykge1xuXHRcdFx0Ly8gRmlyZWZveCAyNysgZG9lcyBub3QgaGF2ZSB0YXAgZGVsYXkgaWYgdGhlIGNvbnRlbnQgaXMgbm90IHpvb21hYmxlIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyODk2XG5cblx0XHRcdG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT12aWV3cG9ydF0nKTtcblx0XHRcdGlmIChtZXRhVmlld3BvcnQgJiYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoIDw9IHdpbmRvdy5vdXRlcldpZHRoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJRTExOiBwcmVmaXhlZCAtbXMtdG91Y2gtYWN0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYW5kIGl0J3MgcmVjb21lbmRlZCB0byB1c2Ugbm9uLXByZWZpeGVkIHZlcnNpb25cblx0XHQvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9hcHBzL0hoNzY3MzEzLmFzcHhcblx0XHRpZiAobGF5ZXIuc3R5bGUudG91Y2hBY3Rpb24gPT09ICdub25lJyB8fCBsYXllci5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ21hbmlwdWxhdGlvbicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBGYXN0Q2xpY2sgb2JqZWN0XG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0c1xuXHQgKi9cblx0RmFzdENsaWNrLmF0dGFjaCA9IGZ1bmN0aW9uKGxheWVyLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIG5ldyBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpO1xuXHR9O1xuXG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblxuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRmFzdENsaWNrO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBGYXN0Q2xpY2suYXR0YWNoO1xuXHRcdG1vZHVsZS5leHBvcnRzLkZhc3RDbGljayA9IEZhc3RDbGljaztcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuRmFzdENsaWNrID0gRmFzdENsaWNrO1xuXHR9XG59KCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///62\n"); - -/***/ }), -/* 63 */ +/***/ 54: /***/ (function(module, exports) { -eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! AdminLTE app.js\n* ================\n* Main JS application file for AdminLTE v2. This file\n* should be included in all pages. It controls some layout\n* options and implements exclusive AdminLTE plugins.\n*\n* @Author Almsaeed Studio\n* @Support <https://www.almsaeedstudio.com>\n* @Email <abdullah@almsaeedstudio.com>\n* @version 2.4.2\n* @repository git://github.com/almasaeed2010/AdminLTE.git\n* @license MIT <http://opensource.org/licenses/MIT>\n*/\nif (\"undefined\" == typeof jQuery) throw new Error(\"AdminLTE requires jQuery\");+function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n g = e.data(c);if (!g) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, g = new f(e, h));\n }if (\"string\" == typeof g) {\n if (void 0 === g[b]) throw new Error(\"No method named \" + b);g[b]();\n }\n });\n }var c = \"lte.boxrefresh\",\n d = { source: \"\", params: {}, trigger: \".refresh-btn\", content: \".box-body\", loadInContent: !0, responseType: \"\", overlayTemplate: '<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>', onLoadStart: function onLoadStart() {}, onLoadDone: function onLoadDone(a) {\n return a;\n } },\n e = { data: '[data-widget=\"box-refresh\"]' },\n f = function f(b, c) {\n if (this.element = b, this.options = c, this.$overlay = a(c.overlay), \"\" === c.source) throw new Error(\"Source url was not defined. Please specify a url in your BoxRefresh source option.\");this._setUpListeners(), this.load();\n };f.prototype.load = function () {\n this._addOverlay(), this.options.onLoadStart.call(a(this)), a.get(this.options.source, this.options.params, function (b) {\n this.options.loadInContent && a(this.options.content).html(b), this.options.onLoadDone.call(a(this), b), this._removeOverlay();\n }.bind(this), \"\" !== this.options.responseType && this.options.responseType);\n }, f.prototype._setUpListeners = function () {\n a(this.element).on(\"click\", e.trigger, function (a) {\n a && a.preventDefault(), this.load();\n }.bind(this));\n }, f.prototype._addOverlay = function () {\n a(this.element).append(this.$overlay);\n }, f.prototype._removeOverlay = function () {\n a(this.element).remove(this.$overlay);\n };var g = a.fn.boxRefresh;a.fn.boxRefresh = b, a.fn.boxRefresh.Constructor = f, a.fn.boxRefresh.noConflict = function () {\n return a.fn.boxRefresh = g, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.boxwidget\",\n d = { animationSpeed: 500, collapseTrigger: '[data-widget=\"collapse\"]', removeTrigger: '[data-widget=\"remove\"]', collapseIcon: \"fa-minus\", expandIcon: \"fa-plus\", removeIcon: \"fa-times\" },\n e = { data: \".box\", collapsed: \".collapsed-box\", header: \".box-header\", body: \".box-body\", footer: \".box-footer\", tools: \".box-tools\" },\n f = { collapsed: \"collapsed-box\" },\n g = { collapsed: \"collapsed.boxwidget\", expanded: \"expanded.boxwidget\", removed: \"removed.boxwidget\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };h.prototype.toggle = function () {\n a(this.element).is(e.collapsed) ? this.expand() : this.collapse();\n }, h.prototype.expand = function () {\n var b = a.Event(g.expanded),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).removeClass(f.collapsed), a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + d).removeClass(d).addClass(c), a(this.element).children(e.body + \", \" + e.footer).slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.collapse = function () {\n var b = a.Event(g.collapsed),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + c).removeClass(c).addClass(d), a(this.element).children(e.body + \", \" + e.footer).slideUp(this.options.animationSpeed, function () {\n a(this.element).addClass(f.collapsed), a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.remove = function () {\n var b = a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed, function () {\n a(this.element).trigger(b), a(this.element).remove();\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.collapseTrigger, function (c) {\n return c && c.preventDefault(), b.toggle(a(this)), !1;\n }), a(this.element).on(\"click\", this.options.removeTrigger, function (c) {\n return c && c.preventDefault(), b.remove(a(this)), !1;\n });\n };var i = a.fn.boxWidget;a.fn.boxWidget = b, a.fn.boxWidget.Constructor = h, a.fn.boxWidget.noConflict = function () {\n return a.fn.boxWidget = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }\"string\" == typeof b && f.toggle();\n });\n }var c = \"lte.controlsidebar\",\n d = { slide: !0 },\n e = { sidebar: \".control-sidebar\", data: '[data-toggle=\"control-sidebar\"]', open: \".control-sidebar-open\", bg: \".control-sidebar-bg\", wrapper: \".wrapper\", content: \".content-wrapper\", boxed: \".layout-boxed\" },\n f = { open: \"control-sidebar-open\", fixed: \"fixed\" },\n g = { collapsed: \"collapsed.controlsidebar\", expanded: \"expanded.controlsidebar\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this.hasBindedResize = !1, this.init();\n };h.prototype.init = function () {\n a(this.element).is(e.data) || a(this).on(\"click\", this.toggle), this.fix(), a(window).resize(function () {\n this.fix();\n }.bind(this));\n }, h.prototype.toggle = function (b) {\n b && b.preventDefault(), this.fix(), a(e.sidebar).is(e.open) || a(\"body\").is(e.open) ? this.collapse() : this.expand();\n }, h.prototype.expand = function () {\n this.options.slide ? a(e.sidebar).addClass(f.open) : a(\"body\").addClass(f.open), a(this.element).trigger(a.Event(g.expanded));\n }, h.prototype.collapse = function () {\n a(\"body, \" + e.sidebar).removeClass(f.open), a(this.element).trigger(a.Event(g.collapsed));\n }, h.prototype.fix = function () {\n a(\"body\").is(e.boxed) && this._fixForBoxed(a(e.bg));\n }, h.prototype._fixForBoxed = function (b) {\n b.css({ position: \"absolute\", height: a(e.wrapper).height() });\n };var i = a.fn.controlSidebar;a.fn.controlSidebar = b, a.fn.controlSidebar.Constructor = h, a.fn.controlSidebar.noConflict = function () {\n return a.fn.controlSidebar = i, this;\n }, a(document).on(\"click\", e.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var d = a(this),\n e = d.data(c);e || d.data(c, e = new f(d)), \"string\" == typeof b && e.toggle(d);\n });\n }var c = \"lte.directchat\",\n d = { data: '[data-widget=\"chat-pane-toggle\"]', box: \".direct-chat\" },\n e = { open: \"direct-chat-contacts-open\" },\n f = function f(a) {\n this.element = a;\n };f.prototype.toggle = function (a) {\n a.parents(d.box).first().toggleClass(e.open);\n };var g = a.fn.directChat;a.fn.directChat = b, a.fn.directChat.Constructor = f, a.fn.directChat.noConflict = function () {\n return a.fn.directChat = g, this;\n }, a(document).on(\"click\", d.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(h));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.layout\",\n d = { slimscroll: !0, resetHeight: !0 },\n e = { wrapper: \".wrapper\", contentWrapper: \".content-wrapper\", layoutBoxed: \".layout-boxed\", mainFooter: \".main-footer\", mainHeader: \".main-header\", sidebar: \".sidebar\", controlSidebar: \".control-sidebar\", fixed: \".fixed\", sidebarMenu: \".sidebar-menu\", logo: \".main-header .logo\" },\n f = { fixed: \"fixed\", holdTransition: \"hold-transition\" },\n g = function g(a) {\n this.options = a, this.bindedResize = !1, this.activate();\n };g.prototype.activate = function () {\n this.fix(), this.fixSidebar(), a(\"body\").removeClass(f.holdTransition), this.options.resetHeight && a(\"body, html, \" + e.wrapper).css({ height: \"auto\", \"min-height\": \"100%\" }), this.bindedResize || (a(window).resize(function () {\n this.fix(), this.fixSidebar(), a(e.logo + \", \" + e.sidebar).one(\"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }.bind(this)), this.bindedResize = !0), a(e.sidebarMenu).on(\"expanded.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this)), a(e.sidebarMenu).on(\"collapsed.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }, g.prototype.fix = function () {\n a(e.layoutBoxed + \" > \" + e.wrapper).css(\"overflow\", \"hidden\");var b = a(e.mainFooter).outerHeight() || 0,\n c = a(e.mainHeader).outerHeight() + b,\n d = a(window).height(),\n g = a(e.sidebar).height() || 0;if (a(\"body\").hasClass(f.fixed)) a(e.contentWrapper).css(\"min-height\", d - b);else {\n var h;d >= g ? (a(e.contentWrapper).css(\"min-height\", d - c), h = d - c) : (a(e.contentWrapper).css(\"min-height\", g), h = g);var i = a(e.controlSidebar);void 0 !== i && i.height() > h && a(e.contentWrapper).css(\"min-height\", i.height());\n }\n }, g.prototype.fixSidebar = function () {\n if (!a(\"body\").hasClass(f.fixed)) return void (void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ destroy: !0 }).height(\"auto\"));this.options.slimscroll && void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ height: a(window).height() - a(e.mainHeader).height() + \"px\" });\n };var h = a.fn.layout;a.fn.layout = b, a.fn.layout.Constuctor = g, a.fn.layout.noConflict = function () {\n return a.fn.layout = h, this;\n }, a(window).on(\"load\", function () {\n b.call(a(\"body\"));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(g));\n }\"toggle\" === b && f.toggle();\n });\n }var c = \"lte.pushmenu\",\n d = { collapseScreenSize: 767, expandOnHover: !1, expandTransitionDelay: 200 },\n e = { collapsed: \".sidebar-collapse\", open: \".sidebar-open\", mainSidebar: \".main-sidebar\", contentWrapper: \".content-wrapper\", searchInput: \".sidebar-form .form-control\", button: '[data-toggle=\"push-menu\"]', mini: \".sidebar-mini\", expanded: \".sidebar-expanded-on-hover\", layoutFixed: \".fixed\" },\n f = { collapsed: \"sidebar-collapse\", open: \"sidebar-open\", mini: \"sidebar-mini\", expanded: \"sidebar-expanded-on-hover\", expandFeature: \"sidebar-mini-expand-feature\", layoutFixed: \"fixed\" },\n g = { expanded: \"expanded.pushMenu\", collapsed: \"collapsed.pushMenu\" },\n h = function h(a) {\n this.options = a, this.init();\n };h.prototype.init = function () {\n (this.options.expandOnHover || a(\"body\").is(e.mini + e.layoutFixed)) && (this.expandOnHover(), a(\"body\").addClass(f.expandFeature)), a(e.contentWrapper).click(function () {\n a(window).width() <= this.options.collapseScreenSize && a(\"body\").hasClass(f.open) && this.close();\n }.bind(this)), a(e.searchInput).click(function (a) {\n a.stopPropagation();\n });\n }, h.prototype.toggle = function () {\n var b = a(window).width(),\n c = !a(\"body\").hasClass(f.collapsed);b <= this.options.collapseScreenSize && (c = a(\"body\").hasClass(f.open)), c ? this.close() : this.open();\n }, h.prototype.open = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").removeClass(f.collapsed).trigger(a.Event(g.expanded)) : a(\"body\").addClass(f.open).trigger(a.Event(g.expanded));\n }, h.prototype.close = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").addClass(f.collapsed).trigger(a.Event(g.collapsed)) : a(\"body\").removeClass(f.open + \" \" + f.collapsed).trigger(a.Event(g.collapsed));\n }, h.prototype.expandOnHover = function () {\n a(e.mainSidebar).hover(function () {\n a(\"body\").is(e.mini + e.collapsed) && a(window).width() > this.options.collapseScreenSize && this.expand();\n }.bind(this), function () {\n a(\"body\").is(e.expanded) && this.collapse();\n }.bind(this));\n }, h.prototype.expand = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.collapsed).addClass(f.expanded);\n }, this.options.expandTransitionDelay);\n }, h.prototype.collapse = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.expanded).addClass(f.collapsed);\n }, this.options.expandTransitionDelay);\n };var i = a.fn.pushMenu;a.fn.pushMenu = b, a.fn.pushMenu.Constructor = h, a.fn.pushMenu.noConflict = function () {\n return a.fn.pushMenu = i, this;\n }, a(document).on(\"click\", e.button, function (c) {\n c.preventDefault(), b.call(a(this), \"toggle\");\n }), a(window).on(\"load\", function () {\n b.call(a(e.button));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(e, h));\n }if (\"string\" == typeof f) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.todolist\",\n d = { onCheck: function onCheck(a) {\n return a;\n }, onUnCheck: function onUnCheck(a) {\n return a;\n } },\n e = { data: '[data-widget=\"todo-list\"]' },\n f = { done: \"done\" },\n g = function g(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };g.prototype.toggle = function (a) {\n if (a.parents(e.li).first().toggleClass(f.done), !a.prop(\"checked\")) return void this.unCheck(a);this.check(a);\n }, g.prototype.check = function (a) {\n this.options.onCheck.call(a);\n }, g.prototype.unCheck = function (a) {\n this.options.onUnCheck.call(a);\n }, g.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"change ifChanged\", \"input:checkbox\", function () {\n b.toggle(a(this));\n });\n };var h = a.fn.todoList;a.fn.todoList = b, a.fn.todoList.Constructor = g, a.fn.todoList.noConflict = function () {\n return a.fn.todoList = h, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this);if (!e.data(c)) {\n var f = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, new h(e, f));\n }\n });\n }var c = \"lte.tree\",\n d = { animationSpeed: 500, accordion: !0, followLink: !1, trigger: \".treeview a\" },\n e = { tree: \".tree\", treeview: \".treeview\", treeviewMenu: \".treeview-menu\", open: \".menu-open, .active\", li: \"li\", data: '[data-widget=\"tree\"]', active: \".active\" },\n f = { open: \"menu-open\", tree: \"tree\" },\n g = { collapsed: \"collapsed.tree\", expanded: \"expanded.tree\" },\n h = function h(b, c) {\n this.element = b, this.options = c, a(this.element).addClass(f.tree), a(e.treeview + e.active, this.element).addClass(f.open), this._setUpListeners();\n };h.prototype.toggle = function (a, b) {\n var c = a.next(e.treeviewMenu),\n d = a.parent(),\n g = d.hasClass(f.open);d.is(e.treeview) && (this.options.followLink && \"#\" !== a.attr(\"href\") || b.preventDefault(), g ? this.collapse(c, d) : this.expand(c, d));\n }, h.prototype.expand = function (b, c) {\n var d = a.Event(g.expanded);if (this.options.accordion) {\n var h = c.siblings(e.open),\n i = h.children(e.treeviewMenu);this.collapse(i, h);\n }c.addClass(f.open), b.slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype.collapse = function (b, c) {\n var d = a.Event(g.collapsed);b.find(e.open).removeClass(f.open), c.removeClass(f.open), b.slideUp(this.options.animationSpeed, function () {\n b.find(e.open + \" > \" + e.treeview).slideUp(), a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.trigger, function (c) {\n b.toggle(a(this), c);\n });\n };var i = a.fn.tree;a.fn.tree = b, a.fn.tree.Constructor = h, a.fn.tree.noConflict = function () {\n return a.fn.tree = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcz9jMDQ2Il0sIm5hbWVzIjpbImpRdWVyeSIsIkVycm9yIiwiYSIsImIiLCJlYWNoIiwiZSIsImciLCJkYXRhIiwiYyIsImgiLCJleHRlbmQiLCJkIiwiZiIsInNvdXJjZSIsInBhcmFtcyIsInRyaWdnZXIiLCJjb250ZW50IiwibG9hZEluQ29udGVudCIsInJlc3BvbnNlVHlwZSIsIm92ZXJsYXlUZW1wbGF0ZSIsIm9uTG9hZFN0YXJ0Iiwib25Mb2FkRG9uZSIsImVsZW1lbnQiLCJvcHRpb25zIiwiJG92ZXJsYXkiLCJvdmVybGF5IiwiX3NldFVwTGlzdGVuZXJzIiwibG9hZCIsInByb3RvdHlwZSIsIl9hZGRPdmVybGF5IiwiY2FsbCIsImdldCIsImh0bWwiLCJfcmVtb3ZlT3ZlcmxheSIsImJpbmQiLCJvbiIsInByZXZlbnREZWZhdWx0IiwiYXBwZW5kIiwicmVtb3ZlIiwiZm4iLCJib3hSZWZyZXNoIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0Iiwid2luZG93IiwiYW5pbWF0aW9uU3BlZWQiLCJjb2xsYXBzZVRyaWdnZXIiLCJyZW1vdmVUcmlnZ2VyIiwiY29sbGFwc2VJY29uIiwiZXhwYW5kSWNvbiIsInJlbW92ZUljb24iLCJjb2xsYXBzZWQiLCJoZWFkZXIiLCJib2R5IiwiZm9vdGVyIiwidG9vbHMiLCJleHBhbmRlZCIsInJlbW92ZWQiLCJ0b2dnbGUiLCJpcyIsImV4cGFuZCIsImNvbGxhcHNlIiwiRXZlbnQiLCJyZW1vdmVDbGFzcyIsImNoaWxkcmVuIiwiZmluZCIsImFkZENsYXNzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImkiLCJib3hXaWRnZXQiLCJzbGlkZSIsInNpZGViYXIiLCJvcGVuIiwiYmciLCJ3cmFwcGVyIiwiYm94ZWQiLCJmaXhlZCIsImhhc0JpbmRlZFJlc2l6ZSIsImluaXQiLCJmaXgiLCJyZXNpemUiLCJfZml4Rm9yQm94ZWQiLCJjc3MiLCJwb3NpdGlvbiIsImhlaWdodCIsImNvbnRyb2xTaWRlYmFyIiwiZG9jdW1lbnQiLCJib3giLCJwYXJlbnRzIiwiZmlyc3QiLCJ0b2dnbGVDbGFzcyIsImRpcmVjdENoYXQiLCJzbGltc2Nyb2xsIiwicmVzZXRIZWlnaHQiLCJjb250ZW50V3JhcHBlciIsImxheW91dEJveGVkIiwibWFpbkZvb3RlciIsIm1haW5IZWFkZXIiLCJzaWRlYmFyTWVudSIsImxvZ28iLCJob2xkVHJhbnNpdGlvbiIsImJpbmRlZFJlc2l6ZSIsImFjdGl2YXRlIiwiZml4U2lkZWJhciIsIm9uZSIsIm91dGVySGVpZ2h0IiwiaGFzQ2xhc3MiLCJzbGltU2Nyb2xsIiwiZGVzdHJveSIsImxheW91dCIsIkNvbnN0dWN0b3IiLCJjb2xsYXBzZVNjcmVlblNpemUiLCJleHBhbmRPbkhvdmVyIiwiZXhwYW5kVHJhbnNpdGlvbkRlbGF5IiwibWFpblNpZGViYXIiLCJzZWFyY2hJbnB1dCIsImJ1dHRvbiIsIm1pbmkiLCJsYXlvdXRGaXhlZCIsImV4cGFuZEZlYXR1cmUiLCJjbGljayIsIndpZHRoIiwiY2xvc2UiLCJzdG9wUHJvcGFnYXRpb24iLCJob3ZlciIsInNldFRpbWVvdXQiLCJwdXNoTWVudSIsIm9uQ2hlY2siLCJvblVuQ2hlY2siLCJkb25lIiwibGkiLCJwcm9wIiwidW5DaGVjayIsImNoZWNrIiwidG9kb0xpc3QiLCJhY2NvcmRpb24iLCJmb2xsb3dMaW5rIiwidHJlZSIsInRyZWV2aWV3IiwidHJlZXZpZXdNZW51IiwiYWN0aXZlIiwibmV4dCIsInBhcmVudCIsImF0dHIiLCJzaWJsaW5ncyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7OztBQWFBLElBQUcsZUFBYSxPQUFPQSxNQUF2QixFQUE4QixNQUFNLElBQUlDLEtBQUosQ0FBVSwwQkFBVixDQUFOLENBQTRDLENBQUMsVUFBU0MsQ0FBVCxFQUFXO0FBQUM7QUFBYSxXQUFTQyxDQUFULENBQVdBLENBQVgsRUFBYTtB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LENBQXhCLENBQTFDO0FBQXFFLEtBQWhGLENBQWlGdUIsSUFBakYsQ0FBc0YsSUFBdEYsQ0FBdEMsQ0FBekQ7QUFBNEwsR0FBcnVCLEVBQXN1QnpCLEVBQUVtQixTQUFGLENBQVlGLGVBQVosR0FBNEIsWUFBVTtBQUFDLFFBQUl2QixJQUFFLElBQU4sQ0FBV0QsRUFBRSxLQUFLb0IsT0FBUCxFQUFnQmEsRUFBaEIsQ0FBbUIsT0FBbkIsRUFBMkIsS0FBS1osT0FBTCxDQUFhUixPQUF4QyxFQUFnRCxVQUFTUCxDQUFULEVBQVc7QUFBQ0wsUUFBRXNELE1BQUYsQ0FBU3ZELEVBQUUsSUFBRixDQUFULEVBQWlCTSxDQUFqQjtBQUFvQixLQUFoRjtBQUFrRixHQUExMkIsQ0FBMjJCLElBQUk0RCxJQUFFbEUsRUFBRXFDLEVBQUYsQ0FBS2tHLElBQVgsQ0FBZ0J2SSxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxHQUFVdEksQ0FBVixFQUFZRCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVaEcsV0FBVixHQUFzQmhDLENBQWxDLEVBQW9DUCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVL0YsVUFBVixHQUFxQixZQUFVO0FBQUMsV0FBT3hDLEVBQUVxQyxFQUFGLENBQUtrRyxJQUFMLEdBQVVyRSxDQUFWLEVBQVksSUFBbkI7QUFBd0IsR0FBNUYsRUFBNkZsRSxFQUFFeUMsTUFBRixFQUFVUixFQUFWLENBQWEsTUFBYixFQUFvQixZQUFVO0FBQUNqQyxNQUFFRyxFQUFFRSxJQUFKLEVBQVVILElBQVYsQ0FBZSxZQUFVO0FBQUNELFFBQUUyQixJQUFGLENBQU81QixFQUFFLElBQUYsQ0FBUDtBQUFnQixLQUExQztBQUE0QyxHQUEzRSxDQUE3RjtBQUEwSyxDQUFuckQsQ0FBb3JERixNQUFwckQsQ0FBN2dZIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIEFkbWluTFRFIGFwcC5qc1xuKiA9PT09PT09PT09PT09PT09XG4qIE1haW4gSlMgYXBwbGljYXRpb24gZmlsZSBmb3IgQWRtaW5MVEUgdjIuIFRoaXMgZmlsZVxuKiBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYWxsIHBhZ2VzLiBJdCBjb250cm9scyBzb21lIGxheW91dFxuKiBvcHRpb25zIGFuZCBpbXBsZW1lbnRzIGV4Y2x1c2l2ZSBBZG1pbkxURSBwbHVnaW5zLlxuKlxuKiBAQXV0aG9yICBBbG1zYWVlZCBTdHVkaW9cbiogQFN1cHBvcnQgPGh0dHBzOi8vd3d3LmFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQEVtYWlsICAgPGFiZHVsbGFoQGFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQHZlcnNpb24gMi40LjJcbiogQHJlcG9zaXRvcnkgZ2l0Oi8vZ2l0aHViLmNvbS9hbG1hc2FlZWQyMDEwL0FkbWluTFRFLmdpdFxuKiBAbGljZW5zZSBNSVQgPGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+XG4qL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJBZG1pbkxURSByZXF1aXJlcyBqUXVlcnlcIik7K2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZz1lLmRhdGEoYyk7aWYoIWcpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGc9bmV3IGYoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGcpe2lmKHZvaWQgMD09PWdbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2dbYl0oKX19KX12YXIgYz1cImx0ZS5ib3hyZWZyZXNoXCIsZD17c291cmNlOlwiXCIscGFyYW1zOnt9LHRyaWdnZXI6XCIucmVmcmVzaC1idG5cIixjb250ZW50OlwiLmJveC1ib2R5XCIsbG9hZEluQ29udGVudDohMCxyZXNwb25zZVR5cGU6XCJcIixvdmVybGF5VGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PGRpdiBjbGFzcz1cImZhIGZhLXJlZnJlc2ggZmEtc3BpblwiPjwvZGl2PjwvZGl2Picsb25Mb2FkU3RhcnQ6ZnVuY3Rpb24oKXt9LG9uTG9hZERvbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fSxlPXtkYXRhOidbZGF0YS13aWRnZXQ9XCJib3gtcmVmcmVzaFwiXSd9LGY9ZnVuY3Rpb24oYixjKXtpZih0aGlzLmVsZW1lbnQ9Yix0aGlzLm9wdGlvbnM9Yyx0aGlzLiRvdmVybGF5PWEoYy5vdmVybGF5KSxcIlwiPT09Yy5zb3VyY2UpdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHVybCB3YXMgbm90IGRlZmluZWQuIFBsZWFzZSBzcGVjaWZ5IGEgdXJsIGluIHlvdXIgQm94UmVmcmVzaCBzb3VyY2Ugb3B0aW9uLlwiKTt0aGlzLl9zZXRVcExpc3RlbmVycygpLHRoaXMubG9hZCgpfTtmLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5fYWRkT3ZlcmxheSgpLHRoaXMub3B0aW9ucy5vbkxvYWRTdGFydC5jYWxsKGEodGhpcykpLGEuZ2V0KHRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5vcHRpb25zLnBhcmFtcyxmdW5jdGlvbihiKXt0aGlzLm9wdGlvbnMubG9hZEluQ29udGVudCYmYSh0aGlzLm9wdGlvbnMuY29udGVudCkuaHRtbChiKSx0aGlzLm9wdGlvbnMub25Mb2FkRG9uZS5jYWxsKGEodGhpcyksYiksdGhpcy5fcmVtb3ZlT3ZlcmxheSgpfS5iaW5kKHRoaXMpLFwiXCIhPT10aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlJiZ0aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlKX0sZi5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIixlLnRyaWdnZXIsZnVuY3Rpb24oYSl7YSYmYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubG9hZCgpfS5iaW5kKHRoaXMpKX0sZi5wcm90b3R5cGUuX2FkZE92ZXJsYXk9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYXBwZW5kKHRoaXMuJG92ZXJsYXkpfSxmLnByb3RvdHlwZS5fcmVtb3ZlT3ZlcmxheT1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5yZW1vdmUodGhpcy4kb3ZlcmxheSl9O3ZhciBnPWEuZm4uYm94UmVmcmVzaDthLmZuLmJveFJlZnJlc2g9YixhLmZuLmJveFJlZnJlc2guQ29uc3RydWN0b3I9ZixhLmZuLmJveFJlZnJlc2gubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJveFJlZnJlc2g9Zyx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1pZihcInN0cmluZ1wiPT10eXBlb2YgYil7aWYodm9pZCAwPT09ZltiXSl0aHJvdyBuZXcgRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXCIrYik7ZltiXSgpfX0pfXZhciBjPVwibHRlLmJveHdpZGdldFwiLGQ9e2FuaW1hdGlvblNwZWVkOjUwMCxjb2xsYXBzZVRyaWdnZXI6J1tkYXRhLXdpZGdldD1cImNvbGxhcHNlXCJdJyxyZW1vdmVUcmlnZ2VyOidbZGF0YS13aWRnZXQ9XCJyZW1vdmVcIl0nLGNvbGxhcHNlSWNvbjpcImZhLW1pbnVzXCIsZXhwYW5kSWNvbjpcImZhLXBsdXNcIixyZW1vdmVJY29uOlwiZmEtdGltZXNcIn0sZT17ZGF0YTpcIi5ib3hcIixjb2xsYXBzZWQ6XCIuY29sbGFwc2VkLWJveFwiLGhlYWRlcjpcIi5ib3gtaGVhZGVyXCIsYm9keTpcIi5ib3gtYm9keVwiLGZvb3RlcjpcIi5ib3gtZm9vdGVyXCIsdG9vbHM6XCIuYm94LXRvb2xzXCJ9LGY9e2NvbGxhcHNlZDpcImNvbGxhcHNlZC1ib3hcIn0sZz17Y29sbGFwc2VkOlwiY29sbGFwc2VkLmJveHdpZGdldFwiLGV4cGFuZGVkOlwiZXhwYW5kZWQuYm94d2lkZ2V0XCIscmVtb3ZlZDpcInJlbW92ZWQuYm94d2lkZ2V0XCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuaXMoZS5jb2xsYXBzZWQpP3RoaXMuZXhwYW5kKCk6dGhpcy5jb2xsYXBzZSgpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KGcuZXhwYW5kZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCksYSh0aGlzLmVsZW1lbnQpLmNoaWxkcmVuKGUuaGVhZGVyK1wiLCBcIitlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5jaGlsZHJlbihlLnRvb2xzKS5maW5kKFwiLlwiK2QpLnJlbW92ZUNsYXNzKGQpLmFkZENsYXNzKGMpLGEodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYil9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3ZhciBiPWEuRXZlbnQoZy5jb2xsYXBzZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmhlYWRlcitcIiwgXCIrZS5ib2R5K1wiLCBcIitlLmZvb3RlcikuY2hpbGRyZW4oZS50b29scykuZmluZChcIi5cIitjKS5yZW1vdmVDbGFzcyhjKS5hZGRDbGFzcyhkKSxhKHRoaXMuZWxlbWVudCkuY2hpbGRyZW4oZS5ib2R5K1wiLCBcIitlLmZvb3Rlcikuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5jb2xsYXBzZWQpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudChnLnJlbW92ZWQpO2EodGhpcy5lbGVtZW50KS5zbGlkZVVwKHRoaXMub3B0aW9ucy5hbmltYXRpb25TcGVlZCxmdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpLGEodGhpcy5lbGVtZW50KS5yZW1vdmUoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIix0aGlzLm9wdGlvbnMuY29sbGFwc2VUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi50b2dnbGUoYSh0aGlzKSksITF9KSxhKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy5yZW1vdmVUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi5yZW1vdmUoYSh0aGlzKSksITF9KX07dmFyIGk9YS5mbi5ib3hXaWRnZXQ7YS5mbi5ib3hXaWRnZXQ9YixhLmZuLmJveFdpZGdldC5Db25zdHJ1Y3Rvcj1oLGEuZm4uYm94V2lkZ2V0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5ib3hXaWRnZXQ9aSx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1cInN0cmluZ1wiPT10eXBlb2YgYiYmZi50b2dnbGUoKX0pfXZhciBjPVwibHRlLmNvbnRyb2xzaWRlYmFyXCIsZD17c2xpZGU6ITB9LGU9e3NpZGViYXI6XCIuY29udHJvbC1zaWRlYmFyXCIsZGF0YTonW2RhdGEtdG9nZ2xlPVwiY29udHJvbC1zaWRlYmFyXCJdJyxvcGVuOlwiLmNvbnRyb2wtc2lkZWJhci1vcGVuXCIsYmc6XCIuY29udHJvbC1zaWRlYmFyLWJnXCIsd3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudDpcIi5jb250ZW50LXdyYXBwZXJcIixib3hlZDpcIi5sYXlvdXQtYm94ZWRcIn0sZj17b3BlbjpcImNvbnRyb2wtc2lkZWJhci1vcGVuXCIsZml4ZWQ6XCJmaXhlZFwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQuY29udHJvbHNpZGViYXJcIixleHBhbmRlZDpcImV4cGFuZGVkLmNvbnRyb2xzaWRlYmFyXCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLmhhc0JpbmRlZFJlc2l6ZT0hMSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5pcyhlLmRhdGEpfHxhKHRoaXMpLm9uKFwiY2xpY2tcIix0aGlzLnRvZ2dsZSksdGhpcy5maXgoKSxhKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7dGhpcy5maXgoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXtiJiZiLnByZXZlbnREZWZhdWx0KCksdGhpcy5maXgoKSxhKGUuc2lkZWJhcikuaXMoZS5vcGVuKXx8YShcImJvZHlcIikuaXMoZS5vcGVuKT90aGlzLmNvbGxhcHNlKCk6dGhpcy5leHBhbmQoKX0saC5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNsaWRlP2EoZS5zaWRlYmFyKS5hZGRDbGFzcyhmLm9wZW4pOmEoXCJib2R5XCIpLmFkZENsYXNzKGYub3BlbiksYSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNvbGxhcHNlPWZ1bmN0aW9uKCl7YShcImJvZHksIFwiK2Uuc2lkZWJhcikucmVtb3ZlQ2xhc3MoZi5vcGVuKSxhKHRoaXMuZWxlbWVudCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSl9LGgucHJvdG90eXBlLmZpeD1mdW5jdGlvbigpe2EoXCJib2R5XCIpLmlzKGUuYm94ZWQpJiZ0aGlzLl9maXhGb3JCb3hlZChhKGUuYmcpKX0saC5wcm90b3R5cGUuX2ZpeEZvckJveGVkPWZ1bmN0aW9uKGIpe2IuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsaGVpZ2h0OmEoZS53cmFwcGVyKS5oZWlnaHQoKX0pfTt2YXIgaT1hLmZuLmNvbnRyb2xTaWRlYmFyO2EuZm4uY29udHJvbFNpZGViYXI9YixhLmZuLmNvbnRyb2xTaWRlYmFyLkNvbnN0cnVjdG9yPWgsYS5mbi5jb250cm9sU2lkZWJhci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY29udHJvbFNpZGViYXI9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoYyk7ZXx8ZC5kYXRhKGMsZT1uZXcgZihkKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmUudG9nZ2xlKGQpfSl9dmFyIGM9XCJsdGUuZGlyZWN0Y2hhdFwiLGQ9e2RhdGE6J1tkYXRhLXdpZGdldD1cImNoYXQtcGFuZS10b2dnbGVcIl0nLGJveDpcIi5kaXJlY3QtY2hhdFwifSxlPXtvcGVuOlwiZGlyZWN0LWNoYXQtY29udGFjdHMtb3BlblwifSxmPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1hfTtmLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7YS5wYXJlbnRzKGQuYm94KS5maXJzdCgpLnRvZ2dsZUNsYXNzKGUub3Blbil9O3ZhciBnPWEuZm4uZGlyZWN0Q2hhdDthLmZuLmRpcmVjdENoYXQ9YixhLmZuLmRpcmVjdENoYXQuQ29uc3RydWN0b3I9ZixhLmZuLmRpcmVjdENoYXQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmRpcmVjdENoYXQ9Zyx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZC5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoaCkpfWlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtpZih2b2lkIDA9PT1mW2JdKXRocm93IG5ldyBFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcIitiKTtmW2JdKCl9fSl9dmFyIGM9XCJsdGUubGF5b3V0XCIsZD17c2xpbXNjcm9sbDohMCxyZXNldEhlaWdodDohMH0sZT17d3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudFdyYXBwZXI6XCIuY29udGVudC13cmFwcGVyXCIsbGF5b3V0Qm94ZWQ6XCIubGF5b3V0LWJveGVkXCIsbWFpbkZvb3RlcjpcIi5tYWluLWZvb3RlclwiLG1haW5IZWFkZXI6XCIubWFpbi1oZWFkZXJcIixzaWRlYmFyOlwiLnNpZGViYXJcIixjb250cm9sU2lkZWJhcjpcIi5jb250cm9sLXNpZGViYXJcIixmaXhlZDpcIi5maXhlZFwiLHNpZGViYXJNZW51OlwiLnNpZGViYXItbWVudVwiLGxvZ286XCIubWFpbi1oZWFkZXIgLmxvZ29cIn0sZj17Zml4ZWQ6XCJmaXhlZFwiLGhvbGRUcmFuc2l0aW9uOlwiaG9sZC10cmFuc2l0aW9uXCJ9LGc9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWEsdGhpcy5iaW5kZWRSZXNpemU9ITEsdGhpcy5hY3RpdmF0ZSgpfTtnLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5ob2xkVHJhbnNpdGlvbiksdGhpcy5vcHRpb25zLnJlc2V0SGVpZ2h0JiZhKFwiYm9keSwgaHRtbCwgXCIrZS53cmFwcGVyKS5jc3Moe2hlaWdodDpcImF1dG9cIixcIm1pbi1oZWlnaHRcIjpcIjEwMCVcIn0pLHRoaXMuYmluZGVkUmVzaXplfHwoYSh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShlLmxvZ28rXCIsIFwiK2Uuc2lkZWJhcikub25lKFwid2Via2l0VHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCBvVHJhbnNpdGlvbkVuZCBtc1RyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpLHRoaXMuYmluZGVkUmVzaXplPSEwKSxhKGUuc2lkZWJhck1lbnUpLm9uKFwiZXhwYW5kZWQudHJlZVwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSksYShlLnNpZGViYXJNZW51KS5vbihcImNvbGxhcHNlZC50cmVlXCIsZnVuY3Rpb24oKXt0aGlzLmZpeCgpLHRoaXMuZml4U2lkZWJhcigpfS5iaW5kKHRoaXMpKX0sZy5wcm90b3R5cGUuZml4PWZ1bmN0aW9uKCl7YShlLmxheW91dEJveGVkK1wiID4gXCIrZS53cmFwcGVyKS5jc3MoXCJvdmVyZmxvd1wiLFwiaGlkZGVuXCIpO3ZhciBiPWEoZS5tYWluRm9vdGVyKS5vdXRlckhlaWdodCgpfHwwLGM9YShlLm1haW5IZWFkZXIpLm91dGVySGVpZ2h0KCkrYixkPWEod2luZG93KS5oZWlnaHQoKSxnPWEoZS5zaWRlYmFyKS5oZWlnaHQoKXx8MDtpZihhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlhKGUuY29udGVudFdyYXBwZXIpLmNzcyhcIm1pbi1oZWlnaHRcIixkLWIpO2Vsc2V7dmFyIGg7ZD49Zz8oYShlLmNvbnRlbnRXcmFwcGVyKS5jc3MoXCJtaW4taGVpZ2h0XCIsZC1jKSxoPWQtYyk6KGEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGcpLGg9Zyk7dmFyIGk9YShlLmNvbnRyb2xTaWRlYmFyKTt2b2lkIDAhPT1pJiZpLmhlaWdodCgpPmgmJmEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGkuaGVpZ2h0KCkpfX0sZy5wcm90b3R5cGUuZml4U2lkZWJhcj1mdW5jdGlvbigpe2lmKCFhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlyZXR1cm4gdm9pZCh2b2lkIDAhPT1hLmZuLnNsaW1TY3JvbGwmJmEoZS5zaWRlYmFyKS5zbGltU2Nyb2xsKHtkZXN0cm95OiEwfSkuaGVpZ2h0KFwiYXV0b1wiKSk7dGhpcy5vcHRpb25zLnNsaW1zY3JvbGwmJnZvaWQgMCE9PWEuZm4uc2xpbVNjcm9sbCYmYShlLnNpZGViYXIpLnNsaW1TY3JvbGwoe2hlaWdodDphKHdpbmRvdykuaGVpZ2h0KCktYShlLm1haW5IZWFkZXIpLmhlaWdodCgpK1wicHhcIn0pfTt2YXIgaD1hLmZuLmxheW91dDthLmZuLmxheW91dD1iLGEuZm4ubGF5b3V0LkNvbnN0dWN0b3I9ZyxhLmZuLmxheW91dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ubGF5b3V0PWgsdGhpc30sYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoXCJib2R5XCIpKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBnPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGgoZykpfVwidG9nZ2xlXCI9PT1iJiZmLnRvZ2dsZSgpfSl9dmFyIGM9XCJsdGUucHVzaG1lbnVcIixkPXtjb2xsYXBzZVNjcmVlblNpemU6NzY3LGV4cGFuZE9uSG92ZXI6ITEsZXhwYW5kVHJhbnNpdGlvbkRlbGF5OjIwMH0sZT17Y29sbGFwc2VkOlwiLnNpZGViYXItY29sbGFwc2VcIixvcGVuOlwiLnNpZGViYXItb3BlblwiLG1haW5TaWRlYmFyOlwiLm1haW4tc2lkZWJhclwiLGNvbnRlbnRXcmFwcGVyOlwiLmNvbnRlbnQtd3JhcHBlclwiLHNlYXJjaElucHV0OlwiLnNpZGViYXItZm9ybSAuZm9ybS1jb250cm9sXCIsYnV0dG9uOidbZGF0YS10b2dnbGU9XCJwdXNoLW1lbnVcIl0nLG1pbmk6XCIuc2lkZWJhci1taW5pXCIsZXhwYW5kZWQ6XCIuc2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGxheW91dEZpeGVkOlwiLmZpeGVkXCJ9LGY9e2NvbGxhcHNlZDpcInNpZGViYXItY29sbGFwc2VcIixvcGVuOlwic2lkZWJhci1vcGVuXCIsbWluaTpcInNpZGViYXItbWluaVwiLGV4cGFuZGVkOlwic2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGV4cGFuZEZlYXR1cmU6XCJzaWRlYmFyLW1pbmktZXhwYW5kLWZlYXR1cmVcIixsYXlvdXRGaXhlZDpcImZpeGVkXCJ9LGc9e2V4cGFuZGVkOlwiZXhwYW5kZWQucHVzaE1lbnVcIixjb2xsYXBzZWQ6XCJjb2xsYXBzZWQucHVzaE1lbnVcIn0saD1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9YSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpeyh0aGlzLm9wdGlvbnMuZXhwYW5kT25Ib3Zlcnx8YShcImJvZHlcIikuaXMoZS5taW5pK2UubGF5b3V0Rml4ZWQpKSYmKHRoaXMuZXhwYW5kT25Ib3ZlcigpLGEoXCJib2R5XCIpLmFkZENsYXNzKGYuZXhwYW5kRmVhdHVyZSkpLGEoZS5jb250ZW50V3JhcHBlcikuY2xpY2soZnVuY3Rpb24oKXthKHdpbmRvdykud2lkdGgoKTw9dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZSYmYShcImJvZHlcIikuaGFzQ2xhc3MoZi5vcGVuKSYmdGhpcy5jbG9zZSgpfS5iaW5kKHRoaXMpKSxhKGUuc2VhcmNoSW5wdXQpLmNsaWNrKGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KX0saC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGI9YSh3aW5kb3cpLndpZHRoKCksYz0hYShcImJvZHlcIikuaGFzQ2xhc3MoZi5jb2xsYXBzZWQpO2I8PXRoaXMub3B0aW9ucy5jb2xsYXBzZVNjcmVlblNpemUmJihjPWEoXCJib2R5XCIpLmhhc0NsYXNzKGYub3BlbikpLGM/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxoLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuZXhwYW5kZWQpKTphKFwiYm9keVwiKS5hZGRDbGFzcyhmLm9wZW4pLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSk6YShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5vcGVuK1wiIFwiK2YuY29sbGFwc2VkKS50cmlnZ2VyKGEuRXZlbnQoZy5jb2xsYXBzZWQpKX0saC5wcm90b3R5cGUuZXhwYW5kT25Ib3Zlcj1mdW5jdGlvbigpe2EoZS5tYWluU2lkZWJhcikuaG92ZXIoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5pcyhlLm1pbmkrZS5jb2xsYXBzZWQpJiZhKHdpbmRvdykud2lkdGgoKT50aGlzLm9wdGlvbnMuY29sbGFwc2VTY3JlZW5TaXplJiZ0aGlzLmV4cGFuZCgpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7YShcImJvZHlcIikuaXMoZS5leHBhbmRlZCkmJnRoaXMuY29sbGFwc2UoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLmV4cGFuZD1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkuYWRkQ2xhc3MoZi5leHBhbmRlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmV4cGFuZGVkKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfTt2YXIgaT1hLmZuLnB1c2hNZW51O2EuZm4ucHVzaE1lbnU9YixhLmZuLnB1c2hNZW51LkNvbnN0cnVjdG9yPWgsYS5mbi5wdXNoTWVudS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ucHVzaE1lbnU9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5idXR0b24sZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwidG9nZ2xlXCIpfSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoZS5idXR0b24pKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpe2lmKHZvaWQgMD09PWZbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2ZbYl0oKX19KX12YXIgYz1cImx0ZS50b2RvbGlzdFwiLGQ9e29uQ2hlY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LG9uVW5DaGVjazpmdW5jdGlvbihhKXtyZXR1cm4gYX19LGU9e2RhdGE6J1tkYXRhLXdpZGdldD1cInRvZG8tbGlzdFwiXSd9LGY9e2RvbmU6XCJkb25lXCJ9LGc9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtnLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7aWYoYS5wYXJlbnRzKGUubGkpLmZpcnN0KCkudG9nZ2xlQ2xhc3MoZi5kb25lKSwhYS5wcm9wKFwiY2hlY2tlZFwiKSlyZXR1cm4gdm9pZCB0aGlzLnVuQ2hlY2soYSk7dGhpcy5jaGVjayhhKX0sZy5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zLm9uQ2hlY2suY2FsbChhKX0sZy5wcm90b3R5cGUudW5DaGVjaz1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnMub25VbkNoZWNrLmNhbGwoYSl9LGcucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2hhbmdlIGlmQ2hhbmdlZFwiLFwiaW5wdXQ6Y2hlY2tib3hcIixmdW5jdGlvbigpe2IudG9nZ2xlKGEodGhpcykpfSl9O3ZhciBoPWEuZm4udG9kb0xpc3Q7YS5mbi50b2RvTGlzdD1iLGEuZm4udG9kb0xpc3QuQ29uc3RydWN0b3I9ZyxhLmZuLnRvZG9MaXN0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b2RvTGlzdD1oLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmRhdGEoYykpe3ZhciBmPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLG5ldyBoKGUsZikpfX0pfXZhciBjPVwibHRlLnRyZWVcIixkPXthbmltYXRpb25TcGVlZDo1MDAsYWNjb3JkaW9uOiEwLGZvbGxvd0xpbms6ITEsdHJpZ2dlcjpcIi50cmVldmlldyBhXCJ9LGU9e3RyZWU6XCIudHJlZVwiLHRyZWV2aWV3OlwiLnRyZWV2aWV3XCIsdHJlZXZpZXdNZW51OlwiLnRyZWV2aWV3LW1lbnVcIixvcGVuOlwiLm1lbnUtb3BlbiwgLmFjdGl2ZVwiLGxpOlwibGlcIixkYXRhOidbZGF0YS13aWRnZXQ9XCJ0cmVlXCJdJyxhY3RpdmU6XCIuYWN0aXZlXCJ9LGY9e29wZW46XCJtZW51LW9wZW5cIix0cmVlOlwidHJlZVwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQudHJlZVwiLGV4cGFuZGVkOlwiZXhwYW5kZWQudHJlZVwifSxoPWZ1bmN0aW9uKGIsYyl7dGhpcy5lbGVtZW50PWIsdGhpcy5vcHRpb25zPWMsYSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKGYudHJlZSksYShlLnRyZWV2aWV3K2UuYWN0aXZlLHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5vcGVuKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5leHQoZS50cmVldmlld01lbnUpLGQ9YS5wYXJlbnQoKSxnPWQuaGFzQ2xhc3MoZi5vcGVuKTtkLmlzKGUudHJlZXZpZXcpJiYodGhpcy5vcHRpb25zLmZvbGxvd0xpbmsmJlwiI1wiIT09YS5hdHRyKFwiaHJlZlwiKXx8Yi5wcmV2ZW50RGVmYXVsdCgpLGc/dGhpcy5jb2xsYXBzZShjLGQpOnRoaXMuZXhwYW5kKGMsZCkpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oYixjKXt2YXIgZD1hLkV2ZW50KGcuZXhwYW5kZWQpO2lmKHRoaXMub3B0aW9ucy5hY2NvcmRpb24pe3ZhciBoPWMuc2libGluZ3MoZS5vcGVuKSxpPWguY2hpbGRyZW4oZS50cmVldmlld01lbnUpO3RoaXMuY29sbGFwc2UoaSxoKX1jLmFkZENsYXNzKGYub3BlbiksYi5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoZCl9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbihiLGMpe3ZhciBkPWEuRXZlbnQoZy5jb2xsYXBzZWQpO2IuZmluZChlLm9wZW4pLnJlbW92ZUNsYXNzKGYub3BlbiksYy5yZW1vdmVDbGFzcyhmLm9wZW4pLGIuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXtiLmZpbmQoZS5vcGVuK1wiID4gXCIrZS50cmVldmlldykuc2xpZGVVcCgpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGQpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpczthKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy50cmlnZ2VyLGZ1bmN0aW9uKGMpe2IudG9nZ2xlKGEodGhpcyksYyl9KX07dmFyIGk9YS5mbi50cmVlO2EuZm4udHJlZT1iLGEuZm4udHJlZS5Db25zdHJ1Y3Rvcj1oLGEuZm4udHJlZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udHJlZT1pLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n"); +eval("/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function(e){e.fn.extend({slimScroll:function(f){var a=e.extend({width:\"auto\",height:\"250px\",size:\"7px\",color:\"#000\",position:\"right\",distance:\"1px\",start:\"top\",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:\"#333\",railOpacity:.2,railDraggable:!0,railClass:\"slimScrollRail\",barClass:\"slimScrollBar\",wrapperClass:\"slimScrollDiv\",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:\"7px\",railBorderRadius:\"7px\"},f);this.each(function(){function v(d){if(r){d=d||window.event;\nvar c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest(\".\"+a.wrapperClass).is(b.parent())&&n(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function n(d,g,e){k=!1;var f=b.outerHeight()-c.outerHeight();g&&(g=parseInt(c.css(\"top\"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),g=Math.min(Math.max(g,0),f),g=0<d?Math.ceil(g):Math.floor(g),c.css({top:g+\"px\"}));l=parseInt(c.css(\"top\"))/(b.outerHeight()-c.outerHeight());g=\nl*(b[0].scrollHeight-b.outerHeight());e&&(g=d,d=g/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),f),c.css({top:d+\"px\"}));b.scrollTop(g);b.trigger(\"slimscrolling\",~~g);w();p()}function x(){u=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:u+\"px\"});var a=u==b.outerHeight()?\"none\":\"block\";c.css({display:a})}function w(){x();clearTimeout(B);l==~~l?(k=a.allowPageScroll,C!=l&&b.trigger(\"slimscroll\",0==~~l?\"top\":\"bottom\")):k=!1;C=l;u>=b.outerHeight()?k=!0:(c.stop(!0,\n!0).fadeIn(\"fast\"),a.railVisible&&m.stop(!0,!0).fadeIn(\"fast\"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut(\"slow\"),m.fadeOut(\"slow\"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var q=b.scrollTop(),c=b.siblings(\".\"+a.barClass),m=b.siblings(\".\"+a.railClass);x();if(e.isPlainObject(f)){if(\"height\"in f&&\"auto\"==f.height){b.parent().css(\"height\",\"auto\");b.css(\"height\",\"auto\");var h=b.parent().parent().height();b.parent().css(\"height\",\nh);b.css(\"height\",h)}else\"height\"in f&&(h=f.height,b.parent().css(\"height\",h),b.css(\"height\",h));if(\"scrollTo\"in f)q=parseInt(a.scrollTo);else if(\"scrollBy\"in f)q+=parseInt(a.scrollBy);else if(\"destroy\"in f){c.remove();m.remove();b.unwrap();return}n(q,!1,!0)}}else if(!(e.isPlainObject(f)&&\"destroy\"in f)){a.height=\"auto\"==a.height?b.parent().height():a.height;q=e(\"<div></div>\").addClass(a.wrapperClass).css({position:\"relative\",overflow:\"hidden\",width:a.width,height:a.height});b.css({overflow:\"hidden\",\nwidth:a.width,height:a.height});var m=e(\"<div></div>\").addClass(a.railClass).css({width:a.size,height:\"100%\",position:\"absolute\",top:0,display:a.alwaysVisible&&a.railVisible?\"block\":\"none\",\"border-radius\":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e(\"<div></div>\").addClass(a.barClass).css({background:a.color,width:a.size,position:\"absolute\",top:0,opacity:a.opacity,display:a.alwaysVisible?\"block\":\"none\",\"border-radius\":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,\nWebkitBorderRadius:a.borderRadius,zIndex:99}),h=\"right\"==a.position?{right:a.distance}:{left:a.distance};m.css(h);c.css(h);b.wrap(q);b.parent().append(c);b.parent().append(m);a.railDraggable&&c.bind(\"mousedown\",function(a){var b=e(document);z=!0;t=parseFloat(c.css(\"top\"));pageY=a.pageY;b.bind(\"mousemove.slimscroll\",function(a){currTop=t+a.pageY-pageY;c.css(\"top\",currTop);n(0,c.position().top,!1)});b.bind(\"mouseup.slimscroll\",function(a){z=!1;p();b.unbind(\".slimscroll\")});return!1}).bind(\"selectstart.slimscroll\",\nfunction(a){a.stopPropagation();a.preventDefault();return!1});m.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind(\"touchstart\",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind(\"touchmove\",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(n((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});\nx();\"bottom\"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),n(0,!0)):\"top\"!==a.start&&(n(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener(\"DOMMouseScroll\",v,!1),this.addEventListener(\"mousewheel\",v,!1)):document.attachEvent(\"onmousewheel\",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1zbGltc2Nyb2xsL2pxdWVyeS5zbGltc2Nyb2xsLm1pbi5qcz8xNWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhLHVCQUF1QixnQkFBZ0IsNlhBQTZYLElBQUkscUJBQXFCLGNBQWMsTUFBTTtBQUMzZSxRQUFRLG9DQUFvQyx5QkFBeUIsMkZBQTJGLHlDQUF5Qyx1QkFBdUIsa0JBQWtCLEtBQUssc0NBQXNDLDZJQUE2SSxXQUFXLEdBQUcsMkRBQTJEO0FBQ25mLHNDQUFzQyxpRkFBaUYsV0FBVyxHQUFHLGVBQWUsK0JBQStCLElBQUksSUFBSSxhQUFhLGlFQUFpRSxPQUFPLGNBQWMsRUFBRSx3Q0FBd0MsT0FBTyxVQUFVLEVBQUUsYUFBYSxJQUFJLGdCQUFnQixzRkFBc0YsSUFBSTtBQUN0ZCxnRUFBZ0UsYUFBYSwwQ0FBMEMsaUVBQWlFLE9BQU8sbUNBQW1DLHdDQUF3QywrRUFBK0UsSUFBSSx1QkFBdUIsbUNBQW1DLGdDQUFnQyx1QkFBdUIsbUNBQW1DO0FBQ2pmLEdBQUcsa0JBQWtCLDRFQUE0RSx5Q0FBeUMsK0NBQStDLHVCQUF1QixXQUFXLFdBQVcsV0FBVyxPQUFPLFlBQVksOENBQThDLHVEQUF1RCxpREFBaUQsb0VBQW9FLEVBQUUsT0FBTztBQUN2ZSw4QkFBOEIsRUFBRSxrREFBa0QscU1BQXFNLCtDQUErQztBQUN0VSw0Q0FBNEMseUJBQXlCLGlCQUFpQixFQUFFLGlCQUFpQixTQUFTLFNBQVMsVUFBVSxxQkFBcUIscUJBQXFCLGdEQUFnRCxrQkFBa0IsS0FBSywyQkFBMkIsY0FBYywwQ0FBMEMsd0JBQXdCLHFCQUFxQix5QkFBeUIsRUFBRSx3Q0FBd0MsS0FBSyxJQUFJLHdCQUF3QixFQUFFLFNBQVM7QUFDcmUsWUFBWSxvQkFBb0IsbUJBQW1CLFNBQVMsRUFBRSxtQkFBbUIsSUFBSSxZQUFZLElBQUksRUFBRSxtQkFBbUIsS0FBSyxZQUFZLEtBQUssRUFBRSxtQkFBbUIsS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxrQ0FBa0MscUVBQXFFLEVBQUUsK0JBQStCLG9DQUFvQyxrSUFBa0k7QUFDdmYsSUFBSSwyQkFBMkIsb0NBQW9DLDZGQUE2Rix3SkFBd0osRUFBRSxhQUFhLEVBQUUsYUFBYSwyQkFBMkIsRUFBRSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBDb3B5cmlnaHQgKGMpIDIwMTEgUGlvdHIgUm9jaGFsYSAoaHR0cDovL3JvY2hhLmxhKVxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqIGFuZCBHUEwgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwKSBsaWNlbnNlcy5cbiAqXG4gKiBWZXJzaW9uOiAxLjMuOFxuICpcbiAqL1xuKGZ1bmN0aW9uKGUpe2UuZm4uZXh0ZW5kKHtzbGltU2Nyb2xsOmZ1bmN0aW9uKGYpe3ZhciBhPWUuZXh0ZW5kKHt3aWR0aDpcImF1dG9cIixoZWlnaHQ6XCIyNTBweFwiLHNpemU6XCI3cHhcIixjb2xvcjpcIiMwMDBcIixwb3NpdGlvbjpcInJpZ2h0XCIsZGlzdGFuY2U6XCIxcHhcIixzdGFydDpcInRvcFwiLG9wYWNpdHk6LjQsYWx3YXlzVmlzaWJsZTohMSxkaXNhYmxlRmFkZU91dDohMSxyYWlsVmlzaWJsZTohMSxyYWlsQ29sb3I6XCIjMzMzXCIscmFpbE9wYWNpdHk6LjIscmFpbERyYWdnYWJsZTohMCxyYWlsQ2xhc3M6XCJzbGltU2Nyb2xsUmFpbFwiLGJhckNsYXNzOlwic2xpbVNjcm9sbEJhclwiLHdyYXBwZXJDbGFzczpcInNsaW1TY3JvbGxEaXZcIixhbGxvd1BhZ2VTY3JvbGw6ITEsd2hlZWxTdGVwOjIwLHRvdWNoU2Nyb2xsU3RlcDoyMDAsYm9yZGVyUmFkaXVzOlwiN3B4XCIscmFpbEJvcmRlclJhZGl1czpcIjdweFwifSxmKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiB2KGQpe2lmKHIpe2Q9ZHx8d2luZG93LmV2ZW50O1xudmFyIGM9MDtkLndoZWVsRGVsdGEmJihjPS1kLndoZWVsRGVsdGEvMTIwKTtkLmRldGFpbCYmKGM9ZC5kZXRhaWwvMyk7ZShkLnRhcmdldHx8ZC5zcmNUYXJnZXR8fGQuc3JjRWxlbWVudCkuY2xvc2VzdChcIi5cIithLndyYXBwZXJDbGFzcykuaXMoYi5wYXJlbnQoKSkmJm4oYywhMCk7ZC5wcmV2ZW50RGVmYXVsdCYmIWsmJmQucHJldmVudERlZmF1bHQoKTtrfHwoZC5yZXR1cm5WYWx1ZT0hMSl9fWZ1bmN0aW9uIG4oZCxnLGUpe2s9ITE7dmFyIGY9Yi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKTtnJiYoZz1wYXJzZUludChjLmNzcyhcInRvcFwiKSkrZCpwYXJzZUludChhLndoZWVsU3RlcCkvMTAwKmMub3V0ZXJIZWlnaHQoKSxnPU1hdGgubWluKE1hdGgubWF4KGcsMCksZiksZz0wPGQ/TWF0aC5jZWlsKGcpOk1hdGguZmxvb3IoZyksYy5jc3Moe3RvcDpnK1wicHhcIn0pKTtsPXBhcnNlSW50KGMuY3NzKFwidG9wXCIpKS8oYi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKSk7Zz1cbmwqKGJbMF0uc2Nyb2xsSGVpZ2h0LWIub3V0ZXJIZWlnaHQoKSk7ZSYmKGc9ZCxkPWcvYlswXS5zY3JvbGxIZWlnaHQqYi5vdXRlckhlaWdodCgpLGQ9TWF0aC5taW4oTWF0aC5tYXgoZCwwKSxmKSxjLmNzcyh7dG9wOmQrXCJweFwifSkpO2Iuc2Nyb2xsVG9wKGcpO2IudHJpZ2dlcihcInNsaW1zY3JvbGxpbmdcIix+fmcpO3coKTtwKCl9ZnVuY3Rpb24geCgpe3U9TWF0aC5tYXgoYi5vdXRlckhlaWdodCgpL2JbMF0uc2Nyb2xsSGVpZ2h0KmIub3V0ZXJIZWlnaHQoKSwzMCk7Yy5jc3Moe2hlaWdodDp1K1wicHhcIn0pO3ZhciBhPXU9PWIub3V0ZXJIZWlnaHQoKT9cIm5vbmVcIjpcImJsb2NrXCI7Yy5jc3Moe2Rpc3BsYXk6YX0pfWZ1bmN0aW9uIHcoKXt4KCk7Y2xlYXJUaW1lb3V0KEIpO2w9PX5+bD8oaz1hLmFsbG93UGFnZVNjcm9sbCxDIT1sJiZiLnRyaWdnZXIoXCJzbGltc2Nyb2xsXCIsMD09fn5sP1widG9wXCI6XCJib3R0b21cIikpOms9ITE7Qz1sO3U+PWIub3V0ZXJIZWlnaHQoKT9rPSEwOihjLnN0b3AoITAsXG4hMCkuZmFkZUluKFwiZmFzdFwiKSxhLnJhaWxWaXNpYmxlJiZtLnN0b3AoITAsITApLmZhZGVJbihcImZhc3RcIikpfWZ1bmN0aW9uIHAoKXthLmFsd2F5c1Zpc2libGV8fChCPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc2FibGVGYWRlT3V0JiZyfHx5fHx6fHwoYy5mYWRlT3V0KFwic2xvd1wiKSxtLmZhZGVPdXQoXCJzbG93XCIpKX0sMUUzKSl9dmFyIHIseSx6LEIsQSx1LGwsQyxrPSExLGI9ZSh0aGlzKTtpZihiLnBhcmVudCgpLmhhc0NsYXNzKGEud3JhcHBlckNsYXNzKSl7dmFyIHE9Yi5zY3JvbGxUb3AoKSxjPWIuc2libGluZ3MoXCIuXCIrYS5iYXJDbGFzcyksbT1iLnNpYmxpbmdzKFwiLlwiK2EucmFpbENsYXNzKTt4KCk7aWYoZS5pc1BsYWluT2JqZWN0KGYpKXtpZihcImhlaWdodFwiaW4gZiYmXCJhdXRvXCI9PWYuaGVpZ2h0KXtiLnBhcmVudCgpLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTtiLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTt2YXIgaD1iLnBhcmVudCgpLnBhcmVudCgpLmhlaWdodCgpO2IucGFyZW50KCkuY3NzKFwiaGVpZ2h0XCIsXG5oKTtiLmNzcyhcImhlaWdodFwiLGgpfWVsc2VcImhlaWdodFwiaW4gZiYmKGg9Zi5oZWlnaHQsYi5wYXJlbnQoKS5jc3MoXCJoZWlnaHRcIixoKSxiLmNzcyhcImhlaWdodFwiLGgpKTtpZihcInNjcm9sbFRvXCJpbiBmKXE9cGFyc2VJbnQoYS5zY3JvbGxUbyk7ZWxzZSBpZihcInNjcm9sbEJ5XCJpbiBmKXErPXBhcnNlSW50KGEuc2Nyb2xsQnkpO2Vsc2UgaWYoXCJkZXN0cm95XCJpbiBmKXtjLnJlbW92ZSgpO20ucmVtb3ZlKCk7Yi51bndyYXAoKTtyZXR1cm59bihxLCExLCEwKX19ZWxzZSBpZighKGUuaXNQbGFpbk9iamVjdChmKSYmXCJkZXN0cm95XCJpbiBmKSl7YS5oZWlnaHQ9XCJhdXRvXCI9PWEuaGVpZ2h0P2IucGFyZW50KCkuaGVpZ2h0KCk6YS5oZWlnaHQ7cT1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS53cmFwcGVyQ2xhc3MpLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9KTtiLmNzcyh7b3ZlcmZsb3c6XCJoaWRkZW5cIixcbndpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fSk7dmFyIG09ZShcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKGEucmFpbENsYXNzKS5jc3Moe3dpZHRoOmEuc2l6ZSxoZWlnaHQ6XCIxMDAlXCIscG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLGRpc3BsYXk6YS5hbHdheXNWaXNpYmxlJiZhLnJhaWxWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIixcImJvcmRlci1yYWRpdXNcIjphLnJhaWxCb3JkZXJSYWRpdXMsYmFja2dyb3VuZDphLnJhaWxDb2xvcixvcGFjaXR5OmEucmFpbE9wYWNpdHksekluZGV4OjkwfSksYz1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS5iYXJDbGFzcykuY3NzKHtiYWNrZ3JvdW5kOmEuY29sb3Isd2lkdGg6YS5zaXplLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxvcGFjaXR5OmEub3BhY2l0eSxkaXNwbGF5OmEuYWx3YXlzVmlzaWJsZT9cImJsb2NrXCI6XCJub25lXCIsXCJib3JkZXItcmFkaXVzXCI6YS5ib3JkZXJSYWRpdXMsQm9yZGVyUmFkaXVzOmEuYm9yZGVyUmFkaXVzLE1vekJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyxcbldlYmtpdEJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyx6SW5kZXg6OTl9KSxoPVwicmlnaHRcIj09YS5wb3NpdGlvbj97cmlnaHQ6YS5kaXN0YW5jZX06e2xlZnQ6YS5kaXN0YW5jZX07bS5jc3MoaCk7Yy5jc3MoaCk7Yi53cmFwKHEpO2IucGFyZW50KCkuYXBwZW5kKGMpO2IucGFyZW50KCkuYXBwZW5kKG0pO2EucmFpbERyYWdnYWJsZSYmYy5iaW5kKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYSl7dmFyIGI9ZShkb2N1bWVudCk7ej0hMDt0PXBhcnNlRmxvYXQoYy5jc3MoXCJ0b3BcIikpO3BhZ2VZPWEucGFnZVk7Yi5iaW5kKFwibW91c2Vtb3ZlLnNsaW1zY3JvbGxcIixmdW5jdGlvbihhKXtjdXJyVG9wPXQrYS5wYWdlWS1wYWdlWTtjLmNzcyhcInRvcFwiLGN1cnJUb3ApO24oMCxjLnBvc2l0aW9uKCkudG9wLCExKX0pO2IuYmluZChcIm1vdXNldXAuc2xpbXNjcm9sbFwiLGZ1bmN0aW9uKGEpe3o9ITE7cCgpO2IudW5iaW5kKFwiLnNsaW1zY3JvbGxcIil9KTtyZXR1cm4hMX0pLmJpbmQoXCJzZWxlY3RzdGFydC5zbGltc2Nyb2xsXCIsXG5mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EucHJldmVudERlZmF1bHQoKTtyZXR1cm4hMX0pO20uaG92ZXIoZnVuY3Rpb24oKXt3KCl9LGZ1bmN0aW9uKCl7cCgpfSk7Yy5ob3ZlcihmdW5jdGlvbigpe3k9ITB9LGZ1bmN0aW9uKCl7eT0hMX0pO2IuaG92ZXIoZnVuY3Rpb24oKXtyPSEwO3coKTtwKCl9LGZ1bmN0aW9uKCl7cj0hMTtwKCl9KTtiLmJpbmQoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYSxiKXthLm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGgmJihBPWEub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO2IuYmluZChcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGIpe2t8fGIub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2Iub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCYmKG4oKEEtYi5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkpL2EudG91Y2hTY3JvbGxTdGVwLCEwKSxBPWIub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO1xueCgpO1wiYm90dG9tXCI9PT1hLnN0YXJ0PyhjLmNzcyh7dG9wOmIub3V0ZXJIZWlnaHQoKS1jLm91dGVySGVpZ2h0KCl9KSxuKDAsITApKTpcInRvcFwiIT09YS5zdGFydCYmKG4oZShhLnN0YXJ0KS5wb3NpdGlvbigpLnRvcCxudWxsLCEwKSxhLmFsd2F5c1Zpc2libGV8fGMuaGlkZSgpKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8odGhpcy5hZGRFdmVudExpc3RlbmVyKFwiRE9NTW91c2VTY3JvbGxcIix2LCExKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsdiwhMSkpOmRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25tb3VzZXdoZWVsXCIsdil9fSk7cmV0dXJuIHRoaXN9fSk7ZS5mbi5leHRlbmQoe3NsaW1zY3JvbGw6ZS5mbi5zbGltU2Nyb2xsfSl9KShqUXVlcnkpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnktc2xpbXNjcm9sbC9qcXVlcnkuc2xpbXNjcm9sbC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///54\n"); /***/ }), -/* 64 */ -/***/ (function(module, exports) { -eval("/*\n * Author: Abdullah A Almsaeed\n * Date: 4 Jan 2014\n * Description:\n * This is a demo file used only for the main dashboard (index.html)\n **/\n\n$(function () {\n\n 'use strict';\n\n // Make the dashboard widgets sortable Using jquery UI\n\n $('.connectedSortable').sortable({\n placeholder: 'sort-highlight',\n connectWith: '.connectedSortable',\n handle: '.box-header, .nav-tabs',\n forcePlaceholderSize: true,\n zIndex: 999999\n });\n $('.connectedSortable .box-header, .connectedSortable .nav-tabs-custom').css('cursor', 'move');\n\n // jQuery UI sortable for the todo list\n $('.todo-list').sortable({\n placeholder: 'sort-highlight',\n handle: '.handle',\n forcePlaceholderSize: true,\n zIndex: 999999\n });\n\n // bootstrap WYSIHTML5 - text editor\n $('.textarea').wysihtml5();\n\n $('.daterange').daterangepicker({\n ranges: {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]\n },\n startDate: moment().subtract(29, 'days'),\n endDate: moment()\n }, function (start, end) {\n window.alert('You chose: ' + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));\n });\n\n /* jQueryKnob */\n $('.knob').knob();\n\n // jvectormap data\n var visitorsData = {\n US: 398, // USA\n SA: 400, // Saudi Arabia\n CA: 1000, // Canada\n DE: 500, // Germany\n FR: 760, // France\n CN: 300, // China\n AU: 700, // Australia\n BR: 600, // Brazil\n IN: 800, // India\n GB: 320, // Great Britain\n RU: 3000 // Russia\n };\n // World map by jvectormap\n $('#world-map').vectorMap({\n map: 'world_mill_en',\n backgroundColor: 'transparent',\n regionStyle: {\n initial: {\n fill: '#e4e4e4',\n 'fill-opacity': 1,\n stroke: 'none',\n 'stroke-width': 0,\n 'stroke-opacity': 1\n }\n },\n series: {\n regions: [{\n values: visitorsData,\n scale: ['#92c1dc', '#ebf4f9'],\n normalizeFunction: 'polynomial'\n }]\n },\n onRegionLabelShow: function onRegionLabelShow(e, el, code) {\n if (typeof visitorsData[code] != 'undefined') el.html(el.html() + ': ' + visitorsData[code] + ' new visitors');\n }\n });\n\n // Sparkline charts\n var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021];\n $('#sparkline-1').sparkline(myvalues, {\n type: 'line',\n lineColor: '#92c1dc',\n fillColor: '#ebf4f9',\n height: '50',\n width: '80'\n });\n myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921];\n $('#sparkline-2').sparkline(myvalues, {\n type: 'line',\n lineColor: '#92c1dc',\n fillColor: '#ebf4f9',\n height: '50',\n width: '80'\n });\n myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21];\n $('#sparkline-3').sparkline(myvalues, {\n type: 'line',\n lineColor: '#92c1dc',\n fillColor: '#ebf4f9',\n height: '50',\n width: '80'\n });\n\n // The Calender\n $('#calendar').datepicker();\n\n // SLIMSCROLL FOR CHAT WIDGET\n $('#chat-box').slimScroll({\n height: '250px'\n });\n\n /* Morris.js Charts */\n // Sales chart\n var area = new Morris.Area({\n element: 'revenue-chart',\n resize: true,\n data: [{ y: '2011 Q1', item1: 2666, item2: 2666 }, { y: '2011 Q2', item1: 2778, item2: 2294 }, { y: '2011 Q3', item1: 4912, item2: 1969 }, { y: '2011 Q4', item1: 3767, item2: 3597 }, { y: '2012 Q1', item1: 6810, item2: 1914 }, { y: '2012 Q2', item1: 5670, item2: 4293 }, { y: '2012 Q3', item1: 4820, item2: 3795 }, { y: '2012 Q4', item1: 15073, item2: 5967 }, { y: '2013 Q1', item1: 10687, item2: 4460 }, { y: '2013 Q2', item1: 8432, item2: 5713 }],\n xkey: 'y',\n ykeys: ['item1', 'item2'],\n labels: ['Item 1', 'Item 2'],\n lineColors: ['#a0d0e0', '#3c8dbc'],\n hideHover: 'auto'\n });\n var line = new Morris.Line({\n element: 'line-chart',\n resize: true,\n data: [{ y: '2011 Q1', item1: 2666 }, { y: '2011 Q2', item1: 2778 }, { y: '2011 Q3', item1: 4912 }, { y: '2011 Q4', item1: 3767 }, { y: '2012 Q1', item1: 6810 }, { y: '2012 Q2', item1: 5670 }, { y: '2012 Q3', item1: 4820 }, { y: '2012 Q4', item1: 15073 }, { y: '2013 Q1', item1: 10687 }, { y: '2013 Q2', item1: 8432 }],\n xkey: 'y',\n ykeys: ['item1'],\n labels: ['Item 1'],\n lineColors: ['#efefef'],\n lineWidth: 2,\n hideHover: 'auto',\n gridTextColor: '#fff',\n gridStrokeWidth: 0.4,\n pointSize: 4,\n pointStrokeColors: ['#efefef'],\n gridLineColor: '#efefef',\n gridTextFamily: 'Open Sans',\n gridTextSize: 10\n });\n\n // Donut Chart\n var donut = new Morris.Donut({\n element: 'sales-chart',\n resize: true,\n colors: ['#3c8dbc', '#f56954', '#00a65a'],\n data: [{ label: 'Download Sales', value: 12 }, { label: 'In-Store Sales', value: 30 }, { label: 'Mail-Order Sales', value: 20 }],\n hideHover: 'auto'\n });\n\n // Fix for charts under tabs\n $('.box ul.nav a').on('shown.bs.tab', function () {\n area.redraw();\n donut.redraw();\n line.redraw();\n });\n\n /* The todo list plugin */\n $('.todo-list').todoList({\n onCheck: function onCheck() {\n window.console.log($(this), 'The element has been checked');\n },\n onUnCheck: function onUnCheck() {\n window.console.log($(this), 'The element has been unchecked');\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL3BhZ2VzL2Rhc2hib2FyZC5qcz8yYWRmIl0sIm5hbWVzIjpbIiQiLCJzb3J0YWJsZSIsInBsYWNlaG9sZGVyIiwiY29ubmVjdFdpdGgiLCJoYW5kbGUiLCJmb3JjZVBsYWNlaG9sZGVyU2l6ZSIsInpJbmRleCIsImNzcyIsInd5c2lodG1sNSIsImRhdGVyYW5nZXBpY2tlciIsInJhbmdlcyIsIm1vbWVudCIsInN1YnRyYWN0Iiwic3RhcnRPZiIsImVuZE9mIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInN0YXJ0IiwiZW5kIiwid2luZG93IiwiYWxlcnQiLCJmb3JtYXQiLCJrbm9iIiwidmlzaXRvcnNEYXRhIiwiVVMiLCJTQSIsIkNBIiwiREUiLCJGUiIsIkNOIiwiQVUiLCJCUiIsIklOIiwiR0IiLCJSVSIsInZlY3Rvck1hcCIsIm1hcCIsImJhY2tncm91bmRDb2xvciIsInJlZ2lvblN0eWxlIiwiaW5pdGlhbCIsImZpbGwiLCJzdHJva2UiLCJzZXJpZXMiLCJyZWdpb25zIiwidmFsdWVzIiwic2NhbGUiLCJub3JtYWxpemVGdW5jdGlvbiIsIm9uUmVnaW9uTGFiZWxTaG93IiwiZSIsImVsIiwiY29kZSIsImh0bWwiLCJteXZhbHVlcyIsInNwYXJrbGluZSIsInR5cGUiLCJsaW5lQ29sb3IiLCJmaWxsQ29sb3IiLCJoZWlnaHQiLCJ3aWR0aCIsImRhdGVwaWNrZXIiLCJzbGltU2Nyb2xsIiwiYXJlYSIsIk1vcnJpcyIsIkFyZWEiLCJlbGVtZW50IiwicmVzaXplIiwiZGF0YSIsInkiLCJpdGVtMSIsIml0ZW0yIiwieGtleSIsInlrZXlzIiwibGFiZWxzIiwibGluZUNvbG9ycyIsImhpZGVIb3ZlciIsImxpbmUiLCJMaW5lIiwibGluZVdpZHRoIiwiZ3JpZFRleHRDb2xvciIsImdyaWRTdHJva2VXaWR0aCIsInBvaW50U2l6ZSIsInBvaW50U3Ryb2tlQ29sb3JzIiwiZ3JpZExpbmVDb2xvciIsImdyaWRUZXh0RmFtaWx5IiwiZ3JpZFRleHRTaXplIiwiZG9udXQiLCJEb251dCIsImNvbG9ycyIsImxhYmVsIiwidmFsdWUiLCJvbiIsInJlZHJhdyIsInRvZG9MaXN0Iiwib25DaGVjayIsImNvbnNvbGUiLCJsb2ciLCJvblVuQ2hlY2siXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBT0FBLEVBQUUsWUFBWTs7QUFFWjs7QUFFQTs7QUFDQUEsSUFBRSxvQkFBRixFQUF3QkMsUUFBeEIsQ0FBaUM7QUFDL0JDLGlCQUFzQixnQkFEUztBQUUvQkMsaUJBQXNCLG9CQUZTO0FBRy9CQyxZQUFzQix3QkFIUztBQUkvQkMsMEJBQXNCLElBSlM7QUFLL0JDLFlBQXNCO0FBTFMsR0FBakM7QUFPQU4sSUFBRSxxRUFBRixFQUF5RU8sR0FBekUsQ0FBNkUsUUFBN0UsRUFBdUYsTUFBdkY7O0FBRUE7QUFDQVAsSUFBRSxZQUFGLEVBQWdCQyxRQUFoQixDQUF5QjtBQUN2QkMsaUJBQXNCLGdCQURDO0FBRXZCRSxZQUFzQixTQUZDO0FBR3ZCQywwQkFBc0IsSUFIQztBQUl2QkMsWUFBc0I7QUFKQyxHQUF6Qjs7QUFPQTtBQUNBTixJQUFFLFdBQUYsRUFBZVEsU0FBZjs7QUFFQVIsSUFBRSxZQUFGLEVBQWdCUyxlQUFoQixDQUFnQztBQUM5QkMsWUFBVztBQUNULGVBQWdCLENBQUNDLFFBQUQsRUFBV0EsUUFBWCxDQURQO0FBRVQsbUJBQWdCLENBQUNBLFNBQVNDLFFBQVQsQ0FBa0IsQ0FBbEIsRUFBcUIsTUFBckIsQ0FBRCxFQUErQkQsU0FBU0MsUUFBVCxDQUFrQixDQUFsQixFQUFxQixNQUFyQixDQUEvQixDQUZQO0FBR1QscUJBQWdCLENBQUNELFNBQVNDLFFBQVQsQ0FBa0IsQ0FBbEIsRUFBcUIsTUFBckIsQ0FBRCxFQUErQkQsUUFBL0IsQ0FIUDtBQUlULHNCQUFnQixDQUFDQSxTQUFTQyxRQUFULENBQWtCLEVBQWxCLEVBQXNCLE1BQXRCLENBQUQsRUFBZ0NELFFBQWhDLENBSlA7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QXlCO0FBQ3ZCQyxhQUFXLG1CQUFZO0FBQ3JCMUUsYUFBTzJFLE9BQVAsQ0FBZUMsR0FBZixDQUFtQi9GLEVBQUUsSUFBRixDQUFuQixFQUE0Qiw4QkFBNUI7QUFDRCxLQUhzQjtBQUl2QmdHLGVBQVcscUJBQVk7QUFDckI3RSxhQUFPMkUsT0FBUCxDQUFlQyxHQUFmLENBQW1CL0YsRUFBRSxJQUFGLENBQW5CLEVBQTRCLGdDQUE1QjtBQUNEO0FBTnNCLEdBQXpCO0FBU0QsQ0ExTUQiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQXV0aG9yOiBBYmR1bGxhaCBBIEFsbXNhZWVkXG4gKiBEYXRlOiA0IEphbiAyMDE0XG4gKiBEZXNjcmlwdGlvbjpcbiAqICAgICAgVGhpcyBpcyBhIGRlbW8gZmlsZSB1c2VkIG9ubHkgZm9yIHRoZSBtYWluIGRhc2hib2FyZCAoaW5kZXguaHRtbClcbiAqKi9cblxuJChmdW5jdGlvbiAoKSB7XG5cbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIE1ha2UgdGhlIGRhc2hib2FyZCB3aWRnZXRzIHNvcnRhYmxlIFVzaW5nIGpxdWVyeSBVSVxuICAkKCcuY29ubmVjdGVkU29ydGFibGUnKS5zb3J0YWJsZSh7XG4gICAgcGxhY2Vob2xkZXIgICAgICAgICA6ICdzb3J0LWhpZ2hsaWdodCcsXG4gICAgY29ubmVjdFdpdGggICAgICAgICA6ICcuY29ubmVjdGVkU29ydGFibGUnLFxuICAgIGhhbmRsZSAgICAgICAgICAgICAgOiAnLmJveC1oZWFkZXIsIC5uYXYtdGFicycsXG4gICAgZm9yY2VQbGFjZWhvbGRlclNpemU6IHRydWUsXG4gICAgekluZGV4ICAgICAgICAgICAgICA6IDk5OTk5OVxuICB9KTtcbiAgJCgnLmNvbm5lY3RlZFNvcnRhYmxlIC5ib3gtaGVhZGVyLCAuY29ubmVjdGVkU29ydGFibGUgLm5hdi10YWJzLWN1c3RvbScpLmNzcygnY3Vyc29yJywgJ21vdmUnKTtcblxuICAvLyBqUXVlcnkgVUkgc29ydGFibGUgZm9yIHRoZSB0b2RvIGxpc3RcbiAgJCgnLnRvZG8tbGlzdCcpLnNvcnRhYmxlKHtcbiAgICBwbGFjZWhvbGRlciAgICAgICAgIDogJ3NvcnQtaGlnaGxpZ2h0JyxcbiAgICBoYW5kbGUgICAgICAgICAgICAgIDogJy5oYW5kbGUnLFxuICAgIGZvcmNlUGxhY2Vob2xkZXJTaXplOiB0cnVlLFxuICAgIHpJbmRleCAgICAgICAgICAgICAgOiA5OTk5OTlcbiAgfSk7XG5cbiAgLy8gYm9vdHN0cmFwIFdZU0lIVE1MNSAtIHRleHQgZWRpdG9yXG4gICQoJy50ZXh0YXJlYScpLnd5c2lodG1sNSgpO1xuXG4gICQoJy5kYXRlcmFuZ2UnKS5kYXRlcmFuZ2VwaWNrZXIoe1xuICAgIHJhbmdlcyAgIDoge1xuICAgICAgJ1RvZGF5JyAgICAgICA6IFttb21lbnQoKSwgbW9tZW50KCldLFxuICAgICAgJ1llc3RlcmRheScgICA6IFttb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpLCBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcbiAgICAgICdMYXN0IDcgRGF5cycgOiBbbW9tZW50KCkuc3VidHJhY3QoNiwgJ2RheXMnKSwgbW9tZW50KCldLFxuICAgICAgJ0xhc3QgMzAgRGF5cyc6IFttb21lbnQoKS5zdWJ0cmFjdCgyOSwgJ2RheXMnKSwgbW9tZW50KCldLFxuICAgICAgJ1RoaXMgTW9udGgnICA6IFttb21lbnQoKS5zdGFydE9mKCdtb250aCcpLCBtb21lbnQoKS5lbmRPZignbW9udGgnKV0sXG4gICAgICAnTGFzdCBNb250aCcgIDogW21vbWVudCgpLnN1YnRyYWN0KDEsICdtb250aCcpLnN0YXJ0T2YoJ21vbnRoJyksIG1vbWVudCgpLnN1YnRyYWN0KDEsICdtb250aCcpLmVuZE9mKCdtb250aCcpXVxuICAgIH0sXG4gICAgc3RhcnREYXRlOiBtb21lbnQoKS5zdWJ0cmFjdCgyOSwgJ2RheXMnKSxcbiAgICBlbmREYXRlICA6IG1vbWVudCgpXG4gIH0sIGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG4gICAgd2luZG93LmFsZXJ0KCdZb3UgY2hvc2U6ICcgKyBzdGFydC5mb3JtYXQoJ01NTU0gRCwgWVlZWScpICsgJyAtICcgKyBlbmQuZm9ybWF0KCdNTU1NIEQsIFlZWVknKSk7XG4gIH0pO1xuXG4gIC8qIGpRdWVyeUtub2IgKi9cbiAgJCgnLmtub2InKS5rbm9iKCk7XG5cbiAgLy8ganZlY3Rvcm1hcCBkYXRhXG4gIHZhciB2aXNpdG9yc0RhdGEgPSB7XG4gICAgVVM6IDM5OCwgLy8gVVNBXG4gICAgU0E6IDQwMCwgLy8gU2F1ZGkgQXJhYmlhXG4gICAgQ0E6IDEwMDAsIC8vIENhbmFkYVxuICAgIERFOiA1MDAsIC8vIEdlcm1hbnlcbiAgICBGUjogNzYwLCAvLyBGcmFuY2VcbiAgICBDTjogMzAwLCAvLyBDaGluYVxuICAgIEFVOiA3MDAsIC8vIEF1c3RyYWxpYVxuICAgIEJSOiA2MDAsIC8vIEJyYXppbFxuICAgIElOOiA4MDAsIC8vIEluZGlhXG4gICAgR0I6IDMyMCwgLy8gR3JlYXQgQnJpdGFpblxuICAgIFJVOiAzMDAwIC8vIFJ1c3NpYVxuICB9O1xuICAvLyBXb3JsZCBtYXAgYnkganZlY3Rvcm1hcFxuICAkKCcjd29ybGQtbWFwJykudmVjdG9yTWFwKHtcbiAgICBtYXAgICAgICAgICAgICAgIDogJ3dvcmxkX21pbGxfZW4nLFxuICAgIGJhY2tncm91bmRDb2xvciAgOiAndHJhbnNwYXJlbnQnLFxuICAgIHJlZ2lvblN0eWxlICAgICAgOiB7XG4gICAgICBpbml0aWFsOiB7XG4gICAgICAgIGZpbGwgICAgICAgICAgICA6ICcjZTRlNGU0JyxcbiAgICAgICAgJ2ZpbGwtb3BhY2l0eScgIDogMSxcbiAgICAgICAgc3Ryb2tlICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAnc3Ryb2tlLXdpZHRoJyAgOiAwLFxuICAgICAgICAnc3Ryb2tlLW9wYWNpdHknOiAxXG4gICAgICB9XG4gICAgfSxcbiAgICBzZXJpZXMgICAgICAgICAgIDoge1xuICAgICAgcmVnaW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWVzICAgICAgICAgICA6IHZpc2l0b3JzRGF0YSxcbiAgICAgICAgICBzY2FsZSAgICAgICAgICAgIDogWycjOTJjMWRjJywgJyNlYmY0ZjknXSxcbiAgICAgICAgICBub3JtYWxpemVGdW5jdGlvbjogJ3BvbHlub21pYWwnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIG9uUmVnaW9uTGFiZWxTaG93OiBmdW5jdGlvbiAoZSwgZWwsIGNvZGUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmlzaXRvcnNEYXRhW2NvZGVdICE9ICd1bmRlZmluZWQnKVxuICAgICAgICBlbC5odG1sKGVsLmh0bWwoKSArICc6ICcgKyB2aXNpdG9yc0RhdGFbY29kZV0gKyAnIG5ldyB2aXNpdG9ycycpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3BhcmtsaW5lIGNoYXJ0c1xuICB2YXIgbXl2YWx1ZXMgPSBbMTAwMCwgMTIwMCwgOTIwLCA5MjcsIDkzMSwgMTAyNywgODE5LCA5MzAsIDEwMjFdO1xuICAkKCcjc3BhcmtsaW5lLTEnKS5zcGFya2xpbmUobXl2YWx1ZXMsIHtcbiAgICB0eXBlICAgICA6ICdsaW5lJyxcbiAgICBsaW5lQ29sb3I6ICcjOTJjMWRjJyxcbiAgICBmaWxsQ29sb3I6ICcjZWJmNGY5JyxcbiAgICBoZWlnaHQgICA6ICc1MCcsXG4gICAgd2lkdGggICAgOiAnODAnXG4gIH0pO1xuICBteXZhbHVlcyA9IFs1MTUsIDUxOSwgNTIwLCA1MjIsIDY1MiwgODEwLCAzNzAsIDYyNywgMzE5LCA2MzAsIDkyMV07XG4gICQoJyNzcGFya2xpbmUtMicpLnNwYXJrbGluZShteXZhbHVlcywge1xuICAgIHR5cGUgICAgIDogJ2xpbmUnLFxuICAgIGxpbmVDb2xvcjogJyM5MmMxZGMnLFxuICAgIGZpbGxDb2xvcjogJyNlYmY0ZjknLFxuICAgIGhlaWdodCAgIDogJzUwJyxcbiAgICB3aWR0aCAgICA6ICc4MCdcbiAgfSk7XG4gIG15dmFsdWVzID0gWzE1LCAxOSwgMjAsIDIyLCAzMywgMjcsIDMxLCAyNywgMTksIDMwLCAyMV07XG4gICQoJyNzcGFya2xpbmUtMycpLnNwYXJrbGluZShteXZhbHVlcywge1xuICAgIHR5cGUgICAgIDogJ2xpbmUnLFxuICAgIGxpbmVDb2xvcjogJyM5MmMxZGMnLFxuICAgIGZpbGxDb2xvcjogJyNlYmY0ZjknLFxuICAgIGhlaWdodCAgIDogJzUwJyxcbiAgICB3aWR0aCAgICA6ICc4MCdcbiAgfSk7XG5cbiAgLy8gVGhlIENhbGVuZGVyXG4gICQoJyNjYWxlbmRhcicpLmRhdGVwaWNrZXIoKTtcblxuICAvLyBTTElNU0NST0xMIEZPUiBDSEFUIFdJREdFVFxuICAkKCcjY2hhdC1ib3gnKS5zbGltU2Nyb2xsKHtcbiAgICBoZWlnaHQ6ICcyNTBweCdcbiAgfSk7XG5cbiAgLyogTW9ycmlzLmpzIENoYXJ0cyAqL1xuICAvLyBTYWxlcyBjaGFydFxuICB2YXIgYXJlYSA9IG5ldyBNb3JyaXMuQXJlYSh7XG4gICAgZWxlbWVudCAgIDogJ3JldmVudWUtY2hhcnQnLFxuICAgIHJlc2l6ZSAgICA6IHRydWUsXG4gICAgZGF0YSAgICAgIDogW1xuICAgICAgeyB5OiAnMjAxMSBRMScsIGl0ZW0xOiAyNjY2LCBpdGVtMjogMjY2NiB9LFxuICAgICAgeyB5OiAnMjAxMSBRMicsIGl0ZW0xOiAyNzc4LCBpdGVtMjogMjI5NCB9LFxuICAgICAgeyB5OiAnMjAxMSBRMycsIGl0ZW0xOiA0OTEyLCBpdGVtMjogMTk2OSB9LFxuICAgICAgeyB5OiAnMjAxMSBRNCcsIGl0ZW0xOiAzNzY3LCBpdGVtMjogMzU5NyB9LFxuICAgICAgeyB5OiAnMjAxMiBRMScsIGl0ZW0xOiA2ODEwLCBpdGVtMjogMTkxNCB9LFxuICAgICAgeyB5OiAnMjAxMiBRMicsIGl0ZW0xOiA1NjcwLCBpdGVtMjogNDI5MyB9LFxuICAgICAgeyB5OiAnMjAxMiBRMycsIGl0ZW0xOiA0ODIwLCBpdGVtMjogMzc5NSB9LFxuICAgICAgeyB5OiAnMjAxMiBRNCcsIGl0ZW0xOiAxNTA3MywgaXRlbTI6IDU5NjcgfSxcbiAgICAgIHsgeTogJzIwMTMgUTEnLCBpdGVtMTogMTA2ODcsIGl0ZW0yOiA0NDYwIH0sXG4gICAgICB7IHk6ICcyMDEzIFEyJywgaXRlbTE6IDg0MzIsIGl0ZW0yOiA1NzEzIH1cbiAgICBdLFxuICAgIHhrZXkgICAgICA6ICd5JyxcbiAgICB5a2V5cyAgICAgOiBbJ2l0ZW0xJywgJ2l0ZW0yJ10sXG4gICAgbGFiZWxzICAgIDogWydJdGVtIDEnLCAnSXRlbSAyJ10sXG4gICAgbGluZUNvbG9yczogWycjYTBkMGUwJywgJyMzYzhkYmMnXSxcbiAgICBoaWRlSG92ZXIgOiAnYXV0bydcbiAgfSk7XG4gIHZhciBsaW5lID0gbmV3IE1vcnJpcy5MaW5lKHtcbiAgICBlbGVtZW50ICAgICAgICAgIDogJ2xpbmUtY2hhcnQnLFxuICAgIHJlc2l6ZSAgICAgICAgICAgOiB0cnVlLFxuICAgIGRhdGEgICAgICAgICAgICAgOiBbXG4gICAgICB7IHk6ICcyMDExIFExJywgaXRlbTE6IDI2NjYgfSxcbiAgICAgIHsgeTogJzIwMTEgUTInLCBpdGVtMTogMjc3OCB9LFxuICAgICAgeyB5OiAnMjAxMSBRMycsIGl0ZW0xOiA0OTEyIH0sXG4gICAgICB7IHk6ICcyMDExIFE0JywgaXRlbTE6IDM3NjcgfSxcbiAgICAgIHsgeTogJzIwMTIgUTEnLCBpdGVtMTogNjgxMCB9LFxuICAgICAgeyB5OiAnMjAxMiBRMicsIGl0ZW0xOiA1NjcwIH0sXG4gICAgICB7IHk6ICcyMDEyIFEzJywgaXRlbTE6IDQ4MjAgfSxcbiAgICAgIHsgeTogJzIwMTIgUTQnLCBpdGVtMTogMTUwNzMgfSxcbiAgICAgIHsgeTogJzIwMTMgUTEnLCBpdGVtMTogMTA2ODcgfSxcbiAgICAgIHsgeTogJzIwMTMgUTInLCBpdGVtMTogODQzMiB9XG4gICAgXSxcbiAgICB4a2V5ICAgICAgICAgICAgIDogJ3knLFxuICAgIHlrZXlzICAgICAgICAgICAgOiBbJ2l0ZW0xJ10sXG4gICAgbGFiZWxzICAgICAgICAgICA6IFsnSXRlbSAxJ10sXG4gICAgbGluZUNvbG9ycyAgICAgICA6IFsnI2VmZWZlZiddLFxuICAgIGxpbmVXaWR0aCAgICAgICAgOiAyLFxuICAgIGhpZGVIb3ZlciAgICAgICAgOiAnYXV0bycsXG4gICAgZ3JpZFRleHRDb2xvciAgICA6ICcjZmZmJyxcbiAgICBncmlkU3Ryb2tlV2lkdGggIDogMC40LFxuICAgIHBvaW50U2l6ZSAgICAgICAgOiA0LFxuICAgIHBvaW50U3Ryb2tlQ29sb3JzOiBbJyNlZmVmZWYnXSxcbiAgICBncmlkTGluZUNvbG9yICAgIDogJyNlZmVmZWYnLFxuICAgIGdyaWRUZXh0RmFtaWx5ICAgOiAnT3BlbiBTYW5zJyxcbiAgICBncmlkVGV4dFNpemUgICAgIDogMTBcbiAgfSk7XG5cbiAgLy8gRG9udXQgQ2hhcnRcbiAgdmFyIGRvbnV0ID0gbmV3IE1vcnJpcy5Eb251dCh7XG4gICAgZWxlbWVudCAgOiAnc2FsZXMtY2hhcnQnLFxuICAgIHJlc2l6ZSAgIDogdHJ1ZSxcbiAgICBjb2xvcnMgICA6IFsnIzNjOGRiYycsICcjZjU2OTU0JywgJyMwMGE2NWEnXSxcbiAgICBkYXRhICAgICA6IFtcbiAgICAgIHsgbGFiZWw6ICdEb3dubG9hZCBTYWxlcycsIHZhbHVlOiAxMiB9LFxuICAgICAgeyBsYWJlbDogJ0luLVN0b3JlIFNhbGVzJywgdmFsdWU6IDMwIH0sXG4gICAgICB7IGxhYmVsOiAnTWFpbC1PcmRlciBTYWxlcycsIHZhbHVlOiAyMCB9XG4gICAgXSxcbiAgICBoaWRlSG92ZXI6ICdhdXRvJ1xuICB9KTtcblxuICAvLyBGaXggZm9yIGNoYXJ0cyB1bmRlciB0YWJzXG4gICQoJy5ib3ggdWwubmF2IGEnKS5vbignc2hvd24uYnMudGFiJywgZnVuY3Rpb24gKCkge1xuICAgIGFyZWEucmVkcmF3KCk7XG4gICAgZG9udXQucmVkcmF3KCk7XG4gICAgbGluZS5yZWRyYXcoKTtcbiAgfSk7XG5cbiAgLyogVGhlIHRvZG8gbGlzdCBwbHVnaW4gKi9cbiAgJCgnLnRvZG8tbGlzdCcpLnRvZG9MaXN0KHtcbiAgICBvbkNoZWNrICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygkKHRoaXMpLCAnVGhlIGVsZW1lbnQgaGFzIGJlZW4gY2hlY2tlZCcpO1xuICAgIH0sXG4gICAgb25VbkNoZWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY29uc29sZS5sb2coJCh0aGlzKSwgJ1RoZSBlbGVtZW50IGhhcyBiZWVuIHVuY2hlY2tlZCcpO1xuICAgIH1cbiAgfSk7XG5cbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvZGlzdC9qcy9wYWdlcy9kYXNoYm9hcmQuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64\n"); +/***/ 55: +/***/ (function(module, exports, __webpack_require__) { + +eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 1.0.2\n *\n * Copyright 2015 Nick Downie\n * Released under the MIT license\n * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md\n */\n\n\n(function(){\n\n\t\"use strict\";\n\n\t//Declare root variable - window in the browser, global on the server\n\tvar root = this,\n\t\tprevious = root.Chart;\n\n\t//Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(context){\n\t\tvar chart = this;\n\t\tthis.canvas = context.canvas;\n\n\t\tthis.ctx = context;\n\n\t\t//Variables global to the chart\n\t\tvar computeDimension = function(element,dimension)\n\t\t{\n\t\t\tif (element['offset'+dimension])\n\t\t\t{\n\t\t\t\treturn element['offset'+dimension];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn document.defaultView.getComputedStyle(element).getPropertyValue(dimension);\n\t\t\t}\n\t\t}\n\n\t\tvar width = this.width = computeDimension(context.canvas,'Width');\n\t\tvar height = this.height = computeDimension(context.canvas,'Height');\n\n\t\t// Firefox requires this to work correctly\n\t\tcontext.canvas.width = width;\n\t\tcontext.canvas.height = height;\n\n\t\tvar width = this.width = context.canvas.width;\n\t\tvar height = this.height = context.canvas.height;\n\t\tthis.aspectRatio = this.width / this.height;\n\t\t//High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.\n\t\thelpers.retinaScale(this);\n\n\t\treturn this;\n\t};\n\t//Globally expose the defaults to allow for user updating/changing\n\tChart.defaults = {\n\t\tglobal: {\n\t\t\t// Boolean - Whether to animate the chart\n\t\t\tanimation: true,\n\n\t\t\t// Number - Number of animation steps\n\t\t\tanimationSteps: 60,\n\n\t\t\t// String - Animation easing effect\n\t\t\tanimationEasing: \"easeOutQuart\",\n\n\t\t\t// Boolean - If we should show the scale at all\n\t\t\tshowScale: true,\n\n\t\t\t// Boolean - If we want to override with a hard coded scale\n\t\t\tscaleOverride: false,\n\n\t\t\t// ** Required if scaleOverride is true **\n\t\t\t// Number - The number of steps in a hard coded scale\n\t\t\tscaleSteps: null,\n\t\t\t// Number - The value jump in the hard coded scale\n\t\t\tscaleStepWidth: null,\n\t\t\t// Number - The scale starting value\n\t\t\tscaleStartValue: null,\n\n\t\t\t// String - Colour of the scale line\n\t\t\tscaleLineColor: \"rgba(0,0,0,.1)\",\n\n\t\t\t// Number - Pixel width of the scale line\n\t\t\tscaleLineWidth: 1,\n\n\t\t\t// Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels: true,\n\n\t\t\t// Interpolated JS string - can access value\n\t\t\tscaleLabel: \"<%=value%>\",\n\n\t\t\t// Boolean - Whether the scale should stick to integers, and not show any floats even if drawing space is there\n\t\t\tscaleIntegersOnly: true,\n\n\t\t\t// Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\t\tscaleBeginAtZero: false,\n\n\t\t\t// String - Scale label font declaration for the scale label\n\t\t\tscaleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Scale label font size in pixels\n\t\t\tscaleFontSize: 12,\n\n\t\t\t// String - Scale label font weight style\n\t\t\tscaleFontStyle: \"normal\",\n\n\t\t\t// String - Scale label font colour\n\t\t\tscaleFontColor: \"#666\",\n\n\t\t\t// Boolean - whether or not the chart should be responsive and resize when the browser does.\n\t\t\tresponsive: false,\n\n\t\t\t// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n\t\t\tmaintainAspectRatio: true,\n\n\t\t\t// Boolean - Determines whether to draw tooltips on the canvas or not - attaches events to touchmove & mousemove\n\t\t\tshowTooltips: true,\n\n\t\t\t// Boolean - Determines whether to draw built-in tooltip or call custom tooltip function\n\t\t\tcustomTooltips: false,\n\n\t\t\t// Array - Array of string names to attach tooltip events\n\t\t\ttooltipEvents: [\"mousemove\", \"touchstart\", \"touchmove\", \"mouseout\"],\n\n\t\t\t// String - Tooltip background colour\n\t\t\ttooltipFillColor: \"rgba(0,0,0,0.8)\",\n\n\t\t\t// String - Tooltip label font declaration for the scale label\n\t\t\ttooltipFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip label font size in pixels\n\t\t\ttooltipFontSize: 14,\n\n\t\t\t// String - Tooltip font weight style\n\t\t\ttooltipFontStyle: \"normal\",\n\n\t\t\t// String - Tooltip label font colour\n\t\t\ttooltipFontColor: \"#fff\",\n\n\t\t\t// String - Tooltip title font declaration for the scale label\n\t\t\ttooltipTitleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip title font size in pixels\n\t\t\ttooltipTitleFontSize: 14,\n\n\t\t\t// String - Tooltip title font weight style\n\t\t\ttooltipTitleFontStyle: \"bold\",\n\n\t\t\t// String - Tooltip title font colour\n\t\t\ttooltipTitleFontColor: \"#fff\",\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipYPadding: 6,\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipXPadding: 6,\n\n\t\t\t// Number - Size of the caret on the tooltip\n\t\t\ttooltipCaretSize: 8,\n\n\t\t\t// Number - Pixel radius of the tooltip border\n\t\t\ttooltipCornerRadius: 6,\n\n\t\t\t// Number - Pixel offset from point x to tooltip edge\n\t\t\ttooltipXOffset: 10,\n\n\t\t\t// String - Template string for single tooltips\n\t\t\ttooltipTemplate: \"<%if (label){%><%=label%>: <%}%><%= value %>\",\n\n\t\t\t// String - Template string for single tooltips\n\t\t\tmultiTooltipTemplate: \"<%= value %>\",\n\n\t\t\t// String - Colour behind the legend colour block\n\t\t\tmultiTooltipKeyBackground: '#fff',\n\n\t\t\t// Function - Will fire on animation progression.\n\t\t\tonAnimationProgress: function(){},\n\n\t\t\t// Function - Will fire on animation completion.\n\t\t\tonAnimationComplete: function(){}\n\n\t\t}\n\t};\n\n\t//Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t//Global Chart helpers object for utility methods and classes\n\tvar helpers = Chart.helpers = {};\n\n\t\t//-- Basic js utility methods\n\tvar each = helpers.each = function(loopable,callback,self){\n\t\t\tvar additionalArgs = Array.prototype.slice.call(arguments, 3);\n\t\t\t// Check to see if null or undefined firstly.\n\t\t\tif (loopable){\n\t\t\t\tif (loopable.length === +loopable.length){\n\t\t\t\t\tvar i;\n\t\t\t\t\tfor (i=0; i<loopable.length; i++){\n\t\t\t\t\t\tcallback.apply(self,[loopable[i], i].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tfor (var item in loopable){\n\t\t\t\t\t\tcallback.apply(self,[loopable[item],item].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tclone = helpers.clone = function(obj){\n\t\t\tvar objClone = {};\n\t\t\teach(obj,function(value,key){\n\t\t\t\tif (obj.hasOwnProperty(key)) objClone[key] = value;\n\t\t\t});\n\t\t\treturn objClone;\n\t\t},\n\t\textend = helpers.extend = function(base){\n\t\t\teach(Array.prototype.slice.call(arguments,1), function(extensionObject) {\n\t\t\t\teach(extensionObject,function(value,key){\n\t\t\t\t\tif (extensionObject.hasOwnProperty(key)) base[key] = value;\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn base;\n\t\t},\n\t\tmerge = helpers.merge = function(base,master){\n\t\t\t//Merge properties in left object over to a shallow clone of object right.\n\t\t\tvar args = Array.prototype.slice.call(arguments,0);\n\t\t\targs.unshift({});\n\t\t\treturn extend.apply(null, args);\n\t\t},\n\t\tindexOf = helpers.indexOf = function(arrayToSearch, item){\n\t\t\tif (Array.prototype.indexOf) {\n\t\t\t\treturn arrayToSearch.indexOf(item);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tfor (var i = 0; i < arrayToSearch.length; i++) {\n\t\t\t\t\tif (arrayToSearch[i] === item) return i;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t},\n\t\twhere = helpers.where = function(collection, filterCallback){\n\t\t\tvar filtered = [];\n\n\t\t\thelpers.each(collection, function(item){\n\t\t\t\tif (filterCallback(item)){\n\t\t\t\t\tfiltered.push(item);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn filtered;\n\t\t},\n\t\tfindNextWhere = helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to start of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = -1;\n\t\t\t}\n\t\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfindPreviousWhere = helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to end of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = arrayToSearch.length;\n\t\t\t}\n\t\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinherits = helpers.inherits = function(extensions){\n\t\t\t//Basic javascript inheritance based on the model created in Backbone.js\n\t\t\tvar parent = this;\n\t\t\tvar ChartElement = (extensions && extensions.hasOwnProperty(\"constructor\")) ? extensions.constructor : function(){ return parent.apply(this, arguments); };\n\n\t\t\tvar Surrogate = function(){ this.constructor = ChartElement;};\n\t\t\tSurrogate.prototype = parent.prototype;\n\t\t\tChartElement.prototype = new Surrogate();\n\n\t\t\tChartElement.extend = inherits;\n\n\t\t\tif (extensions) extend(ChartElement.prototype, extensions);\n\n\t\t\tChartElement.__super__ = parent.prototype;\n\n\t\t\treturn ChartElement;\n\t\t},\n\t\tnoop = helpers.noop = function(){},\n\t\tuid = helpers.uid = (function(){\n\t\t\tvar id=0;\n\t\t\treturn function(){\n\t\t\t\treturn \"chart-\" + id++;\n\t\t\t};\n\t\t})(),\n\t\twarn = helpers.warn = function(str){\n\t\t\t//Method for warning of errors\n\t\t\tif (window.console && typeof window.console.warn == \"function\") console.warn(str);\n\t\t},\n\t\tamd = helpers.amd = (\"function\" == 'function' && __webpack_require__(11)),\n\t\t//-- Math methods\n\t\tisNumber = helpers.isNumber = function(n){\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\t\tmax = helpers.max = function(array){\n\t\t\treturn Math.max.apply( Math, array );\n\t\t},\n\t\tmin = helpers.min = function(array){\n\t\t\treturn Math.min.apply( Math, array );\n\t\t},\n\t\tcap = helpers.cap = function(valueToCap,maxValue,minValue){\n\t\t\tif(isNumber(maxValue)) {\n\t\t\t\tif( valueToCap > maxValue ) {\n\t\t\t\t\treturn maxValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(isNumber(minValue)){\n\t\t\t\tif ( valueToCap < minValue ){\n\t\t\t\t\treturn minValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn valueToCap;\n\t\t},\n\t\tgetDecimalPlaces = helpers.getDecimalPlaces = function(num){\n\t\t\tif (num%1!==0 && isNumber(num)){\n\t\t\t\treturn num.toString().split(\".\")[1].length;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttoRadians = helpers.radians = function(degrees){\n\t\t\treturn degrees * (Math.PI/180);\n\t\t},\n\t\t// Gets the angle from vertical upright to the point about a centre.\n\t\tgetAngleFromPoint = helpers.getAngleFromPoint = function(centrePoint, anglePoint){\n\t\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x,\n\t\t\t\tdistanceFromYCenter = anglePoint.y - centrePoint.y,\n\t\t\t\tradialDistanceFromCenter = Math.sqrt( distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\n\t\t\tvar angle = Math.PI * 2 + Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\t\t//If the segment is in the top left quadrant, we need to add another rotation to the angle\n\t\t\tif (distanceFromXCenter < 0 && distanceFromYCenter < 0){\n\t\t\t\tangle += Math.PI*2;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tangle: angle,\n\t\t\t\tdistance: radialDistanceFromCenter\n\t\t\t};\n\t\t},\n\t\taliasPixel = helpers.aliasPixel = function(pixelWidth){\n\t\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t\t},\n\t\tsplineCurve = helpers.splineCurve = function(FirstPoint,MiddlePoint,AfterPoint,t){\n\t\t\t//Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t\t//http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\t\t\tvar d01=Math.sqrt(Math.pow(MiddlePoint.x-FirstPoint.x,2)+Math.pow(MiddlePoint.y-FirstPoint.y,2)),\n\t\t\t\td12=Math.sqrt(Math.pow(AfterPoint.x-MiddlePoint.x,2)+Math.pow(AfterPoint.y-MiddlePoint.y,2)),\n\t\t\t\tfa=t*d01/(d01+d12),// scaling factor for triangle Ta\n\t\t\t\tfb=t*d12/(d01+d12);\n\t\t\treturn {\n\t\t\t\tinner : {\n\t\t\t\t\tx : MiddlePoint.x-fa*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y-fa*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t},\n\t\t\t\touter : {\n\t\t\t\t\tx: MiddlePoint.x+fb*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y+fb*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tcalculateOrderOfMagnitude = helpers.calculateOrderOfMagnitude = function(val){\n\t\t\treturn Math.floor(Math.log(val) / Math.LN10);\n\t\t},\n\t\tcalculateScaleRange = helpers.calculateScaleRange = function(valuesArray, drawingSize, textSize, startFromZero, integersOnly){\n\n\t\t\t//Set a minimum step of two - a point at the top of the graph, and a point at the base\n\t\t\tvar minSteps = 2,\n\t\t\t\tmaxSteps = Math.floor(drawingSize/(textSize * 1.5)),\n\t\t\t\tskipFitting = (minSteps >= maxSteps);\n\n\t\t\tvar maxValue = max(valuesArray),\n\t\t\t\tminValue = min(valuesArray);\n\n\t\t\t// We need some degree of seperation here to calculate the scales if all the values are the same\n\t\t\t// Adding/minusing 0.5 will give us a range of 1.\n\t\t\tif (maxValue === minValue){\n\t\t\t\tmaxValue += 0.5;\n\t\t\t\t// So we don't end up with a graph with a negative start value if we've said always start from zero\n\t\t\t\tif (minValue >= 0.5 && !startFromZero){\n\t\t\t\t\tminValue -= 0.5;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t// Make up a whole number above the values\n\t\t\t\t\tmaxValue += 0.5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar\tvalueRange = Math.abs(maxValue - minValue),\n\t\t\t\trangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange),\n\t\t\t\tgraphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphMin = (startFromZero) ? 0 : Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphRange = graphMax - graphMin,\n\t\t\t\tstepValue = Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tnumberOfSteps = Math.round(graphRange / stepValue);\n\n\t\t\t//If we have more space on the graph we'll use it to give more definition to the data\n\t\t\twhile((numberOfSteps > maxSteps || (numberOfSteps * 2) < maxSteps) && !skipFitting) {\n\t\t\t\tif(numberOfSteps > maxSteps){\n\t\t\t\t\tstepValue *=2;\n\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t// Don't ever deal with a decimal number of steps - cancel fitting and just use the minimum number of steps.\n\t\t\t\t\tif (numberOfSteps % 1 !== 0){\n\t\t\t\t\t\tskipFitting = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//We can fit in double the amount of scale points on the scale\n\t\t\t\telse{\n\t\t\t\t\t//If user has declared ints only, and the step value isn't a decimal\n\t\t\t\t\tif (integersOnly && rangeOrderOfMagnitude >= 0){\n\t\t\t\t\t\t//If the user has said integers only, we need to check that making the scale more granular wouldn't make it a float\n\t\t\t\t\t\tif(stepValue/2 % 1 === 0){\n\t\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//If it would make it a float break out of the loop\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//If the scale doesn't have to be an int, make the scale more granular anyway.\n\t\t\t\t\telse{\n\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (skipFitting){\n\t\t\t\tnumberOfSteps = minSteps;\n\t\t\t\tstepValue = graphRange / numberOfSteps;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsteps : numberOfSteps,\n\t\t\t\tstepValue : stepValue,\n\t\t\t\tmin : graphMin,\n\t\t\t\tmax\t: graphMin + (numberOfSteps * stepValue)\n\t\t\t};\n\n\t\t},\n\t\t/* jshint ignore:start */\n\t\t// Blows up jshint errors based on the new Function constructor\n\t\t//Templating methods\n\t\t//Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/\n\t\ttemplate = helpers.template = function(templateString, valuesObject){\n\n\t\t\t// If templateString is function rather than string-template - call the function for valuesObject\n\n\t\t\tif(templateString instanceof Function){\n\t\t\t \treturn templateString(valuesObject);\n\t\t \t}\n\n\t\t\tvar cache = {};\n\t\t\tfunction tmpl(str, data){\n\t\t\t\t// Figure out if we're getting a template, or if we need to\n\t\t\t\t// load the template - and be sure to cache the result.\n\t\t\t\tvar fn = !/\\W/.test(str) ?\n\t\t\t\tcache[str] = cache[str] :\n\n\t\t\t\t// Generate a reusable function that will serve as a template\n\t\t\t\t// generator (and which will be cached).\n\t\t\t\tnew Function(\"obj\",\n\t\t\t\t\t\"var p=[],print=function(){p.push.apply(p,arguments);};\" +\n\n\t\t\t\t\t// Introduce the data as local variables using with(){}\n\t\t\t\t\t\"with(obj){p.push('\" +\n\n\t\t\t\t\t// Convert the template into pure JavaScript\n\t\t\t\t\tstr\n\t\t\t\t\t\t.replace(/[\\r\\t\\n]/g, \" \")\n\t\t\t\t\t\t.split(\"<%\").join(\"\\t\")\n\t\t\t\t\t\t.replace(/((^|%>)[^\\t]*)'/g, \"$1\\r\")\n\t\t\t\t\t\t.replace(/\\t=(.*?)%>/g, \"',$1,'\")\n\t\t\t\t\t\t.split(\"\\t\").join(\"');\")\n\t\t\t\t\t\t.split(\"%>\").join(\"p.push('\")\n\t\t\t\t\t\t.split(\"\\r\").join(\"\\\\'\") +\n\t\t\t\t\t\"');}return p.join('');\"\n\t\t\t\t);\n\n\t\t\t\t// Provide some basic currying to the user\n\t\t\t\treturn data ? fn( data ) : fn;\n\t\t\t}\n\t\t\treturn tmpl(templateString,valuesObject);\n\t\t},\n\t\t/* jshint ignore:end */\n\t\tgenerateLabels = helpers.generateLabels = function(templateString,numberOfSteps,graphMin,stepValue){\n\t\t\tvar labelsArray = new Array(numberOfSteps);\n\t\t\tif (labelTemplateString){\n\t\t\t\teach(labelsArray,function(val,index){\n\t\t\t\t\tlabelsArray[index] = template(templateString,{value: (graphMin + (stepValue*(index+1)))});\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn labelsArray;\n\t\t},\n\t\t//--Animation methods\n\t\t//Easing functions adapted from Robert Penner's easing equations\n\t\t//http://www.robertpenner.com/easing/\n\t\teasingEffects = helpers.easingEffects = {\n\t\t\tlinear: function (t) {\n\t\t\t\treturn t;\n\t\t\t},\n\t\t\teaseInQuad: function (t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\t\t\teaseOutQuad: function (t) {\n\t\t\t\treturn -1 * t * (t - 2);\n\t\t\t},\n\t\t\teaseInOutQuad: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t;\n\t\t\t\treturn -1 / 2 * ((--t) * (t - 2) - 1);\n\t\t\t},\n\t\t\teaseInCubic: function (t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\t\t\teaseOutCubic: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutCubic: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t;\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t + 2);\n\t\t\t},\n\t\t\teaseInQuart: function (t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuart: function (t) {\n\t\t\t\treturn -1 * ((t = t / 1 - 1) * t * t * t - 1);\n\t\t\t},\n\t\t\teaseInOutQuart: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t;\n\t\t\t\treturn -1 / 2 * ((t -= 2) * t * t * t - 2);\n\t\t\t},\n\t\t\teaseInQuint: function (t) {\n\t\t\t\treturn 1 * (t /= 1) * t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuint: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutQuint: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t * t;\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t * t * t + 2);\n\t\t\t},\n\t\t\teaseInSine: function (t) {\n\t\t\t\treturn -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;\n\t\t\t},\n\t\t\teaseOutSine: function (t) {\n\t\t\t\treturn 1 * Math.sin(t / 1 * (Math.PI / 2));\n\t\t\t},\n\t\t\teaseInOutSine: function (t) {\n\t\t\t\treturn -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);\n\t\t\t},\n\t\t\teaseInExpo: function (t) {\n\t\t\t\treturn (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));\n\t\t\t},\n\t\t\teaseOutExpo: function (t) {\n\t\t\t\treturn (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);\n\t\t\t},\n\t\t\teaseInOutExpo: function (t) {\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif (t === 1) return 1;\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * Math.pow(2, 10 * (t - 1));\n\t\t\t\treturn 1 / 2 * (-Math.pow(2, -10 * --t) + 2);\n\t\t\t},\n\t\t\teaseInCirc: function (t) {\n\t\t\t\tif (t >= 1) return t;\n\t\t\t\treturn -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);\n\t\t\t},\n\t\t\teaseOutCirc: function (t) {\n\t\t\t\treturn 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);\n\t\t\t},\n\t\t\teaseInOutCirc: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return -1 / 2 * (Math.sqrt(1 - t * t) - 1);\n\t\t\t\treturn 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t\t\t},\n\t\t\teaseInElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1) == 1) return 1;\n\t\t\t\tif (!p) p = 1 * 0.3;\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t},\n\t\t\teaseOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1) == 1) return 1;\n\t\t\t\tif (!p) p = 1 * 0.3;\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;\n\t\t\t},\n\t\t\teaseInOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1 / 2) == 2) return 1;\n\t\t\t\tif (!p) p = 1 * (0.3 * 1.5);\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\tif (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t\t\t},\n\t\t\teaseInBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * (t /= 1) * t * ((s + 1) * t - s);\n\t\t\t},\n\t\t\teaseOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);\n\t\t\t},\n\t\t\teaseInOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t\t\t},\n\t\t\teaseInBounce: function (t) {\n\t\t\t\treturn 1 - easingEffects.easeOutBounce(1 - t);\n\t\t\t},\n\t\t\teaseOutBounce: function (t) {\n\t\t\t\tif ((t /= 1) < (1 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * t * t);\n\t\t\t\t} else if (t < (2 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);\n\t\t\t\t} else if (t < (2.5 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);\n\t\t\t\t} else {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);\n\t\t\t\t}\n\t\t\t},\n\t\t\teaseInOutBounce: function (t) {\n\t\t\t\tif (t < 1 / 2) return easingEffects.easeInBounce(t * 2) * 0.5;\n\t\t\t\treturn easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;\n\t\t\t}\n\t\t},\n\t\t//Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t\trequestAnimFrame = helpers.requestAnimFrame = (function(){\n\t\t\treturn window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame ||\n\t\t\t\twindow.msRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tcancelAnimFrame = helpers.cancelAnimFrame = (function(){\n\t\t\treturn window.cancelAnimationFrame ||\n\t\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\t\twindow.oCancelAnimationFrame ||\n\t\t\t\twindow.msCancelAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.clearTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tanimationLoop = helpers.animationLoop = function(callback,totalSteps,easingString,onProgress,onComplete,chartInstance){\n\n\t\t\tvar currentStep = 0,\n\t\t\t\teasingFunction = easingEffects[easingString] || easingEffects.linear;\n\n\t\t\tvar animationFrame = function(){\n\t\t\t\tcurrentStep++;\n\t\t\t\tvar stepDecimal = currentStep/totalSteps;\n\t\t\t\tvar easeDecimal = easingFunction(stepDecimal);\n\n\t\t\t\tcallback.call(chartInstance,easeDecimal,stepDecimal, currentStep);\n\t\t\t\tonProgress.call(chartInstance,easeDecimal,stepDecimal);\n\t\t\t\tif (currentStep < totalSteps){\n\t\t\t\t\tchartInstance.animationFrame = requestAnimFrame(animationFrame);\n\t\t\t\t} else{\n\t\t\t\t\tonComplete.apply(chartInstance);\n\t\t\t\t}\n\t\t\t};\n\t\t\trequestAnimFrame(animationFrame);\n\t\t},\n\t\t//-- DOM methods\n\t\tgetRelativePosition = helpers.getRelativePosition = function(evt){\n\t\t\tvar mouseX, mouseY;\n\t\t\tvar e = evt.originalEvent || evt,\n\t\t\t\tcanvas = evt.currentTarget || evt.srcElement,\n\t\t\t\tboundingRect = canvas.getBoundingClientRect();\n\n\t\t\tif (e.touches){\n\t\t\t\tmouseX = e.touches[0].clientX - boundingRect.left;\n\t\t\t\tmouseY = e.touches[0].clientY - boundingRect.top;\n\n\t\t\t}\n\t\t\telse{\n\t\t\t\tmouseX = e.clientX - boundingRect.left;\n\t\t\t\tmouseY = e.clientY - boundingRect.top;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx : mouseX,\n\t\t\t\ty : mouseY\n\t\t\t};\n\n\t\t},\n\t\taddEvent = helpers.addEvent = function(node,eventType,method){\n\t\t\tif (node.addEventListener){\n\t\t\t\tnode.addEventListener(eventType,method);\n\t\t\t} else if (node.attachEvent){\n\t\t\t\tnode.attachEvent(\"on\"+eventType, method);\n\t\t\t} else {\n\t\t\t\tnode[\"on\"+eventType] = method;\n\t\t\t}\n\t\t},\n\t\tremoveEvent = helpers.removeEvent = function(node, eventType, handler){\n\t\t\tif (node.removeEventListener){\n\t\t\t\tnode.removeEventListener(eventType, handler, false);\n\t\t\t} else if (node.detachEvent){\n\t\t\t\tnode.detachEvent(\"on\"+eventType,handler);\n\t\t\t} else{\n\t\t\t\tnode[\"on\" + eventType] = noop;\n\t\t\t}\n\t\t},\n\t\tbindEvents = helpers.bindEvents = function(chartInstance, arrayOfEvents, handler){\n\t\t\t// Create the events object if it's not already present\n\t\t\tif (!chartInstance.events) chartInstance.events = {};\n\n\t\t\teach(arrayOfEvents,function(eventName){\n\t\t\t\tchartInstance.events[eventName] = function(){\n\t\t\t\t\thandler.apply(chartInstance, arguments);\n\t\t\t\t};\n\t\t\t\taddEvent(chartInstance.chart.canvas,eventName,chartInstance.events[eventName]);\n\t\t\t});\n\t\t},\n\t\tunbindEvents = helpers.unbindEvents = function (chartInstance, arrayOfEvents) {\n\t\t\teach(arrayOfEvents, function(handler,eventName){\n\t\t\t\tremoveEvent(chartInstance.chart.canvas, eventName, handler);\n\t\t\t});\n\t\t},\n\t\tgetMaximumWidth = helpers.getMaximumWidth = function(domNode){\n\t\t\tvar container = domNode.parentNode;\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container.clientWidth;\n\t\t},\n\t\tgetMaximumHeight = helpers.getMaximumHeight = function(domNode){\n\t\t\tvar container = domNode.parentNode;\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container.clientHeight;\n\t\t},\n\t\tgetMaximumSize = helpers.getMaximumSize = helpers.getMaximumWidth, // legacy support\n\t\tretinaScale = helpers.retinaScale = function(chart){\n\t\t\tvar ctx = chart.ctx,\n\t\t\t\twidth = chart.canvas.width,\n\t\t\t\theight = chart.canvas.height;\n\n\t\t\tif (window.devicePixelRatio) {\n\t\t\t\tctx.canvas.style.width = width + \"px\";\n\t\t\t\tctx.canvas.style.height = height + \"px\";\n\t\t\t\tctx.canvas.height = height * window.devicePixelRatio;\n\t\t\t\tctx.canvas.width = width * window.devicePixelRatio;\n\t\t\t\tctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n\t\t\t}\n\t\t},\n\t\t//-- Canvas methods\n\t\tclear = helpers.clear = function(chart){\n\t\t\tchart.ctx.clearRect(0,0,chart.width,chart.height);\n\t\t},\n\t\tfontString = helpers.fontString = function(pixelSize,fontStyle,fontFamily){\n\t\t\treturn fontStyle + \" \" + pixelSize+\"px \" + fontFamily;\n\t\t},\n\t\tlongestText = helpers.longestText = function(ctx,font,arrayOfStrings){\n\t\t\tctx.font = font;\n\t\t\tvar longest = 0;\n\t\t\teach(arrayOfStrings,function(string){\n\t\t\t\tvar textWidth = ctx.measureText(string).width;\n\t\t\t\tlongest = (textWidth > longest) ? textWidth : longest;\n\t\t\t});\n\t\t\treturn longest;\n\t\t},\n\t\tdrawRoundedRectangle = helpers.drawRoundedRectangle = function(ctx,x,y,width,height,radius){\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y);\n\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\tctx.lineTo(x, y + radius);\n\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\tctx.closePath();\n\t\t};\n\n\n\t//Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t//Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\tChart.Type = function(data,options,chart){\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\tthis.id = uid();\n\t\t//Add the chart instance to the global namespace\n\t\tChart.instances[this.id] = this;\n\n\t\t// Initialize is always called when a chart type is created\n\t\t// By default it is a no op, but it should be extended\n\t\tif (options.responsive){\n\t\t\tthis.resize();\n\t\t}\n\t\tthis.initialize.call(this,data);\n\t};\n\n\t//Core methods that'll be a part of every chart type\n\textend(Chart.Type.prototype,{\n\t\tinitialize : function(){return this;},\n\t\tclear : function(){\n\t\t\tclear(this.chart);\n\t\t\treturn this;\n\t\t},\n\t\tstop : function(){\n\t\t\t// Stops any current animation loop occuring\n\t\t\tcancelAnimFrame(this.animationFrame);\n\t\t\treturn this;\n\t\t},\n\t\tresize : function(callback){\n\t\t\tthis.stop();\n\t\t\tvar canvas = this.chart.canvas,\n\t\t\t\tnewWidth = getMaximumWidth(this.chart.canvas),\n\t\t\t\tnewHeight = this.options.maintainAspectRatio ? newWidth / this.chart.aspectRatio : getMaximumHeight(this.chart.canvas);\n\n\t\t\tcanvas.width = this.chart.width = newWidth;\n\t\t\tcanvas.height = this.chart.height = newHeight;\n\n\t\t\tretinaScale(this.chart);\n\n\t\t\tif (typeof callback === \"function\"){\n\t\t\t\tcallback.apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\treflow : noop,\n\t\trender : function(reflow){\n\t\t\tif (reflow){\n\t\t\t\tthis.reflow();\n\t\t\t}\n\t\t\tif (this.options.animation && !reflow){\n\t\t\t\thelpers.animationLoop(\n\t\t\t\t\tthis.draw,\n\t\t\t\t\tthis.options.animationSteps,\n\t\t\t\t\tthis.options.animationEasing,\n\t\t\t\t\tthis.options.onAnimationProgress,\n\t\t\t\t\tthis.options.onAnimationComplete,\n\t\t\t\t\tthis\n\t\t\t\t);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.draw();\n\t\t\t\tthis.options.onAnimationComplete.call(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tgenerateLegend : function(){\n\t\t\treturn template(this.options.legendTemplate,this);\n\t\t},\n\t\tdestroy : function(){\n\t\t\tthis.clear();\n\t\t\tunbindEvents(this, this.events);\n\t\t\tvar canvas = this.chart.canvas;\n\n\t\t\t// Reset canvas height/width attributes starts a fresh with the canvas context\n\t\t\tcanvas.width = this.chart.width;\n\t\t\tcanvas.height = this.chart.height;\n\n\t\t\t// < IE9 doesn't support removeProperty\n\t\t\tif (canvas.style.removeProperty) {\n\t\t\t\tcanvas.style.removeProperty('width');\n\t\t\t\tcanvas.style.removeProperty('height');\n\t\t\t} else {\n\t\t\t\tcanvas.style.removeAttribute('width');\n\t\t\t\tcanvas.style.removeAttribute('height');\n\t\t\t}\n\n\t\t\tdelete Chart.instances[this.id];\n\t\t},\n\t\tshowTooltip : function(ChartElements, forceRedraw){\n\t\t\t// Only redraw the chart if we've actually changed what we're hovering on.\n\t\t\tif (typeof this.activeElements === 'undefined') this.activeElements = [];\n\n\t\t\tvar isChanged = (function(Elements){\n\t\t\t\tvar changed = false;\n\n\t\t\t\tif (Elements.length !== this.activeElements.length){\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\n\t\t\t\teach(Elements, function(element, index){\n\t\t\t\t\tif (element !== this.activeElements[index]){\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\t\t\t\treturn changed;\n\t\t\t}).call(this, ChartElements);\n\n\t\t\tif (!isChanged && !forceRedraw){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.activeElements = ChartElements;\n\t\t\t}\n\t\t\tthis.draw();\n\t\t\tif(this.options.customTooltips){\n\t\t\t\tthis.options.customTooltips(false);\n\t\t\t}\n\t\t\tif (ChartElements.length > 0){\n\t\t\t\t// If we have multiple datasets, show a MultiTooltip for all of the data points at that index\n\t\t\t\tif (this.datasets && this.datasets.length > 1) {\n\t\t\t\t\tvar dataArray,\n\t\t\t\t\t\tdataIndex;\n\n\t\t\t\t\tfor (var i = this.datasets.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tdataArray = this.datasets[i].points || this.datasets[i].bars || this.datasets[i].segments;\n\t\t\t\t\t\tdataIndex = indexOf(dataArray, ChartElements[0]);\n\t\t\t\t\t\tif (dataIndex !== -1){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar tooltipLabels = [],\n\t\t\t\t\t\ttooltipColors = [],\n\t\t\t\t\t\tmedianPosition = (function(index) {\n\n\t\t\t\t\t\t\t// Get all the points at that particular index\n\t\t\t\t\t\t\tvar Elements = [],\n\t\t\t\t\t\t\t\tdataCollection,\n\t\t\t\t\t\t\t\txPositions = [],\n\t\t\t\t\t\t\t\tyPositions = [],\n\t\t\t\t\t\t\t\txMax,\n\t\t\t\t\t\t\t\tyMax,\n\t\t\t\t\t\t\t\txMin,\n\t\t\t\t\t\t\t\tyMin;\n\t\t\t\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\t\t\t\tdataCollection = dataset.points || dataset.bars || dataset.segments;\n\t\t\t\t\t\t\t\tif (dataCollection[dataIndex] && dataCollection[dataIndex].hasValue()){\n\t\t\t\t\t\t\t\t\tElements.push(dataCollection[dataIndex]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\thelpers.each(Elements, function(element) {\n\t\t\t\t\t\t\t\txPositions.push(element.x);\n\t\t\t\t\t\t\t\tyPositions.push(element.y);\n\n\n\t\t\t\t\t\t\t\t//Include any colour information about the element\n\t\t\t\t\t\t\t\ttooltipLabels.push(helpers.template(this.options.multiTooltipTemplate, element));\n\t\t\t\t\t\t\t\ttooltipColors.push({\n\t\t\t\t\t\t\t\t\tfill: element._saved.fillColor || element.fillColor,\n\t\t\t\t\t\t\t\t\tstroke: element._saved.strokeColor || element.strokeColor\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}, this);\n\n\t\t\t\t\t\t\tyMin = min(yPositions);\n\t\t\t\t\t\t\tyMax = max(yPositions);\n\n\t\t\t\t\t\t\txMin = min(xPositions);\n\t\t\t\t\t\t\txMax = max(xPositions);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tx: (xMin > this.chart.width/2) ? xMin : xMax,\n\t\t\t\t\t\t\t\ty: (yMin + yMax)/2\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}).call(this, dataIndex);\n\n\t\t\t\t\tnew Chart.MultiTooltip({\n\t\t\t\t\t\tx: medianPosition.x,\n\t\t\t\t\t\ty: medianPosition.y,\n\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\txOffset: this.options.tooltipXOffset,\n\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\ttitleTextColor: this.options.tooltipTitleFontColor,\n\t\t\t\t\t\ttitleFontFamily: this.options.tooltipTitleFontFamily,\n\t\t\t\t\t\ttitleFontStyle: this.options.tooltipTitleFontStyle,\n\t\t\t\t\t\ttitleFontSize: this.options.tooltipTitleFontSize,\n\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\tlabels: tooltipLabels,\n\t\t\t\t\t\tlegendColors: tooltipColors,\n\t\t\t\t\t\tlegendColorBackground : this.options.multiTooltipKeyBackground,\n\t\t\t\t\t\ttitle: ChartElements[0].label,\n\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\tctx: this.chart.ctx,\n\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t}).draw();\n\n\t\t\t\t} else {\n\t\t\t\t\teach(ChartElements, function(Element) {\n\t\t\t\t\t\tvar tooltipPosition = Element.tooltipPosition();\n\t\t\t\t\t\tnew Chart.Tooltip({\n\t\t\t\t\t\t\tx: Math.round(tooltipPosition.x),\n\t\t\t\t\t\t\ty: Math.round(tooltipPosition.y),\n\t\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\t\tcaretHeight: this.options.tooltipCaretSize,\n\t\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\t\ttext: template(this.options.tooltipTemplate, Element),\n\t\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t\t}).draw();\n\t\t\t\t\t}, this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\ttoBase64Image : function(){\n\t\t\treturn this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);\n\t\t}\n\t});\n\n\tChart.Type.extend = function(extensions){\n\n\t\tvar parent = this;\n\n\t\tvar ChartType = function(){\n\t\t\treturn parent.apply(this,arguments);\n\t\t};\n\n\t\t//Copy the prototype object of the this class\n\t\tChartType.prototype = clone(parent.prototype);\n\t\t//Now overwrite some of the properties in the base class with the new extensions\n\t\textend(ChartType.prototype, extensions);\n\n\t\tChartType.extend = Chart.Type.extend;\n\n\t\tif (extensions.name || parent.prototype.name){\n\n\t\t\tvar chartName = extensions.name || parent.prototype.name;\n\t\t\t//Assign any potential default values of the new chart type\n\n\t\t\t//If none are defined, we'll use a clone of the chart type this is being extended from.\n\t\t\t//I.e. if we extend a line chart, we'll use the defaults from the line chart if our new chart\n\t\t\t//doesn't define some defaults of their own.\n\n\t\t\tvar baseDefaults = (Chart.defaults[parent.prototype.name]) ? clone(Chart.defaults[parent.prototype.name]) : {};\n\n\t\t\tChart.defaults[chartName] = extend(baseDefaults,extensions.defaults);\n\n\t\t\tChart.types[chartName] = ChartType;\n\n\t\t\t//Register this new chart type in the Chart prototype\n\t\t\tChart.prototype[chartName] = function(data,options){\n\t\t\t\tvar config = merge(Chart.defaults.global, Chart.defaults[chartName], options || {});\n\t\t\t\treturn new ChartType(data,config,this);\n\t\t\t};\n\t\t} else{\n\t\t\twarn(\"Name not provided for this chart, so it hasn't been registered\");\n\t\t}\n\t\treturn parent;\n\t};\n\n\tChart.Element = function(configuration){\n\t\textend(this,configuration);\n\t\tthis.initialize.apply(this,arguments);\n\t\tthis.save();\n\t};\n\textend(Chart.Element.prototype,{\n\t\tinitialize : function(){},\n\t\trestore : function(props){\n\t\t\tif (!props){\n\t\t\t\textend(this,this._saved);\n\t\t\t} else {\n\t\t\t\teach(props,function(key){\n\t\t\t\t\tthis[key] = this._saved[key];\n\t\t\t\t},this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tsave : function(){\n\t\t\tthis._saved = clone(this);\n\t\t\tdelete this._saved._saved;\n\t\t\treturn this;\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\teach(newProps,function(value,key){\n\t\t\t\tthis._saved[key] = this[key];\n\t\t\t\tthis[key] = value;\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttransition : function(props,ease){\n\t\t\teach(props,function(value,key){\n\t\t\t\tthis[key] = ((value - this._saved[key]) * ease) + this._saved[key];\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\treturn {\n\t\t\t\tx : this.x,\n\t\t\t\ty : this.y\n\t\t\t};\n\t\t},\n\t\thasValue: function(){\n\t\t\treturn isNumber(this.value);\n\t\t}\n\t});\n\n\tChart.Element.extend = inherits;\n\n\n\tChart.Point = Chart.Element.extend({\n\t\tdisplay: true,\n\t\tinRange: function(chartX,chartY){\n\t\t\tvar hitDetectionRange = this.hitDetectionRadius + this.radius;\n\t\t\treturn ((Math.pow(chartX-this.x, 2)+Math.pow(chartY-this.y, 2)) < Math.pow(hitDetectionRange,2));\n\t\t},\n\t\tdraw : function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\tctx.arc(this.x, this.y, this.radius, 0, Math.PI*2);\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t\tctx.fill();\n\t\t\t\tctx.stroke();\n\t\t\t}\n\n\n\t\t\t//Quick debug for bezier curve splining\n\t\t\t//Highlights control points and the line between them.\n\t\t\t//Handy for dev - stripped in the min version.\n\n\t\t\t// ctx.save();\n\t\t\t// ctx.fillStyle = \"black\";\n\t\t\t// ctx.strokeStyle = \"black\"\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.inner.x,this.controlPoints.inner.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.outer.x,this.controlPoints.outer.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.moveTo(this.controlPoints.inner.x,this.controlPoints.inner.y);\n\t\t\t// ctx.lineTo(this.x, this.y);\n\t\t\t// ctx.lineTo(this.controlPoints.outer.x,this.controlPoints.outer.y);\n\t\t\t// ctx.stroke();\n\n\t\t\t// ctx.restore();\n\n\n\n\t\t}\n\t});\n\n\tChart.Arc = Chart.Element.extend({\n\t\tinRange : function(chartX,chartY){\n\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(this, {\n\t\t\t\tx: chartX,\n\t\t\t\ty: chartY\n\t\t\t});\n\n\t\t\t//Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (pointRelativePosition.angle >= this.startAngle && pointRelativePosition.angle <= this.endAngle),\n\t\t\t\twithinRadius = (pointRelativePosition.distance >= this.innerRadius && pointRelativePosition.distance <= this.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t\t//Ensure within the outside of the arc centre, but inside arc outer\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\tvar centreAngle = this.startAngle + ((this.endAngle - this.startAngle) / 2),\n\t\t\t\trangeFromCentre = (this.outerRadius - this.innerRadius) / 2 + this.innerRadius;\n\t\t\treturn {\n\t\t\t\tx : this.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\t\ty : this.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t\t};\n\t\t},\n\t\tdraw : function(animationPercent){\n\n\t\t\tvar easingDecimal = animationPercent || 1;\n\n\t\t\tvar ctx = this.ctx;\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.arc(this.x, this.y, this.outerRadius, this.startAngle, this.endAngle);\n\n\t\t\tctx.arc(this.x, this.y, this.innerRadius, this.endAngle, this.startAngle, true);\n\n\t\t\tctx.closePath();\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\tctx.fill();\n\t\t\tctx.lineJoin = 'bevel';\n\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Rectangle = Chart.Element.extend({\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\thalfWidth = this.width/2,\n\t\t\t\tleftX = this.x - halfWidth,\n\t\t\t\trightX = this.x + halfWidth,\n\t\t\t\ttop = this.base - (this.base - this.y),\n\t\t\t\thalfStroke = this.strokeWidth / 2;\n\n\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\tif (this.showStroke){\n\t\t\t\tleftX += halfStroke;\n\t\t\t\trightX -= halfStroke;\n\t\t\t\ttop += halfStroke;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.fillStyle = this.fillColor;\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t// It'd be nice to keep this class totally generic to any rectangle\n\t\t\t// and simply specify which border to miss out.\n\t\t\tctx.moveTo(leftX, this.base);\n\t\t\tctx.lineTo(leftX, top);\n\t\t\tctx.lineTo(rightX, top);\n\t\t\tctx.lineTo(rightX, this.base);\n\t\t\tctx.fill();\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\theight : function(){\n\t\t\treturn this.base - this.y;\n\t\t},\n\t\tinRange : function(chartX,chartY){\n\t\t\treturn (chartX >= this.x - this.width/2 && chartX <= this.x + this.width/2) && (chartY >= this.y && chartY <= this.base);\n\t\t}\n\t});\n\n\tChart.Tooltip = Chart.Element.extend({\n\t\tdraw : function(){\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.xAlign = \"center\";\n\t\t\tthis.yAlign = \"above\";\n\n\t\t\t//Distance between the actual element.y position and the start of the tooltip caret\n\t\t\tvar caretPadding = this.caretPadding = 2;\n\n\t\t\tvar tooltipWidth = ctx.measureText(this.text).width + 2*this.xPadding,\n\t\t\t\ttooltipRectHeight = this.fontSize + 2*this.yPadding,\n\t\t\t\ttooltipHeight = tooltipRectHeight + this.caretHeight + caretPadding;\n\n\t\t\tif (this.x + tooltipWidth/2 >this.chart.width){\n\t\t\t\tthis.xAlign = \"left\";\n\t\t\t} else if (this.x - tooltipWidth/2 < 0){\n\t\t\t\tthis.xAlign = \"right\";\n\t\t\t}\n\n\t\t\tif (this.y - tooltipHeight < 0){\n\t\t\t\tthis.yAlign = \"below\";\n\t\t\t}\n\n\n\t\t\tvar tooltipX = this.x - tooltipWidth/2,\n\t\t\t\ttooltipY = this.y - tooltipHeight;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tswitch(this.yAlign)\n\t\t\t\t{\n\t\t\t\tcase \"above\":\n\t\t\t\t\t//Draw a caret above the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x,this.y - caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"below\":\n\t\t\t\t\ttooltipY = this.y + caretPadding + this.caretHeight;\n\t\t\t\t\t//Draw a caret below the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x, this.y + caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch(this.xAlign)\n\t\t\t\t{\n\t\t\t\tcase \"left\":\n\t\t\t\t\ttooltipX = this.x - tooltipWidth + (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\ttooltipX = this.x - (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdrawRoundedRectangle(ctx,tooltipX,tooltipY,tooltipWidth,tooltipRectHeight,this.cornerRadius);\n\n\t\t\t\tctx.fill();\n\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.textAlign = \"center\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillText(this.text, tooltipX + tooltipWidth/2, tooltipY + tooltipRectHeight/2);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.MultiTooltip = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.titleFont = fontString(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);\n\n\t\t\tthis.height = (this.labels.length * this.fontSize) + ((this.labels.length-1) * (this.fontSize/2)) + (this.yPadding*2) + this.titleFontSize *1.5;\n\n\t\t\tthis.ctx.font = this.titleFont;\n\n\t\t\tvar titleWidth = this.ctx.measureText(this.title).width,\n\t\t\t\t//Label has a legend square as well so account for this.\n\t\t\t\tlabelWidth = longestText(this.ctx,this.font,this.labels) + this.fontSize + 3,\n\t\t\t\tlongestTextWidth = max([labelWidth,titleWidth]);\n\n\t\t\tthis.width = longestTextWidth + (this.xPadding*2);\n\n\n\t\t\tvar halfHeight = this.height/2;\n\n\t\t\t//Check to ensure the height will fit on the canvas\n\t\t\tif (this.y - halfHeight < 0 ){\n\t\t\t\tthis.y = halfHeight;\n\t\t\t} else if (this.y + halfHeight > this.chart.height){\n\t\t\t\tthis.y = this.chart.height - halfHeight;\n\t\t\t}\n\n\t\t\t//Decide whether to align left or right based on position on canvas\n\t\t\tif (this.x > this.chart.width/2){\n\t\t\t\tthis.x -= this.xOffset + this.width;\n\t\t\t} else {\n\t\t\t\tthis.x += this.xOffset;\n\t\t\t}\n\n\n\t\t},\n\t\tgetLineHeight : function(index){\n\t\t\tvar baseLineHeight = this.y - (this.height/2) + this.yPadding,\n\t\t\t\tafterTitleIndex = index-1;\n\n\t\t\t//If the index is zero, we're getting the title\n\t\t\tif (index === 0){\n\t\t\t\treturn baseLineHeight + this.titleFontSize/2;\n\t\t\t} else{\n\t\t\t\treturn baseLineHeight + ((this.fontSize*1.5*afterTitleIndex) + this.fontSize/2) + this.titleFontSize * 1.5;\n\t\t\t}\n\n\t\t},\n\t\tdraw : function(){\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tdrawRoundedRectangle(this.ctx,this.x,this.y - this.height/2,this.width,this.height,this.cornerRadius);\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.fillStyle = this.fillColor;\n\t\t\t\tctx.fill();\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.textAlign = \"left\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillStyle = this.titleTextColor;\n\t\t\t\tctx.font = this.titleFont;\n\n\t\t\t\tctx.fillText(this.title,this.x + this.xPadding, this.getLineHeight(0));\n\n\t\t\t\tctx.font = this.font;\n\t\t\t\thelpers.each(this.labels,function(label,index){\n\t\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\t\tctx.fillText(label,this.x + this.xPadding + this.fontSize + 3, this.getLineHeight(index + 1));\n\n\t\t\t\t\t//A bit gnarly, but clearing this rectangle breaks when using explorercanvas (clears whole canvas)\n\t\t\t\t\t//ctx.clearRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\t\t\t\t\t//Instead we'll make a white filled block to put the legendColour palette over.\n\n\t\t\t\t\tctx.fillStyle = this.legendColorBackground;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\t\t\t\t\tctx.fillStyle = this.legendColors[index].fill;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\n\t\t\t\t},this);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Scale = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.fit();\n\t\t},\n\t\tbuildYLabels : function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t\tthis.yLabelWidth = (this.display && this.showLabels) ? longestText(this.ctx,this.font,this.yLabels) : 0;\n\t\t},\n\t\taddXLabel : function(label){\n\t\t\tthis.xLabels.push(label);\n\t\t\tthis.valuesCount++;\n\t\t\tthis.fit();\n\t\t},\n\t\tremoveXLabel : function(){\n\t\t\tthis.xLabels.shift();\n\t\t\tthis.valuesCount--;\n\t\t\tthis.fit();\n\t\t},\n\t\t// Fitting loop to rotate x Labels and figure out what fits there, and also calculate how many Y steps to use\n\t\tfit: function(){\n\t\t\t// First we need the width of the yLabels, assuming the xLabels aren't rotated\n\n\t\t\t// To do that we need the base line at the top and base of the chart, assuming there is no x label rotation\n\t\t\tthis.startPoint = (this.display) ? this.fontSize : 0;\n\t\t\tthis.endPoint = (this.display) ? this.height - (this.fontSize * 1.5) - 5 : this.height; // -5 to pad labels\n\n\t\t\t// Apply padding settings to the start and end point.\n\t\t\tthis.startPoint += this.padding;\n\t\t\tthis.endPoint -= this.padding;\n\n\t\t\t// Cache the starting height, so can determine if we need to recalculate the scale yAxis\n\t\t\tvar cachedHeight = this.endPoint - this.startPoint,\n\t\t\t\tcachedYLabelWidth;\n\n\t\t\t// Build the current yLabels so we have an idea of what size they'll be to start\n\t\t\t/*\n\t\t\t *\tThis sets what is returned from calculateScaleRange as static properties of this class:\n\t\t\t *\n\t\t\t\tthis.steps;\n\t\t\t\tthis.stepValue;\n\t\t\t\tthis.min;\n\t\t\t\tthis.max;\n\t\t\t *\n\t\t\t */\n\t\t\tthis.calculateYRange(cachedHeight);\n\n\t\t\t// With these properties set we can now build the array of yLabels\n\t\t\t// and also the width of the largest yLabel\n\t\t\tthis.buildYLabels();\n\n\t\t\tthis.calculateXLabelRotation();\n\n\t\t\twhile((cachedHeight > this.endPoint - this.startPoint)){\n\t\t\t\tcachedHeight = this.endPoint - this.startPoint;\n\t\t\t\tcachedYLabelWidth = this.yLabelWidth;\n\n\t\t\t\tthis.calculateYRange(cachedHeight);\n\t\t\t\tthis.buildYLabels();\n\n\t\t\t\t// Only go through the xLabel loop again if the yLabel width has changed\n\t\t\t\tif (cachedYLabelWidth < this.yLabelWidth){\n\t\t\t\t\tthis.calculateXLabelRotation();\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\t\tcalculateXLabelRotation : function(){\n\t\t\t//Get the width of each grid by calculating the difference\n\t\t\t//between x offsets between 0 and 1.\n\n\t\t\tthis.ctx.font = this.font;\n\n\t\t\tvar firstWidth = this.ctx.measureText(this.xLabels[0]).width,\n\t\t\t\tlastWidth = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width,\n\t\t\t\tfirstRotated,\n\t\t\t\tlastRotated;\n\n\n\t\t\tthis.xScalePaddingRight = lastWidth/2 + 3;\n\t\t\tthis.xScalePaddingLeft = (firstWidth/2 > this.yLabelWidth + 10) ? firstWidth/2 : this.yLabelWidth + 10;\n\n\t\t\tthis.xLabelRotation = 0;\n\t\t\tif (this.display){\n\t\t\t\tvar originalLabelWidth = longestText(this.ctx,this.font,this.xLabels),\n\t\t\t\t\tcosRotation,\n\t\t\t\t\tfirstRotatedWidth;\n\t\t\t\tthis.xLabelWidth = originalLabelWidth;\n\t\t\t\t//Allow 3 pixels x2 padding either side for label readability\n\t\t\t\tvar xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;\n\n\t\t\t\t//Max label rotate should be 90 - also act as a loop counter\n\t\t\t\twhile ((this.xLabelWidth > xGridWidth && this.xLabelRotation === 0) || (this.xLabelWidth > xGridWidth && this.xLabelRotation <= 90 && this.xLabelRotation > 0)){\n\t\t\t\t\tcosRotation = Math.cos(toRadians(this.xLabelRotation));\n\n\t\t\t\t\tfirstRotated = cosRotation * firstWidth;\n\t\t\t\t\tlastRotated = cosRotation * lastWidth;\n\n\t\t\t\t\t// We're right aligning the text now.\n\t\t\t\t\tif (firstRotated + this.fontSize / 2 > this.yLabelWidth + 8){\n\t\t\t\t\t\tthis.xScalePaddingLeft = firstRotated + this.fontSize / 2;\n\t\t\t\t\t}\n\t\t\t\t\tthis.xScalePaddingRight = this.fontSize/2;\n\n\n\t\t\t\t\tthis.xLabelRotation++;\n\t\t\t\t\tthis.xLabelWidth = cosRotation * originalLabelWidth;\n\n\t\t\t\t}\n\t\t\t\tif (this.xLabelRotation > 0){\n\t\t\t\t\tthis.endPoint -= Math.sin(toRadians(this.xLabelRotation))*originalLabelWidth + 3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.xLabelWidth = 0;\n\t\t\t\tthis.xScalePaddingRight = this.padding;\n\t\t\t\tthis.xScalePaddingLeft = this.padding;\n\t\t\t}\n\n\t\t},\n\t\t// Needs to be overidden in each Chart type\n\t\t// Otherwise we need to pass all the data into the scale class\n\t\tcalculateYRange: noop,\n\t\tdrawingArea: function(){\n\t\t\treturn this.startPoint - this.endPoint;\n\t\t},\n\t\tcalculateY : function(value){\n\t\t\tvar scalingFactor = this.drawingArea() / (this.min - this.max);\n\t\t\treturn this.endPoint - (scalingFactor * (value - this.min));\n\t\t},\n\t\tcalculateX : function(index){\n\t\t\tvar isRotated = (this.xLabelRotation > 0),\n\t\t\t\t// innerWidth = (this.offsetGridLines) ? this.width - offsetLeft - this.padding : this.width - (offsetLeft + halfLabelWidth * 2) - this.padding,\n\t\t\t\tinnerWidth = this.width - (this.xScalePaddingLeft + this.xScalePaddingRight),\n\t\t\t\tvalueWidth = innerWidth/Math.max((this.valuesCount - ((this.offsetGridLines) ? 0 : 1)), 1),\n\t\t\t\tvalueOffset = (valueWidth * index) + this.xScalePaddingLeft;\n\n\t\t\tif (this.offsetGridLines){\n\t\t\t\tvalueOffset += (valueWidth/2);\n\t\t\t}\n\n\t\t\treturn Math.round(valueOffset);\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\thelpers.extend(this, newProps);\n\t\t\tthis.fit();\n\t\t},\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\tyLabelGap = (this.endPoint - this.startPoint) / this.steps,\n\t\t\t\txStart = Math.round(this.xScalePaddingLeft);\n\t\t\tif (this.display){\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.font = this.font;\n\t\t\t\teach(this.yLabels,function(labelString,index){\n\t\t\t\t\tvar yLabelCenter = this.endPoint - (yLabelGap * index),\n\t\t\t\t\t\tlinePositionY = Math.round(yLabelCenter),\n\t\t\t\t\t\tdrawHorizontalLine = this.showHorizontalLines;\n\n\t\t\t\t\tctx.textAlign = \"right\";\n\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\tif (this.showLabels){\n\t\t\t\t\t\tctx.fillText(labelString,xStart - 10,yLabelCenter);\n\t\t\t\t\t}\n\n\t\t\t\t\t// This is X axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawHorizontalLine){\n\t\t\t\t\t\tdrawHorizontalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawHorizontalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tlinePositionY += helpers.aliasPixel(ctx.lineWidth);\n\n\t\t\t\t\tif(drawHorizontalLine){\n\t\t\t\t\t\tctx.moveTo(xStart, linePositionY);\n\t\t\t\t\t\tctx.lineTo(this.width, linePositionY);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(xStart - 5, linePositionY);\n\t\t\t\t\tctx.lineTo(xStart, linePositionY);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t},this);\n\n\t\t\t\teach(this.xLabels,function(label,index){\n\t\t\t\t\tvar xPos = this.calculateX(index) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\t// Check to see if line/bar here and decide where to place the line\n\t\t\t\t\t\tlinePos = this.calculateX(index - (this.offsetGridLines ? 0.5 : 0)) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\tisRotated = (this.xLabelRotation > 0),\n\t\t\t\t\t\tdrawVerticalLine = this.showVerticalLines;\n\n\t\t\t\t\t// This is Y axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawVerticalLine){\n\t\t\t\t\t\tdrawVerticalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\t\tctx.lineTo(linePos,this.startPoint - 3);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\n\n\t\t\t\t\t// Small lines at the bottom of the base grid line\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\tctx.lineTo(linePos,this.endPoint + 5);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.translate(xPos,(isRotated) ? this.endPoint + 12 : this.endPoint + 8);\n\t\t\t\t\tctx.rotate(toRadians(this.xLabelRotation)*-1);\n\t\t\t\t\tctx.font = this.font;\n\t\t\t\t\tctx.textAlign = (isRotated) ? \"right\" : \"center\";\n\t\t\t\t\tctx.textBaseline = (isRotated) ? \"middle\" : \"top\";\n\t\t\t\t\tctx.fillText(label, 0, 0);\n\t\t\t\t\tctx.restore();\n\t\t\t\t},this);\n\n\t\t\t}\n\t\t}\n\n\t});\n\n\tChart.RadialScale = Chart.Element.extend({\n\t\tinitialize: function(){\n\t\t\tthis.size = min([this.height, this.width]);\n\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t},\n\t\tcalculateCenterOffset: function(value){\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = this.drawingArea / (this.max - this.min);\n\n\t\t\treturn (value - this.min) * scalingFactor;\n\t\t},\n\t\tupdate : function(){\n\t\t\tif (!this.lineArc){\n\t\t\t\tthis.setScaleSize();\n\t\t\t} else {\n\t\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t\t}\n\t\t\tthis.buildYLabels();\n\t\t},\n\t\tbuildYLabels: function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t},\n\t\tgetCircumference : function(){\n\t\t\treturn ((Math.PI*2) / this.valuesCount);\n\t\t},\n\t\tsetScaleSize: function(){\n\t\t\t/*\n\t\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t\t *\n\t\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t\t *\n\t\t\t * Solution:\n\t\t\t *\n\t\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t\t * at each index we check if the text overlaps.\n\t\t\t *\n\t\t\t * Where it does, we store that angle and that index.\n\t\t\t *\n\t\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t\t * from the shape radius to move the point inwards by that x.\n\t\t\t *\n\t\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t\t * along with labels.\n\t\t\t *\n\t\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t\t *\n\t\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t\t * and position it in the most space efficient manner\n\t\t\t *\n\t\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t\t */\n\n\n\t\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\t\tvar largestPossibleRadius = min([(this.height/2 - this.pointLabelFontSize - 5), this.width/2]),\n\t\t\t\tpointPosition,\n\t\t\t\ti,\n\t\t\t\ttextWidth,\n\t\t\t\thalfTextWidth,\n\t\t\t\tfurthestRight = this.width,\n\t\t\t\tfurthestRightIndex,\n\t\t\t\tfurthestRightAngle,\n\t\t\t\tfurthestLeft = 0,\n\t\t\t\tfurthestLeftIndex,\n\t\t\t\tfurthestLeftAngle,\n\t\t\t\txProtrusionLeft,\n\t\t\t\txProtrusionRight,\n\t\t\t\tradiusReductionRight,\n\t\t\t\tradiusReductionLeft,\n\t\t\t\tmaxWidthRadius;\n\t\t\tthis.ctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\tfor (i=0;i<this.valuesCount;i++){\n\t\t\t\t// 5px to space the text slightly out - similar to what we do in the draw function.\n\t\t\t\tpointPosition = this.getPointPosition(i, largestPossibleRadius);\n\t\t\t\ttextWidth = this.ctx.measureText(template(this.templateString, { value: this.labels[i] })).width + 5;\n\t\t\t\tif (i === 0 || i === this.valuesCount/2){\n\t\t\t\t\t// If we're at index zero, or exactly the middle, we're at exactly the top/bottom\n\t\t\t\t\t// of the radar chart, so text will be aligned centrally, so we'll half it and compare\n\t\t\t\t\t// w/left and right text sizes\n\t\t\t\t\thalfTextWidth = textWidth/2;\n\t\t\t\t\tif (pointPosition.x + halfTextWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + halfTextWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (pointPosition.x - halfTextWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - halfTextWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i < this.valuesCount/2) {\n\t\t\t\t\t// Less than half the values means we'll left align the text\n\t\t\t\t\tif (pointPosition.x + textWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + textWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i > this.valuesCount/2){\n\t\t\t\t\t// More than half the values means we'll right align the text\n\t\t\t\t\tif (pointPosition.x - textWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - textWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txProtrusionLeft = furthestLeft;\n\n\t\t\txProtrusionRight = Math.ceil(furthestRight - this.width);\n\n\t\t\tfurthestRightAngle = this.getIndexAngle(furthestRightIndex);\n\n\t\t\tfurthestLeftAngle = this.getIndexAngle(furthestLeftIndex);\n\n\t\t\tradiusReductionRight = xProtrusionRight / Math.sin(furthestRightAngle + Math.PI/2);\n\n\t\t\tradiusReductionLeft = xProtrusionLeft / Math.sin(furthestLeftAngle + Math.PI/2);\n\n\t\t\t// Ensure we actually need to reduce the size of the chart\n\t\t\tradiusReductionRight = (isNumber(radiusReductionRight)) ? radiusReductionRight : 0;\n\t\t\tradiusReductionLeft = (isNumber(radiusReductionLeft)) ? radiusReductionLeft : 0;\n\n\t\t\tthis.drawingArea = largestPossibleRadius - (radiusReductionLeft + radiusReductionRight)/2;\n\n\t\t\t//this.drawingArea = min([maxWidthRadius, (this.height - (2 * (this.pointLabelFontSize + 5)))/2])\n\t\t\tthis.setCenterPoint(radiusReductionLeft, radiusReductionRight);\n\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement){\n\n\t\t\tvar maxRight = this.width - rightMovement - this.drawingArea,\n\t\t\t\tmaxLeft = leftMovement + this.drawingArea;\n\n\t\t\tthis.xCenter = (maxLeft + maxRight)/2;\n\t\t\t// Always vertically in the centre as the text height doesn't change\n\t\t\tthis.yCenter = (this.height/2);\n\t\t},\n\n\t\tgetIndexAngle : function(index){\n\t\t\tvar angleMultiplier = (Math.PI * 2) / this.valuesCount;\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\n\t\t\treturn index * angleMultiplier - (Math.PI/2);\n\t\t},\n\t\tgetPointPosition : function(index, distanceFromCenter){\n\t\t\tvar thisAngle = this.getIndexAngle(index);\n\t\t\treturn {\n\t\t\t\tx : (Math.cos(thisAngle) * distanceFromCenter) + this.xCenter,\n\t\t\t\ty : (Math.sin(thisAngle) * distanceFromCenter) + this.yCenter\n\t\t\t};\n\t\t},\n\t\tdraw: function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\teach(this.yLabels, function(label, index){\n\t\t\t\t\t// Don't draw a centre value\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\tvar yCenterOffset = index * (this.drawingArea/this.steps),\n\t\t\t\t\t\t\tyHeight = this.yCenter - yCenterOffset,\n\t\t\t\t\t\t\tpointPosition;\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (this.lineWidth > 0){\n\t\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\n\t\t\t\t\t\t\tif(this.lineArc){\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tctx.arc(this.xCenter, this.yCenter, yCenterOffset, 0, Math.PI*2);\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t} else{\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tfor (var i=0;i<this.valuesCount;i++)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpointPosition = this.getPointPosition(i, this.calculateCenterOffset(this.min + (index * this.stepValue)));\n\t\t\t\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\t\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.showLabels){\n\t\t\t\t\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\t\t\t\t\t\t\tif (this.showLabelBackdrop){\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = this.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\tthis.xCenter - labelWidth/2 - this.backdropPaddingX,\n\t\t\t\t\t\t\t\t\tyHeight - this.fontSize/2 - this.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + this.backdropPaddingX*2,\n\t\t\t\t\t\t\t\t\tthis.fontSize + this.backdropPaddingY*2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\t\t\tctx.fillStyle = this.fontColor;\n\t\t\t\t\t\t\tctx.fillText(label, this.xCenter, yHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tif (!this.lineArc){\n\t\t\t\t\tctx.lineWidth = this.angleLineWidth;\n\t\t\t\t\tctx.strokeStyle = this.angleLineColor;\n\t\t\t\t\tfor (var i = this.valuesCount - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (this.angleLineWidth > 0){\n\t\t\t\t\t\t\tvar outerPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max));\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(this.xCenter, this.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\t\t\tvar pointLabelPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max) + 5);\n\t\t\t\t\t\tctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\t\t\t\tctx.fillStyle = this.pointLabelFontColor;\n\n\t\t\t\t\t\tvar labelsCount = this.labels.length,\n\t\t\t\t\t\t\thalfLabelsCount = this.labels.length/2,\n\t\t\t\t\t\t\tquarterLabelsCount = halfLabelsCount/2,\n\t\t\t\t\t\t\tupperHalf = (i < quarterLabelsCount || i > labelsCount - quarterLabelsCount),\n\t\t\t\t\t\t\texactQuarter = (i === quarterLabelsCount || i === labelsCount - quarterLabelsCount);\n\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if(i === halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if (i < halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set the correct text baseline based on outer positioning\n\t\t\t\t\t\tif (exactQuarter){\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t} else if (upperHalf){\n\t\t\t\t\t\t\tctx.textBaseline = 'bottom';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.fillText(this.labels[i], pointLabelPosition.x, pointLabelPosition.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Attach global event to resize each chart instance when the browser resizes\n\thelpers.addEvent(window, \"resize\", (function(){\n\t\t// Basic debounce of resize function so it doesn't hurt performance when resizing browser.\n\t\tvar timeout;\n\t\treturn function(){\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(function(){\n\t\t\t\teach(Chart.instances,function(instance){\n\t\t\t\t\t// If the responsive flag is set in the chart instance config\n\t\t\t\t\t// Cascade the resize event down to the chart.\n\t\t\t\t\tif (instance.options.responsive){\n\t\t\t\t\t\tinstance.resize(instance.render, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, 50);\n\t\t};\n\t})());\n\n\n\tif (amd) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){\n\t\t\treturn Chart;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = Chart;\n\t}\n\n\troot.Chart = Chart;\n\n\tChart.noConflict = function(){\n\t\troot.Chart = previous;\n\t\treturn Chart;\n\t};\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\tscaleBeginAtZero : true,\n\n\t\t//Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - If there is a stroke on each bar\n\t\tbarShowStroke : true,\n\n\t\t//Number - Pixel width of the bar stroke\n\t\tbarStrokeWidth : 2,\n\n\t\t//Number - Spacing between each of the X value sets\n\t\tbarValueSpacing : 5,\n\n\t\t//Number - Spacing between data sets within X values\n\t\tbarDatasetSpacing : 1,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].fillColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Bar\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize: function(data){\n\n\t\t\t//Expose options as a scope variable here so we can access it in the ScaleClass\n\t\t\tvar options = this.options;\n\n\t\t\tthis.ScaleClass = Chart.Scale.extend({\n\t\t\t\toffsetGridLines : true,\n\t\t\t\tcalculateBarX : function(datasetCount, datasetIndex, barIndex){\n\t\t\t\t\t//Reusable method for calculating the xPosition of a given bar based on datasetIndex & width of the bar\n\t\t\t\t\tvar xWidth = this.calculateBaseWidth(),\n\t\t\t\t\t\txAbsolute = this.calculateX(barIndex) - (xWidth/2),\n\t\t\t\t\t\tbarWidth = this.calculateBarWidth(datasetCount);\n\n\t\t\t\t\treturn xAbsolute + (barWidth * datasetIndex) + (datasetIndex * options.barDatasetSpacing) + barWidth/2;\n\t\t\t\t},\n\t\t\t\tcalculateBaseWidth : function(){\n\t\t\t\t\treturn (this.calculateX(1) - this.calculateX(0)) - (2*options.barValueSpacing);\n\t\t\t\t},\n\t\t\t\tcalculateBarWidth : function(datasetCount){\n\t\t\t\t\t//The padding between datasets is to the right of each bar, providing that there are more than 1 dataset\n\t\t\t\t\tvar baseWidth = this.calculateBaseWidth() - ((datasetCount - 1) * options.barDatasetSpacing);\n\n\t\t\t\t\treturn (baseWidth / datasetCount);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeBars = (evt.type !== 'mouseout') ? this.getBarsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachBars(function(bar){\n\t\t\t\t\t\tbar.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeBars, function(activeBar){\n\t\t\t\t\t\tactiveBar.fillColor = activeBar.highlightFill;\n\t\t\t\t\t\tactiveBar.strokeColor = activeBar.highlightStroke;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeBars);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.BarClass = Chart.Rectangle.extend({\n\t\t\t\tstrokeWidth : this.options.barStrokeWidth,\n\t\t\t\tshowStroke : this.options.barShowStroke,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset,datasetIndex){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tbars : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.bars.push(new this.BarClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\t\thighlightFill : dataset.highlightFill || dataset.fillColor,\n\t\t\t\t\t\thighlightStroke : dataset.highlightStroke || dataset.strokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.buildScale(data.labels);\n\n\t\t\tthis.BarClass.prototype.base = this.scale.endPoint;\n\n\t\t\tthis.eachBars(function(bar, index, datasetIndex){\n\t\t\t\thelpers.extend(bar, {\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t});\n\t\t\t\tbar.save();\n\t\t\t}, this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\n\t\t\tthis.eachBars(function(bar){\n\t\t\t\tbar.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachBars : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset, datasetIndex){\n\t\t\t\thelpers.each(dataset.bars, callback, this, datasetIndex);\n\t\t\t},this);\n\t\t},\n\t\tgetBarsAtEvent : function(e){\n\t\t\tvar barsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e),\n\t\t\t\tdatasetIterator = function(dataset){\n\t\t\t\t\tbarsArray.push(dataset.bars[barIndex]);\n\t\t\t\t},\n\t\t\t\tbarIndex;\n\n\t\t\tfor (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {\n\t\t\t\tfor (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {\n\t\t\t\t\tif (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){\n\t\t\t\t\t\thelpers.each(this.datasets, datasetIterator);\n\t\t\t\t\t\treturn barsArray;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn barsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachBars(function(bar){\n\t\t\t\t\tvalues.push(bar.value);\n\t\t\t\t});\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange: function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding : (this.options.showScale) ? 0 : (this.options.barShowStroke) ? this.options.barStrokeWidth : 0,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.scale = new this.ScaleClass(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].bars.push(new this.BarClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tbase : this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].strokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].fillColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.bars.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.BarClass.prototype,{\n\t\t\t\ty: this.scale.endPoint,\n\t\t\t\tbase : this.scale.endPoint\n\t\t\t});\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tthis.scale.draw(easingDecimal);\n\n\t\t\t//Draw all the bars for each dataset\n\t\t\thelpers.each(this.datasets,function(dataset,datasetIndex){\n\t\t\t\thelpers.each(dataset.bars,function(bar,index){\n\t\t\t\t\tif (bar.hasValue()){\n\t\t\t\t\t\tbar.base = this.scale.endPoint;\n\t\t\t\t\t\t//Transition then draw\n\t\t\t\t\t\tbar.transition({\n\t\t\t\t\t\t\tx : this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\t\t\ty : this.scale.calculateY(bar.value),\n\t\t\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length)\n\t\t\t\t\t\t}, easingDecimal).draw();\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether we should show a stroke on each segment\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of each segment stroke\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of each segment stroke\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//The percentage of the chart that we cut out of the middle.\n\t\tpercentageInnerCutout : 50,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"Doughnut\",\n\t\t//Providing a defaults will also register the deafults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize: function(data){\n\n\t\t\t//Declare segments as a static property to prevent inheriting across the Chart type prototype\n\t\t\tthis.segments = [];\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.calculateTotal(data);\n\n\t\t\thelpers.each(data,function(datapoint, index){\n\t\t\t\tthis.addData(datapoint, index, true);\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex || this.segments.length;\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tvalue : segment.value,\n\t\t\t\touterRadius : (this.options.animateScale) ? 0 : this.outerRadius,\n\t\t\t\tinnerRadius : (this.options.animateScale) ? 0 : (this.outerRadius/100) * this.options.percentageInnerCutout,\n\t\t\t\tfillColor : segment.color,\n\t\t\t\thighlightColor : segment.highlight || segment.color,\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tstartAngle : Math.PI * 1.5,\n\t\t\t\tcircumference : (this.options.animateRotate) ? 0 : this.calculateCircumference(segment.value),\n\t\t\t\tlabel : segment.label\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tcalculateCircumference : function(value){\n\t\t\treturn (Math.PI*2)*(Math.abs(value) / this.total);\n\t\t},\n\t\tcalculateTotal : function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += Math.abs(segment.value);\n\t\t\t},this);\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor']);\n\t\t\t});\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t});\n\t\t\t}, this);\n\t\t},\n\t\tdraw : function(easeDecimal){\n\t\t\tvar animDecimal = (easeDecimal) ? easeDecimal : 1;\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment,index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.calculateCircumference(segment.value),\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t},animDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\tsegment.draw();\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length-1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t},this);\n\n\t\t}\n\t});\n\n\tChart.types.Doughnut.extend({\n\t\tname : \"Pie\",\n\t\tdefaults : helpers.merge(defaultConfig,{percentageInnerCutout : 0})\n\t});\n\n}).call(this);\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\n\t\t///Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - Whether the line is curved between points\n\t\tbezierCurve : true,\n\n\t\t//Number - Tension of the bezier curve between points\n\t\tbezierCurveTension : 0.4,\n\n\t\t//Boolean - Whether to show a dot for each point\n\t\tpointDot : true,\n\n\t\t//Number - Radius of each point dot in pixels\n\t\tpointDotRadius : 4,\n\n\t\t//Number - Pixel width of point dot stroke\n\t\tpointDotStrokeWidth : 1,\n\n\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\tpointHitDetectionRadius : 20,\n\n\t\t//Boolean - Whether to show a stroke for datasets\n\t\tdatasetStroke : true,\n\n\t\t//Number - Pixel width of dataset stroke\n\t\tdatasetStrokeWidth : 2,\n\n\t\t//Boolean - Whether to fill the dataset with a colour\n\t\tdatasetFill : true,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Line\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize: function(data){\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinRange : function(mouseX){\n\t\t\t\t\treturn (Math.pow(mouseX-this.x, 2) < Math.pow(this.radius + this.hitDetectionRadius,2));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePoints = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePoints, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activePoints);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t\tthis.buildScale(data.labels);\n\n\n\t\t\t\tthis.eachPoints(function(point, index){\n\t\t\t\t\thelpers.extend(point, {\n\t\t\t\t\t\tx: this.scale.calculateX(index),\n\t\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t\t});\n\t\t\t\t\tpoint.save();\n\t\t\t\t}, this);\n\n\t\t\t},this);\n\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\t\tgetPointsAtEvent : function(e){\n\t\t\tvar pointsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e);\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.inRange(eventPosition.x,eventPosition.y)) pointsArray.push(point);\n\t\t\t\t});\n\t\t\t},this);\n\t\t\treturn pointsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachPoints(function(point){\n\t\t\t\t\tvalues.push(point.value);\n\t\t\t\t});\n\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange : function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tthis.scale = new Chart.Scale(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: this.scale.calculateX(this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\t// Some helper methods for getting the next/prev points\n\t\t\tvar hasValue = function(item){\n\t\t\t\treturn item.value !== null;\n\t\t\t},\n\t\t\tnextPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findNextWhere(collection, hasValue, index) || point;\n\t\t\t},\n\t\t\tpreviousPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findPreviousWhere(collection, hasValue, index) || point;\n\t\t\t};\n\n\t\t\tthis.scale.draw(easingDecimal);\n\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tvar pointsWithValues = helpers.where(dataset.points, hasValue);\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\t//We can use this extra loop to calculate the control points of this dataset also in this loop\n\n\t\t\t\thelpers.each(dataset.points, function(point, index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition({\n\t\t\t\t\t\t\ty : this.scale.calculateY(point.value),\n\t\t\t\t\t\t\tx : this.scale.calculateX(index)\n\t\t\t\t\t\t}, easingDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\t\t\t\t// Control points need to be calculated in a seperate loop, because we need to know the current x/y of the point\n\t\t\t\t// This would cause issues when there is no animation, because the y of the next point would be 0, so beziers would be skewed\n\t\t\t\tif (this.options.bezierCurve){\n\t\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\t\tvar tension = (index > 0 && index < pointsWithValues.length - 1) ? this.options.bezierCurveTension : 0;\n\t\t\t\t\t\tpoint.controlPoints = helpers.splineCurve(\n\t\t\t\t\t\t\tpreviousPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\tpoint,\n\t\t\t\t\t\t\tnextPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\ttension\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\n\t\t\t\t\t\t// Cap puter bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.outer.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.outer.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Cap inner bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.inner.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.inner.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t},this);\n\t\t\t\t}\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x, point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tif(this.options.bezierCurve){\n\t\t\t\t\t\t\tvar previous = previousPoint(point, pointsWithValues, index);\n\n\t\t\t\t\t\t\tctx.bezierCurveTo(\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.x,\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.y,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.x,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.y,\n\t\t\t\t\t\t\t\tpoint.x,\n\t\t\t\t\t\t\t\tpoint.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tctx.stroke();\n\n\t\t\t\tif (this.options.datasetFill && pointsWithValues.length > 0){\n\t\t\t\t\t//Round off the line by going to the base of the chart, back to the start, then fill.\n\t\t\t\t\tctx.lineTo(pointsWithValues[pointsWithValues.length - 1].x, this.scale.endPoint);\n\t\t\t\t\tctx.lineTo(pointsWithValues[0].x, this.scale.endPoint);\n\t\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t}\n\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(pointsWithValues,function(point){\n\t\t\t\t\tpoint.draw();\n\t\t\t\t});\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Show a backdrop to the scale label\n\t\tscaleShowLabelBackdrop : true,\n\n\t\t//String - The colour of the label backdrop\n\t\tscaleBackdropColor : \"rgba(255,255,255,0.75)\",\n\n\t\t// Boolean - Whether the scale should begin at zero\n\t\tscaleBeginAtZero : true,\n\n\t\t//Number - The backdrop padding above & below the label in pixels\n\t\tscaleBackdropPaddingY : 2,\n\n\t\t//Number - The backdrop padding to the side of the label in pixels\n\t\tscaleBackdropPaddingX : 2,\n\n\t\t//Boolean - Show line for each value in the scale\n\t\tscaleShowLine : true,\n\n\t\t//Boolean - Stroke a line around each segment in the chart\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of the stroke on each segement.\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of the stroke value in pixels\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect.\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether to animate the rotation of the chart\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether to animate scaling the chart from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\"\n\t};\n\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"PolarArea\",\n\t\t//Providing a defaults will also register the deafults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize: function(data){\n\t\t\tthis.segments = [];\n\t\t\t//Declare segment class as a chart instance specific class, so it can share props for this instance\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinnerRadius : 0,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tlineArc: true,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tvaluesCount: data.length\n\t\t\t});\n\n\t\t\tthis.updateScaleRange(data);\n\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.each(data,function(segment,index){\n\t\t\t\tthis.addData(segment,index,true);\n\t\t\t},this);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex || this.segments.length;\n\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tfillColor: segment.color,\n\t\t\t\thighlightColor: segment.highlight || segment.color,\n\t\t\t\tlabel: segment.label,\n\t\t\t\tvalue: segment.value,\n\t\t\t\touterRadius: (this.options.animateScale) ? 0 : this.scale.calculateCenterOffset(segment.value),\n\t\t\t\tcircumference: (this.options.animateRotate) ? 0 : this.scale.getCircumference(),\n\t\t\t\tstartAngle: Math.PI * 1.5\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tcalculateTotal: function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += segment.value;\n\t\t\t},this);\n\t\t\tthis.scale.valuesCount = this.segments.length;\n\t\t},\n\t\tupdateScaleRange: function(datapoints){\n\t\t\tvar valuesArray = [];\n\t\t\thelpers.each(datapoints,function(segment){\n\t\t\t\tvaluesArray.push(segment.value);\n\t\t\t});\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes,\n\t\t\t\t{\n\t\t\t\t\tsize: helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\t\tyCenter: this.chart.height/2\n\t\t\t\t}\n\t\t\t);\n\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\t\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.segments);\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.extend(this.scale,{\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\t//Clear & draw the canvas\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment, index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.scale.getCircumference(),\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t},easingDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\t// If we've removed the first segment we need to set the first one to\n\t\t\t\t// start at the top.\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length - 1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t\tsegment.draw();\n\t\t\t}, this);\n\t\t\tthis.scale.draw();\n\t\t}\n\t});\n\n}).call(this);\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\n\tChart.Type.extend({\n\t\tname: \"Radar\",\n\t\tdefaults:{\n\t\t\t//Boolean - Whether to show lines for each scale point\n\t\t\tscaleShowLine : true,\n\n\t\t\t//Boolean - Whether we show the angle lines out of the radar\n\t\t\tangleShowLineOut : true,\n\n\t\t\t//Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels : false,\n\n\t\t\t// Boolean - Whether the scale should begin at zero\n\t\t\tscaleBeginAtZero : true,\n\n\t\t\t//String - Colour of the angle line\n\t\t\tangleLineColor : \"rgba(0,0,0,.1)\",\n\n\t\t\t//Number - Pixel width of the angle line\n\t\t\tangleLineWidth : 1,\n\n\t\t\t//String - Point label font declaration\n\t\t\tpointLabelFontFamily : \"'Arial'\",\n\n\t\t\t//String - Point label font weight\n\t\t\tpointLabelFontStyle : \"normal\",\n\n\t\t\t//Number - Point label font size in pixels\n\t\t\tpointLabelFontSize : 10,\n\n\t\t\t//String - Point label font colour\n\t\t\tpointLabelFontColor : \"#666\",\n\n\t\t\t//Boolean - Whether to show a dot for each point\n\t\t\tpointDot : true,\n\n\t\t\t//Number - Radius of each point dot in pixels\n\t\t\tpointDotRadius : 3,\n\n\t\t\t//Number - Pixel width of point dot stroke\n\t\t\tpointDotStrokeWidth : 1,\n\n\t\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\t\tpointHitDetectionRadius : 20,\n\n\t\t\t//Boolean - Whether to show a stroke for datasets\n\t\t\tdatasetStroke : true,\n\n\t\t\t//Number - Pixel width of dataset stroke\n\t\t\tdatasetStrokeWidth : 2,\n\n\t\t\t//Boolean - Whether to fill the dataset with a colour\n\t\t\tdatasetFill : true,\n\n\t\t\t//String - A legend template\n\t\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t\t},\n\n\t\tinitialize: function(data){\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\tthis.buildScale(data);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePointsCollection = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePointsCollection, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.showTooltip(activePointsCollection);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel: dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tvar pointPosition;\n\t\t\t\t\tif (!this.scale.animation){\n\t\t\t\t\t\tpointPosition = this.scale.getPointPosition(index, this.scale.calculateCenterOffset(dataPoint));\n\t\t\t\t\t}\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tx: (this.options.animation) ? this.scale.xCenter : pointPosition.x,\n\t\t\t\t\t\ty: (this.options.animation) ? this.scale.yCenter : pointPosition.y,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\n\t\tgetPointsAtEvent : function(evt){\n\t\t\tvar mousePosition = helpers.getRelativePosition(evt),\n\t\t\t\tfromCenter = helpers.getAngleFromPoint({\n\t\t\t\t\tx: this.scale.xCenter,\n\t\t\t\t\ty: this.scale.yCenter\n\t\t\t\t}, mousePosition);\n\n\t\t\tvar anglePerIndex = (Math.PI * 2) /this.scale.valuesCount,\n\t\t\t\tpointIndex = Math.round((fromCenter.angle - Math.PI * 1.5) / anglePerIndex),\n\t\t\t\tactivePointsCollection = [];\n\n\t\t\t// If we're at the top, make the pointIndex 0 to get the first of the array.\n\t\t\tif (pointIndex >= this.scale.valuesCount || pointIndex < 0){\n\t\t\t\tpointIndex = 0;\n\t\t\t}\n\n\t\t\tif (fromCenter.distance <= this.scale.drawingArea){\n\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\tactivePointsCollection.push(dataset.points[pointIndex]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn activePointsCollection;\n\t\t},\n\n\t\tbuildScale : function(data){\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tangleLineColor : this.options.angleLineColor,\n\t\t\t\tangleLineWidth : (this.options.angleShowLineOut) ? this.options.angleLineWidth : 0,\n\t\t\t\t// Point labels at the edge of each line\n\t\t\t\tpointLabelFontColor : this.options.pointLabelFontColor,\n\t\t\t\tpointLabelFontSize : this.options.pointLabelFontSize,\n\t\t\t\tpointLabelFontFamily : this.options.pointLabelFontFamily,\n\t\t\t\tpointLabelFontStyle : this.options.pointLabelFontStyle,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tlabels: data.labels,\n\t\t\t\tvaluesCount: data.datasets[0].data.length\n\t\t\t});\n\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.updateScaleRange(data.datasets);\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tupdateScaleRange: function(datasets){\n\t\t\tvar valuesArray = (function(){\n\t\t\t\tvar totalDataArray = [];\n\t\t\t\thelpers.each(datasets,function(dataset){\n\t\t\t\t\tif (dataset.data){\n\t\t\t\t\t\ttotalDataArray = totalDataArray.concat(dataset.data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thelpers.each(dataset.points, function(point){\n\t\t\t\t\t\t\ttotalDataArray.push(point.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn totalDataArray;\n\t\t\t})();\n\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes\n\t\t\t);\n\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\tthis.scale.valuesCount++;\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\tvar pointPosition = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(value));\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: pointPosition.x,\n\t\t\t\t\ty: pointPosition.y,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.labels.push(label);\n\n\t\t\tthis.reflow();\n\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.valuesCount--;\n\t\t\tthis.scale.labels.shift();\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow: function(){\n\t\t\thelpers.extend(this.scale, {\n\t\t\t\twidth : this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\tsize : helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.datasets);\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easeDecimal = ease || 1,\n\t\t\t\tctx = this.chart.ctx;\n\t\t\tthis.clear();\n\t\t\tthis.scale.draw();\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition(this.scale.getPointPosition(index, this.scale.calculateCenterOffset(point.value)), easeDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\n\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\tctx.fill();\n\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.draw();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t},this);\n\n\t\t}\n\n\t});\n\n\n\n\n\n}).call(this);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2NoYXJ0LmpzL0NoYXJ0LmpzP2IyZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsaUJBQWlCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFtQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDBCQUEwQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLHFIQUFxSCxzQ0FBc0M7O0FBRTNKLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNILG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsNEJBQTRCOztBQUU1RDtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxVQUFVLGtCQUFrQjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDBDQUEwQztBQUM3RixLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWE7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVULFFBQVE7O0FBRVI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0Y7QUFDdEY7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZTtBQUMvQixvREFBb0QsbUVBQW1FO0FBQ3ZIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwRkFBMEY7O0FBRTFGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixlQUFlO0FBQy9CLG9EQUFvRCxtRUFBbUU7QUFDdkg7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBO0FBQ0Esb0VBQW9FLHdCQUF3QjtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxRQUFRO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFBQTtBQUNILEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlGQUFpRixtQkFBbUIsTUFBTSxpR0FBaUcsMkJBQTJCLFVBQVU7O0FBRWhQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7O0FBRUwsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSw2QkFBNkIscUNBQXFDO0FBQ2xFLHNCQUFzQixvREFBb0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FB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Q0EsS0FBSzs7QUFFTCxJQUFJOzs7QUFHSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0YsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlGQUFpRixtQkFBbUIsTUFBTSxpR0FBaUcsMkJBQTJCLFVBQVU7QUFDaFA7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTs7QUFFSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFOztBQUVGLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtGQUFrRixtQkFBbUIsTUFBTSxtR0FBbUcsMkJBQTJCLFVBQVU7O0FBRW5QLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSzs7QUFFTCxJQUFJOztBQUVKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7O0FBSUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUk7O0FBRUo7O0FBRUEsRUFBRTs7Ozs7O0FBTUYsQ0FBQyIsImZpbGUiOiI1NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ2hhcnQuanNcbiAqIGh0dHA6Ly9jaGFydGpzLm9yZy9cbiAqIFZlcnNpb246IDEuMC4yXG4gKlxuICogQ29weXJpZ2h0IDIwMTUgTmljayBEb3duaWVcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL25ubmljay9DaGFydC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuXG4oZnVuY3Rpb24oKXtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvL0RlY2xhcmUgcm9vdCB2YXJpYWJsZSAtIHdpbmRvdyBpbiB0aGUgYnJvd3NlciwgZ2xvYmFsIG9uIHRoZSBzZXJ2ZXJcblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdHByZXZpb3VzID0gcm9vdC5DaGFydDtcblxuXHQvL09jY3VweSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG9mIENoYXJ0LCBhbmQgY3JlYXRlIGEgc2ltcGxlIGJhc2UgY2xhc3Ncblx0dmFyIENoYXJ0ID0gZnVuY3Rpb24oY29udGV4dCl7XG5cdFx0dmFyIGNoYXJ0ID0gdGhpcztcblx0XHR0aGlzLmNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuXG5cdFx0dGhpcy5jdHggPSBjb250ZXh0O1xuXG5cdFx0Ly9WYXJpYWJsZXMgZ2xvYmFsIHRvIHRoZSBjaGFydFxuXHRcdHZhciBjb21wdXRlRGltZW5zaW9uID0gZnVuY3Rpb24oZWxlbWVudCxkaW1lbnNpb24pXG5cdFx0e1xuXHRcdFx0aWYgKGVsZW1lbnRbJ29mZnNldCcrZGltZW5zaW9uXSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnRbJ29mZnNldCcrZGltZW5zaW9uXTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShkaW1lbnNpb24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciB3aWR0aCA9IHRoaXMud2lkdGggPSBjb21wdXRlRGltZW5zaW9uKGNvbnRleHQuY2FudmFzLCdXaWR0aCcpO1xuXHRcdHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodCA9IGNvbXB1dGVEaW1lbnNpb24oY29udGV4dC5jYW52YXMsJ0hlaWdodCcpO1xuXG5cdFx0Ly8gRmlyZWZveCByZXF1aXJlcyB0aGlzIHRvIHdvcmsgY29ycmVjdGx5XG5cdFx0Y29udGV4dC5jYW52YXMud2lkdGggID0gd2lkdGg7XG5cdFx0Y29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0dmFyIHdpZHRoID0gdGhpcy53aWR0aCA9IGNvbnRleHQuY2FudmFzLndpZHRoO1xuXHRcdHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodCA9IGNvbnRleHQuY2FudmFzLmhlaWdodDtcblx0XHR0aGlzLmFzcGVjdFJhdGlvID0gdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0O1xuXHRcdC8vSGlnaCBwaXhlbCBkZW5zaXR5IGRpc3BsYXlzIC0gbXVsdGlwbHkgdGhlIHNpemUgb2YgdGhlIGNhbnZhcyBoZWlnaHQvd2lkdGggYnkgdGhlIGRldmljZSBwaXhlbCByYXRpbywgdGhlbiBzY2FsZS5cblx0XHRoZWxwZXJzLnJldGluYVNjYWxlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdC8vR2xvYmFsbHkgZXhwb3NlIHRoZSBkZWZhdWx0cyB0byBhbGxvdyBmb3IgdXNlciB1cGRhdGluZy9jaGFuZ2luZ1xuXHRDaGFydC5kZWZhdWx0cyA9IHtcblx0XHRnbG9iYWw6IHtcblx0XHRcdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHRvIGFuaW1hdGUgdGhlIGNoYXJ0XG5cdFx0XHRhbmltYXRpb246IHRydWUsXG5cblx0XHRcdC8vIE51bWJlciAtIE51bWJlciBvZiBhbmltYXRpb24gc3RlcHNcblx0XHRcdGFuaW1hdGlvblN0ZXBzOiA2MCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gQW5pbWF0aW9uIGVhc2luZyBlZmZlY3Rcblx0XHRcdGFuaW1hdGlvbkVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIElmIHdlIHNob3VsZCBzaG93IHRoZSBzY2FsZSBhdCBhbGxcblx0XHRcdHNob3dTY2FsZTogdHJ1ZSxcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIElmIHdlIHdhbnQgdG8gb3ZlcnJpZGUgd2l0aCBhIGhhcmQgY29kZWQgc2NhbGVcblx0XHRcdHNjYWxlT3ZlcnJpZGU6IGZhbHNlLFxuXG5cdFx0XHQvLyAqKiBSZXF1aXJlZCBpZiBzY2FsZU92ZXJyaWRlIGlzIHRydWUgKipcblx0XHRcdC8vIE51bWJlciAtIFRoZSBudW1iZXIgb2Ygc3RlcHMgaW4gYSBoYXJkIGNvZGVkIHNjYWxlXG5cdFx0XHRzY2FsZVN0ZXBzOiBudWxsLFxuXHRcdFx0Ly8gTnVtYmVyIC0gVGhlIHZhbHVlIGp1bXAgaW4gdGhlIGhhcmQgY29kZWQgc2NhbGVcblx0XHRcdHNjYWxlU3RlcFdpZHRoOiBudWxsLFxuXHRcdFx0Ly8gTnVtYmVyIC0gVGhlIHNjYWxlIHN0YXJ0aW5nIHZhbHVlXG5cdFx0XHRzY2FsZVN0YXJ0VmFsdWU6IG51bGwsXG5cblx0XHRcdC8vIFN0cmluZyAtIENvbG91ciBvZiB0aGUgc2NhbGUgbGluZVxuXHRcdFx0c2NhbGVMaW5lQ29sb3I6IFwicmdiYSgwLDAsMCwuMSlcIixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgdGhlIHNjYWxlIGxpbmVcblx0XHRcdHNjYWxlTGluZVdpZHRoOiAxLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxhYmVscyBvbiB0aGUgc2NhbGVcblx0XHRcdHNjYWxlU2hvd0xhYmVsczogdHJ1ZSxcblxuXHRcdFx0Ly8gSW50ZXJwb2xhdGVkIEpTIHN0cmluZyAtIGNhbiBhY2Nlc3MgdmFsdWVcblx0XHRcdHNjYWxlTGFiZWw6IFwiPCU9dmFsdWUlPlwiLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0aWNrIHRvIGludGVnZXJzLCBhbmQgbm90IHNob3cgYW55IGZsb2F0cyBldmVuIGlmIGRyYXdpbmcgc3BhY2UgaXMgdGhlcmVcblx0XHRcdHNjYWxlSW50ZWdlcnNPbmx5OiB0cnVlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBkb3duIGZyb20gdGhlIGxvd2VzdCB2YWx1ZVxuXHRcdFx0c2NhbGVCZWdpbkF0WmVybzogZmFsc2UsXG5cblx0XHRcdC8vIFN0cmluZyAtIFNjYWxlIGxhYmVsIGZvbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBzY2FsZSBsYWJlbFxuXHRcdFx0c2NhbGVGb250RmFtaWx5OiBcIidIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmXCIsXG5cblx0XHRcdC8vIE51bWJlciAtIFNjYWxlIGxhYmVsIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHNjYWxlRm9udFNpemU6IDEyLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBTY2FsZSBsYWJlbCBmb250IHdlaWdodCBzdHlsZVxuXHRcdFx0c2NhbGVGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFNjYWxlIGxhYmVsIGZvbnQgY29sb3VyXG5cdFx0XHRzY2FsZUZvbnRDb2xvcjogXCIjNjY2XCIsXG5cblx0XHRcdC8vIEJvb2xlYW4gLSB3aGV0aGVyIG9yIG5vdCB0aGUgY2hhcnQgc2hvdWxkIGJlIHJlc3BvbnNpdmUgYW5kIHJlc2l6ZSB3aGVuIHRoZSBicm93c2VyIGRvZXMuXG5cdFx0XHRyZXNwb25zaXZlOiBmYWxzZSxcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIHdoZXRoZXIgdG8gbWFpbnRhaW4gdGhlIHN0YXJ0aW5nIGFzcGVjdCByYXRpbyBvciBub3Qgd2hlbiByZXNwb25zaXZlLCBpZiBzZXQgdG8gZmFsc2UsIHdpbGwgdGFrZSB1cCBlbnRpcmUgY29udGFpbmVyXG5cdFx0XHRtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRyYXcgdG9vbHRpcHMgb24gdGhlIGNhbnZhcyBvciBub3QgLSBhdHRhY2hlcyBldmVudHMgdG8gdG91Y2htb3ZlICYgbW91c2Vtb3ZlXG5cdFx0XHRzaG93VG9vbHRpcHM6IHRydWUsXG5cblx0XHRcdC8vIEJvb2xlYW4gLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZHJhdyBidWlsdC1pbiB0b29sdGlwIG9yIGNhbGwgY3VzdG9tIHRvb2x0aXAgZnVuY3Rpb25cblx0XHRcdGN1c3RvbVRvb2x0aXBzOiBmYWxzZSxcblxuXHRcdFx0Ly8gQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gYXR0YWNoIHRvb2x0aXAgZXZlbnRzXG5cdFx0XHR0b29sdGlwRXZlbnRzOiBbXCJtb3VzZW1vdmVcIiwgXCJ0b3VjaHN0YXJ0XCIsIFwidG91Y2htb3ZlXCIsIFwibW91c2VvdXRcIl0sXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgYmFja2dyb3VuZCBjb2xvdXJcblx0XHRcdHRvb2x0aXBGaWxsQ29sb3I6IFwicmdiYSgwLDAsMCwwLjgpXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgbGFiZWwgZm9udCBkZWNsYXJhdGlvbiBmb3IgdGhlIHNjYWxlIGxhYmVsXG5cdFx0XHR0b29sdGlwRm9udEZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBUb29sdGlwIGxhYmVsIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHRvb2x0aXBGb250U2l6ZTogMTQsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgZm9udCB3ZWlnaHQgc3R5bGVcblx0XHRcdHRvb2x0aXBGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgbGFiZWwgZm9udCBjb2xvdXJcblx0XHRcdHRvb2x0aXBGb250Q29sb3I6IFwiI2ZmZlwiLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBUb29sdGlwIHRpdGxlIGZvbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBzY2FsZSBsYWJlbFxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udEZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBUb29sdGlwIHRpdGxlIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHRvb2x0aXBUaXRsZUZvbnRTaXplOiAxNCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVG9vbHRpcCB0aXRsZSBmb250IHdlaWdodCBzdHlsZVxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udFN0eWxlOiBcImJvbGRcIixcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVG9vbHRpcCB0aXRsZSBmb250IGNvbG91clxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udENvbG9yOiBcIiNmZmZcIixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gcGl4ZWwgd2lkdGggb2YgcGFkZGluZyBhcm91bmQgdG9vbHRpcCB0ZXh0XG5cdFx0XHR0b29sdGlwWVBhZGRpbmc6IDYsXG5cblx0XHRcdC8vIE51bWJlciAtIHBpeGVsIHdpZHRoIG9mIHBhZGRpbmcgYXJvdW5kIHRvb2x0aXAgdGV4dFxuXHRcdFx0dG9vbHRpcFhQYWRkaW5nOiA2LFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBTaXplIG9mIHRoZSBjYXJldCBvbiB0aGUgdG9vbHRpcFxuXHRcdFx0dG9vbHRpcENhcmV0U2l6ZTogOCxcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgcmFkaXVzIG9mIHRoZSB0b29sdGlwIGJvcmRlclxuXHRcdFx0dG9vbHRpcENvcm5lclJhZGl1czogNixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgb2Zmc2V0IGZyb20gcG9pbnQgeCB0byB0b29sdGlwIGVkZ2Vcblx0XHRcdHRvb2x0aXBYT2Zmc2V0OiAxMCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVGVtcGxhdGUgc3RyaW5nIGZvciBzaW5nbGUgdG9vbHRpcHNcblx0XHRcdHRvb2x0aXBUZW1wbGF0ZTogXCI8JWlmIChsYWJlbCl7JT48JT1sYWJlbCU+OiA8JX0lPjwlPSB2YWx1ZSAlPlwiLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBUZW1wbGF0ZSBzdHJpbmcgZm9yIHNpbmdsZSB0b29sdGlwc1xuXHRcdFx0bXVsdGlUb29sdGlwVGVtcGxhdGU6IFwiPCU9IHZhbHVlICU+XCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIENvbG91ciBiZWhpbmQgdGhlIGxlZ2VuZCBjb2xvdXIgYmxvY2tcblx0XHRcdG11bHRpVG9vbHRpcEtleUJhY2tncm91bmQ6ICcjZmZmJyxcblxuXHRcdFx0Ly8gRnVuY3Rpb24gLSBXaWxsIGZpcmUgb24gYW5pbWF0aW9uIHByb2dyZXNzaW9uLlxuXHRcdFx0b25BbmltYXRpb25Qcm9ncmVzczogZnVuY3Rpb24oKXt9LFxuXG5cdFx0XHQvLyBGdW5jdGlvbiAtIFdpbGwgZmlyZSBvbiBhbmltYXRpb24gY29tcGxldGlvbi5cblx0XHRcdG9uQW5pbWF0aW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fVxuXG5cdFx0fVxuXHR9O1xuXG5cdC8vQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBjaGFydCB0eXBlcywgdG8gYWxsb3cgZm9yIGV4dGVuc2lvbiBvZiBleGlzdGluZyB0eXBlc1xuXHRDaGFydC50eXBlcyA9IHt9O1xuXG5cdC8vR2xvYmFsIENoYXJ0IGhlbHBlcnMgb2JqZWN0IGZvciB1dGlsaXR5IG1ldGhvZHMgYW5kIGNsYXNzZXNcblx0dmFyIGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzID0ge307XG5cblx0XHQvLy0tIEJhc2ljIGpzIHV0aWxpdHkgbWV0aG9kc1xuXHR2YXIgZWFjaCA9IGhlbHBlcnMuZWFjaCA9IGZ1bmN0aW9uKGxvb3BhYmxlLGNhbGxiYWNrLHNlbGYpe1xuXHRcdFx0dmFyIGFkZGl0aW9uYWxBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBudWxsIG9yIHVuZGVmaW5lZCBmaXJzdGx5LlxuXHRcdFx0aWYgKGxvb3BhYmxlKXtcblx0XHRcdFx0aWYgKGxvb3BhYmxlLmxlbmd0aCA9PT0gK2xvb3BhYmxlLmxlbmd0aCl7XG5cdFx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdFx0Zm9yIChpPTA7IGk8bG9vcGFibGUubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoc2VsZixbbG9vcGFibGVbaV0sIGldLmNvbmNhdChhZGRpdGlvbmFsQXJncykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdGZvciAodmFyIGl0ZW0gaW4gbG9vcGFibGUpe1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoc2VsZixbbG9vcGFibGVbaXRlbV0saXRlbV0uY29uY2F0KGFkZGl0aW9uYWxBcmdzKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjbG9uZSA9IGhlbHBlcnMuY2xvbmUgPSBmdW5jdGlvbihvYmope1xuXHRcdFx0dmFyIG9iakNsb25lID0ge307XG5cdFx0XHRlYWNoKG9iaixmdW5jdGlvbih2YWx1ZSxrZXkpe1xuXHRcdFx0XHRpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIG9iakNsb25lW2tleV0gPSB2YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG9iakNsb25lO1xuXHRcdH0sXG5cdFx0ZXh0ZW5kID0gaGVscGVycy5leHRlbmQgPSBmdW5jdGlvbihiYXNlKXtcblx0XHRcdGVhY2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLCBmdW5jdGlvbihleHRlbnNpb25PYmplY3QpIHtcblx0XHRcdFx0ZWFjaChleHRlbnNpb25PYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5KXtcblx0XHRcdFx0XHRpZiAoZXh0ZW5zaW9uT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIGJhc2Vba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fSxcblx0XHRtZXJnZSA9IGhlbHBlcnMubWVyZ2UgPSBmdW5jdGlvbihiYXNlLG1hc3Rlcil7XG5cdFx0XHQvL01lcmdlIHByb3BlcnRpZXMgaW4gbGVmdCBvYmplY3Qgb3ZlciB0byBhIHNoYWxsb3cgY2xvbmUgb2Ygb2JqZWN0IHJpZ2h0LlxuXHRcdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7XG5cdFx0XHRhcmdzLnVuc2hpZnQoe30pO1xuXHRcdFx0cmV0dXJuIGV4dGVuZC5hcHBseShudWxsLCBhcmdzKTtcblx0XHR9LFxuXHRcdGluZGV4T2YgPSBoZWxwZXJzLmluZGV4T2YgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBpdGVtKXtcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuXHRcdFx0XHRyZXR1cm4gYXJyYXlUb1NlYXJjaC5pbmRleE9mKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheVRvU2VhcmNoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGFycmF5VG9TZWFyY2hbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHdoZXJlID0gaGVscGVycy53aGVyZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGZpbHRlckNhbGxiYWNrKXtcblx0XHRcdHZhciBmaWx0ZXJlZCA9IFtdO1xuXG5cdFx0XHRoZWxwZXJzLmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRcdGlmIChmaWx0ZXJDYWxsYmFjayhpdGVtKSl7XG5cdFx0XHRcdFx0ZmlsdGVyZWQucHVzaChpdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBmaWx0ZXJlZDtcblx0XHR9LFxuXHRcdGZpbmROZXh0V2hlcmUgPSBoZWxwZXJzLmZpbmROZXh0V2hlcmUgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBmaWx0ZXJDYWxsYmFjaywgc3RhcnRJbmRleCl7XG5cdFx0XHQvLyBEZWZhdWx0IHRvIHN0YXJ0IG9mIHRoZSBhcnJheVxuXHRcdFx0aWYgKCFzdGFydEluZGV4KXtcblx0XHRcdFx0c3RhcnRJbmRleCA9IC0xO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggKyAxOyBpIDwgYXJyYXlUb1NlYXJjaC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgY3VycmVudEl0ZW0gPSBhcnJheVRvU2VhcmNoW2ldO1xuXHRcdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKXtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudEl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbmRQcmV2aW91c1doZXJlID0gaGVscGVycy5maW5kUHJldmlvdXNXaGVyZSA9IGZ1bmN0aW9uKGFycmF5VG9TZWFyY2gsIGZpbHRlckNhbGxiYWNrLCBzdGFydEluZGV4KXtcblx0XHRcdC8vIERlZmF1bHQgdG8gZW5kIG9mIHRoZSBhcnJheVxuXHRcdFx0aWYgKCFzdGFydEluZGV4KXtcblx0XHRcdFx0c3RhcnRJbmRleCA9IGFycmF5VG9TZWFyY2gubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHR2YXIgY3VycmVudEl0ZW0gPSBhcnJheVRvU2VhcmNoW2ldO1xuXHRcdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKXtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudEl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGluaGVyaXRzID0gaGVscGVycy5pbmhlcml0cyA9IGZ1bmN0aW9uKGV4dGVuc2lvbnMpe1xuXHRcdFx0Ly9CYXNpYyBqYXZhc2NyaXB0IGluaGVyaXRhbmNlIGJhc2VkIG9uIHRoZSBtb2RlbCBjcmVhdGVkIGluIEJhY2tib25lLmpzXG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcztcblx0XHRcdHZhciBDaGFydEVsZW1lbnQgPSAoZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25zLmhhc093blByb3BlcnR5KFwiY29uc3RydWN0b3JcIikpID8gZXh0ZW5zaW9ucy5jb25zdHJ1Y3RvciA6IGZ1bmN0aW9uKCl7IHJldHVybiBwYXJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcblxuXHRcdFx0dmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBDaGFydEVsZW1lbnQ7fTtcblx0XHRcdFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuXHRcdFx0Q2hhcnRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuXHRcdFx0Q2hhcnRFbGVtZW50LmV4dGVuZCA9IGluaGVyaXRzO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9ucykgZXh0ZW5kKENoYXJ0RWxlbWVudC5wcm90b3R5cGUsIGV4dGVuc2lvbnMpO1xuXG5cdFx0XHRDaGFydEVsZW1lbnQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTtcblxuXHRcdFx0cmV0dXJuIENoYXJ0RWxlbWVudDtcblx0XHR9LFxuXHRcdG5vb3AgPSBoZWxwZXJzLm5vb3AgPSBmdW5jdGlvbigpe30sXG5cdFx0dWlkID0gaGVscGVycy51aWQgPSAoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBpZD0wO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBcImNoYXJ0LVwiICsgaWQrKztcblx0XHRcdH07XG5cdFx0fSkoKSxcblx0XHR3YXJuID0gaGVscGVycy53YXJuID0gZnVuY3Rpb24oc3RyKXtcblx0XHRcdC8vTWV0aG9kIGZvciB3YXJuaW5nIG9mIGVycm9yc1xuXHRcdFx0aWYgKHdpbmRvdy5jb25zb2xlICYmIHR5cGVvZiB3aW5kb3cuY29uc29sZS53YXJuID09IFwiZnVuY3Rpb25cIikgY29uc29sZS53YXJuKHN0cik7XG5cdFx0fSxcblx0XHRhbWQgPSBoZWxwZXJzLmFtZCA9ICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCksXG5cdFx0Ly8tLSBNYXRoIG1ldGhvZHNcblx0XHRpc051bWJlciA9IGhlbHBlcnMuaXNOdW1iZXIgPSBmdW5jdGlvbihuKXtcblx0XHRcdHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG5cdFx0fSxcblx0XHRtYXggPSBoZWxwZXJzLm1heCA9IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRcdHJldHVybiBNYXRoLm1heC5hcHBseSggTWF0aCwgYXJyYXkgKTtcblx0XHR9LFxuXHRcdG1pbiA9IGhlbHBlcnMubWluID0gZnVuY3Rpb24oYXJyYXkpe1xuXHRcdFx0cmV0dXJuIE1hdGgubWluLmFwcGx5KCBNYXRoLCBhcnJheSApO1xuXHRcdH0sXG5cdFx0Y2FwID0gaGVscGVycy5jYXAgPSBmdW5jdGlvbih2YWx1ZVRvQ2FwLG1heFZhbHVlLG1pblZhbHVlKXtcblx0XHRcdGlmKGlzTnVtYmVyKG1heFZhbHVlKSkge1xuXHRcdFx0XHRpZiggdmFsdWVUb0NhcCA+IG1heFZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXhWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihpc051bWJlcihtaW5WYWx1ZSkpe1xuXHRcdFx0XHRpZiAoIHZhbHVlVG9DYXAgPCBtaW5WYWx1ZSApe1xuXHRcdFx0XHRcdHJldHVybiBtaW5WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlVG9DYXA7XG5cdFx0fSxcblx0XHRnZXREZWNpbWFsUGxhY2VzID0gaGVscGVycy5nZXREZWNpbWFsUGxhY2VzID0gZnVuY3Rpb24obnVtKXtcblx0XHRcdGlmIChudW0lMSE9PTAgJiYgaXNOdW1iZXIobnVtKSl7XG5cdFx0XHRcdHJldHVybiBudW0udG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dG9SYWRpYW5zID0gaGVscGVycy5yYWRpYW5zID0gZnVuY3Rpb24oZGVncmVlcyl7XG5cdFx0XHRyZXR1cm4gZGVncmVlcyAqIChNYXRoLlBJLzE4MCk7XG5cdFx0fSxcblx0XHQvLyBHZXRzIHRoZSBhbmdsZSBmcm9tIHZlcnRpY2FsIHVwcmlnaHQgdG8gdGhlIHBvaW50IGFib3V0IGEgY2VudHJlLlxuXHRcdGdldEFuZ2xlRnJvbVBvaW50ID0gaGVscGVycy5nZXRBbmdsZUZyb21Qb2ludCA9IGZ1bmN0aW9uKGNlbnRyZVBvaW50LCBhbmdsZVBvaW50KXtcblx0XHRcdHZhciBkaXN0YW5jZUZyb21YQ2VudGVyID0gYW5nbGVQb2ludC54IC0gY2VudHJlUG9pbnQueCxcblx0XHRcdFx0ZGlzdGFuY2VGcm9tWUNlbnRlciA9IGFuZ2xlUG9pbnQueSAtIGNlbnRyZVBvaW50LnksXG5cdFx0XHRcdHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlciA9IE1hdGguc3FydCggZGlzdGFuY2VGcm9tWENlbnRlciAqIGRpc3RhbmNlRnJvbVhDZW50ZXIgKyBkaXN0YW5jZUZyb21ZQ2VudGVyICogZGlzdGFuY2VGcm9tWUNlbnRlcik7XG5cblxuXHRcdFx0dmFyIGFuZ2xlID0gTWF0aC5QSSAqIDIgKyBNYXRoLmF0YW4yKGRpc3RhbmNlRnJvbVlDZW50ZXIsIGRpc3RhbmNlRnJvbVhDZW50ZXIpO1xuXG5cdFx0XHQvL0lmIHRoZSBzZWdtZW50IGlzIGluIHRoZSB0b3AgbGVmdCBxdWFkcmFudCwgd2UgbmVlZCB0byBhZGQgYW5vdGhlciByb3RhdGlvbiB0byB0aGUgYW5nbGVcblx0XHRcdGlmIChkaXN0YW5jZUZyb21YQ2VudGVyIDwgMCAmJiBkaXN0YW5jZUZyb21ZQ2VudGVyIDwgMCl7XG5cdFx0XHRcdGFuZ2xlICs9IE1hdGguUEkqMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0YW5nbGU6IGFuZ2xlLFxuXHRcdFx0XHRkaXN0YW5jZTogcmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YWxpYXNQaXhlbCA9IGhlbHBlcnMuYWxpYXNQaXhlbCA9IGZ1bmN0aW9uKHBpeGVsV2lkdGgpe1xuXHRcdFx0cmV0dXJuIChwaXhlbFdpZHRoICUgMiA9PT0gMCkgPyAwIDogMC41O1xuXHRcdH0sXG5cdFx0c3BsaW5lQ3VydmUgPSBoZWxwZXJzLnNwbGluZUN1cnZlID0gZnVuY3Rpb24oRmlyc3RQb2ludCxNaWRkbGVQb2ludCxBZnRlclBvaW50LHQpe1xuXHRcdFx0Ly9Qcm9wcyB0byBSb2IgU3BlbmNlciBhdCBzY2FsZWQgaW5ub3ZhdGlvbiBmb3IgaGlzIHBvc3Qgb24gc3BsaW5pbmcgYmV0d2VlbiBwb2ludHNcblx0XHRcdC8vaHR0cDovL3NjYWxlZGlubm92YXRpb24uY29tL2FuYWx5dGljcy9zcGxpbmVzL2Fib3V0U3BsaW5lcy5odG1sXG5cdFx0XHR2YXIgZDAxPU1hdGguc3FydChNYXRoLnBvdyhNaWRkbGVQb2ludC54LUZpcnN0UG9pbnQueCwyKStNYXRoLnBvdyhNaWRkbGVQb2ludC55LUZpcnN0UG9pbnQueSwyKSksXG5cdFx0XHRcdGQxMj1NYXRoLnNxcnQoTWF0aC5wb3coQWZ0ZXJQb2ludC54LU1pZGRsZVBvaW50LngsMikrTWF0aC5wb3coQWZ0ZXJQb2ludC55LU1pZGRsZVBvaW50LnksMikpLFxuXHRcdFx0XHRmYT10KmQwMS8oZDAxK2QxMiksLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG5cdFx0XHRcdGZiPXQqZDEyLyhkMDErZDEyKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlubmVyIDoge1xuXHRcdFx0XHRcdHggOiBNaWRkbGVQb2ludC54LWZhKihBZnRlclBvaW50LngtRmlyc3RQb2ludC54KSxcblx0XHRcdFx0XHR5IDogTWlkZGxlUG9pbnQueS1mYSooQWZ0ZXJQb2ludC55LUZpcnN0UG9pbnQueSlcblx0XHRcdFx0fSxcblx0XHRcdFx0b3V0ZXIgOiB7XG5cdFx0XHRcdFx0eDogTWlkZGxlUG9pbnQueCtmYiooQWZ0ZXJQb2ludC54LUZpcnN0UG9pbnQueCksXG5cdFx0XHRcdFx0eSA6IE1pZGRsZVBvaW50LnkrZmIqKEFmdGVyUG9pbnQueS1GaXJzdFBvaW50LnkpXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XHRjYWxjdWxhdGVPcmRlck9mTWFnbml0dWRlID0gaGVscGVycy5jYWxjdWxhdGVPcmRlck9mTWFnbml0dWRlID0gZnVuY3Rpb24odmFsKXtcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMTApO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlU2NhbGVSYW5nZSA9IGhlbHBlcnMuY2FsY3VsYXRlU2NhbGVSYW5nZSA9IGZ1bmN0aW9uKHZhbHVlc0FycmF5LCBkcmF3aW5nU2l6ZSwgdGV4dFNpemUsIHN0YXJ0RnJvbVplcm8sIGludGVnZXJzT25seSl7XG5cblx0XHRcdC8vU2V0IGEgbWluaW11bSBzdGVwIG9mIHR3byAtIGEgcG9pbnQgYXQgdGhlIHRvcCBvZiB0aGUgZ3JhcGgsIGFuZCBhIHBvaW50IGF0IHRoZSBiYXNlXG5cdFx0XHR2YXIgbWluU3RlcHMgPSAyLFxuXHRcdFx0XHRtYXhTdGVwcyA9IE1hdGguZmxvb3IoZHJhd2luZ1NpemUvKHRleHRTaXplICogMS41KSksXG5cdFx0XHRcdHNraXBGaXR0aW5nID0gKG1pblN0ZXBzID49IG1heFN0ZXBzKTtcblxuXHRcdFx0dmFyIG1heFZhbHVlID0gbWF4KHZhbHVlc0FycmF5KSxcblx0XHRcdFx0bWluVmFsdWUgPSBtaW4odmFsdWVzQXJyYXkpO1xuXG5cdFx0XHQvLyBXZSBuZWVkIHNvbWUgZGVncmVlIG9mIHNlcGVyYXRpb24gaGVyZSB0byBjYWxjdWxhdGUgdGhlIHNjYWxlcyBpZiBhbGwgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcblx0XHRcdC8vIEFkZGluZy9taW51c2luZyAwLjUgd2lsbCBnaXZlIHVzIGEgcmFuZ2Ugb2YgMS5cblx0XHRcdGlmIChtYXhWYWx1ZSA9PT0gbWluVmFsdWUpe1xuXHRcdFx0XHRtYXhWYWx1ZSArPSAwLjU7XG5cdFx0XHRcdC8vIFNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIGEgZ3JhcGggd2l0aCBhIG5lZ2F0aXZlIHN0YXJ0IHZhbHVlIGlmIHdlJ3ZlIHNhaWQgYWx3YXlzIHN0YXJ0IGZyb20gemVyb1xuXHRcdFx0XHRpZiAobWluVmFsdWUgPj0gMC41ICYmICFzdGFydEZyb21aZXJvKXtcblx0XHRcdFx0XHRtaW5WYWx1ZSAtPSAwLjU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHQvLyBNYWtlIHVwIGEgd2hvbGUgbnVtYmVyIGFib3ZlIHRoZSB2YWx1ZXNcblx0XHRcdFx0XHRtYXhWYWx1ZSArPSAwLjU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyXHR2YWx1ZVJhbmdlID0gTWF0aC5hYnMobWF4VmFsdWUgLSBtaW5WYWx1ZSksXG5cdFx0XHRcdHJhbmdlT3JkZXJPZk1hZ25pdHVkZSA9IGNhbGN1bGF0ZU9yZGVyT2ZNYWduaXR1ZGUodmFsdWVSYW5nZSksXG5cdFx0XHRcdGdyYXBoTWF4ID0gTWF0aC5jZWlsKG1heFZhbHVlIC8gKDEgKiBNYXRoLnBvdygxMCwgcmFuZ2VPcmRlck9mTWFnbml0dWRlKSkpICogTWF0aC5wb3coMTAsIHJhbmdlT3JkZXJPZk1hZ25pdHVkZSksXG5cdFx0XHRcdGdyYXBoTWluID0gKHN0YXJ0RnJvbVplcm8pID8gMCA6IE1hdGguZmxvb3IobWluVmFsdWUgLyAoMSAqIE1hdGgucG93KDEwLCByYW5nZU9yZGVyT2ZNYWduaXR1ZGUpKSkgKiBNYXRoLnBvdygxMCwgcmFuZ2VPcmRlck9mTWFnbml0dWRlKSxcblx0XHRcdFx0Z3JhcGhSYW5nZSA9IGdyYXBoTWF4IC0gZ3JhcGhNaW4sXG5cdFx0XHRcdHN0ZXBWYWx1ZSA9IE1hdGgucG93KDEwLCByYW5nZU9yZGVyT2ZNYWduaXR1ZGUpLFxuXHRcdFx0XHRudW1iZXJPZlN0ZXBzID0gTWF0aC5yb3VuZChncmFwaFJhbmdlIC8gc3RlcFZhbHVlKTtcblxuXHRcdFx0Ly9JZiB3ZSBoYXZlIG1vcmUgc3BhY2Ugb24gdGhlIGdyYXBoIHdlJ2xsIHVzZSBpdCB0byBnaXZlIG1vcmUgZGVmaW5pdGlvbiB0byB0aGUgZGF0YVxuXHRcdFx0d2hpbGUoKG51bWJlck9mU3RlcHMgPiBtYXhTdGVwcyB8fCAobnVtYmVyT2ZTdGVwcyAqIDIpIDwgbWF4U3RlcHMpICYmICFza2lwRml0dGluZykge1xuXHRcdFx0XHRpZihudW1iZXJPZlN0ZXBzID4gbWF4U3RlcHMpe1xuXHRcdFx0XHRcdHN0ZXBWYWx1ZSAqPTI7XG5cdFx0XHRcdFx0bnVtYmVyT2ZTdGVwcyA9IE1hdGgucm91bmQoZ3JhcGhSYW5nZS9zdGVwVmFsdWUpO1xuXHRcdFx0XHRcdC8vIERvbid0IGV2ZXIgZGVhbCB3aXRoIGEgZGVjaW1hbCBudW1iZXIgb2Ygc3RlcHMgLSBjYW5jZWwgZml0dGluZyBhbmQganVzdCB1c2UgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHN0ZXBzLlxuXHRcdFx0XHRcdGlmIChudW1iZXJPZlN0ZXBzICUgMSAhPT0gMCl7XG5cdFx0XHRcdFx0XHRza2lwRml0dGluZyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vV2UgY2FuIGZpdCBpbiBkb3VibGUgdGhlIGFtb3VudCBvZiBzY2FsZSBwb2ludHMgb24gdGhlIHNjYWxlXG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0Ly9JZiB1c2VyIGhhcyBkZWNsYXJlZCBpbnRzIG9ubHksIGFuZCB0aGUgc3RlcCB2YWx1ZSBpc24ndCBhIGRlY2ltYWxcblx0XHRcdFx0XHRpZiAoaW50ZWdlcnNPbmx5ICYmIHJhbmdlT3JkZXJPZk1hZ25pdHVkZSA+PSAwKXtcblx0XHRcdFx0XHRcdC8vSWYgdGhlIHVzZXIgaGFzIHNhaWQgaW50ZWdlcnMgb25seSwgd2UgbmVlZCB0byBjaGVjayB0aGF0IG1ha2luZyB0aGUgc2NhbGUgbW9yZSBncmFudWxhciB3b3VsZG4ndCBtYWtlIGl0IGEgZmxvYXRcblx0XHRcdFx0XHRcdGlmKHN0ZXBWYWx1ZS8yICUgMSA9PT0gMCl7XG5cdFx0XHRcdFx0XHRcdHN0ZXBWYWx1ZSAvPTI7XG5cdFx0XHRcdFx0XHRcdG51bWJlck9mU3RlcHMgPSBNYXRoLnJvdW5kKGdyYXBoUmFuZ2Uvc3RlcFZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vSWYgaXQgd291bGQgbWFrZSBpdCBhIGZsb2F0IGJyZWFrIG91dCBvZiB0aGUgbG9vcFxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vSWYgdGhlIHNjYWxlIGRvZXNuJ3QgaGF2ZSB0byBiZSBhbiBpbnQsIG1ha2UgdGhlIHNjYWxlIG1vcmUgZ3JhbnVsYXIgYW55d2F5LlxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRzdGVwVmFsdWUgLz0yO1xuXHRcdFx0XHRcdFx0bnVtYmVyT2ZTdGVwcyA9IE1hdGgucm91bmQoZ3JhcGhSYW5nZS9zdGVwVmFsdWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChza2lwRml0dGluZyl7XG5cdFx0XHRcdG51bWJlck9mU3RlcHMgPSBtaW5TdGVwcztcblx0XHRcdFx0c3RlcFZhbHVlID0gZ3JhcGhSYW5nZSAvIG51bWJlck9mU3RlcHM7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0ZXBzIDogbnVtYmVyT2ZTdGVwcyxcblx0XHRcdFx0c3RlcFZhbHVlIDogc3RlcFZhbHVlLFxuXHRcdFx0XHRtaW4gOiBncmFwaE1pbixcblx0XHRcdFx0bWF4XHQ6IGdyYXBoTWluICsgKG51bWJlck9mU3RlcHMgKiBzdGVwVmFsdWUpXG5cdFx0XHR9O1xuXG5cdFx0fSxcblx0XHQvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdFx0Ly8gQmxvd3MgdXAganNoaW50IGVycm9ycyBiYXNlZCBvbiB0aGUgbmV3IEZ1bmN0aW9uIGNvbnN0cnVjdG9yXG5cdFx0Ly9UZW1wbGF0aW5nIG1ldGhvZHNcblx0XHQvL0phdmFzY3JpcHQgbWljcm8gdGVtcGxhdGluZyBieSBKb2huIFJlc2lnIC0gc291cmNlIGF0IGh0dHA6Ly9lam9obi5vcmcvYmxvZy9qYXZhc2NyaXB0LW1pY3JvLXRlbXBsYXRpbmcvXG5cdFx0dGVtcGxhdGUgPSBoZWxwZXJzLnRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGVTdHJpbmcsIHZhbHVlc09iamVjdCl7XG5cblx0XHRcdC8vIElmIHRlbXBsYXRlU3RyaW5nIGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHN0cmluZy10ZW1wbGF0ZSAtIGNhbGwgdGhlIGZ1bmN0aW9uIGZvciB2YWx1ZXNPYmplY3RcblxuXHRcdFx0aWYodGVtcGxhdGVTdHJpbmcgaW5zdGFuY2VvZiBGdW5jdGlvbil7XG5cdFx0XHQgXHRyZXR1cm4gdGVtcGxhdGVTdHJpbmcodmFsdWVzT2JqZWN0KTtcblx0XHQgXHR9XG5cblx0XHRcdHZhciBjYWNoZSA9IHt9O1xuXHRcdFx0ZnVuY3Rpb24gdG1wbChzdHIsIGRhdGEpe1xuXHRcdFx0XHQvLyBGaWd1cmUgb3V0IGlmIHdlJ3JlIGdldHRpbmcgYSB0ZW1wbGF0ZSwgb3IgaWYgd2UgbmVlZCB0b1xuXHRcdFx0XHQvLyBsb2FkIHRoZSB0ZW1wbGF0ZSAtIGFuZCBiZSBzdXJlIHRvIGNhY2hlIHRoZSByZXN1bHQuXG5cdFx0XHRcdHZhciBmbiA9ICEvXFxXLy50ZXN0KHN0cikgP1xuXHRcdFx0XHRjYWNoZVtzdHJdID0gY2FjaGVbc3RyXSA6XG5cblx0XHRcdFx0Ly8gR2VuZXJhdGUgYSByZXVzYWJsZSBmdW5jdGlvbiB0aGF0IHdpbGwgc2VydmUgYXMgYSB0ZW1wbGF0ZVxuXHRcdFx0XHQvLyBnZW5lcmF0b3IgKGFuZCB3aGljaCB3aWxsIGJlIGNhY2hlZCkuXG5cdFx0XHRcdG5ldyBGdW5jdGlvbihcIm9ialwiLFxuXHRcdFx0XHRcdFwidmFyIHA9W10scHJpbnQ9ZnVuY3Rpb24oKXtwLnB1c2guYXBwbHkocCxhcmd1bWVudHMpO307XCIgK1xuXG5cdFx0XHRcdFx0Ly8gSW50cm9kdWNlIHRoZSBkYXRhIGFzIGxvY2FsIHZhcmlhYmxlcyB1c2luZyB3aXRoKCl7fVxuXHRcdFx0XHRcdFwid2l0aChvYmope3AucHVzaCgnXCIgK1xuXG5cdFx0XHRcdFx0Ly8gQ29udmVydCB0aGUgdGVtcGxhdGUgaW50byBwdXJlIEphdmFTY3JpcHRcblx0XHRcdFx0XHRzdHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxyXFx0XFxuXS9nLCBcIiBcIilcblx0XHRcdFx0XHRcdC5zcGxpdChcIjwlXCIpLmpvaW4oXCJcXHRcIilcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC8oKF58JT4pW15cXHRdKiknL2csIFwiJDFcXHJcIilcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHQ9KC4qPyklPi9nLCBcIicsJDEsJ1wiKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiXFx0XCIpLmpvaW4oXCInKTtcIilcblx0XHRcdFx0XHRcdC5zcGxpdChcIiU+XCIpLmpvaW4oXCJwLnB1c2goJ1wiKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiXFxyXCIpLmpvaW4oXCJcXFxcJ1wiKSArXG5cdFx0XHRcdFx0XCInKTt9cmV0dXJuIHAuam9pbignJyk7XCJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBQcm92aWRlIHNvbWUgYmFzaWMgY3VycnlpbmcgdG8gdGhlIHVzZXJcblx0XHRcdFx0cmV0dXJuIGRhdGEgPyBmbiggZGF0YSApIDogZm47XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdG1wbCh0ZW1wbGF0ZVN0cmluZyx2YWx1ZXNPYmplY3QpO1xuXHRcdH0sXG5cdFx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0XHRnZW5lcmF0ZUxhYmVscyA9IGhlbHBlcnMuZ2VuZXJhdGVMYWJlbHMgPSBmdW5jdGlvbih0ZW1wbGF0ZVN0cmluZyxudW1iZXJPZlN0ZXBzLGdyYXBoTWluLHN0ZXBWYWx1ZSl7XG5cdFx0XHR2YXIgbGFiZWxzQXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZTdGVwcyk7XG5cdFx0XHRpZiAobGFiZWxUZW1wbGF0ZVN0cmluZyl7XG5cdFx0XHRcdGVhY2gobGFiZWxzQXJyYXksZnVuY3Rpb24odmFsLGluZGV4KXtcblx0XHRcdFx0XHRsYWJlbHNBcnJheVtpbmRleF0gPSB0ZW1wbGF0ZSh0ZW1wbGF0ZVN0cmluZyx7dmFsdWU6IChncmFwaE1pbiArIChzdGVwVmFsdWUqKGluZGV4KzEpKSl9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGFiZWxzQXJyYXk7XG5cdFx0fSxcblx0XHQvLy0tQW5pbWF0aW9uIG1ldGhvZHNcblx0XHQvL0Vhc2luZyBmdW5jdGlvbnMgYWRhcHRlZCBmcm9tIFJvYmVydCBQZW5uZXIncyBlYXNpbmcgZXF1YXRpb25zXG5cdFx0Ly9odHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nL1xuXHRcdGVhc2luZ0VmZmVjdHMgPSBoZWxwZXJzLmVhc2luZ0VmZmVjdHMgPSB7XG5cdFx0XHRsaW5lYXI6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJblF1YWQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiB0ICogdDtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIC0xICogdCAqICh0IC0gMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA8IDEpIHJldHVybiAxIC8gMiAqIHQgKiB0O1xuXHRcdFx0XHRyZXR1cm4gLTEgLyAyICogKCgtLXQpICogKHQgLSAyKSAtIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkN1YmljOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gdCAqIHQgKiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5PdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA8IDEpIHJldHVybiAxIC8gMiAqIHQgKiB0ICogdDtcblx0XHRcdFx0cmV0dXJuIDEgLyAyICogKCh0IC09IDIpICogdCAqIHQgKyAyKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5RdWFydDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIHQgKiB0ICogdCAqIHQ7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gLTEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKiB0IC0gMSk7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gMSAvIDIgKiB0ICogdCAqIHQgKiB0O1xuXHRcdFx0XHRyZXR1cm4gLTEgLyAyICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAxICogKHQgLz0gMSkgKiB0ICogdCAqIHQgKiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRRdWludDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKiB0ICogdCArIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRpZiAoKHQgLz0gMSAvIDIpIDwgMSkgcmV0dXJuIDEgLyAyICogdCAqIHQgKiB0ICogdCAqIHQ7XG5cdFx0XHRcdHJldHVybiAxIC8gMiAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5TaW5lOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gLTEgKiBNYXRoLmNvcyh0IC8gMSAqIChNYXRoLlBJIC8gMikpICsgMTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0U2luZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiBNYXRoLnNpbih0IC8gMSAqIChNYXRoLlBJIC8gMikpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dFNpbmU6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAtMSAvIDIgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHQgLyAxKSAtIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkV4cG86IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAodCA9PT0gMCkgPyAxIDogMSAqIE1hdGgucG93KDIsIDEwICogKHQgLyAxIC0gMSkpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRFeHBvOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gKHQgPT09IDEpID8gMSA6IDEgKiAoLU1hdGgucG93KDIsIC0xMCAqIHQgLyAxKSArIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICh0ID09PSAwKSByZXR1cm4gMDtcblx0XHRcdFx0aWYgKHQgPT09IDEpIHJldHVybiAxO1xuXHRcdFx0XHRpZiAoKHQgLz0gMSAvIDIpIDwgMSkgcmV0dXJuIDEgLyAyICogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKTtcblx0XHRcdFx0cmV0dXJuIDEgLyAyICogKC1NYXRoLnBvdygyLCAtMTAgKiAtLXQpICsgMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluQ2lyYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKHQgPj0gMSkgcmV0dXJuIHQ7XG5cdFx0XHRcdHJldHVybiAtMSAqIChNYXRoLnNxcnQoMSAtICh0IC89IDEpICogdCkgLSAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0Q2lyYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiBNYXRoLnNxcnQoMSAtICh0ID0gdCAvIDEgLSAxKSAqIHQpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gLTEgLyAyICogKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSk7XG5cdFx0XHRcdHJldHVybiAxIC8gMiAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5FbGFzdGljOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0XHRcdHZhciBwID0gMDtcblx0XHRcdFx0dmFyIGEgPSAxO1xuXHRcdFx0XHRpZiAodCA9PT0gMCkgcmV0dXJuIDA7XG5cdFx0XHRcdGlmICgodCAvPSAxKSA9PSAxKSByZXR1cm4gMTtcblx0XHRcdFx0aWYgKCFwKSBwID0gMSAqIDAuMztcblx0XHRcdFx0aWYgKGEgPCBNYXRoLmFicygxKSkge1xuXHRcdFx0XHRcdGEgPSAxO1xuXHRcdFx0XHRcdHMgPSBwIC8gNDtcblx0XHRcdFx0fSBlbHNlIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbigxIC8gYSk7XG5cdFx0XHRcdHJldHVybiAtKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0IC09IDEpKSAqIE1hdGguc2luKCh0ICogMSAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0RWxhc3RpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0dmFyIHMgPSAxLjcwMTU4O1xuXHRcdFx0XHR2YXIgcCA9IDA7XG5cdFx0XHRcdHZhciBhID0gMTtcblx0XHRcdFx0aWYgKHQgPT09IDApIHJldHVybiAwO1xuXHRcdFx0XHRpZiAoKHQgLz0gMSkgPT0gMSkgcmV0dXJuIDE7XG5cdFx0XHRcdGlmICghcCkgcCA9IDEgKiAwLjM7XG5cdFx0XHRcdGlmIChhIDwgTWF0aC5hYnMoMSkpIHtcblx0XHRcdFx0XHRhID0gMTtcblx0XHRcdFx0XHRzID0gcCAvIDQ7XG5cdFx0XHRcdH0gZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xuXHRcdFx0XHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHQgKiAxIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKyAxO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEVsYXN0aWM6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRcdFx0dmFyIHAgPSAwO1xuXHRcdFx0XHR2YXIgYSA9IDE7XG5cdFx0XHRcdGlmICh0ID09PSAwKSByZXR1cm4gMDtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA9PSAyKSByZXR1cm4gMTtcblx0XHRcdFx0aWYgKCFwKSBwID0gMSAqICgwLjMgKiAxLjUpO1xuXHRcdFx0XHRpZiAoYSA8IE1hdGguYWJzKDEpKSB7XG5cdFx0XHRcdFx0YSA9IDE7XG5cdFx0XHRcdFx0cyA9IHAgLyA0O1xuXHRcdFx0XHR9IGVsc2UgcyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKDEgLyBhKTtcblx0XHRcdFx0aWYgKHQgPCAxKSByZXR1cm4gLTAuNSAqIChhICogTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAqIDEgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSk7XG5cdFx0XHRcdHJldHVybiBhICogTWF0aC5wb3coMiwgLTEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgKiAxIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAwLjUgKyAxO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkJhY2s6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRcdFx0cmV0dXJuIDEgKiAodCAvPSAxKSAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0QmFjazogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0dmFyIHMgPSAxLjcwMTU4O1xuXHRcdFx0XHRyZXR1cm4gMSAqICgodCA9IHQgLyAxIC0gMSkgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5PdXRCYWNrOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gMSAvIDIgKiAodCAqIHQgKiAoKChzICo9ICgxLjUyNSkpICsgMSkgKiB0IC0gcykpO1xuXHRcdFx0XHRyZXR1cm4gMSAvIDIgKiAoKHQgLT0gMikgKiB0ICogKCgocyAqPSAoMS41MjUpKSArIDEpICogdCArIHMpICsgMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluQm91bmNlOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gMSAtIGVhc2luZ0VmZmVjdHMuZWFzZU91dEJvdW5jZSgxIC0gdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZU91dEJvdW5jZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEpIDwgKDEgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqIHQgKiB0KTtcblx0XHRcdFx0fSBlbHNlIGlmICh0IDwgKDIgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqICh0IC09ICgxLjUgLyAyLjc1KSkgKiB0ICsgMC43NSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodCA8ICgyLjUgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqICh0IC09ICgyLjI1IC8gMi43NSkpICogdCArIDAuOTM3NSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIDEgKiAoNy41NjI1ICogKHQgLT0gKDIuNjI1IC8gMi43NSkpICogdCArIDAuOTg0Mzc1KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEJvdW5jZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKHQgPCAxIC8gMikgcmV0dXJuIGVhc2luZ0VmZmVjdHMuZWFzZUluQm91bmNlKHQgKiAyKSAqIDAuNTtcblx0XHRcdFx0cmV0dXJuIGVhc2luZ0VmZmVjdHMuZWFzZU91dEJvdW5jZSh0ICogMiAtIDEpICogMC41ICsgMSAqIDAuNTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vUmVxdWVzdCBhbmltYXRpb24gcG9seWZpbGwgLSBodHRwOi8vd3d3LnBhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cblx0XHRyZXF1ZXN0QW5pbUZyYW1lID0gaGVscGVycy5yZXF1ZXN0QW5pbUZyYW1lID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0XHR3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xuXHRcdFx0XHR9O1xuXHRcdH0pKCksXG5cdFx0Y2FuY2VsQW5pbUZyYW1lID0gaGVscGVycy5jYW5jZWxBbmltRnJhbWUgPSAoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0XHR3aW5kb3cub0NhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy5jbGVhclRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7XG5cdFx0XHRcdH07XG5cdFx0fSkoKSxcblx0XHRhbmltYXRpb25Mb29wID0gaGVscGVycy5hbmltYXRpb25Mb29wID0gZnVuY3Rpb24oY2FsbGJhY2ssdG90YWxTdGVwcyxlYXNpbmdTdHJpbmcsb25Qcm9ncmVzcyxvbkNvbXBsZXRlLGNoYXJ0SW5zdGFuY2Upe1xuXG5cdFx0XHR2YXIgY3VycmVudFN0ZXAgPSAwLFxuXHRcdFx0XHRlYXNpbmdGdW5jdGlvbiA9IGVhc2luZ0VmZmVjdHNbZWFzaW5nU3RyaW5nXSB8fCBlYXNpbmdFZmZlY3RzLmxpbmVhcjtcblxuXHRcdFx0dmFyIGFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0Y3VycmVudFN0ZXArKztcblx0XHRcdFx0dmFyIHN0ZXBEZWNpbWFsID0gY3VycmVudFN0ZXAvdG90YWxTdGVwcztcblx0XHRcdFx0dmFyIGVhc2VEZWNpbWFsID0gZWFzaW5nRnVuY3Rpb24oc3RlcERlY2ltYWwpO1xuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoY2hhcnRJbnN0YW5jZSxlYXNlRGVjaW1hbCxzdGVwRGVjaW1hbCwgY3VycmVudFN0ZXApO1xuXHRcdFx0XHRvblByb2dyZXNzLmNhbGwoY2hhcnRJbnN0YW5jZSxlYXNlRGVjaW1hbCxzdGVwRGVjaW1hbCk7XG5cdFx0XHRcdGlmIChjdXJyZW50U3RlcCA8IHRvdGFsU3RlcHMpe1xuXHRcdFx0XHRcdGNoYXJ0SW5zdGFuY2UuYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbUZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcblx0XHRcdFx0fSBlbHNle1xuXHRcdFx0XHRcdG9uQ29tcGxldGUuYXBwbHkoY2hhcnRJbnN0YW5jZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcblx0XHR9LFxuXHRcdC8vLS0gRE9NIG1ldGhvZHNcblx0XHRnZXRSZWxhdGl2ZVBvc2l0aW9uID0gaGVscGVycy5nZXRSZWxhdGl2ZVBvc2l0aW9uID0gZnVuY3Rpb24oZXZ0KXtcblx0XHRcdHZhciBtb3VzZVgsIG1vdXNlWTtcblx0XHRcdHZhciBlID0gZXZ0Lm9yaWdpbmFsRXZlbnQgfHwgZXZ0LFxuXHRcdFx0XHRjYW52YXMgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCxcblx0XHRcdFx0Ym91bmRpbmdSZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRpZiAoZS50b3VjaGVzKXtcblx0XHRcdFx0bW91c2VYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblx0XHRcdFx0bW91c2VZID0gZS50b3VjaGVzWzBdLmNsaWVudFkgLSBib3VuZGluZ1JlY3QudG9wO1xuXG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRtb3VzZVggPSBlLmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblx0XHRcdFx0bW91c2VZID0gZS5jbGllbnRZIC0gYm91bmRpbmdSZWN0LnRvcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eCA6IG1vdXNlWCxcblx0XHRcdFx0eSA6IG1vdXNlWVxuXHRcdFx0fTtcblxuXHRcdH0sXG5cdFx0YWRkRXZlbnQgPSBoZWxwZXJzLmFkZEV2ZW50ID0gZnVuY3Rpb24obm9kZSxldmVudFR5cGUsbWV0aG9kKXtcblx0XHRcdGlmIChub2RlLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0XHRub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLG1ldGhvZCk7XG5cdFx0XHR9IGVsc2UgaWYgKG5vZGUuYXR0YWNoRXZlbnQpe1xuXHRcdFx0XHRub2RlLmF0dGFjaEV2ZW50KFwib25cIitldmVudFR5cGUsIG1ldGhvZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlW1wib25cIitldmVudFR5cGVdID0gbWV0aG9kO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVtb3ZlRXZlbnQgPSBoZWxwZXJzLnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24obm9kZSwgZXZlbnRUeXBlLCBoYW5kbGVyKXtcblx0XHRcdGlmIChub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0XHRub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKG5vZGUuZGV0YWNoRXZlbnQpe1xuXHRcdFx0XHRub2RlLmRldGFjaEV2ZW50KFwib25cIitldmVudFR5cGUsaGFuZGxlcik7XG5cdFx0XHR9IGVsc2V7XG5cdFx0XHRcdG5vZGVbXCJvblwiICsgZXZlbnRUeXBlXSA9IG5vb3A7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRiaW5kRXZlbnRzID0gaGVscGVycy5iaW5kRXZlbnRzID0gZnVuY3Rpb24oY2hhcnRJbnN0YW5jZSwgYXJyYXlPZkV2ZW50cywgaGFuZGxlcil7XG5cdFx0XHQvLyBDcmVhdGUgdGhlIGV2ZW50cyBvYmplY3QgaWYgaXQncyBub3QgYWxyZWFkeSBwcmVzZW50XG5cdFx0XHRpZiAoIWNoYXJ0SW5zdGFuY2UuZXZlbnRzKSBjaGFydEluc3RhbmNlLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRlYWNoKGFycmF5T2ZFdmVudHMsZnVuY3Rpb24oZXZlbnROYW1lKXtcblx0XHRcdFx0Y2hhcnRJbnN0YW5jZS5ldmVudHNbZXZlbnROYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0aGFuZGxlci5hcHBseShjaGFydEluc3RhbmNlLCBhcmd1bWVudHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRhZGRFdmVudChjaGFydEluc3RhbmNlLmNoYXJ0LmNhbnZhcyxldmVudE5hbWUsY2hhcnRJbnN0YW5jZS5ldmVudHNbZXZlbnROYW1lXSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHVuYmluZEV2ZW50cyA9IGhlbHBlcnMudW5iaW5kRXZlbnRzID0gZnVuY3Rpb24gKGNoYXJ0SW5zdGFuY2UsIGFycmF5T2ZFdmVudHMpIHtcblx0XHRcdGVhY2goYXJyYXlPZkV2ZW50cywgZnVuY3Rpb24oaGFuZGxlcixldmVudE5hbWUpe1xuXHRcdFx0XHRyZW1vdmVFdmVudChjaGFydEluc3RhbmNlLmNoYXJ0LmNhbnZhcywgZXZlbnROYW1lLCBoYW5kbGVyKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bVdpZHRoID0gaGVscGVycy5nZXRNYXhpbXVtV2lkdGggPSBmdW5jdGlvbihkb21Ob2RlKXtcblx0XHRcdHZhciBjb250YWluZXIgPSBkb21Ob2RlLnBhcmVudE5vZGU7XG5cdFx0XHQvLyBUT0RPID0gY2hlY2sgY3Jvc3MgYnJvd3NlciBzdHVmZiB3aXRoIHRoaXMuXG5cdFx0XHRyZXR1cm4gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bUhlaWdodCA9IGhlbHBlcnMuZ2V0TWF4aW11bUhlaWdodCA9IGZ1bmN0aW9uKGRvbU5vZGUpe1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IGRvbU5vZGUucGFyZW50Tm9kZTtcblx0XHRcdC8vIFRPRE8gPSBjaGVjayBjcm9zcyBicm93c2VyIHN0dWZmIHdpdGggdGhpcy5cblx0XHRcdHJldHVybiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bVNpemUgPSBoZWxwZXJzLmdldE1heGltdW1TaXplID0gaGVscGVycy5nZXRNYXhpbXVtV2lkdGgsIC8vIGxlZ2FjeSBzdXBwb3J0XG5cdFx0cmV0aW5hU2NhbGUgPSBoZWxwZXJzLnJldGluYVNjYWxlID0gZnVuY3Rpb24oY2hhcnQpe1xuXHRcdFx0dmFyIGN0eCA9IGNoYXJ0LmN0eCxcblx0XHRcdFx0d2lkdGggPSBjaGFydC5jYW52YXMud2lkdGgsXG5cdFx0XHRcdGhlaWdodCA9IGNoYXJ0LmNhbnZhcy5oZWlnaHQ7XG5cblx0XHRcdGlmICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykge1xuXHRcdFx0XHRjdHguY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG5cdFx0XHRcdGN0eC5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgXCJweFwiO1xuXHRcdFx0XHRjdHguY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXHRcdFx0XHRjdHguY2FudmFzLndpZHRoID0gd2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblx0XHRcdFx0Y3R4LnNjYWxlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLy0tIENhbnZhcyBtZXRob2RzXG5cdFx0Y2xlYXIgPSBoZWxwZXJzLmNsZWFyID0gZnVuY3Rpb24oY2hhcnQpe1xuXHRcdFx0Y2hhcnQuY3R4LmNsZWFyUmVjdCgwLDAsY2hhcnQud2lkdGgsY2hhcnQuaGVpZ2h0KTtcblx0XHR9LFxuXHRcdGZvbnRTdHJpbmcgPSBoZWxwZXJzLmZvbnRTdHJpbmcgPSBmdW5jdGlvbihwaXhlbFNpemUsZm9udFN0eWxlLGZvbnRGYW1pbHkpe1xuXHRcdFx0cmV0dXJuIGZvbnRTdHlsZSArIFwiIFwiICsgcGl4ZWxTaXplK1wicHggXCIgKyBmb250RmFtaWx5O1xuXHRcdH0sXG5cdFx0bG9uZ2VzdFRleHQgPSBoZWxwZXJzLmxvbmdlc3RUZXh0ID0gZnVuY3Rpb24oY3R4LGZvbnQsYXJyYXlPZlN0cmluZ3Mpe1xuXHRcdFx0Y3R4LmZvbnQgPSBmb250O1xuXHRcdFx0dmFyIGxvbmdlc3QgPSAwO1xuXHRcdFx0ZWFjaChhcnJheU9mU3RyaW5ncyxmdW5jdGlvbihzdHJpbmcpe1xuXHRcdFx0XHR2YXIgdGV4dFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KHN0cmluZykud2lkdGg7XG5cdFx0XHRcdGxvbmdlc3QgPSAodGV4dFdpZHRoID4gbG9uZ2VzdCkgPyB0ZXh0V2lkdGggOiBsb25nZXN0O1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbG9uZ2VzdDtcblx0XHR9LFxuXHRcdGRyYXdSb3VuZGVkUmVjdGFuZ2xlID0gaGVscGVycy5kcmF3Um91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uKGN0eCx4LHksd2lkdGgsaGVpZ2h0LHJhZGl1cyl7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKHggKyByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xuXHRcdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcblx0XHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzKTtcblx0XHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdH07XG5cblxuXHQvL1N0b3JlIGEgcmVmZXJlbmNlIHRvIGVhY2ggaW5zdGFuY2UgLSBhbGxvd2luZyB1cyB0byBnbG9iYWxseSByZXNpemUgY2hhcnQgaW5zdGFuY2VzIG9uIHdpbmRvdyByZXNpemUuXG5cdC8vRGVzdHJveSBtZXRob2Qgb24gdGhlIGNoYXJ0IHdpbGwgcmVtb3ZlIHRoZSBpbnN0YW5jZSBvZiB0aGUgY2hhcnQgZnJvbSB0aGlzIHJlZmVyZW5jZS5cblx0Q2hhcnQuaW5zdGFuY2VzID0ge307XG5cblx0Q2hhcnQuVHlwZSA9IGZ1bmN0aW9uKGRhdGEsb3B0aW9ucyxjaGFydCl7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLmNoYXJ0ID0gY2hhcnQ7XG5cdFx0dGhpcy5pZCA9IHVpZCgpO1xuXHRcdC8vQWRkIHRoZSBjaGFydCBpbnN0YW5jZSB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxuXHRcdENoYXJ0Lmluc3RhbmNlc1t0aGlzLmlkXSA9IHRoaXM7XG5cblx0XHQvLyBJbml0aWFsaXplIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBhIGNoYXJ0IHR5cGUgaXMgY3JlYXRlZFxuXHRcdC8vIEJ5IGRlZmF1bHQgaXQgaXMgYSBubyBvcCwgYnV0IGl0IHNob3VsZCBiZSBleHRlbmRlZFxuXHRcdGlmIChvcHRpb25zLnJlc3BvbnNpdmUpe1xuXHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHR9XG5cdFx0dGhpcy5pbml0aWFsaXplLmNhbGwodGhpcyxkYXRhKTtcblx0fTtcblxuXHQvL0NvcmUgbWV0aG9kcyB0aGF0J2xsIGJlIGEgcGFydCBvZiBldmVyeSBjaGFydCB0eXBlXG5cdGV4dGVuZChDaGFydC5UeXBlLnByb3RvdHlwZSx7XG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSxcblx0XHRjbGVhciA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRjbGVhcih0aGlzLmNoYXJ0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RvcCA6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBTdG9wcyBhbnkgY3VycmVudCBhbmltYXRpb24gbG9vcCBvY2N1cmluZ1xuXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuYW5pbWF0aW9uRnJhbWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRyZXNpemUgOiBmdW5jdGlvbihjYWxsYmFjayl7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHRcdHZhciBjYW52YXMgPSB0aGlzLmNoYXJ0LmNhbnZhcyxcblx0XHRcdFx0bmV3V2lkdGggPSBnZXRNYXhpbXVtV2lkdGgodGhpcy5jaGFydC5jYW52YXMpLFxuXHRcdFx0XHRuZXdIZWlnaHQgPSB0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyA/IG5ld1dpZHRoIC8gdGhpcy5jaGFydC5hc3BlY3RSYXRpbyA6IGdldE1heGltdW1IZWlnaHQodGhpcy5jaGFydC5jYW52YXMpO1xuXG5cdFx0XHRjYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHRjYW52YXMuaGVpZ2h0ID0gdGhpcy5jaGFydC5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cblx0XHRcdHJldGluYVNjYWxlKHRoaXMuY2hhcnQpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0cmVmbG93IDogbm9vcCxcblx0XHRyZW5kZXIgOiBmdW5jdGlvbihyZWZsb3cpe1xuXHRcdFx0aWYgKHJlZmxvdyl7XG5cdFx0XHRcdHRoaXMucmVmbG93KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbiAmJiAhcmVmbG93KXtcblx0XHRcdFx0aGVscGVycy5hbmltYXRpb25Mb29wKFxuXHRcdFx0XHRcdHRoaXMuZHJhdyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3RlcHMsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmFuaW1hdGlvbkVhc2luZyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25BbmltYXRpb25Qcm9ncmVzcyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25BbmltYXRpb25Db21wbGV0ZSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHR0aGlzLmRyYXcoKTtcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uQW5pbWF0aW9uQ29tcGxldGUuY2FsbCh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Z2VuZXJhdGVMZWdlbmQgOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlKHRoaXMub3B0aW9ucy5sZWdlbmRUZW1wbGF0ZSx0aGlzKTtcblx0XHR9LFxuXHRcdGRlc3Ryb3kgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5jbGVhcigpO1xuXHRcdFx0dW5iaW5kRXZlbnRzKHRoaXMsIHRoaXMuZXZlbnRzKTtcblx0XHRcdHZhciBjYW52YXMgPSB0aGlzLmNoYXJ0LmNhbnZhcztcblxuXHRcdFx0Ly8gUmVzZXQgY2FudmFzIGhlaWdodC93aWR0aCBhdHRyaWJ1dGVzIHN0YXJ0cyBhIGZyZXNoIHdpdGggdGhlIGNhbnZhcyBjb250ZXh0XG5cdFx0XHRjYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoO1xuXHRcdFx0Y2FudmFzLmhlaWdodCA9IHRoaXMuY2hhcnQuaGVpZ2h0O1xuXG5cdFx0XHQvLyA8IElFOSBkb2Vzbid0IHN1cHBvcnQgcmVtb3ZlUHJvcGVydHlcblx0XHRcdGlmIChjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkpIHtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCd3aWR0aCcpO1xuXHRcdFx0XHRjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2hlaWdodCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnd2lkdGgnKTtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnaGVpZ2h0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBDaGFydC5pbnN0YW5jZXNbdGhpcy5pZF07XG5cdFx0fSxcblx0XHRzaG93VG9vbHRpcCA6IGZ1bmN0aW9uKENoYXJ0RWxlbWVudHMsIGZvcmNlUmVkcmF3KXtcblx0XHRcdC8vIE9ubHkgcmVkcmF3IHRoZSBjaGFydCBpZiB3ZSd2ZSBhY3R1YWxseSBjaGFuZ2VkIHdoYXQgd2UncmUgaG92ZXJpbmcgb24uXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuYWN0aXZlRWxlbWVudHMgPT09ICd1bmRlZmluZWQnKSB0aGlzLmFjdGl2ZUVsZW1lbnRzID0gW107XG5cblx0XHRcdHZhciBpc0NoYW5nZWQgPSAoZnVuY3Rpb24oRWxlbWVudHMpe1xuXHRcdFx0XHR2YXIgY2hhbmdlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChFbGVtZW50cy5sZW5ndGggIT09IHRoaXMuYWN0aXZlRWxlbWVudHMubGVuZ3RoKXtcblx0XHRcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gY2hhbmdlZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVhY2goRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KXtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAhPT0gdGhpcy5hY3RpdmVFbGVtZW50c1tpbmRleF0pe1xuXHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGNoYW5nZWQ7XG5cdFx0XHR9KS5jYWxsKHRoaXMsIENoYXJ0RWxlbWVudHMpO1xuXG5cdFx0XHRpZiAoIWlzQ2hhbmdlZCAmJiAhZm9yY2VSZWRyYXcpe1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHR0aGlzLmFjdGl2ZUVsZW1lbnRzID0gQ2hhcnRFbGVtZW50cztcblx0XHRcdH1cblx0XHRcdHRoaXMuZHJhdygpO1xuXHRcdFx0aWYodGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzKXtcblx0XHRcdFx0dGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzKGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdGlmIChDaGFydEVsZW1lbnRzLmxlbmd0aCA+IDApe1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG11bHRpcGxlIGRhdGFzZXRzLCBzaG93IGEgTXVsdGlUb29sdGlwIGZvciBhbGwgb2YgdGhlIGRhdGEgcG9pbnRzIGF0IHRoYXQgaW5kZXhcblx0XHRcdFx0aWYgKHRoaXMuZGF0YXNldHMgJiYgdGhpcy5kYXRhc2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGFBcnJheSxcblx0XHRcdFx0XHRcdGRhdGFJbmRleDtcblxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSB0aGlzLmRhdGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0XHRkYXRhQXJyYXkgPSB0aGlzLmRhdGFzZXRzW2ldLnBvaW50cyB8fCB0aGlzLmRhdGFzZXRzW2ldLmJhcnMgfHwgdGhpcy5kYXRhc2V0c1tpXS5zZWdtZW50cztcblx0XHRcdFx0XHRcdGRhdGFJbmRleCA9IGluZGV4T2YoZGF0YUFycmF5LCBDaGFydEVsZW1lbnRzWzBdKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhSW5kZXggIT09IC0xKXtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciB0b29sdGlwTGFiZWxzID0gW10sXG5cdFx0XHRcdFx0XHR0b29sdGlwQ29sb3JzID0gW10sXG5cdFx0XHRcdFx0XHRtZWRpYW5Qb3NpdGlvbiA9IChmdW5jdGlvbihpbmRleCkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEdldCBhbGwgdGhlIHBvaW50cyBhdCB0aGF0IHBhcnRpY3VsYXIgaW5kZXhcblx0XHRcdFx0XHRcdFx0dmFyIEVsZW1lbnRzID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0eFBvc2l0aW9ucyA9IFtdLFxuXHRcdFx0XHRcdFx0XHRcdHlQb3NpdGlvbnMgPSBbXSxcblx0XHRcdFx0XHRcdFx0XHR4TWF4LFxuXHRcdFx0XHRcdFx0XHRcdHlNYXgsXG5cdFx0XHRcdFx0XHRcdFx0eE1pbixcblx0XHRcdFx0XHRcdFx0XHR5TWluO1xuXHRcdFx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUNvbGxlY3Rpb24gPSBkYXRhc2V0LnBvaW50cyB8fCBkYXRhc2V0LmJhcnMgfHwgZGF0YXNldC5zZWdtZW50cztcblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YUNvbGxlY3Rpb25bZGF0YUluZGV4XSAmJiBkYXRhQ29sbGVjdGlvbltkYXRhSW5kZXhdLmhhc1ZhbHVlKCkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0RWxlbWVudHMucHVzaChkYXRhQ29sbGVjdGlvbltkYXRhSW5kZXhdKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHhQb3NpdGlvbnMucHVzaChlbGVtZW50LngpO1xuXHRcdFx0XHRcdFx0XHRcdHlQb3NpdGlvbnMucHVzaChlbGVtZW50LnkpO1xuXG5cblx0XHRcdFx0XHRcdFx0XHQvL0luY2x1ZGUgYW55IGNvbG91ciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBMYWJlbHMucHVzaChoZWxwZXJzLnRlbXBsYXRlKHRoaXMub3B0aW9ucy5tdWx0aVRvb2x0aXBUZW1wbGF0ZSwgZWxlbWVudCkpO1xuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBDb2xvcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaWxsOiBlbGVtZW50Ll9zYXZlZC5maWxsQ29sb3IgfHwgZWxlbWVudC5maWxsQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJva2U6IGVsZW1lbnQuX3NhdmVkLnN0cm9rZUNvbG9yIHx8IGVsZW1lbnQuc3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR9LCB0aGlzKTtcblxuXHRcdFx0XHRcdFx0XHR5TWluID0gbWluKHlQb3NpdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR5TWF4ID0gbWF4KHlQb3NpdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRcdHhNaW4gPSBtaW4oeFBvc2l0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdHhNYXggPSBtYXgoeFBvc2l0aW9ucyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHR4OiAoeE1pbiA+IHRoaXMuY2hhcnQud2lkdGgvMikgPyB4TWluIDogeE1heCxcblx0XHRcdFx0XHRcdFx0XHR5OiAoeU1pbiArIHlNYXgpLzJcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLmNhbGwodGhpcywgZGF0YUluZGV4KTtcblxuXHRcdFx0XHRcdG5ldyBDaGFydC5NdWx0aVRvb2x0aXAoe1xuXHRcdFx0XHRcdFx0eDogbWVkaWFuUG9zaXRpb24ueCxcblx0XHRcdFx0XHRcdHk6IG1lZGlhblBvc2l0aW9uLnksXG5cdFx0XHRcdFx0XHR4UGFkZGluZzogdGhpcy5vcHRpb25zLnRvb2x0aXBYUGFkZGluZyxcblx0XHRcdFx0XHRcdHlQYWRkaW5nOiB0aGlzLm9wdGlvbnMudG9vbHRpcFlQYWRkaW5nLFxuXHRcdFx0XHRcdFx0eE9mZnNldDogdGhpcy5vcHRpb25zLnRvb2x0aXBYT2Zmc2V0LFxuXHRcdFx0XHRcdFx0ZmlsbENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZpbGxDb2xvcixcblx0XHRcdFx0XHRcdHRleHRDb2xvcjogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250Q29sb3IsXG5cdFx0XHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLm9wdGlvbnMudG9vbHRpcEZvbnRGYW1pbHksXG5cdFx0XHRcdFx0XHRmb250U3R5bGU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFN0eWxlLFxuXHRcdFx0XHRcdFx0Zm9udFNpemU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFNpemUsXG5cdFx0XHRcdFx0XHR0aXRsZVRleHRDb2xvcjogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRDb2xvcixcblx0XHRcdFx0XHRcdHRpdGxlRm9udEZhbWlseTogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRGYW1pbHksXG5cdFx0XHRcdFx0XHR0aXRsZUZvbnRTdHlsZTogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRTdHlsZSxcblx0XHRcdFx0XHRcdHRpdGxlRm9udFNpemU6IHRoaXMub3B0aW9ucy50b29sdGlwVGl0bGVGb250U2l6ZSxcblx0XHRcdFx0XHRcdGNvcm5lclJhZGl1czogdGhpcy5vcHRpb25zLnRvb2x0aXBDb3JuZXJSYWRpdXMsXG5cdFx0XHRcdFx0XHRsYWJlbHM6IHRvb2x0aXBMYWJlbHMsXG5cdFx0XHRcdFx0XHRsZWdlbmRDb2xvcnM6IHRvb2x0aXBDb2xvcnMsXG5cdFx0XHRcdFx0XHRsZWdlbmRDb2xvckJhY2tncm91bmQgOiB0aGlzLm9wdGlvbnMubXVsdGlUb29sdGlwS2V5QmFja2dyb3VuZCxcblx0XHRcdFx0XHRcdHRpdGxlOiBDaGFydEVsZW1lbnRzWzBdLmxhYmVsLFxuXHRcdFx0XHRcdFx0Y2hhcnQ6IHRoaXMuY2hhcnQsXG5cdFx0XHRcdFx0XHRjdHg6IHRoaXMuY2hhcnQuY3R4LFxuXHRcdFx0XHRcdFx0Y3VzdG9tOiB0aGlzLm9wdGlvbnMuY3VzdG9tVG9vbHRpcHNcblx0XHRcdFx0XHR9KS5kcmF3KCk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlYWNoKENoYXJ0RWxlbWVudHMsIGZ1bmN0aW9uKEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdHZhciB0b29sdGlwUG9zaXRpb24gPSBFbGVtZW50LnRvb2x0aXBQb3NpdGlvbigpO1xuXHRcdFx0XHRcdFx0bmV3IENoYXJ0LlRvb2x0aXAoe1xuXHRcdFx0XHRcdFx0XHR4OiBNYXRoLnJvdW5kKHRvb2x0aXBQb3NpdGlvbi54KSxcblx0XHRcdFx0XHRcdFx0eTogTWF0aC5yb3VuZCh0b29sdGlwUG9zaXRpb24ueSksXG5cdFx0XHRcdFx0XHRcdHhQYWRkaW5nOiB0aGlzLm9wdGlvbnMudG9vbHRpcFhQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHR5UGFkZGluZzogdGhpcy5vcHRpb25zLnRvb2x0aXBZUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZmlsbENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZpbGxDb2xvcixcblx0XHRcdFx0XHRcdFx0dGV4dENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZvbnRDb2xvcixcblx0XHRcdFx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250RmFtaWx5LFxuXHRcdFx0XHRcdFx0XHRmb250U3R5bGU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFN0eWxlLFxuXHRcdFx0XHRcdFx0XHRmb250U2l6ZTogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250U2l6ZSxcblx0XHRcdFx0XHRcdFx0Y2FyZXRIZWlnaHQ6IHRoaXMub3B0aW9ucy50b29sdGlwQ2FyZXRTaXplLFxuXHRcdFx0XHRcdFx0XHRjb3JuZXJSYWRpdXM6IHRoaXMub3B0aW9ucy50b29sdGlwQ29ybmVyUmFkaXVzLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0ZW1wbGF0ZSh0aGlzLm9wdGlvbnMudG9vbHRpcFRlbXBsYXRlLCBFbGVtZW50KSxcblx0XHRcdFx0XHRcdFx0Y2hhcnQ6IHRoaXMuY2hhcnQsXG5cdFx0XHRcdFx0XHRcdGN1c3RvbTogdGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzXG5cdFx0XHRcdFx0XHR9KS5kcmF3KCk7XG5cdFx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dG9CYXNlNjRJbWFnZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5jaGFydC5jYW52YXMudG9EYXRhVVJMLmFwcGx5KHRoaXMuY2hhcnQuY2FudmFzLCBhcmd1bWVudHMpO1xuXHRcdH1cblx0fSk7XG5cblx0Q2hhcnQuVHlwZS5leHRlbmQgPSBmdW5jdGlvbihleHRlbnNpb25zKXtcblxuXHRcdHZhciBwYXJlbnQgPSB0aGlzO1xuXG5cdFx0dmFyIENoYXJ0VHlwZSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHR9O1xuXG5cdFx0Ly9Db3B5IHRoZSBwcm90b3R5cGUgb2JqZWN0IG9mIHRoZSB0aGlzIGNsYXNzXG5cdFx0Q2hhcnRUeXBlLnByb3RvdHlwZSA9IGNsb25lKHBhcmVudC5wcm90b3R5cGUpO1xuXHRcdC8vTm93IG92ZXJ3cml0ZSBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIGNsYXNzIHdpdGggdGhlIG5ldyBleHRlbnNpb25zXG5cdFx0ZXh0ZW5kKENoYXJ0VHlwZS5wcm90b3R5cGUsIGV4dGVuc2lvbnMpO1xuXG5cdFx0Q2hhcnRUeXBlLmV4dGVuZCA9IENoYXJ0LlR5cGUuZXh0ZW5kO1xuXG5cdFx0aWYgKGV4dGVuc2lvbnMubmFtZSB8fCBwYXJlbnQucHJvdG90eXBlLm5hbWUpe1xuXG5cdFx0XHR2YXIgY2hhcnROYW1lID0gZXh0ZW5zaW9ucy5uYW1lIHx8IHBhcmVudC5wcm90b3R5cGUubmFtZTtcblx0XHRcdC8vQXNzaWduIGFueSBwb3RlbnRpYWwgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIG5ldyBjaGFydCB0eXBlXG5cblx0XHRcdC8vSWYgbm9uZSBhcmUgZGVmaW5lZCwgd2UnbGwgdXNlIGEgY2xvbmUgb2YgdGhlIGNoYXJ0IHR5cGUgdGhpcyBpcyBiZWluZyBleHRlbmRlZCBmcm9tLlxuXHRcdFx0Ly9JLmUuIGlmIHdlIGV4dGVuZCBhIGxpbmUgY2hhcnQsIHdlJ2xsIHVzZSB0aGUgZGVmYXVsdHMgZnJvbSB0aGUgbGluZSBjaGFydCBpZiBvdXIgbmV3IGNoYXJ0XG5cdFx0XHQvL2RvZXNuJ3QgZGVmaW5lIHNvbWUgZGVmYXVsdHMgb2YgdGhlaXIgb3duLlxuXG5cdFx0XHR2YXIgYmFzZURlZmF1bHRzID0gKENoYXJ0LmRlZmF1bHRzW3BhcmVudC5wcm90b3R5cGUubmFtZV0pID8gY2xvbmUoQ2hhcnQuZGVmYXVsdHNbcGFyZW50LnByb3RvdHlwZS5uYW1lXSkgOiB7fTtcblxuXHRcdFx0Q2hhcnQuZGVmYXVsdHNbY2hhcnROYW1lXSA9IGV4dGVuZChiYXNlRGVmYXVsdHMsZXh0ZW5zaW9ucy5kZWZhdWx0cyk7XG5cblx0XHRcdENoYXJ0LnR5cGVzW2NoYXJ0TmFtZV0gPSBDaGFydFR5cGU7XG5cblx0XHRcdC8vUmVnaXN0ZXIgdGhpcyBuZXcgY2hhcnQgdHlwZSBpbiB0aGUgQ2hhcnQgcHJvdG90eXBlXG5cdFx0XHRDaGFydC5wcm90b3R5cGVbY2hhcnROYW1lXSA9IGZ1bmN0aW9uKGRhdGEsb3B0aW9ucyl7XG5cdFx0XHRcdHZhciBjb25maWcgPSBtZXJnZShDaGFydC5kZWZhdWx0cy5nbG9iYWwsIENoYXJ0LmRlZmF1bHRzW2NoYXJ0TmFtZV0sIG9wdGlvbnMgfHwge30pO1xuXHRcdFx0XHRyZXR1cm4gbmV3IENoYXJ0VHlwZShkYXRhLGNvbmZpZyx0aGlzKTtcblx0XHRcdH07XG5cdFx0fSBlbHNle1xuXHRcdFx0d2FybihcIk5hbWUgbm90IHByb3ZpZGVkIGZvciB0aGlzIGNoYXJ0LCBzbyBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFyZW50O1xuXHR9O1xuXG5cdENoYXJ0LkVsZW1lbnQgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKXtcblx0XHRleHRlbmQodGhpcyxjb25maWd1cmF0aW9uKTtcblx0XHR0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXHRcdHRoaXMuc2F2ZSgpO1xuXHR9O1xuXHRleHRlbmQoQ2hhcnQuRWxlbWVudC5wcm90b3R5cGUse1xuXHRcdGluaXRpYWxpemUgOiBmdW5jdGlvbigpe30sXG5cdFx0cmVzdG9yZSA6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHRcdGlmICghcHJvcHMpe1xuXHRcdFx0XHRleHRlbmQodGhpcyx0aGlzLl9zYXZlZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlYWNoKHByb3BzLGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRcdFx0dGhpc1trZXldID0gdGhpcy5fc2F2ZWRba2V5XTtcblx0XHRcdFx0fSx0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2F2ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLl9zYXZlZCA9IGNsb25lKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3NhdmVkLl9zYXZlZDtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24obmV3UHJvcHMpe1xuXHRcdFx0ZWFjaChuZXdQcm9wcyxmdW5jdGlvbih2YWx1ZSxrZXkpe1xuXHRcdFx0XHR0aGlzLl9zYXZlZFtrZXldID0gdGhpc1trZXldO1xuXHRcdFx0XHR0aGlzW2tleV0gPSB2YWx1ZTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHRyYW5zaXRpb24gOiBmdW5jdGlvbihwcm9wcyxlYXNlKXtcblx0XHRcdGVhY2gocHJvcHMsZnVuY3Rpb24odmFsdWUsa2V5KXtcblx0XHRcdFx0dGhpc1trZXldID0gKCh2YWx1ZSAtIHRoaXMuX3NhdmVkW2tleV0pICogZWFzZSkgKyB0aGlzLl9zYXZlZFtrZXldO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dG9vbHRpcFBvc2l0aW9uIDogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHggOiB0aGlzLngsXG5cdFx0XHRcdHkgOiB0aGlzLnlcblx0XHRcdH07XG5cdFx0fSxcblx0XHRoYXNWYWx1ZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBpc051bWJlcih0aGlzLnZhbHVlKTtcblx0XHR9XG5cdH0pO1xuXG5cdENoYXJ0LkVsZW1lbnQuZXh0ZW5kID0gaW5oZXJpdHM7XG5cblxuXHRDaGFydC5Qb2ludCA9IENoYXJ0LkVsZW1lbnQuZXh0ZW5kKHtcblx0XHRkaXNwbGF5OiB0cnVlLFxuXHRcdGluUmFuZ2U6IGZ1bmN0aW9uKGNoYXJ0WCxjaGFydFkpe1xuXHRcdFx0dmFyIGhpdERldGVjdGlvblJhbmdlID0gdGhpcy5oaXREZXRlY3Rpb25SYWRpdXMgKyB0aGlzLnJhZGl1cztcblx0XHRcdHJldHVybiAoKE1hdGgucG93KGNoYXJ0WC10aGlzLngsIDIpK01hdGgucG93KGNoYXJ0WS10aGlzLnksIDIpKSA8IE1hdGgucG93KGhpdERldGVjdGlvblJhbmdlLDIpKTtcblx0XHR9LFxuXHRcdGRyYXcgOiBmdW5jdGlvbigpe1xuXHRcdFx0aWYgKHRoaXMuZGlzcGxheSl7XG5cdFx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGN0eC5hcmModGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzLCAwLCBNYXRoLlBJKjIpO1xuXHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5zdHJva2VDb2xvcjtcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlV2lkdGg7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbENvbG9yO1xuXG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdH1cblxuXG5cdFx0XHQvL1F1aWNrIGRlYnVnIGZvciBiZXppZXIgY3VydmUgc3BsaW5pbmdcblx0XHRcdC8vSGlnaGxpZ2h0cyBjb250cm9sIHBvaW50cyBhbmQgdGhlIGxpbmUgYmV0d2VlbiB0aGVtLlxuXHRcdFx0Ly9IYW5keSBmb3IgZGV2IC0gc3RyaXBwZWQgaW4gdGhlIG1pbiB2ZXJzaW9uLlxuXG5cdFx0XHQvLyBjdHguc2F2ZSgpO1xuXHRcdFx0Ly8gY3R4LmZpbGxTdHlsZSA9IFwiYmxhY2tcIjtcblx0XHRcdC8vIGN0eC5zdHJva2VTdHlsZSA9IFwiYmxhY2tcIlxuXHRcdFx0Ly8gY3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Ly8gY3R4LmFyYyh0aGlzLmNvbnRyb2xQb2ludHMuaW5uZXIueCx0aGlzLmNvbnRyb2xQb2ludHMuaW5uZXIueSwgMiwgMCwgTWF0aC5QSSoyKTtcblx0XHRcdC8vIGN0eC5maWxsKCk7XG5cblx0XHRcdC8vIGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdC8vIGN0eC5hcmModGhpcy5jb250cm9sUG9pbnRzLm91dGVyLngsdGhpcy5jb250cm9sUG9pbnRzLm91dGVyLnksIDIsIDAsIE1hdGguUEkqMik7XG5cdFx0XHQvLyBjdHguZmlsbCgpO1xuXG5cdFx0XHQvLyBjdHgubW92ZVRvKHRoaXMuY29udHJvbFBvaW50cy5pbm5lci54LHRoaXMuY29udHJvbFBvaW50cy5pbm5lci55KTtcblx0XHRcdC8vIGN0eC5saW5lVG8odGhpcy54LCB0aGlzLnkpO1xuXHRcdFx0Ly8gY3R4LmxpbmVUbyh0aGlzLmNvbnRyb2xQb2ludHMub3V0ZXIueCx0aGlzLmNvbnRyb2xQb2ludHMub3V0ZXIueSk7XG5cdFx0XHQvLyBjdHguc3Ryb2tlKCk7XG5cblx0XHRcdC8vIGN0eC5yZXN0b3JlKCk7XG5cblxuXG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5BcmMgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0aW5SYW5nZSA6IGZ1bmN0aW9uKGNoYXJ0WCxjaGFydFkpe1xuXG5cdFx0XHR2YXIgcG9pbnRSZWxhdGl2ZVBvc2l0aW9uID0gaGVscGVycy5nZXRBbmdsZUZyb21Qb2ludCh0aGlzLCB7XG5cdFx0XHRcdHg6IGNoYXJ0WCxcblx0XHRcdFx0eTogY2hhcnRZXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9DaGVjayBpZiB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBvcGVuL2Nsb3NlIGFuZ2xlXG5cdFx0XHR2YXIgYmV0d2VlbkFuZ2xlcyA9IChwb2ludFJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPj0gdGhpcy5zdGFydEFuZ2xlICYmIHBvaW50UmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA8PSB0aGlzLmVuZEFuZ2xlKSxcblx0XHRcdFx0d2l0aGluUmFkaXVzID0gKHBvaW50UmVsYXRpdmVQb3NpdGlvbi5kaXN0YW5jZSA+PSB0aGlzLmlubmVyUmFkaXVzICYmIHBvaW50UmVsYXRpdmVQb3NpdGlvbi5kaXN0YW5jZSA8PSB0aGlzLm91dGVyUmFkaXVzKTtcblxuXHRcdFx0cmV0dXJuIChiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cyk7XG5cdFx0XHQvL0Vuc3VyZSB3aXRoaW4gdGhlIG91dHNpZGUgb2YgdGhlIGFyYyBjZW50cmUsIGJ1dCBpbnNpZGUgYXJjIG91dGVyXG5cdFx0fSxcblx0XHR0b29sdGlwUG9zaXRpb24gOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNlbnRyZUFuZ2xlID0gdGhpcy5zdGFydEFuZ2xlICsgKCh0aGlzLmVuZEFuZ2xlIC0gdGhpcy5zdGFydEFuZ2xlKSAvIDIpLFxuXHRcdFx0XHRyYW5nZUZyb21DZW50cmUgPSAodGhpcy5vdXRlclJhZGl1cyAtIHRoaXMuaW5uZXJSYWRpdXMpIC8gMiArIHRoaXMuaW5uZXJSYWRpdXM7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4IDogdGhpcy54ICsgKE1hdGguY29zKGNlbnRyZUFuZ2xlKSAqIHJhbmdlRnJvbUNlbnRyZSksXG5cdFx0XHRcdHkgOiB0aGlzLnkgKyAoTWF0aC5zaW4oY2VudHJlQW5nbGUpICogcmFuZ2VGcm9tQ2VudHJlKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGRyYXcgOiBmdW5jdGlvbihhbmltYXRpb25QZXJjZW50KXtcblxuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBhbmltYXRpb25QZXJjZW50IHx8IDE7XG5cblx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRjdHguYXJjKHRoaXMueCwgdGhpcy55LCB0aGlzLm91dGVyUmFkaXVzLCB0aGlzLnN0YXJ0QW5nbGUsIHRoaXMuZW5kQW5nbGUpO1xuXG5cdFx0XHRjdHguYXJjKHRoaXMueCwgdGhpcy55LCB0aGlzLmlubmVyUmFkaXVzLCB0aGlzLmVuZEFuZ2xlLCB0aGlzLnN0YXJ0QW5nbGUsIHRydWUpO1xuXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnN0cm9rZUNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlV2lkdGg7XG5cblx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmZpbGxDb2xvcjtcblxuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5saW5lSm9pbiA9ICdiZXZlbCc7XG5cblx0XHRcdGlmICh0aGlzLnNob3dTdHJva2Upe1xuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5SZWN0YW5nbGUgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jdHgsXG5cdFx0XHRcdGhhbGZXaWR0aCA9IHRoaXMud2lkdGgvMixcblx0XHRcdFx0bGVmdFggPSB0aGlzLnggLSBoYWxmV2lkdGgsXG5cdFx0XHRcdHJpZ2h0WCA9IHRoaXMueCArIGhhbGZXaWR0aCxcblx0XHRcdFx0dG9wID0gdGhpcy5iYXNlIC0gKHRoaXMuYmFzZSAtIHRoaXMueSksXG5cdFx0XHRcdGhhbGZTdHJva2UgPSB0aGlzLnN0cm9rZVdpZHRoIC8gMjtcblxuXHRcdFx0Ly8gQ2FudmFzIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3Ryb2tlIGluc2lkZSB0aGUgd2lkdGggc28gd2UgY2FuXG5cdFx0XHQvLyBhZGp1c3QgdGhlIHNpemVzIHRvIGZpdCBpZiB3ZSdyZSBzZXR0aW5nIGEgc3Ryb2tlIG9uIHRoZSBsaW5lXG5cdFx0XHRpZiAodGhpcy5zaG93U3Ryb2tlKXtcblx0XHRcdFx0bGVmdFggKz0gaGFsZlN0cm9rZTtcblx0XHRcdFx0cmlnaHRYIC09IGhhbGZTdHJva2U7XG5cdFx0XHRcdHRvcCArPSBoYWxmU3Ryb2tlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmZpbGxDb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuc3Ryb2tlQ29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDtcblxuXHRcdFx0Ly8gSXQnZCBiZSBuaWNlIHRvIGtlZXAgdGhpcyBjbGFzcyB0b3RhbGx5IGdlbmVyaWMgdG8gYW55IHJlY3RhbmdsZVxuXHRcdFx0Ly8gYW5kIHNpbXBseSBzcGVjaWZ5IHdoaWNoIGJvcmRlciB0byBtaXNzIG91dC5cblx0XHRcdGN0eC5tb3ZlVG8obGVmdFgsIHRoaXMuYmFzZSk7XG5cdFx0XHRjdHgubGluZVRvKGxlZnRYLCB0b3ApO1xuXHRcdFx0Y3R4LmxpbmVUbyhyaWdodFgsIHRvcCk7XG5cdFx0XHRjdHgubGluZVRvKHJpZ2h0WCwgdGhpcy5iYXNlKTtcblx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRpZiAodGhpcy5zaG93U3Ryb2tlKXtcblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGVpZ2h0IDogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlzLmJhc2UgLSB0aGlzLnk7XG5cdFx0fSxcblx0XHRpblJhbmdlIDogZnVuY3Rpb24oY2hhcnRYLGNoYXJ0WSl7XG5cdFx0XHRyZXR1cm4gKGNoYXJ0WCA+PSB0aGlzLnggLSB0aGlzLndpZHRoLzIgJiYgY2hhcnRYIDw9IHRoaXMueCArIHRoaXMud2lkdGgvMikgJiYgKGNoYXJ0WSA+PSB0aGlzLnkgJiYgY2hhcnRZIDw9IHRoaXMuYmFzZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5Ub29sdGlwID0gQ2hhcnQuRWxlbWVudC5leHRlbmQoe1xuXHRcdGRyYXcgOiBmdW5jdGlvbigpe1xuXG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jaGFydC5jdHg7XG5cblx0XHRcdGN0eC5mb250ID0gZm9udFN0cmluZyh0aGlzLmZvbnRTaXplLHRoaXMuZm9udFN0eWxlLHRoaXMuZm9udEZhbWlseSk7XG5cblx0XHRcdHRoaXMueEFsaWduID0gXCJjZW50ZXJcIjtcblx0XHRcdHRoaXMueUFsaWduID0gXCJhYm92ZVwiO1xuXG5cdFx0XHQvL0Rpc3RhbmNlIGJldHdlZW4gdGhlIGFjdHVhbCBlbGVtZW50LnkgcG9zaXRpb24gYW5kIHRoZSBzdGFydCBvZiB0aGUgdG9vbHRpcCBjYXJldFxuXHRcdFx0dmFyIGNhcmV0UGFkZGluZyA9IHRoaXMuY2FyZXRQYWRkaW5nID0gMjtcblxuXHRcdFx0dmFyIHRvb2x0aXBXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aGlzLnRleHQpLndpZHRoICsgMip0aGlzLnhQYWRkaW5nLFxuXHRcdFx0XHR0b29sdGlwUmVjdEhlaWdodCA9IHRoaXMuZm9udFNpemUgKyAyKnRoaXMueVBhZGRpbmcsXG5cdFx0XHRcdHRvb2x0aXBIZWlnaHQgPSB0b29sdGlwUmVjdEhlaWdodCArIHRoaXMuY2FyZXRIZWlnaHQgKyBjYXJldFBhZGRpbmc7XG5cblx0XHRcdGlmICh0aGlzLnggKyB0b29sdGlwV2lkdGgvMiA+dGhpcy5jaGFydC53aWR0aCl7XG5cdFx0XHRcdHRoaXMueEFsaWduID0gXCJsZWZ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMueCAtIHRvb2x0aXBXaWR0aC8yIDwgMCl7XG5cdFx0XHRcdHRoaXMueEFsaWduID0gXCJyaWdodFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy55IC0gdG9vbHRpcEhlaWdodCA8IDApe1xuXHRcdFx0XHR0aGlzLnlBbGlnbiA9IFwiYmVsb3dcIjtcblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgdG9vbHRpcFggPSB0aGlzLnggLSB0b29sdGlwV2lkdGgvMixcblx0XHRcdFx0dG9vbHRpcFkgPSB0aGlzLnkgLSB0b29sdGlwSGVpZ2h0O1xuXG5cdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5maWxsQ29sb3I7XG5cblx0XHRcdC8vIEN1c3RvbSBUb29sdGlwc1xuXHRcdFx0aWYodGhpcy5jdXN0b20pe1xuXHRcdFx0XHR0aGlzLmN1c3RvbSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHN3aXRjaCh0aGlzLnlBbGlnbilcblx0XHRcdFx0e1xuXHRcdFx0XHRjYXNlIFwiYWJvdmVcIjpcblx0XHRcdFx0XHQvL0RyYXcgYSBjYXJldCBhYm92ZSB0aGUgeC95XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8odGhpcy54LHRoaXMueSAtIGNhcmV0UGFkZGluZyk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh0aGlzLnggKyB0aGlzLmNhcmV0SGVpZ2h0LCB0aGlzLnkgLSAoY2FyZXRQYWRkaW5nICsgdGhpcy5jYXJldEhlaWdodCkpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8odGhpcy54IC0gdGhpcy5jYXJldEhlaWdodCwgdGhpcy55IC0gKGNhcmV0UGFkZGluZyArIHRoaXMuY2FyZXRIZWlnaHQpKTtcblx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImJlbG93XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFkgPSB0aGlzLnkgKyBjYXJldFBhZGRpbmcgKyB0aGlzLmNhcmV0SGVpZ2h0O1xuXHRcdFx0XHRcdC8vRHJhdyBhIGNhcmV0IGJlbG93IHRoZSB4L3lcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh0aGlzLngsIHRoaXMueSArIGNhcmV0UGFkZGluZyk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh0aGlzLnggKyB0aGlzLmNhcmV0SGVpZ2h0LCB0aGlzLnkgKyBjYXJldFBhZGRpbmcgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHRoaXMueCAtIHRoaXMuY2FyZXRIZWlnaHQsIHRoaXMueSArIGNhcmV0UGFkZGluZyArIHRoaXMuY2FyZXRIZWlnaHQpO1xuXHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3dpdGNoKHRoaXMueEFsaWduKVxuXHRcdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFggPSB0aGlzLnggLSB0b29sdGlwV2lkdGggKyAodGhpcy5jb3JuZXJSYWRpdXMgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFggPSB0aGlzLnggLSAodGhpcy5jb3JuZXJSYWRpdXMgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRyYXdSb3VuZGVkUmVjdGFuZ2xlKGN0eCx0b29sdGlwWCx0b29sdGlwWSx0b29sdGlwV2lkdGgsdG9vbHRpcFJlY3RIZWlnaHQsdGhpcy5jb3JuZXJSYWRpdXMpO1xuXG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMudGV4dENvbG9yO1xuXHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcblx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cdFx0XHRcdGN0eC5maWxsVGV4dCh0aGlzLnRleHQsIHRvb2x0aXBYICsgdG9vbHRpcFdpZHRoLzIsIHRvb2x0aXBZICsgdG9vbHRpcFJlY3RIZWlnaHQvMik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5NdWx0aVRvb2x0aXAgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLmZvbnQgPSBmb250U3RyaW5nKHRoaXMuZm9udFNpemUsdGhpcy5mb250U3R5bGUsdGhpcy5mb250RmFtaWx5KTtcblxuXHRcdFx0dGhpcy50aXRsZUZvbnQgPSBmb250U3RyaW5nKHRoaXMudGl0bGVGb250U2l6ZSx0aGlzLnRpdGxlRm9udFN0eWxlLHRoaXMudGl0bGVGb250RmFtaWx5KTtcblxuXHRcdFx0dGhpcy5oZWlnaHQgPSAodGhpcy5sYWJlbHMubGVuZ3RoICogdGhpcy5mb250U2l6ZSkgKyAoKHRoaXMubGFiZWxzLmxlbmd0aC0xKSAqICh0aGlzLmZvbnRTaXplLzIpKSArICh0aGlzLnlQYWRkaW5nKjIpICsgdGhpcy50aXRsZUZvbnRTaXplICoxLjU7XG5cblx0XHRcdHRoaXMuY3R4LmZvbnQgPSB0aGlzLnRpdGxlRm9udDtcblxuXHRcdFx0dmFyIHRpdGxlV2lkdGggPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0aGlzLnRpdGxlKS53aWR0aCxcblx0XHRcdFx0Ly9MYWJlbCBoYXMgYSBsZWdlbmQgc3F1YXJlIGFzIHdlbGwgc28gYWNjb3VudCBmb3IgdGhpcy5cblx0XHRcdFx0bGFiZWxXaWR0aCA9IGxvbmdlc3RUZXh0KHRoaXMuY3R4LHRoaXMuZm9udCx0aGlzLmxhYmVscykgKyB0aGlzLmZvbnRTaXplICsgMyxcblx0XHRcdFx0bG9uZ2VzdFRleHRXaWR0aCA9IG1heChbbGFiZWxXaWR0aCx0aXRsZVdpZHRoXSk7XG5cblx0XHRcdHRoaXMud2lkdGggPSBsb25nZXN0VGV4dFdpZHRoICsgKHRoaXMueFBhZGRpbmcqMik7XG5cblxuXHRcdFx0dmFyIGhhbGZIZWlnaHQgPSB0aGlzLmhlaWdodC8yO1xuXG5cdFx0XHQvL0NoZWNrIHRvIGVuc3VyZSB0aGUgaGVpZ2h0IHdpbGwgZml0IG9uIHRoZSBjYW52YXNcblx0XHRcdGlmICh0aGlzLnkgLSBoYWxmSGVpZ2h0IDwgMCApe1xuXHRcdFx0XHR0aGlzLnkgPSBoYWxmSGVpZ2h0O1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnkgKyBoYWxmSGVpZ2h0ID4gdGhpcy5jaGFydC5oZWlnaHQpe1xuXHRcdFx0XHR0aGlzLnkgPSB0aGlzLmNoYXJ0LmhlaWdodCAtIGhhbGZIZWlnaHQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vRGVjaWRlIHdoZXRoZXIgdG8gYWxpZ24gbGVmdCBvciByaWdodCBiYXNlZCBvbiBwb3NpdGlvbiBvbiBjYW52YXNcblx0XHRcdGlmICh0aGlzLnggPiB0aGlzLmNoYXJ0LndpZHRoLzIpe1xuXHRcdFx0XHR0aGlzLnggLT0gdGhpcy54T2Zmc2V0ICsgdGhpcy53aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMueCArPSB0aGlzLnhPZmZzZXQ7XG5cdFx0XHR9XG5cblxuXHRcdH0sXG5cdFx0Z2V0TGluZUhlaWdodCA6IGZ1bmN0aW9uKGluZGV4KXtcblx0XHRcdHZhciBiYXNlTGluZUhlaWdodCA9IHRoaXMueSAtICh0aGlzLmhlaWdodC8yKSArIHRoaXMueVBhZGRpbmcsXG5cdFx0XHRcdGFmdGVyVGl0bGVJbmRleCA9IGluZGV4LTE7XG5cblx0XHRcdC8vSWYgdGhlIGluZGV4IGlzIHplcm8sIHdlJ3JlIGdldHRpbmcgdGhlIHRpdGxlXG5cdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gYmFzZUxpbmVIZWlnaHQgKyB0aGlzLnRpdGxlRm9udFNpemUvMjtcblx0XHRcdH0gZWxzZXtcblx0XHRcdFx0cmV0dXJuIGJhc2VMaW5lSGVpZ2h0ICsgKCh0aGlzLmZvbnRTaXplKjEuNSphZnRlclRpdGxlSW5kZXgpICsgdGhpcy5mb250U2l6ZS8yKSArIHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNTtcblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBDdXN0b20gVG9vbHRpcHNcblx0XHRcdGlmKHRoaXMuY3VzdG9tKXtcblx0XHRcdFx0dGhpcy5jdXN0b20odGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRkcmF3Um91bmRlZFJlY3RhbmdsZSh0aGlzLmN0eCx0aGlzLngsdGhpcy55IC0gdGhpcy5oZWlnaHQvMix0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LHRoaXMuY29ybmVyUmFkaXVzKTtcblx0XHRcdFx0dmFyIGN0eCA9IHRoaXMuY3R4O1xuXHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5maWxsQ29sb3I7XG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJsZWZ0XCI7XG5cdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy50aXRsZVRleHRDb2xvcjtcblx0XHRcdFx0Y3R4LmZvbnQgPSB0aGlzLnRpdGxlRm9udDtcblxuXHRcdFx0XHRjdHguZmlsbFRleHQodGhpcy50aXRsZSx0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoMCkpO1xuXG5cdFx0XHRcdGN0eC5mb250ID0gdGhpcy5mb250O1xuXHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5sYWJlbHMsZnVuY3Rpb24obGFiZWwsaW5kZXgpe1xuXHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLnRleHRDb2xvcjtcblx0XHRcdFx0XHRjdHguZmlsbFRleHQobGFiZWwsdGhpcy54ICsgdGhpcy54UGFkZGluZyArIHRoaXMuZm9udFNpemUgKyAzLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSk7XG5cblx0XHRcdFx0XHQvL0EgYml0IGduYXJseSwgYnV0IGNsZWFyaW5nIHRoaXMgcmVjdGFuZ2xlIGJyZWFrcyB3aGVuIHVzaW5nIGV4cGxvcmVyY2FudmFzIChjbGVhcnMgd2hvbGUgY2FudmFzKVxuXHRcdFx0XHRcdC8vY3R4LmNsZWFyUmVjdCh0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSAtIHRoaXMuZm9udFNpemUvMiwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250U2l6ZSk7XG5cdFx0XHRcdFx0Ly9JbnN0ZWFkIHdlJ2xsIG1ha2UgYSB3aGl0ZSBmaWxsZWQgYmxvY2sgdG8gcHV0IHRoZSBsZWdlbmRDb2xvdXIgcGFsZXR0ZSBvdmVyLlxuXG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMubGVnZW5kQ29sb3JCYWNrZ3JvdW5kO1xuXHRcdFx0XHRcdGN0eC5maWxsUmVjdCh0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSAtIHRoaXMuZm9udFNpemUvMiwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250U2l6ZSk7XG5cblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5sZWdlbmRDb2xvcnNbaW5kZXhdLmZpbGw7XG5cdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KHRoaXMueCArIHRoaXMueFBhZGRpbmcsIHRoaXMuZ2V0TGluZUhlaWdodChpbmRleCArIDEpIC0gdGhpcy5mb250U2l6ZS8yLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRTaXplKTtcblxuXG5cdFx0XHRcdH0sdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5TY2FsZSA9IENoYXJ0LkVsZW1lbnQuZXh0ZW5kKHtcblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuZml0KCk7XG5cdFx0fSxcblx0XHRidWlsZFlMYWJlbHMgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy55TGFiZWxzID0gW107XG5cblx0XHRcdHZhciBzdGVwRGVjaW1hbFBsYWNlcyA9IGdldERlY2ltYWxQbGFjZXModGhpcy5zdGVwVmFsdWUpO1xuXG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8PXRoaXMuc3RlcHM7IGkrKyl7XG5cdFx0XHRcdHRoaXMueUxhYmVscy5wdXNoKHRlbXBsYXRlKHRoaXMudGVtcGxhdGVTdHJpbmcse3ZhbHVlOih0aGlzLm1pbiArIChpICogdGhpcy5zdGVwVmFsdWUpKS50b0ZpeGVkKHN0ZXBEZWNpbWFsUGxhY2VzKX0pKTtcblx0XHRcdH1cblx0XHRcdHRoaXMueUxhYmVsV2lkdGggPSAodGhpcy5kaXNwbGF5ICYmIHRoaXMuc2hvd0xhYmVscykgPyBsb25nZXN0VGV4dCh0aGlzLmN0eCx0aGlzLmZvbnQsdGhpcy55TGFiZWxzKSA6IDA7XG5cdFx0fSxcblx0XHRhZGRYTGFiZWwgOiBmdW5jdGlvbihsYWJlbCl7XG5cdFx0XHR0aGlzLnhMYWJlbHMucHVzaChsYWJlbCk7XG5cdFx0XHR0aGlzLnZhbHVlc0NvdW50Kys7XG5cdFx0XHR0aGlzLmZpdCgpO1xuXHRcdH0sXG5cdFx0cmVtb3ZlWExhYmVsIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMueExhYmVscy5zaGlmdCgpO1xuXHRcdFx0dGhpcy52YWx1ZXNDb3VudC0tO1xuXHRcdFx0dGhpcy5maXQoKTtcblx0XHR9LFxuXHRcdC8vIEZpdHRpbmcgbG9vcCB0byByb3RhdGUgeCBMYWJlbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmaXRzIHRoZXJlLCBhbmQgYWxzbyBjYWxjdWxhdGUgaG93IG1hbnkgWSBzdGVwcyB0byB1c2Vcblx0XHRmaXQ6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBGaXJzdCB3ZSBuZWVkIHRoZSB3aWR0aCBvZiB0aGUgeUxhYmVscywgYXNzdW1pbmcgdGhlIHhMYWJlbHMgYXJlbid0IHJvdGF0ZWRcblxuXHRcdFx0Ly8gVG8gZG8gdGhhdCB3ZSBuZWVkIHRoZSBiYXNlIGxpbmUgYXQgdGhlIHRvcCBhbmQgYmFzZSBvZiB0aGUgY2hhcnQsIGFzc3VtaW5nIHRoZXJlIGlzIG5vIHggbGFiZWwgcm90YXRpb25cblx0XHRcdHRoaXMuc3RhcnRQb2ludCA9ICh0aGlzLmRpc3BsYXkpID8gdGhpcy5mb250U2l6ZSA6IDA7XG5cdFx0XHR0aGlzLmVuZFBvaW50ID0gKHRoaXMuZGlzcGxheSkgPyB0aGlzLmhlaWdodCAtICh0aGlzLmZvbnRTaXplICogMS41KSAtIDUgOiB0aGlzLmhlaWdodDsgLy8gLTUgdG8gcGFkIGxhYmVsc1xuXG5cdFx0XHQvLyBBcHBseSBwYWRkaW5nIHNldHRpbmdzIHRvIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50LlxuXHRcdFx0dGhpcy5zdGFydFBvaW50ICs9IHRoaXMucGFkZGluZztcblx0XHRcdHRoaXMuZW5kUG9pbnQgLT0gdGhpcy5wYWRkaW5nO1xuXG5cdFx0XHQvLyBDYWNoZSB0aGUgc3RhcnRpbmcgaGVpZ2h0LCBzbyBjYW4gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHNjYWxlIHlBeGlzXG5cdFx0XHR2YXIgY2FjaGVkSGVpZ2h0ID0gdGhpcy5lbmRQb2ludCAtIHRoaXMuc3RhcnRQb2ludCxcblx0XHRcdFx0Y2FjaGVkWUxhYmVsV2lkdGg7XG5cblx0XHRcdC8vIEJ1aWxkIHRoZSBjdXJyZW50IHlMYWJlbHMgc28gd2UgaGF2ZSBhbiBpZGVhIG9mIHdoYXQgc2l6ZSB0aGV5J2xsIGJlIHRvIHN0YXJ0XG5cdFx0XHQvKlxuXHRcdFx0ICpcdFRoaXMgc2V0cyB3aGF0IGlzIHJldHVybmVkIGZyb20gY2FsY3VsYXRlU2NhbGVSYW5nZSBhcyBzdGF0aWMgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzOlxuXHRcdFx0ICpcblx0XHRcdFx0dGhpcy5zdGVwcztcblx0XHRcdFx0dGhpcy5zdGVwVmFsdWU7XG5cdFx0XHRcdHRoaXMubWluO1xuXHRcdFx0XHR0aGlzLm1heDtcblx0XHRcdCAqXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY2FsY3VsYXRlWVJhbmdlKGNhY2hlZEhlaWdodCk7XG5cblx0XHRcdC8vIFdpdGggdGhlc2UgcHJvcGVydGllcyBzZXQgd2UgY2FuIG5vdyBidWlsZCB0aGUgYXJyYXkgb2YgeUxhYmVsc1xuXHRcdFx0Ly8gYW5kIGFsc28gdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHlMYWJlbFxuXHRcdFx0dGhpcy5idWlsZFlMYWJlbHMoKTtcblxuXHRcdFx0dGhpcy5jYWxjdWxhdGVYTGFiZWxSb3RhdGlvbigpO1xuXG5cdFx0XHR3aGlsZSgoY2FjaGVkSGVpZ2h0ID4gdGhpcy5lbmRQb2ludCAtIHRoaXMuc3RhcnRQb2ludCkpe1xuXHRcdFx0XHRjYWNoZWRIZWlnaHQgPSB0aGlzLmVuZFBvaW50IC0gdGhpcy5zdGFydFBvaW50O1xuXHRcdFx0XHRjYWNoZWRZTGFiZWxXaWR0aCA9IHRoaXMueUxhYmVsV2lkdGg7XG5cblx0XHRcdFx0dGhpcy5jYWxjdWxhdGVZUmFuZ2UoY2FjaGVkSGVpZ2h0KTtcblx0XHRcdFx0dGhpcy5idWlsZFlMYWJlbHMoKTtcblxuXHRcdFx0XHQvLyBPbmx5IGdvIHRocm91Z2ggdGhlIHhMYWJlbCBsb29wIGFnYWluIGlmIHRoZSB5TGFiZWwgd2lkdGggaGFzIGNoYW5nZWRcblx0XHRcdFx0aWYgKGNhY2hlZFlMYWJlbFdpZHRoIDwgdGhpcy55TGFiZWxXaWR0aCl7XG5cdFx0XHRcdFx0dGhpcy5jYWxjdWxhdGVYTGFiZWxSb3RhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVhMYWJlbFJvdGF0aW9uIDogZnVuY3Rpb24oKXtcblx0XHRcdC8vR2V0IHRoZSB3aWR0aCBvZiBlYWNoIGdyaWQgYnkgY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2Vcblx0XHRcdC8vYmV0d2VlbiB4IG9mZnNldHMgYmV0d2VlbiAwIGFuZCAxLlxuXG5cdFx0XHR0aGlzLmN0eC5mb250ID0gdGhpcy5mb250O1xuXG5cdFx0XHR2YXIgZmlyc3RXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRoaXMueExhYmVsc1swXSkud2lkdGgsXG5cdFx0XHRcdGxhc3RXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRoaXMueExhYmVsc1t0aGlzLnhMYWJlbHMubGVuZ3RoIC0gMV0pLndpZHRoLFxuXHRcdFx0XHRmaXJzdFJvdGF0ZWQsXG5cdFx0XHRcdGxhc3RSb3RhdGVkO1xuXG5cblx0XHRcdHRoaXMueFNjYWxlUGFkZGluZ1JpZ2h0ID0gbGFzdFdpZHRoLzIgKyAzO1xuXHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IChmaXJzdFdpZHRoLzIgPiB0aGlzLnlMYWJlbFdpZHRoICsgMTApID8gZmlyc3RXaWR0aC8yIDogdGhpcy55TGFiZWxXaWR0aCArIDEwO1xuXG5cdFx0XHR0aGlzLnhMYWJlbFJvdGF0aW9uID0gMDtcblx0XHRcdGlmICh0aGlzLmRpc3BsYXkpe1xuXHRcdFx0XHR2YXIgb3JpZ2luYWxMYWJlbFdpZHRoID0gbG9uZ2VzdFRleHQodGhpcy5jdHgsdGhpcy5mb250LHRoaXMueExhYmVscyksXG5cdFx0XHRcdFx0Y29zUm90YXRpb24sXG5cdFx0XHRcdFx0Zmlyc3RSb3RhdGVkV2lkdGg7XG5cdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSBvcmlnaW5hbExhYmVsV2lkdGg7XG5cdFx0XHRcdC8vQWxsb3cgMyBwaXhlbHMgeDIgcGFkZGluZyBlaXRoZXIgc2lkZSBmb3IgbGFiZWwgcmVhZGFiaWxpdHlcblx0XHRcdFx0dmFyIHhHcmlkV2lkdGggPSBNYXRoLmZsb29yKHRoaXMuY2FsY3VsYXRlWCgxKSAtIHRoaXMuY2FsY3VsYXRlWCgwKSkgLSA2O1xuXG5cdFx0XHRcdC8vTWF4IGxhYmVsIHJvdGF0ZSBzaG91bGQgYmUgOTAgLSBhbHNvIGFjdCBhcyBhIGxvb3AgY291bnRlclxuXHRcdFx0XHR3aGlsZSAoKHRoaXMueExhYmVsV2lkdGggPiB4R3JpZFdpZHRoICYmIHRoaXMueExhYmVsUm90YXRpb24gPT09IDApIHx8ICh0aGlzLnhMYWJlbFdpZHRoID4geEdyaWRXaWR0aCAmJiB0aGlzLnhMYWJlbFJvdGF0aW9uIDw9IDkwICYmIHRoaXMueExhYmVsUm90YXRpb24gPiAwKSl7XG5cdFx0XHRcdFx0Y29zUm90YXRpb24gPSBNYXRoLmNvcyh0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikpO1xuXG5cdFx0XHRcdFx0Zmlyc3RSb3RhdGVkID0gY29zUm90YXRpb24gKiBmaXJzdFdpZHRoO1xuXHRcdFx0XHRcdGxhc3RSb3RhdGVkID0gY29zUm90YXRpb24gKiBsYXN0V2lkdGg7XG5cblx0XHRcdFx0XHQvLyBXZSdyZSByaWdodCBhbGlnbmluZyB0aGUgdGV4dCBub3cuXG5cdFx0XHRcdFx0aWYgKGZpcnN0Um90YXRlZCArIHRoaXMuZm9udFNpemUgLyAyID4gdGhpcy55TGFiZWxXaWR0aCArIDgpe1xuXHRcdFx0XHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IGZpcnN0Um90YXRlZCArIHRoaXMuZm9udFNpemUgLyAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCA9IHRoaXMuZm9udFNpemUvMjtcblxuXG5cdFx0XHRcdFx0dGhpcy54TGFiZWxSb3RhdGlvbisrO1xuXHRcdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSBjb3NSb3RhdGlvbiAqIG9yaWdpbmFsTGFiZWxXaWR0aDtcblxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLnhMYWJlbFJvdGF0aW9uID4gMCl7XG5cdFx0XHRcdFx0dGhpcy5lbmRQb2ludCAtPSBNYXRoLnNpbih0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikpKm9yaWdpbmFsTGFiZWxXaWR0aCArIDM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSAwO1xuXHRcdFx0XHR0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCA9IHRoaXMucGFkZGluZztcblx0XHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IHRoaXMucGFkZGluZztcblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0Ly8gTmVlZHMgdG8gYmUgb3ZlcmlkZGVuIGluIGVhY2ggQ2hhcnQgdHlwZVxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIHBhc3MgYWxsIHRoZSBkYXRhIGludG8gdGhlIHNjYWxlIGNsYXNzXG5cdFx0Y2FsY3VsYXRlWVJhbmdlOiBub29wLFxuXHRcdGRyYXdpbmdBcmVhOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RhcnRQb2ludCAtIHRoaXMuZW5kUG9pbnQ7XG5cdFx0fSxcblx0XHRjYWxjdWxhdGVZIDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0dmFyIHNjYWxpbmdGYWN0b3IgPSB0aGlzLmRyYXdpbmdBcmVhKCkgLyAodGhpcy5taW4gLSB0aGlzLm1heCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbmRQb2ludCAtIChzY2FsaW5nRmFjdG9yICogKHZhbHVlIC0gdGhpcy5taW4pKTtcblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVggOiBmdW5jdGlvbihpbmRleCl7XG5cdFx0XHR2YXIgaXNSb3RhdGVkID0gKHRoaXMueExhYmVsUm90YXRpb24gPiAwKSxcblx0XHRcdFx0Ly8gaW5uZXJXaWR0aCA9ICh0aGlzLm9mZnNldEdyaWRMaW5lcykgPyB0aGlzLndpZHRoIC0gb2Zmc2V0TGVmdCAtIHRoaXMucGFkZGluZyA6IHRoaXMud2lkdGggLSAob2Zmc2V0TGVmdCArIGhhbGZMYWJlbFdpZHRoICogMikgLSB0aGlzLnBhZGRpbmcsXG5cdFx0XHRcdGlubmVyV2lkdGggPSB0aGlzLndpZHRoIC0gKHRoaXMueFNjYWxlUGFkZGluZ0xlZnQgKyB0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCksXG5cdFx0XHRcdHZhbHVlV2lkdGggPSBpbm5lcldpZHRoL01hdGgubWF4KCh0aGlzLnZhbHVlc0NvdW50IC0gKCh0aGlzLm9mZnNldEdyaWRMaW5lcykgPyAwIDogMSkpLCAxKSxcblx0XHRcdFx0dmFsdWVPZmZzZXQgPSAodmFsdWVXaWR0aCAqIGluZGV4KSArIHRoaXMueFNjYWxlUGFkZGluZ0xlZnQ7XG5cblx0XHRcdGlmICh0aGlzLm9mZnNldEdyaWRMaW5lcyl7XG5cdFx0XHRcdHZhbHVlT2Zmc2V0ICs9ICh2YWx1ZVdpZHRoLzIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZU9mZnNldCk7XG5cdFx0fSxcblx0XHR1cGRhdGUgOiBmdW5jdGlvbihuZXdQcm9wcyl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLCBuZXdQcm9wcyk7XG5cdFx0XHR0aGlzLmZpdCgpO1xuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jdHgsXG5cdFx0XHRcdHlMYWJlbEdhcCA9ICh0aGlzLmVuZFBvaW50IC0gdGhpcy5zdGFydFBvaW50KSAvIHRoaXMuc3RlcHMsXG5cdFx0XHRcdHhTdGFydCA9IE1hdGgucm91bmQodGhpcy54U2NhbGVQYWRkaW5nTGVmdCk7XG5cdFx0XHRpZiAodGhpcy5kaXNwbGF5KXtcblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMudGV4dENvbG9yO1xuXHRcdFx0XHRjdHguZm9udCA9IHRoaXMuZm9udDtcblx0XHRcdFx0ZWFjaCh0aGlzLnlMYWJlbHMsZnVuY3Rpb24obGFiZWxTdHJpbmcsaW5kZXgpe1xuXHRcdFx0XHRcdHZhciB5TGFiZWxDZW50ZXIgPSB0aGlzLmVuZFBvaW50IC0gKHlMYWJlbEdhcCAqIGluZGV4KSxcblx0XHRcdFx0XHRcdGxpbmVQb3NpdGlvblkgPSBNYXRoLnJvdW5kKHlMYWJlbENlbnRlciksXG5cdFx0XHRcdFx0XHRkcmF3SG9yaXpvbnRhbExpbmUgPSB0aGlzLnNob3dIb3Jpem9udGFsTGluZXM7XG5cblx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJyaWdodFwiO1xuXHRcdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdFx0XHRcdGlmICh0aGlzLnNob3dMYWJlbHMpe1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxhYmVsU3RyaW5nLHhTdGFydCAtIDEwLHlMYWJlbENlbnRlcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBYIGF4aXMsIHNvIGRyYXcgaXRcblx0XHRcdFx0XHRpZiAoaW5kZXggPT09IDAgJiYgIWRyYXdIb3Jpem9udGFsTGluZSl7XG5cdFx0XHRcdFx0XHRkcmF3SG9yaXpvbnRhbExpbmUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkcmF3SG9yaXpvbnRhbExpbmUpe1xuXHRcdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpbmRleCA+IDApe1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIGdyaWQgbGluZSBpbiB0aGUgY2VudHJlLCBzbyBkcm9wIHRoYXRcblx0XHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmdyaWRMaW5lV2lkdGg7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdyaWRMaW5lQ29sb3I7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb24gdGhlIHNjYWxlXG5cdFx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsaW5lUG9zaXRpb25ZICs9IGhlbHBlcnMuYWxpYXNQaXhlbChjdHgubGluZVdpZHRoKTtcblxuXHRcdFx0XHRcdGlmKGRyYXdIb3Jpem9udGFsTGluZSl7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHhTdGFydCwgbGluZVBvc2l0aW9uWSk7XG5cdFx0XHRcdFx0XHRjdHgubGluZVRvKHRoaXMud2lkdGgsIGxpbmVQb3NpdGlvblkpO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcblx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4U3RhcnQgLSA1LCBsaW5lUG9zaXRpb25ZKTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHhTdGFydCwgbGluZVBvc2l0aW9uWSk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHRcdGVhY2godGhpcy54TGFiZWxzLGZ1bmN0aW9uKGxhYmVsLGluZGV4KXtcblx0XHRcdFx0XHR2YXIgeFBvcyA9IHRoaXMuY2FsY3VsYXRlWChpbmRleCkgKyBhbGlhc1BpeGVsKHRoaXMubGluZVdpZHRoKSxcblx0XHRcdFx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBsaW5lL2JhciBoZXJlIGFuZCBkZWNpZGUgd2hlcmUgdG8gcGxhY2UgdGhlIGxpbmVcblx0XHRcdFx0XHRcdGxpbmVQb3MgPSB0aGlzLmNhbGN1bGF0ZVgoaW5kZXggLSAodGhpcy5vZmZzZXRHcmlkTGluZXMgPyAwLjUgOiAwKSkgKyBhbGlhc1BpeGVsKHRoaXMubGluZVdpZHRoKSxcblx0XHRcdFx0XHRcdGlzUm90YXRlZCA9ICh0aGlzLnhMYWJlbFJvdGF0aW9uID4gMCksXG5cdFx0XHRcdFx0XHRkcmF3VmVydGljYWxMaW5lID0gdGhpcy5zaG93VmVydGljYWxMaW5lcztcblxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgWSBheGlzLCBzbyBkcmF3IGl0XG5cdFx0XHRcdFx0aWYgKGluZGV4ID09PSAwICYmICFkcmF3VmVydGljYWxMaW5lKXtcblx0XHRcdFx0XHRcdGRyYXdWZXJ0aWNhbExpbmUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkcmF3VmVydGljYWxMaW5lKXtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaW5kZXggPiAwKXtcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBncmlkIGxpbmUgaW4gdGhlIGNlbnRyZSwgc28gZHJvcCB0aGF0XG5cdFx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5ncmlkTGluZVdpZHRoO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5ncmlkTGluZUNvbG9yO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9uIHRoZSBzY2FsZVxuXHRcdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5saW5lQ29sb3I7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRyYXdWZXJ0aWNhbExpbmUpe1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhsaW5lUG9zLHRoaXMuZW5kUG9pbnQpO1xuXHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhsaW5lUG9zLHRoaXMuc3RhcnRQb2ludCAtIDMpO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuXHRcdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMubGluZUNvbG9yO1xuXG5cblx0XHRcdFx0XHQvLyBTbWFsbCBsaW5lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBiYXNlIGdyaWQgbGluZVxuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKGxpbmVQb3MsdGhpcy5lbmRQb2ludCk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyhsaW5lUG9zLHRoaXMuZW5kUG9pbnQgKyA1KTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRcdFx0Y3R4LnNhdmUoKTtcblx0XHRcdFx0XHRjdHgudHJhbnNsYXRlKHhQb3MsKGlzUm90YXRlZCkgPyB0aGlzLmVuZFBvaW50ICsgMTIgOiB0aGlzLmVuZFBvaW50ICsgOCk7XG5cdFx0XHRcdFx0Y3R4LnJvdGF0ZSh0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikqLTEpO1xuXHRcdFx0XHRcdGN0eC5mb250ID0gdGhpcy5mb250O1xuXHRcdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAoaXNSb3RhdGVkKSA/IFwicmlnaHRcIiA6IFwiY2VudGVyXCI7XG5cdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9IChpc1JvdGF0ZWQpID8gXCJtaWRkbGVcIiA6IFwidG9wXCI7XG5cdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxhYmVsLCAwLCAwKTtcblx0XHRcdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0pO1xuXG5cdENoYXJ0LlJhZGlhbFNjYWxlID0gQ2hhcnQuRWxlbWVudC5leHRlbmQoe1xuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNpemUgPSBtaW4oW3RoaXMuaGVpZ2h0LCB0aGlzLndpZHRoXSk7XG5cdFx0XHR0aGlzLmRyYXdpbmdBcmVhID0gKHRoaXMuZGlzcGxheSkgPyAodGhpcy5zaXplLzIpIC0gKHRoaXMuZm9udFNpemUvMiArIHRoaXMuYmFja2Ryb3BQYWRkaW5nWSkgOiAodGhpcy5zaXplLzIpO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlQ2VudGVyT2Zmc2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHQvLyBUYWtlIGludG8gYWNjb3VudCBoYWxmIGZvbnQgc2l6ZSArIHRoZSB5UGFkZGluZyBvZiB0aGUgdG9wIHZhbHVlXG5cdFx0XHR2YXIgc2NhbGluZ0ZhY3RvciA9IHRoaXMuZHJhd2luZ0FyZWEgLyAodGhpcy5tYXggLSB0aGlzLm1pbik7XG5cblx0XHRcdHJldHVybiAodmFsdWUgLSB0aGlzLm1pbikgKiBzY2FsaW5nRmFjdG9yO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdGlmICghdGhpcy5saW5lQXJjKXtcblx0XHRcdFx0dGhpcy5zZXRTY2FsZVNpemUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZHJhd2luZ0FyZWEgPSAodGhpcy5kaXNwbGF5KSA/ICh0aGlzLnNpemUvMikgLSAodGhpcy5mb250U2l6ZS8yICsgdGhpcy5iYWNrZHJvcFBhZGRpbmdZKSA6ICh0aGlzLnNpemUvMik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJ1aWxkWUxhYmVscygpO1xuXHRcdH0sXG5cdFx0YnVpbGRZTGFiZWxzOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy55TGFiZWxzID0gW107XG5cblx0XHRcdHZhciBzdGVwRGVjaW1hbFBsYWNlcyA9IGdldERlY2ltYWxQbGFjZXModGhpcy5zdGVwVmFsdWUpO1xuXG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8PXRoaXMuc3RlcHM7IGkrKyl7XG5cdFx0XHRcdHRoaXMueUxhYmVscy5wdXNoKHRlbXBsYXRlKHRoaXMudGVtcGxhdGVTdHJpbmcse3ZhbHVlOih0aGlzLm1pbiArIChpICogdGhpcy5zdGVwVmFsdWUpKS50b0ZpeGVkKHN0ZXBEZWNpbWFsUGxhY2VzKX0pKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldENpcmN1bWZlcmVuY2UgOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuICgoTWF0aC5QSSoyKSAvIHRoaXMudmFsdWVzQ291bnQpO1xuXHRcdH0sXG5cdFx0c2V0U2NhbGVTaXplOiBmdW5jdGlvbigpe1xuXHRcdFx0Lypcblx0XHRcdCAqIFJpZ2h0LCB0aGlzIGlzIHJlYWxseSBjb25mdXNpbmcgYW5kIHRoZXJlIGlzIGEgbG90IG9mIG1hdGhzIGdvaW5nIG9uIGhlcmVcblx0XHRcdCAqIFRoZSBnaXN0IG9mIHRoZSBwcm9ibGVtIGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25ubmljay82OTZjYzljNTVmNGIwYmViOGZlOVxuXHRcdFx0ICpcblx0XHRcdCAqIFJlYWN0aW9uOiBodHRwczovL2RsLmRyb3Bib3h1c2VyY29udGVudC5jb20vdS8zNDYwMTM2My90b29tdWNoc2NpZW5jZS5naWZcblx0XHRcdCAqXG5cdFx0XHQgKiBTb2x1dGlvbjpcblx0XHRcdCAqXG5cdFx0XHQgKiBXZSBhc3N1bWUgdGhlIHJhZGl1cyBvZiB0aGUgcG9seWdvbiBpcyBoYWxmIHRoZSBzaXplIG9mIHRoZSBjYW52YXMgYXQgZmlyc3Rcblx0XHRcdCAqIGF0IGVhY2ggaW5kZXggd2UgY2hlY2sgaWYgdGhlIHRleHQgb3ZlcmxhcHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogV2hlcmUgaXQgZG9lcywgd2Ugc3RvcmUgdGhhdCBhbmdsZSBhbmQgdGhhdCBpbmRleC5cblx0XHRcdCAqXG5cdFx0XHQgKiBBZnRlciBmaW5kaW5nIHRoZSBsYXJnZXN0IGluZGV4IGFuZCBhbmdsZSB3ZSBjYWxjdWxhdGUgaG93IG11Y2ggd2UgbmVlZCB0byByZW1vdmVcblx0XHRcdCAqIGZyb20gdGhlIHNoYXBlIHJhZGl1cyB0byBtb3ZlIHRoZSBwb2ludCBpbndhcmRzIGJ5IHRoYXQgeC5cblx0XHRcdCAqXG5cdFx0XHQgKiBXZSBhdmVyYWdlIHRoZSBsZWZ0IGFuZCByaWdodCBkaXN0YW5jZXMgdG8gZ2V0IHRoZSBtYXhpbXVtIHNoYXBlIHJhZGl1cyB0aGF0IGNhbiBmaXQgaW4gdGhlIGJveFxuXHRcdFx0ICogYWxvbmcgd2l0aCBsYWJlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogT25jZSB3ZSBoYXZlIHRoYXQsIHdlIGNhbiBmaW5kIHRoZSBjZW50cmUgcG9pbnQgZm9yIHRoZSBjaGFydCwgYnkgdGFraW5nIHRoZSB4IHRleHQgcHJvdHJ1c2lvblxuXHRcdFx0ICogb24gZWFjaCBzaWRlLCByZW1vdmluZyB0aGF0IGZyb20gdGhlIHNpemUsIGhhbHZpbmcgaXQgYW5kIGFkZGluZyB0aGUgbGVmdCB4IHByb3RydXNpb24gd2lkdGguXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyB3aWxsIG1lYW4gd2UgaGF2ZSBhIHNoYXBlIGZpdHRlZCB0byB0aGUgY2FudmFzLCBhcyBsYXJnZSBhcyBpdCBjYW4gYmUgd2l0aCB0aGUgbGFiZWxzXG5cdFx0XHQgKiBhbmQgcG9zaXRpb24gaXQgaW4gdGhlIG1vc3Qgc3BhY2UgZWZmaWNpZW50IG1hbm5lclxuXHRcdFx0ICpcblx0XHRcdCAqIGh0dHBzOi8vZGwuZHJvcGJveHVzZXJjb250ZW50LmNvbS91LzM0NjAxMzYzL3llYWhzY2llbmNlLmdpZlxuXHRcdFx0ICovXG5cblxuXHRcdFx0Ly8gR2V0IG1heGltdW0gcmFkaXVzIG9mIHRoZSBwb2x5Z29uLiBFaXRoZXIgaGFsZiB0aGUgaGVpZ2h0IChtaW51cyB0aGUgdGV4dCB3aWR0aCkgb3IgaGFsZiB0aGUgd2lkdGguXG5cdFx0XHQvLyBVc2UgdGhpcyB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCArIGNoYW5nZS4gLSBNYWtlIHN1cmUgTC9SIHByb3RydXNpb24gaXMgYXQgbGVhc3QgMCB0byBzdG9wIGlzc3VlcyB3aXRoIGNlbnRyZSBwb2ludHNcblx0XHRcdHZhciBsYXJnZXN0UG9zc2libGVSYWRpdXMgPSBtaW4oWyh0aGlzLmhlaWdodC8yIC0gdGhpcy5wb2ludExhYmVsRm9udFNpemUgLSA1KSwgdGhpcy53aWR0aC8yXSksXG5cdFx0XHRcdHBvaW50UG9zaXRpb24sXG5cdFx0XHRcdGksXG5cdFx0XHRcdHRleHRXaWR0aCxcblx0XHRcdFx0aGFsZlRleHRXaWR0aCxcblx0XHRcdFx0ZnVydGhlc3RSaWdodCA9IHRoaXMud2lkdGgsXG5cdFx0XHRcdGZ1cnRoZXN0UmlnaHRJbmRleCxcblx0XHRcdFx0ZnVydGhlc3RSaWdodEFuZ2xlLFxuXHRcdFx0XHRmdXJ0aGVzdExlZnQgPSAwLFxuXHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCxcblx0XHRcdFx0ZnVydGhlc3RMZWZ0QW5nbGUsXG5cdFx0XHRcdHhQcm90cnVzaW9uTGVmdCxcblx0XHRcdFx0eFByb3RydXNpb25SaWdodCxcblx0XHRcdFx0cmFkaXVzUmVkdWN0aW9uUmlnaHQsXG5cdFx0XHRcdHJhZGl1c1JlZHVjdGlvbkxlZnQsXG5cdFx0XHRcdG1heFdpZHRoUmFkaXVzO1xuXHRcdFx0dGhpcy5jdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5wb2ludExhYmVsRm9udFNpemUsdGhpcy5wb2ludExhYmVsRm9udFN0eWxlLHRoaXMucG9pbnRMYWJlbEZvbnRGYW1pbHkpO1xuXHRcdFx0Zm9yIChpPTA7aTx0aGlzLnZhbHVlc0NvdW50O2krKyl7XG5cdFx0XHRcdC8vIDVweCB0byBzcGFjZSB0aGUgdGV4dCBzbGlnaHRseSBvdXQgLSBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gaW4gdGhlIGRyYXcgZnVuY3Rpb24uXG5cdFx0XHRcdHBvaW50UG9zaXRpb24gPSB0aGlzLmdldFBvaW50UG9zaXRpb24oaSwgbGFyZ2VzdFBvc3NpYmxlUmFkaXVzKTtcblx0XHRcdFx0dGV4dFdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGVtcGxhdGUodGhpcy50ZW1wbGF0ZVN0cmluZywgeyB2YWx1ZTogdGhpcy5sYWJlbHNbaV0gfSkpLndpZHRoICsgNTtcblx0XHRcdFx0aWYgKGkgPT09IDAgfHwgaSA9PT0gdGhpcy52YWx1ZXNDb3VudC8yKXtcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBhdCBpbmRleCB6ZXJvLCBvciBleGFjdGx5IHRoZSBtaWRkbGUsIHdlJ3JlIGF0IGV4YWN0bHkgdGhlIHRvcC9ib3R0b21cblx0XHRcdFx0XHQvLyBvZiB0aGUgcmFkYXIgY2hhcnQsIHNvIHRleHQgd2lsbCBiZSBhbGlnbmVkIGNlbnRyYWxseSwgc28gd2UnbGwgaGFsZiBpdCBhbmQgY29tcGFyZVxuXHRcdFx0XHRcdC8vIHcvbGVmdCBhbmQgcmlnaHQgdGV4dCBzaXplc1xuXHRcdFx0XHRcdGhhbGZUZXh0V2lkdGggPSB0ZXh0V2lkdGgvMjtcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54ICsgaGFsZlRleHRXaWR0aCA+IGZ1cnRoZXN0UmlnaHQpIHtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0UmlnaHQgPSBwb2ludFBvc2l0aW9uLnggKyBoYWxmVGV4dFdpZHRoO1xuXHRcdFx0XHRcdFx0ZnVydGhlc3RSaWdodEluZGV4ID0gaTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHBvaW50UG9zaXRpb24ueCAtIGhhbGZUZXh0V2lkdGggPCBmdXJ0aGVzdExlZnQpIHtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0TGVmdCA9IHBvaW50UG9zaXRpb24ueCAtIGhhbGZUZXh0V2lkdGg7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGkgPCB0aGlzLnZhbHVlc0NvdW50LzIpIHtcblx0XHRcdFx0XHQvLyBMZXNzIHRoYW4gaGFsZiB0aGUgdmFsdWVzIG1lYW5zIHdlJ2xsIGxlZnQgYWxpZ24gdGhlIHRleHRcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54ICsgdGV4dFdpZHRoID4gZnVydGhlc3RSaWdodCkge1xuXHRcdFx0XHRcdFx0ZnVydGhlc3RSaWdodCA9IHBvaW50UG9zaXRpb24ueCArIHRleHRXaWR0aDtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0UmlnaHRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGkgPiB0aGlzLnZhbHVlc0NvdW50LzIpe1xuXHRcdFx0XHRcdC8vIE1vcmUgdGhhbiBoYWxmIHRoZSB2YWx1ZXMgbWVhbnMgd2UnbGwgcmlnaHQgYWxpZ24gdGhlIHRleHRcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54IC0gdGV4dFdpZHRoIDwgZnVydGhlc3RMZWZ0KSB7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnQgPSBwb2ludFBvc2l0aW9uLnggLSB0ZXh0V2lkdGg7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHhQcm90cnVzaW9uTGVmdCA9IGZ1cnRoZXN0TGVmdDtcblxuXHRcdFx0eFByb3RydXNpb25SaWdodCA9IE1hdGguY2VpbChmdXJ0aGVzdFJpZ2h0IC0gdGhpcy53aWR0aCk7XG5cblx0XHRcdGZ1cnRoZXN0UmlnaHRBbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShmdXJ0aGVzdFJpZ2h0SW5kZXgpO1xuXG5cdFx0XHRmdXJ0aGVzdExlZnRBbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShmdXJ0aGVzdExlZnRJbmRleCk7XG5cblx0XHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0geFByb3RydXNpb25SaWdodCAvIE1hdGguc2luKGZ1cnRoZXN0UmlnaHRBbmdsZSArIE1hdGguUEkvMik7XG5cblx0XHRcdHJhZGl1c1JlZHVjdGlvbkxlZnQgPSB4UHJvdHJ1c2lvbkxlZnQgLyBNYXRoLnNpbihmdXJ0aGVzdExlZnRBbmdsZSArIE1hdGguUEkvMik7XG5cblx0XHRcdC8vIEVuc3VyZSB3ZSBhY3R1YWxseSBuZWVkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgY2hhcnRcblx0XHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0gKGlzTnVtYmVyKHJhZGl1c1JlZHVjdGlvblJpZ2h0KSkgPyByYWRpdXNSZWR1Y3Rpb25SaWdodCA6IDA7XG5cdFx0XHRyYWRpdXNSZWR1Y3Rpb25MZWZ0ID0gKGlzTnVtYmVyKHJhZGl1c1JlZHVjdGlvbkxlZnQpKSA/IHJhZGl1c1JlZHVjdGlvbkxlZnQgOiAwO1xuXG5cdFx0XHR0aGlzLmRyYXdpbmdBcmVhID0gbGFyZ2VzdFBvc3NpYmxlUmFkaXVzIC0gKHJhZGl1c1JlZHVjdGlvbkxlZnQgKyByYWRpdXNSZWR1Y3Rpb25SaWdodCkvMjtcblxuXHRcdFx0Ly90aGlzLmRyYXdpbmdBcmVhID0gbWluKFttYXhXaWR0aFJhZGl1cywgKHRoaXMuaGVpZ2h0IC0gKDIgKiAodGhpcy5wb2ludExhYmVsRm9udFNpemUgKyA1KSkpLzJdKVxuXHRcdFx0dGhpcy5zZXRDZW50ZXJQb2ludChyYWRpdXNSZWR1Y3Rpb25MZWZ0LCByYWRpdXNSZWR1Y3Rpb25SaWdodCk7XG5cblx0XHR9LFxuXHRcdHNldENlbnRlclBvaW50OiBmdW5jdGlvbihsZWZ0TW92ZW1lbnQsIHJpZ2h0TW92ZW1lbnQpe1xuXG5cdFx0XHR2YXIgbWF4UmlnaHQgPSB0aGlzLndpZHRoIC0gcmlnaHRNb3ZlbWVudCAtIHRoaXMuZHJhd2luZ0FyZWEsXG5cdFx0XHRcdG1heExlZnQgPSBsZWZ0TW92ZW1lbnQgKyB0aGlzLmRyYXdpbmdBcmVhO1xuXG5cdFx0XHR0aGlzLnhDZW50ZXIgPSAobWF4TGVmdCArIG1heFJpZ2h0KS8yO1xuXHRcdFx0Ly8gQWx3YXlzIHZlcnRpY2FsbHkgaW4gdGhlIGNlbnRyZSBhcyB0aGUgdGV4dCBoZWlnaHQgZG9lc24ndCBjaGFuZ2Vcblx0XHRcdHRoaXMueUNlbnRlciA9ICh0aGlzLmhlaWdodC8yKTtcblx0XHR9LFxuXG5cdFx0Z2V0SW5kZXhBbmdsZSA6IGZ1bmN0aW9uKGluZGV4KXtcblx0XHRcdHZhciBhbmdsZU11bHRpcGxpZXIgPSAoTWF0aC5QSSAqIDIpIC8gdGhpcy52YWx1ZXNDb3VudDtcblx0XHRcdC8vIFN0YXJ0IGZyb20gdGhlIHRvcCBpbnN0ZWFkIG9mIHJpZ2h0LCBzbyByZW1vdmUgYSBxdWFydGVyIG9mIHRoZSBjaXJjbGVcblxuXHRcdFx0cmV0dXJuIGluZGV4ICogYW5nbGVNdWx0aXBsaWVyIC0gKE1hdGguUEkvMik7XG5cdFx0fSxcblx0XHRnZXRQb2ludFBvc2l0aW9uIDogZnVuY3Rpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlcil7XG5cdFx0XHR2YXIgdGhpc0FuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKGluZGV4KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHggOiAoTWF0aC5jb3ModGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyB0aGlzLnhDZW50ZXIsXG5cdFx0XHRcdHkgOiAoTWF0aC5zaW4odGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyB0aGlzLnlDZW50ZXJcblx0XHRcdH07XG5cdFx0fSxcblx0XHRkcmF3OiBmdW5jdGlvbigpe1xuXHRcdFx0aWYgKHRoaXMuZGlzcGxheSl7XG5cdFx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblx0XHRcdFx0ZWFjaCh0aGlzLnlMYWJlbHMsIGZ1bmN0aW9uKGxhYmVsLCBpbmRleCl7XG5cdFx0XHRcdFx0Ly8gRG9uJ3QgZHJhdyBhIGNlbnRyZSB2YWx1ZVxuXHRcdFx0XHRcdGlmIChpbmRleCA+IDApe1xuXHRcdFx0XHRcdFx0dmFyIHlDZW50ZXJPZmZzZXQgPSBpbmRleCAqICh0aGlzLmRyYXdpbmdBcmVhL3RoaXMuc3RlcHMpLFxuXHRcdFx0XHRcdFx0XHR5SGVpZ2h0ID0gdGhpcy55Q2VudGVyIC0geUNlbnRlck9mZnNldCxcblx0XHRcdFx0XHRcdFx0cG9pbnRQb3NpdGlvbjtcblxuXHRcdFx0XHRcdFx0Ly8gRHJhdyBjaXJjdWxhciBsaW5lcyBhcm91bmQgdGhlIHNjYWxlXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5saW5lV2lkdGggPiAwKXtcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5saW5lQ29sb3I7XG5cdFx0XHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcblxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLmxpbmVBcmMpe1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdFx0XHRjdHguYXJjKHRoaXMueENlbnRlciwgdGhpcy55Q2VudGVyLCB5Q2VudGVyT2Zmc2V0LCAwLCBNYXRoLlBJKjIpO1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaT0wO2k8dGhpcy52YWx1ZXNDb3VudDtpKyspXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cG9pbnRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihpLCB0aGlzLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh0aGlzLm1pbiArIChpbmRleCAqIHRoaXMuc3RlcFZhbHVlKSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGkgPT09IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRQb3NpdGlvbi54LCBwb2ludFBvc2l0aW9uLnkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZih0aGlzLnNob3dMYWJlbHMpe1xuXHRcdFx0XHRcdFx0XHRjdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5mb250U2l6ZSx0aGlzLmZvbnRTdHlsZSx0aGlzLmZvbnRGYW1pbHkpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5zaG93TGFiZWxCYWNrZHJvcCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxhYmVsV2lkdGggPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tkcm9wQ29sb3I7XG5cdFx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54Q2VudGVyIC0gbGFiZWxXaWR0aC8yIC0gdGhpcy5iYWNrZHJvcFBhZGRpbmdYLFxuXHRcdFx0XHRcdFx0XHRcdFx0eUhlaWdodCAtIHRoaXMuZm9udFNpemUvMiAtIHRoaXMuYmFja2Ryb3BQYWRkaW5nWSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGggKyB0aGlzLmJhY2tkcm9wUGFkZGluZ1gqMixcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9udFNpemUgKyB0aGlzLmJhY2tkcm9wUGFkZGluZ1kqMlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuXHRcdFx0XHRcdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcblx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMuZm9udENvbG9yO1xuXHRcdFx0XHRcdFx0XHRjdHguZmlsbFRleHQobGFiZWwsIHRoaXMueENlbnRlciwgeUhlaWdodCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCB0aGlzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMubGluZUFyYyl7XG5cdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuYW5nbGVMaW5lV2lkdGg7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5hbmdsZUxpbmVDb2xvcjtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gdGhpcy52YWx1ZXNDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbmdsZUxpbmVXaWR0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHR2YXIgb3V0ZXJQb3NpdGlvbiA9IHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihpLCB0aGlzLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh0aGlzLm1heCkpO1xuXHRcdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8odGhpcy54Q2VudGVyLCB0aGlzLnlDZW50ZXIpO1xuXHRcdFx0XHRcdFx0XHRjdHgubGluZVRvKG91dGVyUG9zaXRpb24ueCwgb3V0ZXJQb3NpdGlvbi55KTtcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBFeHRyYSAzcHggb3V0IGZvciBzb21lIGxhYmVsIHNwYWNpbmdcblx0XHRcdFx0XHRcdHZhciBwb2ludExhYmVsUG9zaXRpb24gPSB0aGlzLmdldFBvaW50UG9zaXRpb24oaSwgdGhpcy5jYWxjdWxhdGVDZW50ZXJPZmZzZXQodGhpcy5tYXgpICsgNSk7XG5cdFx0XHRcdFx0XHRjdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5wb2ludExhYmVsRm9udFNpemUsdGhpcy5wb2ludExhYmVsRm9udFN0eWxlLHRoaXMucG9pbnRMYWJlbEZvbnRGYW1pbHkpO1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMucG9pbnRMYWJlbEZvbnRDb2xvcjtcblxuXHRcdFx0XHRcdFx0dmFyIGxhYmVsc0NvdW50ID0gdGhpcy5sYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRoYWxmTGFiZWxzQ291bnQgPSB0aGlzLmxhYmVscy5sZW5ndGgvMixcblx0XHRcdFx0XHRcdFx0cXVhcnRlckxhYmVsc0NvdW50ID0gaGFsZkxhYmVsc0NvdW50LzIsXG5cdFx0XHRcdFx0XHRcdHVwcGVySGFsZiA9IChpIDwgcXVhcnRlckxhYmVsc0NvdW50IHx8IGkgPiBsYWJlbHNDb3VudCAtIHF1YXJ0ZXJMYWJlbHNDb3VudCksXG5cdFx0XHRcdFx0XHRcdGV4YWN0UXVhcnRlciA9IChpID09PSBxdWFydGVyTGFiZWxzQ291bnQgfHwgaSA9PT0gbGFiZWxzQ291bnQgLSBxdWFydGVyTGFiZWxzQ291bnQpO1xuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApe1xuXHRcdFx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoaSA9PT0gaGFsZkxhYmVsc0NvdW50KXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpIDwgaGFsZkxhYmVsc0NvdW50KXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdsZWZ0Jztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAncmlnaHQnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgdGV4dCBiYXNlbGluZSBiYXNlZCBvbiBvdXRlciBwb3NpdGlvbmluZ1xuXHRcdFx0XHRcdFx0aWYgKGV4YWN0UXVhcnRlcil7XG5cdFx0XHRcdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodXBwZXJIYWxmKXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdHguZmlsbFRleHQodGhpcy5sYWJlbHNbaV0sIHBvaW50TGFiZWxQb3NpdGlvbi54LCBwb2ludExhYmVsUG9zaXRpb24ueSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBBdHRhY2ggZ2xvYmFsIGV2ZW50IHRvIHJlc2l6ZSBlYWNoIGNoYXJ0IGluc3RhbmNlIHdoZW4gdGhlIGJyb3dzZXIgcmVzaXplc1xuXHRoZWxwZXJzLmFkZEV2ZW50KHdpbmRvdywgXCJyZXNpemVcIiwgKGZ1bmN0aW9uKCl7XG5cdFx0Ly8gQmFzaWMgZGVib3VuY2Ugb2YgcmVzaXplIGZ1bmN0aW9uIHNvIGl0IGRvZXNuJ3QgaHVydCBwZXJmb3JtYW5jZSB3aGVuIHJlc2l6aW5nIGJyb3dzZXIuXG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHR0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRlYWNoKENoYXJ0Lmluc3RhbmNlcyxmdW5jdGlvbihpbnN0YW5jZSl7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHJlc3BvbnNpdmUgZmxhZyBpcyBzZXQgaW4gdGhlIGNoYXJ0IGluc3RhbmNlIGNvbmZpZ1xuXHRcdFx0XHRcdC8vIENhc2NhZGUgdGhlIHJlc2l6ZSBldmVudCBkb3duIHRvIHRoZSBjaGFydC5cblx0XHRcdFx0XHRpZiAoaW5zdGFuY2Uub3B0aW9ucy5yZXNwb25zaXZlKXtcblx0XHRcdFx0XHRcdGluc3RhbmNlLnJlc2l6ZShpbnN0YW5jZS5yZW5kZXIsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCA1MCk7XG5cdFx0fTtcblx0fSkoKSk7XG5cblxuXHRpZiAoYW1kKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gQ2hhcnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IENoYXJ0O1xuXHR9XG5cblx0cm9vdC5DaGFydCA9IENoYXJ0O1xuXG5cdENoYXJ0Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpe1xuXHRcdHJvb3QuQ2hhcnQgPSBwcmV2aW91cztcblx0XHRyZXR1cm4gQ2hhcnQ7XG5cdH07XG5cbn0pLmNhbGwodGhpcyk7XG5cbihmdW5jdGlvbigpe1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgcm9vdCA9IHRoaXMsXG5cdFx0Q2hhcnQgPSByb290LkNoYXJ0LFxuXHRcdGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzO1xuXG5cblx0dmFyIGRlZmF1bHRDb25maWcgPSB7XG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBkb3duIGZyb20gdGhlIGxvd2VzdCB2YWx1ZVxuXHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciBncmlkIGxpbmVzIGFyZSBzaG93biBhY3Jvc3MgdGhlIGNoYXJ0XG5cdFx0c2NhbGVTaG93R3JpZExpbmVzIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gQ29sb3VyIG9mIHRoZSBncmlkIGxpbmVzXG5cdFx0c2NhbGVHcmlkTGluZUNvbG9yIDogXCJyZ2JhKDAsMCwwLC4wNSlcIixcblxuXHRcdC8vTnVtYmVyIC0gV2lkdGggb2YgdGhlIGdyaWQgbGluZXNcblx0XHRzY2FsZUdyaWRMaW5lV2lkdGggOiAxLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGhvcml6b250YWwgbGluZXMgKGV4Y2VwdCBYIGF4aXMpXG5cdFx0c2NhbGVTaG93SG9yaXpvbnRhbExpbmVzOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IHZlcnRpY2FsIGxpbmVzIChleGNlcHQgWSBheGlzKVxuXHRcdHNjYWxlU2hvd1ZlcnRpY2FsTGluZXM6IHRydWUsXG5cblx0XHQvL0Jvb2xlYW4gLSBJZiB0aGVyZSBpcyBhIHN0cm9rZSBvbiBlYWNoIGJhclxuXHRcdGJhclNob3dTdHJva2UgOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBQaXhlbCB3aWR0aCBvZiB0aGUgYmFyIHN0cm9rZVxuXHRcdGJhclN0cm9rZVdpZHRoIDogMixcblxuXHRcdC8vTnVtYmVyIC0gU3BhY2luZyBiZXR3ZWVuIGVhY2ggb2YgdGhlIFggdmFsdWUgc2V0c1xuXHRcdGJhclZhbHVlU3BhY2luZyA6IDUsXG5cblx0XHQvL051bWJlciAtIFNwYWNpbmcgYmV0d2VlbiBkYXRhIHNldHMgd2l0aGluIFggdmFsdWVzXG5cdFx0YmFyRGF0YXNldFNwYWNpbmcgOiAxLFxuXG5cdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdGxlZ2VuZFRlbXBsYXRlIDogXCI8dWwgY2xhc3M9XFxcIjwlPW5hbWUudG9Mb3dlckNhc2UoKSU+LWxlZ2VuZFxcXCI+PCUgZm9yICh2YXIgaT0wOyBpPGRhdGFzZXRzLmxlbmd0aDsgaSsrKXslPjxsaT48c3BhbiBzdHlsZT1cXFwiYmFja2dyb3VuZC1jb2xvcjo8JT1kYXRhc2V0c1tpXS5maWxsQ29sb3IlPlxcXCI+PC9zcGFuPjwlaWYoZGF0YXNldHNbaV0ubGFiZWwpeyU+PCU9ZGF0YXNldHNbaV0ubGFiZWwlPjwlfSU+PC9saT48JX0lPjwvdWw+XCJcblxuXHR9O1xuXG5cblx0Q2hhcnQuVHlwZS5leHRlbmQoe1xuXHRcdG5hbWU6IFwiQmFyXCIsXG5cdFx0ZGVmYXVsdHMgOiBkZWZhdWx0Q29uZmlnLFxuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblxuXHRcdFx0Ly9FeHBvc2Ugb3B0aW9ucyBhcyBhIHNjb3BlIHZhcmlhYmxlIGhlcmUgc28gd2UgY2FuIGFjY2VzcyBpdCBpbiB0aGUgU2NhbGVDbGFzc1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRcdHRoaXMuU2NhbGVDbGFzcyA9IENoYXJ0LlNjYWxlLmV4dGVuZCh7XG5cdFx0XHRcdG9mZnNldEdyaWRMaW5lcyA6IHRydWUsXG5cdFx0XHRcdGNhbGN1bGF0ZUJhclggOiBmdW5jdGlvbihkYXRhc2V0Q291bnQsIGRhdGFzZXRJbmRleCwgYmFySW5kZXgpe1xuXHRcdFx0XHRcdC8vUmV1c2FibGUgbWV0aG9kIGZvciBjYWxjdWxhdGluZyB0aGUgeFBvc2l0aW9uIG9mIGEgZ2l2ZW4gYmFyIGJhc2VkIG9uIGRhdGFzZXRJbmRleCAmIHdpZHRoIG9mIHRoZSBiYXJcblx0XHRcdFx0XHR2YXIgeFdpZHRoID0gdGhpcy5jYWxjdWxhdGVCYXNlV2lkdGgoKSxcblx0XHRcdFx0XHRcdHhBYnNvbHV0ZSA9IHRoaXMuY2FsY3VsYXRlWChiYXJJbmRleCkgLSAoeFdpZHRoLzIpLFxuXHRcdFx0XHRcdFx0YmFyV2lkdGggPSB0aGlzLmNhbGN1bGF0ZUJhcldpZHRoKGRhdGFzZXRDb3VudCk7XG5cblx0XHRcdFx0XHRyZXR1cm4geEFic29sdXRlICsgKGJhcldpZHRoICogZGF0YXNldEluZGV4KSArIChkYXRhc2V0SW5kZXggKiBvcHRpb25zLmJhckRhdGFzZXRTcGFjaW5nKSArIGJhcldpZHRoLzI7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNhbGN1bGF0ZUJhc2VXaWR0aCA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0cmV0dXJuICh0aGlzLmNhbGN1bGF0ZVgoMSkgLSB0aGlzLmNhbGN1bGF0ZVgoMCkpIC0gKDIqb3B0aW9ucy5iYXJWYWx1ZVNwYWNpbmcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjYWxjdWxhdGVCYXJXaWR0aCA6IGZ1bmN0aW9uKGRhdGFzZXRDb3VudCl7XG5cdFx0XHRcdFx0Ly9UaGUgcGFkZGluZyBiZXR3ZWVuIGRhdGFzZXRzIGlzIHRvIHRoZSByaWdodCBvZiBlYWNoIGJhciwgcHJvdmlkaW5nIHRoYXQgdGhlcmUgYXJlIG1vcmUgdGhhbiAxIGRhdGFzZXRcblx0XHRcdFx0XHR2YXIgYmFzZVdpZHRoID0gdGhpcy5jYWxjdWxhdGVCYXNlV2lkdGgoKSAtICgoZGF0YXNldENvdW50IC0gMSkgKiBvcHRpb25zLmJhckRhdGFzZXRTcGFjaW5nKTtcblxuXHRcdFx0XHRcdHJldHVybiAoYmFzZVdpZHRoIC8gZGF0YXNldENvdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGF0YXNldHMgPSBbXTtcblxuXHRcdFx0Ly9TZXQgdXAgdG9vbHRpcCBldmVudHMgb24gdGhlIGNoYXJ0XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLnNob3dUb29sdGlwcyl7XG5cdFx0XHRcdGhlbHBlcnMuYmluZEV2ZW50cyh0aGlzLCB0aGlzLm9wdGlvbnMudG9vbHRpcEV2ZW50cywgZnVuY3Rpb24oZXZ0KXtcblx0XHRcdFx0XHR2YXIgYWN0aXZlQmFycyA9IChldnQudHlwZSAhPT0gJ21vdXNlb3V0JykgPyB0aGlzLmdldEJhcnNBdEV2ZW50KGV2dCkgOiBbXTtcblxuXHRcdFx0XHRcdHRoaXMuZWFjaEJhcnMoZnVuY3Rpb24oYmFyKXtcblx0XHRcdFx0XHRcdGJhci5yZXN0b3JlKFsnZmlsbENvbG9yJywgJ3N0cm9rZUNvbG9yJ10pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChhY3RpdmVCYXJzLCBmdW5jdGlvbihhY3RpdmVCYXIpe1xuXHRcdFx0XHRcdFx0YWN0aXZlQmFyLmZpbGxDb2xvciA9IGFjdGl2ZUJhci5oaWdobGlnaHRGaWxsO1xuXHRcdFx0XHRcdFx0YWN0aXZlQmFyLnN0cm9rZUNvbG9yID0gYWN0aXZlQmFyLmhpZ2hsaWdodFN0cm9rZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnNob3dUb29sdGlwKGFjdGl2ZUJhcnMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9EZWNsYXJlIHRoZSBleHRlbnNpb24gb2YgdGhlIGRlZmF1bHQgcG9pbnQsIHRvIGNhdGVyIGZvciB0aGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG5cdFx0XHR0aGlzLkJhckNsYXNzID0gQ2hhcnQuUmVjdGFuZ2xlLmV4dGVuZCh7XG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLmJhclN0cm9rZVdpZHRoLFxuXHRcdFx0XHRzaG93U3Ryb2tlIDogdGhpcy5vcHRpb25zLmJhclNob3dTdHJva2UsXG5cdFx0XHRcdGN0eCA6IHRoaXMuY2hhcnQuY3R4XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9JdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgZGF0YXNldHMsIGFuZCBidWlsZCB0aGlzIGludG8gYSBwcm9wZXJ0eSBvZiB0aGUgY2hhcnRcblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsZGF0YXNldEluZGV4KXtcblxuXHRcdFx0XHR2YXIgZGF0YXNldE9iamVjdCA9IHtcblx0XHRcdFx0XHRsYWJlbCA6IGRhdGFzZXQubGFiZWwgfHwgbnVsbCxcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiBkYXRhc2V0LmZpbGxDb2xvcixcblx0XHRcdFx0XHRzdHJva2VDb2xvciA6IGRhdGFzZXQuc3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0YmFycyA6IFtdXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5kYXRhc2V0cy5wdXNoKGRhdGFzZXRPYmplY3QpO1xuXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmRhdGEsZnVuY3Rpb24oZGF0YVBvaW50LGluZGV4KXtcblx0XHRcdFx0XHQvL0FkZCBhIG5ldyBwb2ludCBmb3IgZWFjaCBwaWVjZSBvZiBkYXRhLCBwYXNzaW5nIGFueSByZXF1aXJlZCBkYXRhIHRvIGRyYXcuXG5cdFx0XHRcdFx0ZGF0YXNldE9iamVjdC5iYXJzLnB1c2gobmV3IHRoaXMuQmFyQ2xhc3Moe1xuXHRcdFx0XHRcdFx0dmFsdWUgOiBkYXRhUG9pbnQsXG5cdFx0XHRcdFx0XHRsYWJlbCA6IGRhdGEubGFiZWxzW2luZGV4XSxcblx0XHRcdFx0XHRcdGRhdGFzZXRMYWJlbDogZGF0YXNldC5sYWJlbCxcblx0XHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0RmlsbCA6IGRhdGFzZXQuaGlnaGxpZ2h0RmlsbCB8fCBkYXRhc2V0LmZpbGxDb2xvcixcblx0XHRcdFx0XHRcdGhpZ2hsaWdodFN0cm9rZSA6IGRhdGFzZXQuaGlnaGxpZ2h0U3Ryb2tlIHx8IGRhdGFzZXQuc3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdHRoaXMuYnVpbGRTY2FsZShkYXRhLmxhYmVscyk7XG5cblx0XHRcdHRoaXMuQmFyQ2xhc3MucHJvdG90eXBlLmJhc2UgPSB0aGlzLnNjYWxlLmVuZFBvaW50O1xuXG5cdFx0XHR0aGlzLmVhY2hCYXJzKGZ1bmN0aW9uKGJhciwgaW5kZXgsIGRhdGFzZXRJbmRleCl7XG5cdFx0XHRcdGhlbHBlcnMuZXh0ZW5kKGJhciwge1xuXHRcdFx0XHRcdHdpZHRoIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJXaWR0aCh0aGlzLmRhdGFzZXRzLmxlbmd0aCksXG5cdFx0XHRcdFx0eDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJYKHRoaXMuZGF0YXNldHMubGVuZ3RoLCBkYXRhc2V0SW5kZXgsIGluZGV4KSxcblx0XHRcdFx0XHR5OiB0aGlzLnNjYWxlLmVuZFBvaW50XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRiYXIuc2F2ZSgpO1xuXHRcdFx0fSwgdGhpcyk7XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHR1cGRhdGUgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUoKTtcblx0XHRcdC8vIFJlc2V0IGFueSBoaWdobGlnaHQgY29sb3VycyBiZWZvcmUgdXBkYXRpbmcuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5hY3RpdmVFbGVtZW50cywgZnVuY3Rpb24oYWN0aXZlRWxlbWVudCl7XG5cdFx0XHRcdGFjdGl2ZUVsZW1lbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVhY2hCYXJzKGZ1bmN0aW9uKGJhcil7XG5cdFx0XHRcdGJhci5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRlYWNoQmFycyA6IGZ1bmN0aW9uKGNhbGxiYWNrKXtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCl7XG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmJhcnMsIGNhbGxiYWNrLCB0aGlzLCBkYXRhc2V0SW5kZXgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHR9LFxuXHRcdGdldEJhcnNBdEV2ZW50IDogZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgYmFyc0FycmF5ID0gW10sXG5cdFx0XHRcdGV2ZW50UG9zaXRpb24gPSBoZWxwZXJzLmdldFJlbGF0aXZlUG9zaXRpb24oZSksXG5cdFx0XHRcdGRhdGFzZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRcdGJhcnNBcnJheS5wdXNoKGRhdGFzZXQuYmFyc1tiYXJJbmRleF0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRiYXJJbmRleDtcblxuXHRcdFx0Zm9yICh2YXIgZGF0YXNldEluZGV4ID0gMDsgZGF0YXNldEluZGV4IDwgdGhpcy5kYXRhc2V0cy5sZW5ndGg7IGRhdGFzZXRJbmRleCsrKSB7XG5cdFx0XHRcdGZvciAoYmFySW5kZXggPSAwOyBiYXJJbmRleCA8IHRoaXMuZGF0YXNldHNbZGF0YXNldEluZGV4XS5iYXJzLmxlbmd0aDsgYmFySW5kZXgrKykge1xuXHRcdFx0XHRcdGlmICh0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uYmFyc1tiYXJJbmRleF0uaW5SYW5nZShldmVudFBvc2l0aW9uLngsZXZlbnRQb3NpdGlvbi55KSl7XG5cdFx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZGF0YXNldEl0ZXJhdG9yKTtcblx0XHRcdFx0XHRcdHJldHVybiBiYXJzQXJyYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBiYXJzQXJyYXk7XG5cdFx0fSxcblx0XHRidWlsZFNjYWxlIDogZnVuY3Rpb24obGFiZWxzKXtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0dmFyIGRhdGFUb3RhbCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0c2VsZi5lYWNoQmFycyhmdW5jdGlvbihiYXIpe1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGJhci52YWx1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIHNjYWxlT3B0aW9ucyA9IHtcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgOiB0aGlzLm9wdGlvbnMuc2NhbGVMYWJlbCxcblx0XHRcdFx0aGVpZ2h0IDogdGhpcy5jaGFydC5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHRleHRDb2xvciA6IHRoaXMub3B0aW9ucy5zY2FsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFNpemUgOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLFxuXHRcdFx0XHRmb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0dmFsdWVzQ291bnQgOiBsYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRiZWdpbkF0WmVybyA6IHRoaXMub3B0aW9ucy5zY2FsZUJlZ2luQXRaZXJvLFxuXHRcdFx0XHRpbnRlZ2Vyc09ubHkgOiB0aGlzLm9wdGlvbnMuc2NhbGVJbnRlZ2Vyc09ubHksXG5cdFx0XHRcdGNhbGN1bGF0ZVlSYW5nZTogZnVuY3Rpb24oY3VycmVudEhlaWdodCl7XG5cdFx0XHRcdFx0dmFyIHVwZGF0ZWRSYW5nZXMgPSBoZWxwZXJzLmNhbGN1bGF0ZVNjYWxlUmFuZ2UoXG5cdFx0XHRcdFx0XHRkYXRhVG90YWwoKSxcblx0XHRcdFx0XHRcdGN1cnJlbnRIZWlnaHQsXG5cdFx0XHRcdFx0XHR0aGlzLmZvbnRTaXplLFxuXHRcdFx0XHRcdFx0dGhpcy5iZWdpbkF0WmVybyxcblx0XHRcdFx0XHRcdHRoaXMuaW50ZWdlcnNPbmx5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLCB1cGRhdGVkUmFuZ2VzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eExhYmVscyA6IGxhYmVscyxcblx0XHRcdFx0Zm9udCA6IGhlbHBlcnMuZm9udFN0cmluZyh0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSwgdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLCB0aGlzLm9wdGlvbnMuc2NhbGVGb250RmFtaWx5KSxcblx0XHRcdFx0bGluZVdpZHRoIDogdGhpcy5vcHRpb25zLnNjYWxlTGluZVdpZHRoLFxuXHRcdFx0XHRsaW5lQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2NhbGVMaW5lQ29sb3IsXG5cdFx0XHRcdHNob3dIb3Jpem9udGFsTGluZXMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93SG9yaXpvbnRhbExpbmVzLFxuXHRcdFx0XHRzaG93VmVydGljYWxMaW5lcyA6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dWZXJ0aWNhbExpbmVzLFxuXHRcdFx0XHRncmlkTGluZVdpZHRoIDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dHcmlkTGluZXMpID8gdGhpcy5vcHRpb25zLnNjYWxlR3JpZExpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGdyaWRMaW5lQ29sb3IgOiAodGhpcy5vcHRpb25zLnNjYWxlU2hvd0dyaWRMaW5lcykgPyB0aGlzLm9wdGlvbnMuc2NhbGVHcmlkTGluZUNvbG9yIDogXCJyZ2JhKDAsMCwwLDApXCIsXG5cdFx0XHRcdHBhZGRpbmcgOiAodGhpcy5vcHRpb25zLnNob3dTY2FsZSkgPyAwIDogKHRoaXMub3B0aW9ucy5iYXJTaG93U3Ryb2tlKSA/IHRoaXMub3B0aW9ucy5iYXJTdHJva2VXaWR0aCA6IDAsXG5cdFx0XHRcdHNob3dMYWJlbHMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxzLFxuXHRcdFx0XHRkaXNwbGF5IDogdGhpcy5vcHRpb25zLnNob3dTY2FsZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zY2FsZU92ZXJyaWRlKXtcblx0XHRcdFx0aGVscGVycy5leHRlbmQoc2NhbGVPcHRpb25zLCB7XG5cdFx0XHRcdFx0Y2FsY3VsYXRlWVJhbmdlOiBoZWxwZXJzLm5vb3AsXG5cdFx0XHRcdFx0c3RlcHM6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzLFxuXHRcdFx0XHRcdHN0ZXBWYWx1ZTogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoLFxuXHRcdFx0XHRcdG1pbjogdGhpcy5vcHRpb25zLnNjYWxlU3RhcnRWYWx1ZSxcblx0XHRcdFx0XHRtYXg6IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUgKyAodGhpcy5vcHRpb25zLnNjYWxlU3RlcHMgKiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwV2lkdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IHRoaXMuU2NhbGVDbGFzcyhzY2FsZU9wdGlvbnMpO1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHZhbHVlc0FycmF5LGxhYmVsKXtcblx0XHRcdC8vTWFwIHRoZSB2YWx1ZXMgYXJyYXkgZm9yIGVhY2ggb2YgdGhlIGRhdGFzZXRzXG5cdFx0XHRoZWxwZXJzLmVhY2godmFsdWVzQXJyYXksZnVuY3Rpb24odmFsdWUsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uYmFycy5wdXNoKG5ldyB0aGlzLkJhckNsYXNzKHtcblx0XHRcdFx0XHR2YWx1ZSA6IHZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsIDogbGFiZWwsXG5cdFx0XHRcdFx0eDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJYKHRoaXMuZGF0YXNldHMubGVuZ3RoLCBkYXRhc2V0SW5kZXgsIHRoaXMuc2NhbGUudmFsdWVzQ291bnQrMSksXG5cdFx0XHRcdFx0eTogdGhpcy5zY2FsZS5lbmRQb2ludCxcblx0XHRcdFx0XHR3aWR0aCA6IHRoaXMuc2NhbGUuY2FsY3VsYXRlQmFyV2lkdGgodGhpcy5kYXRhc2V0cy5sZW5ndGgpLFxuXHRcdFx0XHRcdGJhc2UgOiB0aGlzLnNjYWxlLmVuZFBvaW50LFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogdGhpcy5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdLnN0cm9rZUNvbG9yLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IHRoaXMuZGF0YXNldHNbZGF0YXNldEluZGV4XS5maWxsQ29sb3Jcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSx0aGlzKTtcblxuXHRcdFx0dGhpcy5zY2FsZS5hZGRYTGFiZWwobGFiZWwpO1xuXHRcdFx0Ly9UaGVuIHJlLXJlbmRlciB0aGUgY2hhcnQuXG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdH0sXG5cdFx0cmVtb3ZlRGF0YSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNjYWxlLnJlbW92ZVhMYWJlbCgpO1xuXHRcdFx0Ly9UaGVuIHJlLXJlbmRlciB0aGUgY2hhcnQuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cyxmdW5jdGlvbihkYXRhc2V0KXtcblx0XHRcdFx0ZGF0YXNldC5iYXJzLnNoaWZ0KCk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLkJhckNsYXNzLnByb3RvdHlwZSx7XG5cdFx0XHRcdHk6IHRoaXMuc2NhbGUuZW5kUG9pbnQsXG5cdFx0XHRcdGJhc2UgOiB0aGlzLnNjYWxlLmVuZFBvaW50XG5cdFx0XHR9KTtcblx0XHRcdHZhciBuZXdTY2FsZVByb3BzID0gaGVscGVycy5leHRlbmQoe1xuXHRcdFx0XHRoZWlnaHQgOiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0d2lkdGggOiB0aGlzLmNoYXJ0LndpZHRoXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2NhbGUudXBkYXRlKG5ld1NjYWxlUHJvcHMpO1xuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKGVhc2Upe1xuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBlYXNlIHx8IDE7XG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cblx0XHRcdHZhciBjdHggPSB0aGlzLmNoYXJ0LmN0eDtcblxuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KGVhc2luZ0RlY2ltYWwpO1xuXG5cdFx0XHQvL0RyYXcgYWxsIHRoZSBiYXJzIGZvciBlYWNoIGRhdGFzZXRcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuYmFycyxmdW5jdGlvbihiYXIsaW5kZXgpe1xuXHRcdFx0XHRcdGlmIChiYXIuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRiYXIuYmFzZSA9IHRoaXMuc2NhbGUuZW5kUG9pbnQ7XG5cdFx0XHRcdFx0XHQvL1RyYW5zaXRpb24gdGhlbiBkcmF3XG5cdFx0XHRcdFx0XHRiYXIudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0XHRcdHggOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZUJhclgodGhpcy5kYXRhc2V0cy5sZW5ndGgsIGRhdGFzZXRJbmRleCwgaW5kZXgpLFxuXHRcdFx0XHRcdFx0XHR5IDogdGhpcy5zY2FsZS5jYWxjdWxhdGVZKGJhci52YWx1ZSksXG5cdFx0XHRcdFx0XHRcdHdpZHRoIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJXaWR0aCh0aGlzLmRhdGFzZXRzLmxlbmd0aClcblx0XHRcdFx0XHRcdH0sIGVhc2luZ0RlY2ltYWwpLmRyYXcoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cdFx0fVxuXHR9KTtcblxuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oKXtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdENoYXJ0ID0gcm9vdC5DaGFydCxcblx0XHQvL0NhY2hlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIENoYXJ0LmhlbHBlcnNcblx0XHRoZWxwZXJzID0gQ2hhcnQuaGVscGVycztcblxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHdlIHNob3VsZCBzaG93IGEgc3Ryb2tlIG9uIGVhY2ggc2VnbWVudFxuXHRcdHNlZ21lbnRTaG93U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gVGhlIGNvbG91ciBvZiBlYWNoIHNlZ21lbnQgc3Ryb2tlXG5cdFx0c2VnbWVudFN0cm9rZUNvbG9yIDogXCIjZmZmXCIsXG5cblx0XHQvL051bWJlciAtIFRoZSB3aWR0aCBvZiBlYWNoIHNlZ21lbnQgc3Ryb2tlXG5cdFx0c2VnbWVudFN0cm9rZVdpZHRoIDogMixcblxuXHRcdC8vVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYXJ0IHRoYXQgd2UgY3V0IG91dCBvZiB0aGUgbWlkZGxlLlxuXHRcdHBlcmNlbnRhZ2VJbm5lckN1dG91dCA6IDUwLFxuXG5cdFx0Ly9OdW1iZXIgLSBBbW91bnQgb2YgYW5pbWF0aW9uIHN0ZXBzXG5cdFx0YW5pbWF0aW9uU3RlcHMgOiAxMDAsXG5cblx0XHQvL1N0cmluZyAtIEFuaW1hdGlvbiBlYXNpbmcgZWZmZWN0XG5cdFx0YW5pbWF0aW9uRWFzaW5nIDogXCJlYXNlT3V0Qm91bmNlXCIsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHdlIGFuaW1hdGUgdGhlIHJvdGF0aW9uIG9mIHRoZSBEb3VnaG51dFxuXHRcdGFuaW1hdGVSb3RhdGUgOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB3ZSBhbmltYXRlIHNjYWxpbmcgdGhlIERvdWdobnV0IGZyb20gdGhlIGNlbnRyZVxuXHRcdGFuaW1hdGVTY2FsZSA6IGZhbHNlLFxuXG5cdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdGxlZ2VuZFRlbXBsYXRlIDogXCI8dWwgY2xhc3M9XFxcIjwlPW5hbWUudG9Mb3dlckNhc2UoKSU+LWxlZ2VuZFxcXCI+PCUgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKXslPjxsaT48c3BhbiBzdHlsZT1cXFwiYmFja2dyb3VuZC1jb2xvcjo8JT1zZWdtZW50c1tpXS5maWxsQ29sb3IlPlxcXCI+PC9zcGFuPjwlaWYoc2VnbWVudHNbaV0ubGFiZWwpeyU+PCU9c2VnbWVudHNbaV0ubGFiZWwlPjwlfSU+PC9saT48JX0lPjwvdWw+XCJcblxuXHR9O1xuXG5cblx0Q2hhcnQuVHlwZS5leHRlbmQoe1xuXHRcdC8vUGFzc2luZyBpbiBhIG5hbWUgcmVnaXN0ZXJzIHRoaXMgY2hhcnQgaW4gdGhlIENoYXJ0IG5hbWVzcGFjZVxuXHRcdG5hbWU6IFwiRG91Z2hudXRcIixcblx0XHQvL1Byb3ZpZGluZyBhIGRlZmF1bHRzIHdpbGwgYWxzbyByZWdpc3RlciB0aGUgZGVhZnVsdHMgaW4gdGhlIGNoYXJ0IG5hbWVzcGFjZVxuXHRcdGRlZmF1bHRzIDogZGVmYXVsdENvbmZpZyxcblx0XHQvL0luaXRpYWxpemUgaXMgZmlyZWQgd2hlbiB0aGUgY2hhcnQgaXMgaW5pdGlhbGl6ZWQgLSBEYXRhIGlzIHBhc3NlZCBpbiBhcyBhIHBhcmFtZXRlclxuXHRcdC8vQ29uZmlnIGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIGJ5IHRoZSBjb3JlIG9mIENoYXJ0LmpzLCBhbmQgaXMgYXZhaWxhYmxlIGF0IHRoaXMub3B0aW9uc1xuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblxuXHRcdFx0Ly9EZWNsYXJlIHNlZ21lbnRzIGFzIGEgc3RhdGljIHByb3BlcnR5IHRvIHByZXZlbnQgaW5oZXJpdGluZyBhY3Jvc3MgdGhlIENoYXJ0IHR5cGUgcHJvdG90eXBlXG5cdFx0XHR0aGlzLnNlZ21lbnRzID0gW107XG5cdFx0XHR0aGlzLm91dGVyUmFkaXVzID0gKGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLHRoaXMuY2hhcnQuaGVpZ2h0XSkgLVx0dGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aC8yKS8yO1xuXG5cdFx0XHR0aGlzLlNlZ21lbnRBcmMgPSBDaGFydC5BcmMuZXh0ZW5kKHtcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHggOiB0aGlzLmNoYXJ0LndpZHRoLzIsXG5cdFx0XHRcdHkgOiB0aGlzLmNoYXJ0LmhlaWdodC8yXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9TZXQgdXAgdG9vbHRpcCBldmVudHMgb24gdGhlIGNoYXJ0XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLnNob3dUb29sdGlwcyl7XG5cdFx0XHRcdGhlbHBlcnMuYmluZEV2ZW50cyh0aGlzLCB0aGlzLm9wdGlvbnMudG9vbHRpcEV2ZW50cywgZnVuY3Rpb24oZXZ0KXtcblx0XHRcdFx0XHR2YXIgYWN0aXZlU2VnbWVudHMgPSAoZXZ0LnR5cGUgIT09ICdtb3VzZW91dCcpID8gdGhpcy5nZXRTZWdtZW50c0F0RXZlbnQoZXZ0KSA6IFtdO1xuXG5cdFx0XHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdFx0XHRzZWdtZW50LnJlc3RvcmUoW1wiZmlsbENvbG9yXCJdKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlU2VnbWVudHMsZnVuY3Rpb24oYWN0aXZlU2VnbWVudCl7XG5cdFx0XHRcdFx0XHRhY3RpdmVTZWdtZW50LmZpbGxDb2xvciA9IGFjdGl2ZVNlZ21lbnQuaGlnaGxpZ2h0Q29sb3I7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVTZWdtZW50cyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5jYWxjdWxhdGVUb3RhbChkYXRhKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oZGF0YXBvaW50LCBpbmRleCl7XG5cdFx0XHRcdHRoaXMuYWRkRGF0YShkYXRhcG9pbnQsIGluZGV4LCB0cnVlKTtcblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRnZXRTZWdtZW50c0F0RXZlbnQgOiBmdW5jdGlvbihlKXtcblx0XHRcdHZhciBzZWdtZW50c0FycmF5ID0gW107XG5cblx0XHRcdHZhciBsb2NhdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdGlmIChzZWdtZW50LmluUmFuZ2UobG9jYXRpb24ueCxsb2NhdGlvbi55KSkgc2VnbWVudHNBcnJheS5wdXNoKHNlZ21lbnQpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiBzZWdtZW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHNlZ21lbnQsIGF0SW5kZXgsIHNpbGVudCl7XG5cdFx0XHR2YXIgaW5kZXggPSBhdEluZGV4IHx8IHRoaXMuc2VnbWVudHMubGVuZ3RoO1xuXHRcdFx0dGhpcy5zZWdtZW50cy5zcGxpY2UoaW5kZXgsIDAsIG5ldyB0aGlzLlNlZ21lbnRBcmMoe1xuXHRcdFx0XHR2YWx1ZSA6IHNlZ21lbnQudmFsdWUsXG5cdFx0XHRcdG91dGVyUmFkaXVzIDogKHRoaXMub3B0aW9ucy5hbmltYXRlU2NhbGUpID8gMCA6IHRoaXMub3V0ZXJSYWRpdXMsXG5cdFx0XHRcdGlubmVyUmFkaXVzIDogKHRoaXMub3B0aW9ucy5hbmltYXRlU2NhbGUpID8gMCA6ICh0aGlzLm91dGVyUmFkaXVzLzEwMCkgKiB0aGlzLm9wdGlvbnMucGVyY2VudGFnZUlubmVyQ3V0b3V0LFxuXHRcdFx0XHRmaWxsQ29sb3IgOiBzZWdtZW50LmNvbG9yLFxuXHRcdFx0XHRoaWdobGlnaHRDb2xvciA6IHNlZ21lbnQuaGlnaGxpZ2h0IHx8IHNlZ21lbnQuY29sb3IsXG5cdFx0XHRcdHNob3dTdHJva2UgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFNob3dTdHJva2UsXG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aCxcblx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRzdGFydEFuZ2xlIDogTWF0aC5QSSAqIDEuNSxcblx0XHRcdFx0Y2lyY3VtZmVyZW5jZSA6ICh0aGlzLm9wdGlvbnMuYW5pbWF0ZVJvdGF0ZSkgPyAwIDogdGhpcy5jYWxjdWxhdGVDaXJjdW1mZXJlbmNlKHNlZ21lbnQudmFsdWUpLFxuXHRcdFx0XHRsYWJlbCA6IHNlZ21lbnQubGFiZWxcblx0XHRcdH0pKTtcblx0XHRcdGlmICghc2lsZW50KXtcblx0XHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UgOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gKE1hdGguUEkqMikqKE1hdGguYWJzKHZhbHVlKSAvIHRoaXMudG90YWwpO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlVG90YWwgOiBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMudG90YWwgPSAwO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHRoaXMudG90YWwgKz0gTWF0aC5hYnMoc2VnbWVudC52YWx1ZSk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuY2FsY3VsYXRlVG90YWwodGhpcy5zZWdtZW50cyk7XG5cblx0XHRcdC8vIFJlc2V0IGFueSBoaWdobGlnaHQgY29sb3VycyBiZWZvcmUgdXBkYXRpbmcuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5hY3RpdmVFbGVtZW50cywgZnVuY3Rpb24oYWN0aXZlRWxlbWVudCl7XG5cdFx0XHRcdGFjdGl2ZUVsZW1lbnQucmVzdG9yZShbJ2ZpbGxDb2xvciddKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblxuXHRcdHJlbW92ZURhdGE6IGZ1bmN0aW9uKGF0SW5kZXgpe1xuXHRcdFx0dmFyIGluZGV4VG9EZWxldGUgPSAoaGVscGVycy5pc051bWJlcihhdEluZGV4KSkgPyBhdEluZGV4IDogdGhpcy5zZWdtZW50cy5sZW5ndGgtMTtcblx0XHRcdHRoaXMuc2VnbWVudHMuc3BsaWNlKGluZGV4VG9EZWxldGUsIDEpO1xuXHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLlNlZ21lbnRBcmMucHJvdG90eXBlLHtcblx0XHRcdFx0eCA6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eSA6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5vdXRlclJhZGl1cyA9IChoZWxwZXJzLm1pbihbdGhpcy5jaGFydC53aWR0aCx0aGlzLmNoYXJ0LmhlaWdodF0pIC1cdHRoaXMub3B0aW9ucy5zZWdtZW50U3Ryb2tlV2lkdGgvMikvMjtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLCBmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC51cGRhdGUoe1xuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5vdXRlclJhZGl1cyxcblx0XHRcdFx0XHRpbm5lclJhZGl1cyA6ICh0aGlzLm91dGVyUmFkaXVzLzEwMCkgKiB0aGlzLm9wdGlvbnMucGVyY2VudGFnZUlubmVyQ3V0b3V0XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZURlY2ltYWwpe1xuXHRcdFx0dmFyIGFuaW1EZWNpbWFsID0gKGVhc2VEZWNpbWFsKSA/IGVhc2VEZWNpbWFsIDogMTtcblx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLGZ1bmN0aW9uKHNlZ21lbnQsaW5kZXgpe1xuXHRcdFx0XHRzZWdtZW50LnRyYW5zaXRpb24oe1xuXHRcdFx0XHRcdGNpcmN1bWZlcmVuY2UgOiB0aGlzLmNhbGN1bGF0ZUNpcmN1bWZlcmVuY2Uoc2VnbWVudC52YWx1ZSksXG5cdFx0XHRcdFx0b3V0ZXJSYWRpdXMgOiB0aGlzLm91dGVyUmFkaXVzLFxuXHRcdFx0XHRcdGlubmVyUmFkaXVzIDogKHRoaXMub3V0ZXJSYWRpdXMvMTAwKSAqIHRoaXMub3B0aW9ucy5wZXJjZW50YWdlSW5uZXJDdXRvdXRcblx0XHRcdFx0fSxhbmltRGVjaW1hbCk7XG5cblx0XHRcdFx0c2VnbWVudC5lbmRBbmdsZSA9IHNlZ21lbnQuc3RhcnRBbmdsZSArIHNlZ21lbnQuY2lyY3VtZmVyZW5jZTtcblxuXHRcdFx0XHRzZWdtZW50LmRyYXcoKTtcblx0XHRcdFx0aWYgKGluZGV4ID09PSAwKXtcblx0XHRcdFx0XHRzZWdtZW50LnN0YXJ0QW5nbGUgPSBNYXRoLlBJICogMS41O1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgdG8gc2VlIGlmIGl0J3MgdGhlIGxhc3Qgc2VnbWVudCwgaWYgbm90IGdldCB0aGUgbmV4dCBhbmQgdXBkYXRlIHRoZSBzdGFydCBhbmdsZVxuXHRcdFx0XHRpZiAoaW5kZXggPCB0aGlzLnNlZ21lbnRzLmxlbmd0aC0xKXtcblx0XHRcdFx0XHR0aGlzLnNlZ21lbnRzW2luZGV4KzFdLnN0YXJ0QW5nbGUgPSBzZWdtZW50LmVuZEFuZ2xlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC50eXBlcy5Eb3VnaG51dC5leHRlbmQoe1xuXHRcdG5hbWUgOiBcIlBpZVwiLFxuXHRcdGRlZmF1bHRzIDogaGVscGVycy5tZXJnZShkZWZhdWx0Q29uZmlnLHtwZXJjZW50YWdlSW5uZXJDdXRvdXQgOiAwfSlcblx0fSk7XG5cbn0pLmNhbGwodGhpcyk7XG4oZnVuY3Rpb24oKXtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdENoYXJ0ID0gcm9vdC5DaGFydCxcblx0XHRoZWxwZXJzID0gQ2hhcnQuaGVscGVycztcblxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcblxuXHRcdC8vL0Jvb2xlYW4gLSBXaGV0aGVyIGdyaWQgbGluZXMgYXJlIHNob3duIGFjcm9zcyB0aGUgY2hhcnRcblx0XHRzY2FsZVNob3dHcmlkTGluZXMgOiB0cnVlLFxuXG5cdFx0Ly9TdHJpbmcgLSBDb2xvdXIgb2YgdGhlIGdyaWQgbGluZXNcblx0XHRzY2FsZUdyaWRMaW5lQ29sb3IgOiBcInJnYmEoMCwwLDAsLjA1KVwiLFxuXG5cdFx0Ly9OdW1iZXIgLSBXaWR0aCBvZiB0aGUgZ3JpZCBsaW5lc1xuXHRcdHNjYWxlR3JpZExpbmVXaWR0aCA6IDEsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgaG9yaXpvbnRhbCBsaW5lcyAoZXhjZXB0IFggYXhpcylcblx0XHRzY2FsZVNob3dIb3Jpem9udGFsTGluZXM6IHRydWUsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgdmVydGljYWwgbGluZXMgKGV4Y2VwdCBZIGF4aXMpXG5cdFx0c2NhbGVTaG93VmVydGljYWxMaW5lczogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdGhlIGxpbmUgaXMgY3VydmVkIGJldHdlZW4gcG9pbnRzXG5cdFx0YmV6aWVyQ3VydmUgOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBUZW5zaW9uIG9mIHRoZSBiZXppZXIgY3VydmUgYmV0d2VlbiBwb2ludHNcblx0XHRiZXppZXJDdXJ2ZVRlbnNpb24gOiAwLjQsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBkb3QgZm9yIGVhY2ggcG9pbnRcblx0XHRwb2ludERvdCA6IHRydWUsXG5cblx0XHQvL051bWJlciAtIFJhZGl1cyBvZiBlYWNoIHBvaW50IGRvdCBpbiBwaXhlbHNcblx0XHRwb2ludERvdFJhZGl1cyA6IDQsXG5cblx0XHQvL051bWJlciAtIFBpeGVsIHdpZHRoIG9mIHBvaW50IGRvdCBzdHJva2Vcblx0XHRwb2ludERvdFN0cm9rZVdpZHRoIDogMSxcblxuXHRcdC8vTnVtYmVyIC0gYW1vdW50IGV4dHJhIHRvIGFkZCB0byB0aGUgcmFkaXVzIHRvIGNhdGVyIGZvciBoaXQgZGV0ZWN0aW9uIG91dHNpZGUgdGhlIGRyYXduIHBvaW50XG5cdFx0cG9pbnRIaXREZXRlY3Rpb25SYWRpdXMgOiAyMCxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdG8gc2hvdyBhIHN0cm9rZSBmb3IgZGF0YXNldHNcblx0XHRkYXRhc2V0U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgZGF0YXNldCBzdHJva2Vcblx0XHRkYXRhc2V0U3Ryb2tlV2lkdGggOiAyLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBmaWxsIHRoZSBkYXRhc2V0IHdpdGggYSBjb2xvdXJcblx0XHRkYXRhc2V0RmlsbCA6IHRydWUsXG5cblx0XHQvL1N0cmluZyAtIEEgbGVnZW5kIHRlbXBsYXRlXG5cdFx0bGVnZW5kVGVtcGxhdGUgOiBcIjx1bCBjbGFzcz1cXFwiPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFxcIj48JSBmb3IgKHZhciBpPTA7IGk8ZGF0YXNldHMubGVuZ3RoOyBpKyspeyU+PGxpPjxzcGFuIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWNvbG9yOjwlPWRhdGFzZXRzW2ldLnN0cm9rZUNvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKGRhdGFzZXRzW2ldLmxhYmVsKXslPjwlPWRhdGFzZXRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cblx0fTtcblxuXG5cdENoYXJ0LlR5cGUuZXh0ZW5kKHtcblx0XHRuYW1lOiBcIkxpbmVcIixcblx0XHRkZWZhdWx0cyA6IGRlZmF1bHRDb25maWcsXG5cdFx0aW5pdGlhbGl6ZTogIGZ1bmN0aW9uKGRhdGEpe1xuXHRcdFx0Ly9EZWNsYXJlIHRoZSBleHRlbnNpb24gb2YgdGhlIGRlZmF1bHQgcG9pbnQsIHRvIGNhdGVyIGZvciB0aGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG5cdFx0XHR0aGlzLlBvaW50Q2xhc3MgPSBDaGFydC5Qb2ludC5leHRlbmQoe1xuXHRcdFx0XHRzdHJva2VXaWR0aCA6IHRoaXMub3B0aW9ucy5wb2ludERvdFN0cm9rZVdpZHRoLFxuXHRcdFx0XHRyYWRpdXMgOiB0aGlzLm9wdGlvbnMucG9pbnREb3RSYWRpdXMsXG5cdFx0XHRcdGRpc3BsYXk6IHRoaXMub3B0aW9ucy5wb2ludERvdCxcblx0XHRcdFx0aGl0RGV0ZWN0aW9uUmFkaXVzIDogdGhpcy5vcHRpb25zLnBvaW50SGl0RGV0ZWN0aW9uUmFkaXVzLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0aW5SYW5nZSA6IGZ1bmN0aW9uKG1vdXNlWCl7XG5cdFx0XHRcdFx0cmV0dXJuIChNYXRoLnBvdyhtb3VzZVgtdGhpcy54LCAyKSA8IE1hdGgucG93KHRoaXMucmFkaXVzICsgdGhpcy5oaXREZXRlY3Rpb25SYWRpdXMsMikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kYXRhc2V0cyA9IFtdO1xuXG5cdFx0XHQvL1NldCB1cCB0b29sdGlwIGV2ZW50cyBvbiB0aGUgY2hhcnRcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBzKXtcblx0XHRcdFx0aGVscGVycy5iaW5kRXZlbnRzKHRoaXMsIHRoaXMub3B0aW9ucy50b29sdGlwRXZlbnRzLCBmdW5jdGlvbihldnQpe1xuXHRcdFx0XHRcdHZhciBhY3RpdmVQb2ludHMgPSAoZXZ0LnR5cGUgIT09ICdtb3VzZW91dCcpID8gdGhpcy5nZXRQb2ludHNBdEV2ZW50KGV2dCkgOiBbXTtcblx0XHRcdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0cG9pbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlUG9pbnRzLCBmdW5jdGlvbihhY3RpdmVQb2ludCl7XG5cdFx0XHRcdFx0XHRhY3RpdmVQb2ludC5maWxsQ29sb3IgPSBhY3RpdmVQb2ludC5oaWdobGlnaHRGaWxsO1xuXHRcdFx0XHRcdFx0YWN0aXZlUG9pbnQuc3Ryb2tlQ29sb3IgPSBhY3RpdmVQb2ludC5oaWdobGlnaHRTdHJva2U7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVQb2ludHMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9JdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgZGF0YXNldHMsIGFuZCBidWlsZCB0aGlzIGludG8gYSBwcm9wZXJ0eSBvZiB0aGUgY2hhcnRcblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXG5cdFx0XHRcdHZhciBkYXRhc2V0T2JqZWN0ID0ge1xuXHRcdFx0XHRcdGxhYmVsIDogZGF0YXNldC5sYWJlbCB8fCBudWxsLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRwb2ludENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdHBvaW50U3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0cG9pbnRzIDogW11cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzLnB1c2goZGF0YXNldE9iamVjdCk7XG5cblxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5kYXRhLGZ1bmN0aW9uKGRhdGFQb2ludCxpbmRleCl7XG5cdFx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHRcdGRhdGFzZXRPYmplY3QucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0XHR2YWx1ZSA6IGRhdGFQb2ludCxcblx0XHRcdFx0XHRcdGxhYmVsIDogZGF0YS5sYWJlbHNbaW5kZXhdLFxuXHRcdFx0XHRcdFx0ZGF0YXNldExhYmVsOiBkYXRhc2V0LmxhYmVsLFxuXHRcdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0XHRmaWxsQ29sb3IgOiBkYXRhc2V0LnBvaW50Q29sb3IsXG5cdFx0XHRcdFx0XHRoaWdobGlnaHRGaWxsIDogZGF0YXNldC5wb2ludEhpZ2hsaWdodEZpbGwgfHwgZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0U3Ryb2tlIDogZGF0YXNldC5wb2ludEhpZ2hsaWdodFN0cm9rZSB8fCBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdFx0dGhpcy5idWlsZFNjYWxlKGRhdGEubGFiZWxzKTtcblxuXG5cdFx0XHRcdHRoaXMuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCwgaW5kZXgpe1xuXHRcdFx0XHRcdGhlbHBlcnMuZXh0ZW5kKHBvaW50LCB7XG5cdFx0XHRcdFx0XHR4OiB0aGlzLnNjYWxlLmNhbGN1bGF0ZVgoaW5kZXgpLFxuXHRcdFx0XHRcdFx0eTogdGhpcy5zY2FsZS5lbmRQb2ludFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHBvaW50LnNhdmUoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cblxuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9LFxuXHRcdHVwZGF0ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNjYWxlLnVwZGF0ZSgpO1xuXHRcdFx0Ly8gUmVzZXQgYW55IGhpZ2hsaWdodCBjb2xvdXJzIGJlZm9yZSB1cGRhdGluZy5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmFjdGl2ZUVsZW1lbnRzLCBmdW5jdGlvbihhY3RpdmVFbGVtZW50KXtcblx0XHRcdFx0YWN0aXZlRWxlbWVudC5yZXN0b3JlKFsnZmlsbENvbG9yJywgJ3N0cm9rZUNvbG9yJ10pO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRwb2ludC5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRlYWNoUG9pbnRzIDogZnVuY3Rpb24oY2FsbGJhY2spe1xuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuZGF0YXNldHMsZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LnBvaW50cyxjYWxsYmFjayx0aGlzKTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0fSxcblx0XHRnZXRQb2ludHNBdEV2ZW50IDogZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgcG9pbnRzQXJyYXkgPSBbXSxcblx0XHRcdFx0ZXZlbnRQb3NpdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdGlmIChwb2ludC5pblJhbmdlKGV2ZW50UG9zaXRpb24ueCxldmVudFBvc2l0aW9uLnkpKSBwb2ludHNBcnJheS5wdXNoKHBvaW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdFx0cmV0dXJuIHBvaW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YnVpbGRTY2FsZSA6IGZ1bmN0aW9uKGxhYmVscyl7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHZhciBkYXRhVG90YWwgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0XHRcdHNlbGYuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCl7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2gocG9pbnQudmFsdWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIHNjYWxlT3B0aW9ucyA9IHtcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgOiB0aGlzLm9wdGlvbnMuc2NhbGVMYWJlbCxcblx0XHRcdFx0aGVpZ2h0IDogdGhpcy5jaGFydC5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHRleHRDb2xvciA6IHRoaXMub3B0aW9ucy5zY2FsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFNpemUgOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLFxuXHRcdFx0XHRmb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0dmFsdWVzQ291bnQgOiBsYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRiZWdpbkF0WmVybyA6IHRoaXMub3B0aW9ucy5zY2FsZUJlZ2luQXRaZXJvLFxuXHRcdFx0XHRpbnRlZ2Vyc09ubHkgOiB0aGlzLm9wdGlvbnMuc2NhbGVJbnRlZ2Vyc09ubHksXG5cdFx0XHRcdGNhbGN1bGF0ZVlSYW5nZSA6IGZ1bmN0aW9uKGN1cnJlbnRIZWlnaHQpe1xuXHRcdFx0XHRcdHZhciB1cGRhdGVkUmFuZ2VzID0gaGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdFx0ZGF0YVRvdGFsKCksXG5cdFx0XHRcdFx0XHRjdXJyZW50SGVpZ2h0LFxuXHRcdFx0XHRcdFx0dGhpcy5mb250U2l6ZSxcblx0XHRcdFx0XHRcdHRoaXMuYmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0XHR0aGlzLmludGVnZXJzT25seVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aGVscGVycy5leHRlbmQodGhpcywgdXBkYXRlZFJhbmdlcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHhMYWJlbHMgOiBsYWJlbHMsXG5cdFx0XHRcdGZvbnQgOiBoZWxwZXJzLmZvbnRTdHJpbmcodGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsIHRoaXMub3B0aW9ucy5zY2FsZUZvbnRTdHlsZSwgdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSksXG5cdFx0XHRcdGxpbmVXaWR0aCA6IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCxcblx0XHRcdFx0bGluZUNvbG9yIDogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRzaG93SG9yaXpvbnRhbExpbmVzIDogdGhpcy5vcHRpb25zLnNjYWxlU2hvd0hvcml6b250YWxMaW5lcyxcblx0XHRcdFx0c2hvd1ZlcnRpY2FsTGluZXMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93VmVydGljYWxMaW5lcyxcblx0XHRcdFx0Z3JpZExpbmVXaWR0aCA6ICh0aGlzLm9wdGlvbnMuc2NhbGVTaG93R3JpZExpbmVzKSA/IHRoaXMub3B0aW9ucy5zY2FsZUdyaWRMaW5lV2lkdGggOiAwLFxuXHRcdFx0XHRncmlkTGluZUNvbG9yIDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dHcmlkTGluZXMpID8gdGhpcy5vcHRpb25zLnNjYWxlR3JpZExpbmVDb2xvciA6IFwicmdiYSgwLDAsMCwwKVwiLFxuXHRcdFx0XHRwYWRkaW5nOiAodGhpcy5vcHRpb25zLnNob3dTY2FsZSkgPyAwIDogdGhpcy5vcHRpb25zLnBvaW50RG90UmFkaXVzICsgdGhpcy5vcHRpb25zLnBvaW50RG90U3Ryb2tlV2lkdGgsXG5cdFx0XHRcdHNob3dMYWJlbHMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxzLFxuXHRcdFx0XHRkaXNwbGF5IDogdGhpcy5vcHRpb25zLnNob3dTY2FsZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zY2FsZU92ZXJyaWRlKXtcblx0XHRcdFx0aGVscGVycy5leHRlbmQoc2NhbGVPcHRpb25zLCB7XG5cdFx0XHRcdFx0Y2FsY3VsYXRlWVJhbmdlOiBoZWxwZXJzLm5vb3AsXG5cdFx0XHRcdFx0c3RlcHM6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzLFxuXHRcdFx0XHRcdHN0ZXBWYWx1ZTogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoLFxuXHRcdFx0XHRcdG1pbjogdGhpcy5vcHRpb25zLnNjYWxlU3RhcnRWYWx1ZSxcblx0XHRcdFx0XHRtYXg6IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUgKyAodGhpcy5vcHRpb25zLnNjYWxlU3RlcHMgKiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwV2lkdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cblx0XHRcdHRoaXMuc2NhbGUgPSBuZXcgQ2hhcnQuU2NhbGUoc2NhbGVPcHRpb25zKTtcblx0XHR9LFxuXHRcdGFkZERhdGEgOiBmdW5jdGlvbih2YWx1ZXNBcnJheSxsYWJlbCl7XG5cdFx0XHQvL01hcCB0aGUgdmFsdWVzIGFycmF5IGZvciBlYWNoIG9mIHRoZSBkYXRhc2V0c1xuXG5cdFx0XHRoZWxwZXJzLmVhY2godmFsdWVzQXJyYXksZnVuY3Rpb24odmFsdWUsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0dmFsdWUgOiB2YWx1ZSxcblx0XHRcdFx0XHRsYWJlbCA6IGxhYmVsLFxuXHRcdFx0XHRcdHg6IHRoaXMuc2NhbGUuY2FsY3VsYXRlWCh0aGlzLnNjYWxlLnZhbHVlc0NvdW50KzEpLFxuXHRcdFx0XHRcdHk6IHRoaXMuc2NhbGUuZW5kUG9pbnQsXG5cdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRTdHJva2VDb2xvcixcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRDb2xvclxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnNjYWxlLmFkZFhMYWJlbChsYWJlbCk7XG5cdFx0XHQvL1RoZW4gcmUtcmVuZGVyIHRoZSBjaGFydC5cblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblx0XHRyZW1vdmVEYXRhIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2NhbGUucmVtb3ZlWExhYmVsKCk7XG5cdFx0XHQvL1RoZW4gcmUtcmVuZGVyIHRoZSBjaGFydC5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRkYXRhc2V0LnBvaW50cy5zaGlmdCgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblx0XHRyZWZsb3cgOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIG5ld1NjYWxlUHJvcHMgPSBoZWxwZXJzLmV4dGVuZCh7XG5cdFx0XHRcdGhlaWdodCA6IHRoaXMuY2hhcnQuaGVpZ2h0LFxuXHRcdFx0XHR3aWR0aCA6IHRoaXMuY2hhcnQud2lkdGhcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUobmV3U2NhbGVQcm9wcyk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZSl7XG5cdFx0XHR2YXIgZWFzaW5nRGVjaW1hbCA9IGVhc2UgfHwgMTtcblx0XHRcdHRoaXMuY2xlYXIoKTtcblxuXHRcdFx0dmFyIGN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXG5cdFx0XHQvLyBTb21lIGhlbHBlciBtZXRob2RzIGZvciBnZXR0aW5nIHRoZSBuZXh0L3ByZXYgcG9pbnRzXG5cdFx0XHR2YXIgaGFzVmFsdWUgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgIT09IG51bGw7XG5cdFx0XHR9LFxuXHRcdFx0bmV4dFBvaW50ID0gZnVuY3Rpb24ocG9pbnQsIGNvbGxlY3Rpb24sIGluZGV4KXtcblx0XHRcdFx0cmV0dXJuIGhlbHBlcnMuZmluZE5leHRXaGVyZShjb2xsZWN0aW9uLCBoYXNWYWx1ZSwgaW5kZXgpIHx8IHBvaW50O1xuXHRcdFx0fSxcblx0XHRcdHByZXZpb3VzUG9pbnQgPSBmdW5jdGlvbihwb2ludCwgY29sbGVjdGlvbiwgaW5kZXgpe1xuXHRcdFx0XHRyZXR1cm4gaGVscGVycy5maW5kUHJldmlvdXNXaGVyZShjb2xsZWN0aW9uLCBoYXNWYWx1ZSwgaW5kZXgpIHx8IHBvaW50O1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KGVhc2luZ0RlY2ltYWwpO1xuXG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHR2YXIgcG9pbnRzV2l0aFZhbHVlcyA9IGhlbHBlcnMud2hlcmUoZGF0YXNldC5wb2ludHMsIGhhc1ZhbHVlKTtcblxuXHRcdFx0XHQvL1RyYW5zaXRpb24gZWFjaCBwb2ludCBmaXJzdCBzbyB0aGF0IHRoZSBsaW5lIGFuZCBwb2ludCBkcmF3aW5nIGlzbid0IG91dCBvZiBzeW5jXG5cdFx0XHRcdC8vV2UgY2FuIHVzZSB0aGlzIGV4dHJhIGxvb3AgdG8gY2FsY3VsYXRlIHRoZSBjb250cm9sIHBvaW50cyBvZiB0aGlzIGRhdGFzZXQgYWxzbyBpbiB0aGlzIGxvb3BcblxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsIGZ1bmN0aW9uKHBvaW50LCBpbmRleCl7XG5cdFx0XHRcdFx0aWYgKHBvaW50Lmhhc1ZhbHVlKCkpe1xuXHRcdFx0XHRcdFx0cG9pbnQudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0XHRcdHkgOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZVkocG9pbnQudmFsdWUpLFxuXHRcdFx0XHRcdFx0XHR4IDogdGhpcy5zY2FsZS5jYWxjdWxhdGVYKGluZGV4KVxuXHRcdFx0XHRcdFx0fSwgZWFzaW5nRGVjaW1hbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LHRoaXMpO1xuXG5cblx0XHRcdFx0Ly8gQ29udHJvbCBwb2ludHMgbmVlZCB0byBiZSBjYWxjdWxhdGVkIGluIGEgc2VwZXJhdGUgbG9vcCwgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgdGhlIGN1cnJlbnQgeC95IG9mIHRoZSBwb2ludFxuXHRcdFx0XHQvLyBUaGlzIHdvdWxkIGNhdXNlIGlzc3VlcyB3aGVuIHRoZXJlIGlzIG5vIGFuaW1hdGlvbiwgYmVjYXVzZSB0aGUgeSBvZiB0aGUgbmV4dCBwb2ludCB3b3VsZCBiZSAwLCBzbyBiZXppZXJzIHdvdWxkIGJlIHNrZXdlZFxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLmJlemllckN1cnZlKXtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2gocG9pbnRzV2l0aFZhbHVlcywgZnVuY3Rpb24ocG9pbnQsIGluZGV4KXtcblx0XHRcdFx0XHRcdHZhciB0ZW5zaW9uID0gKGluZGV4ID4gMCAmJiBpbmRleCA8IHBvaW50c1dpdGhWYWx1ZXMubGVuZ3RoIC0gMSkgPyB0aGlzLm9wdGlvbnMuYmV6aWVyQ3VydmVUZW5zaW9uIDogMDtcblx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMgPSBoZWxwZXJzLnNwbGluZUN1cnZlKFxuXHRcdFx0XHRcdFx0XHRwcmV2aW91c1BvaW50KHBvaW50LCBwb2ludHNXaXRoVmFsdWVzLCBpbmRleCksXG5cdFx0XHRcdFx0XHRcdHBvaW50LFxuXHRcdFx0XHRcdFx0XHRuZXh0UG9pbnQocG9pbnQsIHBvaW50c1dpdGhWYWx1ZXMsIGluZGV4KSxcblx0XHRcdFx0XHRcdFx0dGVuc2lvblxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gUHJldmVudCB0aGUgYmV6aWVyIGdvaW5nIG91dHNpZGUgb2YgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwIHB1dGVyIGJlemllciBoYW5kbGVzIHRvIHRoZSB1cHBlci9sb3dlciBzY2FsZSBib3VuZHNcblx0XHRcdFx0XHRcdGlmIChwb2ludC5jb250cm9sUG9pbnRzLm91dGVyLnkgPiB0aGlzLnNjYWxlLmVuZFBvaW50KXtcblx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5vdXRlci55ID0gdGhpcy5zY2FsZS5lbmRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHBvaW50LmNvbnRyb2xQb2ludHMub3V0ZXIueSA8IHRoaXMuc2NhbGUuc3RhcnRQb2ludCl7XG5cdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMub3V0ZXIueSA9IHRoaXMuc2NhbGUuc3RhcnRQb2ludDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQ2FwIGlubmVyIGJlemllciBoYW5kbGVzIHRvIHRoZSB1cHBlci9sb3dlciBzY2FsZSBib3VuZHNcblx0XHRcdFx0XHRcdGlmIChwb2ludC5jb250cm9sUG9pbnRzLmlubmVyLnkgPiB0aGlzLnNjYWxlLmVuZFBvaW50KXtcblx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5pbm5lci55ID0gdGhpcy5zY2FsZS5lbmRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSA8IHRoaXMuc2NhbGUuc3RhcnRQb2ludCl7XG5cdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSA9IHRoaXMuc2NhbGUuc3RhcnRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LHRoaXMpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHQvL0RyYXcgdGhlIGxpbmUgYmV0d2VlbiBhbGwgdGhlIHBvaW50c1xuXHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5vcHRpb25zLmRhdGFzZXRTdHJva2VXaWR0aDtcblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gZGF0YXNldC5zdHJva2VDb2xvcjtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChwb2ludHNXaXRoVmFsdWVzLCBmdW5jdGlvbihwb2ludCwgaW5kZXgpe1xuXHRcdFx0XHRcdGlmIChpbmRleCA9PT0gMCl7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmJlemllckN1cnZlKXtcblx0XHRcdFx0XHRcdFx0dmFyIHByZXZpb3VzID0gcHJldmlvdXNQb2ludChwb2ludCwgcG9pbnRzV2l0aFZhbHVlcywgaW5kZXgpO1xuXG5cdFx0XHRcdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzLmNvbnRyb2xQb2ludHMub3V0ZXIueCxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91cy5jb250cm9sUG9pbnRzLm91dGVyLnksXG5cdFx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5pbm5lci54LFxuXHRcdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSxcblx0XHRcdFx0XHRcdFx0XHRwb2ludC54LFxuXHRcdFx0XHRcdFx0XHRcdHBvaW50Lnlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCxwb2ludC55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHRoaXMpO1xuXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLmRhdGFzZXRGaWxsICYmIHBvaW50c1dpdGhWYWx1ZXMubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0Ly9Sb3VuZCBvZmYgdGhlIGxpbmUgYnkgZ29pbmcgdG8gdGhlIGJhc2Ugb2YgdGhlIGNoYXJ0LCBiYWNrIHRvIHRoZSBzdGFydCwgdGhlbiBmaWxsLlxuXHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRzV2l0aFZhbHVlc1twb2ludHNXaXRoVmFsdWVzLmxlbmd0aCAtIDFdLngsIHRoaXMuc2NhbGUuZW5kUG9pbnQpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRzV2l0aFZhbHVlc1swXS54LCB0aGlzLnNjYWxlLmVuZFBvaW50KTtcblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gZGF0YXNldC5maWxsQ29sb3I7XG5cdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL05vdyBkcmF3IHRoZSBwb2ludHMgb3ZlciB0aGUgbGluZVxuXHRcdFx0XHQvL0EgbGl0dGxlIGluZWZmaWNpZW50IGRvdWJsZSBsb29waW5nLCBidXQgYmV0dGVyIHRoYW4gdGhlIGxpbmVcblx0XHRcdFx0Ly9sYWdnaW5nIGJlaGluZCB0aGUgcG9pbnQgcG9zaXRpb25zXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChwb2ludHNXaXRoVmFsdWVzLGZ1bmN0aW9uKHBvaW50KXtcblx0XHRcdFx0XHRwb2ludC5kcmF3KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSx0aGlzKTtcblx0XHR9XG5cdH0pO1xuXG5cbn0pLmNhbGwodGhpcyk7XG5cbihmdW5jdGlvbigpe1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgcm9vdCA9IHRoaXMsXG5cdFx0Q2hhcnQgPSByb290LkNoYXJ0LFxuXHRcdC8vQ2FjaGUgYSBsb2NhbCByZWZlcmVuY2UgdG8gQ2hhcnQuaGVscGVyc1xuXHRcdGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzO1xuXG5cdHZhciBkZWZhdWx0Q29uZmlnID0ge1xuXHRcdC8vQm9vbGVhbiAtIFNob3cgYSBiYWNrZHJvcCB0byB0aGUgc2NhbGUgbGFiZWxcblx0XHRzY2FsZVNob3dMYWJlbEJhY2tkcm9wIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gVGhlIGNvbG91ciBvZiB0aGUgbGFiZWwgYmFja2Ryb3Bcblx0XHRzY2FsZUJhY2tkcm9wQ29sb3IgOiBcInJnYmEoMjU1LDI1NSwyNTUsMC43NSlcIixcblxuXHRcdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHRoZSBzY2FsZSBzaG91bGQgYmVnaW4gYXQgemVyb1xuXHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgYmFja2Ryb3AgcGFkZGluZyBhYm92ZSAmIGJlbG93IHRoZSBsYWJlbCBpbiBwaXhlbHNcblx0XHRzY2FsZUJhY2tkcm9wUGFkZGluZ1kgOiAyLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgYmFja2Ryb3AgcGFkZGluZyB0byB0aGUgc2lkZSBvZiB0aGUgbGFiZWwgaW4gcGl4ZWxzXG5cdFx0c2NhbGVCYWNrZHJvcFBhZGRpbmdYIDogMixcblxuXHRcdC8vQm9vbGVhbiAtIFNob3cgbGluZSBmb3IgZWFjaCB2YWx1ZSBpbiB0aGUgc2NhbGVcblx0XHRzY2FsZVNob3dMaW5lIDogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFN0cm9rZSBhIGxpbmUgYXJvdW5kIGVhY2ggc2VnbWVudCBpbiB0aGUgY2hhcnRcblx0XHRzZWdtZW50U2hvd1N0cm9rZSA6IHRydWUsXG5cblx0XHQvL1N0cmluZyAtIFRoZSBjb2xvdXIgb2YgdGhlIHN0cm9rZSBvbiBlYWNoIHNlZ2VtZW50LlxuXHRcdHNlZ21lbnRTdHJva2VDb2xvciA6IFwiI2ZmZlwiLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgd2lkdGggb2YgdGhlIHN0cm9rZSB2YWx1ZSBpbiBwaXhlbHNcblx0XHRzZWdtZW50U3Ryb2tlV2lkdGggOiAyLFxuXG5cdFx0Ly9OdW1iZXIgLSBBbW91bnQgb2YgYW5pbWF0aW9uIHN0ZXBzXG5cdFx0YW5pbWF0aW9uU3RlcHMgOiAxMDAsXG5cblx0XHQvL1N0cmluZyAtIEFuaW1hdGlvbiBlYXNpbmcgZWZmZWN0LlxuXHRcdGFuaW1hdGlvbkVhc2luZyA6IFwiZWFzZU91dEJvdW5jZVwiLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBhbmltYXRlIHRoZSByb3RhdGlvbiBvZiB0aGUgY2hhcnRcblx0XHRhbmltYXRlUm90YXRlIDogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdG8gYW5pbWF0ZSBzY2FsaW5nIHRoZSBjaGFydCBmcm9tIHRoZSBjZW50cmVcblx0XHRhbmltYXRlU2NhbGUgOiBmYWxzZSxcblxuXHRcdC8vU3RyaW5nIC0gQSBsZWdlbmQgdGVtcGxhdGVcblx0XHRsZWdlbmRUZW1wbGF0ZSA6IFwiPHVsIGNsYXNzPVxcXCI8JT1uYW1lLnRvTG93ZXJDYXNlKCklPi1sZWdlbmRcXFwiPjwlIGZvciAodmFyIGk9MDsgaTxzZWdtZW50cy5sZW5ndGg7IGkrKyl7JT48bGk+PHNwYW4gc3R5bGU9XFxcImJhY2tncm91bmQtY29sb3I6PCU9c2VnbWVudHNbaV0uZmlsbENvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKHNlZ21lbnRzW2ldLmxhYmVsKXslPjwlPXNlZ21lbnRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cdH07XG5cblxuXHRDaGFydC5UeXBlLmV4dGVuZCh7XG5cdFx0Ly9QYXNzaW5nIGluIGEgbmFtZSByZWdpc3RlcnMgdGhpcyBjaGFydCBpbiB0aGUgQ2hhcnQgbmFtZXNwYWNlXG5cdFx0bmFtZTogXCJQb2xhckFyZWFcIixcblx0XHQvL1Byb3ZpZGluZyBhIGRlZmF1bHRzIHdpbGwgYWxzbyByZWdpc3RlciB0aGUgZGVhZnVsdHMgaW4gdGhlIGNoYXJ0IG5hbWVzcGFjZVxuXHRcdGRlZmF1bHRzIDogZGVmYXVsdENvbmZpZyxcblx0XHQvL0luaXRpYWxpemUgaXMgZmlyZWQgd2hlbiB0aGUgY2hhcnQgaXMgaW5pdGlhbGl6ZWQgLSBEYXRhIGlzIHBhc3NlZCBpbiBhcyBhIHBhcmFtZXRlclxuXHRcdC8vQ29uZmlnIGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIGJ5IHRoZSBjb3JlIG9mIENoYXJ0LmpzLCBhbmQgaXMgYXZhaWxhYmxlIGF0IHRoaXMub3B0aW9uc1xuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMuc2VnbWVudHMgPSBbXTtcblx0XHRcdC8vRGVjbGFyZSBzZWdtZW50IGNsYXNzIGFzIGEgY2hhcnQgaW5zdGFuY2Ugc3BlY2lmaWMgY2xhc3MsIHNvIGl0IGNhbiBzaGFyZSBwcm9wcyBmb3IgdGhpcyBpbnN0YW5jZVxuXHRcdFx0dGhpcy5TZWdtZW50QXJjID0gQ2hhcnQuQXJjLmV4dGVuZCh7XG5cdFx0XHRcdHNob3dTdHJva2UgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFNob3dTdHJva2UsXG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aCxcblx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0aW5uZXJSYWRpdXMgOiAwLFxuXHRcdFx0XHR4IDogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5IDogdGhpcy5jaGFydC5oZWlnaHQvMlxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IENoYXJ0LlJhZGlhbFNjYWxlKHtcblx0XHRcdFx0ZGlzcGxheTogdGhpcy5vcHRpb25zLnNob3dTY2FsZSxcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U3R5bGUsXG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250Q29sb3IsXG5cdFx0XHRcdHNob3dMYWJlbHM6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dMYWJlbHMsXG5cdFx0XHRcdHNob3dMYWJlbEJhY2tkcm9wOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxCYWNrZHJvcCxcblx0XHRcdFx0YmFja2Ryb3BDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlQmFja2Ryb3BDb2xvcixcblx0XHRcdFx0YmFja2Ryb3BQYWRkaW5nWSA6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1ksXG5cdFx0XHRcdGJhY2tkcm9wUGFkZGluZ1g6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1gsXG5cdFx0XHRcdGxpbmVXaWR0aDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dMaW5lKSA/IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRsaW5lQXJjOiB0cnVlLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5Q2VudGVyOiB0aGlzLmNoYXJ0LmhlaWdodC8yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmc6IHRoaXMub3B0aW9ucy5zY2FsZUxhYmVsLFxuXHRcdFx0XHR2YWx1ZXNDb3VudDogZGF0YS5sZW5ndGhcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZVNjYWxlUmFuZ2UoZGF0YSk7XG5cblx0XHRcdHRoaXMuc2NhbGUudXBkYXRlKCk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLGZ1bmN0aW9uKHNlZ21lbnQsaW5kZXgpe1xuXHRcdFx0XHR0aGlzLmFkZERhdGEoc2VnbWVudCxpbmRleCx0cnVlKTtcblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdC8vU2V0IHVwIHRvb2x0aXAgZXZlbnRzIG9uIHRoZSBjaGFydFxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcHMpe1xuXHRcdFx0XHRoZWxwZXJzLmJpbmRFdmVudHModGhpcywgdGhpcy5vcHRpb25zLnRvb2x0aXBFdmVudHMsIGZ1bmN0aW9uKGV2dCl7XG5cdFx0XHRcdFx0dmFyIGFjdGl2ZVNlZ21lbnRzID0gKGV2dC50eXBlICE9PSAnbW91c2VvdXQnKSA/IHRoaXMuZ2V0U2VnbWVudHNBdEV2ZW50KGV2dCkgOiBbXTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0XHRcdHNlZ21lbnQucmVzdG9yZShbXCJmaWxsQ29sb3JcIl0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChhY3RpdmVTZWdtZW50cyxmdW5jdGlvbihhY3RpdmVTZWdtZW50KXtcblx0XHRcdFx0XHRcdGFjdGl2ZVNlZ21lbnQuZmlsbENvbG9yID0gYWN0aXZlU2VnbWVudC5oaWdobGlnaHRDb2xvcjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnNob3dUb29sdGlwKGFjdGl2ZVNlZ21lbnRzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRnZXRTZWdtZW50c0F0RXZlbnQgOiBmdW5jdGlvbihlKXtcblx0XHRcdHZhciBzZWdtZW50c0FycmF5ID0gW107XG5cblx0XHRcdHZhciBsb2NhdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdGlmIChzZWdtZW50LmluUmFuZ2UobG9jYXRpb24ueCxsb2NhdGlvbi55KSkgc2VnbWVudHNBcnJheS5wdXNoKHNlZ21lbnQpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiBzZWdtZW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHNlZ21lbnQsIGF0SW5kZXgsIHNpbGVudCl7XG5cdFx0XHR2YXIgaW5kZXggPSBhdEluZGV4IHx8IHRoaXMuc2VnbWVudHMubGVuZ3RoO1xuXG5cdFx0XHR0aGlzLnNlZ21lbnRzLnNwbGljZShpbmRleCwgMCwgbmV3IHRoaXMuU2VnbWVudEFyYyh7XG5cdFx0XHRcdGZpbGxDb2xvcjogc2VnbWVudC5jb2xvcixcblx0XHRcdFx0aGlnaGxpZ2h0Q29sb3I6IHNlZ21lbnQuaGlnaGxpZ2h0IHx8IHNlZ21lbnQuY29sb3IsXG5cdFx0XHRcdGxhYmVsOiBzZWdtZW50LmxhYmVsLFxuXHRcdFx0XHR2YWx1ZTogc2VnbWVudC52YWx1ZSxcblx0XHRcdFx0b3V0ZXJSYWRpdXM6ICh0aGlzLm9wdGlvbnMuYW5pbWF0ZVNjYWxlKSA/IDAgOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZUNlbnRlck9mZnNldChzZWdtZW50LnZhbHVlKSxcblx0XHRcdFx0Y2lyY3VtZmVyZW5jZTogKHRoaXMub3B0aW9ucy5hbmltYXRlUm90YXRlKSA/IDAgOiB0aGlzLnNjYWxlLmdldENpcmN1bWZlcmVuY2UoKSxcblx0XHRcdFx0c3RhcnRBbmdsZTogTWF0aC5QSSAqIDEuNVxuXHRcdFx0fSkpO1xuXHRcdFx0aWYgKCFzaWxlbnQpe1xuXHRcdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oYXRJbmRleCl7XG5cdFx0XHR2YXIgaW5kZXhUb0RlbGV0ZSA9IChoZWxwZXJzLmlzTnVtYmVyKGF0SW5kZXgpKSA/IGF0SW5kZXggOiB0aGlzLnNlZ21lbnRzLmxlbmd0aC0xO1xuXHRcdFx0dGhpcy5zZWdtZW50cy5zcGxpY2UoaW5kZXhUb0RlbGV0ZSwgMSk7XG5cdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVRvdGFsOiBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMudG90YWwgPSAwO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHRoaXMudG90YWwgKz0gc2VnbWVudC52YWx1ZTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0XHR0aGlzLnNjYWxlLnZhbHVlc0NvdW50ID0gdGhpcy5zZWdtZW50cy5sZW5ndGg7XG5cdFx0fSxcblx0XHR1cGRhdGVTY2FsZVJhbmdlOiBmdW5jdGlvbihkYXRhcG9pbnRzKXtcblx0XHRcdHZhciB2YWx1ZXNBcnJheSA9IFtdO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGFwb2ludHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHZhbHVlc0FycmF5LnB1c2goc2VnbWVudC52YWx1ZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIHNjYWxlU2l6ZXMgPSAodGhpcy5vcHRpb25zLnNjYWxlT3ZlcnJpZGUpID9cblx0XHRcdFx0e1xuXHRcdFx0XHRcdHN0ZXBzOiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwcyxcblx0XHRcdFx0XHRzdGVwVmFsdWU6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBXaWR0aCxcblx0XHRcdFx0XHRtaW46IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUsXG5cdFx0XHRcdFx0bWF4OiB0aGlzLm9wdGlvbnMuc2NhbGVTdGFydFZhbHVlICsgKHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzICogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoKVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0aGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdHZhbHVlc0FycmF5LFxuXHRcdFx0XHRcdGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLzIsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlQmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlSW50ZWdlcnNPbmx5XG5cdFx0XHRcdCk7XG5cblx0XHRcdGhlbHBlcnMuZXh0ZW5kKFxuXHRcdFx0XHR0aGlzLnNjYWxlLFxuXHRcdFx0XHRzY2FsZVNpemVzLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2l6ZTogaGVscGVycy5taW4oW3RoaXMuY2hhcnQud2lkdGgsIHRoaXMuY2hhcnQuaGVpZ2h0XSksXG5cdFx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHRcdHlDZW50ZXI6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdFx0fVxuXHRcdFx0KTtcblxuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuY2FsY3VsYXRlVG90YWwodGhpcy5zZWdtZW50cyk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLGZ1bmN0aW9uKHNlZ21lbnQpe1xuXHRcdFx0XHRzZWdtZW50LnNhdmUoKTtcblx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9LFxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLlNlZ21lbnRBcmMucHJvdG90eXBlLHtcblx0XHRcdFx0eCA6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eSA6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cGRhdGVTY2FsZVJhbmdlKHRoaXMuc2VnbWVudHMpO1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUoKTtcblxuXHRcdFx0aGVscGVycy5leHRlbmQodGhpcy5zY2FsZSx7XG5cdFx0XHRcdHhDZW50ZXI6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eUNlbnRlcjogdGhpcy5jaGFydC5oZWlnaHQvMlxuXHRcdFx0fSk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLCBmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC51cGRhdGUoe1xuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQoc2VnbWVudC52YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9LCB0aGlzKTtcblxuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKGVhc2Upe1xuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBlYXNlIHx8IDE7XG5cdFx0XHQvL0NsZWFyICYgZHJhdyB0aGUgY2FudmFzXG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50LCBpbmRleCl7XG5cdFx0XHRcdHNlZ21lbnQudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0Y2lyY3VtZmVyZW5jZSA6IHRoaXMuc2NhbGUuZ2V0Q2lyY3VtZmVyZW5jZSgpLFxuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQoc2VnbWVudC52YWx1ZSlcblx0XHRcdFx0fSxlYXNpbmdEZWNpbWFsKTtcblxuXHRcdFx0XHRzZWdtZW50LmVuZEFuZ2xlID0gc2VnbWVudC5zdGFydEFuZ2xlICsgc2VnbWVudC5jaXJjdW1mZXJlbmNlO1xuXG5cdFx0XHRcdC8vIElmIHdlJ3ZlIHJlbW92ZWQgdGhlIGZpcnN0IHNlZ21lbnQgd2UgbmVlZCB0byBzZXQgdGhlIGZpcnN0IG9uZSB0b1xuXHRcdFx0XHQvLyBzdGFydCBhdCB0aGUgdG9wLlxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRcdHNlZ21lbnQuc3RhcnRBbmdsZSA9IE1hdGguUEkgKiAxLjU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL0NoZWNrIHRvIHNlZSBpZiBpdCdzIHRoZSBsYXN0IHNlZ21lbnQsIGlmIG5vdCBnZXQgdGhlIG5leHQgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgYW5nbGVcblx0XHRcdFx0aWYgKGluZGV4IDwgdGhpcy5zZWdtZW50cy5sZW5ndGggLSAxKXtcblx0XHRcdFx0XHR0aGlzLnNlZ21lbnRzW2luZGV4KzFdLnN0YXJ0QW5nbGUgPSBzZWdtZW50LmVuZEFuZ2xlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZ21lbnQuZHJhdygpO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR0aGlzLnNjYWxlLmRyYXcoKTtcblx0XHR9XG5cdH0pO1xuXG59KS5jYWxsKHRoaXMpO1xuKGZ1bmN0aW9uKCl7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciByb290ID0gdGhpcyxcblx0XHRDaGFydCA9IHJvb3QuQ2hhcnQsXG5cdFx0aGVscGVycyA9IENoYXJ0LmhlbHBlcnM7XG5cblxuXG5cdENoYXJ0LlR5cGUuZXh0ZW5kKHtcblx0XHRuYW1lOiBcIlJhZGFyXCIsXG5cdFx0ZGVmYXVsdHM6e1xuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxpbmVzIGZvciBlYWNoIHNjYWxlIHBvaW50XG5cdFx0XHRzY2FsZVNob3dMaW5lIDogdHJ1ZSxcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB3ZSBzaG93IHRoZSBhbmdsZSBsaW5lcyBvdXQgb2YgdGhlIHJhZGFyXG5cdFx0XHRhbmdsZVNob3dMaW5lT3V0IDogdHJ1ZSxcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxhYmVscyBvbiB0aGUgc2NhbGVcblx0XHRcdHNjYWxlU2hvd0xhYmVscyA6IGZhbHNlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIGJlZ2luIGF0IHplcm9cblx0XHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0XHQvL1N0cmluZyAtIENvbG91ciBvZiB0aGUgYW5nbGUgbGluZVxuXHRcdFx0YW5nbGVMaW5lQ29sb3IgOiBcInJnYmEoMCwwLDAsLjEpXCIsXG5cblx0XHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgdGhlIGFuZ2xlIGxpbmVcblx0XHRcdGFuZ2xlTGluZVdpZHRoIDogMSxcblxuXHRcdFx0Ly9TdHJpbmcgLSBQb2ludCBsYWJlbCBmb250IGRlY2xhcmF0aW9uXG5cdFx0XHRwb2ludExhYmVsRm9udEZhbWlseSA6IFwiJ0FyaWFsJ1wiLFxuXG5cdFx0XHQvL1N0cmluZyAtIFBvaW50IGxhYmVsIGZvbnQgd2VpZ2h0XG5cdFx0XHRwb2ludExhYmVsRm9udFN0eWxlIDogXCJub3JtYWxcIixcblxuXHRcdFx0Ly9OdW1iZXIgLSBQb2ludCBsYWJlbCBmb250IHNpemUgaW4gcGl4ZWxzXG5cdFx0XHRwb2ludExhYmVsRm9udFNpemUgOiAxMCxcblxuXHRcdFx0Ly9TdHJpbmcgLSBQb2ludCBsYWJlbCBmb250IGNvbG91clxuXHRcdFx0cG9pbnRMYWJlbEZvbnRDb2xvciA6IFwiIzY2NlwiLFxuXG5cdFx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBkb3QgZm9yIGVhY2ggcG9pbnRcblx0XHRcdHBvaW50RG90IDogdHJ1ZSxcblxuXHRcdFx0Ly9OdW1iZXIgLSBSYWRpdXMgb2YgZWFjaCBwb2ludCBkb3QgaW4gcGl4ZWxzXG5cdFx0XHRwb2ludERvdFJhZGl1cyA6IDMsXG5cblx0XHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgcG9pbnQgZG90IHN0cm9rZVxuXHRcdFx0cG9pbnREb3RTdHJva2VXaWR0aCA6IDEsXG5cblx0XHRcdC8vTnVtYmVyIC0gYW1vdW50IGV4dHJhIHRvIGFkZCB0byB0aGUgcmFkaXVzIHRvIGNhdGVyIGZvciBoaXQgZGV0ZWN0aW9uIG91dHNpZGUgdGhlIGRyYXduIHBvaW50XG5cdFx0XHRwb2ludEhpdERldGVjdGlvblJhZGl1cyA6IDIwLFxuXG5cdFx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBzdHJva2UgZm9yIGRhdGFzZXRzXG5cdFx0XHRkYXRhc2V0U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdFx0Ly9OdW1iZXIgLSBQaXhlbCB3aWR0aCBvZiBkYXRhc2V0IHN0cm9rZVxuXHRcdFx0ZGF0YXNldFN0cm9rZVdpZHRoIDogMixcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBmaWxsIHRoZSBkYXRhc2V0IHdpdGggYSBjb2xvdXJcblx0XHRcdGRhdGFzZXRGaWxsIDogdHJ1ZSxcblxuXHRcdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdFx0bGVnZW5kVGVtcGxhdGUgOiBcIjx1bCBjbGFzcz1cXFwiPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFxcIj48JSBmb3IgKHZhciBpPTA7IGk8ZGF0YXNldHMubGVuZ3RoOyBpKyspeyU+PGxpPjxzcGFuIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWNvbG9yOjwlPWRhdGFzZXRzW2ldLnN0cm9rZUNvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKGRhdGFzZXRzW2ldLmxhYmVsKXslPjwlPWRhdGFzZXRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cblx0XHR9LFxuXG5cdFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHR0aGlzLlBvaW50Q2xhc3MgPSBDaGFydC5Qb2ludC5leHRlbmQoe1xuXHRcdFx0XHRzdHJva2VXaWR0aCA6IHRoaXMub3B0aW9ucy5wb2ludERvdFN0cm9rZVdpZHRoLFxuXHRcdFx0XHRyYWRpdXMgOiB0aGlzLm9wdGlvbnMucG9pbnREb3RSYWRpdXMsXG5cdFx0XHRcdGRpc3BsYXk6IHRoaXMub3B0aW9ucy5wb2ludERvdCxcblx0XHRcdFx0aGl0RGV0ZWN0aW9uUmFkaXVzIDogdGhpcy5vcHRpb25zLnBvaW50SGl0RGV0ZWN0aW9uUmFkaXVzLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eFxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGF0YXNldHMgPSBbXTtcblxuXHRcdFx0dGhpcy5idWlsZFNjYWxlKGRhdGEpO1xuXG5cdFx0XHQvL1NldCB1cCB0b29sdGlwIGV2ZW50cyBvbiB0aGUgY2hhcnRcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBzKXtcblx0XHRcdFx0aGVscGVycy5iaW5kRXZlbnRzKHRoaXMsIHRoaXMub3B0aW9ucy50b29sdGlwRXZlbnRzLCBmdW5jdGlvbihldnQpe1xuXHRcdFx0XHRcdHZhciBhY3RpdmVQb2ludHNDb2xsZWN0aW9uID0gKGV2dC50eXBlICE9PSAnbW91c2VvdXQnKSA/IHRoaXMuZ2V0UG9pbnRzQXRFdmVudChldnQpIDogW107XG5cblx0XHRcdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0cG9pbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlUG9pbnRzQ29sbGVjdGlvbiwgZnVuY3Rpb24oYWN0aXZlUG9pbnQpe1xuXHRcdFx0XHRcdFx0YWN0aXZlUG9pbnQuZmlsbENvbG9yID0gYWN0aXZlUG9pbnQuaGlnaGxpZ2h0RmlsbDtcblx0XHRcdFx0XHRcdGFjdGl2ZVBvaW50LnN0cm9rZUNvbG9yID0gYWN0aXZlUG9pbnQuaGlnaGxpZ2h0U3Ryb2tlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVQb2ludHNDb2xsZWN0aW9uKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGRhdGFzZXRzLCBhbmQgYnVpbGQgdGhpcyBpbnRvIGEgcHJvcGVydHkgb2YgdGhlIGNoYXJ0XG5cdFx0XHRoZWxwZXJzLmVhY2goZGF0YS5kYXRhc2V0cyxmdW5jdGlvbihkYXRhc2V0KXtcblxuXHRcdFx0XHR2YXIgZGF0YXNldE9iamVjdCA9IHtcblx0XHRcdFx0XHRsYWJlbDogZGF0YXNldC5sYWJlbCB8fCBudWxsLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRwb2ludENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdHBvaW50U3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0cG9pbnRzIDogW11cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzLnB1c2goZGF0YXNldE9iamVjdCk7XG5cblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuZGF0YSxmdW5jdGlvbihkYXRhUG9pbnQsaW5kZXgpe1xuXHRcdFx0XHRcdC8vQWRkIGEgbmV3IHBvaW50IGZvciBlYWNoIHBpZWNlIG9mIGRhdGEsIHBhc3NpbmcgYW55IHJlcXVpcmVkIGRhdGEgdG8gZHJhdy5cblx0XHRcdFx0XHR2YXIgcG9pbnRQb3NpdGlvbjtcblx0XHRcdFx0XHRpZiAoIXRoaXMuc2NhbGUuYW5pbWF0aW9uKXtcblx0XHRcdFx0XHRcdHBvaW50UG9zaXRpb24gPSB0aGlzLnNjYWxlLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIHRoaXMuc2NhbGUuY2FsY3VsYXRlQ2VudGVyT2Zmc2V0KGRhdGFQb2ludCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhc2V0T2JqZWN0LnBvaW50cy5wdXNoKG5ldyB0aGlzLlBvaW50Q2xhc3Moe1xuXHRcdFx0XHRcdFx0dmFsdWUgOiBkYXRhUG9pbnQsXG5cdFx0XHRcdFx0XHRsYWJlbCA6IGRhdGEubGFiZWxzW2luZGV4XSxcblx0XHRcdFx0XHRcdGRhdGFzZXRMYWJlbDogZGF0YXNldC5sYWJlbCxcblx0XHRcdFx0XHRcdHg6ICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSA/IHRoaXMuc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueCxcblx0XHRcdFx0XHRcdHk6ICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSA/IHRoaXMuc2NhbGUueUNlbnRlciA6IHBvaW50UG9zaXRpb24ueSxcblx0XHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5wb2ludFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRcdFx0ZmlsbENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0RmlsbCA6IGRhdGFzZXQucG9pbnRIaWdobGlnaHRGaWxsIHx8IGRhdGFzZXQucG9pbnRDb2xvcixcblx0XHRcdFx0XHRcdGhpZ2hsaWdodFN0cm9rZSA6IGRhdGFzZXQucG9pbnRIaWdobGlnaHRTdHJva2UgfHwgZGF0YXNldC5wb2ludFN0cm9rZUNvbG9yXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdH0sXG5cdFx0ZWFjaFBvaW50cyA6IGZ1bmN0aW9uKGNhbGxiYWNrKXtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsY2FsbGJhY2ssdGhpcyk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdH0sXG5cblx0XHRnZXRQb2ludHNBdEV2ZW50IDogZnVuY3Rpb24oZXZ0KXtcblx0XHRcdHZhciBtb3VzZVBvc2l0aW9uID0gaGVscGVycy5nZXRSZWxhdGl2ZVBvc2l0aW9uKGV2dCksXG5cdFx0XHRcdGZyb21DZW50ZXIgPSBoZWxwZXJzLmdldEFuZ2xlRnJvbVBvaW50KHtcblx0XHRcdFx0XHR4OiB0aGlzLnNjYWxlLnhDZW50ZXIsXG5cdFx0XHRcdFx0eTogdGhpcy5zY2FsZS55Q2VudGVyXG5cdFx0XHRcdH0sIG1vdXNlUG9zaXRpb24pO1xuXG5cdFx0XHR2YXIgYW5nbGVQZXJJbmRleCA9IChNYXRoLlBJICogMikgL3RoaXMuc2NhbGUudmFsdWVzQ291bnQsXG5cdFx0XHRcdHBvaW50SW5kZXggPSBNYXRoLnJvdW5kKChmcm9tQ2VudGVyLmFuZ2xlIC0gTWF0aC5QSSAqIDEuNSkgLyBhbmdsZVBlckluZGV4KSxcblx0XHRcdFx0YWN0aXZlUG9pbnRzQ29sbGVjdGlvbiA9IFtdO1xuXG5cdFx0XHQvLyBJZiB3ZSdyZSBhdCB0aGUgdG9wLCBtYWtlIHRoZSBwb2ludEluZGV4IDAgdG8gZ2V0IHRoZSBmaXJzdCBvZiB0aGUgYXJyYXkuXG5cdFx0XHRpZiAocG9pbnRJbmRleCA+PSB0aGlzLnNjYWxlLnZhbHVlc0NvdW50IHx8IHBvaW50SW5kZXggPCAwKXtcblx0XHRcdFx0cG9pbnRJbmRleCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmcm9tQ2VudGVyLmRpc3RhbmNlIDw9IHRoaXMuc2NhbGUuZHJhd2luZ0FyZWEpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0YWN0aXZlUG9pbnRzQ29sbGVjdGlvbi5wdXNoKGRhdGFzZXQucG9pbnRzW3BvaW50SW5kZXhdKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhY3RpdmVQb2ludHNDb2xsZWN0aW9uO1xuXHRcdH0sXG5cblx0XHRidWlsZFNjYWxlIDogZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IENoYXJ0LlJhZGlhbFNjYWxlKHtcblx0XHRcdFx0ZGlzcGxheTogdGhpcy5vcHRpb25zLnNob3dTY2FsZSxcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U3R5bGUsXG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250Q29sb3IsXG5cdFx0XHRcdHNob3dMYWJlbHM6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dMYWJlbHMsXG5cdFx0XHRcdHNob3dMYWJlbEJhY2tkcm9wOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxCYWNrZHJvcCxcblx0XHRcdFx0YmFja2Ryb3BDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlQmFja2Ryb3BDb2xvcixcblx0XHRcdFx0YmFja2Ryb3BQYWRkaW5nWSA6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1ksXG5cdFx0XHRcdGJhY2tkcm9wUGFkZGluZ1g6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1gsXG5cdFx0XHRcdGxpbmVXaWR0aDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dMaW5lKSA/IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRhbmdsZUxpbmVDb2xvciA6IHRoaXMub3B0aW9ucy5hbmdsZUxpbmVDb2xvcixcblx0XHRcdFx0YW5nbGVMaW5lV2lkdGggOiAodGhpcy5vcHRpb25zLmFuZ2xlU2hvd0xpbmVPdXQpID8gdGhpcy5vcHRpb25zLmFuZ2xlTGluZVdpZHRoIDogMCxcblx0XHRcdFx0Ly8gUG9pbnQgbGFiZWxzIGF0IHRoZSBlZGdlIG9mIGVhY2ggbGluZVxuXHRcdFx0XHRwb2ludExhYmVsRm9udENvbG9yIDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250Q29sb3IsXG5cdFx0XHRcdHBvaW50TGFiZWxGb250U2l6ZSA6IHRoaXMub3B0aW9ucy5wb2ludExhYmVsRm9udFNpemUsXG5cdFx0XHRcdHBvaW50TGFiZWxGb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250RmFtaWx5LFxuXHRcdFx0XHRwb2ludExhYmVsRm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250U3R5bGUsXG5cdFx0XHRcdGhlaWdodCA6IHRoaXMuY2hhcnQuaGVpZ2h0LFxuXHRcdFx0XHR3aWR0aDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5Q2VudGVyOiB0aGlzLmNoYXJ0LmhlaWdodC8yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmc6IHRoaXMub3B0aW9ucy5zY2FsZUxhYmVsLFxuXHRcdFx0XHRsYWJlbHM6IGRhdGEubGFiZWxzLFxuXHRcdFx0XHR2YWx1ZXNDb3VudDogZGF0YS5kYXRhc2V0c1swXS5kYXRhLmxlbmd0aFxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuc2NhbGUuc2V0U2NhbGVTaXplKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZVNjYWxlUmFuZ2UoZGF0YS5kYXRhc2V0cyk7XG5cdFx0XHR0aGlzLnNjYWxlLmJ1aWxkWUxhYmVscygpO1xuXHRcdH0sXG5cdFx0dXBkYXRlU2NhbGVSYW5nZTogZnVuY3Rpb24oZGF0YXNldHMpe1xuXHRcdFx0dmFyIHZhbHVlc0FycmF5ID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB0b3RhbERhdGFBcnJheSA9IFtdO1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldHMsZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0aWYgKGRhdGFzZXQuZGF0YSl7XG5cdFx0XHRcdFx0XHR0b3RhbERhdGFBcnJheSA9IHRvdGFsRGF0YUFycmF5LmNvbmNhdChkYXRhc2V0LmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LnBvaW50cywgZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0XHR0b3RhbERhdGFBcnJheS5wdXNoKHBvaW50LnZhbHVlKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0b3RhbERhdGFBcnJheTtcblx0XHRcdH0pKCk7XG5cblxuXHRcdFx0dmFyIHNjYWxlU2l6ZXMgPSAodGhpcy5vcHRpb25zLnNjYWxlT3ZlcnJpZGUpID9cblx0XHRcdFx0e1xuXHRcdFx0XHRcdHN0ZXBzOiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwcyxcblx0XHRcdFx0XHRzdGVwVmFsdWU6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBXaWR0aCxcblx0XHRcdFx0XHRtaW46IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUsXG5cdFx0XHRcdFx0bWF4OiB0aGlzLm9wdGlvbnMuc2NhbGVTdGFydFZhbHVlICsgKHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzICogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoKVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0aGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdHZhbHVlc0FycmF5LFxuXHRcdFx0XHRcdGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLzIsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlQmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlSW50ZWdlcnNPbmx5XG5cdFx0XHRcdCk7XG5cblx0XHRcdGhlbHBlcnMuZXh0ZW5kKFxuXHRcdFx0XHR0aGlzLnNjYWxlLFxuXHRcdFx0XHRzY2FsZVNpemVzXG5cdFx0XHQpO1xuXG5cdFx0fSxcblx0XHRhZGREYXRhIDogZnVuY3Rpb24odmFsdWVzQXJyYXksbGFiZWwpe1xuXHRcdFx0Ly9NYXAgdGhlIHZhbHVlcyBhcnJheSBmb3IgZWFjaCBvZiB0aGUgZGF0YXNldHNcblx0XHRcdHRoaXMuc2NhbGUudmFsdWVzQ291bnQrKztcblx0XHRcdGhlbHBlcnMuZWFjaCh2YWx1ZXNBcnJheSxmdW5jdGlvbih2YWx1ZSxkYXRhc2V0SW5kZXgpe1xuXHRcdFx0XHR2YXIgcG9pbnRQb3NpdGlvbiA9IHRoaXMuc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbih0aGlzLnNjYWxlLnZhbHVlc0NvdW50LCB0aGlzLnNjYWxlLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh2YWx1ZSkpO1xuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0dmFsdWUgOiB2YWx1ZSxcblx0XHRcdFx0XHRsYWJlbCA6IGxhYmVsLFxuXHRcdFx0XHRcdHg6IHBvaW50UG9zaXRpb24ueCxcblx0XHRcdFx0XHR5OiBwb2ludFBvc2l0aW9uLnksXG5cdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRTdHJva2VDb2xvcixcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRDb2xvclxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnNjYWxlLmxhYmVscy5wdXNoKGxhYmVsKTtcblxuXHRcdFx0dGhpcy5yZWZsb3coKTtcblxuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdHJlbW92ZURhdGEgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zY2FsZS52YWx1ZXNDb3VudC0tO1xuXHRcdFx0dGhpcy5zY2FsZS5sYWJlbHMuc2hpZnQoKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRkYXRhc2V0LnBvaW50cy5zaGlmdCgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHRoaXMucmVmbG93KCk7XG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCl7XG5cdFx0XHRcdHBvaW50LnNhdmUoKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRyZWZsb3c6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLnNjYWxlLCB7XG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0c2l6ZSA6IGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLFxuXHRcdFx0XHR4Q2VudGVyOiB0aGlzLmNoYXJ0LndpZHRoLzIsXG5cdFx0XHRcdHlDZW50ZXI6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cGRhdGVTY2FsZVJhbmdlKHRoaXMuZGF0YXNldHMpO1xuXHRcdFx0dGhpcy5zY2FsZS5zZXRTY2FsZVNpemUoKTtcblx0XHRcdHRoaXMuc2NhbGUuYnVpbGRZTGFiZWxzKCk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZSl7XG5cdFx0XHR2YXIgZWFzZURlY2ltYWwgPSBlYXNlIHx8IDEsXG5cdFx0XHRcdGN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXHRcdFx0dGhpcy5jbGVhcigpO1xuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KCk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXG5cdFx0XHRcdC8vVHJhbnNpdGlvbiBlYWNoIHBvaW50IGZpcnN0IHNvIHRoYXQgdGhlIGxpbmUgYW5kIHBvaW50IGRyYXdpbmcgaXNuJ3Qgb3V0IG9mIHN5bmNcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50LGluZGV4KXtcblx0XHRcdFx0XHRpZiAocG9pbnQuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRwb2ludC50cmFuc2l0aW9uKHRoaXMuc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpbmRleCwgdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQocG9pbnQudmFsdWUpKSwgZWFzZURlY2ltYWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSx0aGlzKTtcblxuXG5cblx0XHRcdFx0Ly9EcmF3IHRoZSBsaW5lIGJldHdlZW4gYWxsIHRoZSBwb2ludHNcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMub3B0aW9ucy5kYXRhc2V0U3Ryb2tlV2lkdGg7XG5cdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGRhdGFzZXQuc3Ryb2tlQ29sb3I7XG5cdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50LGluZGV4KXtcblx0XHRcdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhwb2ludC54LHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSx0aGlzKTtcblx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGRhdGFzZXQuZmlsbENvbG9yO1xuXHRcdFx0XHRjdHguZmlsbCgpO1xuXG5cdFx0XHRcdC8vTm93IGRyYXcgdGhlIHBvaW50cyBvdmVyIHRoZSBsaW5lXG5cdFx0XHRcdC8vQSBsaXR0bGUgaW5lZmZpY2llbnQgZG91YmxlIGxvb3BpbmcsIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgbGluZVxuXHRcdFx0XHQvL2xhZ2dpbmcgYmVoaW5kIHRoZSBwb2ludCBwb3NpdGlvbnNcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50KXtcblx0XHRcdFx0XHRpZiAocG9pbnQuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRwb2ludC5kcmF3KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0fSx0aGlzKTtcblxuXHRcdH1cblxuXHR9KTtcblxuXG5cblxuXG59KS5jYWxsKHRoaXMpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9jaGFydC5qcy9DaGFydC5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n"); /***/ }) -/******/ ]);
\ No newline at end of file + +/******/ });
\ No newline at end of file diff --git a/resources/assets/js/admin.js b/resources/assets/js/admin.js index 01f2240..508e2c6 100644 --- a/resources/assets/js/admin.js +++ b/resources/assets/js/admin.js @@ -1,18 +1,654 @@ -require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery/dist/jquery.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery-ui/jquery-ui.min.js"); +window.$ = window.jQuery = require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery/dist/jquery.min.js"); require("../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap/dist/js/bootstrap.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/raphael/raphael.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/morris.js/morris.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js"); +require("../../../vendor/almasaeed2010/adminlte/bower_components/fastclick/lib/fastclick.js"); +require("../../../vendor/almasaeed2010/adminlte/dist/js/adminlte.min.js"); require("../../../vendor/almasaeed2010/adminlte/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"); require("../../../vendor/almasaeed2010/adminlte/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery-knob/dist/jquery.knob.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/moment/min/moment.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"); -require("../../../vendor/almasaeed2010/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"); require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"); -require("../../../vendor/almasaeed2010/adminlte/bower_components/fastclick/lib/fastclick.js"); -require("../../../vendor/almasaeed2010/adminlte/dist/js/adminlte.min.js"); -require("../../../vendor/almasaeed2010/adminlte/dist/js/pages/dashboard.js"); -require("../../../vendor/almasaeed2010/adminlte/dist/dist/js/demo.js"); // TODO: Own script :D
\ No newline at end of file +window.Chart = require("../../../vendor/almasaeed2010/adminlte/bower_components/chart.js/Chart.js"); + + +$(function () { + 'use strict'; + /* ChartJS + * ------- + * Charts + */ + + // sales example chart + var salesChartCanvas = $('#salesChart').get(0).getContext('2d'); + var salesChart = new Chart(salesChartCanvas); + var salesChartData = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'Electronics', + fillColor: 'rgb(210, 214, 222)', + strokeColor: 'rgb(210, 214, 222)', + pointColor: 'rgb(210, 214, 222)', + pointStrokeColor: '#c1c7d1', + pointHighlightFill: '#fff', + pointHighlightStroke: 'rgb(220,220,220)', + data: [65, 59, 80, 81, 56, 55, 40] + }, + { + label: 'Digital Goods', + fillColor: 'rgba(60,141,188,0.9)', + strokeColor: 'rgba(60,141,188,0.8)', + pointColor: '#3b8bba', + pointStrokeColor: 'rgba(60,141,188,1)', + pointHighlightFill: '#fff', + pointHighlightStroke: 'rgba(60,141,188,1)', + data: [28, 48, 40, 19, 86, 27, 90] + } + ] + }; + var salesChartOptions = { + showScale: true, + scaleShowGridLines: false, + scaleGridLineColor: 'rgba(0,0,0,.05)', + scaleGridLineWidth: 1, + scaleShowHorizontalLines: true, + scaleShowVerticalLines: true, + bezierCurve: true, + bezierCurveTension: 0.3, + pointDot: false, + pointDotRadius: 4, + pointDotStrokeWidth: 1, + pointHitDetectionRadius: 20, + datasetStroke: true, + datasetStrokeWidth: 2, + datasetFill: true, + legendTemplate: '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\'background-color:<%=datasets[i].lineColor%>\'></span><%=datasets[i].label%></li><%}%></ul>', + maintainAspectRatio: true, + responsive: true + }; + salesChart.Line(salesChartData, salesChartOptions); + + // ------------- + // - PIE CHART - + // ------------- + var pieChartCanvas = $('#pieChart').get(0).getContext('2d'); + var pieChart = new Chart(pieChartCanvas); + var PieData = [{ + value: 700, + color: '#f56954', + highlight: '#f56954', + label: 'Chrome' + }, + { + value: 500, + color: '#00a65a', + highlight: '#00a65a', + label: 'IE' + }, + { + value: 400, + color: '#f39c12', + highlight: '#f39c12', + label: 'FireFox' + }, + { + value: 600, + color: '#00c0ef', + highlight: '#00c0ef', + label: 'Safari' + }, + { + value: 300, + color: '#3c8dbc', + highlight: '#3c8dbc', + label: 'Opera' + }, + { + value: 100, + color: '#d2d6de', + highlight: '#d2d6de', + label: 'Navigator' + } + ]; + var pieOptions = { + segmentShowStroke: true, + segmentStrokeColor: '#fff', + segmentStrokeWidth: 1, + percentageInnerCutout: 50, + animationSteps: 100, + animationEasing: 'easeOutBounce', + animateRotate: true, + animateScale: false, + responsive: true, + maintainAspectRatio: false, + legendTemplate: '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<segments.length; i++){%><li><span style=\'background-color:<%=segments[i].fillColor%>\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>', + tooltipTemplate: '<%=value %> <%=label%> users' + }; + pieChart.Doughnut(PieData, pieOptions); + + + /* jVector Maps + * ------------ + * Create a world map with markers + */ + $('#world-map-markers').vectorMap({ + map: 'world_mill_en', + normalizeFunction: 'polynomial', + hoverOpacity: 0.7, + hoverColor: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: 'rgba(210, 214, 222, 1)', + 'fill-opacity': 1, + stroke: 'none', + 'stroke-width': 0, + 'stroke-opacity': 1 + }, + hover: { + 'fill-opacity': 0.7, + cursor: 'pointer' + }, + selected: { + fill: 'yellow' + }, + selectedHover: {} + }, + markerStyle: { + initial: { + fill: '#00a65a', + stroke: '#111' + } + }, + markers: [{ + latLng: [41.90, 12.45], + name: 'Vatican City' + }, + { + latLng: [43.73, 7.41], + name: 'Monaco' + }, + { + latLng: [-0.52, 166.93], + name: 'Nauru' + }, + { + latLng: [-8.51, 179.21], + name: 'Tuvalu' + }, + { + latLng: [43.93, 12.46], + name: 'San Marino' + }, + { + latLng: [47.14, 9.52], + name: 'Liechtenstein' + }, + { + latLng: [7.11, 171.06], + name: 'Marshall Islands' + }, + { + latLng: [17.3, -62.73], + name: 'Saint Kitts and Nevis' + }, + { + latLng: [3.2, 73.22], + name: 'Maldives' + }, + { + latLng: [35.88, 14.5], + name: 'Malta' + }, + { + latLng: [12.05, -61.75], + name: 'Grenada' + }, + { + latLng: [13.16, -61.23], + name: 'Saint Vincent and the Grenadines' + }, + { + latLng: [13.16, -59.55], + name: 'Barbados' + }, + { + latLng: [17.11, -61.85], + name: 'Antigua and Barbuda' + }, + { + latLng: [-4.61, 55.45], + name: 'Seychelles' + }, + { + latLng: [7.35, 134.46], + name: 'Palau' + }, + { + latLng: [42.5, 1.51], + name: 'Andorra' + }, + { + latLng: [14.01, -60.98], + name: 'Saint Lucia' + }, + { + latLng: [6.91, 158.18], + name: 'Federated States of Micronesia' + }, + { + latLng: [1.3, 103.8], + name: 'Singapore' + }, + { + latLng: [1.46, 173.03], + name: 'Kiribati' + }, + { + latLng: [-21.13, -175.2], + name: 'Tonga' + }, + { + latLng: [15.3, -61.38], + name: 'Dominica' + }, + { + latLng: [-20.2, 57.5], + name: 'Mauritius' + }, + { + latLng: [26.02, 50.55], + name: 'Bahrain' + }, + { + latLng: [0.33, 6.73], + name: 'São Tomé and Príncipe' + } + ] + }); +}); + + + +//---------------------------------------------------------END OF CHARTS------------------------------------------------------ + + +/** + * AdminLTE Demo Menu + * ------------------ + * You should not use this file in production. + * This file is for demo purposes only. + */ +$(function () { + 'use strict'; + + /** + * Get access to plugins + */ + + $('[data-toggle="control-sidebar"]').controlSidebar() + $('[data-toggle="push-menu"]').pushMenu() + + var $pushMenu = $('[data-toggle="push-menu"]').data('lte.pushmenu') + var $controlSidebar = $('[data-toggle="control-sidebar"]').data('lte.controlsidebar') + var $layout = $('body').data('lte.layout') + + /** + * List of all the available skins + * + * @type Array + */ + var mySkins = [ + 'skin-blue', + 'skin-black', + 'skin-red', + 'skin-yellow', + 'skin-purple', + 'skin-green', + 'skin-blue-light', + 'skin-black-light', + 'skin-red-light', + 'skin-yellow-light', + 'skin-purple-light', + 'skin-green-light' + ] + + /** + * Get a prestored setting + * + * @param String name Name of of the setting + * @returns String The value of the setting | null + */ + function get(name) { + if (typeof (Storage) !== 'undefined') { + return localStorage.getItem(name) + } else { + window.alert('Please use a modern browser to properly view this template!') + } + } + + /** + * Store a new settings in the browser + * + * @param String name Name of the setting + * @param String val Value of the setting + * @returns void + */ + function store(name, val) { + if (typeof (Storage) !== 'undefined') { + localStorage.setItem(name, val) + } else { + window.alert('Please use a modern browser to properly view this template!') + } + } + + /** + * Toggles layout classes + * + * @param String cls the layout class to toggle + * @returns void + */ + function changeLayout(cls) { + $('body').toggleClass(cls) + $layout.fixSidebar() + if ($('body').hasClass('fixed') && cls == 'fixed') { + $pushMenu.expandOnHover() + $layout.activate() + } + $controlSidebar.fix() + } + + /** + * Replaces the old skin with the new skin + * @param String cls the new skin class + * @returns Boolean false to prevent link's default action + */ + function changeSkin(cls) { + $.each(mySkins, function (i) { + $('body').removeClass(mySkins[i]) + }) + + $('body').addClass(cls) + store('skin', cls) + return false + } + + /** + * Retrieve default settings and apply them to the template + * + * @returns void + */ + function setup() { + var tmp = get('skin') + if (tmp && $.inArray(tmp, mySkins)) + changeSkin(tmp) + + // Add the change skin listener + $('[data-skin]').on('click', function (e) { + if ($(this).hasClass('knob')) + return + e.preventDefault() + changeSkin($(this).data('skin')) + }) + + // Add the layout manager + $('[data-layout]').on('click', function () { + changeLayout($(this).data('layout')) + }) + + $('[data-controlsidebar]').on('click', function () { + changeLayout($(this).data('controlsidebar')) + var slide = !$controlSidebar.options.slide + + $controlSidebar.options.slide = slide + if (!slide) + $('.control-sidebar').removeClass('control-sidebar-open') + }) + + $('[data-sidebarskin="toggle"]').on('click', function () { + var $sidebar = $('.control-sidebar') + if ($sidebar.hasClass('control-sidebar-dark')) { + $sidebar.removeClass('control-sidebar-dark') + $sidebar.addClass('control-sidebar-light') + } else { + $sidebar.removeClass('control-sidebar-light') + $sidebar.addClass('control-sidebar-dark') + } + }) + + $('[data-enable="expandOnHover"]').on('click', function () { + $(this).attr('disabled', true) + $pushMenu.expandOnHover() + if (!$('body').hasClass('sidebar-collapse')) + $('[data-layout="sidebar-collapse"]').click() + }) + + // Reset options + if ($('body').hasClass('fixed')) { + $('[data-layout="fixed"]').attr('checked', 'checked') + } + if ($('body').hasClass('layout-boxed')) { + $('[data-layout="layout-boxed"]').attr('checked', 'checked') + } + if ($('body').hasClass('sidebar-collapse')) { + $('[data-layout="sidebar-collapse"]').attr('checked', 'checked') + } + + } + + // Create the new tab + var $tabPane = $('<div />', { + 'id': 'control-sidebar-theme-demo-options-tab', + 'class': 'tab-pane active' + }) + + // Create the tab button + var $tabButton = $('<li />', { + 'class': 'active' + }) + .html('<a href=\'#control-sidebar-theme-demo-options-tab\' data-toggle=\'tab\'>' + + '<i class="fa fa-wrench"></i>' + + '</a>') + + // Add the tab button to the right sidebar tabs + $('[href="#control-sidebar-home-tab"]') + .parent() + .before($tabButton) + + // Create the menu + var $demoSettings = $('<div />') + + // Layout options + $demoSettings.append( + '<h4 class="control-sidebar-heading">' + + 'Layout Options' + + '</h4>' + // Fixed layout + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-layout="fixed"class="pull-right"/> ' + + 'Fixed layout' + + '</label>' + + '<p>Activate the fixed layout. You can\'t use fixed and boxed layouts together</p>' + + '</div>' + // Boxed layout + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-layout="layout-boxed" class="pull-right"/> ' + + 'Boxed Layout' + + '</label>' + + '<p>Activate the boxed layout</p>' + + '</div>' + // Sidebar Toggle + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-layout="sidebar-collapse"class="pull-right"/> ' + + 'Toggle Sidebar' + + '</label>' + + '<p>Toggle the left sidebar\'s state (open or collapse)</p>' + + '</div>' + // Sidebar mini expand on hover toggle + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-enable="expandOnHover"class="pull-right"/> ' + + 'Sidebar Expand on Hover' + + '</label>' + + '<p>Let the sidebar mini expand on hover</p>' + + '</div>' + // Control Sidebar Toggle + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-controlsidebar="control-sidebar-open"class="pull-right"/> ' + + 'Toggle Right Sidebar Slide' + + '</label>' + + '<p>Toggle between slide over content and push content effects</p>' + + '</div>' + // Control Sidebar Skin Toggle + + + '<div class="form-group">' + + '<label class="control-sidebar-subheading">' + + '<input type="checkbox"data-sidebarskin="toggle"class="pull-right"/> ' + + 'Toggle Right Sidebar Skin' + + '</label>' + + '<p>Toggle between dark and light skins for the right sidebar</p>' + + '</div>' + ) + var $skinsList = $('<ul />', { + 'class': 'list-unstyled clearfix' + }) + + // Dark sidebar skins + var $skinBlue = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Blue</p>') + $skinsList.append($skinBlue) + var $skinBlack = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-black" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Black</p>') + $skinsList.append($skinBlack) + var $skinPurple = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-purple" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Purple</p>') + $skinsList.append($skinPurple) + var $skinGreen = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-green" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Green</p>') + $skinsList.append($skinGreen) + var $skinRed = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-red" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Red</p>') + $skinsList.append($skinRed) + var $skinYellow = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-yellow" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin">Yellow</p>') + $skinsList.append($skinYellow) + + // Light sidebar skins + var $skinBlueLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-blue-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Blue Light</p>') + $skinsList.append($skinBlueLight) + var $skinBlackLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-black-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Black Light</p>') + $skinsList.append($skinBlackLight) + var $skinPurpleLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-purple-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Purple Light</p>') + $skinsList.append($skinPurpleLight) + var $skinGreenLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-green-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Green Light</p>') + $skinsList.append($skinGreenLight) + var $skinRedLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-red-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Red Light</p>') + $skinsList.append($skinRedLight) + var $skinYellowLight = + $('<li />', { + style: 'float:left; width: 33.33333%; padding: 5px;' + }) + .append('<a href="javascript:void(0)" data-skin="skin-yellow-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">' + + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>' + + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>' + + '</a>' + + '<p class="text-center no-margin" style="font-size: 12px">Yellow Light</p>') + $skinsList.append($skinYellowLight) + + $demoSettings.append('<h4 class="control-sidebar-heading">Skins</h4>') + $demoSettings.append($skinsList) + + $tabPane.append($demoSettings) + $('#control-sidebar-home-tab').after($tabPane) + + setup() + + $('[data-toggle="tooltip"]').tooltip() +})
\ No newline at end of file diff --git a/resources/assets/sass/admin.scss b/resources/assets/sass/admin.scss index 5d47872..146b90f 100644 --- a/resources/assets/sass/admin.scss +++ b/resources/assets/sass/admin.scss @@ -1,10 +1,10 @@ @import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap/dist/css/bootstrap.min.css"; @import "../../../vendor/almasaeed2010/adminlte/bower_components/font-awesome/css/font-awesome.min.css"; @import "../../../vendor/almasaeed2010/adminlte/bower_components/Ionicons/css/ionicons.min.css"; +@import "../../../vendor/almasaeed2010/adminlte/bower_components/jvectormap/jquery-jvectormap.css"; @import "../../../vendor/almasaeed2010/adminlte/dist/css/AdminLTE.min.css"; @import "../../../vendor/almasaeed2010/adminlte/dist/css/skins/_all-skins.min.css"; -@import "../../../vendor/almasaeed2010/adminlte/bower_components/morris.js/morris.css"; -@import "../../../vendor/almasaeed2010/adminlte/bower_components/jvectormap/jquery-jvectormap.css"; -@import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"; -@import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css"; -@import "../../../vendor/almasaeed2010/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css";
\ No newline at end of file +// @import "../../../vendor/almasaeed2010/adminlte/bower_components/morris.js/morris.css"; +// @import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"; +// @import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css"; +// @import "../../../vendor/almasaeed2010/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css";
\ No newline at end of file |